Compare commits

..

No commits in common. "master" and "emacs-31.1-rc1" have entirely different histories.

755 changed files with 13829 additions and 30714 deletions

View file

@ -7,6 +7,7 @@
(emacs-lisp-docstring-fill-column . 72)
(vc-git-annotate-switches . "-w")
(bug-reference-url-format . "https://debbugs.gnu.org/%s")
(diff-add-log-use-relative-names . t)
(etags-regen-regexp-alist
.
((("c" "objc") .
@ -56,8 +57,7 @@
(change-log-mode . ((add-log-time-zone-rule . t)
(fill-column . 74)
(mode . bug-reference)))
(diff-mode . ((mode . whitespace)
(diff-add-log-use-relative-names . t)))
(diff-mode . ((mode . whitespace)))
(emacs-lisp-mode . ((indent-tabs-mode . nil)
(electric-quote-comment . nil)
(electric-quote-string . nil)

View file

@ -15670,7 +15670,7 @@
* lisp/progmodes/cc-mode.el (c-depropertize-CPP): Test for general ml strings
rather than C++ raw strings.
(c-unescaped-nls-in-string-p): Handle languages with ml strings.
(c-clear-string-fences): Fix bug with wrong parenthesization.
(c-clear-string-fences): Fix bug with wrong parenthesisation.
(c-before-change-check-unbalanced-strings)
(c-after-change-mark-abnormal-strings, c-after-change-escape-NL-in-string):
Adapt for multi-line strings.
@ -17441,7 +17441,7 @@
2021-07-30 Mattias Engdegård <mattiase@acm.org>
Simplify lexical let-optimizations
Simplify lexical let-optimisations
Ensure in cconv that let-bindings have the normal form (VAR EXPR)
where VAR is a valid variable name, so that we don't need to keep
@ -57196,7 +57196,7 @@
* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
'javac': Column numbers are 1-based by default; remove subtraction and
η-reduce. Translate regexp to rx (mechanized).
η-reduce. Translate regexp to rx (mechanised).
* test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data):
Adapt 'javac' test cases to the change.

View file

@ -672,7 +672,7 @@
format.
This patch fixes various problems preventing this script from
working. The job of this script is to collect Emacs' dependencies
working. The job of this script is to collect Emacs' dependanicies
and the (MSYS2/MinGW64) source archives for dependencies
(including 2nd etc. order dependencies) into zip archives. GPL
requires distributing such archives (along with Emacs' own
@ -99218,7 +99218,7 @@
granular.
* lisp/progmodes/java-ts-mode.el (java-ts-mode): Use regexp-opt to
distinguish in more detail.
distinguish more granularly.
2022-12-09 Randy Taylor <dev@rjt.dev>
@ -114450,7 +114450,7 @@
Make Gnus respect mode-line-buffer-identification-keymap
* lisp/gnus/gnus-group.el (gnus-group-set-mode-line): Use
'propertized-buffer-identification' to buttonize and fontify the
'propertized-buffer-identification' to buttonise and fontify the
buffer name.
* lisp/gnus/gnus-sum.el (gnus-set-mode-line):
* lisp/gnus/gnus.el (gnus-mode-line-buffer-identification): Adjust

View file

@ -2,121 +2,6 @@
* Version 31.1 released.
2026-08-24 Sean Whitton <spwhitton@spwhitton.name>
Delete test that hangs
* test/lisp/tab-bar-tests.el
(tab-bar-tests-quit-restore-window): Delete test that hangs, for
the Emacs 31.1 release. Do not merge to master.
2026-08-23 Ulrich Müller <ulm@gentoo.org>
em-script-tests: don't load the site file
* test/lisp/eshell/em-script-tests.el (em-script-test/batch-file)
(em-script-test/batch-file/shebang): Invoke Emacs with -Q to
suppress site file loading. (Bug#81679)
2026-08-23 Ulrich Müller <ulm@gentoo.org>
emacsclient-tests: don't load the site file
* test/lib-src/emacsclient-tests.el
(emacsclient-test-alternate-editor-allows-arguments)
(emacsclient-test-alternate-editor-allows-quotes): Invoke the
alternate editor with -Q to suppress site file loading. (Bug#81676)
2026-08-23 Stephen Berman <stephen.berman@gmx.net>
Fix navigating vertical completions with annotations (bug#81645)
* lisp/simple.el (last-completion): When finding the last column
in the completions list, account for annotations on the candidate.
2026-08-23 Philip Kaludercic <philipk@posteo.net>
Fix 'describe-package' for the Emacs pseudo package
* lisp/emacs-lisp/package.el (describe-package-1): Manually
construct a package-desc object if the package being described
in 'emacs', otherwise fall back to 'package-get-descriptor'.
This is necessary since 'package-get-descriptor' doesn't handle
pseudo packages. (Bug#81671)
2026-08-23 Eli Zaretskii <eliz@gnu.org>
Avoid errors in text-only client frames of PGTK build
* lisp/net/browse-url.el (browse-url): Don't call
pgtk-backend-display-class on TTY frame, as it will signal an
error. (Bug#81666)
2026-08-21 Michael Albinus <michael.albinus@gmx.de>
Backport: Restrict Tramp user name
* doc/misc/tramp.texi (File name syntax): The user name can also
be an environment variable.
* lisp/net/tramp.el (tramp-build-prefix-regexp):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name)
(tramp-gvfs-get-file-attributes, tramp-gvfs-file-name)
(tramp-gvfs-url-host, tramp-gvfs-handler-mounted-unmounted)
(tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec-entry)
(tramp-gvfs-mount-spec):
* lisp/net/tramp-rclone.el (tramp-rclone-parse-device-names)
(tramp-rclone-remote-file-name):
* lisp/net/tramp-smb.el (tramp-smb-get-share, tramp-smb-get-localname):
Use string-anchored regexp, not line-anchored.
* lisp/net/tramp.el (tramp-prefix-regexp): Adapt docstring.
(tramp-user-regexp): Exclude shell meta characters.
(tramp-dissect-file-name, tramp-file-name-handler):
Expand environment variable.
(tramp-convert-file-attributes):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes):
Quote symbolic link target with remote file name syntax.
* test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax)
(tramp-test01-file-name-syntax-simplified)
(tramp-test01-file-name-syntax-separate)
(tramp-test02-file-name-dissect)
(tramp-test02-file-name-dissect-simplified)
(tramp-test02-file-name-dissect-separate)
(tramp-test21-file-links): Extend test.
(cherry picked from commit f3e7104d05bdb8e32ba13bf75604108ad88536dc)
2026-08-21 Spencer Baugh <sbaugh@janestreet.com>
Fix TAB to wrap with completion-auto-select t
* lisp/minibuffer.el (completions--clear-selection): New
function.
(minibuffer-hide-completions): Call it.
* lisp/simple.el (next-column-completion): Call it (bug#81635).
* test/lisp/minibuffer-tests.el
(completion-auto-select-test-bug81635): New test.
2026-08-21 Juri Linkov <juri@linkov.net>
* lisp/progmodes/c-ts-mode.el (c-ts-mode--thing-settings): Remove 'comment'.
Comment out the 'comment' thing since 'treesit-forward-comment'
is not ready to handle block comments (bug#80837).
Do not merge to master.
2026-08-20 Yuan Fu <casouri@gmail.com>
Fix prev-adaptive-prefix anchor (bug#61314)
* lisp/treesit.el (treesit-simple-indent-presets):
Replace (match-beginning 1) with (skip-syntax-forward "-"), both
returns the position of the beginning of the prefix, but
skip-syntax-forward always works regardless whether
adaptive-fill-regexp has a match group for the prefix.
2026-08-17 Sean Whitton <spwhitton@spwhitton.name>
* doc/misc/efaq.texi (New in Emacs 31): New node.
@ -1752,7 +1637,7 @@
* lisp/treesit.el:
(treesit--embed-languages-need-full-parse): New variable.
(treesit--set-embed-ranges): Reparse full range if the language
(treesit--set-embed-ranges): Reparse full range if the langauge
needs it.
2026-06-19 Stephen Berman <stephen.berman@gmx.net>
@ -2091,7 +1976,7 @@
* src/xselect.c (x_display_selection_waiting_message):
(x_cancel_atimer):
(x_get_foreign_selection): Use a pointer to a timer variable, which is
cleared when the timer runs or is otherwise canceled. Don't cancel
cleared when the timer runs or is otherwise cancelled. Don't cancel
the timer twice.
2026-06-06 Pip Cet <pipcet@protonmail.com>
@ -3541,7 +3426,7 @@
call into the backend to gather the VC state. Since this function is
also called from another context, where the requirements are less clear,
keeping current smenatics in that situation seemed prudent, so the new
behavior is activate with a new optional parameter.
behaviour is activate with a new optional parameter.
* lisp/vc/vc-dir.el (vc-dir-resynch-file): Call
vc-dir-recompute-file-state with truename=t.
@ -4725,7 +4610,7 @@
2026-04-30 Vladimir Kazanov <vekazanov@gmail.com>
Add ERT coverage for read_key_sequence behavior
Add ERT coverage for read_key_sequence behaviour
* test/src/keyboard-tests.el
(keyboard-tests--rks-fake-posn)
@ -7208,7 +7093,7 @@
Implement new Dired handling of errors from 'ls'
The error messages are now displayed in a popped up buffer instead
of being output in the Dired buffer and signaling an error. The
of being output in the Dired buffer and signalling an error. The
file name bounds in Dired entries are now determined solely by the
offsets calculated by 'ls' with the --dired option and
consequently Dired now reliably recognizes file names that contain
@ -8780,10 +8665,10 @@
2026-03-03 Mattias Engdegård <mattias.engdegard@gmail.com>
Faster JSON string serialization (bug#80529)
Faster JSON string serialisation (bug#80529)
* src/json.c (json_out_string):
Optimize for runs of non-special ASCII chars.
Optimise for runs of non-special ASCII chars.
This seems to be a a substantial performance gain for long strings but a
smaller regression for short strings (up to 6 chars or thereabouts,
@ -9058,7 +8943,7 @@
2026-02-28 Mattias Engdegård <mattias.engdegard@gmail.com>
Implement string> as a compiler macro instead of an optimization
Implement string> as a compiler macro instead of an optimisation
This doesn't affect the generated code.
@ -9282,10 +9167,10 @@
2026-02-26 Mattias Engdegård <mattias.engdegard@gmail.com>
Simplify peephole optimization rule
Simplify peephole optimisation rule
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Remove some obsolete dynamic variable optimizations that no longer
Remove some obsolete dynamic variable optimisations that no longer
improve any code. Fix broken logging (thanks Pip).
2026-02-26 Yuan Fu <casouri@gmail.com>
@ -9369,7 +9254,7 @@
Fix eglot-tests on MacOS (bug#80479)
* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Normalize 'temporary-file-directory' to stave off problems that
Normalise 'temporary-file-directory' to stave off problems that
occur when it contains symlinks, which is common on MacOS.
2026-02-24 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -10019,7 +9904,7 @@
2026-02-20 Mattias Engdegård <mattias.engdegard@gmail.com>
Optimize closed-over variables earlier
Optimise closed-over variables earlier
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Treat 'internal-get-closed-var' as a special form and delete it in
@ -10027,7 +9912,7 @@
2026-02-20 Mattias Engdegård <mattias.engdegard@gmail.com>
Remove two obsolete peephole optimization rules
Remove two obsolete peephole optimisation rules
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Remove two rules: the first could sometimes skip a varref in a loop;
@ -10036,7 +9921,7 @@
from the top to the bottom of a loop but depended on the first to work.
Both were quite slow, easily measurable when compiling big files, and
arguably O(n³) which isn't very good for a peephole optimization.
arguably O(n³) which isn't very good for a peephole optimisation.
2026-02-20 Sean Whitton <spwhitton@spwhitton.name>
@ -11164,7 +11049,7 @@
2026-02-11 Mattias Engdegård <mattias.engdegard@gmail.com>
Better 'prog1' optimization
Better 'prog1' optimisation
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Always evaporate 'prog1' when the tail is effect-free, even
@ -11633,7 +11518,7 @@
(package--autosuggest-find-candidates)
(package--autosugest-line-format, package-autosuggest-face)
(package--autosuggest-after-change-mode, package-autosuggest):
Remove definitions needed to recognize suggestions from here.
Remove definitions needed to recognise suggestions from here.
* lisp/emacs-lisp/package-activate.el (package-autosuggest-style)
(package--autosuggest-database, package--autosuggest-suggested)
@ -11681,7 +11566,7 @@
Eglot: fix thinko in eglot--async-request
Just because a specific request of a specific "hint" is
canceled doesn't mean we can cancel the other's too. Also
cancelled doesn't mean we can cancel the other's too. Also
eglot-advertise-cancellation = nil was subtly broken.
This manifested itself mostly in Eglot semantic tokens.
@ -12120,7 +12005,7 @@
* lisp/progmodes/eglot.el (eglot-server-programs): Use "elp" for erlang-mode.
erlang_ls has been archived in favor of erlang-language-platform.
erlang_ls has been archived in favour of erlang-language-platform.
Suggested by Alan & Kim Zimmerman <alan.zimm@gmail.com> (bug#79943).
2026-01-30 Juri Linkov <juri@linkov.net>
@ -12780,11 +12665,11 @@
2026-01-23 Mattias Engdegård <mattias.engdegard@gmail.com>
* lisp/emacs-lisp/pcase.el (pcase--macroexpand): Normalize atom etc.
* lisp/emacs-lisp/pcase.el (pcase--macroexpand): Normalise atom etc.
Transform (pred P) for P in {atom, nlistp, identity, not} into
predicates that pcase already understands in type terms.
This doesn't affect the behavior but generates better code.
This doesn't affect the behaviour but generates better code.
2026-01-23 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -13026,7 +12911,7 @@
It was completely broken, with a cancel being set for every sent (and
probably already received) async request, and no actual discarding
of the response of a canceled request.
of the response of a cancelled request.
* lisp/progmodes/eglot.el (eglot--async-request): Fix cancellation
of async requests.
@ -14843,7 +14728,7 @@
associated alist entries `tab-name' and `tab-group'.
* lisp/tab-bar.el (display-buffer-in-tab): Restructure docstring for
clarity. Describe the `reusable-frames' behavior first (as if it finds
clarity. Describe the `reusable-frames' behaviour first (as if it finds
a frame with a suitable tab then the `tab-name' entry is not used).
(display-buffer-in-new-tab): Use consistent wording.
@ -14946,7 +14831,7 @@
2026-01-01 Mattias Engdegård <mattias.engdegard@gmail.com>
Clean up a lapcode peephole optimization rule
Clean up a lapcode peephole optimisation rule
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Clean up and simplify an old jump-to-conditional-jump rule that was
@ -15407,7 +15292,7 @@
* lisp/subr.el (split-string):
Make it clear that the SEPARATORS argument should not match the empty
string, since the behavior was entirely an artefact of the original
string, since the behaviour was entirely an artefact of the original
implementation in this case; it makes little sense otherwise.
Clean up the examples for conciseness and do not waste space on
@ -15418,8 +15303,8 @@
Various split-string improvements
* lisp/subr.el (split-string):
Fix quadratic behavior in (split-string "x:x:x..." ":" nil " +").
General code reorganization for speed and reduced allocation.
Fix quadratic behaviour in (split-string "x:x:x..." ":" nil " +").
General code reorganisation for speed and reduced allocation.
Fix a regexp bug; eg, (split-string "A;B" "," nil ";\\|:")
* test/lisp/subr-tests.el (subr-test-split-string):
@ -15686,7 +15571,7 @@
2025-12-22 Mattias Engdegård <mattias.engdegard@gmail.com>
Recognize %b and %B in compile-time format string checker
Recognise %b and %B in compile-time format string checker
* lisp/emacs-lisp/bytecomp.el (byte-compile-format-warn): Add b and B.
@ -16926,7 +16811,7 @@
(package-vc-tests-packages): Rename test packages to avoid
suffix being treated as a version number by
`package--description-file'.
(package-vc-tests-add): Ensure suffix capitalization remains as
(package-vc-tests-add): Ensure suffix capitalisation remains as
original when calling `replace-regexp-in-string'.
(package-vc-tests-create-repository): Fix typo in temporary
email and use a reserved TLD.
@ -17331,7 +17216,7 @@
* lisp/progmodes/antlr-mode.el: Correct indentation of rule headers.
(antlr-indent-line): When looking for the end of a rule header, do
not stop at colon if that is followed by another one, because this
the scope name of a preceding grammar action.
the scope name of a preceeding grammar action.
* lisp/progmodes/antlr-mode.el: Support more action languages.
(antlr-language-alist): Add entries for C, Delphi, JavaScript,
@ -18682,7 +18567,7 @@
Therefore it's better for the ergonomics of this commonly used command
to leave the code as it was and simply rely on C-n to bring in the
default value (which is the current symbol name), instead of forcing
users accustomed to the previous behavior remember to press sth like
users accustomed to the previous behaviour remember to press sth like
M-DEL to clean the input.
* lisp/progmodes/eglot.el (eglot-rename): Tweak.
@ -19220,7 +19105,7 @@
* lisp/emacs-lisp/cond-star.el (cond*-convert-condition): Bind
unused values to fresh symbols, to avoid the compiler warning
that a symbol starting with an underscore is accessed later on.
This mirrors the behavior of `if-let*' and family.
This mirrors the behaviour of `if-let*' and family.
2025-11-24 Juri Linkov <juri@linkov.net>
@ -21426,9 +21311,9 @@
(rcirc-markup-attributes): Delete markup codes straight after
processing it, to correctly handle toggling codes. E.g. when
processing the message "one ^Btwo^B three", we previously
recognized the first interval "^Btwo^B" and moved over the ^B.
recognised the first interval "^Btwo^B" and moved over the ^B.
Searching for the next range to markup, we would now falsely
recognize "^B three" to be another markup range, instead of it
recognise "^B three" to be another markup range, instead of it
being the negative toggle. By removing the processed codes, we
avoid this issue. This reverts the functionality removed in
946ceca2, and therefore also re-adds the check to make an
@ -21686,7 +21571,7 @@
Define compiler macros for /=, atom and nlistp
Calls to these functions were previously rewritten in terms of other
functions both in the optimizer and during codegen, for no good reason.
functions both in the optimiser and during codegen, for no good reason.
This also resulted in poor diagnostics: wrong-arity calls to 'atom' and
'nlistp' produced doubled but slightly-different warnings, and no
@ -21700,11 +21585,11 @@
2025-10-30 Mattias Engdegård <mattias.engdegard@gmail.com>
Fix numeric comparison bug when optimization is disabled
Fix numeric comparison bug when optimisation is disabled
* lisp/emacs-lisp/bytecomp.el (byte-compile-cmp):
Don't assume that N-ary comparisons have been normalized, which is done
in the optimizer. Reported by Pip Cet.
Don't assume that N-ary comparisons have been normalised, which is done
in the optimiser. Reported by Pip Cet.
2025-10-30 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -21726,7 +21611,7 @@
* lisp/textmodes/markdown-ts-mode.el:
(markdown-ts--convert-code-block-language): Return nil if the
language doesn't have a corresponding major mode in
langauge doesn't have a corresponding major mode in
markdown-ts-code-block-source-mode-map.
2025-10-30 Yuan Fu <casouri@gmail.com>
@ -21930,14 +21815,14 @@
2025-10-24 Mattias Engdegård <mattias.engdegard@gmail.com>
Fix peephole optimizer bug for symbolp
Fix peephole optimiser bug for symbolp
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Don't sink 'symbolp' past 'unbind'; it's unsafe.
2025-10-24 Mattias Engdegård <mattias.engdegard@gmail.com>
Move some constants into the peephole optimizer
Move some constants into the peephole optimiser
* lisp/emacs-lisp/byte-opt.el (byte-tagref-ops, byte-conditional-ops)
(byte-after-unbind-ops, byte-compile-side-effect-and-error-free-ops)
@ -22967,7 +22852,7 @@
Fix Tramp customization
Do not use the ;;;###tramp-autoload cookie for defcustoms. This
damages the customization when Tramp is autoloaded. Reported by
damages the customisation when Tramp is autoloaded. Reported by
Joel Reicher <joel.reicher@gmail.com>.
* lisp/net/tramp-cache.el (tramp-verbose): Declare.
@ -25368,7 +25253,7 @@
2025-09-07 Mattias Engdegård <mattias.engdegard@gmail.com>
Harmonize doc strings for {re-,posix-,}search-{forward,backward}
Harmonise doc strings for {re-,posix-,}search-{forward,backward}
The doc strings for re-search-forward and re-search-backward have been
improved (bug#25193, bug#31584) but the corresponding posix- and
@ -26887,7 +26772,7 @@
The previous fix for this bug is an acceptable approach, but
more care must be taken when clearing a flymake--state object's
diagnostics. Refactor this behavior into a helper.
diagnostics. Refactor this behaviour into a helper.
* lisp/progmodes/flymake.el (flymake--clear-state): New helper.
(flymake--publish-diagnostics, flymake-start): Use it.
@ -35350,7 +35235,7 @@
* lisp/emacs-lisp/package.el (package-unpack, package-dir-info):
Check the marked files if in a Dired buffer, and otherwise
fallback on the previous behavior or if there was no selection.
fallback on the previous behaviour or if there was no selection.
(package-install-from-buffer): Document the feature.
* etc/NEWS: Mention the change.
@ -39809,7 +39694,7 @@
2025-03-25 Philipp Stephani <p.stephani2@gmail.com>
Mimic behavior of 'aref' when signaling out-of-range errors.
Mimic behavior of 'aref' when signalling out-of-range errors.
The convention used by 'aref' and friends is that for
'args-out-of-range', the error data is a list (SEQ INDEX). Use the same
@ -39825,7 +39710,7 @@
'args-out-of-range' means that some index argument isn't valid for a
given sequence/range, which isn't the case here. Instead, define a new
error symbol to mean "user-supplied buffer is too small." Since we
never specified nor tested which error symbol was signaled in this
never specified nor tested which error symbol was signalled in this
case, changing it shouldn't cause severe breakages.
* src/emacs-module.c (module_buffer_too_small): New helper function.
@ -44835,7 +44720,7 @@
type by default.
* doc/emacs/killing.texi (Clipboard):
* doc/lispref/frames.texi (Yanking Media): Document the new
behavior, and the new variables.
behaviour, and the new variables.
* etc/NEWS: Announce the change. (Bug#75116)
2025-02-22 Mauro Aranda <maurooaranda@gmail.com>
@ -50976,7 +50861,7 @@
* lisp/progmodes/go-ts-mode.el (go-ts-mode-test-flags):
(go-ts-mode--get-test-flags): New custom variable and function
for controlling test behavior.
for controlling test behaviour.
(go-ts-mode--compile-test): Updated to use new test flags
variable for passing extra information to the go test command
line.
@ -52293,13 +52178,13 @@
usability problem. It is relatively too easy to mistakenly
launch the function and, if a region of text is selected, have
potentially sensitive data sent out to a third-party service.
This commit changes the search function's default behavior so
This commit changes the search function's default behaviour so
that explicit confirmation is required before a region is sent
to a search engine. The behavior can be adjusted via the
to a search engine. The behaviour can be adjusted via the
newly-introduced 'eww-search-confirm-send-region' variable,
which is set to true by default.
* lisp/net/eww.el (eww-search-confirm-send-region): Add.
(eww-search-words): Update default 'eww-search-words' behavior
(eww-search-words): Update default 'eww-search-words' behaviour
so as to ask confirmation before sending the region to a search
engine. (Bug#74218)
@ -59679,7 +59564,7 @@
* lisp/vc/diff-mode.el (diff-vc-deduce-fileset): Signal
user-error when the buffer is narrowed.
* lisp/vc/vc.el (vc-next-action): Remove code signaling a
* lisp/vc/vc.el (vc-next-action): Remove code signalling a
user-error when the buffer is narrowed.
2024-10-02 Stefan Kangas <stefankangas@gmail.com>
@ -60113,7 +59998,7 @@
(Finternal_set_lisp_face_attribute_from_resource)
(Finternal_get_lisp_face_attribute)
(Finternal_lisp_face_attribute_values, syms_of_xfaces):
Stop recognizing :reverse-video.
Stop recognising :reverse-video.
* etc/NEWS: Announce.
2024-09-29 Mattias Engdegård <mattiase@acm.org>
@ -60576,7 +60461,7 @@
when the mode is activated.
(midnight-delay-set): Only start the timer if the mode is turned
on. (Bug#73291)
* etc/NEWS: Document the change in behavior.
* etc/NEWS: Document the change in behaviour.
2024-09-21 Stefan Kangas <stefankangas@gmail.com>
@ -61408,7 +61293,7 @@
2024-09-09 Mattias Engdegård <mattiase@acm.org>
* etc/emacs_lldb.py (Lisp_Object): Recognize Lisp_Sub_Char_Table
* etc/emacs_lldb.py (Lisp_Object): Recognise Lisp_Sub_Char_Table
2024-09-09 Mattias Engdegård <mattiase@acm.org>
@ -64348,7 +64233,7 @@
Improve implementation of built-in Eshell "kill" command
* lisp/eshell/esh-proc.el (eshell/kill): Fix handling of commands like
"kill 123". Use REMOTE when signaling PIDs in remote directories.
"kill 123". Use REMOTE when signalling PIDs in remote directories.
Signal using process objects when possible. Report errors when failing
to signal.
@ -67989,7 +67874,7 @@
This file records repository revisions from
commit 1cda0967b4d3c815fc610794ad6a8fc2b913a3c5 (exclusive) to
commit 76846eede34ea7bc7b8bbe4183ed070783e11d6b (inclusive).
commit 0968d7e5e268a8b698730addb22bc84fe88782d5 (inclusive).
See ChangeLog.4 for earlier changes.
;; Local Variables:

View file

@ -115,8 +115,6 @@ HAVE_GSETTINGS = @HAVE_GSETTINGS@
ANDROID = @ANDROID@
DOCLANGS?=@DOCLANGS@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS.
@ -176,7 +174,6 @@ man1dir=$(mandir)/man1
# Where to install and expect the info files describing Emacs.
infodir=@infodir@
# Info files not in the doc/misc directory (we get those via make echo-info).
# These are not gated by DOCLANGS: see MANDATORY_DOC_DIRS below.
INFO_NONMISC=emacs.info eintr.info elisp.info
# Directory for local state files for all programs.
@ -797,7 +794,7 @@ install-info: info
[ -f "$(DESTDIR)${infodir}/dir" ] || \
[ ! -f ${srcdir}/info/dir ] || \
${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \
info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc DOCLANG=$(lang) echo-info`)"; \
info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
cd ${srcdir}/info ; \
for elt in ${INFO_NONMISC} $${info_misc}; do \
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
@ -947,7 +944,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
done
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
thisdir=`pwd -P`; \
(info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc DOCLANG=$(lang) echo-info`)"; \
(info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \
(cd "$${thisdir}"; \
@ -1125,7 +1122,7 @@ TAGS tags: lib lib-src # src
$(MAKE) -C doc/emacs tags
$(MAKE) -C doc/lispintro tags
$(MAKE) -C doc/lispref tags
$(foreach DOCLANG,$(DOCLANGS),$(MAKE) -C doc/misc DOCLANG=$(DOCLANG) tags;)
$(MAKE) -C doc/misc tags
CHECK_TARGETS = check check-maybe check-expensive check-all check-byte-compile
.PHONY: $(CHECK_TARGETS)
@ -1146,38 +1143,8 @@ PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf
PSS = lispref-ps lispintro-ps emacs-ps misc-ps
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
define MAKE_DOC_FOR_DOCLANG
$(1)-DOCLANG-$(2): $(1)-common
$$(MAKE) -C doc/$$(subst -, DOCLANG=$(2) ,$(1))
endef
## Directories whose manuals are always built in the default language,
## whatever DOCLANGS says: the Emacs and Emacs Lisp manuals are
## referenced from doc strings, and the Emacs Lisp Intro is an
## important enough part of Emacs to be available regardless of the
## language preferences of the user who builds the manuals.
MANDATORY_DOC_DIRS = emacs lispintro lispref
## Languages from DOCLANGS to build the manuals in doc/$(1) for: the
## default language (when in DOCLANGS, or always for the directories
## above), plus every other language in DOCLANGS that has translations
## for this directory (doc/translations/<lang>/$(1)). Directories
## without translations for a language must not run a sub-make for it:
## the doc Makefiles of untranslated directories ignore DOCLANG, so
## such a sub-make would just repeat the default-language build, and
## two sub-makes producing the same outputs race under "make -j" (e.g.
## "cp: cannot create regular file ...: File exists").
FILTER_DOCLANGS = $(if $(filter $(1),$(MANDATORY_DOC_DIRS)),default,$(filter $(DOCLANGS),default)) $(foreach lang,$(filter-out default,$(DOCLANGS)),$(if $(wildcard ${srcdir}/doc/translations/$(lang)/$(1)),$(lang)))
# $(1) = doc target (e.g. lispintro-info), $(2) = languages to build
define MAKE_DOC
# Define a target to which dependencies common to all of the doc files
# in this directory may be assigned.
$(1)-common:
$(1): $$(addprefix $(1)-DOCLANG-,$(2))
$$(foreach lang,$(2),$$(eval $$(call MAKE_DOC_FOR_DOCLANG,$(1),$$(lang))))
endef
$(foreach doc,$(DOCS),$(eval $(call MAKE_DOC,$(doc),$(call FILTER_DOCLANGS,$(word 1,$(subst -, ,$(doc)))))))
$(DOCS):
$(MAKE) -C doc/$(subst -, ,$@)
.PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist html info-dir check-info
@ -1194,43 +1161,20 @@ ps: $(PSS)
# Depending on src is sufficient, but ends up being slow, since the
# uncompiled lisp/org/*.el files are used to build the .texi files
# (which can be slow even with the elc files).
misc-info-common: lisp
misc-info: lisp
# Using src rather than lisp because one is less likely to get unnecessary
# rebuilds of stuff that is not strictly necessary for generating manuals.
misc-dvi-common misc-html-common misc-pdf-common misc-ps-common: src
misc-dvi misc-html misc-pdf misc-ps: src
info-dir: ${srcdir}/info/dir
define set_texi_misc
texi_misc_$(1) = $$(shell MAKEFLAGS= $${MAKE} --no-print-directory -s -C doc/misc DOCLANG=$(1) echo-sources)
texi_misc = $(shell MAKEFLAGS= ${MAKE} --no-print-directory -s -C doc/misc echo-sources)
endef
$(foreach lang,$(DOCLANGS),$(eval $(call set_texi_misc,$(lang))))
## For the default language, depend on the actual sources reported by
## doc/misc (echo-sources): .org files for the org-based manuals and
## .texi files for the rest. Deriving foo.texi names from INFO_COMMON
## would break in a fresh checkout, because the .texi files of the
## org-based manuals (e.g. modus-themes.texi) are generated and there
## is no rule to build them at this level. make-info-dir extracts dir
## entries from both formats. The first three are not gated by
## DOCLANGS, because MANDATORY_DOC_DIRS always builds them.
srcdir_doc_info_dir_inputs := \
srcdir_doc_info_dir_inputs = \
${srcdir}/doc/emacs/emacs.texi \
${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
${srcdir}/doc/lispref/elisp.texi \
$(addprefix ${srcdir}/doc/misc/,${texi_misc_default})
TRANSLATED_DIRS:=misc
# $(1) = dir
# $(2) = lang
define GET_DOC_SRC
-include ${srcdir}/doc/translations/$(2)/$(1)/info_common.mk
INFO_COMMON:=$$(subst ccmode,cc-mode,$$(INFO_COMMON))
srcdir_doc_info_dir_inputs:=$$(srcdir_doc_info_dir_inputs) $$(patsubst %,${srcdir}/doc/translations/$(2)/$(1)/%-$(2).texi,$$(INFO_COMMON))
endef
$(foreach dir,$(TRANSLATED_DIRS),$(foreach lang,$(filter-out default,$(DOCLANGS)),$(eval $(call GET_DOC_SRC,$(dir),$(lang)))))
$(addprefix ${srcdir}/doc/misc/,${texi_misc})
info_dir_inputs = \
../build-aux/dir_top \
$(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs})

2
README
View file

@ -2,7 +2,7 @@ Copyright (C) 2001-2026 Free Software Foundation, Inc.
See the end of the file for license conditions.
This directory tree holds version 32.0.50 of GNU Emacs, the extensible,
This directory tree holds version 31.1 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU

View file

@ -35,7 +35,6 @@
(defun admin--read-version ()
(read-string "Version number: " emacs-version))
;;;###autoload
(defun add-release-logs (root version &optional date)
"Add \"Version VERSION released.\" change log entries in ROOT.
Also update the etc/HISTORY file.
@ -103,7 +102,6 @@ Optional argument DATE is the release date, default today."
"\\bAuto-incrementing version code\\(?:.\\|\n\\)*\\([[:digit:]]\\{9\\}\\)$"
"Regexp with which to detect the version code in AndroidManifest.xml.")
;;;###autoload
(defun set-version (root version)
"Set Emacs version to VERSION in relevant files under ROOT.
Root must be the root of an Emacs source tree."
@ -194,7 +192,7 @@ Documentation changes might not have been completed!"))))
"mv" newsfile oldnewsfile)
(when (y-or-n-p "Commit move of NEWS file?")
(call-process admin-git-command nil nil nil
"commit" "-m" (format "; Move etc/%s to etc/%s."
"commit" "-m" (format "; Move etc/%s to etc/%s"
(file-name-nondirectory newsfile)
(file-name-nondirectory oldnewsfile))))
(find-file oldnewsfile) ; to prompt you to commit it
@ -248,7 +246,6 @@ Non-Free Operating Systems\n" newshort)))
(message "Setting version numbers...done"))
;; Note this makes some assumptions about form of short copyright.
;;;###autoload
(defun set-copyright (root copyright)
"Set Emacs short copyright to COPYRIGHT in relevant files under ROOT.
Root must be the root of an Emacs source tree."
@ -303,7 +300,6 @@ ROOT should be the root of an Emacs source tree."
'("efaq-w32")))))
;; TODO report the progress
;;;###autoload
(defun make-manuals (root &optional type)
"Generate the web manuals for the Emacs webpage.
ROOT should be the root of an Emacs source tree.
@ -326,8 +322,8 @@ Optional argument TYPE is type of output (nil means all)."
(push (concat i j) res))))
(manual-misc-manuals root)))))))
(let* ((dest (expand-file-name "manual" root))
(html-node-dir (expand-file-name "html_node/" dest))
(html-mono-dir (expand-file-name "html_mono/" dest))
(html-node-dir (expand-file-name "html_node" dest))
(html-mono-dir (expand-file-name "html_mono" dest))
(ps-dir (expand-file-name "ps" dest))
(pdf-dir (expand-file-name "pdf" dest))
(emacs (expand-file-name "doc/emacs/emacs.texi" root))
@ -373,13 +369,6 @@ Optional argument TYPE is type of output (nil means all)."
(dolist (manual misc)
(if (member type `(nil ,manual "misc"))
(manual-misc-html manual root html-node-dir html-mono-dir)))
;; Auxiliary files
(when (member type '(nil "elisp" "elisp-mono" "elisp-node"))
(dolist (file '("doc/lispref/elisp_type_hierarchy.txt"
"doc/lispref/elisp_type_hierarchy.jpg"))
(let ((file (expand-file-name file root)))
(copy-file file html-mono-dir t)
(copy-file file (expand-file-name "elisp/" html-node-dir) t))))
(message "Manuals created in %s" dest)))
(defconst manual-doctype-string
@ -772,9 +761,6 @@ style=\"text-align:left\">")
(and (equal type "lispintro")
(string-match-p "\\.\\(eps\\|pdf\\)\\'" file)))
(copy-file file stem)))
(when (equal type "lispref")
(copy-file "../doc/lispref/elisp_type_hierarchy.txt" stem)
(copy-file "../doc/lispref/elisp_type_hierarchy.jpg" stem))
(with-temp-buffer
(let ((outvars make-manuals-dist-output-variables)
(case-fold-search nil))
@ -796,7 +782,6 @@ style=\"text-align:left\">")
(message "...created %s" tarfile)))
;; Does anyone actually use these tarfiles?
;;;###autoload
(defun make-manuals-dist (root &optional type)
"Make the standalone manual source tarfiles for the Emacs webpage.
ROOT should be the root of an Emacs source tree.
@ -888,7 +873,6 @@ $Date: %s $
(defvar org-html-mathjax-template)
(defvar htmlize-output-type)
;;;###autoload
(defun make-news-html-file (root version)
"Convert the NEWS file into an HTML file."
(interactive (let ((root
@ -902,10 +886,7 @@ $Date: %s $
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(admin--require-external-package 'htmlize)
(let* ((oldnewsfile (expand-file-name (format "etc/NEWS.%s" version) root))
(newsfile (if (file-exists-p oldnewsfile)
oldnewsfile
(expand-file-name "etc/NEWS" root)))
(let* ((newsfile (expand-file-name "etc/NEWS" root))
(orgfile (expand-file-name (format "etc/NEWS.%s.org" version) root))
(html (format "%s.html" (file-name-base orgfile)))
(copyright-years (format-time-string "%Y")))
@ -915,7 +896,7 @@ $Date: %s $
;; Find the copyright range.
(goto-char (point-min))
(re-search-forward "^Copyright (C) \\([0-9, -]+\\) Free Software Foundation, Inc.")
(re-search-forward "^Copyright (C) \\([0-9-]+\\) Free Software Foundation, Inc.")
(setq copyright-years (match-string 1))
;; Delete some unnecessary stuff.
@ -934,7 +915,6 @@ $Date: %s $
;; Escape some characters.
(replace-regexp-in-region (rx "$") "@@html:&dollar;@@" (point-min) (point-max))
(replace-regexp-in-region (rx "[[") "[\u200B[" (point-min) (point-max))
;; Use Org-mode markers for 'symbols', 'C-x k', etc.
(replace-regexp-in-region
@ -953,22 +933,18 @@ $Date: %s $
;; Format code blocks.
(while (re-search-forward "^ " nil t)
(let ((elisp-block (looking-at "(")))
(let ((paragraph-start "^ "))
(backward-paragraph))
(unless (looking-at paragraph-separate)
(save-excursion (insert "\n")))
(backward-paragraph)
(insert (if elisp-block
"\n#+BEGIN_SRC emacs-lisp"
"\n#+BEGIN_EXAMPLE"))
(let ((paragraph-start "^[^ ]"))
(forward-paragraph))
(forward-paragraph)
(insert (if elisp-block
"#+END_SRC\n"
"#+END_EXAMPLE\n"))))
;; Delete buffer local variables.
(goto-char (point-max))
(when (re-search-backward "Local variables:" nil t)
(when (re-search-backward "Local variables:")
(forward-line -1)
(delete-region (point) (point-max)))
@ -1123,7 +1099,6 @@ If optional argument OLD is non-nil, also scan for `defvar's."
;; to check the results of this look sensible.
;; TODO Check cus-start if something moved from C to Lisp.
;; TODO Handle renamed things with aliases to the old names.
;;;###autoload
(defun cusver-check (newdir olddir version)
"Check that `defcustom's have :version tags where needed.
NEWDIR is the current lisp/ directory, OLDDIR is that from the
@ -1197,7 +1172,6 @@ changes (in a non-trivial way). This function does not check for that."
;; Reminder message for open release-blocking bugs. This requires the
;; GNU ELPA package `debbugs'.
;;;###autoload
(defun reminder-for-release-blocking-bugs (version)
"Submit a reminder message for release-blocking bugs of Emacs VERSION."
(interactive

View file

@ -52,7 +52,7 @@ main (int argc, char **argv)
int opt, ncolors = 0, i;
XColor *allocated;
int nallocated;
XColor color = {0};
XColor color;
Colormap cmap;
while ((opt = getopt (argc, argv, "n:")) != EOF)
@ -76,6 +76,7 @@ main (int argc, char **argv)
allocated = malloc (ncolors * sizeof *allocated);
nallocated = 0;
memset (&color, 0, sizeof color);
while (nallocated < ncolors
&& color.red < 65536)

View file

@ -309,9 +309,7 @@ files.")
("William M. Perry" "Bill Perry")
("William O'Brien" "will\\.08rien@gmail.com")
("Włodzimierz Bzyl" "W.*dek Bzyl")
("Wu fa yang" "zhaodaniu1@gmail\\.com")
(nil "xyblor")
("Yifei Yao" "donplat@barrensea\\.org")
("Yilkal Argaw" "yilkalargaw" "yilkalargawworkneh@gmail\\.com")
("Yoni Rabkin" "Yoni Rabkin Katzenell")
("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則")
@ -2236,7 +2234,6 @@ and changed by AUTHOR."
(cons (list author wrote-list cowrote-list changed-list)
authors-author-list)))))
;;;###autoload
(defun authors (root &optional nologupdate)
"Extract author information from change logs and Lisp source files.
ROOT is the root directory under which to find the files.

View file

@ -1,21 +1,21 @@
// Use the countof macro where possible.
// Use the ARRAYELTS macro where possible.
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (E[...]))
+ countof (E)
+ ARRAYELTS (E)
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (T))
+ countof (E)
+ ARRAYELTS (E)
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (*E))
+ countof (E)
+ ARRAYELTS (E)

View file

@ -597,7 +597,6 @@ Branch FROM will be prepended to the list."
(setq-local truncate-lines t)
(setq-local font-lock-defaults '(gitmerge-mode-font-lock-keywords)))
;;;###autoload
(defun gitmerge (from)
"Merge from branch FROM into `default-directory'."
(interactive

View file

@ -102,7 +102,9 @@ General steps (for each step, check for possible errors):
easiest way of creating the new ChangeLog.N is to rename the file
ChangeLog (without the .N suffix) left over from the last release
(it is usually unversioned) and commit it, together with the
modified Makefile.in.
modified Makefile.in. If you don't have the unversioned ChangeLog
file from the last release, you can take it from the release
tarball.
Now:
@ -131,7 +133,6 @@ General steps (for each step, check for possible errors):
Save the "*Authors*" buffer as etc/AUTHORS.
Check the diff looks reasonable. Maybe add more entries to
authors-ambiguous-files or authors-aliases, and repeat.
If making a release, move the "Version NN.N released." back to the top.
Commit and push any fixes to authors.el with a message like this:
; Update exported ChangeLog files and etc/AUTHORS
@ -160,17 +161,30 @@ General steps (for each step, check for possible errors):
one, as described above). Pick a date about a week from now when
you intend to make the release. Use M-x add-release-logs from
admin/admin.el to add entries to etc/HISTORY and the ChangeLog
file. Merge the entries from the unversioned ChangeLog into the
top of the current versioned ChangeLog.N and commit that along
with etc/HISTORY. Name the tar file as emacs-XX.Y-rc1.tar.
file. It's best not to commit these files until the release is
actually made. Merge the entries from (unversioned) ChangeLog
into the top of the current versioned ChangeLog.N and commit that
along with etc/HISTORY. Then you can tag that commit as the
release.
If you need another release candidate, remember to adjust the
ChangeLog and etc/HISTORY entries. Never replace an existing
tarfile! If you need to fix something, always upload it with a
different name.
Alternatively, you can commit and tag with the RC tag right away,
and delay the final tagging until you actually decide to make a
release and announce it. The "git tag" command can tag a specific
commit if you give it the SHA1 of that commit, even if additional
commits have been pushed in the meantime.
If this is the release itself, copy the unversioned ChangeLog from
the previous release candidate tarball into your worktree.
Name the tar file as emacs-XX.Y-rc1.tar. If all goes well in the
following week, you can simply rename the file and use it for the
actual release. If you need another release candidate, remember
to adjust the ChangeLog and etc/HISTORY entries.
If you need to change only a file(s) that cannot possibly affect
the build (README, ChangeLog, NEWS, etc.) then rather than doing
an entirely new build, it is better to unpack the existing
tarfile, modify the file(s), and tar it back up again.
Never replace an existing tarfile! If you need to fix something,
always upload it with a different name.
4. autoreconf -i -I m4 --force && make bootstrap
@ -217,8 +231,8 @@ General steps (for each step, check for possible errors):
Alternatively, if you want to do this manually using the compressed
tarballs:
tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort >old_tmp
tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort >new_tmp
tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort > old_tmp
tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort > new_tmp
diff -u old_tmp new_tmp
If this is the first pretest of a major release, just comparing
@ -275,8 +289,8 @@ General steps (for each step, check for possible errors):
11. Decide what compression schemes to offer.
For a release, at least gz and xz:
gzip --best --no-name -c emacs-NEW.tar >emacs-NEW.tar.gz
xz -c emacs-NEW.tar >emacs-NEW.tar.xz
gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
xz -c emacs-NEW.tar > emacs-NEW.tar.xz
For pretests, just xz is probably fine (saves bandwidth).
Now we will upload the files to the GNU FTP server. In the case of
@ -290,8 +304,6 @@ General steps (for each step, check for possible errors):
-- NEW_FILE.gz NEW_FILE.xz ...
For a release:
gnupload [--user your@gpg.key.email] --to alpha.gnu.org:emacs/pretest \
--delete NEW-rc1_FILE.xz
gnupload [--user your@gpg.key.email] --to ftp.gnu.org:emacs \
NEW_FILE.gz NEW_FILE.xz ...
@ -309,8 +321,8 @@ General steps (for each step, check for possible errors):
clearsigned directive file like this:
gpg -b FILE
echo directory: emacs/pretest >FILE.directive (for a pretest)
echo directory: emacs >FILE.directive (for a release)
echo directory: emacs/pretest > FILE.directive (for a pretest)
echo directory: emacs > FILE.directive (for a release)
gpg --clearsign FILE.directive
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/ the files FILE,
FILE.sig, FILE.directive.asc.
@ -321,8 +333,8 @@ General steps (for each step, check for possible errors):
12. After five minutes, verify that the files are visible at
<https://alpha.gnu.org/gnu/emacs/pretest/> for a pretest, or
<https://ftp.gnu.org/gnu/emacs/> for a release. If uploading a
pretest, the deletion of the previous pretest happens a few minutes
before the creation of the new file.
pretest, the delete of the previous pretest a few minutes before the
creation of the new file.
Download them and check the signatures and SHA1/SHA256 checksums.
@ -349,17 +361,9 @@ General steps (for each step, check for possible errors):
(Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
an email.)
14. Generate an HTML-formatted version of the NEWS file: M-x load-file
RET admin/admin.el RET, then M-x make-news-html-file RET.
14. After a release, update the Emacs pages as described below.
15. After a release, update the Emacs pages as described below.
Note: it is important to add the new NEWS file _before_ bumping the
Emacs version on the release branch, because doing the latter will
add (empty) sections to NEWS for the next version, and you don't
want those sections in the NEWS file reachable from the GNU Emacs
page.
16. After a release, bump the Emacs version on the release branch.
15. After a release, bump the Emacs version on the release branch.
There is no need to bump the version after a pretest; the version
is bumped before the next pretest or release instead.
@ -379,7 +383,6 @@ The pages and files to update are:
update is needed)
. history.html (add a line for the new release)
. add the new NEWS file as news/NEWS.xx.y
. add the new NEWS.xx.html file as news/NEWS.xx.html
. copy new etc/MACHINES to MACHINES and CONTRIBUTE to CONTRIBUTE
. possibly/rarely also download.html (see below)

View file

@ -50,7 +50,7 @@ GNULIB_MODULES='
qcopy-acl readlink readlinkat realloc-posix regex
sig2str sigdescr_np socklen stat-time std-gnu23
stdc_bit_width stdc_count_ones stdc_trailing_zeros
stdckdint-h stdcountof-h stddef-h stdio-h stdio-windows
stdckdint-h stddef-h stdio-h stdio-windows
stpcpy streq strnlen strtoimax symlink sys_stat-h sys_time-h
tempname time-h time_r time_rz timegm timer-time timespec-add timespec-sub
unlocked-io update-copyright utimensat
@ -58,18 +58,14 @@ GNULIB_MODULES='
'
AVOIDED_MODULES='
access btoc32
c32_apply_type_test c32_get_type_test
c32isalnum c32rtomb c32tolower c32toupper
chmod close dup fchdir fstat gnulib-i18n
langinfo-h libgmp-mpq
localcharset localeinfo localename-unsafe-limited lock
mbrtoc32-regular mbsinit memchr mkdir
msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h
save-cwd select setenv sigprocmask stat std-gnu11 strncpy
access btowc chmod close crypto/af_alg dup fchdir fstat gnulib-i18n
iswblank iswctype iswdigit iswxdigit langinfo-h libgmp-mpq
localcharset locale-h localename-unsafe-limited lock
mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h raise
save-cwd select setenv sigprocmask stat std-gnu11 stdarg-h strncpy
threadlib tzset unsetenv utime utime-h
wchar-h uchar-h
wchar-h wcrtomb wctype wctype-h
'
GNULIB_TOOL_FLAGS='
@ -164,7 +160,8 @@ cp -- "$gnulib_srcdir"/build-aux/config.guess \
"$gnulib_srcdir"/build-aux/install-sh \
"$gnulib_srcdir"/build-aux/move-if-change \
"$src"build-aux &&
cp -- "$gnulib_srcdir"/lib/save-cwd.h \
cp -- "$gnulib_srcdir"/lib/af_alg.h \
"$gnulib_srcdir"/lib/save-cwd.h \
"$src"lib &&
cp -- "$gnulib_srcdir"/m4/codeset.m4 \
"$src"m4 &&

View file

@ -76,10 +76,6 @@ Every pipeline generates a JUnit test report for the respective test
jobs, which can be inspected on the pipeline web page. This test
report counts completed ERT tests, aborted tests are not counted.
Twice a day, a pipeline for branch 'master', and another pipeline for
branch 'emacs-31' are started automatically, running all stages for
normal and expensive tests.
* Emba configuration
The emba configuration files are hosted on

View file

@ -16,14 +16,14 @@ Initial setup
Then we want to clone the repository. We normally want to have both
the current master and (if there is one) the active release branch
(eg emacs-31).
(eg emacs-30).
mkdir ~/emacs
cd ~/emacs
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master
cd master
git config push.default current
git worktree add ../emacs-31 emacs-31
git worktree add ../emacs-30 emacs-30
You now have both branches conveniently accessible, and you can do
"git pull" in them once in a while to keep updated.
@ -67,7 +67,7 @@ which will look like
commit 958b768a6534ae6e77a8547a56fc31b46b63710b
cd ~/emacs/emacs-31
cd ~/emacs/emacs-30
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
and add "Backport:" to the commit string. Then
@ -109,7 +109,7 @@ up-to-date by doing a pull. Then start Emacs with
emacs -l admin/gitmerge.el -f gitmerge
You'll be asked for the branch to merge, which will default to
(eg) 'origin/emacs-31', which you should accept. Merging a local tracking
(eg) 'origin/emacs-30', which you should accept. Merging a local tracking
branch is discouraged, since it might not be up-to-date, or worse,
contain commits from you which are not yet pushed upstream.

View file

@ -48,7 +48,7 @@ DTRT - do the right thing
DWIM - do what I mean
ENOPATCH - no patch is attached
FTR - for the record
FUD - fear, uncertainty and doubt
FUD - fear, uncertainty and doubt
FWIW - for what it's worth
FYI - for your information
GNU - GNU is not Unix

View file

@ -79,8 +79,8 @@ people who want to report bugs against the current master, to help in
"pretesting" new release versions, and so on.
The files follow the same naming convention, but also include a date
(and sometimes information about their branch) or they may relate to a
specific pretest or release candidate for an "uncut" Emacs. Emacs
(and sometimes information about their branch) or they may releate to a
sepecific pretest or release candidate for an "uncut" Emacs. Emacs
sources are distributed along with each dated snapshot. Sources are
provided for the pretest and release candidate Emacs versions here, as
for release builds, are found in the directory (or directories) above.

View file

@ -30,7 +30,7 @@
# Base URI for the package sources mapped in PKG_REQ
SRC_REPO="https://repo.msys2.org/mingw/sources"
# Map items in `dynamic-library-alist' to source packages.
# Map items in `dynamic-library-alist' to source pakages
PKG_REQ='''mingw-w64-x86_64-giflib
mingw-w64-x86_64-gnutls
mingw-w64-x86_64-harfbuzz
@ -47,7 +47,7 @@
mingw-w64-x86_64-tree-sitter
mingw-w64-x86_64-sqlite3'''.split()
# Emacs style path to dependency DLLs on build system
# Emacs style path to dependancy DLLs on build system
DLL_SRC="mingw64"
OUT_TAG=""
@ -95,7 +95,7 @@ def gather_deps():
print("Deps updated in", os.getcwd(), "as", zipfile)
os.chdir("../")
# Return dependencies listed in Emacs.
# Return dependancies listed in Emacs
def init_deps():
return '''libXpm-nox4.dll
libpng16-16.dll
@ -315,7 +315,7 @@ def clean():
parser.add_argument("-l", help="list dependencies",
action="store_true")
parser.add_argument("-e", help="extract direct dependencies",
parser.add_argument("-e", help="extract direct dependancies",
action="store_true")
args = parser.parse_args()

View file

@ -116,7 +116,7 @@ ${unidir}/charscript.el: ${blocks_sources}
emoji-zwj.el: ${unidir}/emoji-zwj.el
zwj = ${srcdir}/emoji-zwj.awk
zwj_sources = ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt $(srcdir)/emoji-variation-sequences.txt $(srcdir)/emoji-test.txt
zwj_sources = ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt
${unidir}/emoji-zwj.el: ${zwj}
# Don't use $^, since that includes the awk script.

View file

@ -64,8 +64,6 @@ BEGIN {
alias["halfwidth and fullwidth forms"] = "cjk-misc"
alias["yijing hexagram symbols"] = "cjk-misc"
alias["common indic number forms"] = "north-indic-number"
alias["kanbun"] = "han"
alias["vertical forms"] = "cjk-misc"
tohex["a"] = 10
tohex["b"] = 11
@ -162,17 +160,6 @@ FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
end[i] = "33FF"
name[i] = "CJK Compatibility"
}
else if (start[i] == "FFF0")
{
start[i] = "FFFC"
end[i] = "FFFD"
name[i] = "Replacement Symbols"
alt[i] = "symbol"
i++
start[i] = "FFFE"
end[i] = "FFFF"
name[i] = "Specials"
}
alt[i] = name2alias(name[i])

45
admin/unidata/emoji-zwj.awk Executable file → Normal file
View file

@ -39,9 +39,7 @@
### Code:
(/^[0-9A-F].*; RGI_Emoji_(ZWJ|Modifier)_Sequence/)||
(/^[0-9A-F].*; (un|minimally-)qualified/ && /.+200D.+;/) {
is_unqualified = $0 ~ /; unqualified/
/^[0-9A-F].*; RGI_Emoji_(ZWJ|Modifier)_Sequence/ {
sub(/ *;.*/, "", $0)
num = split($0, elts)
if (ch[elts[1]] == "")
@ -60,15 +58,6 @@
vec[elts[1]] = vec[elts[1]] c
}
vec[elts[1]] = vec[elts[1]] "\""
if (is_unqualified && elts[2] == "200D") {
unqualified_tail_initials[++n_unqualified_tail_initials] = elts[3]
}
}
/^[0-9A-F]+ FE0F *; *emoji style;/ {
tty_trigger_codepoints[++n_tty_triggers] = $1
ch[$1] = $1
}
END {
@ -97,37 +86,13 @@ END {
print "(setq auto-composition-emoji-eligible-codepoints"
print "'("
for (trig in trigger_codepoints)
{
print "?\\N{U+" trigger_codepoints[trig] "}"
}
print "))"
# On tty terminals, emoji sequences are simply composed and the
# rendering is delegated to the terminal emulators. All codepoints
# in the variation sequence is considered a valid beginning.
print "(setq auto-composition-emoji-tty-eligible-codepoints"
print "'("
for (trig in tty_trigger_codepoints)
{
print "?\\N{U+" tty_trigger_codepoints[trig] "}"
}
print "))"
# Exclude keycap sequence initials
delete ch["0023"]
delete ch["002A"]
for (i = 0; i <= 9; i ++)
delete ch[sprintf("003%d", i)]
# Generate unqualified tail initials.
print "(setq auto-composition-emoji-unqualified-tail-initials"
print "'("
for (trig in unqualified_tail_initials)
{
print "?\\N{U+" unqualified_tail_initials[trig] "}"
}
print "))"
# We add entries for 'codepoint U+FE0F' here to ensure that the
# code in font_range is triggered.
@ -149,7 +114,7 @@ END {
print " (nconc (char-table-range composition-function-table (car elt))"
print " (list (vector (cdr elt)"
print " 0"
print " #'compose-gstring-and-emoji)))))"
print " #'compose-gstring-for-graphic)))))"
print ";; The following two blocks are derived by hand from emoji-sequences.txt"
print ";; FIXME: add support for Emoji_Keycap_Sequence once we learn how to respect FE0F/VS-16"
@ -161,7 +126,7 @@ END {
print " (nconc (char-table-range composition-function-table '(#x1F1E6 . #x1F1FF))"
print " (list (vector \"[\\U0001F1E6-\\U0001F1FF][\\U0001F1E6-\\U0001F1FF]\""
print " 0"
print " #'compose-gstring-and-emoji))))"
print " #'compose-gstring-for-graphic))))"
print ";; UK Flags"
print "(set-char-table-range composition-function-table"
@ -169,7 +134,7 @@ END {
print " (nconc (char-table-range composition-function-table #x1F3F4)"
print " (list (vector \"\\U0001F3F4\\U000E0067\\U000E0062\\\\(?:\\U000E0065\\U000E006E\\U000E0067\\\\|\\U000E0073\\U000E0063\\U000E0074\\\\|\\U000E0077\\U000E006C\\U000E0073\\\\)\\U000E007F\""
print " 0"
print " #'compose-gstring-and-emoji))))"
print " #'compose-gstring-for-graphic))))"
printf "\n(provide 'emoji-zwj)"
}

View file

@ -1037,10 +1037,10 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(cdr (assq elt word-list))))
(setcar tail (string code))
(setq tail (cdr tail)))
(aset vec i (mapconcat #'identity (aref vec i))))))
(aset vec i (mapconcat #'identity (aref vec i) "")))))
(set-char-table-range
table (cons idx (+ idx 127))
(mapconcat #'identity vec)))))
(mapconcat #'identity vec "")))))
(setq block-word-table (make-vector (length block-list) nil))
(setq idx 0)

View file

@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2026 Free Software Foundation, Inc.
# Copyright 1992-2025 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2026-05-17'
timestamp='2025-07-10'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -60,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright 1992-2026 Free Software Foundation, Inc.
Copyright 1992-2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -150,7 +150,7 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case $UNAME_SYSTEM in
Ironclad|Linux|GNU|GNU/*)
Linux|GNU|GNU/*)
LIBC=unknown
set_cc_for_build
@ -167,8 +167,6 @@ Ironclad|Linux|GNU|GNU/*)
LIBC=gnu
#elif defined(__LLVM_LIBC__)
LIBC=llvm
#elif defined(__mlibc__)
LIBC=mlibc
#else
#include <stdarg.h>
/* First heuristic to detect musl libc. */
@ -1188,9 +1186,6 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
sw_64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
tile*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
@ -1603,10 +1598,10 @@ EOF
GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
;;
x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*)
GUESS=$UNAME_MACHINE-pc-ironclad-$LIBC
GUESS=$UNAME_MACHINE-pc-ironclad-mlibc
;;
*:[Ii]ronclad:*:*)
GUESS=$UNAME_MACHINE-unknown-ironclad-$LIBC
GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc
;;
esac

11
build-aux/config.sub vendored
View file

@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2026 Free Software Foundation, Inc.
# Copyright 1992-2025 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
timestamp='2026-05-17'
timestamp='2025-07-10'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright 1992-2026 Free Software Foundation, Inc.
Copyright 1992-2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -1432,7 +1432,6 @@ case $cpu-$vendor in
| sparcv9v \
| spu \
| sv1 \
| sw_64 \
| sx* \
| tahoe \
| thumbv7* \
@ -1526,7 +1525,7 @@ EOF
;;
ironclad*)
kernel=ironclad
os=`echo "$basic_os" | sed -e 's|ironclad|gnu|'`
os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'`
;;
linux*)
kernel=linux
@ -2221,7 +2220,7 @@ case $kernel-$os-$obj in
;;
uclinux-uclibc*- | uclinux-gnu*- )
;;
ironclad-gnu*- | ironclad-mlibc*- )
ironclad-mlibc*-)
;;
managarm-mlibc*- | managarm-kernel*- )
;;

View file

@ -292,7 +292,6 @@ If Exist limits.in.h update limits.in.h limits.in-h
If Exist signal.in.h update signal.in.h signal.in-h
If Exist signal.in.h update signal.in.h signal.in-h
If Exist stdalign.in.h update stdalign.in.h stdalign.in-h
If Exist stdcountof.in.h update stdcountof.in.h stdcountof.in-h
If Exist stddef.in.h update stddef.in.h stddef.in-h
If Exist stdint.in.h update stdint.in.h stdint.in-h
If Exist stdio.in.h update stdio.in.h stdio.in-h

View file

@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
AC_PREREQ([2.65])
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
AC_INIT([GNU Emacs], [32.0.50], [bug-gnu-emacs@gnu.org], [],
AC_INIT([GNU Emacs], [31.1], [bug-gnu-emacs@gnu.org], [],
[https://www.gnu.org/software/emacs/])
if test "$XCONFIGURE" = "android"; then
@ -966,7 +966,7 @@ a valid path to android.jar. See config.log for more details.])
fi
AC_CACHE_CHECK([whether android.jar is new enough],
[emacs_cv_android_x_or_later],
[emacs_cv_android_w_or_later],
AS_IF([rm -f conftest.class
cat << EOF > conftest.java
@ -974,7 +974,7 @@ import android.os.Build;
class conftest
{
private static int test = Build.VERSION_CODES.CINNAMON_BUN;
private static int test = Build.VERSION_CODES.BAKLAVA;
}
EOF
@ -985,7 +985,7 @@ EOF
if test "$emacs_cv_android_w_or_later" = "no"; then
AC_MSG_ERROR([Emacs must be built with an android.jar file produced for \
Android 17 (CINNAMON_BUN) or later.])
Android 16 (BAKLAVA) or later.])
fi
dnl See if the Java compiler supports the `--release' option which
@ -1615,10 +1615,6 @@ AC_DEFUN([gt_TYPE_WINT_T],
AC_DEFUN([gl_TYPE_OFF64_T],
[HAVE_OFF64_T=1
AC_SUBST([HAVE_OFF64_T])])
# Emacs does not want Gnulib's fixes for glibc bug 20381 or for
# Unicode-compatible case matching, as that brings in too many Gnulib files.
AC_DEFINE([_REGEX_AVOID_UCHAR_H], [1],
[Define to 1 so that the Gnulib regex module does not use Gnulib uchar-h.])
# Initialize gnulib right after choosing the compiler.
dnl Amongst other things, this sets AR and ARFLAGS.
@ -2107,7 +2103,44 @@ if test $opsys = darwin; then
AC_PATH_PROG([HAVE_MACPORTS], [port])
fi
gl_TEXINFO
## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals.
: ${MAKEINFO:=makeinfo}
case `($MAKEINFO --version) 2>/dev/null` in
*' (GNU texinfo) '4.1[[3-9]]* | \
*' (GNU texinfo) '[[5-9]]* | \
*' (GNU texinfo) '[[1-9][0-9]]* ) ;;
*) MAKEINFO=no;;
esac
## Makeinfo is unusual. For a released Emacs, the manuals are
## pre-built, and not deleted by the normal clean rules. makeinfo is
## therefore in the category of "special tools" not normally required, which
## configure does not have to check for (eg autoconf itself).
## In a repository checkout on the other hand, the manuals are not included.
## So makeinfo is a requirement to build from the repository, and configure
## should test for it as it does for any other build requirement.
## We use the presence of $srcdir/info/emacs to distinguish a release,
## with pre-built manuals, from a repository checkout.
if test "$MAKEINFO" = "no"; then
MAKEINFO=makeinfo
if test ! -e "$srcdir/info/emacs" && test ! -e "$srcdir/info/emacs.info"; then
AC_MSG_ERROR( [You do not seem to have makeinfo >= 4.13, and your
source tree does not seem to have pre-built manuals in the 'info' directory.
Please install a suitable version of makeinfo.] )
else
AC_MSG_WARN( [You do not seem to have makeinfo >= 4.13.
You will not be able to rebuild the manuals if you delete them or change
their sources.] )
fi
fi
AC_SUBST([MAKEINFO])
if test $opsys = mingw32; then
DOCMISC_W32=efaq-w32
else
DOCMISC_W32=
fi
AC_SUBST([DOCMISC_W32])
dnl Add our options to ac_link now, after it is set up.
@ -5067,7 +5100,6 @@ AC_SUBST_FILE([module_env_snippet_28])
AC_SUBST_FILE([module_env_snippet_29])
AC_SUBST_FILE([module_env_snippet_30])
AC_SUBST_FILE([module_env_snippet_31])
AC_SUBST_FILE([module_env_snippet_32])
module_env_snippet_25="$srcdir/src/module-env-25.h"
module_env_snippet_26="$srcdir/src/module-env-26.h"
module_env_snippet_27="$srcdir/src/module-env-27.h"
@ -5075,7 +5107,6 @@ module_env_snippet_28="$srcdir/src/module-env-28.h"
module_env_snippet_29="$srcdir/src/module-env-29.h"
module_env_snippet_30="$srcdir/src/module-env-30.h"
module_env_snippet_31="$srcdir/src/module-env-31.h"
module_env_snippet_32="$srcdir/src/module-env-32.h"
emacs_major_version=`AS_ECHO([$PACKAGE_VERSION]) | sed 's/[[.]].*//'`
AC_SUBST([emacs_major_version])
@ -7277,8 +7308,6 @@ AC_SUBST([LIBXT_OTHER])
if test "${HAVE_X11}" = "yes" ; then
AC_DEFINE([HAVE_X11], [1],
[Define to 1 if you want to use version 11 of X windows.])
AC_DEFINE([_CONST_X_STRING], [1],
[Define to 1 for X11 headers to use the 'const' keyword of C89 or later.])
LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
else
LIBX_OTHER=
@ -7884,10 +7913,10 @@ if test "$XCONFIGURE" != "android"; then
AS_MKDIR_P([cross/etc])
AS_IF([test "x$with_android" != "xno"], [
dnl Link gnulib files to cross/lib as well.
dnl lib/save-cwd.h is copied manually from gnulib,
dnl and as such isn't specified in gl_FILE_LIST.
emacs_files='gl_FILE_LIST lib/save-cwd.h'
dnl Link gnulib files to cross/lib as well. af_alg.h and
dnl lib/save-cwd.h are copied manually from gnulib, and as such
dnl aren't specified in gl_FILE_LIST.
emacs_files='gl_FILE_LIST lib/af_alg.h lib/save-cwd.h'
dnl These files are specific to Emacs.
emacs_files="$emacs_files lib/fingerprint.c lib/fingerprint.h \
lib/save-cwd.c lib/openat-die.c lib/save-cwd.c \

View file

@ -529,8 +529,6 @@ version of Android installed:
@item
@code{android.permission.ACCESS_LOCATION_EXTRA_COMMANDS}
@item
@code{android.permission.ACCESS_LOCAL_NETWORK}
@item
@code{android.permission.ACCESS_NETWORK_STATE}
@item
@code{android.permission.ACCESS_NOTIFICATION_POLICY}

View file

@ -4,123 +4,133 @@
@c See file emacs.texi for copying conditions.
@node Antinews
@appendix Emacs 30 Antinews
@appendix Emacs 29 Antinews
@c Update the emacs.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information
about downgrading to Emacs version 30.2. We hope you will enjoy the
about downgrading to Emacs version 29.4. We hope you will enjoy the
greater simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
The venerable @code{unexec} dumper is back! It is still deprecated, but
we plan on un-deprecating it in Emacs 26, in preparation for the
@file{glibc} developers' reinstating the various hooks which Emacs needs
to reliably be built using @code{unexec}.
Emacs can no longer be built for Android mobile devices. We have
removed the Android support because it was deemed unnecessary, what with
the screens of the mobile devices becoming smaller and smaller as you
move back in time. We expect Android users to enjoy the much simpler
text editors available on their devices. As a nice bonus, removing
Android support allowed us to get rid of gobs of related files, thus
making the release tarballs much leaner.
@item
@command{ctags} is once again a separate program. We decided that the
need to remember the @option{--ctags} option to @command{etags} is not
friendly enough to our users, and switched back to a time-proven Unix
philosophy of ``programs that do one thing and do it well''.
We have deleted much of the enhanced support for touchscreen devices,
for the same reason we dropped Android: there will be no need for that
as you move back in time.
@item
We dropped the annoying feature of scraping at startup files and
directories in @file{user-lisp} subdirectory of your Emacs configuration
directory. It slows down startup, especially as computers and hard
disks become slower and slower as you move back in time.
We also dropped support for sophisticated input methods that include
text conversions, again because those are mostly needed on mobile and
hand-held devices, which we gradually remove from Emacs in each past
version.
@item
As part of our continuous struggle to make Emacs simpler, we've removed
the @code{margin} face, so text shown in display margins will now use
the same @code{default} face as the rest of buffer text. Our long-term
goal is to remove faces completely, thus leaving the Emacs with just two
colors, so we gradually remove more and more faces as we go.
Like its newer releases, Emacs 29 can still be built with support of
native compilation of Lisp programs. However, in preparation for
removal of this feature in some previous version, we've made the native
compiler support off by default; you will now have to request it
explicitly at configure time. This makes the default Emacs build
process much faster.
@item
Yet another complication which we got rid of is child frames on
text-only terminals. They are still supported on GUI frames, but one
improvement at a time.
JSON interfaces slowly move into oblivion as past years come closer, so
we have removed our internal implementation of JSON; you will now need
to build Emacs with the libjansson library, if you need JSON.
Eventually, we plan on removing JSON support from Emacs altogether; this
move will make the removal much simpler.
@item
Fancy completion bells and whistles, such as eager display of completion
candidates, updating the @file{*Completions*} buffer as you type,
control of point motion in @file{*Completions*} via
@code{completions-format}, etc.@: will no longer confuse you because we
deleted all of that stuff. No one should need completion features
beyond what typing @key{TAB} produces!
Tree-sitter based modes are now completely independent of their
non-Tree-Sitter counterparts. We decided that keeping the settings
separate and independent goes a long way toward simplicity, which is one
of our main motivations for removing stuff from Emacs.
@item
Commands that modify the window layout of a frame are gone. You can no
longer be seduced to transpose or rotate windows on their frame. Once
again, only Emacs decides how to arrange and re-arrange windows.
Various Help commands no longer turn on Outline minor mode. With less
material to display in the *Help* buffers, due to removing of excess
documentation from Emacs, we think using outlining is an unnecessary
complication, as scrolling through plain text is so much simpler.
For the same reason, we nuked @code{split-frame} and @code{merge-frames}
commands. @kbd{C-x 2} and @kbd{C-x 0} should be enough for everyone!
For the same reasons, Emacs no longer shows Unicode names of characters
in *Help* buffers shown by @code{describe-bindings}.
@item
We removed quite a few complications due to Unicode Standard version
17.0 and related features. This includes quite a few characters which
will never be needed in the past, the language environments for Syriac
and Tifinagh, and several input methods which no one should miss, and
which will fall in disuse soon enough anyway. As memory becomes more
and more at premium, we must make Emacs leaner and meaner to follow
suit.
To make Emacs configuration simpler and easier to control, the tool bar
can now be displayed only in its natural and logical position: on the
top of the frame; no more of that @code{tool-bar-position} nonsense with
tool bars on the bottom. For the same reasons @code{modifier-bar-mode}
is now gone.
@item
User option @code{treesit-enabled-modes} is no longer part of Emacs.
Customize @code{major-mode-remap-alist} to activate Tree-sitter based
modes instead of the traditional modes; this is much simpler and easier
to remember and manage.
The command @code{recover-file} no longer lets you display the diffs
between a file and its auto-save file. You either want to recover a
file or you don't; confusing users with a third alternative when they
are anxious already by the possibility of losing precious edits is
considered a bad idea, certainly so as we move further towards smaller,
simpler Emacs.
@item
Sendmail and Rmail no longer try to detect suspicious email addresses
and warn you about them. As you move back in time, people become nicer
and nicer, and all those malevolent souls who constantly look for
opportunities to cause you damage become more and more vague memories
from the distant future. Eventually, we will once again have just the
small Arpanet where everyone were your friends, and who needs these
paranoid features then?
Several languages and input methods, which will fall in disuse as you
move back in time, were removed. This includes Urdu, Pashto, and Sindhi
languages, and the input method for the Colemak keyboard layout. Many
@kbd{C-x 8} key sequences, including those which insert various
quotation characters and guillemets, were deleted for the same reason.
@item
You can no longer edit Grep results and have the edits reflected in the
original files. We've removed that because we believe one should only
edit the original files directly, with the full benefit of the
surrounding context.
The support for @code{lzip}-compressed Info manuals was removed from the
Info mode. We anticipate that @command{lzip} will disappear from the
face of the Earth in the near past, and are preparing Emacs for that in
advance.
@item
Commands for handling VCS repositories with multiple working trees were
deleted from VC. We concluded that multiple working tree in a single
project are a clear sign of design bloat, and we refuse to admit such
bloatware into Emacs. So this is gone---good riddance!
Numerous other VC features, which we considered too fancy and not
useful enough, were removed for the same reason.
Support for LLDB in Grand Unified Debugger mode was dropped. We decided
that given LLDB's diminishing popularity, its support is just code
bloat.
@item
To review an Emacs Lisp package before installing it from ELPA, you will
now need to actually read its code and documentation, because the user
option @code{package-review-policy}, and the associated functionalities
to show the diffs from the previous version, are gone. ``Use the
source, Luke!''
We also deleted @code{package-autosuggest} and
@code{package-autosuggest-mode}, since we want to trust our users to
know better.
Several fancy Project and VC commands were deleted, as part of our
consistent effort of making Emacs simpler to use.
@item
In preparation for removal of the @code{customize-dirlocals} command in
the previous Emacs version, we nuked @code{Custom-dirlocals-mode}.
The user option @code{shell-command-guess-functions} and the context
menu @samp{Open With} in Dired are gone. We trust Emacs users to always
know themselves which shell command is the appropriate one for a given
file, so no guessing by Dired is needed, or welcome. The
@code{dired-do-open} command was deleted for the same reasons.
@item
We have removed several packages and modes that we consider unnecessary
for the past of Emacs. This includes @code{icalendar-mode} and
@code{lua-mode} modes, and the @code{timeout} and
@code{system-taskbar-mode} libraries. the @code{system-sleep} package
is gone for the same reasons.
We went back to the original lean-and-mean interface for specifying
registers for register-related commands. The fancy preview and the
options to go with it were deemed gratuitous and were removed.
@item
Eshell is now much smaller and easier to use, due to dropping quite a
few of the new commands and fancy new options.
@item
The command @code{customize-dirlocals} was removed. Editing the
@file{.dir-locals.el} files as plain text is so much simpler, and quite
enough.
@item
We have removed several packages that we consider unnecessary for the
past of Emacs. This includes EditorConfig support, @samp{which-key},
PEG, and Window-Tool-Bar.
@item
The @code{etags-regen-mode} was deleted. Regeneration of @file{TAGS}
tables manually is all Emacs users will need in the past.
@item
To keep up with decreasing computer memory capacity and disk space, many
other functions and files have been eliminated in Emacs 30.2.
other functions and files have been eliminated in Emacs 29.4.
@end itemize

View file

@ -424,37 +424,13 @@ Kill back to the beginning of the previous word
(@code{backward-kill-word}).
@end table
@cindex grapheme cluster
@cindex delete part of composed sequence of characters
The @kbd{@key{DEL}} (@code{delete-backward-char}) command removes the
character before point, moving the cursor and the characters after it
backwards. If point was at the beginning of a line, this deletes the
preceding newline, joining this line to the previous one. If the
character before point is composed with one or more of the preceding
characters, and is displayed together with them as a single display
unit, a so-called @dfn{grapheme cluster} representing the entire
sequence, @kbd{@key{DEL}} deletes only a single character from the
composed sequence, which in some cases can significantly change the
appearance of the text on display. (The command
@code{backward-delete-char-untabify}, usually bound to @key{DEL} in
programming modes, does the same, @pxref{Program Modes}.) This is in
contrast with commands like @code{delete-char-forward}, which delete the
entire composed sequence of characters after point, see below.
The @kbd{@key{DEL}} (@code{delete-backward-char}) command removes
the character before point, moving the cursor and the characters after
it backwards. If point was at the beginning of a line, this deletes
the preceding newline, joining this line to the previous one.
@vindex composition-break-at-point
For long enough sequences of composed characters, using
@kbd{@key{DEL}} to delete them one by one might be inconvenient. In
those cases, you can customize the option
@code{composition-break-at-point} to a non-@code{nil} value, to have
Emacs show characters around point separately, instead of showing the
result of their composition. This allows editing the composed sequence
of characters more conveniently, because you can move point inside the
composed sequence and delete characters there without having to delete
(and later re-insert) the following ones.
If the region is active, @kbd{@key{DEL}} deletes the text in the
region instead of deleting a single character. @xref{Mark}, for a
description of the region.
If, however, the region is active, @kbd{@key{DEL}} instead deletes
the text in the region. @xref{Mark}, for a description of the region.
On most keyboards, @key{DEL} is labeled @key{BACKSPACE}, but we
refer to it as @key{DEL} in this manual. (Do not confuse @key{DEL}
@ -462,20 +438,18 @@ with the @key{Delete} key; we will discuss @key{Delete} momentarily.)
On some text terminals, Emacs may not recognize the @key{DEL} key
properly. @xref{DEL Does Not Delete}, if you encounter this problem.
@cindex composed sequence of characters, deletion
@cindex grapheme cluster, deletion
@cindex delete entire grapheme cluster
The @key{Delete} (@code{delete-forward-char}) command deletes in the
opposite direction: it deletes the character after point, i.e., the
character under the cursor. If point was at the end of a line, this
joins the following line onto this one. Like @kbd{@key{DEL}}, it
deletes the text in the region if the region is active (@pxref{Mark}).
If the character after point is composed with following characters,
@key{Delete} deletes the entire composed sequence in one go. This is in
contrast to @key{DEL} which always deletes a single character, even if
the character is composed. If @code{composition-break-at-point} is
non-@code{nil}, @key{Delete} deletes all of the composed characters from
point to the end of the composed sequence, which could be only a part of
the sequence if you moved point into the sequence.
If the character after point is composed with following characters and
displayed as a single display unit, a so-called @dfn{grapheme cluster}
representing the entire sequence, @key{Delete} deletes the entire
sequence in one go. This is in contrast to @key{DEL} which always
deletes a single character, even if the character is composed.
@kbd{C-d} (@code{delete-char}) deletes the character after point,
similar to @key{Delete}, but regardless of whether the region is

View file

@ -746,13 +746,13 @@ for special commands that can be used in the GUD interaction buffer.
As you debug a program, Emacs displays the relevant source files by
visiting them in Emacs buffers, with an arrow in the left fringe
indicating the current execution line. (On a text terminal, the arrow
appears as @samp{=>}, in the left margin.) Moving point in such a
buffer does not move the arrow. You are free to edit these source
files, but note that inserting or deleting lines will throw off the
arrow's positioning, as Emacs has no way to figure out which edited
source line corresponds to the line reported by the debugger subprocess.
To update this information, you typically have to recompile and restart
the program.
appears as @samp{=>}, overlaid on the first two text columns.) Moving
point in such a buffer does not move the arrow. You are free to edit
these source files, but note that inserting or deleting lines will
throw off the arrow's positioning, as Emacs has no way to figure out
which edited source line corresponds to the line reported by the
debugger subprocess. To update this information, you typically have
to recompile and restart the program.
@cindex GUD and hl-line-mode
@cindex highlighting execution lines in GUD

View file

@ -660,9 +660,9 @@ if these values are not what you want (or if the operating system does
not supply them), you must set them yourself. Here is an example:
@example
(setq calendar-time-zone (* 12 60))
(setq calendar-standard-time-zone-name "NZST")
(setq calendar-daylight-time-zone-name "NZDT")
(setq calendar-time-zone -360)
(setq calendar-standard-time-zone-name "CST")
(setq calendar-daylight-time-zone-name "CDT")
@end example
@noindent

View file

@ -221,7 +221,7 @@ Appendices
* GNU Free Documentation License:: The license for this documentation.
* Emacs Invocation:: Hairy startup options.
* X Resources:: X resources for customizing Emacs.
* Antinews:: Information about Emacs version 30.
* Antinews:: Information about Emacs version 29.
* Mac OS / GNUstep:: Using Emacs under macOS and GNUstep.
* Haiku:: Using Emacs on Haiku.
* Android:: Using Emacs on Android.

View file

@ -562,12 +562,10 @@ v}. Note that registering the files doesn't commit them; you must
invoke @w{@kbd{C-x v v}} again to commit; see the next point.
@item
If every file in the VC fileset has been either newly-added or modified,
commit the changed files. To do this, Emacs pops up a @file{*vc-log*}
buffer, in which you can type the log entry for the changes (or, if the
entry has been automatically inserted from a ChangeLog file or buffer,
further edit it). When you are satisfied with the log entry, type
@kbd{C-c C-c} to commit the changes. See @ref{Log Buffer} for details.
If every file in the VC fileset has been either newly-added or
modified, commit the changed files. To do this, Emacs pops up a
@file{*vc-log*} buffer; type the desired log entry for the changes,
followed by @kbd{C-c C-c} to commit. @xref{Log Buffer}.
If @kbd{C-x v v} is invoked from a buffer under Diff mode, the command
treats the buffer as holding a set of patches for one or more files. It
@ -717,83 +715,49 @@ out individual files.
When you tell VC to commit a change, it pops up a buffer named
@file{*vc-log*}. In this buffer, you should write a @dfn{log entry}
describing the changes you have made (@pxref{Why Version Control?}).
Alternatively, you can have the entry automatically inserted from a
ChangeLog file or buffer (see below), which you can further edit in the
@file{*vc-log*} buffer if necessary. After you are done, type @kbd{C-c
C-c} (@code{log-edit-done}) to exit the buffer and commit the change,
together with your log entry.
After you are done, type @kbd{C-c C-c} (@code{log-edit-done}) to exit
the buffer and commit the change, together with your log entry.
In the @file{*vc-log*} buffer, you can also write one or more
@dfn{header lines} specifying additional information to be supplied to
the version control system. For example, the following header line
states that the present change was not written by you, but by another
developer:
@cindex Log Edit mode
@cindex mode, Log Edit
@vindex vc-log-mode-hook
@c FIXME: Mention log-edit-mode-hook here? --xfq
The major mode for the @file{*vc-log*} buffer is Log Edit mode, a
variant of Text mode (@pxref{Text Mode}). On entering Log Edit mode,
Emacs runs the hooks @code{text-mode-hook} and @code{vc-log-mode-hook}
(@pxref{Hooks}).
In the @file{*vc-log*} buffer, you can write one or more @dfn{header
lines}, specifying additional information to be supplied to the
version control system. Each header line must occupy a single line at
the top of the buffer; the first line that is not a header line is
treated as the start of the log entry. For example, the following
header line states that the present change was not written by you, but
by another developer:
@smallexample
Author: J. R. Hacker <jrh@@example.com>
@end smallexample
@noindent
Each header line must occupy a single line at the top of the buffer; the
first line that is not a header line is treated as the start of the log
entry. In addition to the @samp{Author} header, most version control
systems also support the headers @samp{Summary} (a one-line summary of
the changeset) and @samp{Date} (a manually specified commit time).
Emacs recognizes these as well as several VCS-specific headers. If you
specify a header for a VCS that does not support it, the header is
treated as part of the log entry.
@cindex Log Edit mode
@cindex mode, Log Edit
@vindex vc-log-mode-hook
@c FIXME: Mention log-edit-mode-hook here? --xfq
@vindex log-edit-hook
The major mode for the @file{*vc-log*} buffer is Log Edit mode, a
variant of Text mode (@pxref{Text Mode}). On entering Log Edit mode,
Emacs runs the hooks @code{text-mode-hook} and @code{vc-log-mode-hook}
(@pxref{Hooks}). In addition, to set up the @file{*vc-log*} buffer,
Emacs runs the hook @code{log-edit-hook}, which optionally makes several
useful features available. The following paragraphs describe several of
these features, including three that are generally useful and enabled by
default. (To see a complete list of the features and enable or disable
any of them, type @w{@kbd{M-x customize-option RET log-edit-hook RET}};
@pxref{Specific Customization}.)
@findex log-edit-insert-message-template
The function @code{log-edit-insert-message-template} produces the
default @file{*vc-log*} buffer setup, containing @samp{Author} and
@samp{Summary} headers, and displays a thick line separating the header
part of the buffer from the log entry part. If you remove
@code{log-edit-insert-message-template} from @code{log-edit-hook}, then
the initial @file{*vc-log*} buffer is simply empty. The two header
lines are initially empty. If you are the author of the change and you
have configured the VCS to use your name and email address in commit
messages, you can leave the @samp{Author} header empty. If you leave
the @samp{Summary} header empty, most systems will use the first line of
the log entry as the summary line (see below for a way to have the
@samp{Summary} header automatically filled).
Apart from the @samp{Author} header, Emacs recognizes the headers
@samp{Summary} (a one-line summary of the changeset), @samp{Date} (a
manually-specified commit time), and @samp{Fixes} (a reference to a
bug fixed by the change). Not all version control systems recognize
all headers. If you specify a header for a system that does not
support it, the header is treated as part of the log entry.
@kindex C-c C-f @r{(Log Edit mode)}
@findex log-edit-show-files
When VC pops up the @file{*vc-log*} buffer, a buffer named
@file{*log-edit-files*} listing the current VC fileset, that is, the
files that will be committed if you type @w{@kbd{C-c C-c}}, also pops up
by default. If you have removed the command @code{log-edit-show-files}
from @code{log-edit-hook}, the @file{*log-edit-files*} buffer does not
automatically pop up, but you can invoke the command by typing
@w{@kbd{C-c C-f}}. Likewise, if you kill or bury the
@file{*log-edit-files*} buffer, typing @w{@kbd{C-c C-f}} will pop it up
again.
@kindex C-c C-d @r{(Log Edit mode)}
@findex log-edit-show-diff
To view a diff of changes between the VC fileset and the version from
which you started editing (@pxref{Old Revisions}), type @kbd{C-c C-d}
(@code{log-edit-show-diff}). This command also selects the window
displaying the diff. To have VC automatically display the diff when it
pops up the @file{*vc-log*} buffer, add @code{log-edit-maybe-show-diff}
to @code{log-edit-hook}; unlike @kbd{C-c C-d}, this function does not
select the window displaying the diff.
While in the @file{*vc-log*} buffer, the current VC fileset is
considered to be the fileset that will be committed if you type
@w{@kbd{C-c C-c}}. To view a list of the files in the VC fileset,
type @w{@kbd{C-c C-f}} (@code{log-edit-show-files}). To view a diff
of changes between the VC fileset and the version from which you
started editing (@pxref{Old Revisions}), type @kbd{C-c C-d}
(@code{log-edit-show-diff}).
@kindex C-c C-w @r{(Log Edit mode)}
@findex log-edit-generate-changelog-from-diff
@ -809,37 +773,15 @@ VC root, customize @code{diff-add-log-use-relative-names}.
@kindex C-c C-a @r{(Log Edit mode)}
@findex log-edit-insert-changelog
If you have added log entries for the current VC fileset to one or
more @file{ChangeLog} files or to a temporary ChangeLog buffer
(@pxref{Change Log}), by default VC automatically inserts these entries
into the @file{*vc-log*} buffer on popping it up. If you have removed
the command @code{log-edit-insert-changelog} from @code{log-edit-hook},
VC does not automatically insert the log entries, but you can invoke the
command by typing @kbd{C-c C-a}. Likewise, if you delete or otherwise
change the content of this buffer and then decide you want to use the
ChangeLog entries after all, type @kbd{C-c C-a} to repopulate the buffer
with these entries.
If the relevant log entries are in one or more @file{ChangeLog} files
and the topmost item in each file was made under your user name on the
current date, this command searches that item (or those items) for
entries matching the file(s) to be committed, and inserts them. If you
invoke the command with a prefix argument (@kbd{C-u C-c C-a}) or repeat
it immediately (@kbd{C-c C-a C-c C-a}), it searches the topmost item
regardless of the user name and date of the item.
If VC detects that all log entries come from the same ChangeLog file
or buffer, then the command simply inserts the entire body of the entry
into the @file{*vc-log*} buffer. In addition, if the first line of the
entry does not begin with @samp{* } (an asterisk followed by a space),
VC considers it to be a summary line and moves it to the @samp{Summary}
header. Finally, if VC detects that the set of changed files listed in
the ChangeLog entry differs from the current VC fileset, it displays a
warning urging you to fix this discrepancy before committing the
changes.
If the VC fileset includes one or more @file{ChangeLog} files
(@pxref{Change Log}), type @kbd{C-c C-a}
(@code{log-edit-insert-changelog}) to pull the relevant entries into
the @file{*vc-log*} buffer. If the topmost item in each
@file{ChangeLog} was made under your user name on the current date,
this command searches that item for entries matching the file(s) to be
committed, and inserts them.
@ifnottex
If you are using CVS or RCS, see @ref{Change Logs and VC}, for the
If you are using CVS or RCS, see @ref{Change Logs and VC}, for the
opposite way of working---generating ChangeLog entries from the Log
Edit buffer.
@end ifnottex
@ -1657,6 +1599,17 @@ unpushed revisions"} where @var{N} is a number. You can click on this
text to execute the @code{vc-root-log-outgoing} command (@pxref{VC
Change Log}).
@vindex vc-dir-show-outgoing-count
Emacs tries to use cached information to determine the number of
unpushed revisions, but for some backends this isn't possible. In these
cases Emacs must occasionally fetch from the remote repository in order
to determine the count. If your connection to the remote repository is
slow then this may cause unacceptable slowdowns in refreshing the VC
Directory buffer. If this affects you, you can customize
@code{vc-dir-show-outgoing-count} to @code{nil} to disable the unpushed
revisions count altogether. You can also set this on a per-repository
basis using directory local variables (@pxref{Directory Variables}).
@node VC Directory Commands
@subsubsection VC Directory Commands
@ -1699,10 +1652,9 @@ cannot be marked with this command if any file in its tree is marked.
@item M
If point is on a file entry, mark all files with the same status; if
point is on a directory entry, mark all and only the files that are
immediate descendents (i.e., children) of that directory
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all listed
files.
point is on a directory entry, mark all files in that directory tree
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all
listed files and directories.
@findex vc-dir-mark-by-regexp
@item % m
@ -1739,10 +1691,9 @@ active, unmark all the files in the region (@code{vc-dir-unmark}).
@item U
If point is on a file entry, unmark all files with the same status; if
point is on a directory entry, unmark all and only the files that are
immediate descendents (i.e., children) of that directory
point is on a directory entry, unmark all files in that directory tree
(@code{vc-dir-unmark-all-files}). With a prefix argument, unmark all
listed files and directories.
files and directories.
@item x
Hide files with @samp{up-to-date} or @samp{ignored} status
@ -1761,22 +1712,13 @@ Quit the VC Directory buffer, and bury it (@code{quit-window}).
While in the VC Directory buffer, all the files that you mark with
@kbd{m} (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark-all-files})
are in the current VC fileset. If you mark a directory entry with
@kbd{m}, all the listed files in that directory tree (i.e., not only the
listed files of the directory but also the listed files of its
subdirectories) are in the current VC fileset. The files and
directories that belong to the current VC fileset are indicated with a
@samp{*} character in the VC Directory buffer, next to their VC status.
In this way, you can set up a multi-file VC fileset to be acted on by VC
commands like @w{@kbd{C-x v v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x
v =}} (@pxref{Old Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
In a VC Directory buffer containing no marked file or directory
entries, the current VC fileset is determined as follows. If point is
on a file entry, the fileset consists of just that file. If point is on
a directory entry, the fileset consists of all files in that directory
tree. Consequently, if point in on (or above) the entry @samp{./}
(representing the working directory), the fileset consists of all listed
files.
@kbd{m}, all the listed files in that directory tree are in the
current VC fileset. The files and directories that belong to the
current VC fileset are indicated with a @samp{*} character in the VC
Directory buffer, next to their VC status. In this way, you can set
up a multi-file VC fileset to be acted on by VC commands like
@w{@kbd{C-x v v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x v =}}
(@pxref{Old Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
The VC Directory buffer also defines some single-key shortcuts for
VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l},
@ -2598,36 +2540,13 @@ dated in May 1993, with two items and one item respectively.
@end smallexample
One entry can describe several changes; each change should have its
own item, or its own line in an item. Normally there should be a blank
line between items. When items are related (parts of the same change,
in different places), group them by leaving no blank line between them.
Such a multi-item entry often begins with a single line of text that
succintly summarizes the whole changeset. The entry may also contain
additional explanatory text between the summary line and the first
change item; the explanatory text should also be bounded by blank lines.
Here is an example:
own item, or its own line in an item. Normally there should be a
blank line between items. When items are related (parts of the same
change, in different places), group them by leaving no blank line
between them.
@iftex
@medbreak
@end iftex
@smallexample
2026-02-27 Sean Whitton <spwhitton@@spwhitton.name>
New 'log-outstanding' value for vc-log-view-type
This fixes vc-hg-print-log's choice of -r arguments to 'hg log'.
* lisp/vc/vc.el (vc-log-view-type): New 'log-outstanding' value.
(vc-log-outstanding): Pass it.
* lisp/vc/vc-git.el (vc-git-log-view-mode):
* lisp/vc/vc-hg.el (vc-hg-print-log, vc-hg-log-view-mode): Treat
'log-outstanding' the same as 'log-outgoing'.
@end smallexample
If you include one or more change log files in a software package that
is distributed to others, you should put a copyright notice and
permission notice at the end of each change log file. Here is an
example:
You should put a copyright notice and permission notice at the
end of the change log file. Here is an example:
@smallexample
Copyright 1997--1998, 2025--2026 Free Software Foundation, Inc.
@ -2799,23 +2718,6 @@ new frame for it. The former is @w{@kbd{C-x 4 .}}
around the place of a mouse event. The @code{xref-mouse-mode} minor
mode binds the command to @kbd{C-mouse-1}.
@kindex M-g .
@kindex M-g M-.
@findex xref-find-by-kind
@kbd{M-g .} (or @kbd{M-g M-.}) finds all definitions of a certain kind
for the identifier at point. First it prompts to choose the kind using
a key character, from the available set that is returned by the current
backend (@pxref{Xref}). Then it either uses the identifier at point or
prompts for it if none found or the command was invoked with a prefix
argument. (If you want it to always prompt, customize
@code{xref-prompt-for-identifier}.) The list of supported kinds depends
on the backend, which are advised to use mnemonic keys and common sense.
For example, the Emacs Lisp mode has ``variable'', ``function alias'',
``face'', and ``feature'' (a symbol that is @code{provide}d by some
package) among its kinds, whereas Eglot (our built-in LSP Client) uses
``declaration'', ``implementation'' and ``type definition''. Etags does
not support this feature yet.
@kindex C-M-.
@findex xref-find-apropos
@vindex tags-apropos-additional-actions
@ -3365,8 +3267,7 @@ In Erlang code, the tags are the functions, records and macros defined
in the file.
@item
In Fortran code, modules, subroutines, functions, entries and block data
are tags.
In Fortran code, functions, subroutines and block data are tags.
@item
In Go code, packages, functions, and types are tags.

View file

@ -1385,12 +1385,6 @@ comments also. (Note that @samp{\\} is needed in Lisp syntax to
include a @samp{\} in the string, which is needed to deny the first
star its special meaning in regexp syntax. @xref{Regexp Backslash}.)
@vindex comment-start-line-regexp
Modes that support both line and block comments should also set
@code{comment-start-line-regexp} to a regexp that matches only line
comment starters. This lets Emacs distinguish between the two kinds of
comments.
@vindex comment-start
@vindex comment-end
When a comment command makes a new comment, it inserts the value of
@ -1767,9 +1761,9 @@ If non-@code{nil}, @code{hs-hide-all}, @code{hs-cycle} and
@item hs-hide-block-behavior
This variable controls how @code{hs-hide-block}, @code{hs-cycle},
@code{hs-hide-level}, and @code{hs-toggle-hiding} should hide a block.
The possible values can be 'after-bol', hide the innermost block to
which the current line belongs; or 'after-cursor', hide the block after
cursor position.
The possible values can be @code{after-bol} to hide the innermost block
to which the current line belongs, or @code{after-point} to hide the
block after point.
@item hs-display-lines-hidden
If non-@code{nil}, display the number of hidden lines next to the

View file

@ -451,10 +451,6 @@ in Rmail mode. You can use @kbd{M-x rmail-input} even when not in
Rmail, but it is easier to type @kbd{C-u M-x rmail}, which does the
same thing.
Files named @file{RMAIL} or ending in @file{.rmail} are visited in
Rmail mode automatically by ordinary file-visiting commands, such as
@kbd{C-x C-f}.
The file you read with @kbd{i} should normally be a valid mbox file.
If it is not, Rmail tries to convert its text to mbox format, and
visits the converted text in the buffer. If you save the buffer, that

View file

@ -1564,43 +1564,6 @@ instead (@pxref{Mark}). The basic replace commands replace one
is possible to perform several replacements in parallel, using the
command @code{expand-region-abbrevs} (@pxref{Expanding Abbrevs}).
@cindex preview of replacement text
@vindex query-replace-show-preview
@findex replace-preview-replacement-only
@findex replace-preview-both
If you set @code{query-replace-show-preview} to a non-@code{nil}
value, the replace commands show a preview of the replacement while you
type it: the matches visible in the window are displayed as they would
look after the replacement. This tells you what back-references like
@samp{\1} (@pxref{Regexp Replace}) expand to before you commit to the
replacement. The preview also appears at the prompt that reads the text
to replace, as soon as its input holds both halves separated by an
arrow, which is what @kbd{M-p} recalls from the history. However,
replacements that use @samp{\,} or @samp{\#} are not previewed.
Only the matches that the command will replace are previewed: those
after point, or those before it when replacing backward
(@pxref{Query Replace}). The other ones are still highlighted, to show
that the buffer has more of them. When the region is active, the
preview covers all of it, as the replacement does.
Possible values for @code{query-replace-show-preview} are
@code{replacement-only} to display the replacement alone and @code{both}
to display the match next to its replacement separated by an arrow. In
the case of @code{replacement-only}, then if the replacement is empty,
instead of showing nothing at all, displays a thin bar to mark the place
of the match. You can also use a custom function that takes the match
and the replacement and should return a string to display in place of
the match, or @code{nil} to leave that match alone. It may be helpful
to reference the functions @code{replace-preview-replacement-only} and
@code{replace-preview-both} when writing a custom function value for
this option.
@vindex query-replace-preview@r{ face}
@vindex query-replace-preview-match@r{ face}
The preview uses the faces @code{query-replace-preview} and
@code{query-replace-preview-match}.
@menu
* Unconditional Replace:: Replacing all matches for a string.
* Regexp Replace:: Replacing all matches for a regexp.

View file

@ -1197,8 +1197,8 @@ header line.
Make the current heading line's body invisible
(@code{outline-hide-entry}).
@item C-c C-e
Reveal the current entry and its parent hierarchy
(@code{outline-show-entry-and-parents}).
Make the current heading line's body visible
(@code{outline-show-entry}).
@item C-c C-d
Make everything under the current heading invisible, not including the
heading itself (@code{outline-hide-subtree}).
@ -1235,14 +1235,14 @@ Show bodies of headings that match @var{regexp}
@end table
@findex outline-hide-entry
@findex outline-show-entry-and-parents
@findex outline-show-entry
@kindex C-c C-c @r{(Outline mode)}
@kindex C-c C-e @r{(Outline mode)}
The simplest of these commands are @kbd{C-c C-c}
(@code{outline-hide-entry}), which hides the body lines directly
following the current heading line, and @kbd{C-c C-e}
(@code{outline-show-entry-and-parents}), which reveals the current entry,
all of its ancestor headings, and their immediate sibling headings.
(@code{outline-show-entry}), which reveals them. Subheadings and
their bodies are not affected.
@findex outline-hide-subtree
@findex outline-show-subtree
@ -1372,9 +1372,9 @@ levels.
Consider an Outline mode buffer with all the text and subheadings under
level-1 headings hidden. To look at what is hidden under one of these
headings, you could use @kbd{C-c C-e} (@kbd{M-x outline-show-entry-and-parents})
to expose the body and its parent hierarchy, or @kbd{C-c C-i} to expose
the child (level-2) headings.
headings, you could use @kbd{C-c C-e} (@kbd{M-x outline-show-entry})
to expose the body, or @kbd{C-c C-i} to expose the child (level-2)
headings.
@kindex C-c C-z
@findex foldout-zoom-subtree

View file

@ -15206,13 +15206,12 @@ nil
100
@end group
@group
(1351051674579989697 . 1000000000)
(1173477761000000000 . 1000000000)
(1351050967734791805 . 1000000000)@footnote{If @code{current-time-list} is
@code{t} the three timestamps are
@code{(20615 27034 579989 697000)},
@code{(17905 55681 0 0)}, and
@code{(20615 26327 734791 805000)}, respectively.}
(20615 27034 579989 697000)
(17905 55681 0 0)
(20615 26327 734791 805000)@footnote{If @code{current-time-list} is
@code{nil} the three timestamps are @code{(1351051674579989697
. 1000000000)}, @code{(1173477761000000000 . 1000000000)}, and
@code{(1351050967734791805 . 1000000000)}, respectively.}
13188
"-rw-r--r--"
@end group

View file

@ -6,133 +6,117 @@
@c This node must have no pointers.
@node Antinews
@appendix Emacs 30 Antinews
@appendix Emacs 29 Antinews
@c Update the elisp.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information about
downgrading to Emacs version 30.2. We hope you will enjoy the greater
downgrading to Emacs version 29.4. We hope you will enjoy the greater
simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Lisp strings are now mutable. You can use @code{aset} on unibyte
strings to replace single bytes by multibyte characters, and @code{aset}
on multibyte strings can replace any character by any other character,
regardless if they are ASCII or multibyte non-ASCII@. We feel those
restrictions are un-Emacsy and get in the way of doing all kinds of
exciting things with strings.
Mouse wheel events once again follow the platform and window-system
conventions: sometimes they are @code{wheel-up/down} and sometimes
@code{mouse-4/5/6/7}. Lisp programs which use these should once again
be aware of the conventions in effect and behave accordingly.
@item
Buffers that are current to a non-main thread cannot be killed by other
threads. We decided to get rid of the numerous complications which were
needed to allow killing such buffers. If your program needs to kill
such buffers, you will need to use a disciplined approach of first
making some other buffer current to the thread.
The command @code{describe-function} no longer distracts you by showing
unnecessary details like the type of the function's object. Emacs
hackers always know whether a function is a primitive, a native-compiled
Lisp function, or any other kind. Stating the obvious simply wastes the
precious screen estate; as you move into the past, and the typical
dimensions of the screen become smaller, that waste is less and less
justified. So we made the waste smaller.
@item
We removed the early detection of faces that inherit from themselves.
As you move back in time, Emacs Lisp programmers become more and more
proficient, so disallowing such tricks feels wrong. Those who don't
know well enough what they are doing will be amply punished by having
their Lisp programs barf at display time or even wedge Emacs cold.
The support for styled underline in face attribute was dropped. The
simple underline should be enough; anything else is just code bloat and
creeping featurism. Colorful underlines on TTY frames are no longer
supported for the same reason.
@item
Calling @code{debug} in batch mode now kills Emacs. We decided that
there's no sense in continuing a batch session that entered the
debugger: who and how will debug it, anyway?
For the same reason, @kbd{C-c} in batch mode now always kills Emacs, it
never quits.
IELM stopped recording its input history. You will no longer be annoyed
by inputs from your past sessions; each session starts with a clean
slate. What can be simpler and easier to remember?
@item
The functions that access and manipulate error descriptors were deleted.
Functions like @code{error-type}, @code{error-slot-value} and others are
useless bloat, since Lisp programs can simply access the data structure
directly, as God intended!
You can no longer disable JavaScript in xwidget Webkit sessions. Since
xwidgets are going away in one of the previous Emacs versions, we
decided to make this one step in that direction and get rid of this
complication.
@item
We removed @code{frame-initial-p}, as its job can easily be done by
testing several obscure variables and frame parameters.
The @code{minibuffer-regexp-mode} was removed. Regular expressions are
just strings, so no fancy mode should be needed for editing them.
@item
We've added the @code{redisplay-dont-pause} variable, so we could allow
interrupting a runaway redisplay cycle in one of the past versions of
Emacs.
We removed the Compat package. Forward compatibility for ELPA packages
becomes less and less important as you move back through time, and soon
enough ELPA will disappear entirely. We decided it was prudent to start
preparing for that now.
@item
There's no longer a guarantee that all the digit characters will have
the @code{digit} (@code{?6}) category. We feel that such silly
consistency robs Lisp programmers of too much fun, whereby they should
discover which digits have this category by trial-and-error.
For the same reason, not all characters belonging to the @code{symbol}
script will have the @code{symbol} (@code{?5}) category.
We are back to interpreting @code{\x} without any following hex digits
as character code zero (@acronym{NUL}), as it always was in Emacs. The
savings in typing due to this alone are enough to justify this
simplification.
@item
Lisp programs can now easily delete that daemon frame by calling
@code{delete-frame}, as with any other frame. We decided there's no
reason to make a special case for the daemon frames, especially as some
past Emacs version will remove the daemon feature entirely.
To keep Emacs clean and elegant, we've removed the ability to show
tooltips for fringe bitmaps. What important information cam be shown on
the fringes, and why would it require tooltips to explain its purpose?
We decided it isn't justified to keep this in past versions of Emacs.
@item
Lisp files found on @code{load-path} are no longer cached. We intend to
make the @code{load-path} list shorter and shorter as we move to
previous versions of Emacs, so caching files is an unnecessary
complication and bloat of precious memory.
Fancy sorting-related facilities, like the @code{value<} function and
keyword arguments for @code{sort}, were deleted as too complex. The
basic @code{sort} function should all that's needed in the years to go.
@item
The annoying warning about the missing @code{lexical-binding} cookie
when loading Lisp files was removed. This is one more step towards
eventual elimination of lexical binding from Emacs in one of the past
versions.
For the same reason, Lisp files loaded via the @option{-x} and
@option{--script} command-line options no longer use lexical binding by
default.
Features related to the inheritance graph of major modes were deemed
unnecessary and thus were dropped. This includes
@code{provided-mode-derived-p}, @code{derived-mode-add-parents}, and
others. We decided that untangling the mode inheritance relationships
by hand facilitates more clear code and makes the intent evident.
@item
To keep Emacs clean and elegant, we deleted the @code{setopt-local}
macro. This was one more useless bloat, since it is easy to do the same
using @code{setq-local}, and avoids the annoying warnings about mismatch
between the value and expected type defined by @code{defcustom}.
We removed unnecessary functionality for handling touch screen events,
as touch screens gradually disappear from view as you move back in time.
There's no need to keep obsolete these new inventions in the past.
@item
Pure storage is now part of Emacs, and is here to stay. The function
@code{purecopy} really copies its argument to pure storage. This is a
significant step towards making Emacs more memory-efficient on
yesterday's computers, and more generally towards using @code{unexec} as
the only way of dumping Emacs.
Various new functions and variables for moving and transposing sexps and
for moving by program statements were dropped as unnecessary. The
original commands that move by balanced expressions are more than
enough.
@item
The @code{cond*} macro was removed. You can still use @code{pcase}
instead, but better start using the venerable @code{cond} exclusively,
as @code{pcase} and its ilk will disappear from Emacs in the near past.
No one should need these fancy and hard-to-read constructs with their
obscure semantics and myriads of backticks! The original control-flow
special forms of the pristine Emacs Lisp are more than enough.
We deleted some fancy @code{declare} forms for functions, such as
@code{ftype}. Emacs Lisp is not a string-typed language, which makes
these declarations anathema. The types @code{closure} and
@code{interpreted-function} are gone for the same reason: no need to
distinguish types of Lisp functions.
@item
Xref commands automatically suggest visiting a tags table. This is to
enable symbol completion,and generally move towards removing all
backends except the @code{etags} one in some past Emacs version.
The byte compiler stopped issuing warnings about practices some purists
consider questionable. This includes warnings about missing
@code{lexical-binding} cookies, empty bodies of special forms and
macros, comparison with literals, @code{condition-case} without
handlers, mutation of constants, and some others. As time moves into
the past, the typical Emacs hacker knows best what's correct code and
what isn't, and thus these warnings become useless annoyances. Good
riddance!
@item
Support for SHA-3 message digests was removed from the function
@code{secure-hash}. We plan to continue removing algorithms from this
function, so as to keep Emacs as lean as possible. Eventually, just one
kind of digest should be enough for everyone!
@item
We deleted unnecessary functions like @code{incf}, @code{decf},
@code{plusp}, @code{minusp}, @code{oddp}, and @code{evenp}. Use the
corresponding functions from @file{cl-lib} or just write these trivial
functions when you need them. For the same reason, @code{all},
@code{any}, @code{drop-while}, and @code{take-while} are also gone.
The @code{obarray} type is gone. Obarrays are back to their original
representation as vectors. Each removed Lisp data type makes Emacs
simpler and easier to use, so this is a welcome deletion.
@item
As part of the ongoing quest for simplicity, many other functions and
variables have been eliminated. Other functions and variables, that
were declared obsolete since Emacs 25, have been added back, in
preparation for releasing Emacs 25 in some distant past.
were declared obsolete since Emacs 24, have been added back, in
preparation for releasing Emacs 24 in some distant past.
@end itemize

View file

@ -52,15 +52,15 @@ Here is an example:
@group
(defun silly-loop (n)
"Return the time, in seconds, to run N iterations of a loop."
(let ((t1 (current-time)))
(let ((t1 (float-time)))
(while (> (setq n (1- n)) 0))
(float-time (time-since t1))))
(- (float-time) t1)))
@result{} silly-loop
@end group
@group
(silly-loop 100000000)
@result{} 2.236908583
(silly-loop 50000000)
@result{} 5.200886011123657
@end group
@group
@ -69,13 +69,13 @@ Here is an example:
@end group
@group
(silly-loop 100000000)
@result{} 0.374873305
(silly-loop 50000000)
@result{} 0.6239290237426758
@end group
@end example
In this example, the interpreted code was about six times slower
than the byte-compiled code. These
In this example, the interpreted code required more than 5 seconds to run,
whereas the byte-compiled code required less than 1 second. These
results are representative, but actual results may vary.
@node Compilation Functions

View file

@ -1489,13 +1489,6 @@ introduced in each one of the @var{bindings} are available in the
being available in @var{body}.
@end defmac
@defmac pcase-let*-strict bindings body@dots{}
Like @code{pcase-let*}, but signals an error if a @var{pattern} does
not match its corresponding @var{exp}. For example, this can alert
you when a value that you would like to destructure is not as
expected.
@end defmac
@defmac pcase-dolist (pattern list) body@dots{}
Execute @var{body} once for each element of @var{list}, on each
iteration performing a destructuring binding of variables in

View file

@ -5068,12 +5068,11 @@ to the left of the display area.
@defvar overlay-arrow-position
This variable holds a marker that indicates where to display the overlay
arrow. It should point at the beginning of a line. On a non-graphical
display, or when the left fringe is not shown, the arrow text appears at
the beginning of that line, overlaying any text that would otherwise
appear. Since the arrow is usually short, and the line usually begins
with indentation, normally nothing significant is overwritten. If the
window has a left margin with enough space, Emacs displays the arrow
there instead and the text area is not overwritten.
display, or when the left fringe is not shown, the arrow text
appears at the beginning of that line, overlaying any text that would
otherwise appear. Since the arrow is usually short, and the line
usually begins with indentation, normally nothing significant is
overwritten.
The overlay-arrow string is displayed in any given buffer if the value
of @code{overlay-arrow-position} in that buffer points into that
@ -5704,9 +5703,7 @@ edge, center, or right edge of the text area. When the window
displays line numbers, and @code{:align-to} is used in display
properties of buffer text (as opposed to header line, see below), the
@code{left} and the @code{center} positions are offset to account for
the screen space taken by the line-number display. In particular,
@code{center} then denotes the center of the editable text area, i.e.@:
the text area excluding the line-number display.
the screen space taken by the line-number display.
Any of the above window elements (except @code{text}) can also be
used with @code{:align-to} to specify that the position is relative to
@ -5948,7 +5945,7 @@ property, and put the margin display specification on the contents of
the before-string.
Note that if the string to be displayed in the margin doesn't fully
specify its face, the unspecified attributes are inherited from the
specify its face, the nonspecified attributes are inherited from the
@code{margin} face (@pxref{Basic Faces}). If you want a margin string
to have a specific appearance independent of the @code{margin} face,
make sure the string has a face specifying all required attributes.
@ -6026,7 +6023,6 @@ displayed (@pxref{Display Feature Testing}).
* Defining Images:: Convenient ways to define an image for later use.
* Showing Images:: Convenient ways to display an image once it is defined.
* Multi-Frame Images:: Some images contain more than one frame.
* Canvas Images:: Easily modifiable image with a pixel buffer.
* Image Cache:: Internal mechanisms of image display.
@end menu
@ -7478,113 +7474,6 @@ This function returns the timer responsible for animating @var{image},
if there is one.
@end defun
@node Canvas Images
@subsection Canvas Images
@cindex canvas image
Canvas images can be updated and displayed efficiently with high frame
rates, for example by document viewers, visualization tools, dynamically
computed animations or games. Canvas images have an associated
writeable pixel buffer in ARGB32 format. For portability the format is
the same on all platforms. Unlike other image types supported in Emacs,
canvas images do not require creating a new Emacs Lisp object every time
they get updated.
An image specifier with @code{:type canvas} creates a canvas, for instance
as follows:
@lisp
(defvar my-canvas
'(image :type canvas
:id my-canvas
:data-width 800
:data-height 600))
@end lisp
The image specification object uniquely (with respect to @code{eq})
identifies a canvas image object. The properties @code{:data-width},
@code{:data-height} and @code{:id} are mandatory. The width and height
must both be positive integers and the id must be a symbol.
Canvases can be created by either providing ARGB32 data as a vector of
fixnums or as an unibyte string in @code{:data}. Path to a file
containing the ARGB32 data in @code{:file} can also be provided.
Furthermore @code{create-image} can create canvas images as follows,
where the data is initially loaded from a file, or from a vector:
@lisp
(setq my-file-canvas (create-image "/path/to/file"
'canvas nil
:data-width 800
:data-height 600))
(setq my-vec (make-vector (* 800 600) #xFFFF0000))
(setq my-vec-canvas (create-image my-vec
'canvas t
:data-width 800
:data-height 600))
@end lisp
If the values for dimensions change (i.e., @code{:data-height} or
@code{:data-width}), then Emacs will automatically adjust the underlying
pixel buffer and resize the canvas.
Other image properties like @code{:scale}, @code{:margin}, @code{:relief},
@code{:transform-smoothing} and @code{:map} are supported.
@xref{Image Descriptors}, for further details on these properties.
In order to display the canvas, specify it as the display property of a
string or overlay:
@lisp
(insert (propertize "#" 'display my-canvas))
(overlay-put some-overlay 'display my-canvas)
@end lisp
Once a canvas image object has been created and displayed, it can be
``refreshed'' via @code{canvas-refresh}.
@defun canvas-refresh image &optional reload-data
Refresh canvas @var{image} and update it on screen. If the optional
argument @var{reload-data} is non-nil, reload the @code{:data} or
@code{file} from the image specification before redrawing the canvas.
@end defun
The following code refreshes the canvas by reloading the data or file:
@lisp
;; Draw pixels
(aset my-vec <index> <color>)
;; Reload and refresh canvas images
(canvas-refresh my-vec-canvas 'reload-data)
@end lisp
When refreshing the canvas in a loop, we must explicitly call @code{redisplay}:
@example
(setq canvas (create-image (make-vector (* 100 100) 0) 'canvas t
:data-width 100 :data-height 100))
(insert (propertize "#" 'display canvas))
(dotimes (i (* 100 100))
(aset (plist-get (cdr canvas) :data) i #xFF)
(canvas-refresh canvas 'reload-data)
(redisplay))
@end example
But, if we are refreshing the canvas via a timer or a command, @code{redisplay}
is implicitly called after the timer or command. The following example updates
the above canvas in a timer ~30 times per second:
@example
(let ((i 0))
(run-at-time nil 0.033 (lambda ()
(when (< i (* 100 100))
(aset (plist-get (cdr canvas) :data) i #xFF)
(incf i)
(canvas-refresh canvas 'reload-data)))))
@end example
Canvas images can be manipulated and refreshed via dynamic modules.
@xref{Module Canvas API}, for further details.
@node Image Cache
@subsection Image Cache

View file

@ -105,10 +105,8 @@ the Lisp code you are debugging. This is referred to as the @dfn{source
code buffer}, and it is temporarily read-only.
An arrow in the left fringe indicates the line where the function is
executing. On a non-graphical display (or when the left fringe is not
shown), this arrow is displayed in the left margin instead. Point
initially shows where within the line the function is executing, but
this ceases to be true if you move point yourself.
executing. Point initially shows where within the line the function is
executing, but this ceases to be true if you move point yourself.
If you instrument the definition of @code{fac} (shown below) and then
execute @code{(fac 3)}, here is what you would normally see. Point is

View file

@ -237,7 +237,7 @@ To view this manual in other formats, click
Appendices
* Antinews:: Info for users downgrading to Emacs 30.
* Antinews:: Info for users downgrading to Emacs 29.
* GNU Free Documentation License:: The license for this documentation.
* GPL:: Conditions for copying and changing GNU Emacs.
* Tips:: Advice and coding conventions for Emacs Lisp.
@ -1454,7 +1454,6 @@ Processes
* Misc Network:: Additional relevant functions for net connections.
* Serial Ports:: Communicating with serial ports.
* Byte Packing:: Using bindat to pack and unpack binary data.
* UUIDs:: Generating and converting UUIDs.
Receiving Output from Processes
@ -1577,7 +1576,6 @@ Images
* Showing Images:: Convenient ways to display an image once
it is defined.
* Multi-Frame Images:: Some images contain more than one frame.
* Canvas Images:: Easily modifiable image with a pixel buffer.
* Image Cache:: Internal mechanisms of image display.
Buttons

View file

@ -1467,20 +1467,20 @@ is owned by the user with name @samp{lh}.
@item "users"
is in the group with name @samp{users}.
@item (1351023123050040152 . 1000000000)
@item (20614 64019 50040 152000)
was last accessed on October 23, 2012, at 20:12:03.050040152 UTC@.
(This timestamp is @code{(20614 64019 50040 152000)}
if @code{current-time-list} is @code{t}.)
(This timestamp is @code{(1351023123050040152 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
@item (1310720023000000000 . 1000000000)
@item (20000 23 0 0)
was last modified on July 15, 2001, at 08:53:43.000000000 UTC@.
(This timestamp is @code{(20000 23 0 0)}
if @code{current-time-list} is @code{t}.)
(This timestamp is @code{(1310720023000000000 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
@item (1351023659902289872 . 1000000000)
@item (20614 64555 902289 872000)
last had its status changed on October 23, 2012, at 20:20:59.902289872 UTC@.
(This timestamp is @code{(20614 64555 902289 872000)}
if @code{current-time-list} is @code{t}.)
(This timestamp is @code{(1351023659902289872 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
@item 122295
is 122295 bytes long. (It may not contain 122295 characters, though,

View file

@ -1131,8 +1131,6 @@ This function returns @var{argument} and has no side effects.
@defun ignore &rest arguments
This function ignores any @var{arguments} and returns @code{nil}.
When used as a place (@pxref{Generalized Variables}), the assignment has
simply no effect.
@end defun
@defun always &rest arguments
@ -2924,11 +2922,6 @@ original signature to avoid these issues.
This is valid for macros only. Macros with this declaration are
highlighted by font-lock (@pxref{Font Lock Mode}) as normal functions,
not specially as macros.
@item font-lock-keyword
Normal functions with this declaration are highlighted by font-lock
(@pxref{Font Lock Mode}) like macros.
@end table
@end defmac

View file

@ -1117,7 +1117,6 @@ option. @xref{Initial Options,,,emacs, The GNU Emacs Manual}.
* Module Functions::
* Module Values::
* Module Misc::
* Module Canvas API::
* Module Nonlocal::
@end menu
@ -2021,53 +2020,6 @@ done, close the file descriptor using @code{close}. @ref{Low-Level
I/O,,,libc}.
@end deftypefun
@node Module Canvas API
@subsection Using Canvas API With Modules
Emacs supports creating image objects called ``canvas'' which have a
pixel buffer associated with them. These image objects can be accessed
and updated natively via dynamic modules. @xref{Canvas Images}, for what
they are.
The following functions allow you to operate on canvas image objects
with dynamic modules:
@anchor{canvas_data}
@deftypefn Function uint32_t *canvas_data (emacs_env *@var{env}, emacs_value @var{canvas})
The function gives access to the pixel buffer of @var{canvas}. The
pixel buffer is in row-major order with a size @code{@var{width}x@var{height}}.
The pixel format is ARGB32 on all platforms. Return @code{NULL} in case
of error.
@end deftypefn
Note that the pixel buffer is only valid as long as the canvas object is
alive and its dimensions have not been changed. If it has changed, Emacs
will create a new pixel buffer and automatically resize the canvas.
Once we update the canvas pixel buffer via dynamic modules, we also have
to call @code{canvas-refresh} for Emacs to redisplay the canvas. This
can be done from the module via an Elisp funcall.
@example
/* Access the pixel buffer */
uint32_t *pixel = env->canvas_data (env, canvas);
/* Write to the pixel buffer */
...
/* Redraw the canvas */
env->funcall(env, env->intern(env, "canvas-refresh"), 2,
(emacs_value[])@{canvas, Qnil@});
@end example
Note that @code{canvas-refresh} has an optional boolean argument to
reload the @code{:data} vector or string from the canvas image
specification. When called from dynamic modules, the argument should
usually be @code{Qnil}.
Thus, one can simply define a module function that takes as an argument
a canvas image object, following the specification as laid down in
@ref{Canvas Images}, and then use the above code to manipulate the pixel
buffer of the canvas and redraw it.
@node Module Nonlocal
@subsection Nonlocal Exits in Modules
@cindex nonlocal exits, in modules

View file

@ -504,11 +504,11 @@ if the information is not available.
@example
@group
emacs-build-time
@result{} (1651169878008547617 . 1000000000)
@result{} (25194 55894 8547 617000)
@end group
@end example
(This timestamp is @code{(25194 55894 8547 617000)}
if @code{current-time-list} was @code{t} when Emacs was built.)
(This timestamp is @code{(1651169878008547617 . 1000000000)}
if @code{current-time-list} was @code{nil} when Emacs was built.)
@end defvar
@defvar emacs-version

View file

@ -1459,13 +1459,15 @@ The operating system limits the range of time and zone values.
@end defun
@defvar current-time-list
This boolean variable is a transition aid. If @code{nil} (the default),
@code{current-time} and related functions return timestamps in
@code{(@var{ticks} . @var{hz})} form. If @code{t}, these functions
return in list form, typically @code{(@var{high} @var{low} @var{micro}
@var{pico})}, for behavior compatible with previous Emacs versions.
As it is merely a transition aid, this variable is planned to be removed
in some future Emacs version.
This boolean variable is a transition aid. If @code{t},
@code{current-time} and related functions return timestamps in list
form, typically @code{(@var{high} @var{low} @var{micro} @var{pico})};
otherwise, they use @code{(@var{ticks} . @var{hz})} form. Currently
this variable defaults to @code{t}, for behavior compatible with
previous Emacs versions. Developers are encouraged to test
timestamp-related code with this variable set to @code{nil}, as it
will default to @code{nil} in a future Emacs version, and will be
removed in some version after that.
@end defvar
@defun current-time
@ -1541,19 +1543,12 @@ MS-Windows.
This function returns a list describing the time zone that the user is
in.
@cindex Univeral Time
The value has the form @code{(@var{offset} @var{abbr})}. Here
@var{offset} is an integer number of seconds of time ahead of
Universal Time, the time scale originally based on Greenwich Mean Time (GMT),
the local mean time at the Royal Observatory, Greenwich.
A positive value is suitable for time zones east of Greenwich,
and negative for west of Greenwich. The
second element, @var{abbr}, is a string giving a possibly-ambiguous
abbreviation for the time zone, e.g., @samp{"IST"} for India Standard
Time, Irish Standard Time, or Israel Standard Time.
POSIX-compatible time zone abbreviations are three to six characters
that are each an ASCII alphanumeric, @samp{+}, or @samp{-}.
Both elements can change when daylight
@var{offset} is an integer giving the number of seconds ahead of Universal Time
(east of Greenwich). A negative value means west of Greenwich. The
second element, @var{abbr}, is a string giving an abbreviation for the
time zone, e.g., @samp{"CST"} for China Standard Time or for
U.S. Central Standard Time. Both elements can change when daylight
saving time begins or ends; if the user has specified a time zone that
does not use a seasonal time adjustment, then the value is constant
through time.
@ -1998,7 +1993,7 @@ This stands for the year without century (00--99).
@item %Y
This stands for the year with century.
@item %Z
This stands for the time zone abbreviation (e.g., @samp{IST}).
This stands for the time zone abbreviation (e.g., @samp{EST}).
@item %z
This stands for the time zone numerical offset. The @samp{z} can be
preceded by one, two, or three colons; if plain @samp{%z} stands for
@ -2057,7 +2052,6 @@ system.
@defun format-seconds format-string seconds
This function converts its argument @var{seconds} into a string of
years, days, hours, etc., according to @var{format-string}. The
argument @var{seconds} is a time value (@pxref{Time of Day}). The
argument @var{format-string} may contain @samp{%}-sequences which
control the conversion. Here is a table of what the
@samp{%}-sequences mean:

View file

@ -2171,7 +2171,7 @@ underscore are ignored, and the @code{@@language} capture name is
reserved.
If the embedded language is dynamic, then @code{:embed} can specify a
function rather than a static language. The function takes the node
function rathar than a static language. The function takes the node
captured with @code{@@language} capture name. Care have to be taken that
the @code{@@language} capture and the range capture are in the same
match group. The function should return either a language symbol, or nil

View file

@ -68,7 +68,6 @@ Processes}.
* Misc Network:: Additional relevant functions for net connections.
* Serial Ports:: Communicating with serial ports.
* Byte Packing:: Using bindat to pack and unpack binary data.
* UUIDs:: Generating and converting UUIDs.
@end menu
@node Subprocess Creation
@ -3884,154 +3883,3 @@ arguments @var{args}. Its behavior follows that of @code{defmacro},
which the important difference that the new forms can only be used
within Bindat type expressions.
@end defmac
@node UUIDs
@section UUIDs
@cindex uuids
Emacs Lisp can generate and parse the most popular UUID variants to
and from strings and binary. It can generate UUIDv4, UUIDv5 and UUIDv7
according to RFC 9562. UUIDv4 is a randomly generated identifier,
UUIDv5 is an identifier generated from a standard namespace and a name,
and UUIDv7 is a combination of a timestamp and random identifier, with
the advantage of having good index performance in databases.
All UUIDs are 16 byte identifiers with a common string representation,
consisting of hex digits and dashes of a predetermined length, such as
@samp{919108f7-52d1-4320-9bac-f847db4148a8}.
@menu
* UUID Generation::
* UUID Conversion::
* Special UUID values::
@end menu
@node UUID Generation
@subsection UUID Generation
@cindex uuid generation
To generate UUIDs, call @code{uuid-v4}, @code{uuid-v5} or
@code{uuid-v7}. UUID v4 and v7 will by default use the normal elisp
@dfn{random} for random numbers, but a different random number generator
can be passed in, as long as it can be called with an arg of the end of
the range of acceptable integers to generate (exclusive), and returns an
integer.
@defun uuid-v4 &key rng
Return a @code{uuid-v4} Lisp object representing a new UUIDv4.
@var{rng}, if provided, is a function that will, when called with a
numeric argument, return a random number between 0 and that number
(exclusive).
@end defun
@defun uuid-v7 &key rng
Similar to @code{uuid-v4} but returns a @code{uuid-v7}, which is
generated with a timestamp in addition to random numbers (generated from
@var{rng} in a similar manner as @code{uuid-v4}).
@end defun
These use random numbers, which should be cryptographically secure.
@xref{Random Numbers}, but generally these random numbers are not
sufficient to generate sufficiently random UUIDs. For private uses, the
default behavior should be sufficient, but for professional uses,
@var{rng} should be used, and provide cryptographically secure random
numbers.
@noindent
UUIDv5s must be created with a namespace and a name. The namespaces are
defined in @code{uuid-namespace-alist} and are by default @code{dns},
@code{url}, @code{oid}, and @code{x500}.
@defun uuid-v5 namespace name
This function returns a new @code{uuid-v5} Lisp object based on
@var{namespace}, which is a symbol in the key of the
@code{uuid-namespace-alist}: @code{dns}, @code{url}, @code{oid},
@code{x500}, or any symbol added. This is combined with @var{name} to
construct a new UUIDv5.
@end defun
An example is:
@cindex uuidv5
@example
(uuid-v5 'dns "www.example.com")
@end example
@defvar uuid-namespace-alist
A list of namespace symbols and their corresponding UUIDs. Each alist
entry is a cons of the symbol and a UUID Lisp object representing the
namespace. This is used in @code{uuid-v5}, see above for more info on
how this is used.
@end defvar
@node UUID Conversion
@subsection UUID Conversion
@cindex uuid conversion
To use a UUID, typically it is converted to a string, and sometimes to a
binary representation. This is done using @code{uuid-to-string} function.
@defun uuid-to-string uuid
Return the standard string value, with hex values and dashes, of Lisp
object @code{uuid}.
@end defun
@example
(uuid-to-string (uuid-v4)) ; @r{"230156d4-488a-45d1-93c9-507ec8be37ca"}
@end example
@noindent
Binary can also be generated, which generates a unibyte string, using
@code{uuid-to-bytes}, and a numeric representation of a UUID can be
generated with @code{uuid-to-number}.
@defun uuid-to-bytes uuid
Return a unibyte string representing the binary value of @code{uuid}.
@end defun
@defun uuid-to-number uuid
Return a numeric representation of the value of @code{uuid}.
@end defun
@noindent
String UUIDs can also be converted to a UUID Lisp object, with
@code{uuid-from-string}, and bytes can be converted with
@code{uuid-from-bytes}. These work with all UUIDs, not just the ones
this module can generate.
@defun uuid-from-string uuid-str
Return a UUID Lisp object that represents @var{uuid-str}.
@end defun
@defun uuid-from-bytes uuid-bytes
Return a UUID Lisp object that represents @var{uuid-bytes}, which is
expected to be a unibyte string.
@end defun
Valid UUIDs have types, which can be used with @code{cl-typep},
@code{cl-check-type} and @code{cl-typecase}. The type is specified with
the type specifier @code{(uuid-v <version>)}. @var{version} can be any
version of UUID, but we make sure the UUID variant is correctly
@code{2}; any other value is not a valid version.
@example
(when (cl-typep my-uuid '(uuid-v 4))
(process-v4-uuid my-uuid))
(defun process-v4-uuid (uuid)
;; Error if not the correct type
(cl-check-type uuid (uuid-v 4))
;; Proceed to process the UUIDv4.
(more-processing uuid))
@end example
@node Special UUID values
@subsection Special UUID values
@cindex special uuid values
@cindex uuid nil and uuid max
@cindex nil uuid
@cindex max uuid
@code{uuid-nil} and @code{uuid-max} are constant values representing the
UUID equivalents of @code{nil} and a max sentinel value, as defined in
RFC 9562.

View file

@ -653,9 +653,8 @@ functions. @xref{Documentation Basics}.
@cindex symbolic shorthands
@cindex namespacing
@cindex namespaces
@cindex renamed symbols
The symbol @dfn{shorthands}, sometimes known as @dfn{renamed symbols}, are
The symbol @dfn{shorthands}, sometimes known as ``renamed symbols'', are
symbolic forms found in Lisp source. They're just like regular
symbolic forms, except that when the Lisp reader encounters them, it
produces symbols which have a different and usually longer @dfn{print
@ -782,47 +781,6 @@ those names.
Symbol forms whose names start with @samp{#_} are not transformed.
@end itemize
@subsection Converting to/from shorthands
Shorthands are automatically expanded by the Lisp reader.
If you want to apply @code{read-symbol-shorthands} to a symbol
name without going through the reader, for example because the symbol
comes from another buffer (e.g., the minibuffer), you can use
@code{shorthands-to-longhand}. Similarly, if you are looking for
a symbol in a buffer, you can consider all its possible
shorthand forms with the use of @code{shorthands-of-symbol}.
@cindex longhand form of symbol name
@defun shorthands-to-longhand string
Return the full name (so called @dfn{longhand} form) of the symbol whose
shorthand name is @var{string}. It always returns a string;
if there is no use of any shorthand notation in @var{string}, it just
returns @var{string} unchanged.
@end defun
@defun shorthands-of-symbol string-or-symbol
Return the list of all the alternative ways to write the name of the
specified symbol.
The argument @var{string-or-symbol} can be a symbol or its name, and
the return value is a list of strings. Note that the return value
includes only the shorthand forms of the argument, not its longhand
form, so it is common and normal for the return value to be @code{nil}.
@end defun
@defun shorthands-intern string &optional obarray
Interns the string @var{string} in the obarray @var{obarray},
just like @code{intern}, except that it obeys
@code{read-symbol-shorthands} and thus expands any shorthand in
@var{string} if applicable before interning it.
Returns the interned symbol.
@end defun
@defun shorthands-intern-soft string &optional obarray
Same as @code{shorthands-intern}, except that it returns @code{nil}
if there is no symbol by that name in the obarray instead of
interning a new symbol.
@end defun
@node Symbols with Position
@section Symbols with Position
@cindex symbol with position

View file

@ -1449,19 +1449,6 @@ arguments @var{args}.
This kind of element enables undo limited to a region to determine
whether the element pertains to that region.
@item (apply @var{delta} (@var{beg} . @var{end}) @var{funname} . @var{args})
This kind of element is similar to the previous form. The difference is
that, to undo it, @var{funname} is invoked like this:
@lisp
(apply @var{funname} @var{beg2} @var{end2} @var{args})
@end lisp
@noindent
where @var{beg2} and @var{end2} are the adjusted values of @var{beg} and
@var{end}. The function can use those arguments to compute positions
relative to the adjusted region.
@item nil
This element is a boundary. The elements between two boundaries are
called a @dfn{change group}; normally, each change group corresponds to
@ -4882,7 +4869,7 @@ faster but suboptimal solution. The default value is 1000000.
@code{replace-region-contents} returns @code{t} if a non-destructive
replacement could be performed. Otherwise, i.e., if @var{max-secs}
was exceeded or too much memory would have been needed, it returns @code{nil}.
was exceeded, it returns @code{nil}.
Note: When using the refined replacement algorithm, if the replacement
is a string, it will be internally copied to a temporary buffer.
@ -4890,24 +4877,6 @@ Therefore, all else being equal, it is preferable to pass a buffer than
a string as @var{source} argument.
@end defun
Sometimes @code{replace-region-contents} is unable to understand the
nature of the change in which case information such as overlays and
markers will not be preserved as well as we would like. If this is
important and you have enough knowledge about the change, you can
preserve this information manually. For example, when sorting the lines
of a region, you can start by collecting all the overlays and markers in
the affected region using @code{overlays-in} and @code{markers-in} as
well as recording a description of the line on which they were found.
After inserting the sorted lines, you can then move the objects back to
their rightful position.
@defun markers-in &optional beg end
Return a list of all the markers found between @var{beg} and @var{end}
in the current buffer. @var{beg} defaults the @code{point-min} and
@var{end} defaults to @code{point-max}. Do not rely on the order of the
markers in the list, because it is unspecified.
@end defun
@node Decompression
@section Dealing With Compressed Data

View file

@ -1311,7 +1311,6 @@ other such variables, this one must be set in the first line of a
file.
@end defvar
@cindex lexical-binding cookie
@noindent
In practice, dialect selection means that the first line in an Emacs
Lisp file looks like:
@ -1328,10 +1327,9 @@ for the modern lexical-binding dialect, and
@end example
@noindent
for the old dynamic-only dialect. (This is known as the
@dfn{lexical-binding cookie}.) When no declaration is present the old
dialect is used, but this may change in a future release. The compiler
will warn if no declaration is present.
for the old dynamic-only dialect. When no declaration is present the
old dialect is used, but this may change in a future release.
The compiler will warn if no declaration is present.
When evaluating Emacs Lisp code directly using an @code{eval} call,
lexical binding is enabled if the @var{lexical} argument to
@ -1750,14 +1748,6 @@ local hook functions that have a non-@code{nil}
killed, but if the optional @var{kill-permanent} argument is
non-@code{nil}, even those variables will be killed.
If @var{kill-permanent} is the symbol @code{permanent-local}, this
function kills local variables and ignores any variable watchers. If it
is the symbol @code{reset}, the function ignores variable watchers and
resets the buffer as if the buffer was newly created. Use these values
with caution: for example, @code{reset} sets buffer variables such as
@code{default-directory} to @code{nil} and thus may result in unexpected
behavior.
This function also resets certain other information pertaining to the
buffer: it sets the local keymap to @code{nil}, the syntax table to the
value of @code{(standard-syntax-table)}, the case table to

View file

@ -3136,9 +3136,6 @@ The variable @code{display-buffer-overriding-action}.
@item
The user option @code{display-buffer-alist}.
@item
The variable @code{display-buffer-default-alist}.
@item
The @var{action} argument.
@ -3201,18 +3198,6 @@ treated with the highest priority by @code{display-buffer}. The
default value is an empty display action, i.e., @w{@code{(nil . nil)}}.
@end defvar
@defvar display-buffer-default-alist
The value of this variable is an alist mapping conditions to display
actions (@pxref{display-buffer-alist}).
Lisp programs may let-bind this variable to specify conditional actions
for wrapped @code{display-buffer} calls. Users are not supposed to set
this variable. They should customize @code{display-buffer-alist}
instead which has higher priority and, as a rule, is left alone by Lisp
programs.
@end defvar
@anchor{display-buffer-alist}
@defopt display-buffer-alist
The value of this option is an alist mapping conditions to display
actions. Each condition is passed to @code{buffer-match-p}
@ -3225,10 +3210,10 @@ use @code{derived-mode} or @code{major-mode} as condition,
@code{display-buffer} is called before the major mode of the buffer is
set.
If the caller of @code{display-buffer} passes a category as a symbol in
its @var{action} argument, then you can use the same category in
@code{display-buffer-alist} and @code{display-buffer-default-alist} to
match buffers with different names, for example:
If the caller of @code{display-buffer} passes a category as a symbol
in its @var{action} argument, then you can use the same category in
@code{display-buffer-alist} to match buffers with different names,
for example:
@example
@group
@ -3246,10 +3231,10 @@ match buffers with different names, for example:
@xref{Buffer List, @code{buffer-match-p}}.
Regardless of the displayed buffer's name the caller defines a category
as a symbol @code{comint}. Then @code{display-buffer-alist} and
@code{display-buffer-default-alist} match this category for all buffers
displayed with the same category. This avoids the need to construct a
complex regular expression that matches a buffer name.
as a symbol @code{comint}. Then @code{display-buffer-alist} matches
this category for all buffers displayed with the same category.
This avoids the need to construct a complex regular expression
that matches a buffer name.
You can also match on the command now being executed. This is useful
when different commands display buffers with the same name, but you want
@ -4099,15 +4084,13 @@ windows were selected afterwards within this command.
@vindex category@r{, a buffer display action alist entry}
@item category
If the caller of @code{display-buffer} passes an alist entry
@w{@code{(category . @var{symbol})}} in its @var{action} argument, then
you can match the displayed buffer by using the same category symbol in
the condition part of @code{display-buffer-alist} and
@code{display-buffer-default-alist} entries. @xref{Buffer List,
@code{buffer-match-p}}. Thus, if a Lisp program uses a particular
@w{@code{(category . @var{symbol})}} in its @var{action} argument, then you
can match the displayed buffer by using the same category symbol in the
condition part of @code{display-buffer-alist} entries. @xref{Buffer
List, @code{buffer-match-p}}. Thus, if a Lisp program uses a particular
@var{symbol} as the category when calling @code{display-buffer}, users
can customize how these buffers will be displayed by including such an
entry in @code{display-buffer-alist}. Programs can let-bind
@code{display-buffer-default-alist} to achieve the same effect.
entry in @code{display-buffer-alist}.
@vindex tab-name@r{, a buffer display action alist entry}
@item tab-name
@ -4509,42 +4492,10 @@ displaying @file{*foo*} at the bottom of the frame.
the window already showing @file{*foo*} since both functions supplied
by the @var{action} argument try to reuse such a window first.
There are cases, however, where Lisp programs want to modify the
default behavior of a @code{display-buffer} call hidden behind another
function. In those cases, setting the @var{action} argument is not an
option. Fortunately, the @code{display-buffer-default-alist} variable
can be used to specify a list of conditional default actions. Consider
the following example:
@example
@group
(defun foo (buffer)
(display-buffer
buffer
'((display-buffer-below-selected display-buffer-at-bottom))))
(defun bar ()
(let ((display-buffer-default-alist
'(("\\*bar\\*" (display-buffer-pop-up-frame)))))
(foo (get-buffer-create "*bar*"))))
(defun baz ()
(let ((display-buffer-default-alist
'(("\\*baz\\*" (display-buffer-same-window)))))
(foo (get-buffer-create "*baz*"))))
@end group
@end example
Here, @code{foo} calls @code{display-buffer} with a specific
@var{action}. Let-binding @code{display-buffer-default-alist} allows
the functions @code{bar} and @code{baz} to specify their own action
functions.
By setting the @var{action} argument and/or the
@code{display-buffer-default-alist} variable, an application effectively
By setting the @var{action} argument, an application effectively
overrules any customization of @code{display-buffer-base-action}. Our
user can now either accept the choice of the application, or redouble by
customizing the option @code{display-buffer-alist} as follows:
user can now either accept the choice of the application, or redouble
by customizing the option @code{display-buffer-alist} as follows:
@example
@group

View file

@ -8562,7 +8562,7 @@
* doclicense.texi: Remove node heading, so that it can be included by
other files.
* dired-x.texi: Relicense under GFDL. Remove date from title page.
* dired-x.texi: Relicence under GFDL. Remove date from title page.
* calc.texi (Algebraic Tutorial): Emphasize that / binds less strongly
than *.

View file

@ -63,22 +63,18 @@ INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = @MAKEINFO@
MAKEINFO_OPTS = --force -I$(emacsdir)
ifeq ($(DOCLANG),)
DOCLANG:=default
else ifeq ($(wildcard $(srcdir)/../translations/$(DOCLANG)/misc/info_common.mk),)
$(error No manual language $(DOCLANG) found)
DOCLANG:=default
endif
lang_suffix:=$(filter-out -default,-$(DOCLANG))
lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(DOCLANG)/misc/)
## On MS Windows, efaq-w32; otherwise blank.
DOCMISC_W32 = @DOCMISC_W32@
DOCMISC_W32_TARGET = efaq-w32
## Info files to build and install on all platforms.
include $(srcdir)/../translations/$(DOCLANG)/misc/info_common.mk
INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \
ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \
emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
htmlfontify idlwave ido info.info mairix-el message mh-e \
modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
rcirc reftex remember sasl sc semantic ses sieve smtpmail \
speedbar srecode todo-mode tramp transient url use-package \
vhdl-mode viper vtable widget wisent woman
## Info files to install on current platform.
INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
@ -86,31 +82,29 @@ INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
## Info files to build on current platform.
## This is all of them, even though they might not all get installed,
## because the info files are pre-built in release tarfiles.
INFO_TARGETS = $(INFO_COMMON) $(DOCMISC_W32_TARGET)
INFO_TARGETS = $(INFO_COMMON) efaq-w32
## Some manuals have their source in .org format.
## This is discouraged because the .texi files it generates
## are not as well formatted as handwritten ones.
ORG_SETUP = $(wildcard ${srcdir}/$(lang_subdir)*-setup.org)
ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/$(lang_subdir)*.org))
ORG_SETUP = $(wildcard ${srcdir}/*-setup.org)
ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/*.org))
TEXI_FROM_ORG = ${ORG_SRC:.org=.texi}
# There are some naming differences between the info targets and the other
# targets, so let's resolve them here.
TARGETS = $(INFO_INSTALL:ccmode=cc-mode)
TARGETS_1 = $(INFO_INSTALL:ccmode=cc-mode)
TARGETS = $(TARGETS_1:info.info=info)
# Sources are also suffixed, this is useless as they are in different
# directories, but some people argued that there should not be
# different files with same name in the repo.
texi_sources = $(addsuffix $(lang_suffix).texi,${TARGETS})
texi_sources = $(addsuffix .texi,${TARGETS})
texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources})
texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen}
SOURCES = $(sort ${texi_and_org})
DVI_TARGETS = $(TARGETS:=$(lang_suffix).dvi)
HTML_TARGETS = $(TARGETS:=$(lang_suffix).html)
PDF_TARGETS = $(TARGETS:=$(lang_suffix).pdf)
PS_TARGETS = $(TARGETS:=$(lang_suffix).ps)
DVI_TARGETS = $(TARGETS:=.dvi)
HTML_TARGETS = $(TARGETS:=.html)
PDF_TARGETS = $(TARGETS:=.pdf)
PS_TARGETS = $(TARGETS:=.ps)
TEXI2DVI = texi2dvi
TEXI2PDF = texi2pdf
@ -124,21 +118,21 @@ ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \
gfdl = ${srcdir}/doclicense.texi
style = ${emacsdir}/docstyle.texi
.PHONY: info dvi html pdf ps echo-info echo-sources $(patsubst info, info-doc, $(INFO_TARGETS))
.PHONY: info dvi html pdf ps echo-info echo-sources $(INFO_TARGETS)
## Prevent implicit rule triggering for foo.info.
.SUFFIXES:
## Disable implicit rules.
%.texi: ;
# Default. patsubst as "info" is already taken.
info: $(patsubst info, info-doc,$(INFO_TARGETS))
# Default.
info: $(INFO_TARGETS)
## Used by top-level Makefile.
## Base file names of output info files.
INFO_BASES = $(patsubst %.info,%,$(notdir $(INFO_INSTALL)))
echo-info:
@: $(info $(addsuffix $(lang_suffix).info,$(INFO_BASES)))
@: $(info $(addsuffix .info,$(INFO_BASES)))
echo-sources:
@: $(info $(SOURCES))
@ -158,30 +152,32 @@ ${buildinfodir}:
EXTRA_OPTS =
${buildinfodir}/%$(lang_suffix).info: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} | ${buildinfodir}
${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} ${style} | ${buildinfodir}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) \
-o $@ $<
## The short aliases, eg efaq = $(buildinfodir)/efaq.info.
define info_template
## patsubst as "info" is already taken.
$$(patsubst info, info-doc, $(1)): $$(buildinfodir)/$(1)$$(lang_suffix).info
$(1): $$(buildinfodir)/$(1).info
endef
$(foreach ifile,$(INFO_TARGETS),$(eval $(call info_template,$(ifile))))
## "info" is already taken.
info.info: $(buildinfodir)/info.info
$(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_template,$(ifile))))
%$(lang_suffix).dvi: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
%.dvi: ${srcdir}/%.texi ${gfdl} ${style}
$(ENVADD) $(TEXI2DVI) $<
%$(lang_suffix).pdf: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
%.pdf: ${srcdir}/%.texi ${gfdl} ${style}
$(ENVADD) $(TEXI2PDF) $<
%$(lang_suffix).html: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
%.html: ${srcdir}/%.texi ${gfdl} ${style}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) \
-o $@ $<
%$(lang_suffix).ps: %$(lang_suffix).dvi
%.ps: %.dvi
$(DVIPS) -o $@ $<
@ -208,16 +204,16 @@ ${buildinfodir}/ccmode.info: \
## efaq, efaq_w32 do not depend on gfdl.
## Maybe we can use .SECONDEXPANSION for this.
${buildinfodir}/efaq%$(lang_suffix).info: ${srcdir}/efaq%$(lang_suffix).texi ${style} | ${buildinfodir}
${buildinfodir}/efaq%.info: ${srcdir}/efaq%.texi ${style} | ${buildinfodir}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
efaq%$(lang_suffix).dvi: ${srcdir}/efaq%$(lang_suffix).texi
efaq%.dvi: ${srcdir}/efaq%.texi
$(ENVADD) $(TEXI2DVI) $<
efaq%$(lang_suffix).pdf: ${srcdir}/efaq%$(lang_suffix).texi
efaq%.pdf: ${srcdir}/efaq%.texi
$(ENVADD) $(TEXI2PDF) $<
efaq%$(lang_suffix).html: ${srcdir}/efaq%$(lang_suffix).texi
efaq%.html: ${srcdir}/efaq%.texi
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
${buildinfodir}/emacs-mime.info emacs-mime.html: EXTRA_OPTS = --enable-encoding
@ -252,10 +248,7 @@ emacs = "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefe
# things like org-setup's "version" macro work. Sigh.
define org_template
$(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el
$${AM_V_GEN}cd "$${srcdir}" && $${emacs} \
--eval '(add-to-list (quote load-path) "$(abspath ${top_srcdir}/lisp/org)")' \
--eval '(setq org--inhibit-version-check t)' \
-l ox-texinfo \
$${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \
--eval '(setq gc-cons-threshold 50000000)' \
--eval '(setq org-confirm-babel-evaluate nil)' \
--eval '(setq org-id-track-globally nil)' \

View file

@ -17367,14 +17367,12 @@ and @kbd{t U}, the normal argument is then taken from the second-to-top
stack position.) This allows you to give a non-integer time zone
adjustment. The time-zone argument can also be an HMS form, or
it can be a variable which is a time zone name in upper- or lower-case.
For example @samp{tzone(JST) = tzone(-9)} and @samp{tzone(gmt) = tzone(0)}
(for Japan standard and Greenwich mean time, respectively).
For example @samp{tzone(PST) = tzone(8)} and @samp{tzone(pdt) = tzone(7)}
(for Pacific standard and daylight saving times, respectively).
North American and European time zone names are defined as follows.
These names are obsolete and new code should not rely on them:
These names are obsolescent and new code should not rely on them:
the @samp{YST}-related names have disagreed with time in Yukon since 1973,
the @samp{PST}- and @samp{MST-}related names have disagreed with
time in western Canada since 2026,
and other names could well become confusing or wrong in the future
as countries change their time zone rules.
For each time zone there is one name for standard time,
@ -17394,6 +17392,21 @@ YGT PGT MGT CGT EGT AGT NGT BGT WEGT MEGT MEGZ
@end group
@end smallexample
@vindex math-tzone-names
To define time zone names that do not appear in the above table,
you must modify the Lisp variable @code{math-tzone-names}. This
is a list of lists describing the different time zone names; its
structure is best explained by an example. The three entries for
circa-2022 US Pacific Time look like this:
@smallexample
@group
( ( "PST" 8 0 ) ; Name as an upper-case string, then standard
( "PDT" 8 -1 ) ; adjustment, then daylight saving adjustment.
( "PGT" 8 "PST" "PDT" ) ) ; Generalized time zone.
@end group
@end smallexample
@cindex @code{TimeZone} variable
@vindex TimeZone
With no arguments, @code{calc-time-zone} or @samp{tzone()} will by

View file

@ -1340,20 +1340,9 @@ keyword @code{:session}.
D-Bus object path, @var{service} is registered at. @var{interface} is
an interface offered by @var{service}. It must provide @var{method}.
@var{handler} is a Lisp function, which is called when the corresponding
return message has arrived. It uses the returned values from the
@var{method} call as arguments. These are the same arguments which are
returned when @code{dbus-call-method} is invoked instead,
@pxref{Synchronous Methods}. If @var{handler} is @code{nil}, no return
message will be expected.
@var{handler} can also be the cons cell @code{(@var{handler}
. @var{error-handler})}. In this case, @var{error-handler} will be
called in case an error is returned from D-Bus. It uses the returned
D-Bus error as argument.
Neither the return value of @var{handler} nor the return value of
@var{error-handler} is used.
@var{handler} is a Lisp function, which is called when the
corresponding return message arrives. If @var{handler} is @code{nil},
no return message will be expected.
If the parameter @code{:timeout} is given, the following integer
@var{timeout} specifies the maximum number of milliseconds before a
@ -1377,40 +1366,19 @@ arguments. They are converted into D-Bus types as described in
If @var{handler} is a Lisp function, the function returns a key into
the hash table @code{dbus-registered-objects-table}. The
corresponding entry in the hash table is removed, when the return
message arrives, and @var{handler} is called. Examples:
The return value of @samp{org.freedesktop.portal.Settings.ReadOne} is a variant.
message arrives, and @var{handler} is called. Example:
@lisp
(dbus-call-method-asynchronously
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadOne"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
:system "org.freedesktop.Hal"
"/org/freedesktop/Hal/devices/computer"
"org.freedesktop.Hal.Device" "GetPropertyString"
(lambda (msg) (message "%s" msg))
"system.kernel.machine")
@print{} Method handler (0)
@print{} i686
@result{} (:serial :session 4)
@end lisp
There does not exist a method @samp{org.freedesktop.portal.Settings.ReadTwo}.
@lisp
(dbus-call-method-asynchronously
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadTwo"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
@print{} Error handler
(dbus-error "org.freedesktop.DBus.Error.UnknownMethod
No such method "ReadTwo")
@result{} (:serial :session 5)
@result{} (:serial :system 2)
@end lisp
@end defun

View file

@ -513,7 +513,8 @@ Finally, it's worth noting that, by default, Eglot generally turns on
all features that it @emph{can} turn on. It's possible to opt out of
features via the @code{eglot-ignored-server-capabilities} user option
(@pxref{Customizing Eglot}) and the @code{eglot-managed-mode-hook} hook
that runs after Eglot starts managing a buffer (@pxref{Other Variables}).
that runs after Eglot starts managing a buffer (@pxref{Eglot and
Buffers}).
@node Eglot and Buffers
@section Buffers, Projects, and Eglot
@ -624,14 +625,34 @@ starting an Eglot session for the buffer. When Eglot stops managing the
buffer, the minor mode is turned off, and all the settings that Eglot
changed are restored to their original values.
@vindex eglot-managed-mode-hook
@vindex eglot-managed-p
@item
The minor mode's main job is to ``hook up'' Eglot to other Emacs
functionality, i.e. arrange for these features to receive information
from the language server, by changing special variables controlling
these features. @xref{Eglot Features} and @xref{Other Variables} for
how to exercise finer control over this minor mode's activation.
these features. @xref{Eglot Features}.
@item
To customize this, Eglot's special minor mode provides a hook variable
@code{eglot-managed-mode-hook} specifically to alter Eglot's interaction
with these variables in each buffer. This hook is run both when the
minor mode is turned on and when it's turned off; use the function
@code{eglot-managed-p} to tell if current buffer is still being managed
or not.
@end itemize
For example, to turn off @dfn{inlay hints} and @dfn{semantic tokens} by
default but still retain the ability to turn them on again
interactively use this:
@lisp
(add-hook 'eglot-managed-mode-hook
(lambda ()
(eglot-inlay-hints-mode -1)
(eglot-semantic-tokens-mode -1)))
@end lisp
@node Eglot Commands
@section Eglot Commands
@cindex commands, Eglot
@ -1095,25 +1116,9 @@ A hook run after the LSP connection to the server is successfully
established. Each function receives a @code{eglot-lsp-server} instance
as argument. @xref{Starting Eglot}.
@vindex eglot-managed-mode-hook
@vindex eglot-managed-p
@item eglot-managed-mode-hook
A hook run after Eglot started or stopped managing a buffer.
You may use it to alter Eglot's setting of other Eglot and Emacs
variables in each buffer. This hook is run both when the minor mode is
turned on and when it's turned off; use the function
@code{eglot-managed-p} to tell if current buffer is still being managed
or not. For example, to turn off @dfn{inlay hints} and @dfn{semantic
tokens} by default but still retain the ability to turn them on again
interactively use this:
@lisp
(add-hook 'eglot-managed-mode-hook
(lambda ()
(eglot-inlay-hints-mode -1)
(eglot-semantic-tokens-mode -1)))
@end lisp
@xref{Eglot and Buffers}, for details of its usage.
@vindex eglot-stay-out-of
@item eglot-stay-out-of
@ -1871,17 +1876,9 @@ slowly, try to customize the variable @code{eglot-events-buffer-config}
0. This will disable recording any events and may speed things up.
In other situations, the cause of poor performance lies in the language
server itself. Some servers may have poor implementations of some LSP
features that Eglot turns on by default. Some servers use aggressive
caching and other techniques to improve their performance. Often, this
can be tweaked by changing the server configuration (@pxref{Advanced
server configuration}).
Depending on the specific nature of the performance bottleneck,
sometimes a workaround is to turn off these features on the Eglot side
using the @code{eglot-ignored-server-capabilities} and
@code{eglot-managed-mode-hook} variables (@pxref{Other Variables} and
@pxref{More Customization}).
server itself. Some servers use aggressive caching and other techniques
to improve their performance. Often, this can be tweaked by changing
the server configuration (@pxref{Advanced server configuration}).
Another aspect that may cause performance degradation is the amount of
JSONRPC information exchanged with Emacs. Using an LSP program like

File diff suppressed because it is too large Load diff

View file

@ -336,9 +336,7 @@ failing test.
Each entry consists of the name of the test followed by the code that
performs the transform being tested. The buffer also contains buttons
that allow jumping to the test definitions. If a test fails, the diff
button displays a Diff Mode buffer comparing the actual and expected
output.
that allow jumping to the test definitions.
@xref{erts files} for more information.

View file

@ -650,12 +650,6 @@ passing any @var{arguments} to the script (@pxref{Scripts}). This is
not to be confused with the command @command{source}, which sources a
file in a subshell environment.
@cmindex accumulate
@item accumulate @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this accumulates
all the output from the left side of the pipe and passes it to
@var{function} as a single argument.
@cmindex addpath
@item addpath
@itemx addpath [-b] @var{directory}@dots{}
@ -676,12 +670,6 @@ adding it to the aliases file (@pxref{Aliases}). If @var{command} is
omitted, delete the alias named @var{name}. With no arguments at all,
list all the currently-defined aliases.
@cmindex apply-lines
@item apply-lines @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this passes each
line of output from the left side of the pipe as a list of arguments to
@var{function}.
@cmindex basename
@item basename @var{filename}
Return @var{filename} without its directory.
@ -1187,12 +1175,6 @@ Manual}. Otherwise call the external @command{make} command.
Display Man pages using the Emacs @code{man} command.
@xref{Man Page, , , emacs, The GNU Emacs Manual}.
@cmindex map-lines
@item map-lines @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this calls
@var{function} once for each line of output from the left side of the
pipe with that line as a single argument.
@cmindex mkdir
@item mkdir [-p] @var{directory}@dots{}
Make new directories. With @code{-p} or @code{--parents},
@ -2521,71 +2503,6 @@ olleh
To send both the standard output and standard error of a command to
another command's input, you can use the @code{|&} operator.
@menu
* Lisp Pipelines::
* Running Shell Pipelines Natively::
@end menu
@node Lisp Pipelines
@subsection Lisp Pipelines
In addition to piping data to external programs on your system, Eshell
supports piping to ordinary Lisp functions. This lets you mix and match
external commands and Lisp functions in your pipelines to manipulate
output however works best. Normally in Eshell, entering the bare name
of a function in a command calls that function, so e.g.@: @samp{ding}
will beep or flash the screen. To avoid this, pass the quoted name of
the function:
@example
~ $ echo hello | #'upcase
HELLO
@end example
You can also use forms that return a function, such as @code{lambda}:
@example
~ $ echo hello | (lambda (i) (format ">> %s" i))
>> hello
@end example
For simple cases, the above is likely all you need. When passed
directly as a pipe target like this, Eshell collects all the output from
the left side of the pipe and passes it as a single argument to the
right side. However, Lisp functions have many other ways they could be
called, so Eshell supports these with some higher-order commands:
@table @code
@cmindex accumulate
@item accumulate @var{function}
This is equivalent to passing @var{function} directly as a pipe target,
accumulating all the output from the left side of the pipe and passing
it as a single argument to @var{function}.
@cmindex map-lines
@item map-lines @var{function}
For each line of output from the left side of the pipe, call
@var{function} with that line as a single argument. For example, you
could "quote" some output for pasting into an email like this:
@example
cat some-file.txt | map-lines (lambda (i) (format "> %s" i))
@end example
@cmindex apply-lines
@item apply-lines @var{function}
Pass each line of output from the left side of the pipe as a list of
arguments to @var{function}. For example, to sum up a list of numbers
written one per line:
@example
cat numbers.txt | apply-lines #'+
@end example
@end table
@node Running Shell Pipelines Natively
@subsection Running Shell Pipelines Natively
When constructing shell pipelines that will move a lot of data, it is
a good idea to bypass Eshell's own pipelining support and use the
@ -3099,11 +3016,15 @@ scrolls back.
@item Use a timer instead of @code{sleep-for} when killing child processes
@item Piping to a Lisp function is not supported
Make it so that the Lisp command on the right of the pipe is repeatedly
called with the input strings as arguments. This will require changing
@code{eshell-do-pipelines} to handle non-process targets.
@item Input redirection is not supported
With support for piping to Lisp functions, this should mostly be a
matter of parsing the redirection operator and generating a Lisp form
roughly equivalent to what @code{cat file.txt | some-command} produces.
See the above entry.
@item Problem running @command{less} without arguments on Windows
@ -3301,6 +3222,13 @@ from @samp{!:1*}.
@item Specifying a frame as a redirection target should imply the currently active window's buffer
@item Implement @samp{>@var{func-or-func-list}}
This would allow for an ``output translators'', that take a function to
modify output with, and a target. Devise a syntax that works well with
pipes, and can accommodate multiple functions (i.e., @samp{>'(upcase
regexp-quote)} or @samp{>'upcase}).
@item Allow Eshell to read/write to/from standard input and output
This would be optional, rather than always using the Eshell buffer.

View file

@ -146,9 +146,10 @@ is. Alternatively, place point on the highlighted regions and use the
commands @code{eldoc} or @code{display-local-help}.
Another easy way to get instant access to the diagnostic text is to
set @code{flymake-inline-diagnostics} to a non-@code{nil} value. This
makes the diagnostic messages appear directly in the buffer, in the
vicinity of the affected line (@pxref{Customizable variables})
set @code{flymake-show-diagnostics-at-end-of-line} to a non-@code{nil}
value. This makes the diagnostic messages appear at the end of the
line where the regular annotation is located (@pxref{Customizable
variables})
@cindex next and previous diagnostic
If the diagnostics are outside the visible region of the buffer,
@ -346,39 +347,26 @@ Only relevant if @code{flymake-indicator-type} is set to @code{margins}.
If non-@code{nil}, moving to errors with @code{flymake-goto-next-error} and
@code{flymake-goto-prev-error} wraps around buffer boundaries.
@item flymake-inline-diagnostics
If non-@code{nil}, annotate lines with diagnostics directly in the
buffer. Depending on your preference, this can either be distracting
and easily confused with actual code, or a significant early aid that
relieves you from moving around or reaching for the mouse to consult an
error message. A number of styles can be used: the value @code{eol}
shows all diagnostics at the end of the line, @code{short} shows only
the most severe one, and @code{fancy} lays out the diagnostics below the
affected line using Unicode graphics to point to the diagnostic locus.
The value can also be an alist, which allows you to have the position of
point dictate the style used for nearby annotation of nearby
diagnostics. The alist keys @code{current} and @code{current-line}
designate the style affect the appearance of nearby diagnostics, while a
value keyed by @code{t} is style used for every other diagnostic. For
example, to keep a discreet @code{short} annotation on most lines while
expanding to @code{fancy} only for the diagnostic point in currently on:
@lisp
(setopt flymake-inline-diagnostics '((current . fancy) (t . short)))
@end lisp
@item flymake-show-diagnostics-at-end-of-line
If non-@code{nil}, show summarized descriptions of diagnostics at the
end of the line. Depending on your preference, this can either be
distracting and easily confused with actual code, or a significant early
aid that relieves you from moving around or reaching for the mouse to
consult an error message. This value may also be set to @code{fancy},
which will attempt to layout diagnostics below the affected line using
unicode graphics to point to diagnostic locus.
@item flymake-diagnostic-format-alist
Control which parts of a diagnostic to show in various situations.
@item flymake-error-inline
A custom face for inline diagnostic error messages.
@item flymake-error-eol
A custom face for summarizing diagnostic error messages.
@item flymake-warning-inline
A custom face for inline diagnostic warning messages.
@item flymake-warning-eol
A custom face for summarizing diagnostic warning messages.
@item flymake-note-inline
A custom face for inline diagnostic notes.
@item flymake-note-eol
A custom face for summarizing diagnostic notes.
@end vtable
@node Flymake API, The legacy Proc backend, Using Flymake, Top

View file

@ -18335,12 +18335,12 @@ As a special case, a star in either @code{Dom} or @code{Dow} doesn't
mean ``all possible values'', but ``use only the other field''. Note
that if both are star'ed, the use of either one gives the same result.
@item
The @code{Time-Zone} header is special in that it can have only one
The @code{Time-Zone} header is special in that it can only have one
value (@code{GMT}, for instance). A star doesn't mean ``all possible
values'' (because it makes no sense), but ``the current local time
zone''. Most of the time, you'll be using a star here. However, for a
Universal Time entry, you can use @code{GMT}, @code{UT}, @code{UTC} or
@code{Z}.
list of available time zone values, see the variable
@code{nndiary-headers}.
@end itemize
As a concrete example, here are the diary headers to add to your message

File diff suppressed because it is too large Load diff

View file

@ -14990,7 +14990,7 @@ set it to =toc=:
#+cindex: LaTeX ToC export a la ~org~
#+cindex: @samp{org-latex-toc-include-unnumbered}
If you want the LaTeX exporter to behave like other exporters,
customize the variable ~org-latex-toc-include-unnumbered~ and
customise the variable ~org-latex-toc-include-unnumbered~ and
set it to ~t~:
#+begin_example

View file

@ -9,13 +9,6 @@
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@c compile info with
@c make -C doc/misc ../../info/ses.info
@c or just
@c make -C doc/misc ses
@c compile pdf with
@c make -C doc/misc ses.pdf
@copying
This file documents @acronym{SES}: the Simple Emacs Spreadsheet.

View file

@ -3,9 +3,9 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2026-08-13.21}
\def\texinfoversion{2025-12-23.13}
%
% Copyright 1985, 1986, 1988, 1990-2026 Free Software Foundation, Inc.
% Copyright 1985, 1986, 1988, 1990-2025 Free Software Foundation, Inc.
%
% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
@ -153,9 +153,6 @@
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
% scratch count register
\newcount\countA
% Give the space character the catcode for a space.
\def\spaceisspace{\catcode`\ =10\relax}
@ -351,6 +348,7 @@
% before the \shipout runs.
%
\atdummies % don't expand commands in the output.
\turnoffactive
\shipout\vbox{%
% Do this early so pdf references go to the beginning of the page.
\ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
@ -772,20 +770,18 @@
\def\includezzz#1{%
\pushthisfilestack
\def\thisfile{#1}%
\includecheckspace\thisfile
{%
\makevalueexpandable % we want to expand any @value in FILE.
\turnoffactive % and allow special characters in the expansion
\indexnofonts % Allow `@@' and other weird things in file names.
\wlog{texinfo.tex: doing @include of #1^^J}%
\edef\temp{\noexpand\input \thisfile }%
\edef\temp{\noexpand\input #1 }%
%
% This trickery is to read FILE outside of a group, in case it makes
% definitions, etc.
\expandafter
}\temp
\popthisfilestack
\def\thisfile{#1}% for @thisfile command
}
\def\filenamecatcodes{%
\catcode`\\=\other
@ -801,21 +797,6 @@
\catcode`\'=\other
}
% \includecheckspace\FILENAME - if there is a space in the expansion of
% \FILENAME, wrap the expansion in braces
\def\includecheckspace#1{%
\expandafter\includecheckspacezz\expandafter#1#1 \includecheckspacezz}
\def\includecheckspacezz#1#2 #3\includecheckspacezz{%
\def\tmp{#3}%
\ifx\tmp\empty
% no space in the file name
\else
% there is a space in the file name
\edef#1{{#1}}%
\fi
}
\def\pushthisfilestack{%
\expandafter\pushthisfilestackX\popthisfilestack\StackTerm
}
@ -1000,6 +981,7 @@
\newtoks\toksD
\newbox\boxA
\newbox\boxB
\newcount\countA
\newif\ifpdf
\newif\ifpdfmakepagedest
@ -5339,13 +5321,14 @@
\def\indexisfl{fl}
% Definition for writing index entry sort key.
\def\indexwritesortas{%
{
\catcode`\-=13
\gdef\indexwritesortas{%
\begingroup
\indexnonalnumreappear
\indexwritesortasxxx
}
\def\indexwritesortasxxx#1{%
\xdef\indexsortkey{#1}\endgroup
\indexwritesortasxxx}
\gdef\indexwritesortasxxx#1{%
\xdef\indexsortkey{#1}\endgroup}
}
\def\indexwriteseealso#1{
@ -5376,51 +5359,6 @@
\expandafter\doindexsegment#1\subentry\finish\subentry
}
% \checksortas\segment
% Call \indexwritesortas if a @sortas command appears in the segment
\def\checksortas#1{%
\let\sortas\relax
\expandafter\checksortasx#1\relax\sortas{}\sortas
}
\def\checksortasx#1\sortas#2#3\sortas{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwritesortas{#2}%
\fi
}
% \checkseealso\segment
% Call \indexwriteseealso if a @seealso command appears in the segment
\def\checkseealso#1{%
\let\seealso\relax
\expandafter\checkseealsox#1\relax\seealso{}\seealso
}
\def\checkseealsox#1\seealso#2#3\seealso{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwriteseealso{#2}%
\fi
}
% \checkseeentry\segment
% Call \indexwriteseeentry if a @seeentry command appears in the segment
\def\checkseeentry#1{%
\let\seeentry\relax
\expandafter\checkseeentryx#1\relax\seeentry{}\seeentry
}
\def\checkseeentryx#1\seeentry#2#3\seeentry{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwriteseeentry{#2}%
\fi
}
\def\extractindexcommands#1{%
\checksortas#1%
\checkseealso#1%
\checkseeentry#1%
}
% append the results from the next segment
\def\doindexsegment#1\subentry{%
\def\segment{#1}%
@ -5440,6 +5378,9 @@
% Get the string to sort by. Process the segment with all
% font commands turned off.
\bgroup
\let\sortas\indexwritesortas
\let\seealso\indexwriteseealso
\let\seeentry\indexwriteseeentry
\indexnofonts
% The braces around the commands are recognized by texindex.
\def\lbracechar{{\string\indexlbrace}}%
@ -5453,10 +5394,11 @@
%
\let\indexsortkey\empty
\global\let\pagenumbertext\empty
\extractindexcommands\segment
% Execute the segment and throw away the typeset output. This executes
% any @sortas or @seealso commands in this segment.
\setbox\dummybox = \hbox{\segment}%
\ifx\indexsortkey\empty{%
\indexnonalnumdisappear
\inindexsortkeytrue
\xdef\trimmed{\segment}%
\xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
\xdef\indexsortkey{\trimmed}%
@ -5477,6 +5419,7 @@
\fi
}
\def\isfinish{\finish}%
\newbox\dummybox % used above
\let\subentry\relax
@ -5817,9 +5760,9 @@
% The glue before the bonus allows a little bit of space at the
% bottom of a column to reduce an increase in inter-line spacing.
\nobreak
\vskip 0pt plus 4\baselineskip
\vskip 0pt plus 5\baselineskip
\penalty -300
\vskip 0pt plus -4\baselineskip
\vskip 0pt plus -5\baselineskip
%
% Typeset the initial. Making this add up to a whole number of
% baselineskips increases the chance of the dots lining up from column
@ -7064,7 +7007,6 @@
\newdimen\curchapmax
\newdimen\cursecmax
\newdimen\curssecmax
\newbox\dummybox % used above
% set #1 to the maximum section width for #2
@ -9164,9 +9106,7 @@
% type (Ynumbered, Yappendix, Ynothing). #2 is the section title.
%
\def\donoderef#1#2{%
\ifx\lastnode\empty
\setrefshadow{#1}{#2}%
\else
\ifx\lastnode\empty\else
\setref{\lastnode}{#1}{#2}%
\global\let\lastnode=\empty
\setnodeseenonce
@ -9211,9 +9151,6 @@
%
\def\setref#1#2#3{%
\pdfmkdest{#1}%
\dosetref{#1}{#2}{#3}{xrdef}%
}
\def\dosetref#1#2#3#4{%
\iflinks
{%
\requireauxfile
@ -9221,28 +9158,17 @@
% match definition in \xrdef, \refx, \xrefX.
\def\value##1{##1}%
\edef\writexrdef##1##2{%
\write\auxfile{@#4{#1-% #1 of \setref, expanded by the \edef
\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
##1}{##2}}% these are parameters of \writexrdef
}%
\toks0 = {#3}%
\immediate \writexrdef{title}{\the\toks0 }%
\immediate \writexrdef{snt}{\csname #2\endcsname}%
\safewhatsit{\writexrdef{pg}{\folio}}%
\immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
\safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
}%
\fi
}
% Similar to \setref, but used for targets created by sectioning commands.
% Write information about this target using @xrshad instead of @xrdef.
\def\setrefshadow#1#2{%
% For PDF, output the target with \pdfdest. Note pdfTeX issues a warning
% if we output two targets with the same name.
\pdfmkdest{\pdfshadowprefix#2}%
\dosetref{#2}{#1}{#2}{xrshad}%
}
\def\pdfshadowprefix{XXSHADOW-}
% @xrefautosectiontitle on|off says whether @section(ing) names are used
% automatically in xrefs, if the third arg is not explicitly specified.
% This was provided as a "secret" @set xref-automatic-section-title
@ -9288,17 +9214,7 @@
\def\infofilename{\ignorespaces #4}%
\setbox\infofilenamebox = \hbox{\infofilename\unskip}%
%
\ifdim \wd\printedmanualbox = 0pt
\checkshadowactive{#1}\countA
\expandafter\ifnum\countA = 1
\startxreflink{\pdfshadowprefix#1}{}%
\else
\startxreflink{#1}{}%
\fi
\else
\startxreflink{#1}{#4}%
\fi
%
\startxreflink{#1}{#4}%
\getrefx{#1-title}\Xthisreftitle
%
% Float references are printed completely differently: "Figure 1.2"
@ -9564,62 +9480,31 @@
\fi
}
\def\xrdefctxt{%
% Context for expanding the node or anchor name to remove control sequences.
% \turnoffactive stops 8-bit characters being changed to commands
% like @'e.
\indexnofonts
\turnoffactive
\def\value##1{##1}%
}
% Set #2 to xref string #1
\def\getrefx#1#2{%
\requireauxfile
{%
\xrdefctxt
\indexnofonts
\turnoffactive
\def\value##1{##1}%
\expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname
\ifx#2\relax
% try a shadow definition
\expandafter\global\expandafter\let\expandafter#2\csname SXR#1\endcsname
\ifx#2\empty
\let#2\relax
\fi
\fi
}%
}
% Check if shadow definitions are active for target name #1, setting the
% count register sequence in #2 to 1 if so.
\def\checkshadowactive#1#2{%
\requireauxfile
{%
\xrdefctxt
\expandafter\global\expandafter\let\expandafter\tmp\csname SXR#1-title\endcsname
}%
\ifx\tmp\relax
#2=0 % no definitions made
\else
\ifx\tmp\empty
#2=0 % shadow definitions were disabled
\else
\expandafter\let\expandafter\tmp\csname XR#1-title\endcsname
\ifx\tmp\relax
#2=1 % yes, shadow definitions are active
\else
#2=0 % no, a real definition was made.
\fi
\fi
\fi
}%
% This is the macro invoked by entries in the aux file. Define a control
% sequence for a cross-reference target (we prepend XR to the control sequence
% name to avoid collisions). The value is the page number. If this is a float
% type, we have more work to do.
%
\def\xrdef#1#2{%
{\xrdefctxt \xdef\safexrefname{#1}}%
{% Expand the node or anchor name to remove control sequences.
% \turnoffactive stops 8-bit characters being changed to commands
% like @'e. \refx does the same to retrieve the value in the definition.
\indexnofonts
\turnoffactive
\def\value##1{##1}%
\xdef\safexrefname{#1}%
}%
%
\bgroup
\expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
@ -9651,24 +9536,6 @@
\ignorespaces % ignore ends of line in aux file
}
% Like \xrdef, but used for "shadow" definitions.
\def\xrshad#1#2{%
{\xrdefctxt \xdef\safexrefname{#1}}%
\bgroup
\expandafter\ifx\csname XR\safexrefname\endcsname\relax
\expandafter\ifx\csname SXR\safexrefname\endcsname\relax
% safe to make shadow definition.
\expandafter\gdef\csname SXR\safexrefname\endcsname{#2}%
\else
% earlier shadow definition. disable.
\expandafter\gdef\csname SXR\safexrefname\endcsname{}%
\fi
\else
% blocked by node or anchor definition
\fi
\egroup
}
% If working on a large document in chapters, it is convenient to
% be able to disable indexing, cross-referencing, and contents, for test runs.
% This is done with @novalidate at the beginning of the file.
@ -10065,14 +9932,6 @@
% We can't be used inside a paragraph.
\par
%
% Allow a page break with a ragged page bottom. This could help to reduce
% interparagraph spacing if a large float doesn't fit on the current page.
%
\penalty 0
\vskip 0pt plus 5\baselineskip
\penalty 1000
\vskip 0pt plus -5\baselineskip
%
\vtop\bgroup
\def\floattype{#1}%
\def\floatlabel{#2}%
@ -10372,15 +10231,6 @@
\global\righthyphenmin = #3\relax
}
% @documentlanguagevariant - do nothing
\parseargdef\documentlanguagevariant{}
% @documentscript - do nothing
% This command would only become relevant if we had translations in
% multiple "scripts", e.g. Sebian in both Latin and Cyrillic alphabets.
% However, we do not even support loading Cyrillic fonts.
\parseargdef\documentscript{}
% XeTeX and LuaTeX can handle Unicode natively.
% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
@ -10823,38 +10673,6 @@
\newif\ifutfviiidefinedwarning
\utfviiidefinedwarningtrue
% Macros to output a string to sort a multibyte UTF-8 sequence by.
% Check if there is a special definition to be used in the index
% sort key for a character.
% Output the sequence as-is, surrounded by curly braces. The braces are
% to help texindex find the first character regardless of locale character
% encoding or version of awk used to run texindex.
\gdef\UTFviiiSortkeyTwo#1#2{%
\expandafter\ifx\csname sort:#1#2\endcsname\relax
{\string #1\string #2}%
\else
\csname sort:#1#2\endcsname
\fi
}
\gdef\UTFviiiSortkeyThree#1#2#3{%
\expandafter\ifx\csname sort:#1#2#3\endcsname\relax
{\string #1\string #2\string #3}%
\else
\csname sort:#1#2#3\endcsname
\fi
}
\gdef\UTFviiiSortkeyFour#1#2#3#4{%
\expandafter\ifx\csname sort:#1#2#3#4\endcsname\relax
{\string #1\string #2\string #3\string #4}%
\else
\csname sort:#1#2#3#4\endcsname
\fi
}
% We use this with the \ifindexsortkey condition to expand and discard
% an \else block in the containing conditional.
\def\swapnestedfi#1\fi{\fi\expandafter#1\expandafter}
% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
\begingroup
\catcode`\~13
@ -10873,8 +10691,8 @@
\expandafter\UTFviiiLoop
\fi}
%
% UTF-8 continuation bytes (10XX XXXX) or unused (hex C1, C2).
% Not expected to be expanded except when writing to auxiliary files.
% For bytes other than the first in a UTF-8 sequence. Not expected to
% be expanded except when writing to auxiliary files.
\countUTFx = "80
\countUTFy = "C2
\def\UTFviiiTmp{%
@ -10886,9 +10704,7 @@
\countUTFy = "E0
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyTwo\fi
$%
\ifpassthroughchars $%
\else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
\UTFviiiLoop
@ -10896,9 +10712,7 @@
\countUTFy = "F0
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyThree\fi
$%
\ifpassthroughchars $%
\else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
\UTFviiiLoop
@ -10906,9 +10720,7 @@
\countUTFy = "F4
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyFour\fi
$%
\ifpassthroughchars $%
\else\expandafter\UTFviiiFourOctets\expandafter$\fi
}}%
\UTFviiiLoop
@ -11002,7 +10814,7 @@
\parseXMLCharref
%
% Completely expand \UTFviiiTmp, which looks like:
% 1. \UTFviiiTwoOctetsName B1 B2
% 1. \UTFviiTwoOctetsName B1 B2
% 2. \csname u8:B1 \string B2 \endcsname
% 3. \u8: B1 B2 (a single control sequence token)
\xdef\UTFviiiTmp{\UTFviiiTmp}%
@ -11079,61 +10891,6 @@
\uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
\endgroup
% Used in \DefineSortKey as temporary definitions of \UTFviiiTwoOctetsName etc.
% Use \expandafter\noexpand to prevent excessive expansion if \DefineSortKey is
% called more than once for the same codepoint.
\def\UTFviiiSortTwoOctetsName#1#2{%
\expandafter\noexpand\csname sort:#1\string #2\endcsname}%
\def\UTFviiiSortThreeOctetsName#1#2#3{%
\expandafter\noexpand\csname sort:#1\string #2\string #3\endcsname}%
\def\UTFviiiSortFourOctetsName#1#2#3#4{%
\expandafter\noexpand\csname sort:#1\string #2\string #3\string #4\endcsname}%
% To be used in translation files to provide strings to be output
% in the index sort key where a character occurs.
\def\DefineSortKey#1#2{%
\countUTFz = "#1\relax
\parseXMLCharref
\def\tmp{#2}%
\expandafter\let\csname usort:#1\endcsname\tmp
\bgroup
\let\UTFviiiTwoOctetsName\UTFviiiSortTwoOctetsName
\let\UTFviiiThreeOctetsName\UTFviiiSortThreeOctetsName
\let\UTFviiiFourOctetsName\UTFviiiSortFourOctetsName
%
% Expand \UTFviiiTmp fully, which looks like:
% 1. \UTFviiiTwoOctetsName B1 B2
% 2. \expandafter\noexpand\csname sort:B1 \string B2 \endcsname
% 3. \noexpand\sort: B1 B2
% 4. \sort: B1 B2 (a single control sequence token)
%
\xdef\UTFviiiTmp{\UTFviiiTmp}%
\egroup
\expandafter\gdef\UTFviiiTmp{#2}%
}
% Used in translation files, e.g. in txi-is.tex:
% \DefineSortKey{00DE}{{\string\idxsort{1}{\string\TH{}}}} % Þ
% We provide a definition here in case the sequence shows up in sorted
% index files.
\def\idxsort#1#2{#2}
% this could be used as follows
%\DefineSortKey{00F1}{nzzz} % n tilde - sort between n and o
%\DefineSortKey{00D1}{Nzzz} % N tilde - sort between n and o
% Can be used in place of \DeclareUnicodeCharacter where the value for
% the character is completely expandable when writing to indices:
% Good: \DeclareUnicodeCharacterSK{00C9}{\'E}
% (\' expands to empty string)
% Bad: \DeclareUnicodeCharacterSK{03BB}{\ensuremath\lambda}%
% (\ensuremath expands to junk)
\def\DeclareUnicodeCharacterSK#1#2{%
\DeclareUnicodeCharacter{#1}{#2}%
\DefineSortKey{#1}{#2}%
}
% For native Unicode handling (XeTeX and LuaTeX),
% provide a definition macro that sets a catcode to `other' non-globally
%
@ -11297,73 +11054,73 @@
\DeclareUnicodeCharacter{00BE}{$3\over4$}%
\DeclareUnicodeCharacter{00BF}{\questiondown}%
%
\DeclareUnicodeCharacterSK{00C0}{\`A}%
\DeclareUnicodeCharacterSK{00C1}{\'A}%
\DeclareUnicodeCharacterSK{00C2}{\^A}%
\DeclareUnicodeCharacterSK{00C3}{\~A}%
\DeclareUnicodeCharacterSK{00C4}{\"A}%
\DeclareUnicodeCharacterSK{00C5}{\AA}%
\DeclareUnicodeCharacterSK{00C6}{\AE}%
\DeclareUnicodeCharacterSK{00C7}{\cedilla{C}}%
\DeclareUnicodeCharacterSK{00C8}{\`E}%
\DeclareUnicodeCharacterSK{00C9}{\'E}%
\DeclareUnicodeCharacterSK{00CA}{\^E}%
\DeclareUnicodeCharacterSK{00CB}{\"E}%
\DeclareUnicodeCharacterSK{00CC}{\`I}%
\DeclareUnicodeCharacterSK{00CD}{\'I}%
\DeclareUnicodeCharacterSK{00CE}{\^I}%
\DeclareUnicodeCharacterSK{00CF}{\"I}%
\DeclareUnicodeCharacter{00C0}{\`A}%
\DeclareUnicodeCharacter{00C1}{\'A}%
\DeclareUnicodeCharacter{00C2}{\^A}%
\DeclareUnicodeCharacter{00C3}{\~A}%
\DeclareUnicodeCharacter{00C4}{\"A}%
\DeclareUnicodeCharacter{00C5}{\AA}%
\DeclareUnicodeCharacter{00C6}{\AE}%
\DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
\DeclareUnicodeCharacter{00C8}{\`E}%
\DeclareUnicodeCharacter{00C9}{\'E}%
\DeclareUnicodeCharacter{00CA}{\^E}%
\DeclareUnicodeCharacter{00CB}{\"E}%
\DeclareUnicodeCharacter{00CC}{\`I}%
\DeclareUnicodeCharacter{00CD}{\'I}%
\DeclareUnicodeCharacter{00CE}{\^I}%
\DeclareUnicodeCharacter{00CF}{\"I}%
%
\DeclareUnicodeCharacterSK{00D0}{\DH}%
\DeclareUnicodeCharacterSK{00D1}{\~N}%
\DeclareUnicodeCharacterSK{00D2}{\`O}%
\DeclareUnicodeCharacterSK{00D3}{\'O}%
\DeclareUnicodeCharacterSK{00D4}{\^O}%
\DeclareUnicodeCharacterSK{00D5}{\~O}%
\DeclareUnicodeCharacterSK{00D6}{\"O}%
\DeclareUnicodeCharacter{00D0}{\DH}%
\DeclareUnicodeCharacter{00D1}{\~N}%
\DeclareUnicodeCharacter{00D2}{\`O}%
\DeclareUnicodeCharacter{00D3}{\'O}%
\DeclareUnicodeCharacter{00D4}{\^O}%
\DeclareUnicodeCharacter{00D5}{\~O}%
\DeclareUnicodeCharacter{00D6}{\"O}%
\DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
\DeclareUnicodeCharacterSK{00D8}{\O}%
\DeclareUnicodeCharacterSK{00D9}{\`U}%
\DeclareUnicodeCharacterSK{00DA}{\'U}%
\DeclareUnicodeCharacterSK{00DB}{\^U}%
\DeclareUnicodeCharacterSK{00DC}{\"U}%
\DeclareUnicodeCharacterSK{00DD}{\'Y}%
\DeclareUnicodeCharacter{00D8}{\O}%
\DeclareUnicodeCharacter{00D9}{\`U}%
\DeclareUnicodeCharacter{00DA}{\'U}%
\DeclareUnicodeCharacter{00DB}{\^U}%
\DeclareUnicodeCharacter{00DC}{\"U}%
\DeclareUnicodeCharacter{00DD}{\'Y}%
\DeclareUnicodeCharacter{00DE}{\TH}%
\DeclareUnicodeCharacterSK{00DF}{\ss}%
\DeclareUnicodeCharacter{00DF}{\ss}%
%
\DeclareUnicodeCharacterSK{00E0}{\`a}%
\DeclareUnicodeCharacterSK{00E1}{\'a}%
\DeclareUnicodeCharacterSK{00E2}{\^a}%
\DeclareUnicodeCharacterSK{00E3}{\~a}%
\DeclareUnicodeCharacterSK{00E4}{\"a}%
\DeclareUnicodeCharacterSK{00E5}{\aa}%
\DeclareUnicodeCharacterSK{00E6}{\ae}%
\DeclareUnicodeCharacterSK{00E7}{\cedilla{c}}%
\DeclareUnicodeCharacterSK{00E8}{\`e}%
\DeclareUnicodeCharacterSK{00E9}{\'e}%
\DeclareUnicodeCharacterSK{00EA}{\^e}%
\DeclareUnicodeCharacterSK{00EB}{\"e}%
\DeclareUnicodeCharacterSK{00EC}{\`{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00ED}{\'{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00EE}{\^{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00EF}{\"{\dotless{i}}}%
\DeclareUnicodeCharacter{00E0}{\`a}%
\DeclareUnicodeCharacter{00E1}{\'a}%
\DeclareUnicodeCharacter{00E2}{\^a}%
\DeclareUnicodeCharacter{00E3}{\~a}%
\DeclareUnicodeCharacter{00E4}{\"a}%
\DeclareUnicodeCharacter{00E5}{\aa}%
\DeclareUnicodeCharacter{00E6}{\ae}%
\DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
\DeclareUnicodeCharacter{00E8}{\`e}%
\DeclareUnicodeCharacter{00E9}{\'e}%
\DeclareUnicodeCharacter{00EA}{\^e}%
\DeclareUnicodeCharacter{00EB}{\"e}%
\DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
\DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
\DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
\DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
%
\DeclareUnicodeCharacterSK{00F0}{\dh}%
\DeclareUnicodeCharacterSK{00F1}{\~n}%
\DeclareUnicodeCharacterSK{00F2}{\`o}%
\DeclareUnicodeCharacterSK{00F3}{\'o}%
\DeclareUnicodeCharacterSK{00F4}{\^o}%
\DeclareUnicodeCharacterSK{00F5}{\~o}%
\DeclareUnicodeCharacterSK{00F6}{\"o}%
\DeclareUnicodeCharacter{00F0}{\dh}%
\DeclareUnicodeCharacter{00F1}{\~n}%
\DeclareUnicodeCharacter{00F2}{\`o}%
\DeclareUnicodeCharacter{00F3}{\'o}%
\DeclareUnicodeCharacter{00F4}{\^o}%
\DeclareUnicodeCharacter{00F5}{\~o}%
\DeclareUnicodeCharacter{00F6}{\"o}%
\DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
\DeclareUnicodeCharacterSK{00F8}{\o}%
\DeclareUnicodeCharacterSK{00F9}{\`u}%
\DeclareUnicodeCharacterSK{00FA}{\'u}%
\DeclareUnicodeCharacterSK{00FB}{\^u}%
\DeclareUnicodeCharacterSK{00FC}{\"u}%
\DeclareUnicodeCharacterSK{00FD}{\'y}%
\DeclareUnicodeCharacter{00F8}{\o}%
\DeclareUnicodeCharacter{00F9}{\`u}%
\DeclareUnicodeCharacter{00FA}{\'u}%
\DeclareUnicodeCharacter{00FB}{\^u}%
\DeclareUnicodeCharacter{00FC}{\"u}%
\DeclareUnicodeCharacter{00FD}{\'y}%
\DeclareUnicodeCharacter{00FE}{\th}%
\DeclareUnicodeCharacterSK{00FF}{\"y}%
\DeclareUnicodeCharacter{00FF}{\"y}%
%
\DeclareUnicodeCharacter{0100}{\=A}%
\DeclareUnicodeCharacter{0101}{\=a}%
@ -11962,9 +11719,6 @@
\newif\ifpassthroughchars
\passthroughcharsfalse
\newif\ifinindexsortkey
\inindexsortkeyfalse
% For native Unicode handling (XeTeX and LuaTeX),
% provide a definition macro to replace/pass-through a Unicode character
%
@ -11976,15 +11730,7 @@
\uccode`\~="##2\relax
\uppercase{\gdef~}{%
\ifpassthroughchars
\ifinindexsortkey
\expandafter\ifx\csname usort:#1\endcsname\relax
{##1}%
\else
\csname usort:#1\endcsname
\fi
\else
##1%
\fi
##1%
\else
##3%
\fi

View file

@ -1833,7 +1833,7 @@ and the target host matching @var{user}@@@var{host}. @var{host} and
@var{user} are regular expressions or @code{nil}, interpreted as a
regular expression which always matches.
@var{proxy} is a literal @value{tramp} file name whose localname part
@var{proxy} is a literal @value{tramp} file name whose local name part
is ignored, and the method and user name parts are optional.
The method must be an inline method (@pxref{Inline methods}). If
@ -3380,23 +3380,13 @@ of the secretfile is now owned by the user logged in from
When @code{backup-directory-alist} is @code{nil} (the default), such
problems do not occur.
@vindex make-backup-files
In case you do not want to use backup files for remote files, use
connection-local variable @code{make-backup-files}
@ifinfo
(@pxref{Connection Variables, , , emacs})
@end ifinfo
like this:
To ``turn off'' the backup feature for remote files and stop
@value{tramp} from saving to the backup directory, use this:
@lisp
@group
(connection-local-set-profile-variables
'no-remote-backup-files '((make-backup-files . nil)))
@end group
@group
(connection-local-set-profiles
'(:application tramp) 'no-remote-backup-files)
(add-to-list 'backup-directory-alist
(cons tramp-file-name-regexp nil))
@end group
@end lisp
@ -3406,13 +3396,13 @@ Disabling backups can be targeted to just the @option{su} and
@lisp
@group
(connection-local-set-profiles
'(:application tramp :protocol "su") 'no-remote-backup-files)
@end group
@group
(connection-local-set-profiles
'(:application tramp :protocol "sudo") 'no-remote-backup-files)
(setq backup-enable-predicate
(lambda (name)
(and (normal-backup-enable-predicate name)
(not
(let ((method (file-remote-p name 'method)))
(when (stringp method)
(member method '("su" "sudo"))))))))
@end group
@end lisp
@ -3699,9 +3689,7 @@ brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
By default, @value{tramp} will use the current local user name as the
remote user name for log in to the remote host. Specifying a
different name using the proper syntax will override this default
behavior: @file{@trampfn{method,user@@host,path/to/file}}. The user
name can also be taken from an environment variable, like
@file{@trampfn{method,@env{$MY_REMOTE_USER}@@host,path/to/file}}.
behavior: @file{@trampfn{method,user@@host,path/to/file}}.
@file{@trampfn{ssh,daniel@@melancholia,.emacs}} is for file
@file{.emacs} in @samp{daniel}'s home directory on the host,
@ -3712,7 +3700,7 @@ name. For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
If the host is an IPv6 address, the port is appended like this:
@file{@trampfn{ssh,@value{ipv6prefix}::1@value{ipv6postfix}#42,.emacs}}.
All method, user name, host name, port number and localname parts are
All method, user name, host name, port number and local name parts are
optional, @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
@ifset unified
For syntactical reasons, the default method must be indicated by the
@ -4103,24 +4091,6 @@ configured to expand a home directory via a connection property,
When your remote file name does not contain a @samp{user} part, the
connection property @t{"~"} must be used instead.
In case there is no remote home directory and you haven't specified a
respective connection property, you should avoid using @file{~} in
file names. This means for example
@itemize
@item
Don't use a remote file name like @file{@trampfn{ssh,user@@host,}} or
@file{@trampfn{ssh,user@@host,~/}}. Use an absolute localname part
instead, like @file{@trampfn{ssh,user@@host,/path/to/file}}.
@item
Disable @code{tramp-histfile-override}, @ref{Managing remote shell history}:
@lisp
(setopt tramp-histfile-override nil)
@end lisp
@end itemize
@node Remote processes
@section Integration with other Emacs packages

View file

@ -7,7 +7,7 @@
@c In the Tramp GIT, the version number and the bug report address
@c are auto-frobbed from configure.ac.
@set trampver 2.8.3-pre
@set trampver 2.8.2.31.1
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 28.1

View file

@ -25,13 +25,13 @@ General Public License for more details.
@dircategory Emacs misc features
@direntry
* Transient: (transient). Transient Commands.
* Transient: (transient). Transient Commands.
@end direntry
@finalout
@titlepage
@title Transient User and Developer Manual
@subtitle for version 0.13.8
@subtitle for version 0.13.3
@author Jonas Bernoulli
@page
@vskip 0pt plus 1filll
@ -53,7 +53,7 @@ resource to get over that hurdle is Psionic K's interactive tutorial,
available at @uref{https://github.com/positron-solutions/transient-showcase}.
@noindent
This manual is for Transient version 0.13.8.
This manual is for Transient version 0.13.3.
@insertcopying
@end ifnottex
@ -385,7 +385,7 @@ than outlined above and even customizable.}
If the user does not save the value and just exits using a regular
suffix command, then the value is merely saved to the transient's
history. That value won't be used when the transient is next invoked,
but it is easily accessible (@pxref{Using History}).
but it is easily accessible (see @ref{Using History}).
Option @code{transient-common-command-prefix} controls the prefix key used
in the following bindings. For simplicity's sake the default, @kbd{C-x},
@ -454,8 +454,8 @@ previously used values. Usually the same keys as those mentioned
above are bound to those commands.
Authors of transients should arrange for different infix commands that
read the same kind of value to also use the same history key
(@pxref{Suffix Slots}).
read the same kind of value to also use the same history key (see
@ref{Suffix Slots}).
Both kinds of history are saved to a file when Emacs is exited.
@ -795,7 +795,7 @@ menu buffer. The menu buffer is displayed in a window using
The value of this option has the form @code{(@var{FUNCTION} . @var{ALIST})},
where @var{FUNCTION} is a function or a list of functions. Each such
function should accept two arguments: a buffer to display and an
alist of the same form as @var{ALIST}. @xref{Choosing Window,,,elisp,},
alist of the same form as @var{ALIST}. See @ref{Choosing Window,,,elisp,},
for details.
The default is:
@ -862,7 +862,7 @@ text at point, to be run when a transient menu is active, for example:
@end lisp
@defopt transient-enable-menu-navigation
This option is documented in the previous node (@pxref{Essential Options}). You might want to change the value from @code{verbose} to
This option is documented in the previous node (@ref{Essential Options}). You might want to change the value from @code{verbose} to
@code{force-verbose}, which causes information to be shown in the echo
area, even if it is identical to information already displayed in
the menu buffer. Whether that is useful to you depends on whether
@ -1007,7 +1007,7 @@ used to draw the line.
This user option may be overridden if @code{:mode-line-format} is passed
when creating a new prefix with @code{transient-define-prefix}.
Otherwise this can be any mode-line format. @xref{Mode Line Format,,,elisp,}, for details.
Otherwise this can be any mode-line format. See @ref{Mode Line Format,,,elisp,}, for details.
@end defopt
@defopt transient-semantic-coloring
@ -1175,10 +1175,10 @@ which can be included in multiple prefixes. See TODO@.
as expected by @code{transient-define-prefix}. Note that an infix is a
special kind of suffix. Depending on context ``suffixes'' means
``suffixes (including infixes)'' or ``non-infix suffixes''. Here it
means the former. @xref{Suffix Specifications}.
means the former. See @ref{Suffix Specifications}.
@var{SUFFIX} may also be a group in the same form as expected by
@code{transient-define-prefix}. @xref{Group Specifications}.
@code{transient-define-prefix}. See @ref{Group Specifications}.
@item
@var{LOC} is a key description (a string as returned by @code{key-description}
@ -1351,14 +1351,14 @@ enabled. One benefit of the Transient interface is that it remembers
history not only on a global level (``this command was invoked using
these arguments, and previously it was invoked using those other
arguments''), but also remembers the values of individual arguments
independently. @xref{Using History}.
independently. See @ref{Using History}.
After a transient prefix command is invoked, @kbd{C-h @var{KEY}} can be used to
show the documentation for the infix or suffix command that @kbd{@var{KEY}} is
bound to (@pxref{Getting Help for Suffix Commands}), and infixes and
bound to (see @ref{Getting Help for Suffix Commands}), and infixes and
suffixes can be removed from the transient using @kbd{C-x l @var{KEY}}. Infixes
and suffixes that are disabled by default can be enabled the same way.
@xref{Enabling and Disabling Suffixes}.
See @ref{Enabling and Disabling Suffixes}.
Transient ships with support for a few different types of specialized
infix commands. A command that sets a command line option, for example,
@ -1409,7 +1409,7 @@ explicitly.
@var{GROUP}s add key bindings for infix and suffix commands and specify
how these bindings are presented in the menu buffer. At least one
@var{GROUP} has to be specified. @xref{Binding Suffix and Infix Commands}.
@var{GROUP} has to be specified. See @ref{Binding Suffix and Infix Commands}.
The @var{BODY} is optional. If it is omitted, then @var{ARGLIST} is ignored and
the function definition becomes:
@ -1460,11 +1460,11 @@ GROUPs have the same form as for @code{transient-define-prefix}.
@section Binding Suffix and Infix Commands
The macro @code{transient-define-prefix} is used to define a transient.
This defines the actual transient prefix command (@pxref{Defining Transients}) and adds the transient's infix and suffix bindings, as
This defines the actual transient prefix command (see @ref{Defining Transients}) and adds the transient's infix and suffix bindings, as
described below.
Users and third-party packages can add additional bindings using
functions such as @code{transient-insert-suffix} (@pxref{Modifying Existing Transients}). These functions take a ``suffix specification'' as one of
functions such as @code{transient-insert-suffix} (see @ref{Modifying Existing Transients}). These functions take a ``suffix specification'' as one of
their arguments, which has the same form as the specifications used in
@code{transient-define-prefix}.
@ -1490,10 +1490,10 @@ brackets to do the latter.
Group specifications then have this form:
@lisp
[@{@var{LEVEL}@} @{@var{DESCRIPTION}@} @{@var{KEYWORD} @var{VALUE}@}... @var{ELEMENT}...]
[@{LEVEL@} @{DESCRIPTION@} @{KEYWORD VALUE@}... ELEMENT...]
@end lisp
The @var{LEVEL} is optional and defaults to 4. @xref{Enabling and Disabling Suffixes}.
The @var{LEVEL} is optional and defaults to 4. See @ref{Enabling and Disabling Suffixes}.
The @var{DESCRIPTION} is optional. If present, it is used as the heading of
the group.
@ -1567,8 +1567,6 @@ is used and a warning is displayed. This warning will eventually
be replaced with an error.
@lisp
;; -*- lexical-binding:t -*-
;; Before evaluating this example, make sure `lexical-binding' is t.
(transient-define-prefix my-finder-by-keyword ()
"Select a keyword and list matching packages."
;; The real `finder-by-keyword' is more convenient
@ -1646,7 +1644,7 @@ suffixes''. Here it means the former.
Suffix specifications have this form:
@lisp
([@var{LEVEL}] [@var{KEY} [@var{DESCRIPTION}]] @var{COMMAND}|@var{ARGUMENT} [@var{KEYWORD} @var{VALUE}]...)
([LEVEL] [KEY [DESCRIPTION]] COMMAND|ARGUMENT [KEYWORD VALUE]...)
@end lisp
@var{LEVEL}, @var{KEY} and @var{DESCRIPTION} can also be specified using the @var{KEYWORD}s
@ -1657,8 +1655,8 @@ the object's values just for the binding inside this transient.
@itemize
@item
@var{LEVEL} is the suffix level, an integer between 1 and 7.
@xref{Enabling and Disabling Suffixes}.
@var{LEVEL} is the suffix level, an integer between 1 and 7. See
@ref{Enabling and Disabling Suffixes}.
@item
KEY is the key binding, a string in the format returned by
@ -1732,7 +1730,7 @@ guessed based on the long argument. If the argument ends with @samp{=}
Finally, details can be specified using optional @var{KEYWORD}-@var{VALUE} pairs.
Each keyword has to be a keyword symbol, either @code{:class} or a keyword
argument supported by the constructor of that class. @xref{Suffix Slots}.
argument supported by the constructor of that class. See @ref{Suffix Slots}.
If a keyword argument accepts a function as value, you an use a @code{lambda}
expression. As a special case, the @code{##} macro (which returns a @code{lambda}
@ -2082,8 +2080,8 @@ means that all outer prefixes are exited at once.
@item
The behavior for non-suffixes can be set for a particular prefix,
by the prefix's @code{transient-non-suffix} slot to a boolean, a suitable
pre-command function, or a shorthand for such a function.
@xref{Pre-commands for Non-Suffixes}.
pre-command function, or a shorthand for such a function. See
@ref{Pre-commands for Non-Suffixes}.
@item
The common behavior for the suffixes of a particular prefix can be
@ -2408,7 +2406,7 @@ Transient itself provides a single class for prefix commands,
@code{transient-prefix}, but package authors may wish to define specialized
classes. Doing so makes it possible to change the behavior of the set
of prefix commands that use that class, by implementing specialized
methods for certain generic functions (@pxref{Prefix Methods}).
methods for certain generic functions (see @ref{Prefix Methods}).
A transient prefix command's object is stored in the @code{transient--prefix}
property of the command symbol. While a transient is active, a clone
@ -2423,7 +2421,7 @@ object should not affect later invocations.
@item
All suffix and infix classes derive from @code{transient-suffix}, which in
turn derives from @code{transient-child}, from which @code{transient-group} also
derives (@pxref{Group Classes}).
derives (see @ref{Group Classes}).
@item
All infix classes derive from the abstract @code{transient-infix} class,
@ -2431,13 +2429,13 @@ which in turn derives from the @code{transient-suffix} class.
Infixes are a special type of suffixes. The primary difference is
that infixes always use the @code{transient--do-stay} pre-command, while
non-infix suffixes use a variety of pre-commands (@pxref{Transient State}). Doing that is most easily achieved by using this class,
non-infix suffixes use a variety of pre-commands (see @ref{Transient State}). Doing that is most easily achieved by using this class,
though theoretically it would be possible to define an infix class
that does not do so. If you do that then you get to implement many
methods.
Also, infixes and non-infix suffixes are usually defined using
different macros (@pxref{Defining Suffix and Infix Commands}).
different macros (see @ref{Defining Suffix and Infix Commands}).
@item
Classes used for infix commands that represent arguments should
@ -2847,7 +2845,7 @@ secondary value, called a ``scope''. See @code{transient-define-prefix}.
@code{transient-suffix}, @code{transient-non-suffix} and @code{transient-switch-frame}
play a part when determining whether the currently active transient
prefix command remains active/transient when a suffix or arbitrary
non-suffix command is invoked. @xref{Transient State}.
non-suffix command is invoked. See @ref{Transient State}.
@item
@code{refresh-suffixes} Normally suffix objects and keymaps are only setup
@ -2935,7 +2933,7 @@ of the same symbol.
@item
@code{level} The level of the prefix commands. The suffix commands whose
layer is equal or lower are displayed. @xref{Enabling and Disabling Suffixes}.
layer is equal or lower are displayed. See @ref{Enabling and Disabling Suffixes}.
@item
@code{value} The likely outdated value of the prefix. Instead of accessing
@ -2959,15 +2957,15 @@ Here we document most of the slots that are only available for suffix
objects. Some slots are shared by suffix and group objects, they are
documented in @ref{Predicate Slots}.
See also @ref{Suffix Classes}.
Also see @ref{Suffix Classes}.
@anchor{Slots of @code{transient-child}}
@subheading Slots of @code{transient-child}
This is the abstract superclass of @code{transient-suffix} and
@code{transient-group}. In addition to the slots listed below, this class
is also where the @code{if*} and @code{inapt-if*} slots (@pxref{Predicate Slots}) and
the @code{level} slot (@pxref{Enabling and Disabling Suffixes}) are defined.
is also where the @code{if*} and @code{inapt-if*} slots (see @ref{Predicate Slots}) and
the @code{level} slot (see @ref{Enabling and Disabling Suffixes}) are defined.
@itemize
@item
@ -3020,7 +3018,7 @@ which is useful for alignment purposes.
@code{command} The command, a symbol.
@item
@code{transient} Whether to stay transient. @xref{Transient State}.
@code{transient} Whether to stay transient. See @ref{Transient State}.
@item
@code{format} The format used to display the suffix in the menu buffer.
@ -3081,15 +3079,6 @@ They are defined here anyway to allow sharing certain methods.
@item
@code{shortarg} The short argument, e.g., @code{-v}.
@item
@code{claim-argument} Whether to claim matched arguments exclusively, i.e.,
whether to prevent other "overlapping" infixes from also matching.
For example, consider the suffix arguments @code{--push-option=known=<val>}
and @code{--push-option=<arbitrary>}. Unless the former claims any matched
value exclusively (and appears before the latter in the menu), the
latter also matches, which would lead to undesirable behavior.
@item
@code{value} The value. Should not be accessed directly.
@ -3242,14 +3231,14 @@ currently cannot be invoked.
By default these predicates run when the prefix command is invoked,
but this can be changes, using the @code{refresh-suffixes} prefix slot.
@xref{Prefix Slots}.
See @ref{Prefix Slots}.
One more slot is shared between group and suffix classes, @code{level}. Like
the slots documented above, it is a predicate, but it is used for a
different purpose. The value has to be an integer between 1
and 7. @code{level} controls whether a suffix or a group should be
available depending on user preference.
@xref{Enabling and Disabling Suffixes}.
See @ref{Enabling and Disabling Suffixes}.
@node FAQ
@appendix FAQ

View file

@ -127,21 +127,20 @@ standard-compliant URI parser, as well as function
@code{url-recreate-url}, which converts a parsed URI back into a URI
string.
@defun url-generic-parse-url url
This function returns a parsed version of the string @var{url}.
@defun url-generic-parse-url uri-string
This function returns a parsed version of the string @var{uri-string}.
@end defun
@defun url-recreate-url urlobj
@defun url-recreate-url uri-obj
@cindex unparsing URLs
Given a parsed URI in @var{urlobj}, this function returns the
corresponding URI string.
Given a parsed URI, this function returns the corresponding URI string.
@end defun
@cindex parsed URI
The return value of @code{url-generic-parse-url}, and the argument
expected by @code{url-recreate-url}, is a @dfn{parsed URI}: a CL
structure whose slots hold the various components of the URI@.
@xref{Structures,the CL Manual,,cl,GNU Emacs Common Lisp Emulation}, for
@xref{Top,the CL Manual,,cl,GNU Emacs Common Lisp Emulation}, for
details about CL structures. Most of the other functions in the
@code{url} library act on parsed URIs.
@ -241,15 +240,15 @@ appear in URI components.)
string containing arbitrary characters to one that is properly
percent-encoded in accordance with RFC 3986.
@cindex URI normalization
@defun url-encode-url url
@defun url-encode-url url-string
This function return a properly URI-encoded version of
@var{url}. It also performs @dfn{URI normalization},
@var{url-string}. It also performs @dfn{URI normalization},
e.g., converting the scheme component to lowercase if it was
previously uppercase.
@end defun
@cindex percent-encoding of URL
@findex url-hexify-string
@findex url-unhex-string
To convert between a string containing arbitrary characters and a
percent-encoded all-@acronym{ASCII} string, use the functions
@code{url-hexify-string} and @code{url-unhex-string}:
@ -273,8 +272,8 @@ be either a list of allowed chars, or a vector whose Nth element is
non-@code{nil} if character N is allowed.
@end defun
@defun url-unhex-string str &optional allow-newlines
This function replaces percent-encoding sequences in @var{str} with
@defun url-unhex-string string &optional allow-newlines
This function replaces percent-encoding sequences in @var{string} with
their character equivalents, and returns the resulting string.
If @var{allow-newlines} is non-@code{nil}, it allows the decoding of
@ -295,20 +294,20 @@ string or a parsed URL structure. If it is a string, that string is
passed through @code{url-encode-url} before using it, to ensure that
it is properly URI-encoded (@pxref{URI Encoding}).
@defun url-retrieve-synchronously url &optional silent inhibit-cookies timeout
@defun url-retrieve-synchronously url &optional silent no-cookies timeout
This function synchronously retrieves the data specified by @var{url},
and returns a buffer containing the data. The return value is
@code{nil} if there is no data associated with the URL (as is the case
for @code{dired}, @code{info}, and @code{mailto} URLs).
If the optional argument @var{silent} is non-@code{nil}, progress
messages are suppressed. If the optional argument @var{inhibit-cookies} is
messages are suppressed. If the optional argument @var{no-cookies} is
non-@code{nil}, cookies are not stored or sent. If the optional
argument @var{timeout} is non-@code{nil}, it should be a number that
says (in seconds) how long to wait for a response before giving up.
@end defun
@defun url-retrieve url callback &optional cbargs silent inhibit-cookies
@defun url-retrieve url callback &optional cbargs silent no-cookies
This function retrieves @var{url} asynchronously, calling the function
@var{callback} when the object has been completely retrieved. The
return value is the buffer into which the data will be inserted, or
@ -337,7 +336,7 @@ signaled with @code{(signal @var{error-symbol} @var{data})}.
@cindex status of GnuTLS connection, as provided by @code{url-retrieve}
@findex gnutls-peer-status-warning-describe
@findex gnutls-peer-status
@item (:peer @var{gnutls-information})
@item (:peer @var{gnutls-information})
This means that GnuTLS was used for a TLS connection to the peer. The
@var{gnutls-information} has the following form:
@ -363,11 +362,11 @@ containing the retrieved data (if any). The buffer also contains any
MIME headers associated with the data retrieval.
If the optional argument @var{silent} is non-@code{nil}, progress
messages are suppressed. If the optional argument @var{inhibit-cookies} is
messages are suppressed. If the optional argument @var{no-cookies} is
non-@code{nil}, cookies are not stored or sent.
@end defun
@defun url-queue-retrieve url callback &optional cbargs silent inhibit-cookies
@defun url-queue-retrieve url callback &optional cbargs silent no-cookies
This function acts like @code{url-retrieve}, but with limits on the
number of concurrently-running network processes. The option
@code{url-queue-parallel-processes} controls the number of concurrent
@ -377,6 +376,7 @@ seconds.
To use this function, you must @code{(require 'url-queue)}.
@end defun
@vindex url-queue-parallel-processes
@defopt url-queue-parallel-processes
The value of this option is an integer specifying the maximum number
of concurrent @code{url-queue-retrieve} network processes. If the
@ -451,11 +451,10 @@ cookies, if there are any. You can remove a cookie using the
@kbd{C-k} (@code{url-cookie-delete}) command.
@end defun
@defun url-cookie-delete-cookies &optional regexp keep
@defun url-cookie-delete-cookies &optional regexp
This function takes a regular expression as its parameters and deletes
all cookies from that domain. If @var{regexp} is @code{nil}, delete
all cookies. If @var{keep} is non-@code{nil}, instead delete all cookies
that do not match @var{regexp}.
all cookies.
@end defun
@defopt url-cookie-file
@ -534,7 +533,7 @@ HTTP supports an @samp{OPTIONS} method describing things supported by
the URL@.
@defun url-http-options url
Returns a property list describing options available for @var{url}. The
Returns a property list describing options available for URL@. The
property list members are:
@table @code
@ -936,13 +935,10 @@ more likely to conflict with other files.
@end smallexample
@end defun
@defun url-cache-expired url &optional expire-time
This function returns non-@code{nil} if a cache entry for @var{url} has
expired (or is absent). The expiration time is given by the option
@code{url-cache-expire-time}, but if the optional argument
@var{expire-time} is non-@code{nil}, its value overrides that option.
However, if the value of the @code{url-standalone-mode} option is
non-@code{nil}, cached URLs never expire.
@defun url-cache-expired
This function returns non-@code{nil} if a cache entry has expired (or is absent).
The arguments are a URL and optional expiration delay in seconds
(default @var{url-cache-expire-time}).
@end defun
@defopt url-cache-expire-time
@ -950,7 +946,7 @@ This variable is the default number of seconds to use for the
expire-time argument of the function @code{url-cache-expired}.
@end defopt
@defun url-fetch-from-cache url
@defun url-fetch-from-cache
This function takes a URL as its argument and returns a buffer
containing the data cached for that URL.
@end defun
@ -1041,14 +1037,12 @@ others.@footnote{Proxies (which only operate over HTTP) are
implemented using this.} The library's basic function responsible for
making connections is @code{url-open-stream}.
@defun url-open-stream name buffer host service
@cindex opening a stream
@cindex stream, opening
@defun url-open-stream name buffer host service &optional gateway-method
Open a stream to @var{host}, possibly via a gateway. The other
arguments are as for @code{open-network-stream}. This will not make a
connection if @code{url-gateway-unplugged} is non-@code{nil}. Optional
argument @var{gateway-method} specifies the gateway to be used, and
defaults to the value of @code{url-gateway-method}, described below.
connection if @code{url-gateway-unplugged} is non-@code{nil}.
@end defun
@defvar url-gateway-local-host-regexp

View file

@ -1,79 +1,3 @@
* Translated Emacs manuals
** Translations available
Translations for language DOCLANG can be found under directory
doc/translations/DOCLANG. DOCLANG is for instance fr for French.
** Compiling all manual translations
Manual Texinfo sources are grouped into four subdirectories DIR with DIR
in { lispref, lispintro, emacs, misc}, and can be compiled to five
output formats FORMAT with FORMAT in { dvi, html, info, pdf, ps}. Texinfo
source code is under doc/DIR for the default language, and under
doc/translations/DOCLANG/DIR for language DOCLANG, for instance replace
DOCLANG by fr for French.
You can build all the manuals including their translations for any
combination of DIR and FORMAT by making the target DIR-FORMAT with the
top level Makefile. For instance:
make misc-info
to make all manuals from the misc subdirectory into the info format and
for all the language listed in the DOCLANGS list resulting from the
./configure step or superseded by setting DOCLANGS in the
environment. Outputs are made into the info directory for info format
and into the doc/DIR subdirectory for other formats (the output is in
doc/DIR, not doc/translations/DOCLANG/DIR, even when the DOCLANG is not
default).
You can select only some translations by means of the DOCLANGS
environment variable. DOCLANGS is otherwise set by the ./configure step
to all language supported by the Texinfo compiler and for which at least
one manual translation is available. DOCLANGS is a space separated list
of languages. ./configure --help for values supported. For instance:
make misc-info DOCLANGS=fr
to make all manuals from the misc subdirectory into the info format and
for language French only.
Note that the Emacs manual, the Emacs Lisp Reference manual and the
Introduction to Emacs Lisp Programming are always built in the default
language, whatever DOCLANGS says: the first two are referenced from doc
strings, and all three are expected to be part of any Emacs build.
Their translations, if any, are selected by DOCLANGS as usual.
Alternatively, you can use:
make -C doc/DIR FORMAT
to build manuals from DIR subdirectory, output format FORMAT and for the
default language only.
Use:
make -C doc/DIR FORMAT DOCLANG=fr
to build manuals from DIR subdirectory and output format FORMAT for the
French language only (replace fr by any language supported for DOCLANGS
as listed in ./configure --help).
** Compiling one manual translation
For the info output, and, say, SES manual in French:
make -C doc/misc ses DOCLANG=fr
ses-fr.info will go into the info directory.
For the pdf output:
make -C doc/misc ses-fr.pdf DOCLANG=fr
ses-fr.pdf will go into the doc/misc directory.
* Translating the Emacs manuals
** Copyright assignment
@ -145,7 +69,7 @@ few rules to follow:
- Most Emacs manuals are set to include the docstyle.Texi file. This
file adds the "@documentencoding UTF-8" directive to the targeted
manual. There is no need to add this directive in a manual that
manual. There is no need to add this directive in a manual that
includes docstyle.texi.
- Add a @documentlanguage directive that includes your language.
@ -172,7 +96,7 @@ See the 'Bugs' section in the Emacs manual.
** Sending your contributions
Send your contributions (files or revisions) for review to the Emacs
development list at emacs-devel@gnu.org. Subscribing to the list is not
development list at emacs-devel@gnu.org. Subscribing to the list is not
obligatory.
Always send contributions in the format of the original document. Most

View file

@ -1,9 +0,0 @@
## Info files to build and install on all platforms.
INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \
ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \
emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
htmlfontify idlwave ido info mairix-el message mh-e \
modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
rcirc reftex remember sasl sc semantic ses sieve smtpmail \
speedbar srecode todo-mode tramp transient url use-package \
vhdl-mode viper vtable widget wisent woman

View file

@ -1,8 +0,0 @@
## Info files to build and install on all platforms (only ses has been
## translated to French)
INFO_COMMON = ses
## efaq-w32 has not been translated to French
DOCMISC_W32:=#
DOCMISC_W32_TARGET:=#

View file

@ -10,12 +10,6 @@
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@c compiler info avec
@c make -C doc/misc ../../info/ses-fr.info DOCLANG=fr
@c ou juste
@c make -C doc/misc ses DOCLANG=fr
@c compiler pdf avec
@c make -C doc/misc ses-fr.pdf DOCLANG=fr
@copying
Ce fichier documente @acronym{SES} : le tableur simple dEmacs (Simple

View file

@ -5787,7 +5787,7 @@ and co-wrote vc-tests-helpers.el vc-tests.el
and changed vc.el vc-git.el vc-dispatcher.el vc-hg.el vc-dir.el
vc-hooks.el diff-mode.el vc1-xtra.texi log-view.el maintaining.texi
subr.el project.el log-edit.el files.texi server.el simple.el window.el
cond-star.el configure.ac dired-aux.el keyboard.c and 348 other files
cond-star.el configure.ac dired-aux.el keyboard.c and 347 other files
Sebastian Fieber: changed gnus-art.el mm-decode.el mm-view.el
@ -6076,9 +6076,9 @@ Stephen Berman: wrote todo-mode-tests.el
and co-wrote todo-mode.el visual-wrap.el
and changed dired.el wid-edit.el dired-tests.el wdired.el files.el
todo-mode.texi dabbrev-tests.el wdired-tests.el diary-lib.el
menu-bar.el minibuffer.el simple.el dabbrev.el dired-aux.el doc-view.el
info.el outline.el todo-test-1.todo widget.texi INSTALL_BEGIN allout.el
and 89 other files
menu-bar.el minibuffer.el dabbrev.el dired-aux.el doc-view.el info.el
outline.el simple.el todo-test-1.todo widget.texi INSTALL_BEGIN
allout.el and 89 other files
Stephen C. Gilardi: changed configure.ac
@ -6616,7 +6616,7 @@ Ulrich Müller: changed configure.ac calc-units.el Makefile.in
emacsclient-mail.desktop lib-src/Makefile.in src/Makefile.in version.el
bindings.el calc-ext.el doctor.el emacs.1 files.el gamegrid.el gud.el
language/cyrillic.el server.el strings.texi ChgPane.c ChgSel.c HELLO
INSTALL and 63 other files
INSTALL and 61 other files
Ulrich Neumerkel: changed xterm.c

View file

@ -18,7 +18,7 @@ to look up issue github#1234, go to
https://github.com/joaotavora/eglot/issues/1234.
* Changes to upcoming Eglot
* Changes in Eglot 1.24.31 (Eglot bundled with Emacs 31.1)
** Changes to 'eglot-server-programs'

View file

@ -11,67 +11,6 @@ This file is about changes in ERC, the powerful, modular, and
extensible IRC (Internet Relay Chat) client distributed with
GNU Emacs since Emacs version 22.1.
* Changes in ERC 5.7
** A flexible 'match' API.
To the frustration many, ERC has long lacked of a flexible API for
reacting to a message's contents and envelope info, like its sender and
associated IRC command. While the long-term plan is to transition to an
object-based formatting model that should offer more useful access to
the various parts of a message before they're assembled, it's become
obvious that users need something practical in the interim. This
'match' API is based on a simple hook-like handler system that offers
more opportunities for things like filtering and styling. See Info node
'Match API' to find out more.
** Exercise more control in skipping certain desktop notifications.
Skip select notifications that ERC would otherwise emit with new hook
option 'erc-desktop-notifications-skip-predicates'. Its default members
skip messages from "fools" and those in untracked buffers.
** Opt out of desktop notifications from the active buffer.
Option 'erc-desktop-notifications-ignored-when-focused' can spare users
from being notified when interacting with the initiating buffer.
** Apply options locally to specific connections or buffers.
Based on an idea drafted nearly a quarter century ago by ERC's earliest
contributors, the 'settings' module offers a ready-made method for
binding arbitrary user options to various "scopes" of interest. It
leverages buffer-local variables and match conditions reminiscent of
'buffer-match-p'.
** Changes in the library API.
*** Module setup runs in query buffers on reconnect.
A module's setup would always run in channel buffers on reconnect, due
to channels being rejoined, but query buffers lacked a similar
opportunity to reinitialize their state for the new session. This is no
longer the case.
*** Local modules activate in preferred order instead of in reverse.
In recent versions, ERC has enabled local modules in the reverse order
of that produced by the "set" function used by 'setopt' and the Custom
UI for the option 'erc-modules'. Specifically, Built-in locals were
activated in reverse lexicographic order after third-party ones, which
were simply reversed as given. Now, just like with global modules, ERC
preserves the preferred order when activating local modules for new
sessions.
*** Major-mode setup runs before global-module setup in 'erc-open'.
The "enable" body of a global module's minor-mode command will now see
'erc-mode' as the 'major-mode'. Although ERC still delays its
major-mode hook until after it has initialized its main session
variables, a module can also now set any of its own variables that don't
depend on such initialization immediately and without fear of their
being killed. For modules still needing to run delayed, session-aware
code, a new convenience macro called 'erc-with-initialized-session' is
now available to automate any 'erc-mode-hook' wrangling for you.
*** A predicate to detect if the current buffer is a channel.
New function 'erc-channel-buffer-p' is a channel-detecting complement to
'erc-query-buffer-p' and a light wrapper around 'erc-channel-p'.
* Changes in ERC 5.6.2

4509
etc/NEWS

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3763,13 +3763,6 @@ This is because the SECONDARY selection is not implemented by the
Wayland compositor being used. A workaround is to use other kinds of
selections.
** Pasting non-ASCII text from Emacs into Chromium or Brave inserts mojibake.
These are bugs in these browsers: they chose incorrect format of the
copied text amongst those which Emacs provides. Emacs provides UTF-8 as
one of the formats, but these browsers use Latin-1 instead. So please
report these bugs to the developers of the respective browsers.
** Giant tool bar icons are displayed in some cases
This is because some icon themes (such as the KDE Breeze icon theme)

View file

@ -41,24 +41,6 @@ symbol: aix
****** Error number 140 in line 8 of file errors.c ******
* Ansible
symbols: ansible-error ansible-fatal ansible-warning
ansible-included ansible-origin
[ERROR]: couldn't resolve module/action 'shelll'. This often indicates a misspelling, missing collection, or incorrect module path.
Origin: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml:19:3
[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg.
[DEPRECATION WARNING]: Importing 'to_bytes' from 'ansible.module_utils._text' is deprecated. This feature will be removed from ansible-core version 2.24. Use ansible.module_utils.common.text.converters instead.
included: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml for localhost => (item={'name': 'adb', 'start': '04157df41d46b840'})
fatal: [localhost]: FAILED! => {
"assertion": "message == []",
"changed": false,
"evaluated_to": false,
"msg": "Assertion failed"
}
* Ant Java: works at least for jikes and javac
symbol: ant
@ -179,7 +161,7 @@ cucumber foo/cucumber.feature:15 # Scenario: deep backtrace in step definition
* EDG C/C++
symbols: edg-1 edg-2
symbol: edg-1 edg-2
build/intel/debug/../../../struct.cpp(42): error: identifier "foo" is undefined
build/intel/debug/../../../struct.cpp(44): warning #1011: missing return statement at end of ...
@ -196,7 +178,7 @@ Error 24 at (2:progran.f90) : syntax error
* Fortran checker
symbol: ftnchek
symbols: ftnchek
Dummy arg W in module SUBA line 8 file arrayclash.f is array
L4 used at line 55 file test/assign.f; never set
@ -322,251 +304,6 @@ In file included from /usr/include/c++/3.3/backward/warn.h:4,
from /usr/include/c++/3.3/backward/iostream.h:31:0,
from test_clt.cc:1:
* GCC nested notes
symbol: gcc-nested-notes
Example from https://developers.redhat.com/articles/2026/04/28/gcc-16-improved-error-messages-sarif-output#new_c___error_improvements with and without Unicode
test.cc:8:6: error: no declaration matches 'void foo::test(int, int, const void*, int)'
8 | void foo::test(int i, int j, const void *ptr, int k)
| ^~~
* there is 1 candidate
* candidate is: 'void foo::test(int, int, void*, int)'
test.cc:4:10:
4 | void test(int i, int j, void *ptr, int k);
| ^~~~
* parameter 3 of candidate has type 'void*'...
test.cc:4:35:
4 | void test(int i, int j, void *ptr, int k);
| ~~~~~~^~~
* ...which does not match type 'const void*'
test.cc:8:42:
8 | void foo::test(int i, int j, const void *ptr, int k)
| ~~~~~~~~~~~~^~~
test.cc:1:7: note: 'class foo' defined here
1 | class foo
| ^~~
test.cc:8:6: error: no declaration matches void foo::test(int, int, const void*, int)
8 | void foo::test(int i, int j, const void *ptr, int k)
| ^~~
• there is 1 candidate
• candidate is: void foo::test(int, int, void*, int)
test.cc:4:10:
4 | void test(int i, int j, void *ptr, int k);
| ^~~~
• parameter 3 of candidate has type void*...
test.cc:4:35:
4 | void test(int i, int j, void *ptr, int k);
| ~~~~~~^~~
• ...which does not match type const void*
test.cc:8:42:
8 | void foo::test(int i, int j, const void *ptr, int k)
| ~~~~~~~~~~~~^~~
test.cc:1:7: note: class foo defined here
1 | class foo
| ^~~
../../gcc/gcc/cp/module.cc: In member function void {anonymous}::trees_out::type_node(tree):
../../gcc/gcc/cp/module.cc:9628:40: error: cannot convert qualifier_set to int in initialization
9628 | int quals = type_memfn_quals (type);
| ~~~~~~~~~~~~~~~~~^~~~~~
| |
| qualifier_set
../../gcc/gcc/cp/module.cc:9635:24: error: no match for operator!= (operand types are int and qualifier_set)
9635 | || quals != type_memfn_quals (root)
| ~~~~~ ^~ ~~~~~~~~~~~~~~~~~~~~~~~
| | |
| int qualifier_set
• there are 3 candidates
../../gcc/gcc/cp/module.cc:9635:24:
9635 | || quals != type_memfn_quals (root)
| ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../gcc/gcc/cp/module.cc:215:
• candidate 1: bool operator==(const cp_expr&, tree) (reversed)
../../gcc/gcc/cp/cp-tree.h:126:1:
126 | operator == (const cp_expr &lhs, tree rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to const cp_expr&
../../gcc/gcc/cp/cp-tree.h:126:29:
126 | operator == (const cp_expr &lhs, tree rhs)
| ~~~~~~~~~~~~~~~^~~
In file included from ../../gcc/gcc/coretypes.h:479,
from ../../gcc/gcc/cp/module.cc:214:
• candidate 2: template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&)
../../gcc/gcc/wide-int.h:3853:19:
3853 | BINARY_PREDICATE (operator !=, ne_p)
| ^~~~~~~~
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
• template argument deduction/substitution failed:
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
• ../../gcc/gcc/wide-int.h: In substitution of template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&) [with T1 = int; T2 = qualifier_set]:
• required from here
../../gcc/gcc/cp/module.cc:9635:42:
9635 | || quals != type_memfn_quals (root)
| ^
• error: incomplete type wi::int_traits<qualifier_set> used in nested name specifier
../../gcc/gcc/wide-int.h:3853:19:
3853 | BINARY_PREDICATE (operator !=, ne_p)
| ^~~~~~~~
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
In file included from ../../gcc/gcc/input.h:24,
from ../../gcc/gcc/coretypes.h:507:
• candidate 3: bool operator!=(const expanded_location&, const expanded_location&)
../../gcc/gcc/../libcpp/include/line-map.h:1313:1:
1313 | operator!= (const expanded_location &a,
| ^~~~~~~~
• no known conversion for argument 1 from int to const expanded_location&
../../gcc/gcc/../libcpp/include/line-map.h:1313:38:
1313 | operator!= (const expanded_location &a,
| ~~~~~~~~~~~~~~~~~~~~~~~~~^
../../gcc/gcc/c/c-typeck.cc:8719:38: error: no match for operator| (operand types are qualifier_set and qualifier_set)
8719 | : ((lquals | rquals) == lquals)))
| ~~~~~~ ^ ~~~~~~
| | |
| | qualifier_set
| qualifier_set
• there are 6 candidates
../../gcc/gcc/c/c-typeck.cc:8719:38:
8719 | : ((lquals | rquals) == lquals)))
| ~~~~~~~^~~~~~~~
• candidate 1: template<class T1, class T2> typename wi::binary_traits<T1, T2>::operator_result operator|(const T1&, const T2&)
../../gcc/gcc/wide-int.h:3855:18:
3855 | BINARY_OPERATOR (operator |, bit_or)
| ^~~~~~~~
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• template argument deduction/substitution failed:
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• ../../gcc/gcc/wide-int.h: In substitution of template<class T1, class T2> typename wi::binary_traits<T1, T2>::operator_result operator|(const T1&, const T2&) [with T1 = qualifier_set; T2 = qualifier_set]:
• required from here
../../gcc/gcc/c/c-typeck.cc:8719:19:
8719 | : ((lquals | rquals) == lquals)))
| ^~~~~~
• error: incomplete type wi::int_traits<qualifier_set> used in nested name specifier
../../gcc/gcc/wide-int.h:3855:18:
3855 | BINARY_OPERATOR (operator |, bit_or)
| ^~~~~~~~
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• candidate 2: dump_flags_t operator|(dump_flags_t, dump_flags_t)
../../gcc/gcc/dumpfile.h:212:1:
212 | operator| (dump_flags_t lhs, dump_flags_t rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to dump_flags_t {aka dump_flag}
../../gcc/gcc/dumpfile.h:212:25:
212 | operator| (dump_flags_t lhs, dump_flags_t rhs)
| ~~~~~~~~~~~~~^~~
• candidate 3: optgroup_flags_t operator|(optgroup_flags_t, optgroup_flags_t)
../../gcc/gcc/dumpfile.h:280:1:
280 | operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to optgroup_flags_t {aka optgroup_flag}
../../gcc/gcc/dumpfile.h:280:29:
280 | operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
| ~~~~~~~~~~~~~~~~~^~~
• candidate 4: constexpr cv_qualifier operator|(cv_qualifier, cv_qualifier)
../../gcc/gcc/tree-core.h:716:1:
716 | operator| (cv_qualifier l, cv_qualifier r)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to cv_qualifier
../../gcc/gcc/tree-core.h:716:25:
716 | operator| (cv_qualifier l, cv_qualifier r)
| ~~~~~~~~~~~~~^
• candidate 5: constexpr qualifier_set operator|(qualifier_set, cv_qualifier)
../../gcc/gcc/tree.h:2816:1:
2816 | operator| (qualifier_set qs, cv_qualifier cvs)
| ^~~~~~~~
• no known conversion for argument 2 from qualifier_set to cv_qualifier
../../gcc/gcc/tree.h:2816:43:
2816 | operator| (qualifier_set qs, cv_qualifier cvs)
| ~~~~~~~~~~~~~^~~
• candidate 6: constexpr qualifier_set operator|(cv_qualifier, qualifier_set)
../../gcc/gcc/tree.h:2822:1:
2822 | operator| (cv_qualifier cvs, qualifier_set qs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to cv_qualifier
../../gcc/gcc/tree.h:2822:25:
2822 | operator| (cv_qualifier cvs, qualifier_set qs)
| ~~~~~~~~~~~~~^~~
The g++.dg/diagnostic/pr100716.C example has some more complex cases:
pr100716.C: In function int main():
pr100716.C:34:13: error: no matching function for call to A<int>::f(int)
34 | A<int>().f(0); // { dg-error "no matching function for call to 'A<int>::f\\(int\\)'" }
| ~~~~~~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void A<T>::f() [with T = int]
pr100716.C:7:12:
7 | void f() {} // { dg-line Af }
| ^
• candidate expects 0 arguments, 1 provided
pr100716.C:37:13: error: no matching function for call to A<int>::g()
37 | A<int>().g(); // { dg-error "no matching function for call to 'A<int>::g\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void A<T>::g(U) [with T = int]
pr100716.C:10:12:
10 | void g(U) {} // { dg-line Ag }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:40:13: error: no matching function for call to B<int>::f()
40 | B<int>().f(); // { dg-error "no matching function for call to 'B<int>::f\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::f(U) [with T = int]
pr100716.C:17:12:
17 | void f(U) {} // { dg-line Bf }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:43:13: error: no matching function for call to B<int>::g()
43 | B<int>().g(); // { dg-error "no matching function for call to 'B<int>::g\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::g(U, T) [with T = int]
pr100716.C:20:12:
20 | void g(U, T) {} // { dg-line Bg }
| ^
• candidate expects 2 arguments, 0 provided
pr100716.C:46:15: error: no matching function for call to B<float>::g(int)
46 | B<float>().g(0); // { dg-error "no matching function for call to 'B<float>::g\\(int\\)'" }
| ~~~~~~~~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::g(U, T) [with T = float]
pr100716.C:20:12:
20 | void g(U, T) {} // { dg-line Bg }
| ^
• candidate expects 2 arguments, 1 provided
pr100716.C:49:8: error: no matching function for call to C::f()
49 | C().f(); // { dg-error "no matching function for call to 'C::f\\(\\)'" }
| ~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void C::f(U)
pr100716.C:26:10:
26 | void f(U) {} // { dg-line Cf }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:52:8: error: no matching function for call to C::g(int)
52 | C().g(0); // { dg-error "no matching function for call to 'C::g\\(int\\)'" }
| ~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void C::g()
pr100716.C:29:10:
29 | void g() {} // { dg-line Cg }
| ^
• candidate expects 0 arguments, 1 provided
* GNU style
@ -599,7 +336,7 @@ boost/container/detail/flat_tree.hpp:589:25: [ skipping 5 instantiation contex
* Guile backtrace, 2.0.11
symbols: guile-file guile-line
symbols: guile-file, guile-line
Backtrace:
In ice-9/boot-9.scm:
@ -619,8 +356,6 @@ In /home/janneke/vc/guile/examples/gud-break.scm:
* Lua 5.1, 5.2, 5.3, 5.4, and LuaJIT 2.1
symbols: lua lua-stack
/usr/bin/lua: database.lua:31: assertion failed!
stack traceback:
[C]: in function 'assert'
@ -755,7 +490,7 @@ Fatal error: Call to undefined function: mysql_pconnect() in db.inc on line 66
* Rust
symbols: rust rust-panic
symbol: rust rust-panic
error[E0277]: `Foo` is not an iterator
--> src/main.rs:4:16
@ -877,7 +612,7 @@ bloofle defined( /users/wolfgang/foo.c(4) ), but never used
* GCOV (test coverage program)
symbols: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
-: 0:Source:foo.c
-: 0:Object:foo.bb

View file

@ -265,11 +265,7 @@ document ysave-buffer
end
define ybuffer-contents
if defined_WINDOWSNT
ydump-buffer $arg0 CONOUT$
else
ydump-buffer $arg0 /dev/stdout
end
ydump-buffer $arg0 /dev/stdout
if $yverbose && $buf->z_byte <= 1
yget-current-buffer-name
printf "[Buffer \"%s\" is empty.]\n", $ycurrent_buffer_name

View file

@ -1,19 +0,0 @@
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES -*- coding: utf-8 -*-
The following icons were derived from GIMP 3.2.X icons, modified for
Emacs by Elías Gabriel Pérez <eg642616@gmail.com>.
Copyright (C) 2026 Free Software Foundation, Inc.
License: GNU General Public License version 3 or later (see COPYING)
char-for-spray.xpm char-for-spray.pbm
char-to-fill.xpm char-to-fill.pbm
ellipse.xpm ellipse.pbm
eraser.xpm eraser.pbm
fill.xpm fill.pbm
line.xpm line.pbm
pen.xpm pen.pbm
poly-line.xpm poly-line.pbm
rectangle.xpm rectangle.pbm
spray.xpm spray.pbm
square.xpm square.pbm
text.xpm text.pbm

View file

@ -1,281 +0,0 @@
/* XPM */
static char * char_for_spray_xpm[] = {
"26 24 254 2",
" c None",
". c #A1A39E",
"+ c #CDCECC",
"@ c #CFD0CD",
"# c #CDCDCB",
"$ c #A1A29F",
"% c #E1E1DF",
"& c #CCCEC8",
"* c #C8CAC4",
"= c #E0E1DF",
"- c #959691",
"; c #E4E5E3",
"> c #CACCC7",
", c #BDBEBA",
"' c #ABADA9",
") c #BDBFBB",
"! c #939792",
"~ c #E6E7E4",
"{ c #CCCEC9",
"] c #575856",
"^ c #333432",
"/ c #444543",
"( c #212120",
"_ c #4E4E4C",
": c #CBCDC8",
"< c #959792",
"[ c #E7E8E5",
"} c #CED0CB",
"| c #282827",
"1 c #959793",
"2 c #E8E9E6",
"3 c #D0D2CD",
"4 c #9A9C98",
"5 c #3B3B3A",
"6 c #2F302F",
"7 c #373837",
"8 c #141413",
"9 c #767775",
"0 c #CDCFCA",
"a c #000000",
"b c #C9CBC6",
"c c #E9EAE7",
"d c #C7C9C4",
"e c #090909",
"f c #AAACA8",
"g c #D2D4CF",
"h c #3C3D3B",
"i c #737472",
"j c #CFD1CC",
"k c #959893",
"l c #EAEBE9",
"m c #C0C1BD",
"n c #050505",
"o c #BEBEBB",
"p c #D5D6D2",
"q c #A5A6A3",
"r c #060606",
"s c #757573",
"t c #D2D3CF",
"u c #8B8B89",
"v c #2E2E2D",
"w c #393938",
"x c #B4B4B1",
"y c #DDDEDC",
"z c #494D4C",
"A c #2F3235",
"B c #979893",
"C c #EBECEA",
"D c #D7D8D4",
"E c #767774",
"F c #1E1E1E",
"G c #313130",
"H c #50504F",
"I c #5E5E5C",
"J c #898A88",
"K c #D4D5D1",
"L c #5D5D5B",
"M c #030303",
"N c #232322",
"O c #C4C5C2",
"P c #686B6B",
"Q c #4A4D4D",
"R c #303537",
"S c #979895",
"T c #ECEDEB",
"U c #D9DAD6",
"V c #D6D7D3",
"W c #BBBCB9",
"X c #414140",
"Y c #0D1012",
"Z c #5C605F",
"` c #575A58",
" . c #323939",
".. c #EDEEEC",
"+. c #DBDCD8",
"@. c #D8D9D5",
"#. c #010101",
"$. c #C4C4C1",
"%. c #4D4D4C",
"&. c #333839",
"*. c #555957",
"=. c #454948",
"-. c #3B4040",
";. c #2F3536",
">. c #979A95",
",. c #EEEFED",
"'. c #DDDEDA",
"). c #AFB0AD",
"!. c #474746",
"~. c #424241",
"{. c #373736",
"]. c #A8A9A6",
"^. c #DADBD7",
"/. c #171A1C",
"(. c #303538",
"_. c #7A7C7A",
":. c #34393A",
"<. c #525654",
"[. c #3E4343",
"}. c #6D716E",
"|. c #989A95",
"1. c #EFF0EE",
"2. c #DFE0DD",
"3. c #A4A4A2",
"4. c #111110",
"5. c #BCBDBA",
"6. c #40403F",
"7. c #939492",
"8. c #DBDCDA",
"9. c #000101",
"0. c #293030",
"a. c #3D4242",
"b. c #434848",
"c. c #484C4B",
"d. c #353B3B",
"e. c #B3B4B3",
"f. c #989A97",
"g. c #F0F1EF",
"h. c #E1E2DF",
"i. c #DEDFDC",
"j. c #181818",
"k. c #737372",
"l. c #B5B6B3",
"m. c #D2D3D0",
"n. c #BABBB8",
"o. c #696B68",
"p. c #6B6D6D",
"q. c #3B4141",
"r. c #A8A9A7",
"s. c #F1F2F0",
"t. c #E3E4E1",
"u. c #A9AAA8",
"v. c #B9BAB8",
"w. c #D3D5D2",
"x. c #818380",
"y. c #C1C1C1",
"z. c #DEDEDE",
"A. c #A4A4A3",
"B. c #878988",
"C. c #9A9B97",
"D. c #F3F3F1",
"E. c #E6E6E3",
"F. c #939391",
"G. c #DDDDDA",
"H. c #E3E3E0",
"I. c #D9D9D7",
"J. c #D5D5D2",
"K. c #888986",
"L. c #CCCCCC",
"M. c #E4E4E4",
"N. c #BFBFBE",
"O. c #B5B5B5",
"P. c #7C7C7B",
"Q. c #CBCBC9",
"R. c #232323",
"S. c #F4F4F2",
"T. c #E8E8E5",
"U. c #AEAEAC",
"V. c #CACAC7",
"W. c #747473",
"X. c #737371",
"Y. c #E7E7E4",
"Z. c #C3C3C0",
"`. c #A3A5A3",
" + c #E6E6E5",
".+ c #A3A4A2",
"++ c #7A7B79",
"@+ c #ADAEAD",
"#+ c #8F8F8F",
"$+ c #AFAFAD",
"%+ c #8B8B88",
"&+ c #5D5D5D",
"*+ c #585858",
"=+ c #9A9B98",
"-+ c #F5F5F4",
";+ c #EAEAE8",
">+ c #666665",
",+ c #2D2D2D",
"'+ c #767675",
")+ c #575756",
"!+ c #6C6C6B",
"~+ c #E7E7E5",
"{+ c #757774",
"]+ c #B0B3AD",
"^+ c #A0A19E",
"/+ c #B0B0AE",
"(+ c #BBBBB9",
"_+ c #6A6B68",
":+ c #626262",
"<+ c #C3C3C2",
"[+ c #595959",
"}+ c #7F7F7F",
"|+ c #9B9D99",
"1+ c #ECECEA",
"2+ c #E5E5E3",
"3+ c #C9C9C7",
"4+ c #E3E3E1",
"5+ c #777775",
"6+ c #939591",
"7+ c #B9BAB7",
"8+ c #4D4E4D",
"9+ c #767676",
"0+ c #747474",
"a+ c #777777",
"b+ c #545454",
"c+ c #EBEBEA",
"d+ c #EFEFED",
"e+ c #EEEEEC",
"f+ c #E8E9E8",
"g+ c #9AA2B5",
"h+ c #BDBDBB",
"i+ c #B7B8B5",
"j+ c #EBEBE9",
"k+ c #EDEDEB",
"l+ c #C0C0BE",
"m+ c #4B4B4A",
"n+ c #595958",
"o+ c #3F3F3F",
"p+ c #969894",
"q+ c #D0D1D0",
"r+ c #D9D9D8",
"s+ c #DADAD9",
"t+ c #C6C8CB",
"u+ c #A5ABB8",
"v+ c #466293",
"w+ c #818DA6",
"x+ c #D7D7D6",
"y+ c #D8D8D7",
"z+ c #939390",
"A+ c #375A8F",
"B+ c #38598F",
"C+ c #37578C",
"D+ c #37588E",
"E+ c #355887",
" ",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # $ ",
" % & * * * * * * * * * * * * * * * * & = ",
" - ; > > , ' ) > > > > > > > > > > > > > ; - ",
" ! ~ { ] ^ / ( _ : { { { { { { { { { { { ~ ! ",
" < [ } > } } { | 1 } } } } } } } } } } } [ < ",
" < 2 3 4 5 6 7 8 9 3 3 3 0 a a b 3 3 3 3 2 < ",
" 1 c d e f g g h i g g g j a a : g g g g c 1 ",
" k l m n o p q r s p p p t a a u v w x p y z A ",
" B C D E F G H I J D D D K a a G L M N O P Q R ",
" S T U U U U U U U U U U V a a W U X Y Z ` z . ",
" S ..+.+.+.+.+.+.+.+.+.+.@.a #.$.D %.&.*.=.-.;. ",
" >.,.'.'.'.'.).!.H ~.{.].^.a /.(._.:.<.z [.}. ",
" |.1.2.2.2.3.4.5.2.2.6.7.8.9.0.:.a.b.c.d.e.|. ",
" f.g.h.h.i.j.k.h.h.h.l.m.h.m.n.o.e.p.q.r...f. ",
" f.s.t.t.u.a v.t.t.t.t.t.t.w.x.y.z.A.B.t.s.f. ",
" C.D.E.E.F.a G.E.E.H.I.E.J.K.L.M.N.O.P.Q.D.C. R.",
" C.S.T.T.U.a V.T.T.W.X.Y.Z.`. +.+++@+#+$+D.%+&+*+",
" =+-+;+;+;+>+,+'+)+!+~+% {+]+^+/+(+_+#+:+<+[+}+ ",
" |+-+1+1+1+1+2+3+4+1+1+4+5+6+7+1+1+(+8+9+0+a+b+ ",
" c+d+e+e+e+e+e+e+T f+g+h+i+j+e+e+k+l+m+n+o+ ",
" p+q+r+s+r+r+r+t+u+v+w+x+y+r+r+r+s+y+# z+ ",
" A+B+C+ ",
" D+E+ "};

View file

@ -1,301 +0,0 @@
/* XPM */
static char * char_to_fill_xpm[] = {
"26 24 274 2",
" c None",
". c #A1A39E",
"+ c #CDCECC",
"@ c #CFD0CD",
"# c #CDCDCB",
"$ c #A1A29F",
"% c #E1E1DF",
"& c #CCCEC8",
"* c #C8CAC4",
"= c #E0E1DF",
"- c #959691",
"; c #E4E5E3",
"> c #CACCC7",
", c #BDBEBA",
"' c #ABADA9",
") c #BDBFBB",
"! c #939792",
"~ c #E6E7E4",
"{ c #CCCEC9",
"] c #575856",
"^ c #333432",
"/ c #444543",
"( c #212120",
"_ c #4E4E4C",
": c #CBCDC8",
"< c #959792",
"[ c #E7E8E5",
"} c #CED0CB",
"| c #282827",
"1 c #959793",
"2 c #E8E9E6",
"3 c #D0D2CD",
"4 c #9A9C98",
"5 c #3B3B3A",
"6 c #2F302F",
"7 c #373837",
"8 c #141413",
"9 c #767775",
"0 c #CDCFCA",
"a c #000000",
"b c #C9CBC6",
"c c #E9EAE7",
"d c #C7C9C4",
"e c #090909",
"f c #AAACA8",
"g c #D2D4CF",
"h c #3C3D3B",
"i c #737472",
"j c #CFD1CC",
"k c #959893",
"l c #EAEBE9",
"m c #C0C1BD",
"n c #050505",
"o c #BEBEBB",
"p c #D5D6D2",
"q c #A5A6A3",
"r c #060606",
"s c #757573",
"t c #D2D3CF",
"u c #8B8B89",
"v c #2E2E2D",
"w c #393938",
"x c #B4B4B1",
"y c #979893",
"z c #EBECEA",
"A c #D7D8D4",
"B c #767774",
"C c #1E1E1E",
"D c #313130",
"E c #50504F",
"F c #5E5E5C",
"G c #898A88",
"H c #D4D5D1",
"I c #5D5D5B",
"J c #30312E",
"K c #454744",
"L c #979995",
"M c #C7C8C6",
"N c #979895",
"O c #ECEDEB",
"P c #D9DAD6",
"Q c #D6D7D3",
"R c #BBBCB9",
"S c #BEBFBB",
"T c #4D4E4C",
"U c #353533",
"V c #A2A3A0",
"W c #B2B4B1",
"X c #80817E",
"Y c #EDEEEC",
"Z c #DBDCD8",
"` c #D8D9D5",
" . c #CCCCC9",
".. c #ADAEAB",
"+. c #5D5E5C",
"@. c #858684",
"#. c #969795",
"$. c #DDDEDC",
"%. c #747673",
"&. c #979A95",
"*. c #EEEFED",
"=. c #DDDEDA",
"-. c #AFB0AD",
";. c #474746",
">. c #424241",
",. c #373736",
"'. c #A8A9A6",
"). c #DADBD7",
"!. c #0A0A09",
"~. c #70706E",
"{. c #787A77",
"]. c #C5C5C4",
"^. c #E8E8E8",
"/. c #BABBB9",
"(. c #747773",
"_. c #989A95",
":. c #EFF0EE",
"<. c #DFE0DD",
"[. c #A4A4A2",
"}. c #111110",
"|. c #BCBDBA",
"1. c #C8CBCE",
"2. c #4A5269",
"3. c #808592",
"4. c #B7BAC2",
"5. c #363C4A",
"6. c #6B6D6C",
"7. c #BABAB9",
"8. c #ADAEAD",
"9. c #D1D1D1",
"0. c #DBDBDB",
"a. c #9EA09E",
"b. c #737571",
"c. c #989A97",
"d. c #F0F1EF",
"e. c #E1E2DF",
"f. c #DEDFDC",
"g. c #181818",
"h. c #737372",
"i. c #C4C7CC",
"j. c #91A1C0",
"k. c #8AA6D0",
"l. c #7190BF",
"m. c #667289",
"n. c #A6A9AD",
"o. c #E7E7E7",
"p. c #F2F3F3",
"q. c #B5B6B5",
"r. c #C0C0C0",
"s. c #D0D0D0",
"t. c #D8D8D8",
"u. c #C5C6C5",
"v. c #757774",
"w. c #F1F2F0",
"x. c #E3E4E1",
"y. c #A9AAA8",
"z. c #B9BAB8",
"A. c #B1B5C1",
"B. c #AABFDE",
"C. c #95AED0",
"D. c #7F868F",
"E. c #D2D3D3",
"F. c #F2F2F2",
"G. c #F9F9F9",
"H. c #797A78",
"I. c #C7C7C6",
"J. c #CDCDCD",
"K. c #E0E0E0",
"L. c #949593",
"M. c #9A9B97",
"N. c #F3F3F1",
"O. c #E6E6E3",
"P. c #939391",
"Q. c #DDDDDA",
"R. c #B0B4C0",
"S. c #AFC5E3",
"T. c #93AACC",
"U. c #A4A5A8",
"V. c #EAEAEA",
"W. c #F0F0F0",
"X. c #8B8C8A",
"Y. c #8F908F",
"Z. c #8E8F8E",
"`. c #959795",
" + c #D2D2D2",
".+ c #D0D1D0",
"++ c #F4F4F2",
"@+ c #E8E8E5",
"#+ c #AEAEAC",
"$+ c #CACAC7",
"%+ c #B0C5E3",
"&+ c #94AED6",
"*+ c #787D8A",
"=+ c #D9DAD9",
"-+ c #DFDFDF",
";+ c #E6E6E6",
">+ c #959594",
",+ c #8D8E8C",
"'+ c #A4A5A4",
")+ c #CECECE",
"!+ c #DBDBDA",
"~+ c #A5A6A4",
"{+ c #9A9B98",
"]+ c #F5F5F4",
"^+ c #EAEAE8",
"/+ c #666665",
"(+ c #2D2D2D",
"_+ c #767675",
":+ c #58617C",
"<+ c #B0B4BC",
"[+ c #A4A5A3",
"}+ c #DEDEDE",
"|+ c #AFB0AF",
"1+ c #B1B2B1",
"2+ c #E1E1E0",
"3+ c #DDDDDD",
"4+ c #D3D3D3",
"5+ c #757673",
"6+ c #9B9D99",
"7+ c #ECECEA",
"8+ c #E5E5E3",
"9+ c #C9C9C7",
"0+ c #AEB2BF",
"a+ c #93ADD5",
"b+ c #C4C6CE",
"c+ c #C3C3C1",
"d+ c #C8C8C7",
"e+ c #F8F8F8",
"f+ c #F7F7F7",
"g+ c #EDEDED",
"h+ c #E3E3E3",
"i+ c #D9D9D9",
"j+ c #D7D7D7",
"k+ c #777875",
"l+ c #EBEBEA",
"m+ c #EFEFED",
"n+ c #EEEEEC",
"o+ c #BEC2CC",
"p+ c #9AADCF",
"q+ c #8AA0C8",
"r+ c #CCCED4",
"s+ c #B4B4B2",
"t+ c #EFEFEF",
"u+ c #FAFAFA",
"v+ c #F3F3F3",
"w+ c #E1E2E1",
"x+ c #9C9D9B",
"y+ c #656764",
"z+ c #969894",
"A+ c #D9D9D8",
"B+ c #DADAD9",
"C+ c #CECFD2",
"D+ c #A6ABBA",
"E+ c #AAAEBD",
"F+ c #D1D2D3",
"G+ c #BBBBBA",
"H+ c #CFCFCF",
"I+ c #DCDCDC",
"J+ c #EAEBEA",
"K+ c #C6C7C6",
"L+ c #7A7A78",
"M+ c #838583",
"N+ c #E6E6E5",
"O+ c #E1E1E1",
"P+ c #D6D6D5",
"Q+ c #979896",
"R+ c #636561",
"S+ c #50534B",
"T+ c #595C57",
"U+ c #A1A3A1",
"V+ c #DDDEDD",
"W+ c #6D6E6B",
"X+ c #50534C",
"Y+ c #4F524A",
" ",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # $ ",
" % & * * * * * * * * * * * * * * * * & = ",
" - ; > > , ' ) > > > > > > > > > > > > > ; - ",
" ! ~ { ] ^ / ( _ : { { { { { { { { { { { ~ ! ",
" < [ } > } } { | 1 } } } } } } } } } } } [ < ",
" < 2 3 4 5 6 7 8 9 3 3 3 0 a a b 3 3 3 3 2 < ",
" 1 c d e f g g h i g g g j a a : g g g g c 1 ",
" k l m n o p q r s p p p t a a u v w x p l k ",
" y z A B C D E F G A A A H a a D I J K L M - ",
" N O P P P P P P P P P P Q a a R S T U V W X ",
" N Y Z Z Z Z Z Z Z Z Z Z ` a a ...+.@.#.$.%. ",
" &.*.=.=.=.=.-.;.E >.,.'.).a !.~.{.].^./.+ (. ",
" _.:.<.<.<.[.}.|.$.1.2.3.4.5.6.7.8.].9.0.a.b. ",
" c.d.e.e.f.g.h.e.i.j.k.l.m.n.o.p.q.r.s.t.u.v. ",
" c.w.x.x.y.a z.x.A.B.C.D.E.F.G.t.H.@.I.J.K.L. ",
" M.N.O.O.P.a Q.O.R.S.T.U.V.K.W.X.Y.Z.`. +9..+H. ",
" M.++@+@+#+a $+@+A.%+&+*+=+-+;+>+,+G '+t.)+!+~+ ",
" {+]+^+^+^+/+(+_+:+%+&+<+[+;+}+K.|+1+2+3+4+ + +5+",
" 6+]+7+7+7+7+8+9+0+S.a+b+c+d+-+;+e+f+g+h+i+j+h+k+",
" l+m+n+n+n+n+n+o+p+q+r+8+s+3+3+t+u+v+V.o.w+x+y+",
" z+.+A+B+A+A+A+C+D+E+F+A+G+H+I+h+f+G.J+K+L+ ",
" M+N+O+F.P+Q+R+ ",
" S+S+T+U+V+x+W+X+Y+S+ "};

Binary file not shown.

View file

@ -1,29 +0,0 @@
/* XPM */
static char * ellipse_xpm[] = {
"24 24 2 1",
" c None",
". c #204A88",
" ",
" ....... ",
" ........... ",
" ... ... ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" ... ... ",
" ........... ",
" ....... ",
" ",
" "};

Binary file not shown.

View file

@ -1,138 +0,0 @@
/* XPM */
static char * eraser_xpm[] = {
"24 24 111 2",
" c None",
". c #ED2F2F",
"+ c #EF2929",
"@ c #EF2C2B",
"# c #ED3030",
"$ c #EE2C2C",
"% c #EF6968",
"& c #EDD0CC",
"* c #EDD6D1",
"= c #EDCFCB",
"- c #EE5252",
"; c #EF3535",
"> c #EDCEC8",
", c #E4B6AE",
"' c #E1ABA2",
") c #E1ACA2",
"! c #EDCFCA",
"~ c #F28D8B",
"{ c #EF2D2D",
"] c #EF2E2E",
"^ c #EEA29F",
"/ c #EAC5BE",
"( c #E2ABA2",
"_ c #E6BBB3",
": c #EEC5C2",
"< c #F49491",
"[ c #F03F3E",
"} c #EE5857",
"| c #EDD1CC",
"1 c #E3AEA5",
"2 c #E2AAA1",
"3 c #E2ABA1",
"4 c #ECCEC9",
"5 c #F3A2A0",
"6 c #F59290",
"7 c #F05453",
"8 c #F02F2E",
"9 c #EFC3BF",
"0 c #E6BAB3",
"a c #E3A9A1",
"b c #EEC5C1",
"c c #F5908D",
"d c #F48C8A",
"e c #ED2E2E",
"f c #ED2C2C",
"g c #EF8B89",
"h c #EBC9C3",
"i c #E3A9A0",
"j c #E3AAA0",
"k c #EDCDC8",
"l c #F49F9D",
"m c #F58F8C",
"n c #F15F5E",
"o c #DB2B2B",
"p c #EF4242",
"q c #EDD1CB",
"r c #E5B0A8",
"s c #E4A8A0",
"t c #E7B9B2",
"u c #EFC4C0",
"v c #F68C8A",
"w c #F68A88",
"x c #EC302F",
"y c #F02E2E",
"z c #F0B3B0",
"A c #E9BEB6",
"B c #E5A89F",
"C c #E5A99F",
"D c #EDCEC9",
"E c #F49D9A",
"F c #F68B89",
"G c #F26463",
"H c #DC2B2B",
"I c #EE2A2A",
"J c #EDD5D1",
"K c #E6A8A1",
"L c #E5A79F",
"M c #E8B8B1",
"N c #F78886",
"O c #F68886",
"P c #EC3131",
"Q c #EDD2CD",
"R c #F59794",
"S c #F78785",
"T c #F46766",
"U c #E32C2C",
"V c #FB7575",
"W c #FA7776",
"X c #FA7877",
"Y c #FA7979",
"Z c #FA7A7A",
"` c #F97C7B",
" . c #F97D7C",
".. c #F97E7D",
"+. c #F97F7E",
"@. c #F88180",
"#. c #F88281",
"$. c #F88382",
"%. c #F88583",
"&. c #F78684",
"*. c #EC3636",
"=. c #FB7474",
"-. c #F56A68",
";. c #E52B2B",
">. c #EE2B2B",
",. c #F86363",
"'. c #F77D7C",
"). c #ED3636",
"!. c #A01B1B",
"~. c #ED2B2B",
"{. c #C82727",
" ",
" ",
" ",
" ",
" . + + + + + + + + + + @ # ",
" $ % & * * * * * * * * * = - ",
" ; > , ' ' ' ' ' ' ' ' ) ! ~ { ",
" ] ^ / ( ( ( ( ( ( ( ( ( _ : < [ ",
" } | 1 2 2 2 2 2 2 2 2 3 4 5 6 7 ",
" 8 9 0 a a a a a a a a a 0 b c d e ",
" f g h i i i i i i i i i j k l m n o ",
" p q r s s s s s s s s s t u v w x ",
" y z A B B B B B B B B B C D E F G H ",
" I J K L L L L L L L L L M 9 N O P ",
" + * * * * * * * * * * * Q R S T U ",
" + V W X Y Z ` ...+.@.#.$.%.&.*. ",
" + =.V W X Y Z ` ...+.@.#.$.-.;. ",
" >.,.=.V W X Y Z ` ...+.@.'.).!. ",
" ~.+ + + + + + + + + + + ~.{. ",
" ",
" ",
" ",
" ",
" "};

Binary file not shown.

View file

@ -1,186 +0,0 @@
/* XPM */
static char * fill_xpm[] = {
"24 24 159 2",
" c None",
". c #555753",
"+ c #585A56",
"@ c #595A57",
"# c #555653",
"$ c #5A5C59",
"% c #9FA09F",
"& c #A8A9A8",
"* c #595B57",
"= c #5C5F5B",
"- c #565854",
"; c #E3E3E2",
"> c #F2F2F2",
", c #F6F6F6",
"' c #676965",
") c #595B58",
"! c #626460",
"~ c #D2D3D2",
"{ c #DDDDDD",
"] c #CBCBCB",
"^ c #DFDFDF",
"/ c #CDCECD",
"( c #5A5C57",
"_ c #5F719F",
": c #596C9B",
"< c #586A9A",
"[ c #566485",
"} c #5C5F61",
"| c #B0B2B1",
"1 c #FAFAFA",
"2 c #F3F3F3",
"3 c #D1D2D1",
"4 c #CFCFCF",
"5 c #C9C9C9",
"6 c #F5F5F5",
"7 c #777976",
"8 c #5E709F",
"9 c #8B9FC4",
"0 c #A0BCE3",
"a c #8DB2E2",
"b c #6E92C2",
"c c #5C636E",
"d c #838684",
"e c #F4F4F4",
"f c #FDFDFD",
"g c #E9E9E9",
"h c #D6D6D6",
"i c #D3D3D3",
"j c #CCCCCC",
"k c #D7D7D7",
"l c #E0E0E0",
"m c #5B6D9C",
"n c #BACFEB",
"o c #A4C0E5",
"p c #677589",
"q c #666866",
"r c #D6D7D6",
"s c #FBFBFB",
"t c #F7F7F7",
"u c #FCFCFC",
"v c #EEEEEE",
"w c #858683",
"x c #575855",
"y c #838582",
"z c #D1D1D1",
"A c #D0D0D0",
"B c #C8C8C8",
"C c #F0F0F0",
"D c #838481",
"E c #C0D5F0",
"F c #A3BEE2",
"G c #585B5B",
"H c #E5E5E5",
"I c #ECECEC",
"J c #8D8E8B",
"K c #666865",
"L c #8A8B8A",
"M c #6E6F6D",
"N c #7E807D",
"O c #D4D4D4",
"P c #CDCDCD",
"Q c #EDEEED",
"R c #5D5F5B",
"S c #A6C3E9",
"T c #57637D",
"U c #90918E",
"V c #E4E4E4",
"W c #6D6E6B",
"X c #8B8C8B",
"Y c #BBBBBB",
"Z c #A3A4A3",
"` c #666864",
" . c #D8D8D8",
".. c #A8AAA7",
"+. c #A6C2E9",
"@. c #576999",
"#. c #5A5B58",
"$. c #E2E2E2",
"%. c #DCDCDC",
"&. c #EBEBEB",
"*. c #8D8E8C",
"=. c #6B6C6A",
"-. c #9FA09E",
";. c #747673",
">. c #898B88",
",. c #D5D5D5",
"'. c #A5C2E8",
"). c #7B7D7A",
"!. c #969895",
"~. c #727470",
"{. c #8C8D8B",
"]. c #E1E1E1",
"^. c #D9D9D9",
"/. c #D2D2D2",
"(. c #CACACA",
"_. c #BFC0BF",
":. c #5B5C58",
"<. c #DADADA",
"[. c #CECECE",
"}. c #5B5D58",
"|. c #A4C1E7",
"1. c #6D6F6C",
"2. c #F8F8F8",
"3. c #EFEFEF",
"4. c #FEFEFE",
"5. c #EAEAEA",
"6. c #E3E3E3",
"7. c #5A5C58",
"8. c #5D6F9E",
"9. c #A2B6D7",
"0. c #92ACD4",
"a. c #5A6D9D",
"b. c #595B56",
"c. c #C7C7C6",
"d. c #E7E7E7",
"e. c #EDEDED",
"f. c #C9CAC9",
"g. c #5F605C",
"h. c #5C6E9D",
"i. c #5B6D9D",
"j. c #646662",
"k. c #F9F9F9",
"l. c #797A77",
"m. c #5B5C59",
"n. c #B6B7B6",
"o. c #E8E8E8",
"p. c #A3A5A3",
"q. c #5D5F5C",
"r. c #F4F4F3",
"s. c #DBDBDB",
"t. c #CFCFCE",
"u. c #666763",
"v. c #535650",
"w. c #535652",
"x. c #838683",
"y. c #F6F7F6",
"z. c #E0E0DF",
"A. c #797A76",
"B. c #50554D",
" ",
" . . . . ",
" . . . . ",
" . + @ . ",
" # $ % & * . ",
" = - ; > , ' . ",
" ) ! ~ * { ] ^ / ( . ",
" _ : < < < [ } | 1 2 + 3 4 5 6 7 # ",
" 8 9 0 a b c d e f 2 g + h i j k l . ",
" m n o p q r s t u v w x y z A B C D ",
" < E F G H v ^ I s J K L M N O P z Q R ",
" < E S T U 6 h V > W X Y Z ` .z 5 g .. ",
" < E +.@.#.$.l %.&.*.=.-.;.>.%.,.P j e ! ",
" < E '.< ).t ,.$.I !.~.{.$.].^./.(.$._.* ",
" < E '.< :.,.$.<.g t s 2 I H { h [.P > }. ",
" < E |.< 1.2.O ].3.4.2.C g ].<.,.5.6.7. ",
" 8.9.0.a. b.c.H ^.d.6 u e e.H g 2.f.g. ",
" h.i. j.t O ^ e.u k.2 k.5.l.m. ",
" + n.o.k H e 4.k.p.R ",
" q.r.s.o.1 t.u.v. ",
" w.x.y.z.A.* ",
" - ( #.B. ",
" ",
" "};

Binary file not shown.

View file

@ -1,29 +0,0 @@
/* XPM */
static char * line_xpm[] = {
"24 24 2 1",
" c None",
". c #204A88",
" ",
" . ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" . ",
" "};

Binary file not shown.

View file

@ -1,130 +0,0 @@
/* XPM */
static char * pen_xpm[] = {
"24 24 103 2",
" c None",
". c #683907",
"+ c #764108",
"@ c #6B3B07",
"# c #673907",
"$ c #985B1B",
"% c #854A0A",
"& c #9C652C",
"* c #D48E45",
"= c #6B3D0D",
"- c #673908",
"; c #95632D",
"> c #E49745",
", c #996731",
"' c #885C2D",
") c #E79137",
"! c #B67836",
"~ c #71471B",
"{ c #7B5226",
"] c #D48839",
"^ c #BB6C19",
"/ c #8C653A",
"( c #693A09",
"_ c #764D1F",
": c #C1803B",
"< c #C97113",
"[ c #956430",
"} c #7C5021",
"| c #734719",
"1 c #AF763C",
"2 c #DB7C18",
"3 c #985916",
"4 c #876239",
"5 c #6A3B09",
"6 c #6E4213",
"7 c #9B6D3C",
"8 c #E8851D",
"9 c #A45B0D",
"0 c #785631",
"a c #86541E",
"b c #837868",
"c c #897862",
"d c #CB7B27",
"e c #B6640E",
"f c #7D5223",
"g c #976632",
"h c #8A8C88",
"i c #B2B3B1",
"j c #AEAFAC",
"k c #8A8A83",
"l c #845B2E",
"m c #966A3B",
"n c #70400D",
"o c #92948F",
"p c #F4F4F4",
"q c #E7E7E7",
"r c #ADADAC",
"s c #898982",
"t c #845A2B",
"u c #6D3C07",
"v c #8B8E89",
"w c #C8C8C7",
"x c #F9F9F9",
"y c #C6C6C6",
"z c #A3A3A3",
"A c #9FA19D",
"B c #868073",
"C c #8B8D88",
"D c #F6F6F6",
"E c #E0E0E0",
"F c #AFAFAF",
"G c #A6A7A5",
"H c #8C8E89",
"I c #898D88",
"J c #C1C2C0",
"K c #F8F8F8",
"L c #BBBBBB",
"M c #9E9F9D",
"N c #8B8C88",
"O c #1E1E1E",
"P c #3E3E3D",
"Q c #595958",
"R c #A2A2A2",
"S c #999A98",
"T c #161616",
"U c #757575",
"V c #848484",
"W c #3F3F3F",
"X c #202020",
"Y c #6E706B",
"Z c #000000",
"` c #1A1A1A",
" . c #929292",
".. c #484848",
"+. c #242424",
"@. c #101010",
"#. c #0D0D0D",
"$. c #2B2B2B",
"%. c #3B3B3B",
"&. c #303030",
"*. c #0A0A0A",
"=. c #141414",
"-. c #0E0E0E",
" ",
" . ",
" . + @ ",
" # $ % ",
" # & * = ",
" - ; > , # ",
" # ' ) ! ~ ",
" # { ] ^ / ( ",
" # _ : < [ } ",
" # | 1 2 3 4 5 ",
" 6 7 8 9 0 a @ ",
" b c d e f g @ ",
" h i j k l m n ",
" o p q r s t u ",
" v w x y z A B ",
" C D E F G H ",
" I J K L M N ",
" O P Q R S C ",
" T U V W X Y ",
" Z ` .z ..+.@. ",
" Z Z #.$.%.&.T ",
" Z Z Z *.=.-.Z ",
" Z Z Z Z Z Z Z ",
" "};

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