Merge remote-tracking branch 'origin/master' into feature/android

This commit is contained in:
Po Lu 2023-02-23 21:38:41 +08:00
commit e3595debd0
44 changed files with 1182 additions and 431 deletions

View file

@ -69,13 +69,14 @@ idea anyway.
@item
In line with simplifying and eventually removing the
native-compilation option, we've deleted the
@code{inhibit-automatic-native-compilation} variable and its support
code. This greatly simplifies how native compilation works and makes
your configure-time decision regarding native compilation in Emacs
clear-cut: either Emacs always compiles Lisp to native code before
using it, or it never does so; no more half measures and special
exceptions. For similar reasons, @code{native-compile-prune-cache}
and @code{startup-redirect-eln-cache} features are no longer part of
@option{--with-native-compilation=aot} configure-time option. This
greatly simplifies how native compilation works and makes your
configure-time decision regarding native compilation in Emacs
clear-cut: either Emacs compiles non-preloaded Lisp packages to native
code only before using it, or it never uses native compilation at all;
no more half measures and special exceptions. For similar reasons,
@code{native-compile-prune-cache} and
@code{startup-redirect-eln-cache} features are no longer part of
Emacs.
@item

View file

@ -1402,7 +1402,11 @@ right-to-left paragraphs.
functionality especially in @code{prog-mode} and its descendants
(@pxref{Major Modes}) to indicate the position of a specific column
that has some special meaning for formatting the source code of a
program.
program. This assumes the buffer uses a fixed-pitch font, where all
the characters (with the possible exception of double-width
characters) have the same width on display. If the buffer uses
variable-pitch fonts, the fill-column indicators on different lines
might appear unaligned.
To activate the fill-column indication display, use the minor modes
@code{display-fill-@-column-indicator-mode} and

View file

@ -623,7 +623,12 @@ variable @code{fill-column}. The default value (@pxref{Locals}) is
is to use the command @kbd{C-x f} (@code{set-fill-column}). With a
numeric argument, it uses that as the new fill column. With just
@kbd{C-u} as argument, it sets @code{fill-column} to the current
horizontal position of point.
horizontal position of point. Note that, by its very nature,
@code{fill-column} is measured in column units; the actual position of
that column on a graphical display depends on the font being used. In
particular, using variable-pitch fonts will cause the
@code{fill-column} occupy different horizontal positions on display in
different lines.
@cindex centering
@findex center-line

View file

@ -288,16 +288,16 @@ is about to run.
@findex vc-prepare-patch
When collaborating on projects it is common to send patches via email,
to share changes. If you wish to do this using VC, you can use the
to share changes. You can do this using VC with the
@code{vc-prepare-patch} command. This will prompt you for the
revisions you wish to share, and which destination email address(es)
to use. The revisions are separated using commas (or whatever was
configured by @var{crm-separator}). The command will then prepare
to use. Separate the revisions using the value of
@var{crm-separator}, commas by default. The command will then prepare
those revisions using your @abbr{MUA, Mail User Agent} for you to
review and send.
When invoked interactively in a Log View buffer with marked revisions,
these revisions will be used.
those marked revisions will be used.
@vindex vc-prepare-patches-separately
Depending on the value of the user option

View file

@ -310,8 +310,8 @@ the space that it occupied is given to an adjacent window (but not the
minibuffer window, even if that is active at the time). Deleting the
window has no effect on the buffer it used to display; the buffer
continues to exist, and you can still switch to it with @kbd{C-x b}.
The option @code{delete-window-choose-selected} allows to choose which
window becomes the new selected window instead (@pxref{Deleting
The option @code{delete-window-choose-selected} controls which
window is chosen as the new selected window instead (@pxref{Deleting
Windows,,, elisp, The Emacs Lisp Reference Manual}).
@findex kill-buffer-and-window

View file

@ -2655,8 +2655,9 @@ like that of @code{frame-title-format}. The value can also be
avoids problems with some window managers and desktop environments,
where a change in a frame's title (when a frame is iconified) is
interpreted as a request to raise the frame and/or give it input
focus. The default is a string identical to the default value of
@code{frame-title-format}.
focus. It is also useful if you want the frame's title to be the same
no matter if the frame is iconified or not. The default value is a
string identical to the default value of @code{frame-title-format}.
@end defvar
@defvar multiple-frames

View file

@ -502,6 +502,15 @@ project. The command @kbd{M-x eglot-code-actions} will pop up a menu
of code applicable actions at point.
@end table
@item M-x eglot-inlay-hints-mode
This command toggles LSP ``inlay hints'' on and off for the current
buffer. Inlay hints are small text annotations to specific parts of
the whole buffer, not unlike diagnostics, but designed to help
readability instead of indicating problems. For example, a C++ LSP
server can serve hints about positional parameter names in function
calls and a variable's automatically deduced type. Inlay hints help
the user not have to remember these things by heart.
@end itemize
Not all servers support the full set of LSP capabilities, but most of
@ -874,6 +883,14 @@ this map. For example:
(define-key eglot-mode-map (kbd "<f6>") 'xref-find-definitions)
@end lisp
@item eglot-lazy-inlay-hints
This variable controls the operation and performance of LSP Inlay
Hints (@pxref{Eglot Features}). If non-@code{nil}, it specifies how
much time to wait after a window is displayed or scrolled before
requesting hints for that visible portion of a given buffer. If
@code{nil}, inlay hints are always requested for the whole buffer,
even for parts of it not currently visible.
@end vtable
Additional variables, which are relevant for customizing the server

View file

@ -19808,10 +19808,11 @@ locally stored articles.
@chapter Scoring
@cindex scoring
Other people use @dfn{kill files}, but we here at Gnus Towers like
scoring better than killing, so we'd rather switch than fight. They do
something completely different as well, so sit up straight and pay
attention!
Other people use @dfn{kill files} (@pxref{Kill Files}, but we here at
Gnus Towers like scoring better than killing, so we'd rather switch
than fight. Scoring and score files processing are more powerful and
faster than processing of kill files. Scoring also does something
completely different as well, so sit up straight and pay attention!
@vindex gnus-summary-mark-below
All articles have a default score (@code{gnus-summary-default-score}),

View file

@ -4,9 +4,9 @@
#+language: en
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
#+macro: stable-version 4.0.0
#+macro: release-date 2023-01-01
#+macro: development-version 4.1.0-dev
#+macro: stable-version 4.1.0
#+macro: release-date 2023-02-22
#+macro: development-version 4.2.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@ -155,8 +155,8 @@ Emacs and of the themes across the years.
:end:
In the following example, we are assuming that your Emacs files are
stored in =~/.emacs.d= and that you want to place the Modus themes in
=~/.emacs.d/modus-themes=.
stored in {{{file(~/.emacs.d)}}} and that you want to place the Modus
themes in {{{file(~/.emacs.d/modus-themes)}}}.
1. Get the source and store it in the desired path by running the
following in the command line shell:
@ -230,17 +230,17 @@ They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable
:custom_id: h:e6268471-e847-4c9d-998f-49a83257b7f1
:end:
From time to time, we receive bug reports pertaining to errors with byte
compilation. These seldom have to do with faulty code in the themes: it
might be a shortcoming of =package.el=, some regression in the current
development target of Emacs, a misconfiguration in an otherwise exotic
setup, and the like.
From time to time, we receive bug reports pertaining to errors with
byte compilation. These seldom have to do with faulty code in the
themes: it might be a shortcoming of {{{file(package.el)}}}, some
regression in the current development target of Emacs, a
misconfiguration in an otherwise exotic setup, and the like.
The common solution with a stable version of Emacs is to:
1. Delete the =modus-themes= package.
1. Delete the ~modus-themes~ package.
2. Close the current Emacs session.
3. Install the =modus-themes= again.
3. Install the ~modus-themes~ again.
For those building Emacs directly from source, the solution may involve
reverting to an earlier commit in emacs.git.
@ -265,7 +265,7 @@ wrong.
NOTE that Emacs can load multiple themes, which typically produces
undesirable results and undoes the work of the designer. Use the
~disable-theme~ command if you are trying other themes beside the
Modus collection.
Modus collection ([[#h:adb0c49a-f1f9-4690-868b-013a080eed68][Option for disabling other themes while loading Modus]]).
Users of the built-in themes cannot ~require~ the package as usual
because there is no package to speak of. Instead, things are simpler
@ -292,17 +292,18 @@ One can activate a theme with something like the following expression,
replacing ~modus-operandi~ with their preferred Modus theme:
#+begin_src emacs-lisp
(load-theme 'modus-operandi :no-confim)
(load-theme 'modus-operandi :no-confirm)
#+end_src
Changes to the available customization options must always be evaluated
before loading a theme ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]). Reload a theme for
new changes to take effect.
This is how a basic setup could look like:
This is how a basic setup could look like ([[#h:b66b128d-54a4-4265-b59f-4d1ea2feb073][The require-theme for built-in Emacs themes]]):
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require'.
(require-theme 'modus-themes)
;; Add all your customizations prior to loading the themes.
(setq modus-themes-italic-constructs t
@ -326,13 +327,41 @@ This is how a basic setup could look like:
modus-themes-bold-constructs nil)
;; Load the theme of your choice.
(load-theme 'modus-operandi :no-confim)
(load-theme 'modus-operandi :no-confirm)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
#+end_src
[[#h:e979734c-a9e1-4373-9365-0f2cd36107b8][Sample configuration with and without use-package]].
** The ~require-theme~ for built-in Emacs themes
:PROPERTIES:
:CUSTOM_ID: h:b66b128d-54a4-4265-b59f-4d1ea2feb073
:END:
The version of the Modus themes that is included in Emacs CANNOT use
the standard ~require~. This is because the built-in themes are not
included in the ~load-path~ (not my decision). The ~require-theme~
function must be used in this case as a replacement. For example:
#+begin_src emacs-lisp
(require-theme 'modus-themes)
;; All customizations here
(setq modus-themes-bold-constructs t
modus-themes-italic-constructs t)
;; Maybe define some palette overrides, such as by using our presets
(setq modus-themes-common-palette-overrides
modus-themes-preset-overrides-intense)
;; Load the theme of choice (built-in themes are always "safe" so they
;; do not need the `no-require' argument of `load-theme').
(load-theme 'modus-operandi)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
#+end_src
** Sample configuration with and without use-package
:properties:
:custom_id: h:e979734c-a9e1-4373-9365-0f2cd36107b8
@ -349,54 +378,57 @@ package configurations in their setup. We use this as an example:
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require'.
(use-package emacs
:init
:config
(require-theme 'modus-themes) ; `require-theme' is ONLY for the built-in Modus themes
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil)
:config
;; Maybe define some palette overrides, such as by using our presets
(setq modus-themes-common-palette-overrides
modus-themes-preset-overrides-intense)
;; Load the theme of your choice.
(load-theme 'modus-operandi)
:bind ("<f5>" . modus-themes-toggle))
(define-key global-map (kbd "<f5>") #'modus-themes-toggle))
;;; For packaged versions which must use `require'.
(use-package modus-themes
:ensure
:init
:ensure t
:config
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil)
:config
;; Maybe define some palette overrides, such as by using our presets
(setq modus-themes-common-palette-overrides
modus-themes-preset-overrides-intense)
;; Load the theme of your choice.
(load-theme 'modus-operandi :no-confim)
:bind ("<f5>" . modus-themes-toggle))
(load-theme 'modus-operandi)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle))
#+end_src
The same without ~use-package~:
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require':
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil)
;; Load the theme of your choice:
(load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
;;; For packaged versions which must use `require':
(require 'modus-themes)
(require 'modus-themes) ; OR for the built-in themes: (require-theme 'modus-themes)
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil)
;; Maybe define some palette overrides, such as by using our presets
(setq modus-themes-common-palette-overrides
modus-themes-preset-overrides-intense)
;; Load the theme of your choice:
(load-theme 'modus-operandi :no-confim) ;; OR (load-theme 'modus-vivendi :no-confim)
(load-theme 'modus-operandi :no-confirm)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
#+end_src
@ -482,6 +514,7 @@ reloaded for changes to take effect.
modus-themes-mixed-fonts t
modus-themes-variable-pitch-ui nil
modus-themes-custom-auto-reload t
modus-themes-disable-other-themes t
;; Options for `modus-themes-prompts' are either nil (the
;; default), or a list of properties that may include any of those
@ -545,6 +578,38 @@ UI or related functions such as ~customize-set-variable~ and ~setopt~
With a nil value, changes to user options have no further consequences:
the user must manually reload the theme ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
** Option for disabling other themes while loading Modus
:properties:
:alt_title: Disable other themes
:description: Determine whether loading a Modus themes disables all others
:custom_id: h:adb0c49a-f1f9-4690-868b-013a080eed68
:end:
#+vindex: modus-themes-disable-other-themes
Brief: Disable all other themes when loading a Modus theme.
Symbol: ~modus-themes-disable-other-themes~ (=boolean= type)
Possible values:
1. ~nil~
2. ~t~ (default)
When the value is non-nil, the commands ~modus-themes-toggle~ and
~modus-themes-select~, as well as the ~modus-themes-load-theme~
function, will disable all other themes while loading the specified
Modus theme. This is done to ensure that Emacs does not blend two or
more themes: such blends lead to awkward results that undermine the
work of the designer.
When the value is nil, the aforementioned commands and function will
only disable other themes within the Modus collection.
This option is provided because Emacs themes are not necessarily
limited to colors/faces: they can consist of an arbitrary set of
customizations. Users who use such customization bundles must set
this variable to a nil value.
** Option for more bold constructs
:properties:
:alt_title: Bold constructs
@ -707,14 +772,14 @@ Brief: Set the overall style of completion framework interfaces.
Symbol: ~modus-themes-completions~ (=alist= type properties)
This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy, Orderless,
Vertico. The value is an alist of expressions, each of which takes
the form of =(KEY . LIST-OF-PROPERTIES)=. =KEY= is a symbol, while
=PROPERTIES= is a list. Here is a sample, followed by a description
of the particularities:
Vertico, and the standard =*Completions*= buffer. The value is an
alist of expressions, each of which takes the form of =(KEY . LIST-OF-PROPERTIES)=.
=KEY= is a symbol, while =PROPERTIES= is a list. Here is a sample,
followed by a description of the particularities:
#+begin_src emacs-lisp
(setq modus-themes-completions
'((matches . (extrabold background))
'((matches . (extrabold underline))
(selection . (semibold italic))))
#+end_src
@ -984,8 +1049,6 @@ values and semantic color mappings:
given named color from the palette, like =(heading-2 yellow-faint)=.
Both elements of the list are symbols, though the ~cadr~ (value) can
be a string that specifies a color, such as =(heading-2 "#354fcf")=.
Semantic color mappings cannot be recursive: their value must be
either a named color or a hexadecimal RGB value.
#+vindex: modus-themes-common-palette-overrides
Both of those subsets can be overridden, thus refashioning the theme.
@ -1186,9 +1249,18 @@ set their color to that of the underlying background.
;; common overrides are best used for changes to semantic color
;; mappings, as we show below.
;; Remove the border
(setq modus-themes-common-palette-overrides
'((border-mode-line-active unspecified)
(border-mode-line-inactive unspecified)))
;; Keep the border but make it the same color as the background of the
;; mode line (thus appearing borderless). The difference with the
;; above is that this version is a bit thicker because the border are
;; still there.
(setq modus-themes-common-palette-overrides
'((border-mode-line-active bg-mode-line-active)
(border-mode-line-inactive bg-mode-line-inactive)))
#+end_src
**** Make the active mode line colorful
@ -1218,7 +1290,7 @@ have a blue mode line for ~modus-operandi~ and a red one for
;; Blue background, neutral foreground, intense blue border
(setq modus-themes-common-palette-overrides
'((bg-mode-line-active bg-blue)
'((bg-mode-line-active bg-blue-intense)
(fg-mode-line-active fg-main)
(border-mode-line-active blue-intense)))
@ -1235,6 +1307,58 @@ have a blue mode line for ~modus-operandi~ and a red one for
(border-mode-line-active bg-red-subtle)))
#+end_src
**** Make the tab bar more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:096658d7-a0bd-4a99-b6dc-9b20a20cda37
:END:
This is one of our practical examples to override the semantic colors
of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
Here we show how to affect the colors of the built-in ~tab-bar-mode~
and ~tab-line-mode~.
For consistent theme-wide results, consider changing the mode line,
fringes, and line numbers. These are shown in other sections of this
manual.
#+begin_src emacs-lisp
;; These overrides are common to all Modus themes. We also provide
;; theme-specific options, such as `modus-operandi-palette-overrides'.
;;
;; In general, the theme-specific overrides are better for overriding
;; color values, such as redefining what `blue-faint' looks like. The
;; common overrides are best used for changes to semantic color
;; mappings, as we show below.
;; Make the `tab-bar-mode' mode subtle while keepings its original
;; gray aesthetic.
(setq modus-themes-common-palette-overrides
'((bg-tab-bar bg-main)
(bg-tab-current bg-active)
(bg-tab-other bg-dim)))
;; Like the above, but the current tab has a colorful background and
;; the inactive tabs have a slightly more noticeable gray background.
(setq modus-themes-common-palette-overrides
'((bg-tab-bar bg-main)
(bg-tab-current bg-cyan-intense)
(bg-tab-other bg-inactive)))
;; Make the tabs colorful, using a monochromatic pattern (e.g. shades
;; of cyan).
(setq modus-themes-common-palette-overrides
'((bg-tab-bar bg-cyan-nuanced)
(bg-tab-current bg-cyan-intense)
(bg-tab-other bg-cyan-subtle)))
;; Like the above, but with a dichromatic pattern (cyan and magenta).
(setq modus-themes-common-palette-overrides
'((bg-tab-bar bg-cyan-nuanced)
(bg-tab-current bg-magenta-intense)
(bg-tab-other bg-cyan-subtle)))
#+end_src
**** Make the fringe invisible or another color
:PROPERTIES:
:CUSTOM_ID: h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0
@ -1352,7 +1476,8 @@ three different degrees of intensity.
;; mappings, as we show below.
;; Add a nuanced background color to completion matches, while keeping
;; their foreground intact.
;; their foreground intact (foregrounds do not need to be specified in
;; this case, but we do it for didactic purposes).
(setq modus-themes-common-palette-overrides
'((fg-completion-match-0 blue)
(fg-completion-match-1 magenta-warmer)
@ -1893,9 +2018,8 @@ do not show every possible permutation.
(prose-todo red)
(prose-verbatim magenta-warmer)))
;; Make code block delimiters use a shade of red, tone down
;; =verbatim=, ~code~, and {{{macro}}}, and amplify the style of
;; property drawers
;; Make code block delimiters use a shade of red, tone down verbatim,
;; code, and macro, and amplify the style of property drawers
(setq modus-themes-common-palette-overrides
'((prose-block red-faint)
(prose-code fg-dim)
@ -1995,6 +2119,8 @@ Here we show how to make the region respect the underlying text colors
or how to make the background more/less intense while combining it
with an appropriate foreground value.
[[#h:a5140c9c-18b2-45db-8021-38d0b5074116][Do not extend the region background]].
#+begin_src emacs-lisp
;; These overrides are common to all Modus themes. We also provide
;; theme-specific options, such as `modus-operandi-palette-overrides'.
@ -2126,6 +2252,121 @@ this section we show how to affect the ~display-line-numbers-mode~.
(bg-line-number-active bg-cyan-intense)))
#+end_src
**** Make diffs use only a foreground
:PROPERTIES:
:CUSTOM_ID: h:b3761482-bcbf-4990-a41e-4866fb9dad15
:END:
This is one of our practical examples to override the semantic colors
of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
this section we show how to change diff buffers (e.g. in ~magit~) to
only use color-coded text without any added background. What we
basically do is to disable the applicable backgrounds and then
intensify the foregrounds. Since the deuteranopia-optimized themes do
not use the red-green color coding, we make an extra set of
adjustments for them by overriding their palettes directly instead of
just using the "common" overrides.
#+begin_src emacs-lisp
;; Diffs with only foreground colours. Word-wise ("refined") diffs
;; have a gray background to draw attention to themselves.
(setq modus-themes-common-palette-overrides
'((bg-added unspecified)
(bg-added-faint unspecified)
(bg-added-refine bg-inactive)
(fg-added green)
(fg-added-intense green-intense)
(bg-changed unspecified)
(bg-changed-faint unspecified)
(bg-changed-refine bg-inactive)
(fg-changed yellow)
(fg-changed-intense yellow-intense)
(bg-removed unspecified)
(bg-removed-faint unspecified)
(bg-removed-refine bg-inactive)
(fg-removed red)
(fg-removed-intense red-intense)
(bg-diff-context unspecified)))
;; Because deuteranopia cannot use the typical red-yellow-green
;; combination, we need to arrange for a yellow-purple-blue sequence.
;; Notice that the above covers the "common" overrides, so we do not
;; need to reproduce the whole list of them.
(setq modus-operandi-deuteranopia-palette-overrides
'((fg-added blue)
(fg-added-intense blue-intense)
(fg-changed magenta-cooler)
(fg-changed-intense magenta-intense)
(fg-removed yellow-warmer)
(fg-removed-intense yellow-intense)))
(setq modus-vivendi-deuteranopia-palette-overrides
'((fg-added blue)
(fg-added-intense blue-intense)
(fg-changed magenta-cooler)
(fg-changed-intense magenta-intense)
(fg-removed yellow)
(fg-removed-intense yellow-intense)))
#+end_src
**** Make deuteranopia diffs red and blue instead of yellow and blue
:PROPERTIES:
:CUSTOM_ID: h:16389ea1-4cb6-4b18-9409-384324113541
:END:
This is one of our practical examples to override the semantic colors
of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
this section we show how to implement a red+blue color coding for
diffs in the themes ~modus-operandi-deuteranopia~ and
~modus-vivendi-deuteranopia~. As those themes are optimized for users
with red-green color deficiency, they do not use the typical red+green
color coding for diffs, defaulting instead to yellow+blue which are
discernible. Users with deuteranomaly or, generally, those who like a
different aesthetic, can use the following to make diffs use the
red+yellow+blue color coding for removed, changed, and added lines
respectively. This is achieved by overriding the "changed" and
"removed" entries to use the colors of regular ~modus-operandi~ and
~modus-vivendi~.
#+begin_src emacs-lisp
(setq modus-operandi-deuteranopia-palette-overrides
'((bg-changed "#ffdfa9")
(bg-changed-faint "#ffefbf")
(bg-changed-refine "#fac090")
(bg-changed-fringe "#d7c20a")
(fg-changed "#553d00")
(fg-changed-intense "#655000")
(bg-removed "#ffd8d5")
(bg-removed-faint "#ffe9e9")
(bg-removed-refine "#f3b5af")
(bg-removed-fringe "#d84a4f")
(fg-removed "#8f1313")
(fg-removed-intense "#aa2222")))
(setq modus-vivendi-deuteranopia-palette-overrides
'((bg-changed "#363300")
(bg-changed-faint "#2a1f00")
(bg-changed-refine "#4a4a00")
(bg-changed-fringe "#8a7a00")
(fg-changed "#efef80")
(fg-changed-intense "#c0b05f")
(bg-removed "#4f1119")
(bg-removed-faint "#380a0f")
(bg-removed-refine "#781a1f")
(bg-removed-fringe "#b81a1f")
(fg-removed "#ffbfbf")
(fg-removed-intense "#ff9095")))
#+end_src
* Advanced customization
:properties:
:custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
@ -2248,22 +2489,25 @@ xterm*color15: #ffffff
#+cindex: Preview named colors or semantic color mappings
#+findex: modus-themes-list-colors
The command ~modus-themes-list-colors~ uses minibuffer completion to
select an item from the Modus themes and then produces a buffer with
previews of its color palette entries. The buffer has a naming scheme
that reflects the given choice, like =modus-operandi-list-colors= for
the ~modus-operandi~ theme.
#+findex: modus-themes-list-colors-current
The command ~modus-themes-list-colors~ prompts for a choice between
=modus-operandi= and =modus-vivendi= to produce a help buffer that
shows a preview of the named colors in the given theme's palette. The
command ~modus-themes-list-colors-current~ skips the prompt, using the
current Modus theme.
The command ~modus-themes-list-colors-current~ skips the minibuffer
selection process and just produces a preview for the current Modus
theme.
When called with a prefix argument (=C-u= with the default key
bindings), these commands will show a preview of the palette's
semantic color mappings instead of the named colors.
In this context, "named colors" are entries that associate a symbol to
a string color value, such as =(blue-warmer "#354fcf")=. Whereas
"semantic color mappings" associate a named color to a symbol, like
=(string blue-warmer)=, thus making the theme render all string
constructs in the =blue-warmer= color value ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
semantic color mappings instead of the named colors. In this context,
"named colors" are entries that associate a symbol to a string color
value, such as =(blue-warmer "#354fcf")=. Whereas "semantic color
mappings" associate a named color to a symbol, like =(string
blue-warmer)=, thus making the theme render all string constructs in
the =blue-warmer= color value ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
#+findex: modus-themes-preview-colors
#+findex: modus-themes-preview-colors-current
@ -2314,12 +2558,70 @@ equivalent the themes provide.
For a more elaborate design, it is better to inspect the source code of
~modus-themes-toggle~ and relevant functions.
** Get a single color from the palette
:PROPERTIES:
:CUSTOM_ID: h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e
:END:
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
#+findex: modus-themes-get-color-value
The fuction ~modus-themes-get-color-value~ can be called from Lisp to
return the value of a color from the active Modus theme palette. It
takea a =COLOR= argument and an optional =OVERRIDES=.
=COLOR= is a symbol that represents a named color entry in the
palette.
[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]].
If the value is the name of another color entry in the palette (so a
mapping), this function recurs until it finds the underlying color
value.
With an optional =OVERRIDES= argument as a non-nil value, it accounts
for palette overrides. Else it reads only the default palette.
[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
With optional =THEME= as a symbol among ~modus-themes-items~, use the
palette of that item. Else use the current Modus theme.
If =COLOR= is not present in the palette, this function returns the
~unspecified~ symbol, which is safe when used as a face attribute's
value.
An example with ~modus-operandi~ to show how this function behaves
with/without overrides and when recursive mappings are introduced.
#+begin_src emacs-lisp
;; Here we show the recursion of palette mappings. In general, it is
;; better for the user to specify named colors to avoid possible
;; confusion with their configuration, though those still work as
;; expected.
(setq modus-themes-common-palette-overrides
'((cursor red)
(fg-mode-line-active cursor)
(border-mode-line-active fg-mode-line-active)))
;; Ignore the overrides and get the original value.
(modus-themes-get-color-value 'border-mode-line-active)
;; => "#5a5a5a"
;; Read from the overrides and deal with any recursion to find the
;; underlying value.
(modus-themes-get-color-value 'border-mode-line-active :overrides)
;; => "#a60000"
#+end_src
** Use theme colors in code with modus-themes-with-colors
:properties:
:custom_id: h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae
:end:
#+cindex: Use colors from the palette anywhere
[[#h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e][Get a single color from the palette]].
Note that users most probably do not need the following. Just rely on
the comprehensive overrides we provide ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
@ -2354,6 +2656,32 @@ We provide commands to inspect those ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d]
Others sections in this manual show how to use the aforementioned
macro ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).
Because the ~modus-themes-with-colors~ will most likely be used to
customize faces, note that any function that calls it must be run at
startup after the theme loads. The same function must also be
assigned to the ~modus-themes-after-load-theme-hook~ for its effects
to persist and be updated when switching between Modus themes (e.g. to
update the exact value of =blue-warmer= when toggling between
~modus-operandi~ to ~modus-vivendi~.
** Do not extend the region background
:PROPERTIES:
:CUSTOM_ID: h:a5140c9c-18b2-45db-8021-38d0b5074116
:END:
By the default, the background of the ~region~ face extends from the
end of the line to the edge of the window. To limit it to the end of
the line, we need to override the face's =:extend= attribute. Adding
this to the Emacs configuration file will suffice:
#+begin_src emacs-lisp
;; Do not extend `region' background past the end of the line.
(custom-set-faces
'(region ((t :extend nil))))
#+end_src
[[#h:c8605d37-66e1-42aa-986e-d7514c3af6fe][Make the region preserve text colors, plus other styles]].
** Add padding to mode line
:PROPERTIES:
:CUSTOM_ID: h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c
@ -2981,9 +3309,9 @@ While we do provide ~modus-themes-toggle~ to manually switch between the
themes, users may also set up their system to perform such a task
automatically at sunrise and sunset.
This can be accomplished by specifying the coordinates of one's location
using the built-in {{{file(solar.el)}}} and then configuring the =circadian=
package:
This can be accomplished by specifying the coordinates of one's
location using the built-in {{{file(solar.el)}}} and then configuring
the ~circadian~ package:
#+begin_src emacs-lisp
(use-package solar ; built-in
@ -2992,7 +3320,7 @@ package:
calendar-longitude 33.36))
(use-package circadian ; you need to install this
:ensure
:ensure t
:after solar
:config
(setq circadian-themes '((:sunrise . modus-operandi)
@ -3022,9 +3350,10 @@ To remap the buffer's backdrop, we start with a function like this one:
#+begin_src emacs-lisp
(defun my-pdf-tools-backdrop ()
(face-remap-add-relative
'default
`(:background ,(modus-themes-color 'bg-alt))))
(modus-themes-with-colors
(face-remap-add-relative
'default
`(:background ,bg-dim))))
(add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-backdrop)
#+end_src
@ -3043,9 +3372,10 @@ at something like the following, which builds on the above example:
#+begin_src emacs-lisp
(defun my-pdf-tools-backdrop ()
(face-remap-add-relative
'default
`(:background ,(modus-themes-color 'bg-alt))))
(modus-themes-with-colors
(face-remap-add-relative
'default
`(:background ,bg-dim))))
(defun my-pdf-tools-midnight-mode-toggle ()
(when (derived-mode-p 'pdf-view-mode)
@ -3154,11 +3484,12 @@ need to (provided they understand the implications).
:CUSTOM_ID: h:2ef83a21-2f0a-441e-9634-473feb940743
:END:
The =hl-todo= package provides the user option ~hl-todo-keyword-faces~:
it specifies a pair of keyword and corresponding color value. The Modus
themes configure that option in the interest of legibility. While this
works for our purposes, users may still prefer to apply their custom
values, in which case the following approach is necessary:
The ~hl-todo~ package provides the user option
~hl-todo-keyword-faces~: it specifies a pair of keyword and
corresponding color value. The Modus themes configure that option in
the interest of legibility. While this works for our purposes, users
may still prefer to apply their custom values, in which case the
following approach is necessary:
#+begin_src emacs-lisp
(defun my-modus-themes-hl-todo-faces ()
@ -3192,7 +3523,7 @@ otherwise the defaults are not always legible.
:CUSTOM_ID: h:439c9e46-52e2-46be-b1dc-85841dd99671
:END:
The =solaire-mode= package dims the background of what it considers
The ~solaire-mode~ package dims the background of what it considers
ancillary "UI" buffers, such as the minibuffer and Dired buffers. The
Modus themes used to support Solaire on the premise that the user was
(i) opting in to it, (ii) understood why certain buffers were more gray,
@ -3222,7 +3553,7 @@ arrangement that compromises on our accessibility standards and/or
hinders our efforts to provide the best possible experience while using
the Modus themes.
As such, =solaire-mode= is not---and will not be---supported by the
As such, ~solaire-mode~ is not---and will not be---supported by the
Modus themes (or any other of my themes, for that matter). Users who
want it must style the faces manually. Below is some sample code, based
on what we cover at length elsewhere in this manual:
@ -3305,6 +3636,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ csv-mode
+ ctrlf
+ custom (what you get with {{{kbd(M-x customize)}}})
- dashboard
+ deadgrep
+ deft
+ devdocs
@ -3612,11 +3944,12 @@ anew.
:CUSTOM_ID: h:a195e37c-e58c-4148-b254-8ba1ed8a731a
:END:
The =git-gutter= and =git-gutter-fr= packages default to drawing bitmaps
for the indicators they display (e.g. bitmap of a plus sign for added
lines). In Doom Emacs, these bitmaps are replaced with contiguous lines
which may look nicer, but require a change to the foreground of the
relevant faces to yield the desired color combinations.
The ~git-gutter~ and ~git-gutter-fr~ packages default to drawing
bitmaps for the indicators they display (e.g. bitmap of a plus sign
for added lines). In Doom Emacs, these bitmaps are replaced with
contiguous lines which may look nicer, but require a change to the
foreground of the relevant faces to yield the desired color
combinations.
Since this is Doom-specific, we urge users to apply changes in their
local setup. Below is some sample code, based on what we cover at
@ -3668,7 +4001,7 @@ If the above does not work, try this instead:
:END:
Depending on your build of Emacs and/or the environment it runs in,
multiline comments in PHP with the =php-mode= package use the
multiline comments in PHP with the ~php-mode~ package use the
~font-lock-doc-face~ instead of ~font-lock-comment-face~.
This seems to make all comments use the appropriate face:
@ -3797,10 +4130,10 @@ For example:
:CUSTOM_ID: h:24bab397-dcb2-421d-aa6e-ec5bd622b913
:END:
The =highlight-parentheses= package provides contextual coloration of
The ~highlight-parentheses~ package provides contextual coloration of
surrounding parentheses, highlighting only those which are around the
point. The package expects users to customize the applicable colors on
their own by configuring certain variables.
point. The package expects users to customize the applicable colors
on their own by configuring certain variables.
To make the Modus themes work as expected with this, we need to use some
of the techniques that are discussed at length in the various
@ -3984,10 +4317,11 @@ implements an alternative to the typical coloration of code. Instead of
highlighting the syntactic constructs, it applies color to different
levels of depth in the code structure.
As =prism.el= offers a broad range of customizations, we cannot style
it directly at the theme level: that would run contrary to the spirit
of the package. Instead, we may offer preset color schemes. Those
should offer a starting point for users to adapt to their needs.
As {{{file(prism.el)}}} offers a broad range of customizations, we
cannot style it directly at the theme level: that would run contrary
to the spirit of the package. Instead, we may offer preset color
schemes. Those should offer a starting point for users to adapt to
their needs.
In the following code snippets, we employ the ~modus-themes-with-colors~
macro: [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
@ -4146,10 +4480,10 @@ Consult the doc string of ~shr-use-colors~.
:end:
#+cindex: Fonts in EWW, Elfeed, Ement, and SHR
By default, packages that build on top of the Simple HTML Remember (=shr=)
use proportionately spaced fonts. This is controlled by the user option
~shr-use-fonts~, which is set to non-~nil~ by default. To use the standard
font instead, set that variable to nil.
By default, packages that build on top of the Simple HTML Remember
(~shr~) use proportionately spaced fonts. This is controlled by the
user option ~shr-use-fonts~, which is set to non-~nil~ by default. To
use the standard font instead, set that variable to nil.
[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
@ -4166,9 +4500,10 @@ This is a non-exhaustive list.
:custom_id: h:8e636056-356c-4ca7-bc78-ebe61031f585
:end:
The =ement.el= library by Adam Porter (also known as "alphapapa") defaults
to a method of colorizing usernames in a rainbow style. This is
controlled by the user option ~ement-room-prism~ and can be disabled with:
The {{{file(ement.el)}}} library by Adam Porter (also known as
"alphapapa") defaults to a method of colorizing usernames in a rainbow
style. This is controlled by the user option ~ement-room-prism~ and
can be disabled with:
#+begin_src emacs-lisp
(setq ement-room-prism nil)
@ -4182,7 +4517,7 @@ slightly below our nominal target. Try this instead:
(setq ement-room-prism-minimum-contrast 7)
#+end_src
With regard to fonts, Ement depends on =shr= ([[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note on SHR fonts]]).
With regard to fonts, Ement depends on ~shr~ ([[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note on SHR fonts]]).
Since we are here, here is an excerpt from Ement's source code:
@ -4271,7 +4606,7 @@ those buttons. Disabling the logo fixes the problem:
The built-in ~goto-address-mode~ uses heuristics to identify URLs and
email addresses in the current buffer. It then applies a face to them
to change their style. Some packages, such as =notmuch=, use this
to change their style. Some packages, such as ~notmuch~, use this
minor-mode automatically.
The faces are not declared with ~defface~, meaning that it is better
@ -4768,41 +5103,43 @@ The Modus themes are a collective effort. Every bit of work matters.
Le Gouguec, Koen van Greevenbroek, Kostadin Ninev, Madhavan
Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson, Mauro
Aranda, Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
Téchoueyres, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan,
Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen
Xie, okamsn.
Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Stephen Gildea,
Shreyas Ragavan, Stefan Kangas, Utkarsh Singh, Vincent Murphy,
Xinglu Chen, Yuanchen Xie, okamsn.
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
Peitsinis, Alexey Shmalko, Alok Singh, Anders Johansson, André
Alexandre Gomes, Andrew Tropin, Antonio Hernández Blas, Arif Rezai,
Augusto Stoffel, Basil L.{{{space()}}} Contovounesios, Burgess
Chang, Charlotte Van Petegem, Christian Tietze, Christopher Dimech,
Christopher League, Damien Cassou, Daniel Mendler, Dario
Gjorgjevski, David Edmondson, Davor Rotim, Divan Santana, Eliraz
Kedmi, Emanuele Michele Alberto Monterosso, Farasha Euker, Feng Shu,
Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, Gonçalo Marrafa,
Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken,
Iris Garcia, Ivan Popovych, James Ferguson, Jeremy Friesen, Jerry
Zhang, Johannes Grødem, John Haman, Jonas Collberg, Jorge Morais,
Joshua O'Connor, Julio C. Villasante, Kenta Usami, Kevin Fleming,
Kévin Le Gouguec, Kevin Kainan Li, Kostadin Ninev, Laith Bahodi, Len
Trigg, Lennart C. Karssen, Luis Miguel Castañeda, Magne Hov, Manuel
Uberti, Mark Bestley, Mark Burton, Mark Simpson, Markus Beppler,
Augusto Stoffel, Basil L.{{{space()}}} Contovounesios, Bernd
Rellermeyer, Burgess Chang, Charlotte Van Petegem, Christian Tietze,
Christopher Dimech, Christopher League, Damien Cassou, Daniel
Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan
Santana, Eliraz Kedmi, Emanuele Michele Alberto Monterosso, Farasha
Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia,
Gonçalo Marrafa, Guilherme Semente, Gustavo Barros, Hörmetjan
Yiltiz, Ilja Kocken, Imran Khan, Iris Garcia, Ivan Popovych, James
Ferguson, Jeremy Friesen, Jerry Zhang, Johannes Grødem, John Haman,
Jonas Collberg, Jorge Morais, Joshua O'Connor, Julio C. Villasante,
Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kevin Kainan Li,
Kostadin Ninev, Laith Bahodi, Len Trigg, Lennart C. Karssen, Luis
Miguel Castañeda, Magne Hov, Manuel Giraud, Manuel Uberti, Mark
Bestley, Mark Burton, Mark Simpson, Marko Kocic, Markus Beppler,
Matt Armstrong, Matthias Fuchs, Mattias Engdegård, Mauro Aranda,
Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan Willcock,
Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Pablo
Stafforini, Paul Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu,
Philip Kaludercic, Pierre Téchoueyres, Przemysław Kryger, Robert
Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas, Rudolf
Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas
Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As
well as users: Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux,
Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42, Trey, bepolymathe,
bit9tream, derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf,
okamsn, pRot0ta1p, soaringbird, tumashu, wakamenod.
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 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,
TheBlob42, TitusMu, Trey, bepolymathe, bit9tream, bangedorrunt,
derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
pRot0ta1p, soaringbird, tumashu, wakamenod.
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core

View file

@ -1175,6 +1175,33 @@ For example, a 'display-buffer-alist' entry of
will make the body of the chosen window 40 columns wide. For the
height use 'window-height' and 'body-lines', respectively.
+++
*** 'display-buffer' provides more options for using an existing window.
The display buffer action functions 'display-buffer-use-some-window' and
'display-buffer-use-least-recent-window' now honor the action alist
entry 'window-min-height' as well as the entries listed below to make
the display of several buffers in a row more amenable.
+++
*** New buffer display action alist entry 'lru-frames'.
This allows to specify which frames 'display-buffer' should consider
when using a window that shows another buffer.
+++
*** New buffer display action alist entry 'lru-time'.
'display-buffer' will ignore windows with a use time higher than that
when using a window that shows another buffer.
+++
*** New buffer display action alist entry 'bump-use-time'.
This has 'display-buffer' bump the use time of any window it returns,
making it a less likely candidate for displaying another buffer.
+++
*** New buffer display action alist entry 'window-min-width'.
This allows to specify a minimum width of the window used to display a
buffer.
---
*** You can customize on which window 'scroll-other-window' operates.
This is controlled by the new 'other-window-scroll-default' variable.
@ -1194,7 +1221,8 @@ the corresponding deleted frame.
That value means to use 'frame-title-format' for iconified frames.
This is useful with some window managers and desktop environments
which treat changes in frame's title as requests to raise the frame
and/or give it input focus.
and/or give it input focus, or if you want the frame's title to be the
same no matter if the frame is iconified or not.
** Tab Bars and Tab Lines
@ -2140,6 +2168,10 @@ before execution. For example, in a Git repository, you can produce a
log of more than one branch by typing 'C-x v ! C-x v b l' and then
appending additional branch names to the 'git log' command.
The intention is that this command can be used to access a wide
variety of version control system-specific functionality from VC
without complexifying either the VC command set or the backend API.
---
*** 'C-x v v' in a diffs buffer allows to commit only some of the changes.
This command is intended to allow you to commit only some of the

View file

@ -83,7 +83,7 @@ standard).")
(yellow-faint "#624416")
(yellow-intense "#808000")
(blue "#0031a9")
(blue-warmer "#354fcf")
(blue-warmer "#3548cf")
(blue-cooler "#0000b0")
(blue-faint "#003497")
(blue-intense "#0000ff")
@ -157,7 +157,7 @@ standard).")
(bg-completion "#c0deff")
(bg-hover "#97dfed")
(bg-hover-secondary "#f5d0a0")
(bg-hl-line "#d0d6ec")
(bg-hl-line "#dae5ec")
(bg-region "#bdbdbd")
(fg-region "#000000")
@ -182,26 +182,28 @@ standard).")
;;; Diffs
(bg-added "#d5d5ff")
(bg-added "#d5d7ff")
(bg-added-faint "#e6e6ff")
(bg-added-refine "#b5b5ef")
(bg-added-intense "#579acc")
(fg-added "#333399")
(fg-added-intense "#3333cc")
(bg-added-refine "#babcef")
(bg-added-fringe "#275acc")
(fg-added "#303099")
(fg-added-intense "#0303cc")
(bg-changed "#eecfdf")
(bg-changed-faint "#f0dde5")
(bg-changed-refine "#e0b0d0")
(bg-changed-intense "#9f7abf")
(bg-changed-fringe "#9f6ab0")
(fg-changed "#6f1343")
(fg-changed-intense "#7f1f5f")
(fg-changed-intense "#7f0f9f")
(bg-removed "#fff585")
(bg-removed-faint "#f2f2bb")
(bg-removed-refine "#f0e068")
(bg-removed-intense "#d7c20a")
(bg-removed "#f4f099")
(bg-removed-faint "#f6f6b7")
(bg-removed-refine "#f0e56f")
(bg-removed-fringe "#c0b200")
(fg-removed "#553d00")
(fg-removed-intense "#655000")
(fg-removed-intense "#7f6f00")
(bg-diff-context "#f3f3f3")
;;; Paren match
@ -380,10 +382,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-operandi-deuteranopia-palette-overrides nil
"Overrides for `modus-operandi-deuteranopia-palette'.

View file

@ -81,7 +81,7 @@ which corresponds to a minimum contrast in relative luminance of
(yellow-faint "#624416")
(yellow-intense "#808000")
(blue "#0031a9")
(blue-warmer "#354fcf")
(blue-warmer "#3548cf")
(blue-cooler "#0000b0")
(blue-faint "#003497")
(blue-intense "#0000ff")
@ -155,7 +155,7 @@ which corresponds to a minimum contrast in relative luminance of
(bg-completion "#c0deff")
(bg-hover "#94d4ff")
(bg-hover-secondary "#f5d0a0")
(bg-hl-line "#d0d6ec")
(bg-hl-line "#dae5ec")
(bg-region "#bdbdbd")
(fg-region "#000000")
@ -183,24 +183,26 @@ which corresponds to a minimum contrast in relative luminance of
(bg-added "#c1f2d1")
(bg-added-faint "#d8f8e1")
(bg-added-refine "#aee5be")
(bg-added-intense "#8cca8c")
(bg-added-fringe "#6cc06c")
(fg-added "#005000")
(fg-added-intense "#006700")
(bg-changed "#ffdfa9")
(bg-changed-faint "#ffefbf")
(bg-changed-refine "#fac090")
(bg-changed-intense "#d7c20a")
(bg-changed-fringe "#d7c20a")
(fg-changed "#553d00")
(fg-changed-intense "#655000")
(bg-removed "#ffd8d5")
(bg-removed-faint "#ffe9e9")
(bg-removed-refine "#f3b5af")
(bg-removed-intense "#d84a4f")
(bg-removed-fringe "#d84a4f")
(fg-removed "#8f1313")
(fg-removed-intense "#aa2222")
(bg-diff-context "#f3f3f3")
;;; Paren match
(bg-paren-match "#5fcfff")
@ -378,10 +380,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-operandi-palette-overrides nil
"Overrides for `modus-operandi-palette'.

View file

@ -80,7 +80,7 @@ which corresponds to a minimum contrast in relative luminance of
(yellow-faint "#624416")
(yellow-intense "#808000")
(blue "#0031a9")
(blue-warmer "#354fcf")
(blue-warmer "#3548cf")
(blue-cooler "#0000b0")
(blue-faint "#003497")
(blue-intense "#0000ff")
@ -121,12 +121,12 @@ which corresponds to a minimum contrast in relative luminance of
(bg-magenta-subtle "#ffddff")
(bg-cyan-subtle "#bfefff")
(bg-red-nuanced "#fff1f0")
(bg-green-nuanced "#ecf7ed")
(bg-yellow-nuanced "#fff3da")
(bg-blue-nuanced "#f3f3ff")
(bg-magenta-nuanced "#fdf0ff")
(bg-cyan-nuanced "#ebf6fa")
(bg-red-nuanced "#ffe8f0")
(bg-green-nuanced "#e0f5e0")
(bg-yellow-nuanced "#f9ead0")
(bg-blue-nuanced "#ebebff")
(bg-magenta-nuanced "#f6e7ff")
(bg-cyan-nuanced "#e1f3fc")
;;; Uncommon accent backgrounds
@ -182,24 +182,26 @@ which corresponds to a minimum contrast in relative luminance of
(bg-added "#c3ebc1")
(bg-added-faint "#dcf8d1")
(bg-added-refine "#acd6a5")
(bg-added-intense "#8cca8c")
(bg-added-fringe "#6cc06c")
(fg-added "#005000")
(fg-added-intense "#006700")
(bg-changed "#ffdfa9")
(bg-changed-faint "#ffefbf")
(bg-changed-refine "#fac090")
(bg-changed-intense "#d7c20a")
(bg-changed-fringe "#c0b200")
(fg-changed "#553d00")
(fg-changed-intense "#655000")
(bg-removed "#f4d0cf")
(bg-removed-faint "#ffe9e5")
(bg-removed-refine "#f3b5a7")
(bg-removed-intense "#d84a4f")
(bg-removed-fringe "#d84a4f")
(fg-removed "#8f1313")
(fg-removed-intense "#aa2222")
(bg-diff-context "#efe9df")
;;; Paren match
(bg-paren-match "#7fdfcf")
@ -377,10 +379,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-operandi-tinted-palette-overrides nil
"Overrides for `modus-operandi-tinted-palette'.

View file

@ -6,7 +6,7 @@
;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
;; URL: https://git.sr.ht/~protesilaos/modus-themes
;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
;; Version: 4.0.1
;; Version: 4.1.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
@ -88,6 +88,14 @@ cover the blue-cyan-magenta side of the spectrum."
:version "30.1"
:group 'modus-themes-faces))
(dolist (color '(red green yellow blue magenta cyan))
(custom-declare-face
(intern (format "modus-themes-nuanced-%s" color))
nil (format "Nuanced %s background." color)
:package-version '(modus-themes . "4.1.0")
:version "30.1"
:group 'modus-themes-faces))
(dolist (color '(red green yellow blue magenta cyan))
(custom-declare-face
(intern (format "modus-themes-subtle-%s" color))
@ -329,6 +337,29 @@ Will set SYM to VAL, and reload the current theme, unless
(theme (modus-themes--current-theme)))
(modus-themes-load-theme theme))))
(defcustom modus-themes-disable-other-themes t
"Disable all other themes when loading a Modus theme.
When the value is non-nil, the commands `modus-themes-toggle' and
`modus-themes-select', as well as the `modus-themes-load-theme'
function, will disable all other themes while loading the
specified Modus theme. This is done to ensure that Emacs does
not blend two or more themes: such blends lead to awkward results
that undermine the work of the designer.
When the value is nil, the aforementioned commands and function
will only disable other themes within the Modus collection.
This option is provided because Emacs themes are not necessarily
limited to colors/faces: they can consist of an arbitrary set of
customizations. Users who use such customization bundles must
set this variable to a nil value."
:group 'modus-themes
:package-version '(modus-themes . "4.1.0")
:version "30.1"
:type 'boolean
:link '(info-link "(modus-themes) Disable other themes"))
(defconst modus-themes-items
'( modus-operandi modus-vivendi
modus-operandi-tinted modus-vivendi-tinted
@ -615,13 +646,14 @@ is non-nil. While quote/verse blocks require setting
"Control the style of completion user interfaces.
This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy,
Orderless, Vertico. The value is an alist of expressions, each
of which takes the form of (KEY . LIST-OF-PROPERTIES). KEY is a
symbol, while PROPERTIES is a list. Here is a sample, followed
by a description of the particularities:
Orderless, Vertico, and the standard *Completions* buffer. The
value is an alist of expressions, each of which takes the form
of (KEY . LIST-OF-PROPERTIES). KEY is a symbol, while PROPERTIES
is a list. Here is a sample, followed by a description of the
particularities:
(setq modus-themes-completions
(quote ((matches . (extrabold background))
(quote ((matches . (extrabold underline))
(selection . (semibold italic)))))
The `matches' key refers to the highlighted characters that
@ -682,6 +714,12 @@ Is the same as:
(cons :tag "Selection"
(const selection)
(set :tag "Style of selection" :greedy t
,modus-themes--weight-widget
(const :tag "Italic font (oblique or slanted forms)" italic)
(const :tag "Underline" underline)))
(cons :tag "Fallback for both matches and selection"
(const t)
(set :tag "Style of both matches and selection" :greedy t
,modus-themes--weight-widget
(const :tag "Italic font (oblique or slanted forms)" italic)
(const :tag "Underline" underline))))
@ -759,7 +797,25 @@ represents."
:group 'modus-themes
:package-version '(modus-themes . "4.0.0")
:version "30.1"
:type '(repeat (list symbol (choice symbol string))) ; TODO 2022-12-18: Refine overrides' :type
:type '(repeat (list symbol (choice symbol string)))
;; ;; NOTE 2023-01-07: The following is a functioning version of the
;; ;; intended :type. However, I think the Custom UI is really
;; ;; awkward for this specific case. Maybe the generic type I have
;; ;; above is better, as it encourages the user to write out the
;; ;; code and read the manual. Counter-arguments are welcome.
;;
;; :type `(repeat (list (radio :tag "Palette key to override"
;; ,@(mapcar (lambda (x)
;; (list 'const x))
;; (mapcar #'car (modus-themes--current-theme-palette))))
;; (choice :tag "Value to assign" :value unspecified
;; (const :tag "`unspecified' (remove the original color)" unspecified)
;; (string :tag "String with color name (e.g. \"gray50\") or hex RGB (e.g. \"#123456\")"
;; :match-inline (color-supported-p val))
;; (radio :tag "Palette key to map to"
;; ,@(mapcar (lambda (x)
;; (list 'const x))
;; (mapcar #'car (modus-themes--current-theme-palette)))))))
:set #'modus-themes--set-option
:initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Palette overrides"))
@ -1020,7 +1076,8 @@ C1 and C2 are color values written in hexadecimal RGB."
(defun modus-themes--current-theme ()
"Return first enabled Modus theme."
(car (modus-themes--list-enabled-themes)))
(car (or (modus-themes--list-enabled-themes)
(modus-themes--list-known-themes))))
(defun modus-themes--palette-symbol (theme &optional overrides)
"Return THEME palette as a symbol.
@ -1052,13 +1109,71 @@ overrides."
(modus-themes--palette-value theme))
(user-error "No enabled Modus theme could be found")))
(defun modus-themes--disable-themes ()
"Disable themes per `modus-themes-disable-other-themes'."
(mapc #'disable-theme
(if modus-themes-disable-other-themes
custom-enabled-themes
(modus-themes--list-known-themes))))
(defun modus-themes-load-theme (theme)
"Load THEME while disabling other Modus themes.
Run `modus-themes-after-load-theme-hook'."
(mapc #'disable-theme (modus-themes--list-known-themes))
"Load THEME while disabling other themes.
Which themes are disabled is determined by the user option
`modus-themes-disable-other-themes'.
Run the `modus-themes-after-load-theme-hook' as the final step
after loading the THEME."
(modus-themes--disable-themes)
(load-theme theme :no-confirm)
(run-hooks 'modus-themes-after-load-theme-hook))
(defun modus-themes--retrieve-palette-value (color palette)
"Return COLOR from PALETTE.
Use recursion until COLOR is retrieved as a string. Refrain from
doing so if the value of COLOR is not a key in the PALETTE.
Return `unspecified' if the value of COLOR cannot be determined.
This symbol is accepted by faces and is thus harmless.
This function is used in the macros `modus-themes-theme',
`modus-themes-with-colors'."
(let ((value (car (alist-get color palette))))
(cond
((or (stringp value)
(eq value 'unspecified))
value)
((and (symbolp value)
(memq value (mapcar #'car palette)))
(modus-themes--retrieve-palette-value value palette))
(t
'unspecified))))
(defun modus-themes-get-color-value (color &optional overrides theme)
"Return color value of named COLOR for current Modus theme.
COLOR is a symbol that represents a named color entry in the
palette.
If the value is the name of another color entry in the
palette (so a mapping), recur until you find the underlying color
value.
With optional OVERRIDES as a non-nil value, account for palette
overrides. Else use the default palette.
With optional THEME as a symbol among `modus-themes-items', use
the palette of that item. Else use the current Modus theme.
If COLOR is not present in the palette, return the `unspecified'
symbol, which is safe when used as a face attribute's value."
(if-let* ((palette (if theme
(modus-themes--palette-value theme overrides)
(modus-themes--current-theme-palette overrides)))
(value (modus-themes--retrieve-palette-value color palette)))
value
'unspecified))
;;;; Commands
(make-obsolete 'modus-themes-load-themes nil "4.0.0")
@ -1080,7 +1195,8 @@ Run `modus-themes-after-load-theme-hook'."
;;;###autoload
(defun modus-themes-select (theme)
"Load a Modus THEME using minibuffer completion.
Run `modus-themes-after-load-theme-hook' after loading the theme."
Run `modus-themes-after-load-theme-hook' after loading the theme.
Disable other themes per `modus-themes-disable-other-themes'."
(interactive (list (modus-themes--select-prompt)))
(modus-themes-load-theme theme))
@ -1100,7 +1216,8 @@ If `modus-themes-to-toggle' does not specify two Modus themes,
prompt with completion for a theme among our collection (this is
practically the same as the `modus-themes-select' command).
Run `modus-themes-after-load-theme-hook' after loading the theme."
Run `modus-themes-after-load-theme-hook' after loading the theme.
Disable other themes per `modus-themes-disable-other-themes'."
(interactive)
(if-let* ((themes (modus-themes--toggle-theme-p))
(one (car themes))
@ -1114,15 +1231,12 @@ Run `modus-themes-after-load-theme-hook' after loading the theme."
"Render colors in BUFFER from THEME for `modus-themes-list-colors'.
Optional MAPPINGS changes the output to only list the semantic
color mappings of the palette, instead of its named colors."
(let* ((current (modus-themes--palette-value theme :overrides))
(let* ((current-palette (modus-themes--palette-value theme mappings))
(palette (if mappings
(seq-remove (lambda (cell)
(or (stringp (cadr cell))
(eq (cadr cell) 'unspecified)))
current)
(seq-remove (lambda (cell)
(symbolp (cadr cell)))
current)))
(stringp (cadr cell)))
current-palette)
current-palette))
(current-buffer buffer)
(current-theme theme))
(with-help-window buffer
@ -1136,28 +1250,27 @@ color mappings of the palette, instead of its named colors."
(insert " ")
(dolist (cell palette)
(let* ((name (car cell))
(color (cadr cell))
(mapping (if mappings
(cadr (seq-find (lambda (c)
(eq (car c) color))
current))
color))
(fg (readable-foreground-color mapping))
(pad (make-string 5 ?\s)))
(color (modus-themes-get-color-value name mappings theme))
(pad (make-string 10 ?\s))
(fg (if (eq color 'unspecified)
(progn
(readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme))
(setq pad (make-string 6 ?\s)))
(readable-foreground-color color))))
(let ((old-point (point)))
(insert (format "%s %s" mapping pad))
(put-text-property old-point (point) 'face `( :foreground ,mapping)))
(insert (format "%s %s" color pad))
(put-text-property old-point (point) 'face `( :foreground ,color)))
(let ((old-point (point)))
(insert (format " %s %s %s\n" mapping pad name))
(insert (format " %s %s %s\n" color pad name))
(put-text-property old-point (point)
'face `( :background ,mapping
'face `( :background ,color
:foreground ,fg
:extend t)))
;; We need this to properly render the last line.
(insert " ")))
(setq-local revert-buffer-function
(lambda (_ignore-auto _noconfirm)
(modus-themes--list-colors-render current-buffer current-theme)))))))
(modus-themes--list-colors-render current-buffer current-theme mappings)))))))
(defvar modus-themes--list-colors-prompt-history '()
"Minibuffer history for `modus-themes--list-colors-prompt'.")
@ -1319,7 +1432,7 @@ Optional OL is the color of an overline."
(eq modus-themes-org-blocks 'greyscale))))
(list :inherit 'modus-themes-fixed-pitch
:background (if gray bg 'unspecified)
:foreground fg
:foreground (if gray 'unspecified fg)
:extend (if gray t 'unspecified))))
(defun modus-themes--completion-line (bg)
@ -1408,6 +1521,13 @@ FG and BG are the main colors."
`(modus-themes-fg-cyan-cooler ((,c :foreground ,cyan-cooler)))
`(modus-themes-fg-cyan-faint ((,c :foreground ,cyan-faint)))
`(modus-themes-fg-cyan-intense ((,c :foreground ,cyan-intense)))
;;;;; nuanced colored backgrounds
`(modus-themes-nuanced-red ((,c :background ,bg-red-nuanced :extend t)))
`(modus-themes-nuanced-green ((,c :background ,bg-green-nuanced :extend t)))
`(modus-themes-nuanced-yellow ((,c :background ,bg-yellow-nuanced :extend t)))
`(modus-themes-nuanced-blue ((,c :background ,bg-blue-nuanced :extend t)))
`(modus-themes-nuanced-magenta ((,c :background ,bg-magenta-nuanced :extend t)))
`(modus-themes-nuanced-cyan ((,c :background ,bg-cyan-nuanced :extend t)))
;;;;; subtle colored backgrounds
`(modus-themes-subtle-red ((,c :background ,bg-red-subtle :foreground ,fg-main)))
`(modus-themes-subtle-green ((,c :background ,bg-green-subtle :foreground ,fg-main)))
@ -1494,6 +1614,7 @@ FG and BG are the main colors."
`(header-line-highlight ((,c :inherit highlight)))
`(help-argument-name ((,c :inherit modus-themes-slant :foreground ,variable)))
`(help-key-binding ((,c :inherit modus-themes-key-binding)))
`(highlight ((,c :background ,bg-hover :foreground ,fg-main)))
`(homoglyph ((,c :foreground ,warning)))
`(ibuffer-locked-buffer ((,c :foreground ,warning)))
`(icon-button ((,c :inherit modus-themes-button)))
@ -1509,7 +1630,7 @@ FG and BG are the main colors."
`(read-multiple-choice-face ((,c :inherit (bold modus-themes-mark-alt))))
`(rectangle-preview ((,c :inherit secondary-selection)))
`(region ((,c :background ,bg-region :foreground ,fg-region)))
`(secondary-selection ((,c :background ,bg-hover-secondary)))
`(secondary-selection ((,c :background ,bg-hover-secondary :foreground ,fg-main)))
`(separator-line ((,c :underline ,bg-active)))
`(shadow ((,c :foreground ,fg-dim)))
`(success ((,c :inherit bold :foreground ,info)))
@ -1519,7 +1640,7 @@ FG and BG are the main colors."
`(button ((,c :background ,bg-link :foreground ,fg-link :underline ,underline-link)))
`(link ((,c :inherit button)))
`(link-visited ((,c :background ,bg-link-visited :foreground ,fg-link-visited :underline ,underline-link-visited)))
`(tooltip ((,c :background ,bg-active)))
`(tooltip ((,c :background ,bg-active :foreground ,fg-main)))
;;;;; agda2-mode
`(agda2-highlight-bound-variable-face ((,c :inherit font-lock-variable-name-face)))
`(agda2-highlight-catchall-clause-face ((,c :background ,bg-inactive)))
@ -1778,7 +1899,7 @@ FG and BG are the main colors."
`(company-scrollbar-bg ((,c :background ,bg-active)))
`(company-scrollbar-fg ((,c :background ,fg-main)))
`(company-template-field ((,c :background ,bg-active)))
`(company-tooltip ((,c :background ,bg-inactive)))
`(company-tooltip ((,c :background ,bg-dim)))
`(company-tooltip-annotation ((,c :inherit completions-annotations)))
`(company-tooltip-common ((,c :inherit company-echo-common)))
`(company-tooltip-deprecated ((,c :inherit company-tooltip :strike-through t)))
@ -1796,16 +1917,18 @@ FG and BG are the main colors."
`(compilation-mode-line-exit ((,c :inherit bold)))
`(compilation-mode-line-fail ((,c :inherit bold :foreground ,modeline-err)))
`(compilation-mode-line-run ((,c :inherit bold :foreground ,modeline-warning)))
`(compilation-warning ((,c :inherit warning)))
`(compilation-warning ((,c :inherit modus-themes-bold :foreground ,warning)))
;;;;; completions
`(completions-annotations ((,c :inherit modus-themes-slant :foreground ,docstring)))
`(completions-common-part ((,c :inherit modus-themes-completion-match-0)))
`(completions-first-difference ((,c :inherit modus-themes-completion-match-1)))
;;;;; consult
`(consult-async-split ((,c :inherit error)))
`(consult-file ((,c :inherit modus-themes-bold :foreground ,info)))
`(consult-key ((,c :inherit modus-themes-key-binding)))
`(consult-imenu-prefix ((,c :inherit shadow)))
`(consult-line-number ((,c :inherit shadow)))
`(consult-line-number-prefix ((,c :inherit shadow)))
;;;;; corfu
`(corfu-current ((,c :inherit modus-themes-completion-selected)))
`(corfu-bar ((,c :background ,fg-dim)))
@ -1838,7 +1961,7 @@ FG and BG are the main colors."
`(csv-separator-face ((,c :foreground ,red-intense)))
;;;;; ctrlf
`(ctrlf-highlight-active ((,c :inherit modus-themes-search-current)))
`(ctrlf-highlight-line ((,c :inherit highlight)))
`(ctrlf-highlight-line ((,c :background ,bg-hl-line :extend t)))
`(ctrlf-highlight-passive ((,c :inherit modus-themes-search-lazy)))
;;;;; custom (M-x customize)
`(custom-button ((,c :inherit modus-themes-button)))
@ -1858,6 +1981,9 @@ FG and BG are the main colors."
`(custom-group-tag ((,c :inherit bold :foreground ,builtin)))
`(custom-group-tag-1 ((,c :inherit bold :foreground ,constant)))
`(custom-variable-tag ((,c :inherit bold :foreground ,variable)))
;;;;; dashboard
`(dashboard-heading ((,c :foreground ,name)))
`(dashboard-items-face (( ))) ; use the underlying style of all-the-icons
;;;;; deadgrep
`(deadgrep-filename-face ((,c :inherit bold :foreground ,name)))
`(deadgrep-match-face ((,c :inherit match)))
@ -1879,18 +2005,18 @@ FG and BG are the main colors."
`(dictionary-word-definition-face (( )))
`(dictionary-word-entry-face ((,c :inherit font-lock-comment-face)))
;;;;; diff-hl
`(diff-hl-change ((,c :background ,bg-changed-intense)))
`(diff-hl-delete ((,c :background ,bg-removed-intense)))
`(diff-hl-insert ((,c :background ,bg-added-intense)))
`(diff-hl-change ((,c :background ,bg-changed-fringe)))
`(diff-hl-delete ((,c :background ,bg-removed-fringe)))
`(diff-hl-insert ((,c :background ,bg-added-fringe)))
`(diff-hl-reverted-hunk-highlight ((,c :background ,fg-main :foreground ,bg-main)))
;;;;; diff-mode
`(diff-added ((,c :background ,bg-added)))
`(diff-changed ((,c :background ,bg-changed :extend t)))
`(diff-added ((,c :background ,bg-added :foreground ,fg-added)))
`(diff-changed ((,c :background ,bg-changed :foreground ,fg-changed :extend t)))
`(diff-changed-unspecified ((,c :inherit diff-changed)))
`(diff-removed ((,c :background ,bg-removed)))
`(diff-refine-added ((,c :background ,bg-added-refine)))
`(diff-refine-changed ((,c :background ,bg-changed-refine)))
`(diff-refine-removed ((,c :background ,bg-removed-refine)))
`(diff-removed ((,c :background ,bg-removed :foreground ,fg-removed)))
`(diff-refine-added ((,c :background ,bg-added-refine :foreground ,fg-added)))
`(diff-refine-changed ((,c :background ,bg-changed-refine :foreground ,fg-changed)))
`(diff-refine-removed ((,c :background ,bg-removed-refine :foreground ,fg-removed)))
`(diff-indicator-added ((,c :inherit diff-added :foreground ,fg-added-intense)))
`(diff-indicator-changed ((,c :inherit diff-changed :foreground ,fg-changed-intense)))
`(diff-indicator-removed ((,c :inherit diff-removed :foreground ,fg-removed-intense)))
@ -2001,18 +2127,18 @@ FG and BG are the main colors."
`(doom-modeline-urgent ((,c :inherit bold-italic :foreground ,modeline-err)))
`(doom-modeline-warning ((,c :inherit warning)))
;;;;; ediff
`(ediff-current-diff-A ((,c :inherit diff-removed)))
`(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed)))
`(ediff-current-diff-Ancestor ((,c :background ,bg-region))) ; TODO 2022-11-29: Needs review
`(ediff-current-diff-B ((,c :inherit diff-added)))
`(ediff-current-diff-C ((,c :inherit diff-changed)))
`(ediff-even-diff-A ((,c :background ,bg-dim)))
`(ediff-even-diff-Ancestor ((,c :background ,bg-dim)))
`(ediff-even-diff-B ((,c :background ,bg-dim)))
`(ediff-even-diff-C ((,c :background ,bg-dim)))
`(ediff-fine-diff-A ((,c :inherit diff-refine-removed)))
`(ediff-fine-diff-Ancestor ((,c :inherit diff-refine-cyan)))
`(ediff-fine-diff-B ((,c :inherit diff-refine-added)))
`(ediff-fine-diff-C ((,c :inherit diff-refine-changed)))
`(ediff-current-diff-B ((,c :background ,bg-added :foreground ,fg-added)))
`(ediff-current-diff-C ((,c :background ,bg-changed :foreground ,fg-changed)))
`(ediff-even-diff-A ((,c :background ,bg-diff-context)))
`(ediff-even-diff-Ancestor ((,c :background ,bg-diff-context)))
`(ediff-even-diff-B ((,c :background ,bg-diff-context)))
`(ediff-even-diff-C ((,c :background ,bg-diff-context)))
`(ediff-fine-diff-A ((,c :background ,bg-removed-refine :foreground ,fg-removed)))
`(ediff-fine-diff-Ancestor ((,c :inherit modus-themes-subtle-cyan)))
`(ediff-fine-diff-B ((,c :background ,bg-added-refine :foreground ,fg-added)))
`(ediff-fine-diff-C ((,c :background ,bg-changed-refine :foreground ,fg-changed)))
`(ediff-odd-diff-A ((,c :inherit ediff-even-diff-A)))
`(ediff-odd-diff-Ancestor ((,c :inherit ediff-even-diff-Ancestor)))
`(ediff-odd-diff-B ((,c :inherit ediff-even-diff-B)))
@ -2025,7 +2151,7 @@ FG and BG are the main colors."
`(ein:markdowncell-input-area-face (( )))
`(ein:notification-tab-normal ((,c :underline t)))
;;;;; eglot
`(eglot-mode-line ((,c :inherit bold :foreground ,modeline-info)))
`(eglot-mode-line ((,c :inherit modus-themes-bold :foreground ,modeline-info)))
;;;;; el-search
`(el-search-highlight-in-prompt-face ((,c :inherit italic)))
`(el-search-match ((,c :inherit modus-themes-search-current)))
@ -2236,15 +2362,15 @@ FG and BG are the main colors."
`(git-commit-overlong-summary ((,c :inherit warning)))
`(git-commit-summary ((,c :inherit bold :foreground ,blue)))
;;;;; git-gutter
`(git-gutter:added ((,c :background ,bg-added-intense)))
`(git-gutter:deleted ((,c :background ,bg-removed-intense)))
`(git-gutter:modified ((,c :background ,bg-changed-intense)))
`(git-gutter:added ((,c :background ,bg-added-fringe)))
`(git-gutter:deleted ((,c :background ,bg-removed-fringe)))
`(git-gutter:modified ((,c :background ,bg-changed-fringe)))
`(git-gutter:separator ((,c :inherit modus-themes-intense-cyan)))
`(git-gutter:unchanged ((,c :inherit modus-themes-intense-magenta)))
;;;;; git-gutter-fr
`(git-gutter-fr:added ((,c :background ,bg-added-intense)))
`(git-gutter-fr:deleted ((,c :background ,bg-removed-intense)))
`(git-gutter-fr:modified ((,c :background ,bg-changed-intense)))
`(git-gutter-fr:added ((,c :background ,bg-added-fringe)))
`(git-gutter-fr:deleted ((,c :background ,bg-removed-fringe)))
`(git-gutter-fr:modified ((,c :background ,bg-changed-fringe)))
;;;;; git-rebase
`(git-rebase-comment-hash ((,c :inherit (bold font-lock-comment-face) :foreground ,identifier)))
`(git-rebase-comment-heading ((,c :inherit (bold font-lock-comment-face))))
@ -2377,7 +2503,6 @@ FG and BG are the main colors."
:background "white" :foreground "#af6400" :inverse-video t)
(((class color) (min-colors 88) (background dark))
:background "black" :foreground "#faea00" :inverse-video t)))
`(highlight ((,c :background ,bg-hover)))
`(highlight-changes ((,c :foreground ,warning :underline nil)))
`(highlight-changes-delete ((,c :foreground ,err :underline t)))
`(hl-line ((,c :background ,bg-hl-line :extend t)))
@ -2551,8 +2676,8 @@ FG and BG are the main colors."
`(kaocha-runner-success-face ((,c :inherit success)))
`(kaocha-runner-warning-face ((,c :inherit warning)))
;;;;; keycast
`(keycast-command ((,c :inherit bold :foreground ,keybind)))
`(keycast-key ((,c :background ,keybind :foreground ,bg-main :box ,keybind)))
`(keycast-command ((,c :inherit bold)))
`(keycast-key ((,c :background ,keybind :foreground ,bg-main)))
;;;;; ledger-mode
`(ledger-font-auto-xact-face ((,c :inherit font-lock-builtin-face)))
`(ledger-font-account-name-face ((,c :foreground ,name)))
@ -2563,7 +2688,7 @@ FG and BG are the main colors."
`(ledger-font-payee-cleared-face ((,c :inherit success)))
`(ledger-font-payee-pending-face ((,c :inherit warning)))
`(ledger-font-payee-uncleared-face ((,c :inherit error)))
`(ledger-font-xact-highlight-face ((,c :inherit highlight)))
`(ledger-font-xact-highlight-face ((,c :background ,bg-hl-line :extend t)))
;;;;; leerzeichen
`(leerzeichen ((,c :background ,bg-inactive)))
;;;;; line numbers (display-line-numbers-mode and global variant)
@ -2595,7 +2720,7 @@ FG and BG are the main colors."
`(magit-diff-base ((,c :background ,bg-changed-faint :foreground ,fg-changed)))
`(magit-diff-base-highlight ((,c :background ,bg-changed :foreground ,fg-changed)))
`(magit-diff-context ((,c :inherit shadow)))
`(magit-diff-context-highlight ((,c :background ,bg-dim)))
`(magit-diff-context-highlight ((,c :background ,bg-diff-context)))
`(magit-diff-file-heading ((,c :inherit bold :foreground ,accent-0)))
`(magit-diff-file-heading-highlight ((,c :inherit magit-diff-file-heading :background ,bg-inactive)))
`(magit-diff-file-heading-selection ((,c :inherit bold :background ,bg-hover-secondary)))
@ -2668,7 +2793,7 @@ FG and BG are the main colors."
`(marginalia-archive ((,c :foreground ,accent-0)))
`(marginalia-char ((,c :foreground ,accent-2)))
`(marginalia-date ((,c :foreground ,date-common)))
`(marginalia-documentation ((,c :inherit italic :foreground ,docstring)))
`(marginalia-documentation ((,c :inherit modus-themes-slant :foreground ,docstring)))
`(marginalia-file-name (( )))
`(marginalia-file-owner ((,c :inherit shadow)))
`(marginalia-file-priv-dir ((,c :foreground ,accent-0)))
@ -2720,7 +2845,7 @@ FG and BG are the main colors."
`(markdown-table-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table)))
`(markdown-url-face ((,c :foreground ,fg-alt)))
;;;;; markup-faces (`adoc-mode')
`(markup-attribute-face ((,c :inherit (italic markup-meta-face))))
`(markup-attribute-face ((,c :inherit (modus-themes-slant markup-meta-face))))
`(markup-bold-face ((,c :inherit bold)))
`(markup-code-face ((,c :foreground ,prose-code)))
`(markup-comment-face ((,c :inherit font-lock-comment-face)))
@ -2809,7 +2934,7 @@ FG and BG are the main colors."
`(mu4e-footer-face ((,c :inherit italic :foreground ,fg-alt)))
`(mu4e-forwarded-face ((,c :inherit italic :foreground ,info)))
`(mu4e-header-face ((,c :inherit shadow)))
`(mu4e-header-highlight-face ((,c :inherit highlight)))
`(mu4e-header-highlight-face ((,c :background ,bg-hl-line :extend t)))
`(mu4e-header-key-face ((,c :inherit message-header-name)))
`(mu4e-header-marks-face ((,c :inherit mu4e-special-header-value-face)))
`(mu4e-header-title-face ((,c :foreground ,fg-alt)))
@ -2920,7 +3045,7 @@ FG and BG are the main colors."
`(orderless-match-face-3 ((,c :inherit modus-themes-completion-match-3)))
;;;;; org
`(org-agenda-calendar-event ((,c :foreground ,date-event)))
`(org-agenda-calendar-sexp ((,c :inherit (italic org-agenda-calendar-event))))
`(org-agenda-calendar-sexp ((,c :inherit (modus-themes-slant org-agenda-calendar-event))))
`(org-agenda-clocking ((,c :inherit modus-themes-mark-alt)))
`(org-agenda-column-dateline ((,c :background ,bg-inactive)))
`(org-agenda-current-time ((,c :foreground ,date-now)))
@ -2964,7 +3089,7 @@ FG and BG are the main colors."
`(org-headline-todo ((,c :inherit org-todo)))
`(org-hide ((,c :foreground ,bg-main)))
`(org-indent ((,c :inherit (fixed-pitch org-hide))))
`(org-imminent-deadline ((,c :inherit bold :foreground ,date-deadline)))
`(org-imminent-deadline ((,c :inherit modus-themes-bold :foreground ,date-deadline)))
`(org-latex-and-related ((,c :foreground ,type)))
`(org-level-1 ((,c :inherit modus-themes-heading-1)))
`(org-level-2 ((,c :inherit modus-themes-heading-2)))
@ -2985,7 +3110,7 @@ FG and BG are the main colors."
`(org-quote ((,c :inherit org-block)))
`(org-scheduled ((,c :foreground ,date-scheduled)))
`(org-scheduled-previously ((,c :inherit org-scheduled)))
`(org-scheduled-today ((,c :inherit (bold org-scheduled))))
`(org-scheduled-today ((,c :inherit (modus-themes-bold org-scheduled))))
`(org-sexp-date ((,c :foreground ,date-common)))
`(org-special-keyword ((,c :inherit org-drawer)))
`(org-table ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table)))
@ -3007,8 +3132,8 @@ FG and BG are the main colors."
`(org-habit-clear-future-face ((,c :background ,bg-graph-blue-1)))
`(org-habit-overdue-face ((,c :background ,bg-graph-red-0)))
`(org-habit-overdue-future-face ((,c :background ,bg-graph-red-1)))
`(org-habit-ready-face ((,c :background ,bg-graph-blue-0 :foreground "black"))) ; fg is special case
`(org-habit-ready-future-face ((,c :background ,bg-graph-blue-1)))
`(org-habit-ready-face ((,c :background ,bg-graph-green-0 :foreground "black"))) ; fg is special case
`(org-habit-ready-future-face ((,c :background ,bg-graph-green-1)))
;;;;; org-journal
`(org-journal-calendar-entry-face ((,c :inherit modus-themes-slant :foreground ,date-common)))
`(org-journal-calendar-scheduled-face ((,c :inherit (modus-themes-slant org-scheduled))))
@ -3097,7 +3222,7 @@ FG and BG are the main colors."
`(popup-tip-face ((,c :inherit modus-themes-intense-yellow)))
;;;;; powerline
`(powerline-active0 ((,c :background ,fg-dim :foreground ,bg-main)))
`(powerline-active1 ((,c :inherit mode-line-active)))
`(powerline-active1 ((,c :inherit mode-line)))
`(powerline-active2 ((,c :inherit mode-line-inactive)))
`(powerline-inactive0 ((,c :background ,bg-active :foreground ,fg-dim)))
`(powerline-inactive1 ((,c :background ,bg-main :foreground ,fg-dim)))
@ -3320,7 +3445,7 @@ FG and BG are the main colors."
`(swiper-background-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
`(swiper-background-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
`(swiper-background-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
`(swiper-line-face ((,c :inherit highlight)))
`(swiper-line-face ((,c :background ,bg-hl-line :extend t)))
`(swiper-match-face-1 (( )))
`(swiper-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
`(swiper-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
@ -3753,24 +3878,24 @@ FG and BG are the main colors."
(if (or (eq modus-themes-org-blocks 'tinted-background)
(eq modus-themes-org-blocks 'rainbow))
`(org-src-block-faces
`(("emacs-lisp" (:inherit modus-themes-subtle-magenta :extend t))
("elisp" (:inherit modus-themes-subtle-magenta :extend t))
("clojure" (:inherit modus-themes-subtle-magenta :extend t))
("clojurescript" (:inherit modus-themes-subtle-magenta :extend t))
("c" (:inherit modus-themes-subtle-blue :extend t))
("c++" (:inherit modus-themes-subtle-blue :extend t))
("sh" (:inherit modus-themes-subtle-green :extend t))
("shell" (:inherit modus-themes-subtle-green :extend t))
("html" (:inherit modus-themes-subtle-yellow :extend t))
("xml" (:inherit modus-themes-subtle-yellow :extend t))
("css" (:inherit modus-themes-subtle-red :extend t))
("scss" (:inherit modus-themes-subtle-red :extend t))
("python" (:inherit modus-themes-subtle-green :extend t))
("ipython" (:inherit modus-themes-subtle-magenta :extend t))
("r" (:inherit modus-themes-subtle-cyan :extend t))
("yaml" (:inherit modus-themes-subtle-cyan :extend t))
("conf" (:inherit modus-themes-subtle-cyan :extend t))
("docker" (:inherit modus-themes-subtle-cyan :extend t))))
`(("emacs-lisp" modus-themes-nuanced-magenta)
("elisp" modus-themes-nuanced-magenta)
("clojure" modus-themes-nuanced-magenta)
("clojurescript" modus-themes-nuanced-magenta)
("c" modus-themes-nuanced-blue)
("c++" modus-themes-nuanced-blue)
("sh" modus-themes-nuanced-green)
("shell" modus-themes-nuanced-green)
("html" modus-themes-nuanced-yellow)
("xml" modus-themes-nuanced-yellow)
("css" modus-themes-nuanced-red)
("scss" modus-themes-nuanced-red)
("python" modus-themes-nuanced-green)
("ipython" modus-themes-nuanced-magenta)
("r" modus-themes-nuanced-cyan)
("yaml" modus-themes-nuanced-cyan)
("conf" modus-themes-nuanced-cyan)
("docker" modus-themes-nuanced-cyan)))
`(org-src-block-faces '())))
"Custom variables for `modus-themes-theme'.")
@ -3792,14 +3917,10 @@ corresponding entries."
(let ((sym (gensym))
(colors (mapcar #'car (symbol-value palette))))
`(let* ((c '((class color) (min-colors 256)))
(,sym (append ,overrides modus-themes-common-palette-overrides ,palette))
(,sym (modus-themes--palette-value ',name ',overrides))
,@(mapcar (lambda (color)
(list color
`(let* ((value (car (alist-get ',color ,sym))))
(if (or (stringp value)
(eq value 'unspecified))
value
(car (alist-get value ,sym))))))
`(modus-themes--retrieve-palette-value ',color ,sym)))
colors))
(ignore c ,@colors) ; Silence unused variable warnings
(custom-theme-set-faces ',name ,@modus-themes-faces)
@ -3821,11 +3942,7 @@ corresponding entries."
(,sym (modus-themes--current-theme-palette :overrides))
,@(mapcar (lambda (color)
(list color
`(let* ((value (car (alist-get ',color ,sym))))
(if (or (stringp value)
(eq value 'unspecified))
value
(car (alist-get value ,sym))))))
`(modus-themes--retrieve-palette-value ',color ,sym)))
colors))
(ignore c ,@colors) ; Silence unused variable warnings
,@body)))

View file

@ -184,23 +184,25 @@ standard).")
(bg-added "#003066")
(bg-added-faint "#001a4f")
(bg-added-refine "#0f4a77")
(bg-added-intense "#0f4fbf")
(bg-added-fringe "#006fff")
(fg-added "#c4d5ff")
(fg-added-intense "#a0afff")
(fg-added-intense "#8080ff")
(bg-changed "#2f123f")
(bg-changed-faint "#1f022f")
(bg-changed-refine "#3f325f")
(bg-changed-intense "#7f42af")
(bg-changed-fringe "#7f55a0")
(fg-changed "#e3cfff")
(fg-changed-intense "#c0a4ff")
(fg-changed-intense "#cf9fe2")
(bg-removed "#3d3d00")
(bg-removed-faint "#281f00")
(bg-removed-refine "#515100")
(bg-removed-intense "#dfd23a")
(bg-removed-fringe "#d0c03f")
(fg-removed "#d4d48f")
(fg-removed-intense "#c0b05f")
(fg-removed-intense "#d0b05f")
(bg-diff-context "#1a1a1a")
;;; Paren match
@ -379,10 +381,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-vivendi-deuteranopia-palette-overrides nil
"Overrides for `modus-vivendi-deuteranopia-palette'.

View file

@ -182,24 +182,26 @@ which corresponds to a minimum contrast in relative luminance of
(bg-added "#00381f")
(bg-added-faint "#002910")
(bg-added-refine "#034f2f")
(bg-added-intense "#237f3f")
(bg-added-fringe "#237f3f")
(fg-added "#a0e0a0")
(fg-added-intense "#80e080")
(bg-changed "#363300")
(bg-changed-faint "#2a1f00")
(bg-changed-refine "#4a4a00")
(bg-changed-intense "#8a7a00")
(bg-changed-fringe "#8a7a00")
(fg-changed "#efef80")
(fg-changed-intense "#c0b05f")
(bg-removed "#4f1119")
(bg-removed-faint "#380a0f")
(bg-removed-refine "#781a1f")
(bg-removed-intense "#b81a1f")
(bg-removed-fringe "#b81a1f")
(fg-removed "#ffbfbf")
(fg-removed-intense "#ff9095")
(bg-diff-context "#1a1a1a")
;;; Paren match
(bg-paren-match "#2f7f9f")
@ -377,10 +379,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-vivendi-palette-overrides nil

View file

@ -121,12 +121,12 @@ which corresponds to a minimum contrast in relative luminance of
(bg-magenta-subtle "#552f5f")
(bg-cyan-subtle "#004065")
(bg-red-nuanced "#2c0614")
(bg-green-nuanced "#001904")
(bg-yellow-nuanced "#221000")
(bg-blue-nuanced "#0f0e39")
(bg-magenta-nuanced "#230631")
(bg-cyan-nuanced "#041529")
(bg-red-nuanced "#350f14")
(bg-green-nuanced "#002718")
(bg-yellow-nuanced "#2c1f00")
(bg-blue-nuanced "#131c4d")
(bg-magenta-nuanced "#2f133f")
(bg-cyan-nuanced "#04253f")
;;; Graphs
@ -176,24 +176,26 @@ which corresponds to a minimum contrast in relative luminance of
(bg-added "#003a2f")
(bg-added-faint "#002922")
(bg-added-refine "#035542")
(bg-added-intense "#237f4f")
(bg-added-fringe "#23884f")
(fg-added "#a0e0a0")
(fg-added-intense "#80e080")
(bg-changed "#363300")
(bg-changed-faint "#2a1f00")
(bg-changed-refine "#4a4a00")
(bg-changed-intense "#8a7a00")
(bg-changed-fringe "#8f7a30")
(fg-changed "#efef80")
(fg-changed-intense "#c0b05f")
(bg-removed "#4f1127")
(bg-removed-faint "#380a19")
(bg-removed-refine "#781a3a")
(bg-removed-intense "#b81a26")
(bg-removed-fringe "#b81a26")
(fg-removed "#ffbfbf")
(fg-removed-intense "#ff9095")
(bg-diff-context "#1a1f30")
;;; Uncommon accent backgrounds
(bg-ochre "#442c2f")
@ -377,10 +379,7 @@ as a symbol and the latter as a string.
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
with both as symbols. The latter is a named color that already
exists in the palette and is associated with a HEX-VALUE.
Semantic color mappings cannot be recursive: their value must be
either COLOR-NAME or HEX-VALUE.")
exists in the palette and is associated with a HEX-VALUE.")
(defcustom modus-vivendi-tinted-palette-overrides nil
"Overrides for `modus-vivendi-tinted-palette'.

View file

@ -933,7 +933,7 @@ WHAT is a value of nil, `never', or `always'."
(end-of-line)
(if (eobp) (point) (1+ (point)))))
(when (eobp)
(backward-delete-char 1)
(delete-char -1)
(beginning-of-line)
(recenter -1))
(bs--set-window-height)))

View file

@ -3730,7 +3730,7 @@ of the target of the link instead."
(process-file "file" nil t t "-L" "--" file)
(process-file "file" nil t t "--" file))
(when (bolp)
(backward-delete-char 1))
(delete-char -1))
(message "%s" (buffer-string)))))

View file

@ -53,6 +53,9 @@ customize `display-fill-column-indicator-column'. You can change the
character for the indicator setting `display-fill-column-indicator-character'.
The globalized version is `global-display-fill-column-indicator-mode',
which see.
This minor mode assumes the buffer uses a fixed-pitch font; if you
use variable-pitch fonts, the indicators on different lines might
not appear aligned.
See Info node `Displaying Boundaries' for details."
:lighter nil
(if display-fill-column-indicator-mode

View file

@ -108,11 +108,11 @@ program."
(defcustom dnd-direct-save-remote-files 'x
"Whether or not to perform a direct save of remote files.
This is compatible with less programs, but means dropped files
This is compatible with fewer programs, but means dropped files
will be saved with their actual file names, and not a temporary
file name provided by TRAMP.
This defaults to `x', which means only to drop that way on X
This defaults to `x', which means to save that way only on X
Windows."
:type '(choice (const :tag "Only use direct save on X Windows" x)
(const :tag "Use direct save everywhere" t)

View file

@ -1711,7 +1711,7 @@ See Info node `(elisp) Integer Basics'."
eobp eolp eq equal
floatp following-char framep
hash-table-p
identity integerp integer-or-marker-p
identity indirect-function integerp integer-or-marker-p
invocation-directory invocation-name
keymapp keywordp
list listp

View file

@ -3812,10 +3812,8 @@ Return the trampoline if found or nil otherwise."
;; Default to some temporary directory if no better option was
;; found.
finally (cl-return
(expand-file-name
(make-temp-file (file-name-sans-extension rel-filename) 0 ".eln"
nil)
temporary-file-directory))))
(make-temp-file (file-name-sans-extension rel-filename) nil ".eln"
nil))))
(defun comp-trampoline-compile (subr-name)
"Synthesize compile and return a trampoline for SUBR-NAME."

View file

@ -570,7 +570,7 @@ known to be truncated."
Honor `eldoc-echo-area-use-multiline-p' and
`eldoc-echo-area-prefer-doc-buffer'."
(cond
(;; Check if he wave permission to mess with echo area at all. For
(;; Check if we have permission to mess with echo area at all. For
;; example, if this-command is non-nil while running via an idle
;; timer, we're still in the middle of executing a command, e.g. a
;; query-replace where it would be annoying to overwrite the echo

View file

@ -1167,6 +1167,9 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:eg-result-string "#<process foo>")
(processp
:eval (processp t))
(process-status
:no-eval (process-status process)
:eg-result exit)
(delete-process
:no-value (delete-process process))
(kill-process

View file

@ -1711,8 +1711,8 @@ to in the global map, instead of cycling through the insertion ring."
(if (eq viper-current-state 'replace-state)
(undo 1)
(if viper-last-inserted-string-from-insertion-ring
(backward-delete-char
(length viper-last-inserted-string-from-insertion-ring))))
(delete-char
(- (length viper-last-inserted-string-from-insertion-ring)))))
)
;;first search through insertion history
(setq viper-temp-insertion-ring (ring-copy viper-insertion-ring)))

View file

@ -883,24 +883,22 @@ Conditionally try to reconnect and take appropriate action."
(erc--unhide-prompt)))
(defun erc--hide-prompt (proc)
(erc-with-all-buffers-of-server
proc nil ; sorta wish this was indent 2
(when (and erc-hide-prompt
(or (eq erc-hide-prompt t)
;; FIXME use `erc--target' after bug#48598
(memq (if (erc-default-target)
(if (erc-channel-p (car erc-default-recipients))
'channel
'query)
'server)
erc-hide-prompt))
(marker-position erc-insert-marker)
(marker-position erc-input-marker)
(get-text-property erc-insert-marker 'erc-prompt))
(with-silent-modifications
(add-text-properties erc-insert-marker (1- erc-input-marker)
`(display ,erc-prompt-hidden)))
(add-hook 'pre-command-hook #'erc--unhide-prompt-on-self-insert 0 t))))
(erc-with-all-buffers-of-server proc nil
(when (and erc-hide-prompt
(or (eq erc-hide-prompt t)
(memq (if erc--target
(if (erc--target-channel-p erc--target)
'channel
'query)
'server)
erc-hide-prompt))
(marker-position erc-insert-marker)
(marker-position erc-input-marker)
(get-text-property erc-insert-marker 'erc-prompt))
(with-silent-modifications
(add-text-properties erc-insert-marker (1- erc-input-marker)
`(display ,erc-prompt-hidden)))
(add-hook 'pre-command-hook #'erc--unhide-prompt-on-self-insert 91 t))))
(defun erc-process-sentinel (cproc event)
"Sentinel function for ERC process."

View file

@ -48,9 +48,6 @@
;; User data
nickname host login full-name info
;; Buffers
;;
;; This is an alist of the form (BUFFER . CHANNEL-DATA), where
;; CHANNEL-DATA is either nil or an erc-channel-user struct.
(buffers nil))
(cl-defstruct (erc-channel-user (:type vector) :named)

View file

@ -585,13 +585,15 @@ thumbnail buffer to be selected."
(erase-buffer))
(goto-char (point-max)))
(dolist (file files)
(let ((thumb (image-dired--get-create-thumbnail-file file)))
(when (string-match-p (image-dired--file-name-regexp) file)
(image-dired-insert-thumbnail
thumb file dired-buf
(image-dired--get-create-thumbnail-file file) file dired-buf
(cl-incf image-dired--number-of-thumbnails)))))
(if do-not-pop
(display-buffer buf)
(pop-to-buffer buf))
(if (> image-dired--number-of-thumbnails 0)
(if do-not-pop
(display-buffer buf)
(pop-to-buffer buf))
(message "No images selected"))
(image-dired--line-up-with-method)
(image-dired--update-header-line))))

View file

@ -1262,21 +1262,21 @@ Same for the ANSI bold and normal escape sequences."
(progn
(goto-char (point-min))
(while (and (search-forward "__\b\b" nil t) (not (eobp)))
(backward-delete-char 4)
(delete-char -4)
(put-text-property (point) (1+ (point))
'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (search-forward "\b\b__" nil t)
(backward-delete-char 4)
(delete-char -4)
(put-text-property (1- (point)) (point)
'font-lock-face 'Man-underline))))
(goto-char (point-min))
(while (and (search-forward "_\b" nil t) (not (eobp)))
(backward-delete-char 2)
(delete-char -2)
(put-text-property (point) (1+ (point)) 'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (search-forward "\b_" nil t)
(backward-delete-char 2)
(delete-char -2)
(put-text-property (1- (point)) (point) 'font-lock-face 'Man-underline))
(goto-char (point-min))
(while (re-search-forward "\\(.\\)\\(\b+\\1\\)+" nil t)
@ -1294,7 +1294,7 @@ Same for the ANSI bold and normal escape sequences."
;; condense it to a shorter line interspersed with ^H. Remove ^H with
;; their preceding chars (but don't put Man-overstrike). (Bug#5566)
(goto-char (point-min))
(while (re-search-forward ".\b" nil t) (backward-delete-char 2))
(while (re-search-forward ".\b" nil t) (delete-char -2))
(goto-char (point-min))
;; Try to recognize common forms of cross references.
(Man-highlight-references)
@ -1375,9 +1375,9 @@ script would have done them."
(if (or interactive (not Man-sed-script))
(progn
(goto-char (point-min))
(while (search-forward "_\b" nil t) (backward-delete-char 2))
(while (search-forward "_\b" nil t) (delete-char -2))
(goto-char (point-min))
(while (search-forward "\b_" nil t) (backward-delete-char 2))
(while (search-forward "\b_" nil t) (delete-char -2))
(goto-char (point-min))
(while (re-search-forward "\\(.\\)\\(\b\\1\\)+" nil t)
(replace-match "\\1"))
@ -1392,7 +1392,7 @@ script would have done them."
;; condense it to a shorter line interspersed with ^H. Remove ^H with
;; their preceding chars (but don't put Man-overstrike). (Bug#5566)
(goto-char (point-min))
(while (re-search-forward ".\b" nil t) (backward-delete-char 2))
(while (re-search-forward ".\b" nil t) (delete-char -2))
(Man-softhyphen-to-minus))
(defun Man-bgproc-filter (process string)

View file

@ -510,7 +510,7 @@ If SOURCE, mark the entry with this as the source."
(skip-chars-forward "^;\n")
;; skip \;
(while (eq (char-before) ?\\)
(backward-delete-char 1)
(delete-char -1)
(forward-char)
(skip-chars-forward "^;\n"))
(if (eq (or (char-after save-pos) 0) ?')

View file

@ -2147,7 +2147,7 @@ command `antlr-show-makefile-rules' for detail."
(antlr-makefile-insert-variable i " $(" ")"))
(insert "\n" (car antlr-makefile-specification))))
(if (string-equal (car antlr-makefile-specification) "\n")
(backward-delete-char 1))
(delete-char -1))
(when with-error
(goto-char (point-min))
(insert antlr-help-unknown-file-text))

View file

@ -47,9 +47,10 @@
;; definition-chasing, Flymake for diagnostics, Eldoc for at-point
;; documentation, etc. Eglot's job is generally *not* to provide
;; such a UI itself, though a small number of simple
;; counter-examples do exist, for example in the `eglot-rename'
;; command. When a new UI is evidently needed, consider adding a
;; new package to Emacs, or extending an existing one.
;; counter-examples do exist, e.g. in the `eglot-rename' command or
;; the `eglot-inlay-hints-mode' minor mode. When a new UI is
;; evidently needed, consider adding a new package to Emacs, or
;; extending an existing one.
;;
;; * Eglot was designed to function with just the UI facilities found
;; in the latest Emacs core, as long as those facilities are also
@ -483,7 +484,9 @@ This can be useful when using docker to run a language server.")
(VersionedTextDocumentIdentifier (:uri :version) ())
(WorkDoneProgress (:kind) (:title :message :percentage :cancellable))
(WorkspaceEdit () (:changes :documentChanges))
(WorkspaceSymbol (:name :kind) (:containerName :location :data)))
(WorkspaceSymbol (:name :kind) (:containerName :location :data))
(InlayHint (:position :label) (:kind :textEdits :tooltip :paddingLeft
:paddingRight :data)))
"Alist (INTERFACE-NAME . INTERFACE) of known external LSP interfaces.
INTERFACE-NAME is a symbol designated by the spec as
@ -803,6 +806,7 @@ treated as in `eglot--dbind'."
:formatting `(:dynamicRegistration :json-false)
:rangeFormatting `(:dynamicRegistration :json-false)
:rename `(:dynamicRegistration :json-false)
:inlayHint `(:dynamicRegistration :json-false)
:publishDiagnostics (list :relatedInformation :json-false
;; TODO: We can support :codeDescription after
;; adding an appropriate UI to
@ -1625,7 +1629,8 @@ under cursor."
(const :tag "Highlight links in document" :documentLinkProvider)
(const :tag "Decorate color references" :colorProvider)
(const :tag "Fold regions of buffer" :foldingRangeProvider)
(const :tag "Execute custom commands" :executeCommandProvider)))
(const :tag "Execute custom commands" :executeCommandProvider)
(const :tag "Inlay hints" :inlayHintProvider)))
(defun eglot--server-capable (&rest feats)
"Determine if current server is capable of FEATS."
@ -1641,6 +1646,14 @@ under cursor."
if (not (listp (cadr probe))) do (cl-return (if more nil (cadr probe)))
finally (cl-return (or (cadr probe) t)))))
(defun eglot--server-capable-or-lose (&rest feats)
"Like `eglot--server-capable', but maybe error out."
(let ((retval (apply #'eglot--server-capable feats)))
(unless retval
(eglot--error "Unsupported or ignored LSP capability `%s'"
(mapconcat #'symbol-name feats " ")))
retval))
(defun eglot--range-region (range &optional markers)
"Return region (BEG . END) that represents LSP RANGE.
If optional MARKERS, make markers."
@ -1764,6 +1777,8 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(eglot--setq-saving flymake-diagnostic-functions '(eglot-flymake-backend))
(eglot--setq-saving company-backends '(company-capf))
(eglot--setq-saving company-tooltip-align-annotations t)
(eglot--setq-saving eldoc-documentation-strategy
#'eldoc-documentation-compose)
(unless (eglot--stay-out-of-p 'imenu)
(add-function :before-until (local 'imenu-create-index-function)
#'eglot-imenu))
@ -1789,6 +1804,8 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(remove-hook 'change-major-mode-hook #'eglot--managed-mode-off t)
(remove-hook 'post-self-insert-hook 'eglot--post-self-insert-hook t)
(remove-hook 'pre-command-hook 'eglot--pre-command-hook t)
(remove-hook 'eldoc-documentation-functions #'eglot-hover-eldoc-function t)
(remove-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function t)
(cl-loop for (var . saved-binding) in eglot--saved-bindings
do (set (make-local-variable var) saved-binding))
(remove-function (local 'imenu-create-index-function) #'eglot-imenu)
@ -1802,12 +1819,11 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(delq (current-buffer) (eglot--managed-buffers server)))
(when (and eglot-autoshutdown
(null (eglot--managed-buffers server)))
(eglot-shutdown server))))))
;; Note: the public hook runs before the internal eglot--managed-mode-hook.
(run-hooks 'eglot-managed-mode-hook))
(eglot-shutdown server)))))))
(defun eglot--managed-mode-off ()
"Turn off `eglot--managed-mode' unconditionally."
(remove-overlays nil nil 'eglot--overlay t)
(eglot--managed-mode -1))
(defun eglot-current-server ()
@ -1846,7 +1862,10 @@ If it is activated, also signal textDocument/didOpen."
(when (and buffer-file-name (eglot-current-server))
(setq eglot--diagnostics nil)
(eglot--managed-mode)
(eglot--signal-textDocument/didOpen))))
(eglot--signal-textDocument/didOpen)
;; Run user hook after 'textDocument/didOpen' so server knows
;; about the buffer.
(run-hooks 'eglot-managed-mode-hook))))
(add-hook 'find-file-hook 'eglot--maybe-activate-editing-mode)
(add-hook 'after-change-major-mode-hook 'eglot--maybe-activate-editing-mode)
@ -2272,6 +2291,7 @@ THINGS are either registrations or unregisterations (sic)."
(defun eglot--before-change (beg end)
"Hook onto `before-change-functions' with BEG and END."
(remove-overlays beg end 'eglot--overlay t)
(when (listp eglot--recent-changes)
;; Records BEG and END, crucially convert them into LSP
;; (line/char) positions before that information is lost (because
@ -2284,6 +2304,9 @@ THINGS are either registrations or unregisterations (sic)."
(,end . ,(copy-marker end t)))
eglot--recent-changes)))
(defvar eglot--document-changed-hook '(eglot--signal-textDocument/didChange)
"Internal hook for doing things when the document changes.")
(defun eglot--after-change (beg end pre-change-length)
"Hook onto `after-change-functions'.
Records BEG, END and PRE-CHANGE-LENGTH locally."
@ -2324,7 +2347,7 @@ Records BEG, END and PRE-CHANGE-LENGTH locally."
eglot-send-changes-idle-time
nil (lambda () (eglot--when-live-buffer buf
(when eglot--managed-mode
(eglot--signal-textDocument/didChange)
(run-hooks 'eglot--document-changed-hook)
(setq eglot--change-idle-timer nil))))))))
;; HACK! Launching a deferred sync request with outstanding changes is a
@ -2482,7 +2505,7 @@ When called interactively, use the currently active server"
:textDocument/didClose `(:textDocument ,(eglot--TextDocumentIdentifier)))))
(defun eglot--signal-textDocument/willSave ()
"Send textDocument/willSave to server."
"Maybe send textDocument/willSave to server."
(let ((server (eglot--current-server-or-lose))
(params `(:reason 1 :textDocument ,(eglot--TextDocumentIdentifier))))
(when (eglot--server-capable :textDocumentSync :willSave)
@ -2494,7 +2517,7 @@ When called interactively, use the currently active server"
:timeout 0.5))))))
(defun eglot--signal-textDocument/didSave ()
"Send textDocument/didSave to server."
"Maybe send textDocument/didSave to server."
(eglot--signal-textDocument/didChange)
(when (eglot--server-capable :textDocumentSync :save)
(jsonrpc-notify
@ -2591,8 +2614,7 @@ Try to visit the target file for a richer summary line."
"Ask for :workspace/symbol on PAT, return list of formatted strings.
If BUFFER, switch to it before."
(with-current-buffer (or buffer (current-buffer))
(unless (eglot--server-capable :workspaceSymbolProvider)
(eglot--error "This LSP server isn't a :workspaceSymbolProvider"))
(eglot--server-capable-or-lose :workspaceSymbolProvider)
(mapcar
(lambda (wss)
(eglot--dbind ((WorkspaceSymbol) name containerName kind) wss
@ -2654,13 +2676,12 @@ If BUFFER, switch to it before."
(cl-defun eglot--lsp-xrefs-for-method (method &key extra-params capability)
"Make `xref''s for METHOD, EXTRA-PARAMS, check CAPABILITY."
(unless (eglot--server-capable
(or capability
(intern
(format ":%sProvider"
(cadr (split-string (symbol-name method)
"/"))))))
(eglot--error "Sorry, this server doesn't do %s" method))
(eglot--server-capable-or-lose
(or capability
(intern
(format ":%sProvider"
(cadr (split-string (symbol-name method)
"/"))))))
(let ((response
(jsonrpc-request
(eglot--current-server-or-lose)
@ -2757,8 +2778,7 @@ for which LSP on-type-formatting should be requested."
:end (eglot--pos-to-lsp-position end)))))
(t
'(:textDocument/formatting :documentFormattingProvider nil)))))
(unless (eglot--server-capable cap)
(eglot--error "Server can't format!"))
(eglot--server-capable-or-lose cap)
(eglot--apply-text-edits
(jsonrpc-request
(eglot--current-server-or-lose)
@ -3201,8 +3221,7 @@ Returns a list as described in docstring of `imenu--index-alist'."
"unknown symbol"))
nil nil nil nil
(symbol-name (symbol-at-point)))))
(unless (eglot--server-capable :renameProvider)
(eglot--error "Server can't rename!"))
(eglot--server-capable-or-lose :renameProvider)
(eglot--apply-workspace-edit
(jsonrpc-request (eglot--current-server-or-lose)
:textDocument/rename `(,@(eglot--TextDocumentPositionParams)
@ -3229,9 +3248,7 @@ at point. With prefix argument, prompt for ACTION-KIND."
'("quickfix" "refactor.extract" "refactor.inline"
"refactor.rewrite" "source.organizeImports")))
t))
(unless (or (not interactive)
(eglot--server-capable :codeActionProvider))
(eglot--error "Server can't execute code actions!"))
(eglot--server-capable-or-lose :codeActionProvider)
(let* ((server (eglot--current-server-or-lose))
(actions
(jsonrpc-request
@ -3457,6 +3474,129 @@ If NOERROR, return predicate, else erroring function."
(revert-buffer)
(pop-to-buffer (current-buffer)))))
;;; Inlay hints
(defface eglot-inlay-hint-face '((t (:height 0.8 :inherit shadow)))
"Face used for inlay hint overlays.")
(defface eglot-type-hint-face '((t (:inherit eglot-inlay-hint-face)))
"Face used for type inlay hint overlays.")
(defface eglot-parameter-hint-face '((t (:inherit eglot-inlay-hint-face)))
"Face used for parameter inlay hint overlays.")
(defcustom eglot-lazy-inlay-hints 0.3
"If non-nil, restrict LSP inlay hints to visible portion of buffer.
Value is number specifying how many seconds to wait after a
window has been (re)scrolled before requesting new inlay hints
for the visible region of the window being manipulated.
If nil, then inlay hints are requested for the entire buffer.
This value is only meaningful if the minor mode
`eglot-inlay-hints-mode' is true.
"
:type 'number
:version "29.1")
(defun eglot--inlay-hints-fully ()
(eglot--widening (eglot--update-hints-1 (point-min) (point-max))))
(cl-defun eglot--inlay-hints-lazily (&optional (buffer (current-buffer)))
(eglot--when-live-buffer buffer
(when eglot--managed-mode
(dolist (window (get-buffer-window-list nil nil 'visible))
(eglot--update-hints-1 (window-start window) (window-end window))))))
(defun eglot--update-hints-1 (from to)
"Request LSP inlay hints and annotate current buffer from FROM to TO."
(let* ((buf (current-buffer))
(paint-hint
(eglot--lambda ((InlayHint) position kind label paddingLeft paddingRight)
(goto-char (eglot--lsp-position-to-point position))
(let ((ov (make-overlay (point) (point)))
(left-pad (and paddingLeft (not (memq (char-before) '(32 9)))))
(right-pad (and paddingRight (not (memq (char-after) '(32 9)))))
(text (if (stringp label) label (plist-get label :value))))
(overlay-put ov 'before-string
(propertize
(concat (and left-pad " ") text (and right-pad " "))
'face (pcase kind
(1 'eglot-type-hint-face)
(2 'eglot-parameter-hint-face)
(_ 'eglot-inlay-hint-face))))
(overlay-put ov 'eglot--inlay-hint t)
(overlay-put ov 'eglot--overlay t)))))
(jsonrpc-async-request
(eglot--current-server-or-lose)
:textDocument/inlayHint
(list :textDocument (eglot--TextDocumentIdentifier)
:range (list :start (eglot--pos-to-lsp-position from)
:end (eglot--pos-to-lsp-position to)))
:success-fn (lambda (hints)
(eglot--when-live-buffer buf
(eglot--widening
(remove-overlays from to 'eglot--inlay-hint t)
(mapc paint-hint hints))))
:deferred 'eglot--update-hints-1)))
(defun eglot--inlay-hints-after-scroll (window display-start)
(cl-macrolet ((wsetq (sym val) `(set-window-parameter window ',sym ,val))
(wgetq (sym) `(window-parameter window ',sym)))
(let ((buf (window-buffer window))
(timer (wgetq eglot--inlay-hints-timer))
(last-display-start (wgetq eglot--last-inlay-hint-display-start)))
(when (and eglot-lazy-inlay-hints
;; FIXME: If `window' is _not_ the selected window,
;; then for some unknown reason probably related to
;; the overlays added later to the buffer, the scroll
;; function will be called indefinitely. Not sure if
;; an Emacs bug, but prevent useless duplicate calls
;; by saving and examining `display-start' fixes it.
(not (eql last-display-start display-start)))
(when timer (cancel-timer timer))
(wsetq eglot--last-inlay-hint-display-start
display-start)
(wsetq eglot--inlay-hints-timer
(run-at-time
eglot-lazy-inlay-hints
nil (lambda ()
(eglot--when-live-buffer buf
(when (eq buf (window-buffer window))
(eglot--update-hints-1 (window-start window)
(window-end window))
(wsetq eglot--inlay-hints-timer nil))))))))))
(define-minor-mode eglot-inlay-hints-mode
"Minor mode annotating buffer with LSP inlay hints."
:global nil
(cond (eglot-inlay-hints-mode
(cond
((not (eglot--server-capable :inlayHintProvider))
(eglot--warn
"No :inlayHintProvider support. Inlay hints will not work."))
(eglot-lazy-inlay-hints
(add-hook 'eglot--document-changed-hook
#'eglot--inlay-hints-lazily t t)
(add-hook 'window-scroll-functions
#'eglot--inlay-hints-after-scroll nil t)
;; Maybe there isn't a window yet for current buffer,
;; so `run-at-time' ensures this runs after redisplay.
(run-at-time 0 nil #'eglot--inlay-hints-lazily))
(t
(add-hook 'eglot--document-changed-hook
#'eglot--inlay-hints-fully nil t)
(eglot--inlay-hints-fully))))
(t
(remove-hook 'eglot--document-changed-hook
#'eglot--inlay-hints-lazily t)
(remove-hook 'eglot--document-changed-hook
#'eglot--inlay-hints-fully t)
(remove-hook 'window-scroll-functions
#'eglot--inlay-hints-after-scroll t)
(remove-overlays nil nil 'eglot--inlay-hint t))))
;;; Hacks
;;;

View file

@ -6376,7 +6376,7 @@ for key in sorted(result):
"List files containing Python imports that may be useful in the current buffer."
(if-let (((featurep 'project)) ;For compatibility with Emacs < 26
(proj (project-current)))
(seq-filter (lambda (s) (string-match-p "\\.py[ciw]?\\'" s))
(seq-filter (lambda (s) (string-match-p "\\.py[iwx]?\\'" s))
(project-files proj))
(list default-directory)))

View file

@ -937,7 +937,7 @@ column specified by the function `current-left-margin'."
(defcustom read-quoted-char-radix 8
"Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
Legitimate radix values are 8, 10 and 16."
Supported radix values are 8, 10 and 16."
:type '(choice (const 8) (const 10) (const 16))
:group 'editing-basics)
@ -1012,21 +1012,25 @@ any other non-digit terminates the character code and is then used as input."))
This is useful for inserting control characters.
With argument, insert ARG copies of the character.
If the first character you type after this command is an octal digit,
you should type a sequence of octal digits that specify a character code.
Any nondigit terminates the sequence. If the terminator is a RET,
it is discarded; any other terminator is used itself as input.
If the first character you type is an octal digit, the sequence of
one or more octal digits you type is interpreted to specify a
character code. Any character that is not an octal digit terminates
the sequence. If the terminator is a RET, it is discarded; any
other terminator is used itself as input and is inserted.
The variable `read-quoted-char-radix' specifies the radix for this feature;
set it to 10 or 16 to use decimal or hex instead of octal.
set it to 10 or 16 to use decimal or hex instead of octal. If you change
the radix, the characters interpreted as specifying a character code
change accordingly: 0 to 9 for decimal, 0 to F for hex.
In overwrite mode, this function inserts the character anyway, and
does not handle octal digits specially. This means that if you use
overwrite as your normal editing mode, you can use this function to
insert characters when necessary.
does not handle octal (or decimal or hex) digits specially. This means
that if you use overwrite mode as your normal editing mode, you can use
this function to insert characters when necessary.
In binary overwrite mode, this function does overwrite, and octal
digits are interpreted as a character code. This is intended to be
useful for editing binary files."
(or decimal or hex) digits are interpreted as a character code. This
is intended to be useful for editing binary files."
(interactive "*p")
(let* ((char
;; Avoid "obsolete" warnings for translation-table-for-input.

View file

@ -195,7 +195,9 @@ untagged NEWS entry."
(goto-char (line-beginning-position))
(cond ((or (looking-at (rx bol (or "---" "+++") eol)))
(forward-line 2))
((or (looking-at (rx bol "*** ")))
((or (looking-at (rx bol "**"
(zero-or-more "*")
" ")))
(forward-line 1)))
(outline-previous-visible-heading 1)
(forward-line -1)

View file

@ -495,7 +495,7 @@ When called with 2 \\[universal-argument] prefix args, disable magic word recogn
sep1 (cdr (assoc sep reftex-multiref-punctuation))
labels (cdr labels))
(when cut
(backward-delete-char cut)
(delete-char (- cut))
(setq cut nil))
;; remove ~ if we do already have a space

View file

@ -1299,7 +1299,7 @@ Otherwise, the A or B file present is copied to the output file."
(setq ancestor-dir-files (cdr ancestor-dir-files))))
(if output-dir
(insert "output=" output-dir f "\t"))
(backward-delete-char 1)
(delete-char -1)
(insert "\n")))))
;;; Common setup routines

View file

@ -1690,11 +1690,11 @@ Do not call directly!"
(progn
(goto-char (point-min))
(while (search-forward "__\b\b" nil t)
(backward-delete-char 4)
(delete-char -4)
(woman-set-face (point) (1+ (point)) 'woman-italic))
(goto-char (point-min))
(while (search-forward "\b\b__" nil t)
(backward-delete-char 4)
(delete-char -4)
(woman-set-face (1- (point)) (point) 'woman-italic))))
;; Interpret overprinting to indicate bold face:

View file

@ -3498,18 +3498,18 @@ init_iterator (struct it *it, struct window *w,
static int
get_narrowed_width (struct window *w)
{
int fact;
/* In a character-only terminal, only one font size is used, so we
can use a smaller factor. */
fact = EQ (Fterminal_live_p (Qnil), Qt) ? 2 : 3;
return fact * window_body_width (w, WINDOW_BODY_IN_CANONICAL_CHARS);
int fact = EQ (Fterminal_live_p (Qnil), Qt) ? 2 : 3;
int width = window_body_width (w, WINDOW_BODY_IN_CANONICAL_CHARS);
return fact * max (1, width);
}
static int
get_narrowed_len (struct window *w)
{
return get_narrowed_width (w) *
window_body_height (w, WINDOW_BODY_IN_CANONICAL_CHARS);
int height = window_body_height (w, WINDOW_BODY_IN_CANONICAL_CHARS);
return get_narrowed_width (w) * max (1, height);
}
ptrdiff_t

View file

@ -5950,8 +5950,10 @@ void
x_end_cr_clip (struct frame *f)
{
cairo_restore (FRAME_CR_CONTEXT (f));
#ifdef HAVE_XDBE
if (FRAME_X_DOUBLE_BUFFERED_P (f))
x_mark_frame_dirty (f);
#endif
}
void
@ -7486,8 +7488,10 @@ x_update_end (struct frame *f)
MOUSE_HL_INFO (f)->mouse_face_defer = false;
#ifdef USE_CAIRO
# ifdef HAVE_XDBE
if (!FRAME_X_DOUBLE_BUFFERED_P (f) && FRAME_CR_CONTEXT (f))
cairo_surface_flush (cairo_get_target (FRAME_CR_CONTEXT (f)));
# endif
#endif
/* If double buffering is disabled, finish the update here.
@ -21159,8 +21163,10 @@ handle_one_xevent (struct x_display_info *dpyinfo,
x_flush (WINDOW_XFRAME (XWINDOW (bar->window)));
}
#ifdef HAVE_XDBE
if (f && FRAME_X_DOUBLE_BUFFERED_P (f))
x_drop_xrender_surfaces (f);
#endif
goto OTHER;
}

View file

@ -147,7 +147,7 @@
(should (looking-at-p (regexp-quote erc-prompt)))
(setq erc-server-process (buffer-local-value 'erc-server-process
(get-buffer "ServNet"))
erc-default-recipients '("#chan")))
erc--target (erc--target-from-string "#chan")))
(with-current-buffer (get-buffer-create "bob")
(erc-tests--send-prep)
@ -155,7 +155,7 @@
(should (looking-at-p (regexp-quote erc-prompt)))
(setq erc-server-process (buffer-local-value 'erc-server-process
(get-buffer "ServNet"))
erc-default-recipients '("bob")))
erc--target (erc--target-from-string "bob")))
(ert-info ("Value: t (default)")
(should (eq erc-hide-prompt t))

View file

@ -129,3 +129,92 @@ The corresponding key "% Y" is now bound by default in Dired.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=-=
Name: tag7-2level
Point-Char: |
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
|+++
** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
|** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=-=
Name: tag8-2level
Point-Char: |
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
+++
|** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
|** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=-=
Name: tag9-2level-notag
Point-Char: |
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
|** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=
+++
** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
---
|** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=-=
Name: tag10-4level
Point-Char: |
=-=
+++
**** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
|**** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=
+++
**** 'dired-do-relsymlink-regexp' moved from dired-x to dired.
The corresponding key "% Y" is now bound by default in Dired.
---
|**** 'M-G' is now bound to 'dired-goto-subdir'.
Before, that binding was only available if the 'dired-x' package was
loaded.
=-=-=

View file

@ -622,7 +622,7 @@
(insert "foo")
(goto-char 2)
(insert " ")
(backward-delete-char 1)
(delete-char -1)
(buffer-hash))
(sha1 "foo"))))