; Merge from master.

This commit is contained in:
Yuan Fu 2022-05-07 01:57:39 -07:00
commit 82d5e902af
No known key found for this signature in database
GPG key ID: 56E19BC57664A442
617 changed files with 39449 additions and 15566 deletions

View file

@ -1,3 +1,916 @@
2022-04-13 Tassilo Horn <tsdh@gnu.org>
dired: implement feature from 7b50ed553f differently
* lisp/dired.el (dired-buffers-for-dir): Restore to emacs-27 version.
(dired-buffers-for-dir-or-subdir): New function.
(dired-clean-up-after-deletion): Use dired-buffers-for-dir-or-subdir
instead dired-buffers-for-dir.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix regression in 'dired-buffers-for-dir'
* lisp/dired.el (dired-buffers-for-dir): Fix inadvertently swapped
arguments. (Bug#54636)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
* lisp/desktop.el (desktop-read): Clarify warning text.
2022-04-13 Po Lu <luangruo@yahoo.com>
* doc/emacs/anti.texi (Antinews): Unannounce removal of Motif.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix eshell-explicit-command-char doc string typo
* lisp/eshell/esh-ext.el (eshell-explicit-command-char): Fix typo
in doc string (bug#54567).
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Clarify the description of "selected tags table"
* doc/emacs/maintaining.texi (Select Tags Table): Clarify the
distinction between the "selected tags table" and the "current
list of tags tables". (Bug#54543)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Add notes about command modes and nativecomp interaction
* doc/lispref/commands.texi (Command Modes): Note interaction with
native-compile (bug#54437).
* src/data.c: Add comment about not being supported.
Do not merge to master.
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-25-gaf6f12
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve doc strings of read-char-from-minibuffer-insert-* commands
* lisp/subr.el (read-char-from-minibuffer-insert-char)
(read-char-from-minibuffer-insert-other): Clarify the doc strings.
(Bug#54479)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix region highlight in non-selected windows
* src/xdisp.c (prepare_menu_bars): Include in the windows passed
to pre-redisplay-functions windows whose point was moved from the
last recorded position. (Bug#54450)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix a regression in 'decipher-digram-list'
* lisp/play/decipher.el (decipher-stats-buffer): Don't assume the
statistics buffer always exists. (Bug#54443)
2022-04-13 Karl Fogel <kfogel@red-bean.com>
Improve documentation of bookmark default sorting
* lisp/bookmark.el (bookmark-alist, bookmark-store,
bookmark-maybe-sort-alist): Update doc strings and comments.
2022-04-13 Juri Linkov <juri@linkov.net>
* doc/misc/transient.texi: Fix @dircategory to "Emacs misc features" for dir.
2022-04-13 Jim Porter <jporterbugs@gmail.com>
Fix evaluation of negated argument predicates in Eshell
* lisp/eshell/em-pred.el (eshell-add-pred-func): Let-bind 'pred' so
the lambdas see the original value (bug#54369).
Committed on the wrong branch.
Do not merge to master.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Emacs pretest 28.0.92
* README:
* configure.ac:
* nt/README.W32:
* msdos/sed2v2.inp: Bump Emacs version to 28.0.92.
* etc/AUTHORS:
* lisp/ldefs-boot.el: Update for pretest 28.0.92.
* ChangeLog.3: Regenerate.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix regression in 'custom-prompt-customize-unsaved-options'
* lisp/cus-edit.el (custom-prompt-customize-unsaved-options):
Don't depend on the value returned by 'customize-unsaved'. Fix
the doc string. Patch by Sebastian Miele <iota@whxvd.name>.
(Bug#54329)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve documentation of 'map-charset-chars'
* doc/lispref/nonascii.texi (Character Sets):
* src/charset.c (Fmap_charset_chars): Clarify the codepoint issue
in using 'map-charset-chars'.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Avoid assertion violations in 'bidi_resolve_brackets'
* src/bidi.c (bidi_resolve_brackets): Move assertion to where it
really matters. (Bug#54295)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix which-func-update doc string
* lisp/progmodes/which-func.el (which-func-update): Make the doc
string match the code (bug#54288).
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve wording of 'dired-jump's description
* doc/emacs/dired.texi (Dired Enter): Clarify wording. Reported
by Natalie <batalie@riseup.net>.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Add a comment for previous browse-url-of-dired-file change
* lisp/net/browse-url.el (browse-url-of-dired-file): Add a comment
for previous change.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Restore documented Emacs 27.2 behaviour of browse-url-of-dired-file
* lisp/net/browse-url.el (browse-url-of-dired-file): Restore the
documented behaviour -- open a web browser instead of passing to
the various handlers.
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-24-g668205
2022-04-13 Andreas Schwab <schwab@linux-m68k.org>
* lib-src/seccomp-filter.c (main): Use faccessat2 only if defined.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix regression in derived-mode-init-mode-variables
* lisp/emacs-lisp/derived.el (derived-mode-init-mode-variables):
Fix regression caused by lexical-binding derived.el (bug#54240).
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Avoid crashes when fringe bitmaps are defined in daemon mode
* src/dispextern.h (gui_define_fringe_bitmap): Add prototype.
(max_used_fringe_bitmap): Add declaration.
* src/fringe.c (gui_define_fringe_bitmap): New function.
* src/w32term.c (w32_draw_fringe_bitmap):
* src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]: Call
'gui_define_fringe_bitmap' if the terminal-specific bitmap data is
not available when a fringe bitmap is about to be drawn. Don't
try to draw a bitmap that is not known to fringe.c. (Bug#54183)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
One more fix of the BPA implementation
* src/bidi.c (bidi_find_bracket_pairs): Disable BPA optimization
when there are no strong directional characters inside the
bracketed pair. (Bug#54219)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix handling of brackets in BPA
* src/bidi.c (bidi_resolve_brackets): Fix implementation of UBA's
N0 rule when there are no strong directional characters inside the
bracketed pair. (Bug#54219)
2022-04-13 Po Lu <luangruo@yahoo.com>
Correct etc/NEWS entry about bitmapped fonts
* etc/NEWS: Don't say that bitmap font issues are due to Pango, that's
not accurate.
2022-04-13 Jim Porter <jporterbugs@gmail.com>
Improve/correct documentation about Eshell variable expansion
* lisp/eshell/esh-var.el: Correct documentation comment.
(eshell-parse-variable-ref): Correct docstring.
* doc/misc/eshell.texi (Dollars Expansion): Add documentation for
$"var"/$'var' and $<command> syntaxes.
2022-04-13 Jim Porter <jporterbugs@gmail.com>
Partially revert b03f74e0f2a578b1580e8b1c368665850ee7f808
That commit regressed '$<command>' forms in Eshell, due to a
limitation/bug in how 'eshell-do-eval' works. This fixes
bug#54190.
* lisp/eshell/esh-var.el (eshell-parse-variable-ref): Quote a lambda.
* test/lisp/eshell/eshell-tests.el (eshell-test/interp-temp-cmd):
New test.
2022-04-13 Paul Eggert <eggert@cs.ucla.edu>
Backport: Port pre-commit hook to Git 2.35.0
* build-aux/git-hooks/pre-commit: Use LC_ALL=C grep -E instead of
sane_egrep (removed in Git 2.35.0).
(cherry picked from commit b8a96f055624f86fe965a0d1b7b2495b2db80e63)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix :tag for eol in tab-first-completion
* lisp/indent.el (tab-first-completion): Fix the :tag description
(bug#54179).
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-22-g33543d
2022-04-13 Dmitry Gutov <dgutov@yandex.ru>
Add explicit '--no-heading' for ripgrep
* lisp/progmodes/xref.el (xref-search-program-alist):
Add explicit '--no-heading' for ripgrep (bug#54177).
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
Follow OpenSSH changes in Tramp
* lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options):
Reimplement. OpenSSH has changed its diagnostics messages.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Document better how to reset attributes of faces for new frames
* doc/lispref/display.texi (Attribute Functions):
* lisp/faces.el (set-face-attribute): Explain how to reset an
attribute's value for future frames. (Bug#54156)
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
* lisp/net/tramp-sh.el (tramp-ssh-controlmaster-options): Adapt test.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Mention flyspell-prog-mode in flyspell-mode doc string
* lisp/textmodes/flyspell.el (flyspell-mode): Mention
flyspell-prog-mode (bug#54131).
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Reword face-remap-add-relative manual entry
* doc/lispref/display.texi (Face Remapping): Clarify the
face-remap-add-relative (bug#54114).
2022-04-13 Philipp Stephani <phst@google.com>
Fix indexing of module functions that return enumeration types.
Return types that consist of more than one word need to be enclosed in
braces, see Info node `(texinfo) Typed Functions'. Otherwise they are
indexed incorrectly.
* doc/lispref/internals.texi (Module Misc, Module Nonlocal): Enclose
multi-word return types in braces.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
* doc/misc/transient.texi (Other Options): Fix a @ref. (Bug#54108)
2022-04-13 Glenn Morris <rgm@gnu.org>
tramp.texi texinfo 4.13 compatibility
* doc/misc/tramp.texi (Frequently Asked Questions):
Restore compatibility with Texinfo < 5.
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
Explain "Tramp" spelling in its manual
* doc/misc/tramp.texi (Frequently Asked Questions):
Explain "Tramp" spelling.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix 'display-line-numbers-mode' in hide-show buffers
* src/xdisp.c (redisplay_internal): Disable redisplay
optimizations that consider just the current line, when
'display-line-numbers-mode' is turned on in the buffer.
(Bug#54091)
2022-04-13 Martin Rudalics <rudalics@gmx.at>
Don't check whether a deleted window is deletable (Bug#54028)
* lisp/window.el (window-state-put): Make sure window is live
before calling 'window-deletable-p' on it (Bug#54028).
2022-04-13 Eli Zaretskii <eliz@gnu.org>
A friendlier error message from image-mode in an empty buffer
* lisp/image-mode.el (image-mode): Handle the case where the empty
buffer doesn't visit a file (Bug#54084)
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-17-gea6b74
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve documentation of filling and justification commands
* doc/lispref/text.texi (Filling):
* lisp/textmodes/fill.el (fill-region-as-paragraph)
(default-justification, set-justification, justify-current-line):
Clarify "canonicalization" of spaces and the meaning of
justification styles. (Bug#54047)
(set-justification-left, set-justification-right)
(set-justification-full): Improve wording of doc strings.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
* lisp/progmodes/subword.el (superword-mode): Doc fix. (Bug#54045)
2022-04-13 Philipp Stephani <phst@google.com>
Fix indexing of module functions that return complex types.
Return types that consist of more than one word need to be enclosed in
braces, see Info node `(texinfo) Typed Functions'. Otherwise they are
indexed incorrectly.
* doc/lispref/internals.texi (Module Values): Enclose multi-word
return types in braces.
2022-04-13 Po Lu <luangruo@yahoo.com>
Prevent crashes caused by invalid locale coding systems
* src/xterm.c (handle_one_xevent): Prevent a signal inside
`setup_coding_system' which crashes recent versions of GLib if
the locale coding system is invalid.
Do not merge to master.
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
Fix problem with popd for in remote shell buffers
* lisp/shell.el (shell-prefixed-directory-name):
Use `file-local-name' for DIR. (Bug#53927)
2022-04-13 Jonas Bernoulli <jonas@bernoul.li>
Import texi source file for transient manual
* doc/misc/Makefile.in: Add transient to INFO_COMMON.
* doc/misc/transient.texi: New file.
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-15-gc5ceb6
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix 'exchange-point-and-mark' in 'transient-mark-mode'
* lisp/simple.el (exchange-point-and-mark): Don't deactivate mark
when 'transient-mark-mode' is ON. (Bug#53150)
(cherry picked from commit 415ed4b42515ff2e6dd9b94e964b479e50c6392e)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix "C-SPC C-SPC" after "C-x C-x"
* lisp/simple.el (exchange-point-and-mark): Fix what the command
does when 'transient-mark-mode' is OFF. (Bug#52896)
(cherry picked from commit 19c6cad1821eb896b2ddd0f6eab030f0880ea254)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix a typo in fontset.el
* lisp/international/fontset.el (xlfd-regexp-spacing-subnum): Fix
a typo. Reported by Greg A. Woods <woods@robohack.ca>.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Note in ELisp manual that too-wide images are truncated
* doc/lispref/display.texi (Showing Images): Note that images are
truncated at the window's edge. (Bug#53952)
2022-04-13 Andrea Corallo <akrl@sdf.org>
* lisp/mail/emacsbug.el (report-emacs-bug): Report libgccjit status.
* lisp/startup.el (normal-top-level): Small code move, improve 202d3be873.
2022-04-13 Andrea Corallo <akrl@sdf.org>
* lisp/startup.el (normal-top-level): Disable native-comp if not available
2022-04-13 Andrea Corallo <akrl@sdf.org>
Fix integer arithmetic miss-compilation (bug#53451)
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-range-for-arithm):
When one of the two sources is negated revert to set dst as
number.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add test to
verify this is effective.
2022-04-13 Robert Pluim <rpluim@gmail.com>
Mark flymake as compatible with emacs-26.1
* lisp/progmodes/flymake.el: Bump package version and set
emacs version in Package-Requires to 26.1 (Bug#53853).
2022-04-13 Brian Leung <leungbk@posteo.net>
flymake: Ensure compatibility with older Emacsen
* lisp/progmodes/flymake.el (flymake--log-1): Use
replace-regexp-in-string instead of Emacs 28's
string-replace (bug#53853).
2022-04-13 Eric Abrahamsen <eric@ericabrahamsen.net>
Don't remove dummy.group from gnus-newsrc-alist on Gnus save
bug#53352
* lisp/gnus/gnus-start.el (gnus-gnus-to-quick-newsrc-format): This
function was removing dummy.group from the global value of
`gnus-newsrc-alist' on save; we only wanted to remove it temporarily.
2022-04-13 Bob Rogers <rogers@rgrjr.com>
Fix ietf-drums-get-comment doc string
* lisp/mail/ietf-drums.el (ietf-drums-get-comment): We really return
the last comment (bug#53810).
2022-04-13 Daniel Martín <mardani29@yahoo.es>
Fix typo in display.texi
* doc/lispref/display.texi (Making Buttons): Fix typo. (Bug#53807)
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
Revert an erroneous change in tramp-cache.el
* lisp/net/tramp-cache.el (tramp-get-hash-table):
Use `string-match-p' instead of `string-search'. The latter one
was introduced by accident. Reported by Kai Tetzlaff <kai@tetzlaff.eu>.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve documentation of 'emacs-version'
* doc/emacs/trouble.texi (Checklist): Mention the possibility of
invoking 'emacs-version' with a prefix argument.
* lisp/version.el (emacs-version): Improve doc string. (Bug#53720)
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
* etc/NEWS: Apply final fixes after proofreading.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Clarify documentation of a "face's font"
* doc/lispref/display.texi (Attribute Functions)
(Face Attributes): Clarify that the :font attribute of a face and
the font returned by 'face-font' are by default for ASCII
characters. (Bug#53664)
2022-04-13 Alan Mackenzie <acm@muc.de>
Bind Qdebugger to Qdebug in signal_or_quit.
* src/eval.c (signal_or_quit): Bind the correct variable, Qdebugger (not
Vdebugger) to Qdebug in the section for errors in batch jobs.
(syms_of_eval): New DEFSYM for Qdebugger.
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-13-gdd6486
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix regression in Occur Edit mode
* lisp/replace.el (occur-after-change-function): Fix the algorithm
to find the smallest change in some corner cases. (Bug#53598)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix last change of Malayalam composition rules
* lisp/language/indian.el (malayalam-composable-pattern):
Reinstate. Instead of removing it, add any sequence of
Malayalam characters to the existing patterns, so as not
to lose the patterns that use ZWJ and ZWNJ. (Bug#53625)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix rendering of Malayalam script
* lisp/language/indian.el (malayalam-composable-pattern): Remove.
(script-regexp-alist): Remove 'malayalam-composable-pattern'.
Instead, pass any sequence of Malayalam codepoints to the shaping
engine. (Bug#53625)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Improve documentation of Occur mode
* doc/emacs/search.texi (Other Repeating Search): Improve wording
and document Occur Edit mode better.
2022-04-13 Alan Third <alan@idiocy.org>
Remove debug logging
* src/nsterm.m ([EmacsView copyRect:to:]): Remove logging as it's no
longer required.
2022-04-13 Michael Albinus <michael.albinus@gmx.de>
Fix error in filelock.c
* src/filelock.c (lock_file): Move call of file name handler to
`Flock_file'. Determine lock_filename only in case
create_lockfiles is non-nil. Adapt the rest of the function accordingly.
(Flock_file): Do not check for create_lockfiles. Call file name
handler if appropriate. (Bug#53207)
2022-04-13 Juri Linkov <juri@linkov.net>
* lisp/frame.el (clone-frame): Filter out 'parent-id' (bug#51883).
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Partially revert a fill-region-as-paragraph regression
* lisp/textmodes/fill.el (fill-region-as-paragraph): Revert
e186af261 (bug#53537), because it leads to regressions. (But
leave tests in place.)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix 'make_lispy_position' when there's an image at EOB
* src/xdisp.c (move_it_to): Don't compare IT_CHARPOS with an
invalid TO_CHARPOS. (Bug#53546)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix copyright-find-copyright when searching from the end
* lisp/emacs-lisp/copyright.el (copyright-find-copyright): Make
the double check also work when searching from the end (bug#7179).
Do not merge to master.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix copyright.el comment and add a test
* lisp/emacs-lisp/copyright.el (copyright-find-copyright): Fix
comment (bug#7179).
Do not merge to master.
2022-04-13 Philipp Stephani <phst@google.com>
* configure.ac (LIBSECCOMP): Bump minimum version for faccessat2.
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Make the `f' command work in image-mode again
* lisp/image.el (image-show-frame): Protect against not having
computed the animation data yed (bug#53489).
2022-04-13 Philipp Stephani <phst@google.com>
Seccomp: improve support for newer versions of glibc (Bug#51073)
* lib-src/seccomp-filter.c (main): Allow 'pread64' and 'faccessat2'
system calls. Newer versions of glibc use these system call (starting
with commits 95c1056962a3f2297c94ce47f0eaf0c5b6563231 and
3d3ab573a5f3071992cbc4f57d50d1d29d55bde2, respectively).
2022-04-13 Thomas Fitzsimmons <fitzsim@fitzsim.org>
EUDC: Fix a quoting bug in the BBDB backend
* lisp/net/eudcb-bbdb.el (eudc-bbdb-query-internal): Fix a quoting
bug introduced during lexical-binding conversion.
2022-04-13 Sergey Vinokurov <serg.foo@gmail.com>
Fix memory-report-object-size to initialize memory-report--type-size
* lisp/emacs-lisp/memory-report.el (memory-report-object-size):
Allow using function directly (bug#53310).
Do not merge to master.
2022-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
Fix menu-bar mouse clicks in "C-h c" and "C-h k" (bug#53322)
* lisp/subr.el (event-start, event-end): Handle '(menu-bar)'
events.
* lisp/net/browse-url.el (browse-url-interactive-arg): Simplify
accordingly.
(cherry picked from commit 9ceb3070e34ad8a54184fd0deda477bf5ff77000)
2022-04-13 Eli Zaretskii <eliz@gnu.org> (tiny change)
Fix UB in ebrowse
* lib-src/ebrowse.c (matching_regexp): Avoid writing beyond the
limits of 'matching_regexp_buffer'. Patch by Jan Stranik
<jan@stranik.org>. (Bug#53333)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Fix execute-extended-command-for-buffer in fundamental-mode
* lisp/simple.el (execute-extended-command-for-buffer): Protect
against the current local map being nil (bug#52907).
2022-04-13 Martin Rudalics <rudalics@gmx.at>
Add workaround to handle a problem with Enlightenment WM (Bug#53298)
* src/xterm.c (handle_one_xevent): Handle setting of variable
'x_set_frame_visibility_more_laxly' when receiving an Expose or
FocusIn event (Bug#53298).
(Qexpose): Define symbol.
(x_set_frame_visibility_more_laxly): New Lisp variable.
* etc/PROBLEMS: Mention frame redraw problem with the
Enlightenment WM and 'x-set-frame-visibility-more-laxly'
workaround.
2022-04-13 Po Lu <luangruo@yahoo.com>
Fix regression leading to flickering tooltips when the mouse is moved
* lisp/tooltip.el (tooltip-show-help): Compare string with
previous tooltip string ignoring properties.
2022-04-13 Andrea Corallo <akrl@sdf.org>
* Fix native comp for non trivial function names (bug#52833)
* lisp/emacs-lisp/comp.el (comp-c-func-name): Fix native compilation
for functions with function names containing non trivial
characters (bug#52833).
This commit is the backport of e7699bf290.
Do not merge to master
2022-04-13 Kyle Meyer <kyle@kyleam.com>
Update to Org 9.5.2-9-g7ba24c
2022-04-13 Juri Linkov <juri@linkov.net>
* lisp/net/dictionary.el (dictionary-context-menu): Use package prefix.
2022-04-13 Philipp Stephani <phst@google.com>
Mark a few more map tests as unstable on Emacs 28 (Bug#46722).
At least for me, these tests still occasionally fail.
Do not merge to master.
* test/lisp/emacs-lisp/map-tests.el (test-map-into-hash-test)
(test-map-merge, test-map-merge-with, test-map-merge-empty): Mark as
unstable.
2022-04-13 Philipp Stephani <phst@google.com>
* lisp/indent.el (tab-first-completion): Fix incorrect choices.
2022-04-13 Philipp Stephani <phst@google.com>
* lisp/simple.el (undo-no-redo): Fix customization group
* lisp/progmodes/xref.el (xref-file-name-display): Fix docstring.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Avoid another segfault in 'face_at_buffer_position'
* src/xfaces.c (face_at_buffer_position): Make really sure the
default face is usable. (Bug#53254)
2022-04-13 Lars Ingebrigtsen <larsi@gnus.org>
Mark test-map-into as unstable
* test/lisp/emacs-lisp/map-tests.el (test-map-into): Mark as
unstable (bug#46722).
Do not merge to master.
2022-04-13 Philipp Stephani <phst@google.com>
Fix Edebug specification for inline functions (Bug#53068).
* lisp/emacs-lisp/inline.el (inline-quote): Fix Edebug specification.
* test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-inline): New unit
test.
2022-04-13 N. Jackson <nljlistbox2@gmail.com>
Remove mention of removed `gnus-treat-play-sounds' variable from manual
* info/gnus.info: Remove `gnus-treat-play-sounds' from
manual. According to lisp/gnus/ChangeLog.3 this variable was
removed in 2010 (bug#53192).
2022-04-13 Mattias Engdegård <mattiase@acm.org>
Revert "Fix closure-conversion of shadowed captured lambda-lifted vars"
This reverts commit 3ec8c8b3ae2359ceb8135b672e86526969c16b7e.
It was committed to a stable branch without prior discussion;
see bug#53071.
2022-04-13 Juri Linkov <juri@linkov.net>
* doc/lispref/windows.texi (Textual Scrolling): Remove obsolete text.
Remove text about scrolling the minibuffer from the buffer,
obsolete since Emacs 27 (bug#51210).
2022-04-13 Glenn Morris <rgm@gnu.org>
* lisp/files.el (lock-file-name-transforms): Doc tweaks.
2022-04-13 Mattias Engdegård <mattiase@acm.org>
Fix closure-conversion of shadowed captured lambda-lifted vars
Lambda-lifted variables (ones passed explicitly to lambda-lifted
functions) that are also captured in an outer closure and shadowed
were renamed incorrectly (bug#51982).
Reported by Paul Pogonyshev.
* lisp/emacs-lisp/cconv.el (cconv--lifted-arg): New.
(cconv-convert): Provide correct definiens for the closed-over
variable.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
* test/lisp/emacs-lisp/cconv-tests.el (cconv-tests--intern-all)
(cconv-closure-convert-remap-var): Add tests.
(cherry picked from commit 45252ad8f932c98a373ef0ab7f3363a3e27ccbe4)
2022-04-13 Philipp Stephani <phst@google.com>
Fix test lisp/cedet/semantic/bovine/gcc-tests on macOS (Bug#52431)
* test/lisp/cedet/semantic/bovine/gcc-tests.el
(semantic-gcc-test-output-parser-this-machine): Also detect Apple
clang on macOS Monterey.
(cherry picked from commit 6e52becfbe2a33c025b8c4838b3c8f06ba5a6fb8)
2022-04-13 Mattias Engdegård <mattiase@acm.org>
Don't fail flymake-tests if `gcc` actually is Clang
* test/lisp/progmodes/flymake-tests.el (flymake-tests--gcc-is-clang)
(different-diagnostic-types, included-c-header-files): Skip tests that
depend on the `gcc` command really being GCC and not Clang.
(cherry picked from commit b2167d98432a78442522b7564e22f47d75a98b6f)
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Revert "Remove the filename argument from the command line after an ELC+ELN build"
This reverts commit ffc047c896413b6e00032518fc934f08768671fa.
Please don't install anything non-trivial on the release branch
without asking first.
2022-04-13 Alan Mackenzie <acm@muc.de>
Remove the filename argument from the command line after an ELC+ELN build
This fixes bug #53164. Without this fix, bootstrap-emacs loads the source
file uselessly into a buffer after completing the compilation.
2022-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
(save-some-buffers): Simplify the fix for bug#46374
* lisp/files.el (save-some-buffers): Only check the
`save-some-buffers-function` property on functions from
`save-some-buffers-default-predicate` since callers which provide
a `pred` argument can arrange to compute `pred` themselves if needed.
* test/lisp/files-tests.el (files-tests-buffer-offer-save): Don't test
with `pred` set to `save-some-buffers-root` since it's not an
appropriate function for that any more.
2022-04-13 Stefan Kangas <stefan@marxist.se>
Improve docstring of edit-abbrevs
* lisp/abbrev.el (edit-abbrevs): Doc fix; don't use obsolete name.
Improve docstring formatting.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Revert "Fix alignment on font size change in tabulated-list-mode"
This reverts commit 2767c89db729a6106146d0aeff76678c64d4fc53.
That change caused a regression in a much more important use
case, see bug#53133.
2022-04-13 Stefan Kangas <stefan@marxist.se>
Clarify docstring of package-native-compile
* lisp/emacs-lisp/package.el (package-native-compile): Clarify
docstring.
2022-04-13 Eli Zaretskii <eliz@gnu.org>
Fix Subject "simplification" in Rmail
* lisp/mail/rmail.el (rmail-simplified-subject): Match against
"[external]" _after_ decoding the Subject by RFC-2047.
2022-04-13 Stefan Kangas <stefan@marxist.se>
Bump Emacs version to 28.0.91
* README:
* configure.ac:
* msdos/sed2v2.inp:
* nt/README.W32: Bump Emacs version to 28.0.91.
2022-01-05 Dmitry Gutov <dgutov@yandex.ru>
Fix vc-git with old Git over Tramp and cygwin-mount.el
@ -234065,6 +234978,7 @@
This file records repository revisions from
commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
2022-04-13e39829812098d8269eafbc0fcb98959ee5bb7 (inclusive).
commit e7aa3ece52d26cc7e4d3f3990aff56127389779f (inclusive).
See ChangeLog.2 for earlier changes.

11
INSTALL
View file

@ -243,6 +243,11 @@ This build is only supported with GTK+ version 3, and it is an error
to specify any other X-specific configuration option when PGTK is
enabled.
If you use exclusively X, do not use the PGTK port. There are a
number of respects in which the regular --with-x-toolkit=gtk build
works better. The PGTK port should not be considered a simple upgrade
from --with-x-toolkit=gtk.
With the PGTK build, you will be able to switch between running Emacs
on X, Wayland and Broadway using the 'GDK_BACKEND' environment
variable. GTK+ should automatically detect and use the correct value
@ -353,9 +358,9 @@ Use --without-toolkit-scroll-bars to disable Motif or Xaw3d scroll bars.
Use --without-xim to inhibit the default use of X Input Methods.
In this case, the X resource useXIM can be used to turn on use of XIM.
Use --with-xinput2 to enable the use of version 2 of the X Input
Extension. This enables support for touchscreens, pinch gestures, and
scroll wheels that report scroll deltas at pixel-level precision.
Use --without-xinput2 to disable the use of version 2 of the X Input
Extension. This disables support for touchscreens, pinch gestures,
and scroll wheels that report scroll deltas at pixel-level precision.
Use --disable-largefile to omit support for files larger than 2GB, and
--disable-year2038 to omit support for timestamps past the year 2038,

View file

@ -24,6 +24,7 @@ DARWIN_OS Compiling on macOS or pure Darwin (and using s/darwin.h).
SOLARIS2
USG
USG5_4
HAIKU Compiling on Haiku.
** Distinguishing GUIs **
@ -32,16 +33,38 @@ HAVE_NS Use the NeXT/OpenStep/Cocoa UI under macOS or GNUstep.
NS_IMPL_GNUSTEP Compile support for GNUstep implementation of NS GUI API.
NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API.
HAVE_X11 Compile support for the X11 GUI.
HAVE_PGTK Compile support for using GTK itself without directly using X Windows APIs.
HAVE_HAIKU Compile support for the Haiku window system.
HAVE_X_WINDOWS Compile support for X Window system
(It looks like, nowadays, if HAVE_X11 is set, HAVE_X_WINDOWS must
be, and vice versa. At least, this is true for configure, and
msdos; not sure about nt.)
HAVE_X11R6
HAVE_X11R6_XIM
HAVE_X11XTR6
** X Windows features **
HAVE_X11R6 Whether or not the system has X11R6. (Always defined.)
HAVE_X11R6_XIM Whether or not the system supports XIM features introduced in R6.
HAVE_X11XTR6 Whether or not the Xt is from X11R6 or newer.
USE_LUCID Use the Lucid toolkit for menus&scrollbars. Requires HAVE_X11.
USE_MOTIF Use the Motif toolkit for menus&scrollbars. Requires HAVE_X11.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11.
USE_GTK Use the Gtk toolkit for menus&scrollbars. Requires HAVE_X11 or HAVE_PGTK.
HAVE_GTK3 Use GTK version 3 or later. Requires HAVE_X11.
HAVE_XCB_SHAPE Whether or not XCB supports the Nonrectangular Window Shape extension.
HAVE_XCOMPOSITE Whether or not the XCOMPOSITE extension library is present.
HAVE_XDBE Whether or not to use the Xdbe extension for double buffering.
HAVE_XFIXES Whether or not the Xfixes extension library is present.
HAVE_XINERAMA Whether or not the Xinerama extension library is present.
HAVE_XINPUT2 Whether or not to use version 2 of the X Input Extension for input.
HAVE_XINPUT2_1 Whether or not version 2.1 of the X Input Extension is supported.
HAVE_XINPUT2_2 Whether or not version 2.2 of the X Input Extension is supported.
HAVE_XINPUT2_3 Whether or not version 2.3 of the X Input Extension is supported.
HAVE_XINPUT2_4 Whether or not version 2.4 of the X Input Extension is supported.
HAVE_XKB Whether or not the XKB extension library is present.
HAVE_XRANDR Whether or not the RandR extension library is present.
HAVE_XSHAPE Whether or not the Nonrectangular Window Shape extension library is present.
HAVE_XSYNC Whether or not the X Synchronization Extension library is present.
USE_XCB Whether or not the XCB library is used to optimize some X requests.
** Frame types **

View file

@ -602,76 +602,81 @@ style=\"text-align:left\">")
(forward-line 1)
(setq done t)))))
(let (done open-td tag desc)
;; Convert the list that Makeinfo made into a table.
(or (search-forward "<ul class=\"menu\">" nil t)
;; FIXME? The following search seems dangerously lax.
(search-forward "<ul>"))
(replace-match "<table style=\"float:left\" width=\"100%\">")
(forward-line 1)
(while (not done)
(cond
((or (looking-at "<li>\\(<a.+</a>\\):[ \t]+\\(.*\\)$")
(looking-at "<li>\\(<a.+</a>\\)$"))
(setq tag (match-string 1))
(setq desc (match-string 2))
(replace-match "" t t)
(when open-td
(save-excursion
(forward-char -1)
(skip-chars-backward " ")
(delete-region (point) (line-end-position))
(insert "</td>\n </tr>")))
(insert " <tr>\n ")
(if table-workaround
;; This works around a Firefox bug in the mono file.
(insert "<td bgcolor=\"white\">")
(insert "<td>"))
(insert tag "</td>\n <td>" (or desc ""))
(setq open-td t))
((eq (char-after) ?\n)
(delete-char 1)
;; Negate the following `forward-line'.
(forward-line -1))
((looking-at "<!-- ")
(search-forward "-->"))
((looking-at "<p>[- ]*The Detailed Node Listing[- \n]*")
(replace-match " </td></tr></table>\n
;; Texinfo 6.8 and later doesn't produce <ul class="menu"> lists
;; for the TOC menu, and the "description" part of each menu
;; item is not there anymore. So for HTML manuals produced by
;; those newer versions of Texinfo we punt and leave the menu in
;; its original form.
(when (or (search-forward "<ul class=\"menu\">" nil t)
;; FIXME? The following search seems dangerously lax.
(search-forward "<ul>"))
;; Convert the list that Makeinfo made into a table.
(replace-match "<table style=\"float:left\" width=\"100%\">")
(forward-line 1)
(while (not done)
(cond
((or (looking-at "<li>\\(<a.+</a>\\):[ \t]+\\(.*\\)$")
(looking-at "<li>\\(<a.+</a>\\)$"))
(setq tag (match-string 1))
(setq desc (match-string 2))
(replace-match "" t t)
(when open-td
(save-excursion
(forward-char -1)
(skip-chars-backward " ")
(delete-region (point) (line-end-position))
(insert "</td>\n </tr>")))
(insert " <tr>\n ")
(if table-workaround
;; This works around a Firefox bug in the mono file.
(insert "<td bgcolor=\"white\">")
(insert "<td>"))
(insert tag "</td>\n <td>" (or desc ""))
(setq open-td t))
((eq (char-after) ?\n)
(delete-char 1)
;; Negate the following `forward-line'.
(forward-line -1))
((looking-at "<!-- ")
(search-forward "-->"))
((looking-at "<p>[- ]*The Detailed Node Listing[- \n]*")
(replace-match " </td></tr></table>\n
<h3>Detailed Node Listing</h3>\n\n" t t)
(search-forward "<p>")
;; FIXME Fragile!
;; The Emacs and Elisp manual have some text at the
;; start of the detailed menu that is not part of the menu.
;; Other manuals do not.
(if (looking-at "Here are some other nodes")
(search-forward "<p>"))
(goto-char (match-beginning 0))
(skip-chars-backward "\n ")
(setq open-td nil)
(insert "</p>\n\n<table style=\"float:left\" width=\"100%\">"))
((looking-at "</li></ul>")
(replace-match "" t t))
((looking-at "<p>")
(replace-match "" t t)
(when open-td
(insert " </td></tr>")
(setq open-td nil))
(insert " <tr>
(search-forward "<p>")
;; FIXME Fragile!
;; The Emacs and Elisp manual have some text at the
;; start of the detailed menu that is not part of the menu.
;; Other manuals do not.
(if (looking-at "Here are some other nodes")
(search-forward "<p>"))
(goto-char (match-beginning 0))
(skip-chars-backward "\n ")
(setq open-td nil)
(insert "</p>\n\n<table style=\"float:left\" width=\"100%\">"))
((looking-at "</li></ul>")
(replace-match "" t t))
((looking-at "<p>")
(replace-match "" t t)
(when open-td
(insert " </td></tr>")
(setq open-td nil))
(insert " <tr>
<th colspan=\"2\" align=\"left\" style=\"text-align:left\">")
(if (re-search-forward "</p>[ \t\n]*<ul class=\"menu\">" nil t)
(replace-match " </th></tr>")))
((looking-at "[ \t]*</ul>[ \t]*$")
(replace-match
(if open-td
" </td></tr>\n</table>"
"</table>") t t)
(setq done t))
(t
(if (eobp)
(error "Parse error in %s"
(file-name-nondirectory buffer-file-name)))
(unless open-td
(setq done t))))
(forward-line 1)))))
(if (re-search-forward "</p>[ \t\n]*<ul class=\"menu\">" nil t)
(replace-match " </th></tr>")))
((looking-at "[ \t]*</ul>[ \t]*$")
(replace-match
(if open-td
" </td></tr>\n</table>"
"</table>") t t)
(setq done t))
(t
(if (eobp)
(error "Parse error in %s"
(file-name-nondirectory buffer-file-name)))
(unless open-td
(setq done t))))
(forward-line 1))))))
(defconst make-manuals-dist-output-variables

View file

@ -68,6 +68,7 @@ files.")
(nil "castor@my-dejanews")
(nil "chengang31@gmail.com")
(nil "chuntaro")
("Clément Pit-Claudel" "Clément Pit--Claudel")
("David Abrahams" "Dave Abrahams")
("David J. Biesack" "David Biesack")
("David De La Harpe Golden" "David Golden")
@ -242,10 +243,14 @@ files.")
("Vinicius Jose Latorre" "viniciusjl")
("Gaby Launay" "galaunay")
("Dick R. Chiang" "dickmao")
("Lin Zhou" "georgealbert@qq.com")
(nil "yan@metatem.net")
(nil "gnu_lists@halloleo.hailmail.net")
)
"Alist of author aliases.
Each entry is of the form (REALNAME REGEXP...). If an author's name
Each entry is of the form (REALNAME REGEXP...).
If an author's full name, as in \"J.R.Hacker <foobar.com>\",
matches one of the REGEXPs, use REALNAME instead.
If REALNAME is nil, ignore that author.")
@ -498,6 +503,7 @@ Changes to files matching one of the regexps in this list are not listed.")
"nextstep/WISHLIST"
;; Removed, replaced by gitmerge.el
"admin/bzrmerge.el"
"bzrmerge.el"
;; Removed in commit f5090b91299
"lib/fdatasync.c"
;; Removed as obsolete
@ -512,8 +518,11 @@ Changes to files matching one of the regexps in this list are not listed.")
"MORE.STUFF"
"notes/font-backend"
"src/ftxfont.c"
"ftxfont.c"
"src/ptr-bounds.h"
"obsolete/options.el"
"obsolete/old-whitespace.el"
"obsolete/lucid.el"
;; ada-mode has been deleted, now in GNU ELPA
"ada-mode.texi"
"doc/misc/ada-mode.texi"
@ -874,11 +883,9 @@ Changes to files in this list are not listed.")
"gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el"
"dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
"gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
"eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el"
"format-spec.el" "gnus-move.el" "gnus-sync.el"
"auth-source.el" "ecomplete.el" "gravatar.el" "mailcap.el" "plstore.el"
"pop3.el" "qp.el" "registry.el" "rfc2231.el" "rtree.el"
"sieve.el" "sieve-mode.el" "gnus-ems.el"
"earcon.el" "gnus-audio.el" "encrypt.el"
"gnus-move.el" "gnus-sync.el"
"gnus-ems.el"
;; doc
"getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
"back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
@ -959,6 +966,43 @@ in the repository.")
;; NB So only add a directory if needed to disambiguate.
;; FIXME?
;; Although perhaps we could let authors-disambiguate-file-name do that?
;;
;; WARNING: The semantics of these entries is tricky to grasp without
;; reading the code!
;; The rule is: for every file that was renamed or moved to another
;; directory, add an entry (OLD-NAME . NEW-BASENAME), where OLD-NAME
;; is the old name of the file as it appears in the ChangeLog files,
;; and NEW-BASENAME is the _basename_ of its new name. Yes, this
;; means that a file which was moved to another directory but kept its
;; basename will have a seemingly-silly entry ("foo" . "foo"). (Told
;; you: this is tricky!) If the moved/renamed file was mentioned in
;; several ChangeLog files with different leading directories, you
;; need to provide an entry for each such instance. For example, if
;; some ChangeLog mentioned a moved file as lisp/gnus/something.el and
;; another ChangeLog mentioned it as gnus/something.el, you need to
;; have two entries:
;;
;; ("gnus/something.el" . "something.el")
;; ("lisp/gnus/something.el" . "something.el")
;;
;; The important part is that the car of the entry should be identical
;; to how a file was mentioned in the respective ChangeLog. It is
;; advisable to run a Grep command such as
;;
;; fgrep -R BASENAME . --include='ChangeLog*'
;;
;; where BASENAME is the old basename of the renamed file. This will
;; show all the different reference forms of the file in the various
;; ChangeLog* files, and you can then prepare a separate entry for
;; each reference form.
;;
;; The cdr of the entry should generally be only the basename of the
;; file's current name, because that's how AUTHORS references files.
;; It _can_ have leading directories, but that is only
;; needed/advisable if there are several files in the tree that have
;; the same basename, and you want to disambiguate them, so that
;; people who actually contributed to different files aren't mentioned
;; as if they contributed to the same single file.
(defconst authors-renamed-files-alist
'(("nt.c" . "w32.c") ("nt.h" . "w32.h")
("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h")
@ -966,8 +1010,9 @@ in the repository.")
("ntproc.c" . "w32proc.c")
("w32console.c" . "w32term.c")
("unexnt.c" . "unexw32.c")
("s/windowsnt.h" . "s/ms-w32.h")
("s/ms-w32.h" . "inc/ms-w32.h")
("m/windowsnt.h" . "ms-w32.h")
("s/windowsnt.h" . "ms-w32.h")
("s/ms-w32.h" . "ms-w32.h")
("src/config.h" . "config.h")
("winnt.el" . "w32-fns.el")
("linux.h" . "gnu-linux.h")
@ -990,6 +1035,10 @@ in the repository.")
("INSTALL.MSYS" . "INSTALL")
("server.c" . "emacsserver.c")
("lib-src/etags.c" . "etags.c")
;; gnulib
("lib/strftime.c" . "nstrftime.c")
("src/mini-gmp.c" . "mini-gmp.c")
("src/mini-gmp.h" . "mini-gmp.h")
;; msdos/
("is-exec.c" . "is_exec.c")
("enriched.doc" . "enriched.txt")
@ -1073,8 +1122,10 @@ in the repository.")
("nxml/test.invalid.xml" . "test-invalid.xml")
("nxml/test.valid.xml" . "test-valid.xml")
("automated/Makefile.in" . "test/Makefile.in")
("test/rmailmm.el" . "test/manual/rmailmm.el")
("rmailmm.el" . "test/manual/rmailmm.el")
;; rmailmm tests wandered from test/ to test/manual to test/lisp/mail/
("rmailmm.el" . "rmailmm-tests.el")
("test/rmailmm.el" . "rmailmm-tests.el")
("test/manual/rmailmm.el" . "rmailmm-tests.el")
;; The one in lisp is eshell/eshell.el.
("eshell.el" . "eshell-tests.el")
("automated/eshell.el" . "eshell-tests.el")
@ -1106,22 +1157,79 @@ in the repository.")
("major.texi" . "modes.texi")
("msdog-xtra.texi" . "msdos-xtra.texi")
("msdog.texi" . "msdos.texi")
;; Moved from lisp/gnus/ to lisp/
("auth-source.el" . "auth-source.el")
("lisp/gnus/auth-source.el" . "auth-source.el")
("ecomplete.el" . "ecomplete.el")
("format-spec.el" . "format-spec.el")
("gnus/format-spec.el" . "format-spec.el")
("lisp/gnus/ecomplete.el" . "ecomplete.el")
("plstore.el" . "plstore.el")
("lisp/gnus/plstore.el" . "plstore.el")
("registry.el" . "registry.el")
("lisp/gnus/registry.el" . "registry.el")
("rtree.el" . "rtree.el")
;; Moved from lisp/gnus/ to lisp/calendar/
("time-date.el" . "calendar/time-date.el")
("time-date.el" . "time-date.el")
;; Moved from lisp/gnus/ to lisp/mail/
("binhex.el" . "mail/binhex.el")
("uudecode.el" . "mail/uudecode.el")
("mail-parse.el" . "mail/mail-parse.el")
("yenc.el" . "mail/yenc.el")
("flow-fill.el" . "mail/flow-fill.el")
("ietf-drums.el" . "mail/ietf-drums.el")
("sieve-manage.el" . "mail/sieve-manage.el")
("binhex.el" . "binhex.el")
("gnus/binhex.el" . "binhex.el")
("uudecode.el" . "uudecode.el")
("gnus/uudecode.el" . "uudecode.el")
("mail-parse.el" . "mail-parse.el")
("gnus/mail-parse.el" . "mail-parse.el")
("mail-prsvr.el" . "mail-prsvr.el")
("gnus/mail-prsvr.el" . "mail-prsvr.el")
("yenc.el" . "yenc.el")
("flow-fill.el" . "flow-fill.el")
("gnus/flow-fill.el" . "flow-fill.el")
("ietf-drums.el" . "ietf-drums.el")
("gnus/ietf-drums.el" . "ietf-drums.el")
("pop3.el" . "pop3.el")
("mail/pop3.el" . "pop3.el")
("gnus/pop3.el" . "pop3.el")
("lisp/gnus/pop3.el" . "pop3.el")
("qp.el" . "qp.el")
("gnus/qp.el" . "qp.el")
("lisp/gnus/qp.el" . "qp.el")
("rfc2045.el" . "rfc2045.el")
("gnus/rfc2045.el" . "rfc2045.el")
("rfc2047.el" . "rfc2047.el")
("gnus/rfc2047.el" . "rfc2047.el")
("rfc2231.el" . "rfc2231.el")
("gnus/rfc2231.el" . "rfc2231.el")
("lisp/gnus/rfc2231.el" . "rfc2231.el")
;; Moved from lisp/gnus/ to lisp/image/
("compface.el" . "image/compface.el")
("compface.el" . "compface.el")
("gravatar.el" . "gravatar.el")
("lisp/gnus/gravatar.el" . "gravatar.el")
;; Moved from lisp/gnus/ to lisp/net/
("eww.el" . "eww.el")
("net/eww.el" . "eww.el")
("lisp/new/eww.el" . "eww.el") ; an actual typo in ChangeLog.3
("gssapi.el" . "gssapi.el")
("lisp/gnus/gssapi.el" . "gssapi.el")
("imap.el" . "net/imap.el")
("mailcap.el" . "mailcap.el")
("gnus/mailcap.el" . "mailcap.el")
("lisp/gnus/mailcap.el" . "mailcap.el")
("rfc2104.el" . "net/rfc2104.el")
("starttls.el" . "net/starttls.el")
("starttls.el" . "starttls.el")
("lisp/net/starttls.el" . "starttls.el") ; moved to obsolete/
("shr.el" . "shr.el")
("net/shr.el" . "shr.el")
("shr-color.el" . "shr-color.el")
("sieve-manage.el" . "sieve-manage.el")
("sieve-mode.el" . "sieve-mode.el")
("sieve.el" . "sieve.el")
("lisp/gnus/sieve-manage.el" . "sieve-manage.el")
("lisp/gnus/sieve-mode.el" . "sieve-mode.el")
("lisp/gnus/sieve.el" . "sieve.el")
;; Moved from lisp/gnus/ to lisp/international
("rfc1843.el" . "rfc1843.el")
("gnus/rfc1843.el" . "rfc1843.el")
("utf7.el" . "utf7.el")
("gnus/utf7.el" . "utf7.el")
;; And from emacs/ to misc/ and back again.
("ns-emacs.texi" . "macos.texi")
("overrides.texi" . "gnus-overrides.texi")
@ -1136,7 +1244,7 @@ in the repository.")
("ED.WORSHIP" . "JOKES")
("GNU.JOKES" . "JOKES")
("CHARACTERS" . "TODO")
("lisp/character-fold.el" . "lisp/char-fold.el")
("lisp/character-fold.el" . "char-fold.el")
("test/automated/character-fold-tests.el" . "char-fold-tests.el")
("test/automated/char-fold-tests.el" . "char-fold-tests.el")
("test/lisp/character-fold-tests.el" . "char-fold-tests.el")
@ -1178,7 +1286,8 @@ in the repository.")
("grammars" . "grammars")
;; Moved from lisp/emacs-lisp/ to admin/.
("emacs-lisp/authors.el" . "authors.el")
("emacs-lisp/find-gc.el" . "admin/find-gc.el")
("find-gc.el" . "find-gc.el")
("emacs-lisp/find-gc.el" . "find-gc.el")
;; From etc to lisp/cedet/semantic/.
("grammars/bovine-grammar.el" . "bovine/grammar.el")
("grammars/wisent-grammar.el" . "wisent/grammar.el")
@ -1186,28 +1295,41 @@ in the repository.")
("nt/README.W32" . "README.W32")
("notes/BRANCH" . "notes/repo")
("notes/bzr" . "notes/repo")
;; moved from lisp/ to lisp/net/
("lisp/pinentry.el" . "lisp/net/pinentry.el")
;; moved from lisp/ to lisp/net/, then removed
("pinentry.el" . "pinentry.el")
("lisp/pinentry.el" . "pinentry.el")
("lisp/net/pinentry.el" . "pinentry.el")
;; module.* moved to emacs-module.*
("src/module.h" . "src/emacs-module.h")
("src/module.c" . "src/emacs-module.c")
;; gnulib
("lib/strftime.c" . "lib/nstrftime.c")
("test/src/regex-tests.el" . "test/src/regex-emacs-tests.el")
("test/lisp/emacs-lisp/cl-tests.el" . "test/lisp/obsolete/cl-tests.el")
("lisp/net/starttls.el" . "lisp/obsolete/starttls.el")
("url-ns.el" . "lisp/obsolete/url-ns.el")
("gnus-news.texi" . "doc/misc/gnus.texi")
("lisp/multifile.el" . "lisp/fileloop.el")
("lisp/emacs-lisp/thread.el" . "lisp/thread.el")
("lisp/emacs-lisp/cl.el" . "lisp/emacs-lisp/cl-lib.el")
("lisp/progmodes/mantemp.el" . "lisp/obsolete/mantemp.el")
("src/mini-gmp.c" . "lib/mini-gmp.c")
("src/mini-gmp.h" . "lib/mini-gmp.h")
("src/module.h" . "emacs-module.h")
("src/module.c" . "emacs-module.c")
("test/src/regex-tests.el" . "regex-emacs-tests.el")
("test/lisp/emacs-lisp/cl-tests.el" . "cl-tests.el")
("url-ns.el" . "url-ns.el")
("gnus-news.texi" . "gnus.texi")
("doc/misc/gnus-news.texi" . "gnus.texi")
("lisp/multifile.el" . "fileloop.el")
("lisp/emacs-lisp/thread.el" . "thread.el")
;; cl.el was retired, replaced by cl-lib.el, and we want to
;; pretend they are the same file...
("emacs-lisp/cl.el" . "cl-lib.el")
("lisp/emacs-lisp/cl.el" . "cl-lib.el")
("lisp/obsolete/cl.el" . "cl-lib.el")
("mantemp.el" . "mantemp.el")
("lisp/progmodes/mantemp.el" . "mantemp.el")
("progmodes/mantemp.el" . "mantemp.el")
("sysdep.c" . "src/sysdep.c")
;; nnir.el started in lisp/gnus/ChangeLog.*, then was
;; lisp/gnus/nnir.el in ChangeLog.[123], and is now
;; lisp/obsolete/nnir.el.
("nnir.el" . "nnir.el")
("lisp/gnus/nnir.el" . "nnir.el")
("src/regex.c" . "emacs-regex.c")
("src/regex.h" . "emacs-regex.h")
;; regex.[ch] are mentioned as src/regex.[ch] in ChangeLog.[123],
;; but as just regex.[ch] in src/ChangeLog.*, so we need 2 entries
;; for each one of them.
("regex.c" . "regex-emacs.c")
("regex.h" . "regex-emacs.h")
("src/regex.c" . "regex-emacs.c")
("src/regex.h" . "regex-emacs.h")
("test/manual/rmailmm.el" . "rmailmm-tests.el")
("test/lisp/cedet/semantic-utest-fmt.el" . "format-tests.el")
("test/lisp/emacs-lisp/tabulated-list-test.el" . "tabulated-list-tests.el")
@ -1368,10 +1490,14 @@ Additionally, for these logs we apply the `lax' elements of
(defun authors-canonical-file-name (file log-file pos author)
"Return canonical file name for FILE found in LOG-FILE.
FILE is the file name as it appears in LOG-FILE, including any
leading directories mentioned there.
LOG-FILE is an absolute file name of the log file we are scanning.
Checks whether FILE is a valid (existing) file name, has been renamed,
or is on the list of removed files. Returns the non-directory part of
the file name. Only uses the LOG-FILE position POS and associated AUTHOR
to print a message if FILE is not found."
the file name to use for FILE in the \"AUTHORS\" file.
Only uses the LOG-FILE position POS and associated AUTHOR to print a
message if FILE is not found."
;; FILE should be re-checked in every different directory associated
;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the
;; same as that from top-level/ChangeLog.
@ -1381,6 +1507,8 @@ to print a message if FILE is not found."
(if entry
(cdr entry)
(setq relname (file-name-nondirectory file))
;; File names in `authors-valid-file-names' are OK by
;; definition, so no need to check those.
(if (or (member file authors-valid-file-names)
(member relname authors-valid-file-names)
(file-exists-p file)

View file

@ -156,7 +156,7 @@ Names should be as they appear in loaddefs.el.")
"Set by `cus-test-apropos' to a list of options with :get property.")
(defvar cus-test-vars-with-changed-state nil
"Set by `cus-test-apropos' to a list of options with state 'changed.")
"Set by `cus-test-apropos' to a list of options with state \\='changed.")
(defvar cus-test-deps-errors nil
"List of require/load problems found by `cus-test-deps'.")

View file

@ -43,18 +43,42 @@ General steps (for each step, check for possible errors):
because some of the commands below run Make, so they need
Makefiles to be present.
For Emacs 28, and as long as --with-native-compilation is not the
default, the tree needs to be configured with native-compilation
enabled, to ensure all the pertinent *.elc files will end up in
the tarball. Otherwise, the *.eln files might not build correctly
on the user's system.
For Emacs 28 and later, as long as --with-native-compilation is
not the default, the tree needs to be configured with
native-compilation enabled, to ensure all the pertinent *.elc
files will end up in the tarball. Otherwise, the *.eln files
might not build correctly on the user's system.
For a release (as opposed to pretest), delete any left-over "---"
and "+++" markers from etc/NEWS, as well as the "Temporary note"
section at the beginning of that file, and commit etc/NEWS if it
was modified.
2. Regenerate the versioned ChangeLog.N and etc/AUTHORS files.
The "M-x authors" command below will first update the current
versioned ChangeLog.N file. For this to work correctly, make sure
the top-level Makefile says
PREFERRED_BRANCH = emacs-NN
where NN is the version on the release branch from which you are
producing the tarball. If NN is incorrect, update Makefile.in and
re-run 'configure' to update Makefile.
If the versioned ChangeLog.N file is too large, start a new one
by bumping N, and also update the line in top-level Makefile.in
which says
CHANGELOG_HISTORY_INDEX_MAX = N
by incrementing the value of N by 1; then regenerate Makefile.
Now:
2. Regenerate the etc/AUTHORS file:
M-: (require 'authors) RET
M-x authors RET
(This first updates the current versioned ChangeLog.N)
If this says "Problem updating ChangeLog", find the reason for the
failure of the command it runs, viz.:
@ -232,7 +256,9 @@ General steps (for each step, check for possible errors):
FILE.gz FILE.xz ...
You only need the --user part if you have multiple GPG keys and do
not want to use the default.
not want to use the default. Instead of "your@gpg.key.email" you
could also use the fingerprint of the key, a 40-digit hex number.
(Alternatively, define default-key in your ~/.gnupg/gpg.conf file.)
Obviously, if you do not have a fast uplink, be prepared for the
upload to take a while.
@ -308,17 +334,74 @@ looks like this:
</div>
</div>
Regenerate the various manuals in manual/.
The scripts admin/make-manuals and admin/upload-manuals summarize the process.
The file download.html may need to be updated, for example if the
MS-Windows binaries will be signed by a different person/key than
those mentioned there.
If you have Texinfo installed locally, make-manuals might fail if it
cannot find epsf.tex. In that case define in the environment
Next, regenerate the various manuals in HTML, PDF, and PS formats:
TEXINPUTS=:/path/to/texinfo-tree/doc
Invoke ./admin/make-manuals from the top-level directory of the
Emacs source tree that contains the manuals for which you want to
produce HTML docs. This creates the 'manual' directory and
populates it with the necessary files.
where /path/to/texinfo-tree is the absolute file name of the top-level
directory where you have the Texinfo source tree. Then re-run
make-manuals.
If you have Texinfo installed locally, make-manuals might fail if it
cannot find epsf.tex. In that case define in the environment
TEXINPUTS=:/path/to/texinfo-tree/doc
where /path/to/texinfo-tree is the absolute file name of the
top-level directory where you have the Texinfo source tree. Then
re-run make-manuals.
make-manuals can also fail if the HTML manuals produced by Texinfo
violate some of the assumptions admin/admin.el makes about the
format of the produced HTML. Debug these problems and resolve them,
then re-run make-manuals. (Each time you run make-manuals, it
empties the manuals/ directory and regenerates the files there, but
if the files in manuals/ can be used without regeneration, i.e. if
the problem you solved doesn't affect the produced HTML, you can
invoke make-manuals with the -c switch, which will make the process
much faster.)
Now change to the 'manual' directory and invoke upload-manuals:
../admin/updload-manuals /path/to/webpages/cvs/checkout
where /path/to/webpages/cvs/checkout is the place where you have the
CVS checkout of the Emacs Web pages, with subdirectories 'manual'
and 'refcards'. This moves the produced manuals to directories in
the Web pages CVS checkout tree, and also invokes CVS commands to
commit changed files, add new files, and remove stale files that are
no longer part of the manuals.
If upload-manuals fails, resolve the problems and re-invoke it.
This requires running make-manuals again, since upload-manuals
destructively modifies the 'manual' directory where you invoke it.
Also, upload-manuals invokes "cvs commit -f", so if you run it
several times, some files will be committed more than once even
though they were not changed in-between. Suck it up.
All the added and removed files need to be committed, so next fire
up Emacs, type "C-x v d" to invoke vc-dir on the Web pages checkout,
and use "C-x v v" and other VC commands to commit all the files that
upload-manuals didn't automatically commit. (You can also do that
with manual CVS commands, of course, but this is not recommended.)
Next, make sure that manual/index.html file is consistent with the
info/dir file in the branch for which you are producing the manuals,
in that it mentions all the manuals. It could be outdated if
manuals were added or removed since the last release.
For each new manual, a file manual/MANUAL.html (where MANUAL is the
name of the manual) should be created from the template in
manual/eww.html, after editing the title and the Copyright years,
and the links in it changed to point to the appropriate files in the
manual/html_node/ and manual/html_mono/ subdirectories.
In addition, the file refcards/index.html should be audited to make
sure it includes the up-to-date list of refcards actually produced
and put under that subdirectory.
Browsing <https://web.cvs.savannah.gnu.org/viewvc/?root=emacs> is one
way to check for any files that still need updating.

View file

@ -8,7 +8,8 @@ NOTES FOR EMACS CONTINUOUS BUILD ON EMBA
A continuous build for Emacs can be found at
<https://emba.gnu.org/emacs/emacs>, a Gitlab instance. It watches the
Emacs git repository and starts a pipeline (jobset) if there are new
changes. This happens for all Emacs branches.
changes. This happens for all Emacs branches which belong to the
defined workflow (see below).
* Mail notifications
@ -32,7 +33,11 @@ The Emacs jobset is defined in the Emacs source tree, file
'test/infra'. They could be adapted for every Emacs branch, see
<https://emba.gnu.org/help/ci/yaml/README.md>.
A jobset on Gitlab is called pipeline. Emacs pipelines run through
Only branches whose name starts with 'master', 'emacs', 'feature', or
'fix' are considered. This is declared in the workflow rules of file
'test/infra/gitlab-ci.yml'.
A jobset on Gitlab is called a pipeline. Emacs pipelines run through
the stages 'build-images', 'platform-images' and 'native-comp-images'
(create an Emacs instance by 'make bootstrap' with different
configuration parameters) as well as 'normal', 'platforms' and
@ -41,11 +46,11 @@ configuration parameters) as well as 'normal', 'platforms' and
The jobs for stage 'normal' are contained in the file
'test/infra/test-jobs.yml'. This file is generated by calling 'make
-C test generate-test-jobs' in the Emacs source tree, and the
resulting file shall be pushed to the Emacs git repository afterwards.
resulting file should be pushed to the Emacs git repository afterwards.
Every job runs in a Debian docker container. It uses the local clone
of the Emacs git repository to perform a bootstrap and test of Emacs.
This could happen for several jobs with changed configuration, compile
This could happen for several jobs with changed configuration, compile,
and test parameters.
The 'build-image-*' jobs of the different '*-images' stages run only

View file

@ -36,6 +36,12 @@ copyright.html in admin/unidata (some of them might need trailing
whitespace removed before they can be committed to the Emacs
repository).
Next, review the assignment of default values of the Bidi Class
property to blocks in the file extracted/DerivedBidiClass.txt from the
UCD (search for "unassigned" in that file). Any changes should be
reflected in the unidata-gen.el file, where it sets up the default
values around line 210.
Then Emacs should be rebuilt for them to take effect. Rebuilding
Emacs updates several derived files elsewhere in the Emacs source
tree, mainly in lisp/international/.

View file

@ -209,9 +209,15 @@ Property value is one of the following symbols:
;; The assignment of default values to blocks of code points
;; follows the file DerivedBidiClass.txt from the Unicode
;; Character Database (UCD).
(L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
(#x0590 #x05FF R) (#x07C0 #x08FF R)
(#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
(L (#x0600 #x07BF AL) (#x0860 #x08FF AL) (#xFB50 #xFDCF AL)
(#xFDF0 #xFDFF AL) (#xFE70 #xFEFF AL) (#x10D00 #x10D3F AL)
(#x10F30 #x10F6F AL) (#x1EC70 #x1ECBF AL) (#x1ED00 #x1ED4F AL)
(#x1EE00 #x1EEFF AL)
(#x0590 #x05FF R) (#x07C0 #x085F R) (#xFB1D #xFB4F R)
(#x10800 #x10CFF R) (#x10D40 #x10F2F R) (#x10F70 #x10FFF R)
(#x1E800 #x1EC6F R) (#x1ECC0 #x1ECFF R) (#x1ED50 #x1EDFF R)
(#x1EF00 #x1EFFF R)
(#x20A0 #x20CF ET))
;; The order of elements must be in sync with bidi_type_t in
;; src/dispextern.h.
(L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI

View file

@ -334,7 +334,10 @@ for d in html_node/*; do
[ -e $webdir/manual/$d ] || {
echo "New directory: $d"
mkdir $webdir/manual/$d
$cvs add $webdir/manual/$d || die "add error"
(
cd $webdir/manual
$cvs add $d || die "add error"
)
}
new=

View file

@ -491,7 +491,7 @@ OPTION_DEFAULT_ON([modules],[don't compile with dynamic modules support])
OPTION_DEFAULT_ON([threads],[don't compile with elisp threading support])
OPTION_DEFAULT_OFF([native-compilation],[compile with Emacs Lisp native compiler support])
OPTION_DEFAULT_OFF([cygwin32-native-compilation],[use native compilation on 32-bit Cygwin])
OPTION_DEFAULT_OFF([xinput2],[use version 2 of the X Input Extension for input])
OPTION_DEFAULT_ON([xinput2],[don't use version 2 of the X Input Extension for input])
AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
[use a file notification library (LIB one of: yes, inotify, kqueue, gfile, w32, no)])],
@ -966,6 +966,17 @@ AC_DEFUN([gl_GCC_VERSION_IFELSE],
]
)
# clang is unduly picky about some things.
AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#ifndef __clang__
error "not clang";
#endif
]])],
[emacs_cv_clang=yes],
[emacs_cv_clang=no])])
AC_ARG_ENABLE([gcc-warnings],
[AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
[control generation of GCC warnings. The TYPE 'yes'
@ -985,7 +996,11 @@ AC_ARG_ENABLE([gcc-warnings],
# just a release imported into Git for patch management.
gl_gcc_warnings=no
if test -e "$srcdir"/.git && test ! -f "$srcdir"/.tarball-version; then
gl_GCC_VERSION_IFELSE([5], [3], [gl_gcc_warnings=warn-only])
# Clang typically identifies itself as GCC 4.2 or something similar
# even if it is recent enough to accept the warnings we enable.
AS_IF([test "$emacs_cv_clang" = yes],
[gl_gcc_warnings=warn-only],
[gl_GCC_VERSION_IFELSE([5], [3], [gl_gcc_warnings=warn-only])])
fi])
AC_ARG_ENABLE([check-lisp-object-type],
@ -997,17 +1012,6 @@ if test "$enable_check_lisp_object_type" = yes; then
[Define to enable compile-time checks for the Lisp_Object data type.])
fi
# clang is unduly picky about some things.
AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#ifndef __clang__
error "not clang";
#endif
]])],
[emacs_cv_clang=yes],
[emacs_cv_clang=no])])
WERROR_CFLAGS=
# When compiling with GCC, prefer -isystem to -I when including system
# include files, to avoid generating useless diagnostics for the files.
@ -1102,6 +1106,8 @@ AS_IF([test $gl_gcc_warnings = no],
if test "$emacs_cv_clang" = yes; then
gl_WARN_ADD([-Wno-missing-braces])
gl_WARN_ADD([-Wno-null-pointer-arithmetic])
gl_WARN_ADD([-Wno-implicit-const-int-float-conversion])
gl_WARN_ADD([-Wno-int-in-bool-context])
fi
# This causes too much noise in the MinGW build
@ -2692,6 +2698,9 @@ if test "${with_webp}" != "no"; then
WEBP_MODULE="libwebp >= $WEBP_REQUIRED"
EMACS_CHECK_MODULES([WEBP], [$WEBP_MODULE])
if test "$HAVE_WEBP" = "yes"; then
WEBP_LIBS="-lwebp -lwebpdemux"
fi
AC_SUBST(WEBP_CFLAGS)
AC_SUBST(WEBP_LIBS)
fi
@ -2791,7 +2800,11 @@ gtk3_pkg_errors=
if test "${opsys}" != "mingw32"; then
if test "${with_gtk3}" = "yes" || test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "maybe"; then
GLIB_REQUIRED=2.37.5
GTK_REQUIRED=3.10
if test "${window_system}" = "x11"; then
GTK_REQUIRED=3.10
else
GTK_REQUIRED=3.20
fi
GTK_MODULES="gtk+-3.0 >= $GTK_REQUIRED glib-2.0 >= $GLIB_REQUIRED"
dnl Checks for libraries.
@ -2927,6 +2940,8 @@ fi
AC_SUBST(PGTK_OBJ)
AC_SUBST(PGTK_LIBS)
AC_CHECK_FUNCS(malloc_trim)
dnl D-Bus has been tested under GNU/Linux only. Must be adapted for
dnl other platforms.
HAVE_DBUS=no
@ -3379,6 +3394,8 @@ if test "${with_toolkit_scroll_bars}" != "no"; then
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
USE_TOOLKIT_SCROLL_BARS=yes
fi
elif test "${window_system}" != "x11" && "${window_system}" != "none"; then
AC_MSG_ERROR(Non-toolkit scroll bars are not implemented for your system)
fi
dnl See if XIM is available.
@ -3769,6 +3786,14 @@ if test "${HAVE_X11}" = "yes"; then
[Define to 1 if you have the XCB library and X11-XCB library for mixed
X11/XCB programming.])
XCB_LIBS="-lX11-xcb -lxcb -lxcb-util"
else
AC_CHECK_LIB(xcb-aux, xcb_aux_sync, HAVE_XCB_AUX=yes)
if test "${HAVE_XCB_AUX}" = "yes"; then
AC_DEFINE(USE_XCB, 1,
[Define to 1 if you have the XCB library and X11-XCB library for mixed
X11/XCB programming.])
XCB_LIBS="-lX11-xcb -lxcb -lxcb-aux"
fi
fi
fi
fi
@ -3973,6 +3998,16 @@ MODULES_OBJ=
NEED_DYNLIB=no
MODULES_SUFFIX="${DYNAMIC_LIB_SUFFIX}"
MODULES_SECONDARY_SUFFIX="${DYNAMIC_LIB_SECONDARY_SUFFIX}"
# pgtkterm.c uses dlsym
if test $window_system = pgtk; then
case $opsys in
gnu|gnu-linux)
LIBMODULES="-ldl"
;;
esac
fi
if test "${with_modules}" != "no"; then
case $opsys in
gnu|gnu-linux)
@ -4126,7 +4161,7 @@ if test "${with_native_compilation}" != "no"; then
MAC_CFLAGS="-I$(dirname $($BREW ls -v libgccjit | \
grep libgccjit.h))"
MAC_LIBS="-L$(dirname $($BREW ls -v libgccjit| \
grep libgccjit.so\$))"
grep -E 'libgccjit\.(so|dylib)$'))"
fi
fi
@ -4305,7 +4340,8 @@ if test "${opsys}" = "mingw32"; then
fi
elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
|| test "${HAVE_BE_APP}" = "yes" || test "$window_system" = "pgtk"; then
|| test "${HAVE_BE_APP}" = "yes" || test "$window_system" = "pgtk" \
&& test "${with_gif}" != "no"; then
AC_CHECK_HEADER(gif_lib.h,
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
# Earlier versions can crash Emacs, but version 5.0 removes EGifPutExtensionLast.
@ -4567,6 +4603,51 @@ fi
AC_SUBST(XDBE_CFLAGS)
AC_SUBST(XDBE_LIBS)
### Use the Nonrectangular Window Shape extension if available.
HAVE_XSHAPE=no
HAVE_XCB_SHAPE=no
if test "${HAVE_X11}" = "yes"; then
AC_CHECK_HEADER(X11/extensions/shape.h,
[AC_CHECK_LIB(Xext, XShapeQueryVersion, HAVE_XSHAPE=yes)],
[],
[#include <X11/extensions/shape.h>
])
if test $HAVE_XSHAPE = yes; then
XSHAPE_LIBS=-lXext
AC_CHECK_HEADER(xcb/shape.h,
[AC_CHECK_LIB(xcb-shape, xcb_shape_combine, HAVE_XCB_SHAPE=yes)], [],
[#include <xcb/shape.h>])
if test $HAVE_XCB_SHAPE = yes && test "$XCB_LIBS" != ""; then
XSHAPE_LIBS="$XSHAPE_LIBS -lxcb-shape"
AC_DEFINE(HAVE_XCB_SHAPE, 1, [Define to 1 if XCB supports the Nonrectangular Window Shape extension.])
fi
fi
if test $HAVE_XSHAPE = yes; then
AC_DEFINE(HAVE_XSHAPE, 1, [Define to 1 if you have the Nonrectangular Window Shape extension.])
fi
fi
AC_SUBST(XSHAPE_CFLAGS)
AC_SUBST(XSHAPE_LIBS)
### Use Xcomposite (-lXcomposite) if available
HAVE_XCOMPOSITE=no
if test "${HAVE_X11}" = "yes"; then
AC_CHECK_HEADER(X11/extensions/Xcomposite.h,
[AC_CHECK_LIB(Xcomposite, XCompositeRedirectWindow, HAVE_XCOMPOSITE=yes)],
[],
[#include <X11/extensions/Xcomposite.h>
])
if test $HAVE_XCOMPOSITE = yes; then
XCOMPOSITE_LIBS=-lXcomposite
fi
if test $HAVE_XCOMPOSITE = yes; then
AC_DEFINE(HAVE_XCOMPOSITE, 1, [Define to 1 if you have the XCOMPOSITE extension.])
fi
fi
AC_SUBST(XCOMPOSITE_CFLAGS)
AC_SUBST(XCOMPOSITE_LIBS)
### Use libxml (-lxml2) if available
### mingw32 doesn't use -lxml2, since it loads the library dynamically.
HAVE_LIBXML2=no

View file

@ -30,10 +30,6 @@ Fancy text shaping and display is becoming less important as you move
back in time. The @code{ftx} font backend is again part of Emacs, for
the same reasons.
@item
As Motif becomes more and more important with moving farther into the
past, we've reinstated the code which supports Motif in Emacs.
@item
Emacs once again supports versions 5.3 and older OpenBSD systems,
which will be needed as you move back in time.

View file

@ -138,6 +138,14 @@ of environment variable settings; each element should be a string of
the form @code{"@var{envvarname}=@var{value}"}. These environment
variable settings override the usual ones.
@vindex compilation-max-output-line-length
Displaying extremely long lines in compilation output can slow Emacs
down. Lines that are longer than
@code{compilation-max-output-line-length} will have the portion that's
exceeds that limit hidden behind a button that can be clicked on to
reveal the hidden portion. Set this variable to @code{nil} to never
hide anything.
@node Compilation Mode
@section Compilation Mode
@ -1734,6 +1742,10 @@ which is provided for evaluating Emacs Lisp expressions interactively.
Its major mode is Lisp Interaction mode. You can also enable Lisp
Interaction mode by typing @kbd{M-x lisp-interaction-mode}.
@findex scratch-buffer
If you kill the @file{*scratch*} buffer, you can recreate it with
the @kbd{M-x scratch-buffer} command.
@findex eval-print-last-sexp
@kindex C-j @r{(Lisp Interaction mode)}
In the @file{*scratch*} buffer, and other Lisp Interaction mode

View file

@ -294,6 +294,22 @@ which will invoke Emacs with @samp{--script} and supply the name of
the script file as @var{file}. Emacs Lisp then treats the @samp{#!}
on this first line as a comment delimiter.
@item -x
@opindex -x
This option can only be used in executable script files, and should be
invoked like this:
@example
#!/usr/bin/emacs -x
@end example
This is like @samp{--script}, but suppresses loading the init files
(like @code{--quick}), and can't be used on a normal command line
(since it doesn't specify the script to load). In addition, when it
reaches the end of the script, it exits Emacs and uses the value of
the final form as the exit value from the script (if the final value
is numerical). Otherwise, it will always exit with a zero value.
@item --no-build-details
@opindex --no-build-details
@cindex build details

View file

@ -1232,6 +1232,28 @@ Manual}.
These four keywords are not really variables; setting them in any
other context has no special meaning.
If you're editing a file across Emacs versions, and a new mode has
been introduced to handle a file in a newer Emacs version, you can use
several @code{mode} entries to use the new mode (called
@code{my-new-mode}) in the new Emacs, and fall back to the old mode
(called @code{my-old-mode}) in older Emacs versions. If you're
enabling the modes in the first line of the file, can say:
@example
-*- mode: my-old; mode: my-new -*-
@end example
Emacs will use the final defined mode it finds, so in older Emacs
versions it will ignore @code{my-new-mode}, while in Emacs versions
where @code{my-new-mode} is defined, it'll ignore @code{my-old-mode}.
Similarly, in a local variable block at the end of the file:
@example
Local variables:
mode: my-old
mode: my-new
@end example
Do not use the @code{mode} keyword for minor modes. To enable or
disable a minor mode in a local variables list, use the @code{eval}
keyword with a Lisp expression that runs the mode command

View file

@ -776,6 +776,11 @@ symbolic links as links or after dereferencing (like @samp{cp -L}).
The default is @code{nil}, which means that the symbolic links are
copied by creating new ones.
@vindex dired-keep-marker-copy
The @code{dired-keep-marker-copy} user option controls how this
command handles file marking. The default is to mark all new copies
of files with a @samp{C} mark.
@item D
@findex dired-do-delete
@kindex D @r{(Dired)}
@ -1007,6 +1012,7 @@ subdirectories whose names match @code{grep-find-ignored-directories}.
@findex dired-do-shell-command
@kindex ! @r{(Dired)}
@kindex X @r{(Dired)}
@vindex dired-confirm-shell-command
The Dired command @kbd{!} (@code{dired-do-shell-command}) reads a
shell command string in the minibuffer, and runs that shell command on
one or more files. The files that the shell command operates on are
@ -1043,7 +1049,8 @@ list of file names, putting them into one tar file @file{foo.tar}.
If you want to use @samp{*} as a shell wildcard with whitespace around
it, write @samp{*""}. In the shell, this is equivalent to @samp{*};
but since the @samp{*} is not surrounded by whitespace, Dired does not
treat it specially.
treat it specially. Emacs will prompt for confirmation if you do
this, unless @code{dired-confirm-shell-command} is @code{nil}.
@item
Otherwise, if the command string contains @samp{?} surrounded by
@ -1695,9 +1702,15 @@ directory than in this one. It also marks files with no counterpart,
in both directories, as always.
@cindex drag and drop, Dired
On the X Window System, Emacs supports the drag and drop
protocol. You can drag a file object from another program, and drop
it onto a Dired buffer; this either moves, copies, or creates a link
to the file in that directory. Precisely which action is taken is
determined by the originating program. Dragging files out of a Dired
buffer is currently not supported.
@vindex dired-mouse-drag-files
On the X Window System, Emacs supports the drag and drop protocol.
You can drag a file object from another program, and drop it onto a
Dired buffer; this either moves, copies, or creates a link to the file
in that directory. Precisely which action is taken is determined by
the originating program. Dragging files out of a Dired buffer is also
supported, by enabling the user option @code{dired-mouse-drag-files},
the mouse can be used to drag files onto other programs. When set to
@code{link}, it will make the other program (typically a file manager)
create a symbolic link to the file, and setting it to any other
non-@code{nil} value will make the other program open or create a copy
of the file.

View file

@ -1011,10 +1011,15 @@ in C comments, use this:
@end example
@findex font-lock-remove-keywords
@vindex font-lock-ignore
@noindent
To remove keywords from the font-lock highlighting patterns, use the
function @code{font-lock-remove-keywords}. @xref{Search-based
Fontification,,, elisp, The Emacs Lisp Reference Manual}.
Alternatively, you can selectively disable highlighting due to some
keywords by customizing the @code{font-lock-ignore} option,
@pxref{Customizing Keywords,,, elisp, The Emacs Lisp Reference
Manual}.
@cindex just-in-time (JIT) font-lock
@cindex background syntax highlighting
@ -1894,12 +1899,22 @@ logical lines, so having a fringe indicator for each wrapped line
would be visually distracting. You can change this by customizing the
variable @code{visual-line-fringe-indicators}.
@vindex word-wrap-whitespace-mode
By default, Emacs only breaks lines after whitespace characters like
@key{SPC} and @key{TAB}, but does not break after whitespace
characters like @key{EN QUAD}. Emacs provides a minor mode called
@code{word-wrap-whitespace-mode} that switches on word wrapping in the
current mode, and sets up which characters to wrap lines on based on
the @code{word-wrap-whitespace-characters} user option. There's also
a globalized version of that mode called
@code{global-word-wrap-whitespace-mode}.
@vindex word-wrap-by-category
@findex modify-category-entry
@findex char-category-set
@findex category-set-mnemonics
By default, Emacs only breaks lines after whitespace characters.
That produces incorrect results when CJK and Latin text are mixed
Only breaking after whitespace character produces incorrect
results when CJK and Latin text are mixed
together (because CJK characters don't use whitespace to separate
words). You can customize the option @code{word-wrap-by-category} to
allow Emacs to break lines after any character with @samp{|} category
@ -2082,3 +2097,14 @@ argument to suppress the effect of bold-face in this case.
byte with a decimal value of 128 is displayed as @code{\200}. To
change display to the hexadecimal format of @code{\x80}, set the
variable @code{display-raw-bytes-as-hex} to @code{t}.
Care may be needed when interpreting a raw byte when copying
text from a terminal containing an Emacs session, or when a terminal's
@code{escape-glyph} face looks like the default face. For example, by
default Emacs displays the four characters @samp{\}, @samp{2},
@samp{0}, @samp{0} with the same characters it displays a byte with
decimal value 128. The problem can be worse with hex displays, where
the raw byte 128 followed by the character @samp{7} is displayed as
@code{\x807}, which Emacs Lisp reads as the single character U+0807
SAMARITAN LETTER IT; this confusion does not occur with the
corresponding octal display @code{\2007} because octal escapes contain
at most three digits.

View file

@ -1196,6 +1196,18 @@ the variable @code{dnd-open-file-other-window}.
The XDND and Motif drag and drop protocols, and the old KDE 1.x
protocol, are currently supported.
@vindex dnd-indicate-insertion-point
@vindex dnd-scroll-margin
It can be difficult to scroll a window or determine where dropped
text will be inserted while dragging text onto an Emacs window.
Setting the option @code{dnd-indicate-insertion-point} to a
non-@code{nil} value makes point move to the location any dropped text
will be inserted when the mouse moves in a window during drag, and
setting @code{dnd-scroll-margin} to an integer value causes a window
to be scrolled if the mouse moves within that many lines of the top
or bottom of the window during drag.
@vindex mouse-drag-and-drop-region
Emacs can also optionally drag the region with the mouse into
another portion of this or another buffer. To enable that, customize
@ -1220,6 +1232,10 @@ cursor during dragging. To suppress such behavior, set the options
@code{mouse-drag-and-drop-region-show-tooltip} and/or
@code{mouse-drag-and-drop-region-show-cursor} to @code{nil}.
@vindex mouse-drag-and-drop-region-cross-program
To drag text from Emacs to other programs, set the option
@code{mouse-drag-and-drop-region-cross-program} to a non-@code{nil}
value.
@node Menu Bars
@section Menu Bars

View file

@ -20,10 +20,28 @@ commands (@code{help-for-help}). You can scroll the list with
@key{SPC} and @key{DEL}, then type the help command you want. To
cancel, type @kbd{C-g}.
@cindex help buffer
Many help commands display their information in a special @dfn{help
buffer}. In this buffer, you can type @key{SPC} and @key{DEL} to
scroll and type @key{RET} to follow hyperlinks. @xref{Help Mode}.
@vindex help-window-select
By default, help commands display the help buffer in a separate
window without selecting that window. The variable
@code{help-window-select} controls this: its default value is
@code{nil}; if it's customized to the value @code{t}, the help window
is unconditionally selected by help commands, and if its value is
@code{other}, the help window is selected only if there are more than
two windows on the selected frame.
@vindex help-window-keep-selected
Conversely, many commands in the @samp{*Help*} buffer will pop up a
new window to display the results. For instance, clicking on the link
to show the source code, or using the @key{i} command to display the
manual entry, will (by default) pop up a new window. If
@code{help-window-keep-selected} is changed to non-@code{nil}, the
window displaying the @samp{*Help*} buffer will be reused instead.
@cindex searching documentation efficiently
@cindex looking for a subject in documentation
If you are looking for a certain feature, but don't know what it is
@ -182,7 +200,10 @@ programming language you are editing (@code{info-lookup-symbol}).
@item C-h .
Display the help message for a special text area, if point is in one
(@code{display-local-help}). (These include, for example, links in
@file{*Help*} buffers.) @xref{Help Echo}.
@file{*Help*} buffers.) @xref{Help Echo}. If you invoke
this command with a prefix argument, @kbd{C-u C-h .}, and point is on
a button or a widget, this command will pop a new buffer that
describes that button/widget.
@end table
@node Key Help
@ -332,9 +353,9 @@ are included varies depending on the command used.
@cindex apropos
The @dfn{apropos} commands answer questions like, ``What are the
commands for working with files?'' More precisely, you specify an
@dfn{apropos pattern}, which means either a word, a list of words, or
a regular expression.
commands for working with files?'' More precisely, you specify your
query as an @dfn{apropos pattern}, which is either a word, a list of
words, or a regular expression.
Each of the following apropos commands reads an apropos pattern in
the minibuffer, searches for items that match the pattern, and
@ -393,6 +414,12 @@ comes with a brief description and a list of keys you can currently
invoke it with. In our example, it would say that you can invoke
@code{find-file} by typing @kbd{C-x C-f}.
@vindex help-window-select@r{, and apropos commands}
By default, the window showing the apropos buffer with the results
of the query is not selected, but you can cause it to be selected by
customizing the variable @code{help-window-select} to any
non-@code{nil} value.
For more information about a function definition, variable or symbol
property listed in an apropos buffer, you can click on it with
@kbd{mouse-1} or @kbd{mouse-2}, or move there and type @key{RET}.

View file

@ -540,11 +540,11 @@ clipboard.
clipboard contents are normally lost. Optionally, Emacs can save the
existing clipboard contents to the kill ring, preventing you from
losing the old clipboard data. If
@code{save-interprogram-paste-before-kill} changed to a number, then
this data is copied over if it's smaller (in characters) than this
number. If this variable is any other non-@code{nil} value, it's
always copied over---at the risk of high memory consumption if that
data turns out to be large.
@code{save-interprogram-paste-before-kill} has been set to a number,
then the data is copied over if it's smaller (in characters) than
this number. If this variable is any other non-@code{nil} value, the
data is always copied over---at the risk of high memory consumption if
that data turns out to be large.
Yank commands, such as @kbd{C-y} (@code{yank}), also use the
clipboard. If another application ``owns'' the clipboard---i.e., if
@ -567,8 +567,8 @@ change the variable @code{select-enable-clipboard} to @code{nil}.
instance, a web browser will usually let you choose ``Copy Image'' on
images, and this image will be put on the clipboard. On capable
platforms, Emacs can yank these objects with the @code{yank-media}
command---but only in modes that have support for it (@pxref{Yanking
Media,,, elisp, The Emacs Lisp Reference Manual}).
command---but only in modes that have support for it (@w{@pxref{Yanking
Media,,, elisp, The Emacs Lisp Reference Manual}}).
@cindex clipboard manager
@vindex x-select-enable-clipboard-manager
@ -698,6 +698,9 @@ lines, much like @kbd{mouse-1}.
If @code{mouse-yank-at-point} is non-@code{nil}, @kbd{M-mouse-2} yanks
at point. Then it does not matter precisely where you click, or even
which of the frame's windows you click on. @xref{Mouse Commands}.
This user option also effects interactive search: if it is
non-@code{nil}, yanking with the mouse anywhere in the frame will add
the text to the search string.
@node Accumulating Text
@section Accumulating Text

View file

@ -273,14 +273,6 @@ application is overriding the default behavior.
The modifier keys listed above are defined by macOS and are unaffected
by user changes to the modifiers in Emacs.
@item ns-change-font
This event occurs when the user selects a font in a Nextstep font
panel (which can be opened with @kbd{Cmd-t}). The default behavior is
to adjust the font of the selected frame
(@code{ns-respond-to-changefont}). The name and size of the selected
font are stored in the variables @code{ns-input-font} and
@code{ns-input-fontsize}, respectively.
@item ns-power-off
This event occurs when the user logs out and Emacs is still running, or when
``Quit Emacs'' is chosen from the application menu.

View file

@ -1055,15 +1055,6 @@ prefix argument is a repeat count.
Move to the next revision entry. A numeric prefix argument is a
repeat count.
@item P
Move to the log of the previous file, if showing logs for a multi-file
VC fileset. Otherwise, just move to the beginning of the log. A
numeric prefix argument is a repeat count.
@item N
Move to the log of the next file, if showing logs for a multi-file VC
fileset. A numeric prefix argument is a repeat count.
@item a
Annotate the revision on the current line (@pxref{Old Revisions}).
@ -1728,6 +1719,7 @@ doesn't seem to belong to a recognizable project, these commands
prompt you for the project directory.
@findex project-find-file
@vindex vc-directory-exclusion-list
The command @kbd{C-x p f} (@code{project-find-file}) is a convenient
way of visiting files (@pxref{Visiting}) that belong to the current
project. Unlike @kbd{C-x C-f}, this command doesn't require to type
@ -1736,7 +1728,9 @@ base name (i.e., omit the leading directories). In addition, the
completion candidates considered by the command include only the files
belonging to the current project, and nothing else. If there's a file
name at point, this command offers that file as the first element of
the ``future history''.
the ``future history''. If given a prefix, include all files under
the project root, except for @acronym{VCS} directories listed in
@code{vc-directory-exclusion-list}.
@findex project-find-regexp
The command @kbd{C-x p g} (@code{project-find-regexp}) is similar to
@ -1831,11 +1825,14 @@ buffers as candidates for completion.
@findex project-kill-buffers
@vindex project-kill-buffer-conditions
@vindex project-kill-buffers-display-buffer-list
When you finish working on the project, you may wish to kill all the
buffers that belong to the project, to keep your Emacs session
smaller. The command @kbd{C-x p k} (@code{project-kill-buffers})
accomplishes that: it kills all the buffers that belong to the current
project that satisfy any of @code{project-kill-buffer-conditions}.
project that satisfy any of @code{project-kill-buffer-conditions}. If
@code{project-kill-buffers-display-buffer-list} is non-@code{nil}, the
buffers to be killed will be displayed first.
@node Switching Projects
@subsection Switching Projects
@ -2992,11 +2989,12 @@ etags --language=none \
@findex visit-tags-table
Emacs has at any time at most one @dfn{selected} tags table. All
the commands for working with tags tables use the selected one. To
select a tags table, type @kbd{M-x visit-tags-table}, which reads the
tags table file name as an argument, with @file{TAGS} defaulting to
the first directory that contains a file named @file{TAGS} encountered
when recursively searching upward from the default directory.
the commands for working with tags tables use the selected one first.
To select a tags table, type @kbd{M-x visit-tags-table}, which reads
the tags table file name as an argument, with @file{TAGS} defaulting
to the first directory that contains a file named @file{TAGS}
encountered when recursively searching upward from the default
directory.
@vindex tags-file-name
Emacs does not actually read in the tags table contents until you
@ -3006,16 +3004,25 @@ variable's initial value is @code{nil}; that value tells all the
commands for working with tags tables that they must ask for a tags
table file name to use.
Using @code{visit-tags-table} when a tags table is already loaded
gives you a choice: you can add the new tags table to the current list
of tags tables, or start a new list. The tags commands use all the tags
tables in the current list. If you start a new list, the new tags table
is used @emph{instead} of others. If you add the new table to the
current list, it is used @emph{as well as} the others.
In addition to the selected tags table, Emacs maintains the list of
several tags tables that you use together. For example, if you are
working on a program that uses a library, you may wish to have the
tags tables of both the program and the library available, so that
Emacs could easily find identifiers from both. If the selected tags
table doesn't have the identifier or doesn't mention the source file a
tags command needs, the command will try using all the other tags
tables in the current list of tags tables.
Using @code{visit-tags-table} to load a new tags table when another
tags table is already loaded gives you a choice: you can add the new
tags table to the current list of tags tables, or discard the current
list and start a new list. If you start a new list, the new tags
table is used @emph{instead} of others. If you add the new table to
the current list, it is used @emph{as well as} the others.
@vindex tags-table-list
You can specify a precise list of tags tables by setting the variable
@code{tags-table-list} to a list of strings, like this:
@code{tags-table-list} to a list of directory names, like this:
@c keep this on two lines for formatting in smallbook
@example

View file

@ -378,6 +378,20 @@ window. You can display the same list with @kbd{?}
used with the completion list:
@table @kbd
@vindex minibuffer-completion-auto-choose
@item M-@key{DOWN}
@itemx M-@key{UP}
These keys will navigate through the completions displayed in the
completions buffer. When @code{minibuffer-completion-auto-choose} is
non-@code{nil} (which is the default), using these commands will
automatically insert the current completion candidate in the
minibuffer. If this user option is @code{nil}, the keys will navigate
the same way as before, but won't automatically insert the candidate
in the minibuffer. Instead you have to use the @kbd{M-@key{RET}} command to
do that. With a prefix argument, @kbd{C-u M-@key{RET}} inserts the
currently active candidate to the minibuffer, but doesn't exit the
minibuffer.
@findex switch-to-completions
@item M-v
@itemx @key{PageUp}
@ -624,11 +638,34 @@ completion alternatives in the completion list.
@vindex completion-auto-help
If @code{completion-auto-help} is set to @code{nil}, the completion
commands never display the completion list buffer; you must type
@kbd{?} to display the list. If the value is @code{lazy}, Emacs only
@kbd{?} to display the list. If the value is @code{lazy}, Emacs only
shows the completion list buffer on the second attempt to complete.
In other words, if there is nothing to complete, the first @key{TAB}
echoes @samp{Next char not unique}; the second @key{TAB} shows the
completion list buffer.
completion list buffer. If the value is @code{always}, the completion
list buffer is always shown when completion is attempted.
The display of the completion list buffer after it is shown for the
first time is also controlled by @code{completion-auto-help}. If the
value is @code{t} or @code{lazy}, the window showing the completions
pops down when Emacs is able to complete (and may pop up again if
Emacs is again unable to complete after you type some more text); if
the value is @code{always}, the window pops down only when you exit
the completion. The value @code{visible} is a hybrid: it behaves like
@code{t} when it decides whether to pop up the window showing the
completion list buffer, and like @code{always} when it decides whether
to pop it down.
@vindex completion-auto-select
Emacs can optionally select the window showing the completions when
it shows that window. To enable this behavior, customize the user
option @code{completion-auto-select} to @code{t}, which changes the
behavior of @key{TAB} when Emacs pops up the completions: pressing
@kbd{@key{TAB}} will switch to the completion list buffer, and you can
then move to a candidate by cursor motion commands and select it with
@kbd{@key{RET}}. If the value of @code{completion-auto-select} is
@code{second-tab}, then the first @kbd{@key{TAB}} will pop up the
completions list buffer, and the second one will switch to it.
@vindex completion-cycle-threshold
If @code{completion-cycle-threshold} is non-@code{nil}, completion
@ -651,6 +688,42 @@ changed by changing the @code{completions-format} user option. If
@code{vertical}, sort the completions vertically in columns instead,
and if @code{one-column}, just use a single column.
@vindex completions-sort
This user option controls how completions are sorted in the
@samp{*Completions*} buffer. The default is @code{alphabetical}, but
it can also be a function which will be called with the list of
completions, and should return the list in the desired order.
@vindex completions-max-height
When @code{completions-max-height} is non-@code{nil}, it limits the
size of the completions window. It is specified in lines and include
mode, header line and a bottom divider, if any. For a more complex
control of the Completion window display properties, you can use
@code{display-buffer-alist} (@pxref{Buffer Display Action
Alists,,Action Alists for Buffer Display, elisp, The Emacs Lisp
Reference Manual}).
@vindex completions-header-format
The variable @code{completions-header-format} is a format spec string to
control the informative line shown before the completions list of
candidates. If it contains a @samp{%s} construct, that get replaced
by the number of completions shown in the completion list buffer. To
suppress the display of the heading line, customize this variable to
@code{nil}. The string that is the value of this variable can have
text properties to change the visual appearance of the heading line;
some useful properties @code{face} or @code{cursor-intangible}
(@pxref{Special Properties,,Properties with Special Meanings, elisp,
The Emacs Lisp Reference Manual}).
@vindex completions-highlight-face
When @code{completions-highlight-face} names a face, the current
completion candidate, the one that will be selected by typing
@kbd{@key{RET}} or clicking the mouse, will be highlighted using that
face. The default value of this variable is
@code{completions-highlight}; the value is @code{nil} disables this
highlighting. This feature uses the special text property
@code{cursor-face}.
@node Minibuffer History
@section Minibuffer History
@cindex minibuffer history

View file

@ -896,6 +896,19 @@ also rename the @file{*shell*} buffer using @kbd{M-x rename-uniquely},
then create a new @file{*shell*} buffer using plain @kbd{M-x shell}.
Subshells in different buffers run independently and in parallel.
Emacs attempts to keep track of what the current directory is by
looking at the commands you enter, looking for @samp{cd} commands and
the like. This is an error-prone solution, since there are many ways
to change the current directory, so Emacs also looks for special
@acronym{OSC} (Operating System Commands) escape codes that are
designed to convey this information in a more reliable fashion. You
should arrange for your shell to print the appropriate escape sequence
at each prompt, for instance with the following command:
@example
printf "\e]7;file://%s%s\e\\" "$HOSTNAME" "$PWD"
@end example
@vindex explicit-shell-file-name
@cindex environment variables for subshells
@cindex @env{ESHELL} environment variable
@ -2770,7 +2783,12 @@ will by default ask you whether to use the locked desktop file. You
can avoid the question by customizing the variable
@code{desktop-load-locked-desktop} to either @code{nil}, which means
never load the desktop in this case, or @code{t}, which means load the
desktop without asking.
desktop without asking. Finally, the @code{check-pid} value means to
load the file if the Emacs process that has locked the desktop is not
running on the local machine. This should not be used in
circumstances where the locking Emacs might still be running on
another machine. This could be the case in multi-user environments
where your home directory is mounted remotely using NFS or similar.
@cindex desktop restore in daemon mode
When Emacs starts in daemon mode, it cannot ask you any questions,

View file

@ -320,10 +320,13 @@ version of the package, a newer version is also installed.
@section Package Installation
@findex package-install
@findex package-update
Packages are most conveniently installed using the package menu
(@pxref{Package Menu}), but you can also use the command @kbd{M-x
package-install}. This prompts for the name of a package with the
@samp{available} status, then downloads and installs it.
@samp{available} status, then downloads and installs it. Similarly,
if you want to update a package, you can use the @kbd{M-x
package-update} command.
@cindex package requirements
A package may @dfn{require} certain other packages to be installed,

View file

@ -250,8 +250,8 @@ where it treats each chapter, section, etc., as a definition.
together.)
@findex imenu
If you type @kbd{M-x imenu}, it reads the name of a definition using
the minibuffer, then moves point to that definition. You can use
If you type @kbd{M-g i}, it reads the name of a definition using the
minibuffer, then moves point to that definition. You can use
completion to specify the name; the command always displays the whole
list of valid names.

View file

@ -899,11 +899,13 @@ character folding during incremental regexp search with @kbd{M-s '},
the search becomes a non-regexp search and the search pattern you
typed is interpreted as a literal string.)
@cindex pending, in incremental search
In some cases, adding characters to the regexp in an incremental
regexp search can make the cursor move back and start again. For
example, if you have searched for @samp{foo} and you add @samp{\|bar},
the cursor backs up in case the first @samp{bar} precedes the first
@samp{foo}. @xref{Regexps}.
@samp{foo}. (The prompt will change to say ``Pending'' to notify the
user that this recalculation has happened.) @xref{Regexps}.
Forward and backward regexp search are not symmetrical, because
regexp matching in Emacs always operates forward, starting with the

View file

@ -1259,6 +1259,17 @@ and related functions treat hidden text, @pxref{Query Replace}.)
You can also automatically make text visible as you navigate in it by
using Reveal mode (@kbd{M-x reveal-mode}), a buffer-local minor mode.
@vindex outline-default-state
The @code{outline-default-state} variable controls what headings
will be visible after Outline mode is turned on. If non-@code{nil},
some headings are initially outlined. If equal to a number, show only
headings up to and including the corresponding level. If equal to
@code{outline-show-all}, all text of buffer is shown. If equal to
@code{outline-show-only-headings}, show only headings, whatever their
level is. If equal to a lambda function or function name, this
function is expected to toggle headings visibility, and will be called
without arguments after the mode is enabled.
@node Outline Views
@subsection Viewing One Outline in Multiple Views

View file

@ -296,6 +296,31 @@ editing in the same Emacs session.
out of memory, because the Buffer Menu needs a fair amount of memory
itself, and the reserve supply may not be enough.
@cindex out of memory killer, GNU/Linux
@cindex OOM killer
On GNU/Linux systems, Emacs does not normally get notified about
out-of-memory situations; instead, the OS can kill the Emacs process
when it runs out of memory. This feature is known as the
@dfn{out-of-memory killer}, or @dfn{@acronym{OOM} killer}. When this
behavior is in effect, Emacs is unable to detect the out-of-memory
situation in time, and won't be able to let you save your buffer as
described above. However, it is possible to turn off this behavior of
the OS, and thus allow Emacs a chance to handle the out-of-memory
situation in a more useful manner, before it is killed. To do that,
become the super user, edit the file @code{/etc/sysctl.conf} to
contain the lines shown below, and then invoke the command
@w{@kbd{sysctl -p}} from the shell prompt:
@example
vm.overcommit_memory=2
vm.overcommit_ratio=0
@end example
@noindent
Please note that the above setting affects all the processes on the
system, and in general the behavior of the system under memory
pressure, not just the Emacs process alone.
@node Crashing
@subsection When Emacs Crashes

View file

@ -15345,7 +15345,10 @@ nil
@group
(20615 27034 579989 697000)
(17905 55681 0 0)
(20615 26327 734791 805000)
(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

@ -953,15 +953,59 @@ with a @code{nil} @var{norecord} argument since this may lead to
infinite recursion.
@end defvar
@defun buffer-match-p condition buffer-or-name &optional arg
This function checks if a buffer designated by @code{buffer-or-name}
satisfies a @code{condition}. Optional third argument @var{arg} is
passed to the predicate function in @var{condition}. A condition can
be one of the following:
@itemize @bullet{}
@item
A string, interpreted as a regular expression. The buffer
satisfies the condition if the regular expression matches the buffer
name.
@item
A predicate function, which should return non-@code{nil} if the buffer
matches. If the function expects one argument, it is called with
@var{buffer-or-name} as the argument; if it expects 2 arguments, the
first argument is @var{buffer-or-name} and the second is @var{arg}
(or @code{nil} if @var{arg} is omitted).
@item
A cons-cell @code{(@var{oper} . @var{expr})} where @var{oper} is one
of
@table @code
@item not
Satisfied if @var{expr} doesn't satisfy @code{buffer-match-p} with
the same buffer and @code{arg}.
@item or
Satisfied if @var{oper} is a list and @emph{any} condition if
@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
@code{arg}.
@item and
Satisfied if @var{oper} is a list and @emph{all} condition if
@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
@code{arg}.
@end table
@end itemize
@end defun
@defun match-buffers condition &optional buffer-list arg
This function returns a list of all buffers that satisfy a
@code{condition}, as defined for @code{buffer-match-p}. By default
all buffers are considered, but this can be restricted via the second
optional @code{buffer-list} argument. Optional third argument
@var{arg} will be used by @var{condition} in the same way as
@code{buffer-match-p} does.
@end defun
@node Creating Buffers
@section Creating Buffers
@cindex creating buffers
@cindex buffers, creating
This section describes the two primitives for creating buffers.
@code{get-buffer-create} creates a buffer if it finds no existing buffer
with the specified name; @code{generate-new-buffer} always creates a new
buffer and gives it a unique name.
@code{get-buffer-create} creates a buffer if it finds no existing
buffer with the specified name; @code{generate-new-buffer} always
creates a new buffer and gives it a unique name.
Both functions accept an optional argument @var{inhibit-buffer-hooks}.
If it is non-@code{nil}, the buffer they create does not run the hooks

View file

@ -312,6 +312,25 @@ If @var{function} is an interactively callable function
specifies how to compute its arguments. Otherwise, the value is
@code{nil}. If @var{function} is a symbol, its function definition is
used.
When called on an OClosure, the work is delegated to the generic
function @code{oclosure-interactive-form}.
@end defun
@defun oclosure-interactive-form function
Just like @code{interactive-form}, this function takes a command and
returns its interactive form. The difference is that it is a generic
function and it is only called when @var{function} is an OClosure.
The purpose is to make it possible for some OClosure types to compute
their interactive forms dynamically instead of carrying it in one of
their slots.
This is used for example for @code{kmacro} functions in order to
reduce their memory size, since they all share the same interactive
form. It is also used for @code{advice} functions, where the
interactive form is computed from the interactive forms of its
components, so as to make this computation more lazily and to
correctly adjust the interactive form when one of its component's
is redefined.
@end defun
@node Interactive Codes
@ -1127,6 +1146,96 @@ frame, the value is the frame to which the event was redirected.
If the last event came from a keyboard macro, the value is @code{macro}.
@end defvar
@cindex input devices
@cindex device names
Input events must come from somewhere; sometimes, that is a keyboard
macro, a signal, or `unread-command-events', but it is usually a
physical input device connected to a computer that is controlled by
the user. Those devices are referred to as @dfn{input devices}, and
Emacs associates each input event with the input device from which it
originated. They are identified by a name that is unique to each
input device.
The ability to determine the precise input device used depends on the
details of each system. When that information is unavailable, Emacs
reports keyboard events as originating from the @samp{"Virtual core
keyboard"}, and other events as originating from the @samp{"Virtual
core pointer"}. (These values are used on every platform because the
X server reports them when detailed device information is not known.)
@defvar last-event-device
This variable records the name of the input device from which the last
input event read was generated. It is @code{nil} if no such device
exists, i.e., the last input event was read from
@code{unread-command-events}, or it came from a keyboard macro.
When the X Input Extension is being used on X Windows, the device name
is a string that is unique to each physical keyboard, pointing device
and touchscreen attached to the X server. Otherwise, it is either the
string @samp{"Virtual core pointer"} or @samp{"Virtual core
keyboard"}, depending on whether the event was generated by a pointing
device (such as a mouse) or a keyboard.
@end defvar
@defun device-class frame name
There are various different types of devices, which can be determined
from their names. This function can be used to determined the correct
type of the device @var{name} for an event originating from
@var{frame}.
The return value is one of the following symbols (``device classes''):
@table @code
@item core-keyboard
The core keyboard; this is means the device is a keyboard-like device,
but no other characteristics are unknown.
@item core-pointer
The core pointer; this means the device is a pointing device, but no
other characteristics are known.
@item mouse
A computer mouse.
@item trackpoint
A trackpoint or joystick (or other similar control.)
@item eraser
The other end of a stylus on a graphics tablet, or a standalone
eraser.
@item pen
The pointed end of a pen on a graphics tablet, a stylus, or some other
similar device.
@item puck
A device that looks like a computer mouse, but reports absolute
coordinates relative to some other surface.
@item power-button
A power button or volume button (or other similar control.)
@item keyboard
A computer keyboard.
@item touchscreen
A computer touchpad.
@item pad
A collection of sensitive buttons, rings, and strips commonly found
around a drawing tablet.
@item touchpad
An indirect touch device such as a touchpad.
@item piano
A musical instrument such as an electronic keyboard.
@item test
A device used by the XTEST extension to report input.
@end table
@end defun
@node Adjusting Point
@section Adjusting Point After Commands
@cindex adjusting point

View file

@ -194,6 +194,17 @@ If you set @code{debug-on-message} to a regular expression,
Emacs will enter the debugger if it displays a matching message in the
echo area. For example, this can be useful when trying to find the
cause of a particular message.
@end defvar
@defvar debug-allow-recursive-debug
You can evaluate forms in the current stack frame in the
@samp{*Backtrace*} buffer with the @key{e} command, and while
edebugging you can use the @key{e} and @key{C-x C-e} commands to do
something similar. By default, the debugger is inhibited by these
commands (because (re-)entering the debugger at this point will
usually take you out of the debugging context you're in). Set
@code{debug-allow-recursive-debug} to a non-@code{nil} value to allow
these commands to enter the debugger recursively.
@end defvar
To debug an error that happens during loading of the init
@ -387,11 +398,9 @@ possibilities.)
variable is temporarily set according to
@code{eval-expression-debug-on-error}. If the latter variable is
non-@code{nil}, @code{debug-on-error} will temporarily be set to
@code{t}. This means that any further errors that occur while doing a
debugging session will (by default) trigger another backtrace. If
this is not what you want, you can either set
@code{eval-expression-debug-on-error} to @code{nil}, or set
@code{debug-on-error} to @code{nil} in @code{debugger-mode-hook}.
@code{t}. However, further errors that occur while debugging won't
(by default) trigger another debugger, because @code{inhibit-debugger}
will also be bound to non-@code{nil}.
The debugger itself must be run byte-compiled, since it makes
assumptions about the state of the Lisp interpreter. These
@ -522,6 +531,7 @@ Flag the current frame like @kbd{b}. Then continue execution like
@kbd{c}, but temporarily disable break-on-entry for all functions that
are set up to do so by @code{debug-on-entry}.
@vindex debug-allow-recursive-debug
@item e
Read a Lisp expression in the minibuffer, evaluate it (with the
relevant lexical environment, if applicable), and print the
@ -530,7 +540,11 @@ variables, and the current buffer, as part of its operation; @kbd{e}
temporarily restores their values from outside the debugger, so you can
examine and change them. This makes the debugger more transparent. By
contrast, @kbd{M-:} does nothing special in the debugger; it shows you
the variable values within the debugger.
the variable values within the debugger. By default, this command
suppresses the debugger during evaluation, so that an error in the
evaluated expression won't add a new error on top of the existing one.
Set the @code{debug-allow-recursive-debug} user option to a
non-@code{nil} value to override this.
@item R
Like @kbd{e}, but also save the result of evaluation in the

View file

@ -336,7 +336,10 @@ functions call it with no arguments when their argument message is
Usually this function is called when the next input event arrives
after displaying an echo-area message. The function is expected to
clear the message displayed by its counterpart function specified by
@code{set-message-function}.
@code{set-message-function}, but doesn't have to. If the function
wants the echo area to remain uncleared, it should return the symbol
@code{dont-clear-message}; any other value will result in the echo
area being cleared.
The default value is the function that clears the message displayed in
an active minibuffer.
@ -2142,7 +2145,7 @@ the buffer might contain long lines that will be truncated anyway.
The optional argument @var{y-limit}, if non-@code{nil}, specifies the
maximum Y coordinate beyond which text is to be ignored; it is
therefore also the maximum pixel-height that the function can return.
If @var{y-limit} is nil or omitted, it means to considers all the
If @var{y-limit} is @code{nil} or omitted, it means to consider all the
lines of text till the buffer position specified by @var{to}. Since
calculating the pixel-height of a large buffer can take some time, it
makes sense to specify this argument; in particular, if the caller
@ -2249,6 +2252,20 @@ This is a convenience function that uses @code{window-text-pixel-size}
to compute the width of @var{string} (in pixels).
@end defun
@defun window-char-pixel-width &optional window face
Return the average character width for the font used by @var{face} in
@var{window}. If @var{face} is @code{nil} or omitted, the
@code{default} face is used. If @var{windows} is @code{nil} or
omitted, the currently selected window is used.
@end defun
@defun window-char-pixel-height &optional window face
Return the average character height for the font used by @var{face} in
@var{window}. If @var{face} is @code{nil} or omitted, the
@code{default} face is used. If @var{windows} is @code{nil} or
omitted, the currently selected window is used.
@end defun
@defun line-pixel-height
This function returns the height in pixels of the line at point in the
selected window. The value includes the line spacing of the line
@ -2924,7 +2941,8 @@ modifying the attributes of a named face.
@defun face-attribute face attribute &optional frame inherit
This function returns the value of the @var{attribute} attribute for
@var{face} on @var{frame}.
@var{face} on @var{frame}. @xref{Face Attributes}, for the supported
attributes.
If @var{frame} is omitted or @code{nil}, that means the selected frame
(@pxref{Input Focus}). If @var{frame} is @code{t}, this function
@ -3007,7 +3025,8 @@ for all frames. This function is mostly intended for internal usage.
@defun set-face-attribute face frame &rest arguments
This function sets one or more attributes of @var{face} for
@var{frame}. The attributes specified in this way override the face
spec(s) belonging to @var{face}.
spec(s) belonging to @var{face}. @xref{Face Attributes}, for the
supported attributes.
The extra arguments @var{arguments} specify the attributes to set, and
the values for them. They should consist of alternating attribute
@ -3807,57 +3826,62 @@ Then, the font specifications for all but Chinese GB2312 characters have
Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
field.
@defun set-fontset-font name character font-spec &optional frame add
This function modifies the existing fontset @var{name} to use the font
matching with @var{font-spec} for the specified @var{character}.
@defun set-fontset-font fontset characters font-spec &optional frame add
This function modifies the existing @var{fontset} to use the font
specified by @var{font-spec} for displaying the specified
@var{characters}.
If @var{name} is @code{nil}, this function modifies the fontset of the
selected frame or that of @var{frame} if @var{frame} is not
If @var{fontset} is @code{nil}, this function modifies the fontset of
the selected frame or that of @var{frame} if @var{frame} is not
@code{nil}.
If @var{name} is @code{t}, this function modifies the default
fontset, whose short name is @samp{fontset-default}.
If @var{fontset} is @code{t}, this function modifies the default
fontset, whose short name as a string is @samp{fontset-default}.
In addition to specifying a single codepoint, @var{character} may be a
cons @code{(@var{from} . @var{to})}, where @var{from} and @var{to} are
character codepoints. In that case, use @var{font-spec} for all the
characters in the range @var{from} and @var{to} (inclusive).
The @var{characters} argument can be a single character which should
be displayed using @var{font-spec}. It can also be a cons cell
@w{@code{(@var{from} . @var{to})}}, where @var{from} and @var{to} are
characters. In that case, use @var{font-spec} for all the characters
in the range @var{from} and @var{to} (inclusive).
@var{character} may be a charset (@pxref{Character Sets}). In that
case, use @var{font-spec} for all the characters in the charset.
@var{characters} may be a charset symbol (@pxref{Character Sets}). In
that case, use @var{font-spec} for all the characters in the charset.
@var{character} may be a script name (@pxref{Character Properties,
@var{characters} may be a script symbol (@pxref{Character Properties,
char-script-table}). In that case, use @var{font-spec} for all the
characters belonging to the script.
@var{character} may be @code{nil}, which means to use @var{font-spec}
for any character which no font-spec is specified.
@var{characters} may be @code{nil}, which means to use @var{font-spec}
for any character in @var{fontset} for which no font-spec is
specified.
@var{font-spec} may be a font-spec object created by the function
@code{font-spec} (@pxref{Low-Level Font}).
@var{font-spec} may be a cons; @code{(@var{family} . @var{registry})},
where @var{family} is a family name of a font (possibly including a
foundry name at the head), @var{registry} is a registry name of a font
(possibly including an encoding name at the tail).
@var{font-spec} may be a cons cell @w{@code{(@var{family}
. @var{registry})}}, where @var{family} is a family name of a font
(possibly including a foundry name at the head), and @var{registry} is
a registry name of a font (possibly including an encoding name at the
tail).
@var{font-spec} may be a font name, a string.
@var{font-spec} may be @code{nil}, which explicitly specifies that
there's no font for the specified @var{character}. This is useful,
there's no font for the specified @var{characters}. This is useful,
for example, to avoid expensive system-wide search for fonts for
characters that have no glyphs, like those from the Unicode Private
Use Area (PUA).
The optional argument @var{add}, if non-@code{nil}, specifies how to
add @var{font-spec} to the font specifications previously set. If it
is @code{prepend}, @var{font-spec} is prepended. If it is
@code{append}, @var{font-spec} is appended. By default,
@var{font-spec} overrides the previous settings.
add @var{font-spec} to the font specifications previously set for
@var{characters}. If it is @code{prepend}, @var{font-spec} is
prepended to the existing specs. If it is @code{append},
@var{font-spec} is appended. By default, @var{font-spec} overwrites
the previously set font specs.
For instance, this changes the default fontset to use a font of which
For instance, this changes the default fontset to use a font whose
family name is @samp{Kochi Gothic} for all characters belonging to
the charset @code{japanese-jisx0208}.
the charset @code{japanese-jisx0208}:
@smallexample
(set-fontset-font t 'japanese-jisx0208
@ -3997,13 +4021,26 @@ required; and @code{gpos} is a list of OpenType GPOS feature tag
symbols, or @code{nil} if none is required. If @code{gsub} or
@code{gpos} is a list, a @code{nil} element in that list means that
the font must not match any of the remaining tag symbols. The
@code{gpos} element may be omitted.
@code{gpos} element may be omitted. For the list of OpenType script,
language, and feature tags, see
@uref{https://docs.microsoft.com/en-us/typography/opentype/spec/ttoreg,
the list of registered OTF tags}.
@item :type
@cindex font backend
The symbol that specifies the @dfn{font backend} used to draw the
characters. The possible values depend on the platform and on how
Emacs was configured at build time. Typical values include
@code{ftcrhb} and @code{xfthb} on X, @code{harfbuzz} on MS-Windows,
@code{ns} on GNUstep, etc. It can also be @code{nil} if left
unspecified, typically in a font-spec.
@end table
@end defun
@defun font-put font-spec property value
Set the font property @var{property} in the font-spec @var{font-spec}
to @var{value}.
to @var{value}. The @var{property} can any of the ones described
above.
@end defun
@cindex font entity
@ -4047,12 +4084,28 @@ object, a font entity, or a font spec.
@defun font-get font property
This function returns the value of the font property @var{property}
for @var{font}.
for @var{font}. The @var{property} can any of the ones that
@code{font-spec} supports.
If @var{font} is a font spec and the font spec does not specify
@var{property}, the return value is @code{nil}. If @var{font} is a
font object or font entity, the value for the @var{:script} property
may be a list of scripts supported by the font.
may be a list of scripts supported by the font, and the value of the
@code{:otf} property is a cons of the form @w{@code{(@var{gsub}
. @var{gpos})}}, where @var{gsub} and @var{gpos} are lists
representing OpenType features supported by the font, of the form
@smallexample
((@var{script-tag} (@var{langsys-tag} @var{feature}@dots{}) @dots{}) @dots{})
@end smallexample
@noindent where @var{script-tag}, @var{langsys-tag}, and @var{feature}
are symbols representing OpenType layout tags.
If @var{font} is a font object, the special property
@code{:combining-capability} is non-@code{nil} if the font backend of
@var{font} supports rendering of combining characters for non-OpenType
fonts.
@end defun
@defun font-face-attributes font &optional frame
@ -4642,14 +4695,15 @@ about to be executed. This feature has nothing to do with
@defvar overlay-arrow-string
This variable holds the string to display to call attention to a
particular line, or @code{nil} if the arrow feature is not in use.
On a graphical display the contents of the string are ignored; instead a
glyph is displayed in the fringe area to the left of the display area.
On a graphical display the contents of the string are ignored if the
left fringe is shown; instead a glyph is displayed in the fringe area
to the left of the display area.
@end defvar
@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 the arrow text
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
@ -4681,11 +4735,12 @@ this list.
Each variable on this list can have properties
@code{overlay-arrow-string} and @code{overlay-arrow-bitmap} that
specify an overlay arrow string (for text terminals) or fringe bitmap
(for graphical terminals) to display at the corresponding overlay
arrow position. If either property is not set, the default
@code{overlay-arrow-string} or @code{overlay-arrow} fringe indicator
is used.
specify an overlay arrow string (for text terminals or graphical
terminals without the left fringe shown) or fringe bitmap
(for graphical terminals with a left fringe) to display at the
corresponding overlay arrow position. If either property is not set,
the default @code{overlay-arrow-string} or @code{overlay-arrow} fringe
indicator is used.
@node Scroll Bars
@ -5505,6 +5560,12 @@ symbol}. The symbols for the above formats are, respectively,
@code{pbm}, @code{xbm}, @code{xpm}, @code{gif}, @code{jpeg},
@code{tiff}, @code{png}, @code{svg}, and @code{webp}.
On some platforms, the built-in image support that doesn't require
any optional libraries includes BMP images.@footnote{
On MS-Windows, this requires @code{w32-use-native-image-API} to be set
non-@code{nil}.
}
Furthermore, if you build Emacs with ImageMagick
(@code{libMagickWand}) support, Emacs can display any image format
that ImageMagick can. @xref{ImageMagick Images}. All images
@ -7509,7 +7570,7 @@ end of the buffer continues from the other end. If
@var{display-message} is non-@code{nil}, the button's help-echo string
is displayed. Any button with a non-@code{nil} @code{skip} property
is skipped over. Returns the button found, and signals an error if no
buttons can be found. If @var{no-error} is non-@code{nil}, return nil
buttons can be found. If @var{no-error} is non-@code{nil}, return @code{nil}
instead of signaling the error.
@end deffn
@ -7521,7 +7582,7 @@ end of the buffer continues from the other end. If
@var{display-message} is non-@code{nil}, the button's help-echo string
is displayed. Any button with a non-@code{nil} @code{skip} property
is skipped over. Returns the button found, and signals an error if no
buttons can be found. If @var{no-error} is non-@code{nil}, return nil
buttons can be found. If @var{no-error} is non-@code{nil}, return @code{nil}
instead of signaling the error.
@end deffn
@ -8273,7 +8334,7 @@ there is no available font (on a graphical display), and characters
which cannot be encoded by the terminal's coding system (on a text
terminal).
@vindex glyphless-display-mode
@findex glyphless-display-mode
The @code{glyphless-display-mode} minor mode can be used to toggle
displaying glyphless characters in a convenient manner in the current
buffer. If this mode is enabled, all the glyphless characters are

View file

@ -700,8 +700,12 @@ on this process.
@table @kbd
@item e @var{exp} @key{RET}
Evaluate expression @var{exp} in the context outside of Edebug
(@code{edebug-eval-expression}). That is, Edebug tries to minimize its
interference with the evaluation.
(@code{edebug-eval-expression}). That is, Edebug tries to minimize
its interference with the evaluation. By default, this command
suppresses the debugger during evaluation, so that an error in the
evaluated expression won't add a new error on top of the existing one.
Set the @code{debug-allow-recursive-debug} user option to a
non-@code{nil} value to override this.
@item M-: @var{exp} @key{RET}
Evaluate expression @var{exp} in the context of Edebug itself

View file

@ -1450,13 +1450,19 @@ is owned by the user with name @samp{lh}.
is in the group with name @samp{users}.
@item (20614 64019 50040 152000)
was last accessed on October 23, 2012, at 20:12:03.050040152 UTC.
was last accessed on October 23, 2012, at 20:12:03.050040152 UTC@.
(This timestamp is @code{(1351023123050040152 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
@item (20000 23 0 0)
was last modified on July 15, 2001, at 08:53:43 UTC.
was last modified on July 15, 2001, at 08:53:43.000000000 UTC@.
(This timestamp is @code{(1310720023000000000 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
@item (20614 64555 902289 872000)
last had its status changed on October 23, 2012, at 20:20:59.902289872 UTC.
last had its status changed on October 23, 2012, at 20:20:59.902289872 UTC@.
(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,
@ -3344,6 +3350,7 @@ first, before handlers for jobs such as remote file access.
@code{get-file-buffer},
@code{insert-directory},
@code{insert-file-contents},@*
@code{list-system-processes},
@code{load}, @code{lock-file},
@code{make-auto-save-file-name},
@code{make-directory},
@ -3352,7 +3359,7 @@ first, before handlers for jobs such as remote file access.
@code{make-nearby-temp-file},
@code{make-process},
@code{make-symbolic-link},@*
@code{process-file},
@code{process-attributes}, @code{process-file},
@code{rename-file}, @code{set-file-acl}, @code{set-file-modes},
@code{set-file-selinux-context}, @code{set-file-times},
@code{set-visited-file-modtime}, @code{shell-command},
@ -3405,6 +3412,7 @@ first, before handlers for jobs such as remote file access.
@code{get-file-buffer},
@code{insert-directory},
@code{insert-file-contents},
@code{list-system-processes},
@code{load}, @code{lock-file},
@code{make-auto-save-file-name},
@code{make-direc@discretionary{}{}{}tory},
@ -3413,7 +3421,7 @@ first, before handlers for jobs such as remote file access.
@code{make-nearby-temp-file},
@code{make-process},
@code{make-symbolic-link},
@code{process-file},
@code{process-attributes}, @code{process-file},
@code{rename-file}, @code{set-file-acl}, @code{set-file-modes},
@code{set-file-selinux-context}, @code{set-file-times},
@code{set-visited-file-modtime}, @code{shell-command},

View file

@ -3512,10 +3512,18 @@ enabled. Typically, @var{body} would use @code{read-event} to read
the motion events and modify the display accordingly. @xref{Motion
Events}, for the format of mouse motion events.
The value of @code{track-mouse} is that of the last form in @var{body}.
You should design @var{body} to return when it sees the up-event that
indicates the release of the button, or whatever kind of event means
it is time to stop tracking.
The value of @code{track-mouse} is that of the last form in
@var{body}. You should design @var{body} to return when it sees the
up-event that indicates the release of the button, or whatever kind of
event means it is time to stop tracking. Its value also controls how
mouse events are reported while a mouse button is held down: if it is
@code{dropping} or @code{drag-source}, the motion events are reported
relative to the frame underneath the pointer. If there is no such
frame, the events will be reported relative to the frame the mouse
buttons were first pressed on. In addition, the @code{posn-window} of
the mouse position list will be @code{nil} if the value is
@code{drag-source}. This is useful to determine if a frame is not
directly visible underneath the mouse pointer.
The @code{track-mouse} form causes Emacs to generate mouse motion
events by binding the variable @code{track-mouse} to a
@ -3918,11 +3926,11 @@ upper-case names, in accord with X Window System conventions. If
@var{type} is @code{nil}, that stands for @code{PRIMARY}.
If @var{data} is @code{nil}, it means to clear out the selection.
Otherwise, @var{data} may be a string, a symbol, an integer (or a cons
of two integers or list of two integers), an overlay, or a cons of two
markers pointing to the same buffer. An overlay or a pair of markers
stands for text in the overlay or between the markers. The argument
@var{data} may also be a vector of valid non-vector selection values.
Otherwise, @var{data} may be a string, a symbol, an integer, an
overlay, or a cons of two markers pointing to the same buffer. An
overlay or a pair of markers stands for text in the overlay or between
the markers. The argument @var{data} may also be a vector of valid
non-vector selection values.
This function returns @var{data}.
@end deffn
@ -4038,6 +4046,55 @@ there is no match there, Emacs looks for a match in
still no match has been found, the text for the URL is inserted. If
you want to alter Emacs behavior, you can customize these variables.
@cindex initiating drag-and-drop
On capable window systems, Emacs also supports dragging contents
from its frames to windows of other applications.
@defun x-begin-drag targets &optional action frame return-frame allow-current-frame
This function begins a drag from @var{frame}, and returns when the
drag-and-drop operation ends, either because the drop was successful,
or because the drop was rejected. The drop occurs when all mouse
buttons are released on top of an X window other than @var{frame} (the
@dfn{drop target}), or any X window if @var{allow-current-frame} is
non-@code{nil}.
@var{targets} is a list of strings describing selection targets, much
like the @var{data-type} argument to @code{gui-get-selection}, that
the drop target can request from Emacs (@pxref{Window System
Selections}).
@var{action} is a symbol describing the action recommended to the
target. It can either be @code{XdndActionCopy}, which
means to copy the contents of the selection @code{XdndSelection} to
the drop target; or @code{XdndActionMove}, which means copy as with
@code{XdndActionCopy}, and in addition the caller should delete
whatever was stored in that selection after copying it.
@var{action} may also be an alist which associates between symbols
describing the available actions, and strings that the drop target is
expected to present to the user to choose between the available
actions.
If @var{return-frame} is non-@code{nil} and the mouse moves over an
Emacs frame after first moving out of @var{frame}, then the frame to
which the mouse moves will be returned immediately. If
@var{return-frame} is the symbol @code{now}, then any frame underneath
the mouse pointer will be returned without waiting for the mouse to
first move out of @var{frame}. @var{return-frame} is useful when you
want to treat dragging content from one frame to another specially,
while also being able to drag content to other programs, but it is not
guaranteed to work on all systems and with all window managers.
If the drop was rejected or no drop target was found, this function
returns @code{nil}. Otherwise, it returns a symbol describing the
action the target chose to perform, which can differ from @var{action}
if that isn't supported by the drop target. @code{XdndActionPrivate}
is also a valid return value in addition to @code{XdndActionCopy} and
@code{XdndActionMove}; it means that the drop target chose to perform
an unspecified action, and no further processing is required by the
caller.
@end defun
@node Color Names
@section Color Names

View file

@ -22,6 +22,7 @@ define them.
* Function Cells:: Accessing or setting the function definition
of a symbol.
* Closures:: Functions that enclose a lexical environment.
* OClosures:: Function objects
* Advising Functions:: Adding to the definition of a function.
* Obsolete Functions:: Declaring functions obsolete.
* Inline Functions:: Functions that the compiler will expand inline.
@ -1509,6 +1510,116 @@ exposed to the rest of the Lisp world is considered an internal
implementation detail. For this reason, we recommend against directly
examining or altering the structure of closure objects.
@node OClosures
@section Open Closures
Traditionally, functions are opaque objects which offer no other
functionality but to call them. Emacs Lisp functions aren't fully
opaque since you can extract some info out of them such as their
docstring, their arglist, or their interactive spec, but they are
mostly opaque. This is usually what we want, but occasionally we need
functions to expose a bit more information about themselves.
OClosures are functions which carry additional type information,
and expose some information in the form of slots which you can access
via accessor functions.
They are defined in two steps: first @code{oclosure-define} is used to
define new OClosure types by specifying the slots carried by those
OClosures, and then @code{oclosure-lambda} is used to create an
OClosure object of a given type.
Say we want to define keyboard macros, i.e. interactive functions
which re-execute a sequence of key events. You could do it with
a plain function as follows:
@example
(defun kbd-macro (key-sequence)
(lambda (&optional arg)
(interactive "P")
(execute-kbd-macro key-sequence arg)))
@end example
But with such a definition there is no easy way to extract the
@var{key-sequence} from that function, for example to print it.
We can solve this problem using OClosures as follows. First we define
the type of our keyboard macros (to which we decided to add
a @code{counter} slot while at it):
@example
(oclosure-define kbd-macro
"Keyboard macro."
keys (counter :mutable t))
@end example
After which we can rewrite our @code{kbd-macro} function:
@example
(defun kbd-macro (key-sequence)
(oclosure-lambda (kbd-macro (keys key-sequence) (counter 0))
(&optional arg)
(interactive "p")
(execute-kbd-macro keys arg)
(setq counter (1+ counter))))
@end example
As you can see, the @code{keys} and @code{counter} slots of the
OClosure can be accessed as local variables from within the body
of the OClosure. But we can now also access them from outside of the
body of the OClosure, for example to describe a keyboard macro:
@example
(defun describe-kbd-macro (km)
(if (not (eq 'kbd-macro (oclosure-type km)))
(message "Not a keyboard macro")
(let ((keys (kbd-macro--keys km))
(counter (kbd-macro--counter km)))
(message "Keys=%S, called %d times" keys counter))))
@end example
Where @code{kbd-macro--keys} and @code{kbd-macro--counter} are
accessor functions generated by the @code{oclosure-define} macro.
@defmac oclosure-define name &optional docstring &rest slots
This macro defines a new OClosure type along with accessor functions
for its slots. @var{name} can be a symbol (the name of
the new type), or a list of the form @code{(@var{name} . @var{type-props})} in
which case @var{type-props} is a list of additional properties.
@var{slots} is a list of slot descriptions where each slot can be
either a symbol (the name of the slot) or it can be of the form
@code{(@var{slot-name} . @var{slot-props})} where @var{slot-props} is
a property list.
For each slot, the macro creates an accessor function named
@code{@var{name}--@var{slot-name}}. By default slots are immutable.
If you need a slot to be mutable, you need to specify it with the
@code{:mutable} slot property, after which it can be mutated for
example with @code{setf}.
Beside slot accessors, the macro can create a predicate and
functional update functions according to @var{type-props}:
a @code{(:predicate @var{pred-name})} in the @var{type-props} causes
the definition of a predicate function under the name @var{pred-name},
and @code{(:copier @var{copier-name} @var{copier-arglist})} causes the
definition of a functional update function which takes an OClosure of
type @var{name} as first argument and returns a copy of it with the
slots named in @var{copier-arglist} modified to the value passed in the
corresponding argument.
@end defmac
@defmac oclosure-lambda (type . slots) arglist &rest body
This macro creates an anonymous OClosure of type @var{type}.
@var{slots} should be a list of elements of the form @code{(@var{slot-name}
@var{exp})}.
At run time, each @var{exp} is evaluated, in order, after which
the OClosure is created with its slots initialized with the
resulting values.
When called as a function, the OClosure will accept arguments
according to @var{arglist} and will execute the code in @var{body}.
@var{body} can refer to the value of any of its slot directly as if it
were a local variable that had been captured by static scoping.
@end defmac
@defun oclosure-type object
This function returns the OClosure type (a symbol) of @var{object} if it is an
OClosure, and @code{nil} otherwise.
@end defun
@node Advising Functions
@section Advising Emacs Lisp Functions
@cindex advising functions

View file

@ -158,6 +158,13 @@ the function definition has no documentation string. In that case,
@code{documentation} returns @code{nil}.
@end defun
@defun function-documentation function
Generic function used by @code{documentation} to extract the raw
docstring from a function object. You can specify how to get the
docstring of a specific function type by adding a corresponding method
to it.
@end defun
@defun face-documentation face
This function returns the documentation string of @var{face} as a
face.

View file

@ -503,9 +503,11 @@ if the information is not available.
@example
@group
emacs-build-time
@result{} (20614 63694 515336 438000)
@result{} (25194 55894 8547 617000)
@end group
@end example
(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

@ -1643,7 +1643,7 @@ non-@code{nil}, the definition will be removed. This is almost the
same as setting the definition to @code{nil}, but makes a difference
if the @var{keymap} has a parent, and @var{key} is shadowing the same
binding in the parent. With @var{remove}, subsequent lookups will
return the binding in the parent, and with a nil @var{def}, the
return the binding in the parent, whereas with a @code{nil} definition the
lookups will return @code{nil}.
@end defun

View file

@ -244,6 +244,13 @@ This function works by calling the
value))
@end group
@end smallexample
@findex read-string-from-buffer
If you have a long string (for instance, one that is several lines
long) that you wish to edit, using @code{read-string} may not be
ideal. In that case, popping to a new, normal buffer where the user
can edit the string may be more convenient, and you can use the
@code{read-string-from-buffer} function to do that.
@end defun
@defun read-regexp prompt &optional defaults history
@ -1936,6 +1943,7 @@ completion function is trying to complete. If the symbol matches one
of the keys in @code{completion-category-overrides}, the usual
completion behavior is overridden. @xref{Completion Variables}.
@cindex @code{annotation-function}, in completion
@item annotation-function
The value should be a function for @dfn{annotating} completions. The
function should take one argument, @var{string}, which is a possible
@ -1945,6 +1953,7 @@ Unless this function puts own face on the annotation suffix string,
the @code{completions-annotations} face is added by default to
that string.
@cindex @code{affixation-function}, in completion
@item affixation-function
The value should be a function for adding prefixes and suffixes to
completions. The function should take one argument,
@ -1955,6 +1964,7 @@ the completion string in the @file{*Completions*} buffer, and
a suffix displayed after the completion string. This function
takes priority over @code{annotation-function}.
@cindex @code{group-function}, in completion
@item group-function
The value should be a function for grouping the completion candidates.
The function must take two arguments, @var{completion}, which is a
@ -1965,12 +1975,14 @@ can also be @code{nil}. Otherwise the function must return the
transformed candidate. The transformation can for example remove a
redundant prefix, which is displayed in the group title.
@cindex @code{display-sort-function}, in completion
@item display-sort-function
The value should be a function for sorting completions. The function
should take one argument, a list of completion strings, and return a
sorted list of completion strings. It is allowed to alter the input
list destructively.
@cindex @code{cycle-sort-function}, in completion
@item cycle-sort-function
The value should be a function for sorting completions, when
@code{completion-cycle-threshold} is non-@code{nil} and the user is

View file

@ -1912,6 +1912,16 @@ This means ``use in modes derived from @code{text-mode}, but nowhere
else''. (There's an implicit @code{nil} element at the end.)
@end defmac
@findex buffer-local-restore-state
@defmac buffer-local-set-state variable value...
Minor modes often set buffer-local variables that affect some features
in Emacs. When a minor mode is switched off, the mode is expected to
restore the previous state of these variables. This convenience macro
helps with doing that: It works much like @code{setq-local}, but
returns an object that can be used to restore these values back to
their previous values/states (using the companion function
@code{buffer-local-restore-state}).
@end defmac
@node Mode Line Format
@section Mode Line Format
@ -3207,7 +3217,9 @@ Non-@code{nil} means that regular expression matching for the sake of
You can use @code{font-lock-add-keywords} to add additional
search-based fontification rules to a major mode, and
@code{font-lock-remove-keywords} to remove rules.
@code{font-lock-remove-keywords} to remove rules. You can also
customize the @code{font-lock-ignore} option to selectively disable
fontification rules for keywords that match certain criteria.
@defun font-lock-add-keywords mode keywords &optional how
This function adds highlighting @var{keywords}, for the current buffer
@ -3277,6 +3289,99 @@ mode @emph{and} all modes derived from it, do this instead:
font-lock-keyword-face)))))
@end smallexample
@defopt font-lock-ignore
@cindex selectively disabling font-lock fontifications
This option defines conditions for selectively disabling
fontifications due to certain Font Lock keywords. If non-@code{nil},
its value is a list of elements of the following form:
@example
(@var{symbol} @var{condition} @dots{})
@end example
Here, @var{symbol} is a symbol, usually a major or minor mode. The
subsequent @var{condition}s of a @var{symbol}'s list element will be in
effect if @var{symbol} is bound and its value is non-@code{nil}. For
a mode's symbol, it means that the current major mode is derived from
that mode, or that minor mode is enabled in the buffer. When a
@var{condition} is in effect, any fontifications caused by
@code{font-lock-keywords} elements that match the @var{condition} will
be disabled.
Each @var{condition} can be one of the following:
@table @asis
@item a symbol
This condition matches any element of Font Lock keywords that
references the symbol. This is usually a face, but can be any symbol
referenced by an element of the @code{font-lock-keywords} list. The
symbol can contain wildcards: @code{*} matches any string in the
symbol'ss name, @code{?} matches a single character, and
@code{[@var{char-set}]}, where @var{char-set} is a string of one or
more characters, matches a single character from the set.
@item a string
This condition matches any element of Font Lock keywords whose
@var{matcher} is a regexp which matches the string. In other words,
this condition matches a Font Lock rule which highlights the string.
Thus, the string could be a specific program keyword whose
highlighting you want to disable.
@item @code{(pred @var{function})}
This condition matches any element of Font Lock keywords for which
@var{function}, when called with the element as the argument, returns
non-@code{nil}.
@item @code{(not @var{condition})}
This matches if @var{condition} doesnt.
@item @code{(and @var{condition} @dots{})}
This matches if each of the @var{condition}s matches.
@item @code{(or @var{condition} @dots{})}
This matches if at least one of the @var{condition}s matches.
@item @code{(except @var{condition})}
This condition can only be used at top level or inside an
@code{or} clause. It undoes the effect of a previously matching
condition on the same level.
@end table
@end defopt
As an example, consider the following setting:
@smallexample
(setq font-lock-ignore
'((prog-mode font-lock-*-face
(except help-echo))
(emacs-lisp-mode (except ";;;###autoload)")
(whitespace-mode whitespace-empty-at-bob-regexp)
(makefile-mode (except *))))
@end smallexample
Line by line, this does the following:
@enumerate
@item
In all programming modes, disable fontifications due to all font-lock
keywords that apply one of the standard font-lock faces (excluding
strings and comments, which are covered by syntactic Font Lock).
@item
However, keep any keywords that add a @code{help-echo} text property.
@item
In Emacs Lisp mode, also keep the highlighting of autoload cookies,
which would have been excluded by the first condition.
@item
When @code{whitespace-mode} (a minor mode) is enabled, also don't
highlight an empty line at beginning of buffer.
@item
Finally, in Makefile mode, don't apply any conditions.
@end enumerate
@node Other Font Lock Variables
@subsection Other Font Lock Variables

View file

@ -855,15 +855,24 @@ function to all or part of the characters in a charset:
Call @var{function} for characters in @var{charset}. @var{function}
is called with two arguments. The first one is a cons cell
@code{(@var{from} . @var{to})}, where @var{from} and @var{to}
indicate a range of characters contained in charset. The second
argument passed to @var{function} is @var{arg}.
indicate a range of characters contained in @var{charset}. The second
argument passed to @var{function} is @var{arg}, or @code{nil} if
@var{arg} is omitted.
By default, the range of codepoints passed to @var{function} includes
all the characters in @var{charset}, but optional arguments
@var{from-code} and @var{to-code} limit that to the range of
characters between these two codepoints of @var{charset}. If either
of them is @code{nil}, it defaults to the first or last codepoint of
@var{charset}, respectively.
@var{charset}, respectively. Note that @var{from-code} and
@var{to-code} are @var{charset}'s codepoints, not the Emacs codes of
characters; by contrast, the values @var{from} and @var{to} in the
cons cell passed to @var{function} @emph{are} Emacs character codes.
Those Emacs character codes are either Unicode code points, or Emacs
internal code points that extend Unicode and are beyond the Unicode
range of characters @code{0..#x10FFFF} (@pxref{Text Representations}).
The latter happens rarely, with legacy CJK charsets for codepoints of
@var{charset} which specify characters not yet unified with Unicode.
@end defun
@node Scanning Charsets

View file

@ -699,7 +699,7 @@ If you started Emacs from a terminal, the parent process normally
resumes control. The low-level primitive for killing Emacs is
@code{kill-emacs}.
@deffn Command kill-emacs &optional exit-data
@deffn Command kill-emacs &optional exit-data restart
This command calls the hook @code{kill-emacs-hook}, then exits the
Emacs process and kills it.
@ -714,6 +714,10 @@ input) can read them.
If @var{exit-data} is neither an integer nor a string, or is omitted,
that means to use the (system-specific) exit status which indicates
successful program termination.
If @var{restart} is non-@code{nil}, instead of just exiting at the
end, start a new Emacs process, using the same command line arguments
as the currently running Emacs process.
@end deffn
@cindex SIGTERM
@ -756,6 +760,13 @@ the remaining functions in this hook. Calling @code{kill-emacs}
directly does not run this hook.
@end defopt
@deffn Command restart-emacs
This command does the same as @code{save-buffers-kill-emacs}, but
instead of just killing the current Emacs process at the end, it'll
restart a new Emacs process, using the same command line arguments as
the currently running Emacs process.
@end deffn
@node Suspending Emacs
@subsection Suspending Emacs
@cindex suspending Emacs
@ -1303,10 +1314,16 @@ zone.
@cindex Lisp timestamp
@cindex timestamp, Lisp
@cindex Coordinated Universal Time
@cindex Universal Time
@cindex UTC
@cindex leap seconds
Many functions like @code{current-time} and @code{file-attributes}
return @dfn{Lisp timestamp} values that count seconds, and that can
represent absolute time by counting seconds since the @dfn{epoch} of
1970-01-01 00:00:00 UTC.
1970-01-01 00:00:00 UTC (Coordinated Universal Time). Typically these
counts ignore leap seconds; however, GNU and some other operating
systems can be configured to count leap seconds.
Although traditionally Lisp timestamps were integer pairs, their
form has evolved and programs ordinarily should not depend on the
@ -1328,11 +1345,7 @@ A pair of integers @code{(@var{ticks} . @var{hz})}, where @var{hz} is
positive. This represents @var{ticks}/@var{hz} seconds, which is the
same time as plain @var{ticks} if @var{hz} is 1. A common value for
@var{hz} is 1000000000, for a nanosecond-resolution
clock.@footnote{Currently @var{hz} should be at least 65536 to avoid
compatibility warnings when the timestamp is passed to standard
functions, as previous versions of Emacs would interpret such a
timestamps differently due to backward-compatibility concerns. These
warnings are intended to be removed in a future Emacs version.}
clock.
@item
A list of four integers @code{(@var{high} @var{low} @var{micro}
@ -1346,7 +1359,8 @@ This represents the number of seconds using the formula:
@tex
$high \times 2^{16} + low + micro \times 10^{-6} + pico \times 10^{-12}$.
@end tex
In some cases, functions may default to returning two- or
If @code{current-time-list} is @code{t},
some functions may default to returning two- or
three-element lists, with omitted @var{micro} and @var{pico}
components defaulting to zero.
On all current machines @var{pico} is a multiple of 1000, but this
@ -1357,7 +1371,7 @@ may change as higher-resolution clocks become available.
Function arguments, e.g., the @var{time} argument to
@code{format-time-string}, accept a more-general @dfn{time value}
format, which can be a Lisp timestamp, @code{nil} for the current
time, a single floating-point number for seconds, or a list
time, a finite floating-point number for seconds, or a list
@code{(@var{high} @var{low} @var{micro})} or @code{(@var{high}
@var{low})} that is a truncated list timestamp with missing elements
taken to be zero.
@ -1367,8 +1381,8 @@ Time values can be converted to and from calendrical and other forms.
Some of these conversions rely on operating system functions that
limit the range of possible time values, and signal an error such as
@samp{"Specified time is not representable"} if the
limits are exceeded. For instance, a system may not support years
before 1970, or years before 1901, or years far in the future.
limits are exceeded. For instance, a system might not support
timestamps before the epoch, or years far in the future.
You can convert a time value into
a human-readable string using @code{format-time-string}, into a Lisp
timestamp using @code{time-convert}, and into other forms using
@ -1400,13 +1414,28 @@ The operating system limits the range of time and zone values.
@end example
@end defun
@defvar current-time-list
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
This function returns the current time as a Lisp timestamp.
Although the timestamp takes the form @code{(@var{high} @var{low}
@var{micro} @var{pico})} in the current Emacs release, this is
planned to change in a future Emacs version. You can use the
@code{time-convert} function to convert a timestamp to some other
form. @xref{Time Conversion}.
If @code{current-time-list} is @code{nil},
the timestamp has the form @code{(@var{ticks} . @var{hz})} where
@var{ticks} counts clock ticks and @var{hz} is the clock ticks per second.
Otherwise, the timestamp has the list form
@code{(@var{high} @var{low} @var{usec} @var{psec})}.
You can use @code{(time-convert nil t)} or @code{(time-convert nil 'list)}
to obtain a particular form regardless of the value of
@code{current-time-list}. @xref{Time Conversion}.
@end defun
@defun float-time &optional time
@ -1422,6 +1451,13 @@ as @samp{0.1} but is slightly greater than 1/10.
@code{time-to-seconds} is an alias for this function.
@end defun
@defun current-cpu-time
Return the current @acronym{CPU} time along with its resolution. The
return value is a pair @code{(CPU-TICKS . TICKS-PER-SEC)}. The
@var{CPU-TICKS} counter can wrap around, so values cannot be
meaningfully compared if too much time has passed between them.
@end defun
@node Time Zone Rules
@section Time Zone Rules
@cindex time zone rules
@ -1434,11 +1470,11 @@ to default to Universal Time with @code{(setenv "TZ" "UTC0")}. If
which is a platform-dependent default time zone.
The set of supported @env{TZ} strings is system-dependent. GNU and
many other systems support the tzdata database, e.g.,
many other systems support TZDB timezones, e.g.,
@samp{"America/New_York"} specifies the time zone and daylight saving
time history for locations near New York City. GNU and most other
systems support POSIX-style @env{TZ} strings, e.g.,
@samp{"EST+5EDT,M4.1.0/2,M10.5.0/2"} specifies the rules used in New
@samp{"EST5EDT,M4.1.0,M10.5.0"} specifies the rules used in New
York from 1987 through 2006. All systems support the string
@samp{"UTC0"} meaning Universal Time.
@ -1490,18 +1526,20 @@ The operating system limits the range of time and zone values.
These functions convert time values (@pxref{Time of Day}) to Lisp
timestamps, or into calendrical information and vice versa.
Many 32-bit operating systems are limited to system times containing
32 bits of information in their seconds component; these systems
typically handle only the times from 1901-12-13 20:45:52 through
2038-01-19 03:14:07 Universal Time. However, 64-bit and some 32-bit operating
systems have larger seconds components, and can represent times far in
the past or future.
Many operating systems use 64-bit signed integers to count seconds,
and can represent times far in the past or future. However, some are
more limited. For example, old-fashioned operating systems that use
32-bit signed integers typically handle only times from 1901-12-13
20:45:52 through 2038-01-19 03:14:07 Universal Time.
Calendrical conversion functions always use the Gregorian calendar, even
for dates before the Gregorian calendar was introduced. Year numbers
count the number of years since the year 1 BC, and do not skip zero
Calendrical conversion functions use the Gregorian calendar even for
dates before the Gregorian calendar was introduced, and for dates in
the far distant past or future for which the Gregorian calendar
is wildly inaccurate and disagrees with common practice in scientific fields
like astronomy and paleontology, which use Julian-calendar year lengths.
Year numbers count since the year 1 BCE, and do not skip zero
as traditional Gregorian years do; for example, the year number
@minus{}37 represents the Gregorian year 38 BC@.
@minus{}37 represents the Gregorian year 38 BCE@.
@defun time-convert time &optional form
This function converts a time value into a Lisp timestamp.
@ -1513,20 +1551,20 @@ integer, it specifies a clock frequency and this function returns an
integer-pair timestamp @code{(@var{ticks} . @var{form})}. If @var{form} is
@code{t}, this function treats it as a positive integer suitable for
representing the timestamp; for example, it is treated as 1000000000
if @var{time} is nil and the platform timestamp has nanosecond
if @var{time} is @code{nil} and the platform timestamp has nanosecond
resolution. If @var{form} is @code{list}, this function returns an
integer list @code{(@var{high} @var{low} @var{micro} @var{pico})}.
Although an omitted or @code{nil} @var{form} currently acts like
@code{list}, this is planned to change in a future Emacs version, so
callers requiring list timestamps should pass @code{list} explicitly.
If @var{time} is infinite or a NaN, this function signals an error.
If @var{time} is not a time value, this function signals an error.
Otherwise, if @var{time} cannot be represented exactly, conversion
truncates it toward minus infinity. When @var{form} is @code{t},
conversion is always exact so no truncation occurs, and the returned
clock resolution is no less than that of @var{time}. By way of
contrast, @code{float-time} can convert any Lisp time value without
signaling an error, although the result might not be exact.
contrast, although @code{float-time} can also convert any time value
without signaling an error, the result might not be exact.
@xref{Time of Day}.
For efficiency this function might return a value that is @code{eq} to
@ -1614,59 +1652,12 @@ a particular form should specify @var{form}.
@var{dow} and @var{utcoff}, and its @var{second} is an integer between
0 and 59 inclusive.
To access (or alter) the elements in the time value, the
To access (or alter) the elements in the calendrical information, the
@code{decoded-time-second}, @code{decoded-time-minute},
@code{decoded-time-hour}, @code{decoded-time-day},
@code{decoded-time-month}, @code{decoded-time-year},
@code{decoded-time-weekday}, @code{decoded-time-dst} and
@code{decoded-time-zone} accessors can be used.
For instance, to increase the year in a decoded time, you could say:
@lisp
(setf (decoded-time-year decoded-time)
(+ (decoded-time-year decoded-time) 4))
@end lisp
Also see the following function.
@end defun
@defun decoded-time-add time delta
This function takes a decoded time structure and adds @var{delta}
(also a decoded time structure) to it. Elements in @var{delta} that
are @code{nil} are ignored.
For instance, if you want ``same time next month'', you
could say:
@lisp
(let ((time (decode-time nil nil t))
(delta (make-decoded-time :month 2)))
(encode-time (decoded-time-add time delta)))
@end lisp
If this date doesn't exist (if you're running this on January 31st,
for instance), then the date will be shifted back until you get a
valid date (which will be February 28th or 29th, depending).
Fields are added in a most to least significant order, so if the
adjustment described above happens, it happens before adding days,
hours, minutes or seconds.
The values in @var{delta} can be negative to subtract values instead.
The return value is a decoded time structure.
@end defun
@defun make-decoded-time &key second minute hour day month year dst zone
Return a decoded time structure with only the given keywords filled
out, leaving the rest @code{nil}. For instance, to get a structure
that represents ``two months'', you could say:
@lisp
(make-decoded-time :month 2)
@end lisp
@end defun
@defun encode-time time &rest obsolescent-arguments
@ -1676,9 +1667,26 @@ It can act as the inverse of @code{decode-time}.
Ordinarily the first argument is a list
@code{(@var{second} @var{minute} @var{hour} @var{day} @var{month}
@var{year} @var{ignored} @var{dst} @var{zone})} that specifies a
decoded time in the style of @code{decode-time}, so that
@code{(encode-time (decode-time ...))} works. For the meanings of
these list members, see the table under @code{decode-time}.
decoded time in the style of @code{decode-time}. For the meanings of
these list elements, see the table under @code{decode-time}.
In particular, @var{dst} says how to interpret timestamps during a
daylight saving fallback when timestamps are repeated.
If @var{dst} is @minus{}1, the DST value is guessed; if it
is @code{t} or @code{nil} the timestamp with that DST value
is returned, with an error signaled if no such timestamp exists.
Unfortunately a @var{dst} value of @code{t} or @code{nil} does not
disambiguate timestamps duplicated when a TZDB-based timezone moves
further west of Greenwich, such as disambiguating the two
standard-time timestamps 2020-12-27 01:30 when @var{zone} is
@samp{"Europe/Volgograd"}, which at 02:00 that day changed
standard time from 4 to 3 hours east of Greenwich; if you need to
handle situations like this you can use a numeric @var{zone} to
disambiguate instead.
The first argument can also be a list @code{(@var{second} @var{minute}
@var{hour} @var{day} @var{month} @var{year})}, which is treated like
the list @code{(@var{second} @var{minute} @var{hour} @var{day}
@var{month} @var{year} nil -1 nil)}.
As an obsolescent calling convention, this function can be given six
or more arguments. The first six arguments @var{second},
@ -1687,14 +1695,18 @@ specify most of the components of a decoded time. If there are more
than six arguments the @emph{last} argument is used as @var{zone} and
any other extra arguments are ignored, so that @code{(apply
#'encode-time (decode-time ...))} works. In this obsolescent
convention, @var{zone} defaults to the current time zone rule
(@pxref{Time Zone Rules}), and @var{dst} is treated as if it was
@minus{}1.
convention, @var{dst} is @minus{}1 and @var{zone} defaults to the
current time zone rule (@pxref{Time Zone Rules}).
When modernizing an obsolescent caller, ensure that the more-modern
list equivalent contains 9 elements with a @code{dst} element that
is @minus{}1, not @code{nil}.
Year numbers less than 100 are not treated specially. If you want them
to stand for years above 1900, or years above 2000, you must alter them
yourself before you call @code{encode-time}.
The operating system limits the range of time and zone values.
However, timestamps ranging from the epoch to the near future are
always supported.
The @code{encode-time} function acts as a rough inverse to
@code{decode-time}. For example, you can pass the output of
@ -1707,6 +1719,33 @@ the latter to the former as follows:
You can perform simple date arithmetic by using out-of-range values for
@var{seconds}, @var{minutes}, @var{hour}, @var{day}, and @var{month};
for example, day 0 means the day preceding the given month.
Take care when doing so, as it is common for this to fail in some cases.
For example:
@lisp
;; Try to compute the time one month from now.
;; Watch out; this might not work as expected.
(let ((time (decode-time)))
(setf (decoded-time-month time)
(+ (decoded-time-month time) 1))
time)
@end lisp
@noindent
Unfortunately, this code might not work as expected if the resulting
time is invalid due to month length differences,
daylight saving transitions, time zone changes,
or missing leap days or leap seconds. For example, if executed on
January 30 this code yields a nonexistent date February 30,
which @code{encode-time} would adjust to early March.
Similarly, adding four years to February 29, 2096 would yield the
nonexistent date February 29, 2100; and adding one hour to 01:30 on
March 13, 2022 in New York would yield a timestamp 02:30 that does not
exist because clocks sprang forward from 02:00 to 03:00 that day.
To avoid some (though not all) of the problem, you
can base calculations on the middle of the affected unit, e.g., start
at the 15th of the month when adding months. Alternatively, you can use the
@file{calendar} and @file{time-date} libraries.
@end defun
@node Time Parsing
@ -1716,7 +1755,7 @@ for example, day 0 means the day preceding the given month.
@cindex formatting time values
These functions convert time values to text in a string, and vice versa.
Time values include @code{nil}, numbers, and Lisp timestamps
Time values include @code{nil}, finite numbers, and Lisp timestamps
(@pxref{Time of Day}).
@defun date-to-time string
@ -1961,6 +2000,10 @@ encountered. For example, the default format used by
@w{@code{"%Y, %D, %H, %M, %z%S"}} means that the number of seconds
will always be produced, but years, days, hours, and minutes will only
be shown if they are non-zero.
@item %x
Non-printing control flag that works along the same lines as
@samp{%z}, but instead suppresses printing of trailing zero-value time
elements.
@item %%
Produces a literal @samp{%}.
@end table
@ -2024,25 +2067,23 @@ interactively, it prints the duration in the echo area.
These functions perform calendrical computations using time values
(@pxref{Time of Day}). As with any time value, a value of
@code{nil} for any of their
time-value arguments stands for the current system time, and a single
time-value arguments stands for the current system time, and a finite
number stands for the number of seconds since the epoch.
@defun time-less-p t1 t2
This returns @code{t} if time value @var{t1} is less than time value
This returns @code{t} if the time value @var{t1} is less than the time value
@var{t2}.
The result is @code{nil} if either argument is a NaN.
@end defun
@defun time-equal-p t1 t2
This returns @code{t} if @var{t1} and @var{t2} are equal time values.
The result is @code{nil} if either argument is a NaN.
This returns @code{t} if the two time values @var{t1} and @var{t2} are
equal.
@end defun
@defun time-subtract t1 t2
This returns the time difference @var{t1} @minus{} @var{t2} between
two time values, as a Lisp time value. The result is exact and its clock
two time values, as a Lisp timestamp. The result is exact and its clock
resolution is no worse than the worse of its two arguments' resolutions.
The result is floating-point only if it is infinite or a NaN@.
If you need the difference in units
of elapsed seconds, you can convert it with @code{time-convert} or
@code{float-time}. @xref{Time Conversion}.
@ -2294,7 +2335,8 @@ can use in calling @code{cancel-timer} (@pxref{Timers}).
@end deffn
@cindex idleness
Emacs becomes @dfn{idle} when it starts waiting for user input, and
Emacs becomes @dfn{idle} when it starts waiting for user input
(unless it waits for input with a timeout, @pxref{Reading One Event}), and
it remains idle until the user provides some input. If a timer is set
for five seconds of idleness, it runs approximately five seconds after
Emacs first becomes idle. Even if @var{repeat} is non-@code{nil},
@ -3097,21 +3139,21 @@ This function removes the tray notification given by its unique
@cindex watch, for filesystem events
Several operating systems support watching of filesystems for changes
of files. If configured properly, Emacs links a respective library
like @file{inotify}, @file{kqueue}, @file{gfilenotify}, or
@file{w32notify} statically. These libraries enable watching of
filesystems on the local machine.
to files or their attributes. If configured properly, Emacs links a
respective library like @file{inotify}, @file{kqueue},
@file{gfilenotify}, or @file{w32notify} statically. These libraries
enable watching of filesystems on the local machine.
It is also possible to watch filesystems on remote machines,
@pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}
@pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}.
This does not depend on one of the libraries linked to Emacs.
Since all these libraries emit different events on notified file
changes, there is the Emacs library @code{filenotify} which provides a
unified interface. Lisp programs that want to receive file
notifications should always use this library in preference to the
native ones.
Since all these libraries emit different events upon notified file
changes, Emacs provides a special library @code{filenotify} which
presents a unified interface to applications. Lisp programs that want
to receive file notifications should always use this library in
preference to the native ones. This section documents the
@code{filenotify} library functions and variables.
@defun file-notify-add-watch file flags callback
Add a watch for filesystem events pertaining to @var{file}. This
@ -3119,31 +3161,33 @@ arranges for filesystem events pertaining to @var{file} to be reported
to Emacs.
The returned value is a descriptor for the added watch. Its type
depends on the underlying library, it cannot be assumed to be an
integer as in the example below. It should be used for comparison by
@code{equal} only.
depends on the underlying library, and in general cannot be assumed to
be an integer as in the example below. It should be used for
comparison by @code{equal} only.
If the @var{file} cannot be watched for some reason, this function
signals a @code{file-notify-error} error.
Sometimes, mounted filesystems cannot be watched for file changes.
This is not detected by this function, a non-@code{nil} return value
does not guarantee that changes on @var{file} will be notified.
This is not detected by this function, and so a non-@code{nil} return
value does not guarantee that changes on @var{file} will be actually
notified.
@var{flags} is a list of conditions to set what will be watched for.
It can include the following symbols:
@table @code
@item change
watch for file changes
watch for changes in file's contents
@item attribute-change
watch for file attribute changes, like permissions or modification
watch for changes in file attributes, like permissions or modification
time
@end table
If @var{file} is a directory, @code{change} watches for file creation
or deletion in that directory. Some of the file notification backends
report also file changes. This does not work recursively.
and deletion in that directory. Some of the native file notification
libraries also report file changes in that case. This does not work
recursively.
When any event happens, Emacs will call the @var{callback} function
passing it a single argument @var{event}, which is of the form
@ -3169,19 +3213,20 @@ reports attribute changes as well
@item attribute-changed
a @var{file} attribute was changed
@item stopped
watching @var{file} has been stopped
watching @var{file} has stopped
@end table
Note that the @file{w32notify} library does not report
@code{attribute-changed} events. When some file's attribute, like
permissions or modification time, has changed, this library reports a
@code{changed} event. Likewise, the @file{kqueue} library does not
report reliably file attribute changes when watching a directory.
reliably report file attribute changes when watching a directory.
The @code{stopped} event reports, that watching the file has been
stopped. This could be because @code{file-notify-rm-watch} was called
(see below), or because the file being watched was deleted, or due to
another error reported from the underlying library.
The @code{stopped} event means that watching the file has been
discontinued. This could be because @code{file-notify-rm-watch} was
called (see below), or because the file being watched was deleted, or
due to another error reported from the underlying library which makes
further watching impossible.
@var{file} and @var{file1} are the name of the file(s) whose event is
being reported. For example:
@ -3225,7 +3270,7 @@ being reported. For example:
@end group
@end example
Whether the action @code{renamed} is returned, depends on the used
Whether the action @code{renamed} is returned depends on the used
watch library. Otherwise, the actions @code{deleted} and
@code{created} could be returned in a random order.

View file

@ -197,7 +197,7 @@ gives special treatment to certain characters, and if these characters
occur in the file name, they will confuse the shell. To handle these
characters, use the function @code{shell-quote-argument}:
@defun shell-quote-argument argument
@defun shell-quote-argument argument &optional posix
This function returns a string that represents, in shell syntax,
an argument whose actual contents are @var{argument}. It should
work reliably to concatenate the return value into a shell command
@ -227,6 +227,15 @@ a shell command:
" "
(shell-quote-argument newfile))
@end example
If the optional @var{posix} argument is non-@code{nil}, @var{argument}
is quoted according to POSIX shell quoting rules, regardless of the
systems shell. This is useful when your shell could run on a remote
host, which requires a POSIX shell in general.
@example
(shell-quote-argument "foo > bar" (file-remote-p default-directory))
@end example
@end defun
@cindex quoting and unquoting command-line arguments
@ -1463,7 +1472,7 @@ incoming data from the connection. For serial connections, data that
arrived during the time the process was stopped might be lost.
@end defun
@deffn Command signal-process process signal
@deffn Command signal-process process signal &optional remote
This function sends a signal to process @var{process}. The argument
@var{signal} specifies which signal to send; it should be an integer,
or a symbol whose name is a signal.
@ -1471,12 +1480,18 @@ or a symbol whose name is a signal.
The @var{process} argument can be a system process @acronym{ID} (an
integer); that allows you to send signals to processes that are not
children of Emacs. @xref{System Processes}.
If @var{process} is a process object which contains the property
@code{remote-pid}, or @var{process} is a number and @var{remote} is a
remote file name, @var{process} is interpreted as process on the
respective remote host, which will be the process to signal.
@end deffn
Sometimes, it is necessary to send a signal to a non-local
asynchronous process. This is possible by writing an own
@code{interrupt-process} implementation. This function must be added
then to @code{interrupt-process-functions}.
@code{interrupt-process} or @code{signal-process} implementation.
This function must be added then to @code{interrupt-process-functions}
or @code{signal-process-functions}, respectively.
@defvar interrupt-process-functions
This variable is a list of functions to be called for
@ -1489,6 +1504,17 @@ default function, which shall always be the last in this list, is
This is the mechanism, how Tramp implements @code{interrupt-process}.
@end defvar
@defvar signal-process-functions
This variable is a list of functions to be called for
@code{signal-process}. The arguments of the functions are the same as
for @code{signal-process}. These functions are called in the order of
the list, until one of them returns non-@code{nil}. The default
function, which shall always be the last in this list, is
@code{signal-default-interrupt-process}.
This is the mechanism, how Tramp implements @code{signal-process}.
@end defvar
@node Output from Processes
@section Receiving Output from Processes
@cindex process output
@ -2232,9 +2258,8 @@ query flag of all processes is ignored.
In addition to accessing and manipulating processes that are
subprocesses of the current Emacs session, Emacs Lisp programs can
also access other processes running on the same machine. We call
these @dfn{system processes}, to distinguish them from Emacs
subprocesses.
also access other processes. We call these @dfn{system processes}, to
distinguish them from Emacs subprocesses.
Emacs provides several primitives for accessing system processes.
Not all platforms support these primitives; on those which don't,
@ -2246,6 +2271,9 @@ system. Each process is identified by its @acronym{PID}, a numerical
process ID that is assigned by the OS and distinguishes the process
from all the other processes running on the same machine at the same
time.
If @code{default-directory} points to a remote host, processes of that
host are returned.
@end defun
@defun process-attributes pid
@ -2257,6 +2285,9 @@ attribute @var{key}s that this function can return are listed below.
Not all platforms support all of these attributes; if an attribute is
not supported, its association will not appear in the returned alist.
If @code{default-directory} points to a remote host, @var{pid} is
regarded as process of that host.
@table @code
@item euid
The effective user ID of the user who invoked the process. The

View file

@ -685,6 +685,15 @@ This function outputs @var{character} to @var{stream}. It returns
@var{character}.
@end defun
@defun flush-standard-output
If you have Emacs-based batch scripts that send output to the
terminal, Emacs will automatically display the output whenever you
write a newline characters to @code{standard-output}. This function
allows you to flush to @code{standard-output} without sending a
newline character first, which enables you to display incomplete
lines.
@end defun
@defun prin1-to-string object &optional noescape
@cindex object to string
This function returns a string containing the text that @code{prin1}

View file

@ -434,9 +434,12 @@ display purposes; use @code{truncate-string-to-width} or
(@pxref{Size of Displayed Text}).
@end defun
@defun string-lines string &optional omit-nulls
@defun string-lines string &optional omit-nulls keep-newlines
Split @var{string} into a list of strings on newline boundaries. If
@var{omit-nulls}, remove empty lines from the results.
the optional argument @var{omit-nulls} is non-@code{nil}, remove empty
lines from the results. If the optional argument @var{keep-newlines}
is non-@code{nil}, don't remove the trailing newlines from the result
strings.
@end defun
@defun string-pad string length &optional padding start

View file

@ -775,7 +775,7 @@ For most purposes, when the flag variable
@code{symbols-with-pos-enabled} is non-@code{nil}, symbols with
positions behave just as bare symbols do. For example, @samp{(eq
#<symbol foo at 12345> foo)} has a value @code{t} when that variable
is set (but nil when it isn't set). Most of the time in Emacs this
is set (but @code{nil} when it isn't set). Most of the time in Emacs this
variable is @code{nil}, but the byte compiler binds it to @code{t}
when it runs.

View file

@ -770,7 +770,7 @@ This function returns the parser state that the parser would reach at
position @var{pos} starting from the beginning of the visible portion
of the buffer.
@iftex
See the next section for
See the next section
@end iftex
@ifnottex
@xref{Parser State},

View file

@ -2969,6 +2969,12 @@ character after position @var{pos} in @var{object} (a buffer or
string). The argument @var{object} is optional and defaults to the
current buffer.
If @var{position} is at the end of @var{object}, the value is
@code{nil}, but note that buffer narrowing does not affect the value.
That is, if @var{object} is a buffer or @code{nil}, and the buffer is
narrowed and @var{position} is at the end of the narrowed buffer, the
result may be non-@code{nil}.
If there is no @var{prop} property strictly speaking, but the character
has a property category that is a symbol, then @code{get-text-property} returns
the @var{prop} property of that symbol.
@ -3021,6 +3027,12 @@ properties take precedence over this variable.
This function returns the entire property list of the character at
@var{position} in the string or buffer @var{object}. If @var{object} is
@code{nil}, it defaults to the current buffer.
If @var{position} is at the end of @var{object}, the value is
@code{nil}, but note that buffer narrowing does not affect the value.
That is, if @var{object} is a buffer or @code{nil}, and the buffer is
narrowed and @var{position} is at the end of the narrowed buffer, the
result may be non-@code{nil}.
@end defun
@defvar default-text-properties
@ -3541,16 +3553,30 @@ special modes that implement their own highlighting.
@item mouse-face
@kindex mouse-face @r{(text property)}
This property is used instead of @code{face} when the mouse is on or
near the character. For this purpose, ``near'' means that all text
between the character and where the mouse is have the same
@code{mouse-face} property value.
This property is used instead of @code{face} when the mouse pointer
hovers over the text which has this property. When this happens, the
entire stretch of text that has the same @code{mouse-face} property
value, not just the character under the mouse, is highlighted.
Emacs ignores all face attributes from the @code{mouse-face} property
that alter the text size (e.g., @code{:height}, @code{:weight}, and
@code{:slant}). Those attributes are always the same as for the
unhighlighted text.
@item cursor-face
@kindex cursor-face @r{(text property)}
@findex cursor-face-highlight-mode
@vindex cursor-face-highlight-nonselected-window
This property is similar to @code{mouse-face}, but it is used when
point (not the mouse) is inside text that has this property. The
highlighting happens only if the mode
@code{cursor-face-highlight-mode} is enabled. When the variable
@code{cursor-face-highlight-nonselected-window} is non-@code{nil}, the
text with this face is highlighted even if the window is not selected,
similarly to what @code{highlight-nonselected-windows} does for the
region (@pxref{Mark,, The Mark and the Region, emacs, The GNU Emacs
Manual}).
@item fontified
@kindex fontified @r{(text property)}
This property says whether the text is ready for display. If
@ -5283,6 +5309,24 @@ interpolation).
@code{sqlite-execute} returns the number of affected rows. For
instance, an @samp{insert} statement will return @samp{1}, whereas an
@samp{update} statement may return zero or a higher number.
Strings in SQLite are, by default, stored as @code{utf-8}, and
selecting a text column will decode the string using that charset.
Selecting a blob column will return the raw data without any decoding
(i.e., it will return a unibyte string containing the bytes as stored
in the database). Inserting binary data into blob columns, however,
requires some care, as @code{sqlite-execute} will, by default,
interpret all strings as @code{utf-8}.
So if you have, for instance, @acronym{GIF} data in a unibyte string
called @var{gif}, you have to mark it specially to let
@code{sqlite-execute} know this:
@lisp
(put-text-property 0 1 'coding-system 'binary gif)
(sqlite-execute db "insert into foo values (?, ?)" (list gif 2))
@end lisp
@end defun
@defun sqlite-select db query &optional values result-type
@ -5394,6 +5438,12 @@ Extensions are usually shared-library files; on GNU and Unix systems,
they have the @file{.so} file-name extension.
@end defun
@findex sqlite-mode-open-file
If you wish to list the contents of an SQLite file, you can use the
@code{sqlite-mode-open-file} command. This will pop to a buffer using
@code{sqlite-mode}, which allows you to examine (and alter) the
contents of an SQLite database.
@node Parsing HTML/XML
@section Parsing HTML and XML
@cindex parsing html

View file

@ -2295,6 +2295,21 @@ list in @var{variables} is an alist of the form
'((null-device . "/dev/null")))
@end group
@end example
@findex connection-local-get-profile-variables
If you want to append variable settings to an existing profile, you
could use the function @code{connection-local-get-profile-variables}
in order to retrieve the existing settings, like
@example
@group
(connection-local-set-profile-variables
'remote-bash
(append
(connection-local-get-profile-variables 'remote-bash)
'((shell-command-dont-erase-buffer . t))))
@end group
@end example
@end defun
@deffn {User Option} connection-local-profile-alist
@ -2418,6 +2433,37 @@ are unwound. Example:
@end example
@end defmac
@defvar connection-local-default-application
The default application, a symbol, to be applied in
@code{with-connection-local-variables}. It defaults to @code{tramp},
but in case you want to overwrite Tramp's settings temporarily, you
could let-bind it like
@example
@group
(connection-local-set-profile-variables
'my-remote-perl
'((perl-command-name . "/usr/local/bin/perl5")
(perl-command-switch . "-e %s")))
@end group
@group
(connection-local-set-profiles
'(:application 'my-app :protocol "ssh" :machine "remotehost")
'my-remote-perl)
@end group
@group
(let ((default-directory "/ssh:remotehost:/working/dir/")
(connection-local-default-application 'my-app))
(with-connection-local-variables
do something useful))
@end group
@end example
This variable must not be changed globally.
@end defvar
@defvar enable-connection-local-variables
If @code{nil}, connection-local variables are ignored. This variable
shall be changed temporarily only in special modes.
@ -2743,13 +2789,13 @@ implemented this way:
(gv-define-expander substring
(lambda (do place from &optional to)
(gv-letplace (getter setter) place
(macroexp-let2* nil ((start from) (end to))
(funcall do `(substring ,getter ,start ,end)
(macroexp-let2* (from to)
(funcall do `(substring ,getter ,from ,to)
(lambda (v)
(macroexp-let2 nil v v
(macroexp-let2* (v)
`(progn
,(funcall setter `(cl--set-substring
,getter ,start ,end ,v))
,getter ,from ,to ,v))
,v))))))))
@end example
@end defmac
@ -2762,7 +2808,7 @@ of Common Lisp could be implemented this way:
@example
(defmacro incf (place &optional n)
(gv-letplace (getter setter) place
(macroexp-let2 nil v (or n 1)
(macroexp-let2* ((v (or n 1)))
(funcall setter `(+ ,v ,getter)))))
@end example

View file

@ -759,6 +759,15 @@ column and total width (@pxref{Coordinates and Windows}). The optional
argument @var{round} behaves as it does for @code{window-total-height}.
@end defun
@defun window-max-characters-per-line &optional window face
The maximum width of a line that can be displayed in a window (without
breaking the line) depends on many things, like the font used on the
line, and whether there are fringes around the window. This
convenience function can be used to calculate that number. If
@var{window} isn't given, this defaults to the currently selected
window. if @var{var} isn't given, the @code{default} face is used.
@end defun
@defun window-total-size &optional window horizontal round
This function returns either the total height in lines or the total
width in columns of the window @var{window}. If @var{horizontal} is
@ -2596,13 +2605,11 @@ default value is an empty display action, i.e., @w{@code{(nil . nil)}}.
@defopt display-buffer-alist
The value of this option is an alist mapping conditions to display
actions. Each condition may be either a regular expression matching a
buffer name or a function that takes two arguments: a buffer name and
the @var{action} argument passed to @code{display-buffer}. If either
the name of the buffer passed to @code{display-buffer} matches a
regular expression in this alist, or the function specified by a
condition returns non-@code{nil}, then @code{display-buffer} uses the
corresponding display action to display the buffer.
actions. Each condition is passed to @code{buffer-match-p}, along
with the buffer name and the @var{action} argument passed to
@code{display-buffer}. If it returns a non-nil value, then
@code{display-buffer} uses the corresponding display action to display
the buffer.
@end defopt
@defopt display-buffer-base-action
@ -2968,13 +2975,14 @@ follows:
@code{nil} means consider only windows on the selected frame.
(Actually, the last frame used that is not a minibuffer-only frame.)
@item
@code{t} means consider windows on all frames.
@item
@code{visible} means consider windows on all visible frames.
@item
0 means consider windows on all visible or iconified frames.
@item
A frame means consider windows on that frame only.
@item
@code{t} means consider windows on all frames. (Note that this value
is rarely the right thing to use---it might also return a tooltip frame.)
@end itemize
Note that the meaning of @code{nil} differs slightly from that of the

View file

@ -191,7 +191,7 @@ get fancy, the default and simplest configuration is:
(setq auth-sources '("secrets:Login"))
;;; use pass (@file{~/.password-store})
;;; (@pxref{The Unix password store})
(setq auth-sources '(password-store))
(auth-source-pass-enable)
;;; JSON data in format [@{ "machine": "SERVER",
;;; "login": "USER", "password": "PASSWORD" @}...]
(setq auth-sources '("~/.authinfo.json.gpg"))

View file

@ -29877,6 +29877,12 @@ with no argument copies only the number itself into the kill ring, whereas
@kbd{C-k} with a prefix argument of 1 copies the number with its trailing
newline.
You can customize @code{calc-kill-line-numbering} to nil to exclude
line numbering from kills and copies made by @code{calc-kill} and
@code{calc-copy-as-kill}. This option does not affect calc kill and
copy commands which operate on the region, as that would not make
sense.
@node Yanking Into Stack
@section Yanking into the Stack

View file

@ -6278,6 +6278,32 @@ expressions for the operands.
@comment ------------------------------------------------------------
@defun c-lineup-argcont-+
@findex lineup-argcont-+ (c-)
Indent a continued argument @code{c-basic-offset} spaces from the
start of the first argument at the current level of nesting on a
previous line.
@example
@group
foo (xyz, uvw, aaa + bbb + ccc
+ ddd + eee + fff); <- c-lineup-argcont-+
<--> c-basic-offset
@end group
@end example
Only continuation lines like this are touched, @code{nil} being
returned on lines which are the start of an argument.
Within a gcc @code{asm} block, @code{:} is recognized as an argument
separator, but of course only between operand specifications, not in the
expressions for the operands.
@workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
@end defun
@comment ------------------------------------------------------------
@defun c-lineup-arglist-operators
@findex lineup-arglist-operators @r{(c-)}
Line up lines starting with an infix operator under the open paren.

View file

@ -444,7 +444,7 @@ the ``rest'' argument is bound to the keyword list as it appears
in the call. For example:
@example
(cl-defun find-thing (thing &rest rest &key need &allow-other-keys)
(cl-defun find-thing (thing thing-list &rest rest &key need &allow-other-keys)
(or (apply 'cl-member thing thing-list :allow-other-keys t rest)
(if need (error "Thing not found"))))
@end example
@ -843,6 +843,7 @@ constructs.
* Iteration:: @code{cl-do}, @code{cl-dotimes}, @code{cl-dolist}, @code{cl-do-symbols}.
* Loop Facility:: The Common Lisp @code{loop} macro.
* Multiple Values:: @code{cl-values}, @code{cl-multiple-value-bind}, etc.
* Macro-Writing Macros:: @code{cl-with-gensyms}, @code{cl-once-only}.
@end menu
@node Assignment
@ -2513,6 +2514,86 @@ in @code{cl-multiple-value-bind}.
Since a perfect emulation is not feasible in Emacs Lisp, this
package opts to keep it as simple and predictable as possible.
@node Macro-Writing Macros
@section Macro-Writing Macros
@noindent
This package includes two classic Common Lisp macro-writing macros to
help render complex macrology easier to read.
@defmac cl-with-gensyms names@dots{} body
This macro expands to code that executes @var{body} with each of the
variables in @var{names} bound to a fresh uninterned symbol, or
@dfn{gensym}, in Common Lisp parlance. For macros requiring more than
one gensym, use of @code{cl-with-gensyms} shortens the code and
renders one's intentions clearer. Compare:
@example
(defmacro my-macro (foo)
(let ((bar (gensym "bar"))
(baz (gensym "baz"))
(quux (gensym "quux")))
`(let ((,bar (+ @dots{})))
@dots{})))
(defmacro my-macro (foo)
(cl-with-gensyms (bar baz quux)
`(let ((,bar (+ @dots{})))
@dots{})))
@end example
@end defmac
@defmac cl-once-only ((variable form)@dots{}) body
This macro is primarily to help the macro programmer ensure that forms
supplied by the user of the macro are evaluated just once by its
expansion even though the result of evaluating the form is to occur
more than once. Less often, this macro is used to ensure that forms
supplied by the macro programmer are evaluated just once.
Each @var{variable} may be used to refer to the result of evaluating
@var{form} in @var{body}. @code{cl-once-only} binds each
@var{variable} to a fresh uninterned symbol during the evaluation of
@var{body}. Then, @code{cl-once-only} wraps the final expansion in
code to evaluate each @var{form} and bind the result to the
corresponding uninterned symbol. Thus, when the macro writer
substitutes the value for @var{variable} into the expansion they are
effectively referring to the result of evaluating @var{form}, rather
than @var{form} itself. Another way to put this is that each
@var{variable} is bound to an expression for the (singular) result of
evaluating @var{form}.
The most common case is where @var{variable} is one of the arguments
to the macro being written, so @code{(variable variable)} may be
abbreviated to just @code{variable}.
For example, consider this macro:
@example
(defmacro my-list (x y &rest forms)
(let ((x-result (gensym))
(y-result (gensym)))
`(let ((,x-result ,x)
(,y-result ,y))
(list ,x-result ,y-result ,x-result ,y-result
(progn ,@@forms))))
@end example
In a call like @w{@code{(my-list (pop foo) @dots{})}} the intermediate
binding to @code{x-result} ensures that the @code{pop} is not done
twice. But as a result the code is rather complex: the reader must
keep track of how @code{x-result} really just means the first
parameter of the call to the macro, and the required use of multiple
gensyms to avoid variable capture by @code{(progn ,@@forms)} obscures
things further. @code{cl-once-only} takes care of these details:
@example
(defmacro my-list (x y &rest forms)
(cl-once-only (x y)
`(list ,x ,y ,x ,y
(progn ,@@forms))))
@end example
@end defmac
@node Macros
@chapter Macros
@ -2868,6 +2949,7 @@ out the property and value cells.
@node Creating Symbols
@section Creating Symbols
@cindex gensym
@noindent
These functions create unique symbols, typically for use as
@ -5028,13 +5110,13 @@ The above @code{incf} example could be written using
@example
(defmacro incf (place &optional n)
(gv-letplace (getter setter) place
(macroexp-let2 nil v (or n 1)
(cl-once-only ((v (or n 1)))
(funcall setter `(+ ,v ,getter)))))
@end example
@ignore
(defmacro concatf (place &rest args)
(gv-letplace (getter setter) place
(macroexp-let2 nil v (mapconcat 'identity args)
(cl-once-only ((v `(mapconcat 'identity ',args)))
(funcall setter `(concat ,getter ,v)))))
@end ignore
@end defmac

View file

@ -228,15 +228,39 @@ other background process in Emacs.
@node Arguments
@section Arguments
Command arguments are passed to the functions as either strings or
numbers, depending on what the parser thinks they look like. If you
need to use a function that takes some other data type, you will need to
call it in an Elisp expression (which can also be used with
@ref{Expansion, expansions}). As with other shells, you can
escape special characters and spaces with the backslash (@code{\}) and
apostrophes (@code{''}) and double quotes (@code{""}). This is needed
especially for file names with special characters like pipe
(@code{|}), which could be part of remote file names.
Ordinarily, command arguments are parsed by Eshell as either strings
or numbers, depending on what the parser thinks they look like. To
specify an argument of some other data type, you can use an
@ref{Dollars Expansion, Elisp expression}:
@example
~ $ echo (list 1 2 3)
(1 2 3)
@end example
Additionally, many built-in Eshell commands (@pxref{Built-ins, Eshell
commands}) will flatten the arguments they receive, so passing a list
as an argument will ``spread'' the elements into multiple arguments:
@example
~ $ printnl (list 1 2) 3
1
2
3
@end example
@subsection Quoting and escaping
As with other shells, you can escape special characters and spaces
with by prefixing the character with a backslash (@code{\}), or by
surrounding the string with apostrophes (@code{''}) or double quotes
(@code{""}). This is needed especially for file names with special
characters like pipe (@code{|}), which could be part of remote file
names.
When using expansions (@pxref{Expansion}) in an Eshell command, the
result may potentially be of any data type. To ensure that the result
is always a string, the expansion can be surrounded by double quotes.
@node Built-ins
@section Built-in commands
@ -993,15 +1017,42 @@ parsers (such as @command{cpp} and @command{m4}), but in a command
shell, they are less often used for constants, and usually for using
variables and string manipulation.@footnote{Eshell has no
string-manipulation expansions because the Elisp library already
provides many functions for this.} For example, @code{$var} on a line
expands to the value of the variable @code{var} when the line is
provides many functions for this.} For example, @code{$@var{var}} on
a line expands to the value of the variable @var{var} when the line is
executed. Expansions are usually passed as arguments, but may also be
used as commands.@footnote{E.g., entering just @samp{$var} at the prompt
is equivalent to entering the value of @code{var} at the prompt.}
used as commands.@footnote{E.g., entering just @samp{$@var{var}} at
the prompt is equivalent to entering the value of @var{var} at the
prompt.}
You can concatenate expansions with regular string arguments or even
other expansions. In the simplest case, when the expansion returns a
string value, this is equivalent to ordinary string concatenation; for
example, @samp{$@{echo "foo"@}bar} returns @samp{foobar}. The exact
behavior depends on the types of each value being concatenated:
@table @asis
@item both strings
Concatenate both values together.
@item one or both numbers
Concatenate the string representation of each value, converting back to
a number if possible.
@item one or both (non-@code{nil}) lists
Concatenate ``adjacent'' elements of each value (possibly converting
back to a number as above). For example, @samp{$list("a" "b")c}
returns @samp{("a" "bc")}.
@item anything else
Concatenate the string represenation of each value.
@end table
@menu
* Dollars Expansion::
* Globbing::
* Argument Predication and Modification::
@end menu
@node Dollars Expansion
@ -1025,11 +1076,22 @@ value, such as @samp{$"@var{var}"-suffix}.
@item $(@var{lisp})
Expands to the result of evaluating the S-expression @code{(@var{lisp})}. On
its own, this is identical to just @code{(@var{lisp})}, but with the @code{$},
it can be used in a string, such as @samp{/some/path/$(@var{lisp}).txt}.
it can be used inside double quotes or within a longer string, such as
@samp{/some/path/$(@var{lisp}).txt}.
@item $@{@var{command}@}
Returns the output of @command{@var{command}}, which can be any valid Eshell
command invocation, and may even contain expansions.
Returns the output of @command{@var{command}}, which can be any valid
Eshell command invocation, and may even contain expansions. Similar
to @code{$(@var{lisp})}, this is identical to @code{@{@var{command}@}}
when on its own, but the @code{$} allows it to be used inside double
quotes or as part of a string.
Normally, the output is split line-by-line, returning a list (or the
first element if there's only one line of output); if
@code{eshell-convert-numeric-arguments} is non-@code{nil} and every
line of output looks like a number, convert each line to a number.
However, when this expansion is surrounded by double quotes, it
returns the output as a single string instead.
@item $<@var{command}>
As with @samp{$@{@var{command}@}}, evaluates the Eshell command invocation
@ -1089,15 +1151,345 @@ the result of @var{expr} is not a string or a sequence.
@node Globbing
@section Globbing
Eshell's globbing syntax is very similar to that of Zsh. Users coming
from Bash can still use Bash-style globbing, as there are no
incompatibilities. Most globbing is pattern-based expansion, but there
is also predicate-based expansion. @xref{Filename Generation, , ,
zsh, The Z Shell Manual},
for full syntax. To customize the syntax and behavior of globbing in
Eshell see the Customize@footnote{@xref{Easy Customization, , , emacs,
The GNU Emacs Manual}.}
groups ``eshell-glob'' and ``eshell-pred''.
@vindex eshell-glob-case-insensitive
Eshell's globbing syntax is very similar to that of Zsh
(@pxref{Filename Generation, , , zsh, The Z Shell Manual}). Users
coming from Bash can still use Bash-style globbing, as there are no
incompatibilities.
By default, globs are case sensitive, except on MS-DOS/MS-Windows
systems. You can control this behavior via the
@code{eshell-glob-case-insensitive} option. You can further customize
the syntax and behavior of globbing in Eshell via the Customize group
``eshell-glob'' (@pxref{Easy Customization, , , emacs, The GNU Emacs
Manual}).
@table @samp
@item *
Matches any string (including the empty string). For example,
@samp{*.el} matches any file with the @file{.el} extension.
@item ?
Matches any single character. For example, @samp{?at} matches
@file{cat} and @file{bat}, but not @file{goat}.
@item **/
Matches zero or more subdirectories in a file name. For example,
@samp{**/foo.el} matches @file{foo.el}, @file{bar/foo.el},
@file{bar/baz/foo.el}, etc. Note that this cannot be combined with
any other patterns in the same file name segment, so while
@samp{foo/**/bar.el} is allowed, @samp{foo**/bar.el} is not.
@item ***/
Like @samp{**/}, but follows symlinks as well.
@cindex character sets, in Eshell glob patterns
@cindex character classes, in Eshell glob patterns
@item [ @dots{} ]
Defines a @dfn{character set} (@pxref{Regexps, , , emacs, The GNU
Emacs Manual}). A character set matches characters between the two
brackets; for example, @samp{[ad]} matches @file{a} and @file{d}. You
can also include ranges of characters in the set by separating the
start and end with @samp{-}. Thus, @samp{[a-z]} matches any
lower-case @acronym{ASCII} letter. Note that, unlike in Zsh,
character ranges are interpreted in the Unicode codepoint order, not
in the locale-dependent collation order.
Additionally, you can include @dfn{character classes} in a character
set. A @samp{[:} and balancing @samp{:]} enclose a character class
inside a character set. For instance, @samp{[[:alnum:]]}
matches any letter or digit. @xref{Char Classes, , , elisp, The Emacs
Lisp Reference Manual}, for a list of character classes.
@cindex complemented character sets, in Eshell glob patterns
@item [^ @dots{} ]
Defines a @dfn{complemented character set}. This behaves just like a
character set, but matches any character @emph{except} the ones
specified.
@cindex groups, in Eshell glob patterns
@item ( @dots{} )
Defines a @dfn{group}. A group matches the pattern between @samp{(}
and @samp{)}. Note that a group can only match a single file name
component, so a @samp{/} inside a group will signal an error.
@item @var{x}|@var{y}
Inside of a group, matches either @var{x} or @var{y}. For example,
@samp{e(m|sh)-*} matches any file beginning with @file{em-} or
@file{esh-}.
@item @var{x}#
Matches zero or more copies of the glob pattern @var{x}. For example,
@samp{fo#.el} matches @file{f.el}, @file{fo.el}, @file{foo.el}, etc.
@item @var{x}##
Matches one or more copies of the glob pattern @var{x}. Thus,
@samp{fo#.el} matches @file{fo.el}, @file{foo.el}, @file{fooo.el},
etc.
@item @var{x}~@var{y}
Matches anything that matches the pattern @var{x} but not @var{y}. For
example, @samp{[[:digit:]]#~4?} matches @file{1} and @file{12}, but
not @file{42}. Note that unlike in Zsh, only a single @samp{~}
operator can be used in a pattern, and it cannot be inside of a group
like @samp{(@var{x}~@var{y})}.
@end table
@node Argument Predication and Modification
@section Argument Predication and Modification
@cindex argument predication
@cindex argument modification
Eshell supports @dfn{argument predication}, to filter elements of a
glob, and @dfn{argument modification}, to manipulate argument values.
These are similar to glob qualifiers in Zsh (@pxref{Glob Qualifiers, ,
, zsh, The Z Shell Manual}).
Predicates and modifiers are introduced with @samp{(@var{filters})}
after any list argument, where @var{filters} is a list of predicates
or modifiers. For example, @samp{*(.)} expands to all regular files
in the current directory and @samp{*(^@@:U^u0)} expands to all
non-symlinks not owned by @code{root}, upper-cased.
Some predicates and modifiers accept string parameters, such as
@samp{*(u'@var{user}')}, which matches all files owned by @var{user}.
These parameters must be surrounded by delimiters; you can use any of
the following pairs of delimiters: @code{"@dots{}"}, @code{'@dots{}'},
@code{/@dots{}/}, @code{|@dots{}|}, @code{(@dots{})},
@code{[@dots{}]}, @code{<@dots{}>}, or @code{@{@dots{}@}}.
You can customize the syntax and behavior of predicates and modifiers
in Eshell via the Customize group ``eshell-pred'' (@pxref{Easy
Customization, , , emacs, The GNU Emacs Manual}).
@menu
* Argument Predicates::
* Argument Modifiers::
@end menu
@node Argument Predicates
@subsection Argument Predicates
You can use argument predicates to filter lists of file names based on
various properties of those files. This is most useful when combined
with globbing, but can be used on any list of files names. Eshell
supports the following argument predicates:
@table @asis
@item @samp{/}
Matches directories.
@item @samp{.} @r{(Period)}
Matches regular files.
@item @samp{@@}
Matches symbolic links.
@item @samp{=}
Matches sockets.
@item @samp{p}
Matches named pipes.
@item @samp{%}
Matches block or character devices.
@item @samp{%b}
Matches block devices.
@item @samp{%c}
Matches character devices.
@item @samp{*}
Matches regular files that can be executed by the current user.
@item @samp{r}
@item @samp{A}
@item @samp{R}
Matches files that are readable by their owners (@samp{r}), their
groups (@samp{A}), or the world (@samp{R}).
@item @samp{w}
@item @samp{I}
@item @samp{W}
Matches files that are writable by their owners (@samp{w}), their
groups (@samp{I}), or the world (@samp{W}).
@item @samp{x}
@item @samp{E}
@item @samp{X}
Matches files that are executable by their owners (@samp{x}), their
groups (@samp{E}), or the world (@samp{X}).
@item @samp{s}
Matches files with the setuid flag set.
@item @samp{S}
Matches files with the setgid flag set.
@item @samp{t}
Matches files with the sticky bit set.
@item @samp{U}
Matches files owned by the current effective user ID.
@item @samp{G}
Matches files owned by the current effective group ID.
@item @samp{l@option{[+-]}@var{n}}
Matches files with @var{n} links. With @option{+} (or @option{-}),
matches files with more than (or less than) @var{n} links,
respectively.
@item @samp{u@var{uid}}
@item @samp{u'@var{user-name}'}
Matches files owned by user ID @var{uid} or user name @var{user-name}.
@item @samp{g@var{gid}}
@item @samp{g'@var{group-name}'}
Matches files owned by group ID @var{gid} or group name
@var{group-name}.
@item @samp{a@option{[@var{unit}]}@option{[+-]}@var{n}}
@item @samp{a@option{[+-]}'@var{file}'}
Matches files last accessed exactly @var{n} days ago. With @option{+}
(or @option{-}), matches files accessed more than (or less than)
@var{n} days ago, respectively.
With @var{unit}, @var{n} is a quantity in that unit of time, so
@samp{aw-1} matches files last accessed within one week. @var{unit}
can be @samp{M} (30-day months), @samp{w} (weeks), @samp{h} (hours),
@samp{m} (minutes), or @samp{s} (seconds).
If @var{file} is specified instead, compare against the modification
time of @file{file}. Thus, @samp{a-'hello.txt'} matches all files
accessed after @file{hello.txt} was last accessed.
@item @samp{m@option{[@var{unit}]}@option{[+-]}@var{n}}
@item @samp{m@option{[+-]}'@var{file}'}
Like @samp{a}, but examines modification time.
@item @samp{c@option{[@var{unit}]}@option{[+-]}@var{n}}
@item @samp{c@option{[+-]}'@var{file}'}
Like @samp{a}, but examines status change time.
@item @samp{L@option{[@var{unit}]}@option{[+-]}@var{n}}
Matches files exactly @var{n} bytes in size. With @option{+} (or
@option{-}), matches files larger than (or smaller than) @var{n}
bytes, respectively.
With @var{unit}, @var{n} is a quantity in that unit of size, so
@samp{Lm+5} matches files larger than 5 MiB in size. @var{unit} can
be one of the following (case-insensitive) characters: @samp{m}
(megabytes), @samp{k} (kilobytes), or @samp{p} (512-byte blocks).
@end table
The @samp{^} and @samp{-} operators are not argument predicates
themselves, but they modify the behavior of all subsequent predicates.
@samp{^} inverts the meaning of subsequent predicates, so
@samp{*(^RWX)} expands to all files whose permissions disallow the
world from accessing them in any way (i.e., reading, writing to, or
modifying them). When examining a symbolic link, @samp{-} applies the
subsequent predicates to the link's target instead of the link itself.
@node Argument Modifiers
@subsection Argument Modifiers
You can use argument modifiers to manipulate argument values. For
example, you can sort lists, remove duplicate values, capitalize
words, etc. All argument modifiers are prefixed by @samp{:}, so
@samp{$exec-path(:h:u:x/^\/home/)} lists all of the unique parent
directories of the elements in @code{exec-path}, excluding those in
@file{/home}.
@table @samp
@item E
Re-evaluates the value as an Eshell argument. For example, if
@var{foo} is @code{"$@{echo hi@}"}, then the result of @samp{$foo(:E)}
is @code{hi}.
@item L
Converts the value to lower case.
@item U
Converts the value to upper case.
@item C
Capitalizes the value.
@item h
Treating the value as a file name, gets the directory name (the
``head''). For example, @samp{foo/bar/baz.el(:h)} expands to
@samp{foo/bar/}.
@item t
Treating the value as a file name, gets the base name (the ``tail'').
For example, @samp{foo/bar/baz.el(:h)} expands to @samp{baz.el}.
@item e
Treating the value as a file name, gets the final extension of the
file, excluding the dot. For example, @samp{foo.tar.gz(:e)}
expands to @code{gz}.
@item r
Treating the value as a file name, gets the file name excluding the
final extension. For example, @samp{foo/bar/baz.tar.gz(:r)} expands
to @samp{foo/bar/baz.tar}.
@item q
Marks that the value should be interpreted by Eshell literally, so
that any special characters like @samp{$} no longer have any special
meaning.
@item s/@var{pattern}/@var{replace}/
Replaces the first instance of the regular expression @var{pattern}
with @var{replace}. Signals an error if no match is found.
As with other modifiers taking string parameters, you can use
different delimiters to separate @var{pattern} and @var{replace}, such
as @samp{s'@dots{}'@dots{}'}, @samp{s[@dots{}][@dots{}]}, or even
@samp{s[@dots{}]/@dots{}/}.
@item gs/@var{pattern}/@var{replace}/
Replaces all instances of the regular expression @var{pattern} with
@var{replace}.
@item i/@var{pattern}/
Filters a list of values to include only the elements matching the
regular expression @var{pattern}.
@item x/@var{pattern}/
Filters a list of values to exclude all the elements matching the
regular expression @var{pattern}.
@item S
@item S/@var{pattern}/
Splits the value using the regular expression @var{pattern} as a
delimiter. If @var{pattern} is omitted, split on spaces.
@item j
@item j/@var{delim}/
Joins a list of values, inserting the string @var{delim} between each
value. If @var{delim} is omitted, use a single space as the
delimiter.
@item o
Sorts a list of strings in ascending lexicographic order, comparing
pairs of characters according to their character codes (@pxref{Text
Comparison, , , elisp, The Emacs Lisp Reference Manual}).
@item O
Sorts a list of strings in descending lexicographic order.
@item u
Removes any duplicate elements from a list of values.
@item R
Reverses the order of a list of values.
@end table
@node Input/Output
@chapter Input/Output
@ -1241,6 +1633,7 @@ Eshell module.} You also need to load the following as shown:
* Key rebinding::
* Smart scrolling::
* Terminal emulation::
* Electric forward slash::
@end menu
@node Writing a module
@ -1273,6 +1666,61 @@ This section is not yet written.
This section is not yet written.
@node Electric forward slash
@section Electric forward slash
To help with supplying absolute file name arguments to remote
commands, you can add the @code{eshell-elecslash} module to
@code{eshell-modules-list}. Then, typing @kbd{/} as the first
character of a command line argument will automatically insert the
Tramp prefix @file{/method:host:}. If this is not what you want
(e.g.@: because you want to refer to a local file), you can type
another @kbd{/} to undo the automatic insertion. Typing @kbd{~/} also
inserts the Tramp prefix. The automatic insertion applies only when
@code{default-directory} is remote and the command is a Lisp function.
In particular, typing arguments to external commands doesn't insert
the prefix.
The result is that in most cases of supplying absolute file name
arguments to commands you should see the Tramp prefix inserted
automatically only when that's what you'd reasonably expect. This
frees you from having to keep track of whether commands are Lisp
functions or external when typing command line arguments. For
example, suppose you execute
@example
cd /ssh:root@@example.com:
find /etc -name "*gnu*"
@end example
@noindent and in reviewing the output of the command, you identify a
file @file{/etc/gnugnu} that should be moved somewhere else. So you
type
@example
mv /etc/gnugnu /tmp
@end example
@noindent But since @command{mv} refers to the local Lisp function
@code{eshell/mv}, not a remote shell command, to say this is to
request that the local file @file{/etc/gnugnu} be moved into the local
@file{/tmp} directory. After you add @code{eshell-elecslash} to
@code{eshell-modules-list}, then when you type the above @command{mv}
invocation you will get the following input, which is what you
intended:
@example
mv /ssh:root@@example.com:/etc/gnugnu /ssh:root@@example.com:/tmp
@end example
The code that determines whether or not the Tramp prefix should be
inserted uses simple heuristics. A limitation of the current
implementation is that it inspects whether only the command at the
very beginning of input is a Lisp function or external program. Thus
when chaining commands with the operators @code{&&}, @code{||},
@code{|} and @code{;}, the electric forward slash is active only
within the first command.
@node Bugs and ideas
@chapter Bugs and ideas
@cindex reporting bugs and ideas
@ -1676,11 +2124,12 @@ only. That way, it could be listed as a login shell.
@item The first keypress after @kbd{M-x watson} triggers
@code{eshell-send-input}
@item Make @kbd{/} electric
@item Make @kbd{/} more electric
So that it automatically expands and corrects pathnames. Or make
pathname completion for Pcomplete auto-expand @samp{/u/i/std@key{TAB}} to
@samp{/usr/include/std@key{TAB}}.
@noindent so that it automatically expands and corrects file names,
beyond what the @code{em-elecslash} module is able to do. Or make
file name completion for Pcomplete auto-expand
@samp{/u/i/std@key{TAB}} to @samp{/usr/include/std@key{TAB}}.
@item Write the @command{pushd} stack to disk along with @code{last-dir-ring}

View file

@ -192,9 +192,9 @@ email composition buffers (@pxref{Inline Query Expansion})
@lisp
(with-eval-after-load "message"
(define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
(define-key message-mode-map [(control ?c) (tab)] 'eudc-expand-try-all))
(with-eval-after-load "sendmail"
(define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-inline))
(define-key mail-mode-map [(control ?c) (tab)] 'eudc-expand-try-all))
@end lisp
@menu
@ -254,7 +254,9 @@ To: * Smith
@noindent
will return all LDAP entries with surnames that begin with
@code{Smith}. In every LDAP query it makes, EUDC implicitly appends
the wildcard character to the end of the last word.
the wildcard character to the end of the last word, except if the word
corresponds to an attribute which is a member of
`eudc-ldap-no-wildcard-attributes'.
@menu
* Emacs-only Configuration:: Configure with @file{.emacs}
@ -281,11 +283,12 @@ LDAP:
@vindex message-mode-map
@findex eudc-expand-inline
@findex eudc-expand-try-all
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
(with-eval-after-load "message"
(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(define-key message-mode-map (kbd "TAB") 'eudc-expand-try-all))
(setopt eudc-server-hotlist
'(("" . bbdb)
("ldaps://ldap.gnu.org" . ldap)))
@ -337,11 +340,12 @@ configure EUDC for LDAP:
@vindex message-mode-map
@findex eudc-expand-inline
@findex eudc-expand-try-all
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
(with-eval-after-load "message"
(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(define-key message-mode-map (kbd "TAB") 'eudc-expand-try-all))
(setopt 'eudc-server-hotlist
'(("" . bbdb)
("ldaps://ldap.gnu.org" . ldap)))
@ -366,11 +370,12 @@ and the @file{.emacs} expressions become:
@vindex message-mode-map
@findex eudc-expand-inline
@findex eudc-expand-try-all
@vindex eudc-server-hotlist
@vindex ldap-host-parameters-alist
@lisp
(with-eval-after-load "message"
(define-key message-mode-map (kbd "TAB") 'eudc-expand-inline))
(define-key message-mode-map (kbd "TAB") 'eudc-expand-try-all))
(setopt 'eudc-server-hotlist
'(("" . bbdb) ("" . ldap)))
(setopt 'ldap-host-parameters-alist
@ -709,31 +714,47 @@ be passed to the program.
@node Inline Query Expansion
@section Inline Query Expansion
Inline query expansion is a powerful method to get completion from your
directory server. The most common usage is for expanding names to email
addresses in mail message buffers. The expansion is performed by the
command @kbd{M-x eudc-expand-inline} which is available from the
@samp{Expand Inline Query} menu item but can also be conveniently
bound to a key shortcut (@pxref{Installation}). The operation is
controlled by the variables @code{eudc-inline-expansion-format},
@code{eudc-inline-query-format},
Inline query expansion is a powerful method to get completion from
your directory servers. The most common usage is for expanding names
to email addresses in mail message buffers. The expansion is
performed by the command @kbd{M-x eudc-expand-try-all} which is
available from the @samp{Expand Inline Query Trying All Servers} menu
item but can also be conveniently bound to a key shortcut
(@pxref{Installation}). The operation is controlled by the variables
@code{eudc-inline-expansion-format}, @code{eudc-inline-query-format},
@code{eudc-expanding-overwrites-query} and
@code{eudc-multiple-match-handling-method}.
If the query fails for a server, other servers may be tried successively
until one of them finds a match (@pxref{Multi-server Queries}).
If the query fails for a server, other servers may be tried
successively until one of them finds a match (@pxref{Multi-server
Queries}), or all servers can be tried and all matches returned.
@deffn Command eudc-expand-inline replace-p
@deffn Command eudc-expand-try-all try-all-servers-p
Query some or all servers and expand the query string before point.
The query string consists of the buffer substring from the point back
to the preceding comma, colon or beginning of line.
@code{eudc-inline-query-format} controls how individual words are
mapped onto directory attribute names. After querying the server or
servers for the given string, the expansion specified by
@code{eudc-inline-expansion-format} is inserted in the buffer at
point. If multiple matches are available, a selection window is
displayed. If @var{try-all-servers-p} is non-@code{nil} then all
servers are queried.
@end deffn
@deffn Command eudc-expand-inline save-query-as-kill-p
Query the server and expand the query string before point. The query
string consists of the buffer substring from the point back to the
preceding comma, colon or beginning of
line. @code{eudc-inline-query-format} controls how individual words
are mapped onto directory attribute names. After querying the server
for the given string, the expansion specified by
preceding comma, colon or beginning of line.
@code{eudc-inline-query-format} controls how individual words are
mapped onto directory attribute names. After querying the server for
the given string, the expansion specified by
@code{eudc-inline-expansion-format} is inserted in the buffer at
point. If @var{replace-p} is @code{t} then this expansion replaces the
query string in the buffer. If @code{eudc-expanding-overwrites-query}
is non-@code{nil} then the meaning of @var{replace-p} is negated.
point. If multiple matches are available, a selection window is
displayed. If @var{save-query-as-kill-p} is @code{t} then the query
string is saved to the kill ring. If
@code{eudc-expansion-save-query-as-kill} is non-@code{nil} then the
meaning of @var{save-query-as-kill-p} is negated.
@end deffn
@defvar eudc-inline-query-format
@ -776,12 +797,73 @@ against the @code{cn} attribute of LDAP servers:
@end defvar
@defvar eudc-inline-expansion-format
This variable lets you control exactly what is inserted into the buffer
upon an inline expansion request. It is a list whose first element is a
string passed to @code{format}. Remaining elements are symbols
corresponding to directory attribute names. The corresponding attribute
values are passed as additional arguments to @code{format}. Default is
@code{("%s %s <%s>" firstname name email)}.
This variable lets you control exactly what is inserted into the
buffer upon an inline expansion request. It can be set to @code{nil},
to a function, or to a list. Default is @code{nil}.
When the value is a list, the first element is a string passed to
@code{format}. Remaining elements are symbols corresponding to
directory attribute names. The corresponding attribute values are
passed as additional arguments to @code{format}.
When the value is @code{nil}, the expansion result will be formatted
according to @url{https://datatracker.ietf.org/doc/html/rfc5322, RFC
5322}. The @var{phrase} part will be formatted as ``firstname name'',
quoting the result if necessary. No @var{comment} part will be added
in this case. This will produce any of the default formats
@center @var{address}
@center @var{first} @code{<}@var{address}@code{>}
@center @var{last} @code{<}@var{address}@code{>}
@center @var{first} @var{last} @code{<}@var{address}@code{>}
depending on whether a first and/or last name are returned by the
query, or not.
When the value is a function, the expansion result will be formatted
according to @url{https://datatracker.ietf.org/doc/html/rfc5322, RFC
5322}, and the referenced function is called to format the
@var{phrase}, and @var{comment} parts, respectively. The formatted
@var{phrase} part will be quoted if necessary. Thus one can produce
any of the formats:
@center @var{address}
@center @var{phrase} @code{<}@var{address}@code{>}
@center @var{address} @code{(}@var{comment}@code{)}
@center @var{phrase} @code{<}@var{address}@code{>} @code{(}@var{comment}@code{)}
Email address specifications, as are generated by inline expansion,
need to comply with RFC 5322 in order to be useful in email
messages. When an invalid address specification is present in an email
message header, the message is likely to be rejected by a receiving
MTA. It is hence recommended to switch old configurations, which use
a list value, to the new @code{nil}, or function value type since it
ensures that the inserted address specifications will be in line with
@url{https://datatracker.ietf.org/doc/html/rfc5322, RFC 5322}. At
minimum, and to achieve the same semantics as with the old list
default value, this variable should now be set to @code{nil}:
@lisp
(customize-set-variable 'eudc-inline-expansion-format nil)
@end lisp
A function value can for example be used to get @emph{``last, first
<address>''} instead of the default @emph{``first last <address>''}:
@lisp
(defun my-phrase-last-comma-first (search-res-alist)
(let* (phrase
(my-attrs (eudc-translate-attribute-list '(firstname name)))
(first-name (cdr (assq (nth 0 my-attrs) search-res-alist)))
(last-name (cdr (assq (nth 1 my-attrs) search-res-alist)))
(comment nil))
(setq phrase (concat last-name ", " first-name))
(cons phrase comment)))
(customize-set-variable 'eudc-inline-expansion-format
#'my-phrase-last-comma-first)
@end lisp
To set the @var{comment} part, too, instead of @code{nil} as in this
example, also provide a string as the @code{cdr} of the @code{cons}
being returned. Do not include any double quotes in the @var{phrase}
part, as they are added automatically if needed. Neither include
parentheses in the @var{comment} part as they, too, are added
automatically.
@end defvar
@defvar eudc-multiple-match-handling-method

View file

@ -311,11 +311,9 @@ state the directionality.
size or content. By customizing @code{shr-max-image-proportion} you
can set the maximal image proportion in relation to the window they
are displayed in. E.g., 0.7 means an image is allowed to take up 70%
of the width and height. If Emacs supports image scaling (ImageMagick
support required) then larger images are scaled down. You can block
specific images completely by customizing @code{shr-blocked-images},
or, if you want to only allow some specific images, customize
@code{shr-allowed-images}.
of the width and height. If Emacs supports image scaling, then larger
images are scaled down. You can block specific images completely by
customizing @code{shr-blocked-images}.
@vindex shr-inhibit-images
You can control image display by customizing

View file

@ -265,6 +265,9 @@ This section summarizes customization variables used for the
configuration of the Flymake user interface.
@vtable @code
@item flymake-mode-line-lighter
The name of the mode. Defaults to @samp{Flymake}.
@item flymake-mode-line-format
Format to use for the Flymake mode line indicator.

View file

@ -18078,6 +18078,17 @@ parameter of @code{nnselect-rescan} will allow automatic refreshing.
A refresh can always be invoked manually through
@code{gnus-group-get-new-news-this-group}.
By default a compressed version of the selection is stored (for
permanent groups) along with other group information in the newsrc.
For cases where this might be undesirable (for example if the
selection is a very long list that doesn't compress well) a
non-@code{nil} group parameter of @code{nnselect-always-regenerate}
will prevent the list from being stored, and instead regenerate the
list each time it is needed. If more flexibility is desired,
@code{nnselect-get-artlist-override-function} and
@code{nnselect-store-artlist-override-function} may be set to
functions that get and store the list of articles.
Gnus includes engines for searching a variety of backends. While the
details of each search engine vary, the result of a search is always a
vector of the sort used by the nnselect method, and the results of
@ -21640,6 +21651,9 @@ are:
@item
@code{gnus-search-namazu}
@item
@code{gnus-search-mu}
@end itemize
If you need more granularity, you can specify a search engine in the
@ -21654,7 +21668,7 @@ buffer. That might look like:
(config-file "/home/user/.mail/.notmuch_config")))
@end example
Search engines like notmuch, namazu and mairix are similar in
Search engines like notmuch, namazu, mairix and mu are similar in
behavior: they use a local executable to create an index of a message
store, and run command line search queries against those messages,
and return a list of absolute file names of matching messages.
@ -21693,8 +21707,8 @@ The customization options are formed on the pattern
non-standard notmuch program, you might set
@code{gnus-search-notmuch-program} to @file{/usr/local/bin/notmuch}.
This would apply to all notmuch engines. The engines that use these
options are: ``notmuch'', ``namazu'', ``mairix'', ``swish-e'' and
``swish++''.
options are: ``notmuch'', ``namazu'', ``mairix'', ``mu'', ``swish-e''
and ``swish++''.
Alternately, the options can be set directly on your Gnus server
definitions, for instance, in the @code{nnmaildir} example above.
@ -24154,15 +24168,12 @@ If you want to see them in the Cc and To fields, set:
@item gnus-group-tool-bar
@vindex gnus-group-tool-bar
Specifies the tool bar in the group buffer. It can be either a list
or a symbol referring to a list. Pre-defined symbols include
@code{gnus-group-tool-bar-gnome} and @code{gnus-group-tool-bar-retro}.
or a symbol referring to a list.
@item gnus-summary-tool-bar
@vindex gnus-summary-tool-bar
Specifies the tool bar in the summary buffer. It can be either a list
or a symbol referring to a list. Pre-defined symbols include
@code{gnus-summary-tool-bar-gnome} and
@code{gnus-summary-tool-bar-retro}.
or a symbol referring to a list.
@end table

View file

@ -1083,7 +1083,9 @@ If you aren't sure which manual documents the topic you are looking
for, try the @kbd{M-x info-apropos} command in Emacs, or the @kbd{M-x
index-apropos} command in the stand-alone reader. It prompts for
a string and then looks up that string in all the indices of all the
Info documents installed on your system.
Info documents installed on your system. In Emacs, giving a prefix
argument to the command will try to search for a regular expression
instead of a string.
@node Go to node
@section @kbd{g} goes to a node by name

View file

@ -5,9 +5,9 @@
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
#+macro: stable-version 2.2.0
#+macro: release-date 2022-02-23
#+macro: development-version 2.3.0-dev
#+macro: stable-version 2.3.0
#+macro: release-date 2022-04-01
#+macro: development-version 2.4.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@ -15,7 +15,7 @@
#+texinfo_filename: modus-themes.info
#+texinfo_dir_category: Emacs misc features
#+texinfo_dir_title: Modus Themes: (modus-themes)
#+texinfo_dir_desc: Highly accessible themes (WCAG AAA)
#+texinfo_dir_desc: Elegant, highly legible and customizable themes
#+texinfo_header: @set MAINTAINERSITE @uref{https://protesilaos.com,maintainer webpage}
#+texinfo_header: @set MAINTAINER Protesilaos Stavrou
#+texinfo_header: @set MAINTAINEREMAIL @email{info@protesilaos.com}
@ -222,16 +222,16 @@ They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable
#+cindex: Essential configuration
#+vindex: modus-themes-after-load-theme-hook
Users of the built-in themes can load and automatically enable the theme
of their preference by adding either form to their init file:
Users of the built-in themes cannot ~require~ the package as usual
because there is no package to speak of. Instead, things are simpler as
all one needs is to load the theme of their preference by adding either
form to their init file:
#+begin_src emacs-lisp
(load-theme 'modus-operandi) ; Light theme
(load-theme 'modus-vivendi) ; Dark theme
#+end_src
This is all one needs.
Users of packaged variants of the themes must add a few more lines to
ensure that everything works as intended. First, one has to require the
main library before loading either theme:
@ -260,24 +260,39 @@ a theme with either of the following expressions:
Changes to the available customization options must always be evaluated
before loading a theme ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]). An exception to this
norm is when using the various Custom interfaces or with commands like
{{{kbd(M-x customize-set-variable)}}}, which can automatically reload
the theme ([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Option for inhibiting theme reload]]). This is how a basic
setup could look like:
{{{kbd(M-x customize-set-variable)}}}, which can optionally
automatically reload the theme ([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Option for inhibiting theme reload]]).
This is how a basic setup could look like:
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require':
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(bg-only no-extend))
;; Load the theme of your choice:
(load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
;;; For packaged versions which must use `require':
(require 'modus-themes)
;; Your customisations here. For example:
(setq modus-themes-bold-constructs t
modus-themes-mode-line '3d)
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(bg-only no-extend))
;; Load the theme files before enabling a theme (else you get an error).
;; Load the theme files before enabling a theme
(modus-themes-load-themes)
;; Enable the theme of your preference:
(modus-themes-load-operandi)
;; Load the theme of your choice:
(modus-themes-load-operandi) ;; OR (modus-themes-load-vivendi)
;; Optionally add a key binding for the toggle between the themes:
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
#+end_src
@ -307,15 +322,30 @@ It is common for Emacs users to rely on ~use-package~ for declaring
package configurations in their setup. We use this as an example:
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require':
(use-package emacs
:init
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(bg-only no-extend))
:config
;; Load the theme of your choice:
(load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
:bind ("<f5>" . modus-themes-toggle)
;;; For packaged versions which must use `require':
(use-package modus-themes
:ensure ; omit this to use the built-in themes
:ensure
:init
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(bg-only no-extend))
;; Load the theme files before enabling a theme (else you get an error).
;; Load the theme files before enabling a theme
(modus-themes-load-themes)
:config
;; Load the theme of your choice:
@ -326,6 +356,20 @@ package configurations in their setup. We use this as an example:
The same without ~use-package~:
#+begin_src emacs-lisp
;;; For the built-in themes which cannot use `require':
;; Add all your customizations prior to loading the themes
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-region '(bg-only no-extend))
;; Load the theme of your choice:
(load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
;;; For packaged versions which must use `require':
(require 'modus-themes)
;; Add all your customizations prior to loading the themes
@ -418,6 +462,7 @@ this manual.
modus-themes-bold-constructs nil
modus-themes-mixed-fonts nil
modus-themes-subtle-line-numbers nil
modus-themes-intense-mouseovers nil
modus-themes-deuteranopia t
modus-themes-tabs-accented t
modus-themes-variable-pitch-ui nil
@ -433,8 +478,14 @@ this manual.
;; Options for `modus-themes-mode-line' are either nil, or a list
;; that can combine any of `3d' OR `moody', `borderless',
;; `accented', and a natural number for extra padding
modus-themes-mode-line '(4 accented borderless)
;; `accented', a natural number for extra padding (or a cons cell
;; of padding and NATNUM), and a floating point for the height of
;; the text relative to the base font size (or a cons cell of
;; height and FLOAT)
modus-themes-mode-line '(accented borderless (padding . 4) (height . 0.9))
;; Same as above:
;; modus-themes-mode-line '(accented borderless 4 0.9)
;; Options for `modus-themes-markup' are either nil, or a list
;; that can combine any of `bold', `italic', `background',
@ -464,9 +515,10 @@ this manual.
;; Options for `modus-themes-box-buttons' are either nil (the
;; default), or a list that can combine any of `flat', `accented',
;; `faint', `variable-pitch', `underline', the symbol of any font
;; weight as listed in `modus-themes-weights', and a floating
;; point number (e.g. 0.9) for the height of the button's text.
;; `faint', `variable-pitch', `underline', `all-buttons', the
;; symbol of any font weight as listed in `modus-themes-weights',
;; and a floating point number (e.g. 0.9) for the height of the
;; button's text.
modus-themes-box-buttons '(variable-pitch flat faint 0.9)
;; Options for `modus-themes-prompts' are either nil (the
@ -479,8 +531,8 @@ this manual.
;; value (or empty list) or a list of properties that can include
;; any of the following (for WEIGHT read further below):
;;
;; `key' - `background', `intense', `underline', `italic', WEIGHT
;; `selection' - `accented', `intense', `underline', `italic', WEIGHT
;; `matches' - `background', `intense', `underline', `italic', WEIGHT
;; `selection' - `accented', `intense', `underline', `italic', `text-also' WEIGHT
;; `popup' - same as `selected'
;; `t' - applies to any key not explicitly referenced (check docs)
;;
@ -841,7 +893,9 @@ an empty list). The list can include any of the following symbols:
- ~heavy~
- ~extrabold~
- ~ultrabold~
+ A floating point as a height multiple of the default (e.g. =0.9=)
+ A floating point as a height multiple of the default or a cons cell in
the form of =(height . FLOAT)=
+ ~all-buttons~
The default (a nil value or an empty list) is a gray background combined
with a pseudo three-dimensional effect.
@ -873,6 +927,14 @@ defined in the variable ~modus-themes-weights~.
A number, expressed as a floating point (e.g. =0.9=), adjusts the height
of the button's text to that many times the base font size. The default
height is the same as =1.0=, though it need not be explicitly stated.
Instead of a floating point, an acceptable value can be in the form of a
cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
the given number.
The ~all-buttons~ property extends the box button effect (or the
aforementioned properties) to the faces of the generic widget library.
By default, those do not look like the buttons of the Custom UI as they
are ordinary text wrapped in square brackets.
Combinations of any of those properties are expressed as a list,
like in these examples:
@ -880,7 +942,9 @@ like in these examples:
#+begin_src emacs-lisp
(flat)
(variable-pitch flat)
(variable-pitch flat 0.9 semibold)
(variable-pitch flat semibold 0.9)
(variable-pitch flat semibold (height 0.9)) ; same as above
(variable-pitch flat semibold (height . 0.9)) ; same as above
#+end_src
The order in which the properties are set is not significant.
@ -970,7 +1034,10 @@ effect, color, and border visibility:
- ~moody~
+ ~accented~
+ ~borderless~
+ A natural number > 1 for extra padding
+ A natural number > 1 for extra padding or a cons cell in the form of
~(padding . NATNUM)~.
+ A floating point to set the height of the mode line's text. It can
also be a cons cell in the form of ~(height . FLOAT)~.
The default (a nil value or an empty list) is a two-dimensional
rectangle with a border around it. The active and the inactive mode
@ -1006,6 +1073,17 @@ bottom of the mode line, set ~x-underline-at-descent-line~ to non-nil
users on Emacs 29, the ~x-use-underline-position-properties~ variable must
also be set to nil.
The padding can also be expressed as a cons cell in the form of
=(padding . NATNUM)= or =(padding NATNUM)= where the key is constant and
NATNUM is the desired natural number.
A floating point applies an adjusted height to the mode line's text as a
multiple of the main font size. The default rate is 1.0 and does not
need to be specified. Apart from a floating point, the height may also
be expressed as a cons cell in the form of =(height . FLOAT)= or
=(height FLOAT)= where the key is constant and the FLOAT is the desired
number.
Combinations of any of those properties are expressed as a list, like in
these examples:
@ -1015,6 +1093,15 @@ these examples:
(moody accented borderless)
#+end_src
Same as above, using the padding and height as an example (these
all yield the same result):
#+begin_src emacs-lisp
(accented borderless 4 0.9)
(accented borderless (padding . 4) (height . 0.9))
(accented borderless (padding 4) (height 0.9))
#+end_src
The order in which the properties are set is not significant.
In user configuration files the form may look like this:
@ -1117,12 +1204,14 @@ appear in:
The ~selection~ key applies to the current line or currently matched
candidate, depending on the specifics of the User Interface. By default
(nil or an empty list), it has a subtle gray background and a bold
weight. The list of properties it accepts is as follows (order is not
significant):
(nil or an empty list), it has a subtle gray background, a bold weight,
and the base foreground value for the text. The list of properties it
accepts is as follows (order is not significant):
- ~accented~ to make the background colorful instead of gray;
- ~text-also~ to apply extra color to the text of the selected line;
- ~intense~ to increase the overall coloration;
- ~underline~ to draw a line below the characters;
@ -1154,8 +1243,9 @@ Is the same as:
#+end_src
In the case of the fallback, any property that does not apply to the
corresponding key is simply ignored (~matches~ does not have ~accented~,
~selection~ and ~popup~ do not have ~background~).
corresponding key is simply ignored (~matches~ does not have ~accented~
and ~text-also~, while ~selection~ and ~popup~ do not have
~background~).
A concise expression of those associations can be written as follows,
where the ~car~ is always the key and the ~cdr~ is the list of
@ -1389,6 +1479,29 @@ Instead they retain the primary background of the theme, blending with
the rest of the buffer. Foreground values for all relevant faces are
updated to accommodate this aesthetic.
** Option for mouseover effects
:properties:
:alt_title: Mouse hover effects
:description: Toggle intense style for mouseover highlights
:custom_id: h:9b869620-fcc5-4b5f-9ab8-225d73b7f22f
:end:
#+vindex: modus-themes-intense-mouseovers
Brief: Toggle intense mouse hover effects.
Symbol: ~modus-themes-intense-mouseovers~ (=boolean= type)
Possible value:
1. ~nil~ (default)
2. ~t~
By default all mouseover effects apply a highlight with a subtle colored
background. When non-nil, these have a more pronounced effect.
Note that this affects the generic ~highlight~ which, strictly speaking,
is not limited to mouse usage.
** Option for markup style in Org and others
:properties:
:alt_title: Markup
@ -1674,12 +1787,18 @@ come in the form of a list that can include either or both of those
properties:
- ~variable-pitch~ to use a proportionately spaced typeface;
- A number as a floating point (e.g. 1.5) to set the height of the text
to that many times the default font height. A float of 1.0 or the
symbol ~no-scale~ have the same effect of making the font to the same
height as the rest of the buffer. When neither a number nor ~no-scale~
are present, the default is a small increase in height (a value of
1.15).
symbol ~no-scale~ have the same effect of making the font the same
height as the rest of the buffer. When neither a number nor
`no-scale' are present, the default is a small increase in height (a
value of 1.15).
Instead of a floating point, an acceptable value can be in the form of
a cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT
is the given number.
- The symbol of a weight attribute adjusts the font of the heading
accordingly, such as ~light~, ~semibold~, etc. Valid symbols are
defined in the variable ~modus-themes-weights~. The absence of a
@ -1709,16 +1828,24 @@ the following properties:
- ~grayscale~ to make weekdays use the main foreground color and
weekends a more subtle gray;
- ~workaholic~ to make weekdays and weekends look the same in
terms of color;
- ~bold-today~ to apply a bold typographic weight to the current
date;
- ~bold-all~ to render all date headings in a bold weight;
- ~underline-today~ applies an underline to the current date while
removing the background it has by default;
- A number as a floating point (e.g. 1.2) to set the height of the text
to that many times the default font height. The default is the same
as the base font height (the equivalent of 1.0).
as the base font height (the equivalent of 1.0). Instead of a
floating point, an acceptable value can be in the form of a cons cell
like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is the given
number.
For example:
@ -1805,7 +1932,7 @@ passed as a symbol. Those are:
attenuated by painting both of them using shades of green. This
option thus highlights the alert and overdue states.
- When ~modus-themes-deuteranopia~ is non-nil the exact style of the habit
graph adapts to the needs of users with red-green colour deficiency by
graph adapts to the needs of users with red-green color deficiency by
substituting every instance of green with blue or cyan (depending on
the specifics).
@ -1884,7 +2011,8 @@ Properties:
- ~extrabold~
- ~ultrabold~
+ ~no-bold~ (deprecated alias of a ~regular~ weight)
+ A floating point as a height multiple of the default (e.g. =1.1=)
+ A floating point as a height multiple of the default or a cons cell in
the form of =(height . FLOAT)=.
By default (a ~nil~ value for this variable), all headings have a bold
typographic weight and use a desaturated text color.
@ -1916,6 +2044,9 @@ users are encouraged to specify a ~regular~ weight instead.
A number, expressed as a floating point (e.g. 1.5), adjusts the height
of the heading to that many times the base font size. The default
height is the same as 1.0, though it need not be explicitly stated.
Instead of a floating point, an acceptable value can be in the form of a
cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
the given number.
Combinations of any of those properties are expressed as a list, like in
these examples:
@ -1924,6 +2055,8 @@ these examples:
(semibold)
(rainbow background)
(overline monochrome semibold 1.3)
(overline monochrome semibold (height 1.3)) ; same as above
(overline monochrome semibold (height . 1.3)) ; same as above
#+end_src
The order in which the properties are set is not significant.
@ -2032,6 +2165,77 @@ Another example that can be bound to a key:
: TERM=xterm-direct uxterm -e emacsclient -nw
** Range of color with terminal emulators
:PROPERTIES:
:CUSTOM_ID: h:6b8211b0-d11b-4c00-9543-4685ec3b742f
:END:
#+cindex: Pure white and pure black in terminal emulators
[ This is based on partial information. Please help verify and/or
expand these findings. ]
When Emacs runs in a non-windowed session its color reproduction
capacity is framed or determined by the underlying terminal emulator
([[#h:fbb5e254-afd6-4313-bb05-93b3b4f67358][More accurate colors in terminal emulators]]). Emacs cannot produce a
color that lies outside the range of what the terminal's color palette
renders possible.
This is immediately noticeable when the terminal's first 16 codes do not
include a pure black value for the =termcol0= entry and a pure white for
=termcol15=. Emacs cannot set the correct background (white for
~modus-operandi~; black for ~modus-vivendi~) or foreground (inverse of
the background). It thus falls back to the closest approximation, which
seldom is appropriate for the purposes of the Modus themes.
In such a case, the user is expected to update their terminal's color
palette such as by adapting these resources:
#+begin_src emacs-lisp
! Theme: modus-operandi
! Description: XTerm port of modus-operandi (Modus themes for GNU Emacs)
! Author: Protesilaos Stavrou, <https://protesilaos.com>
xterm*background: #ffffff
xterm*foreground: #000000
xterm*color0: #000000
xterm*color1: #a60000
xterm*color2: #005e00
xterm*color3: #813e00
xterm*color4: #0031a9
xterm*color5: #721045
xterm*color6: #00538b
xterm*color7: #bfbfbf
xterm*color8: #595959
xterm*color9: #972500
xterm*color10: #315b00
xterm*color11: #70480f
xterm*color12: #2544bb
xterm*color13: #5317ac
xterm*color14: #005a5f
xterm*color15: #ffffff
! Theme: modus-vivendi
! Description: XTerm port of modus-vivendi (Modus themes for GNU Emacs)
! Author: Protesilaos Stavrou, <https://protesilaos.com>
xterm*background: #000000
xterm*foreground: #ffffff
xterm*color0: #000000
xterm*color1: #ff8059
xterm*color2: #44bc44
xterm*color3: #d0bc00
xterm*color4: #2fafff
xterm*color5: #feacd0
xterm*color6: #00d3d0
xterm*color7: #bfbfbf
xterm*color8: #595959
xterm*color9: #ef8b50
xterm*color10: #70b900
xterm*color11: #c0c530
xterm*color12: #79a8ff
xterm*color13: #b6a0ff
xterm*color14: #6ae4b9
xterm*color15: #ffffff
#+end_src
** Visualize the active Modus theme's palette
:properties:
:custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d
@ -2553,7 +2757,7 @@ The themes provide a mechanism for overriding their color values. This
is controlled by the variables ~modus-themes-operandi-color-overrides~ and
~modus-themes-vivendi-color-overrides~, which are alists that should
mirror a subset of the associations in ~modus-themes-operandi-colors~ and
~modus-themes-vivendi-colors~ respectively. As with all customisations,
~modus-themes-vivendi-colors~ respectively. As with all customizations,
overriding must be done before loading the affected theme.
[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]].
@ -2659,7 +2863,7 @@ Operandi and night sky blue shades for Modus Vivendi. Switching between
the two themes, such as with {{{kbd(M-x modus-themes-toggle)}}} will
also use the overrides.
Given that this is a user-level customisation, one is free to implement
Given that this is a user-level customization, one is free to implement
whatever color values they desire, even if the possible combinations
fall below the minimum 7:1 contrast ratio that governs the design of the
themes (the WCAG AAA legibility standard). Alternatively, this can also
@ -3720,6 +3924,135 @@ coloration.
[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]].
** Near-monochrome syntax highlighting
:properties:
:custom_id: h:c1f3fa8e-7a63-4a6f-baf3-a7febc0661f0
:end:
#+cindex: Monochrome code syntax
While the Modus themes do provide a user option to control the overall
style of syntax highlighting in programming major modes, they do not
cover the possibility of a monochromatic or near-monochromatic design
([[#h:c119d7b2-fcd4-4e44-890e-5e25733d5e52][Option for syntax highlighting]]). This is due to the multitude of
preferences involved: one may like comments to be styled with an accent
value, another may want certain constructs to be bold, a third may apply
italics to doc strings but not comments... The possibilities are
virtually endless. As such, this sort of design is best handled at the
user level in accordance with the information furnished elsewhere in
this manual.
[[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Case-by-case face specs using the themes' palette]].
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
The gist is that we want to override the font-lock faces. For our
changes to persist while switching between ~modus-operandi~ and
~modus-vivendi~ we wrap our face overrides in a function that we hook to
~modus-themes-after-load-theme-hook~.
Users who want to replicate the structure of the themes' source code are
advised to use the examples with ~custom-set-faces~. Those who prefer a
different approach can use the snippets which call ~set-face-attribute~.
Below are the code blocks.
The following uses a yellow accent value for comments and green hues for
strings. Regexp grouping constructs have color values that work in the
context of a green string. All other elements use the main foreground
color, except warnings such as the ~user-error~ function in Elisp
buffers which gets a subtle red tint (not to be confused with the
~warning~ face which is used for genuine warnings). Furthermore, notice
the ~modus-themes-bold~ and ~modus-themes-slant~ which apply the
preference set in the user options ~modus-themes-bold-constructs~ and
~modus-themes-italic-constructs~, respectively. Users who do not want
this conditionally must replace these faces with ~bold~ and ~italic~
respectively (or ~unspecified~ to disable the effect altogether).
#+begin_src emacs-lisp
;; This is the hook. It will not be replicated across all code samples.
(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-subtle-syntax)
(defun my-modus-themes-subtle-syntax ()
(modus-themes-with-colors
(custom-set-faces
`(font-lock-builtin-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-comment-delimiter-face ((,class :inherit font-lock-comment-face)))
`(font-lock-comment-face ((,class :inherit unspecified :foreground ,fg-comment-yellow)))
`(font-lock-constant-face ((,class :foreground unspecified)))
`(font-lock-doc-face ((,class :inherit modus-themes-slant :foreground ,fg-special-mild)))
`(font-lock-function-name-face ((,class :foreground unspecified)))
`(font-lock-keyword-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-negation-char-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-preprocessor-face ((,class :foreground unspecified)))
`(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground ,yellow)))
`(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground ,blue-alt-other)))
`(font-lock-string-face ((,class :foreground ,green-alt-other)))
`(font-lock-type-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-variable-name-face ((,class :foreground unspecified)))
`(font-lock-warning-face ((,class :inherit modus-themes-bold :foreground ,red-nuanced-fg))))))
;; Same as above with `set-face-attribute' instead of `custom-set-faces'
(defun my-modus-themes-subtle-syntax ()
(modus-themes-with-colors
(set-face-attribute 'font-lock-builtin-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-comment-delimiter-face nil :inherit 'font-lock-comment-face)
(set-face-attribute 'font-lock-comment-face nil :inherit 'unspecified :foreground fg-comment-yellow)
(set-face-attribute 'font-lock-constant-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-doc-face nil :inherit 'modus-themes-slant :foreground fg-special-mild)
(set-face-attribute 'font-lock-function-name-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-keyword-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-negation-char-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-preprocessor-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-regexp-grouping-backslash nil :inherit 'bold :foreground yellow)
(set-face-attribute 'font-lock-regexp-grouping-construct nil :inherit 'bold :foreground blue-alt-other)
(set-face-attribute 'font-lock-string-face nil :foreground green-alt-other)
(set-face-attribute 'font-lock-type-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-variable-name-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-warning-face nil :inherit 'modus-themes-bold :foreground red-nuanced-fg)))
#+end_src
The following sample is the same as above, except strings are blue and
comments are gray. Regexp constructs are adapted accordingly.
#+begin_src emacs-lisp
(defun my-modus-themes-subtle-syntax ()
(modus-themes-with-colors
(custom-set-faces
`(font-lock-builtin-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-comment-delimiter-face ((,class :inherit font-lock-comment-face)))
`(font-lock-comment-face ((,class :inherit unspecified :foreground ,fg-alt)))
`(font-lock-constant-face ((,class :foreground unspecified)))
`(font-lock-doc-face ((,class :inherit modus-themes-slant :foreground ,fg-docstring)))
`(font-lock-function-name-face ((,class :foreground unspecified)))
`(font-lock-keyword-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-negation-char-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-preprocessor-face ((,class :foreground unspecified)))
`(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
`(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground ,fg-escape-char-construct)))
`(font-lock-string-face ((,class :foreground ,blue-alt)))
`(font-lock-type-face ((,class :inherit modus-themes-bold :foreground unspecified)))
`(font-lock-variable-name-face ((,class :foreground unspecified)))
`(font-lock-warning-face ((,class :inherit modus-themes-bold :foreground ,red-nuanced-fg))))))
;; Same as above with `set-face-attribute' instead of `custom-set-faces'
(defun my-modus-themes-subtle-syntax ()
(modus-themes-with-colors
(set-face-attribute 'font-lock-builtin-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-comment-delimiter-face nil :inherit 'font-lock-comment-face)
(set-face-attribute 'font-lock-comment-face nil :inherit 'unspecified :foreground fg-alt)
(set-face-attribute 'font-lock-constant-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-doc-face nil :inherit 'modus-themes-slant :foreground fg-docstring)
(set-face-attribute 'font-lock-function-name-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-keyword-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-negation-char-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-preprocessor-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-regexp-grouping-backslash nil :inherit 'bold :foreground fg-escape-char-backslash)
(set-face-attribute 'font-lock-regexp-grouping-construct nil :inherit 'bold :foreground fg-escape-char-construct)
(set-face-attribute 'font-lock-string-face nil :foreground blue-alt)
(set-face-attribute 'font-lock-type-face nil :inherit 'modus-themes-bold :foreground 'unspecified)
(set-face-attribute 'font-lock-variable-name-face nil :foreground 'unspecified)
(set-face-attribute 'font-lock-warning-face nil :inherit 'modus-themes-bold :foreground red-nuanced-fg)))
#+end_src
* Face coverage
:properties:
:custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
@ -3793,6 +4126,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ deadgrep
+ debbugs
+ deft
+ devdocs
+ dictionary
+ diff-hl
+ diff-mode
@ -3914,6 +4248,7 @@ have lots of extensions, so the "full support" may not be 100% true…
+ mct
+ mentor
+ messages
+ mini-modeline
+ minimap
+ mmm-mode
+ mode-line
@ -4063,6 +4398,7 @@ supported by the themes.
+ dtache
+ easy-kill
+ edit-indirect
+ elfeed-summary
+ evil-owl
+ flyspell-correct
+ fortran-mode
@ -4083,6 +4419,7 @@ supported by the themes.
+ swift-mode
+ tab-bar-echo-area
+ tide
+ undo-hl
+ vdiff
+ vertico-indexed
+ vertico-mouse
@ -4239,29 +4576,20 @@ package: it draws too much attention to unfocused windows.
:custom_id: h:2a602816-bc1b-45bf-9675-4cbbd7bf6cab
:end:
While designing the style for ~display-fill-column-indicator-mode~, we
stayed close to the mode's defaults: to apply a subtle foreground color
to the ~fill-column-indicator~ face, which blends well with the rest of
theme and is consistent with the role of that mode. This is to not
upset the expectations of users.
The ~display-fill-column-indicator-mode~ uses a typographic character to
draw its line. This has the downside of creating a dashed line. The
dashes are further apart depending on how tall the font's glyph height
is and what integer the ~line-spacing~ is set to.
Nevertheless, ~display-fill-column-indicator-mode~ has some known
limitations pertaining to its choice of using typographic characters to
draw its indicator. What should be a continuous vertical line might
appear as a series of dashes in certain contexts or under specific
conditions: a non-default value for ~line-spacing~, scaled and/or
variable-pitch headings have been observed to cause this effect.
Given that we cannot control such factors, it may be better for affected
users to deviate from the default style of the ~fill-column-indicator~
face. Instead of setting a foreground color, one could use a background
and have the foreground be indistinguishable from it. For example:
At the theme level we eliminate this effect by making the character one
pixel tall: the line is contiguous. Users who prefer the dashed line
are advised to change the ~fill-column-indicator~ face, as explained
elsewhere in this document. For example:
#+begin_src emacs-lisp
(modus-themes-with-colors
(custom-set-faces
`(fill-column-indicator ((,class :background ,bg-inactive
:foreground ,bg-inactive)))))
`(fill-column-indicator ((,class :foreground ,bg-active)))))
#+end_src
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
@ -4456,7 +4784,7 @@ implements an alternative to the typical coloration of code. Instead of
highlighting the syntactic constructs, it applies color to different
levels of depth in the code structure.
As {{{file(prism.el)}}} offers a broad range of customisations, we cannot
As {{{file(prism.el)}}} offers a broad range of customizations, we cannot
style it directly at the theme level: that would run contrary to the
spirit of the package. Instead, we may offer preset color schemes.
Those should offer a starting point for users to adapt to their needs.
@ -4644,7 +4972,7 @@ Emacs' HTML rendering library ({{{file(shr.el)}}}) may need explicit
configuration to respect the theme's colors instead of whatever
specifications the webpage provides.
Consult {{{kbd(C-h v shr-use-colors)}}}.
Consult the doc string of ~shr-use-colors~.
** Note on SHR fonts
:properties:
@ -4806,6 +5134,20 @@ you've customized any faces.
"-draw" "text %X,%Y '%c'"))))
#+end_src
** Note on the Notmuch logo
:properties:
:custom_id: h:636af312-54a5-4918-84a6-0698e85a3c6d
:end:
By default, the "hello" buffer of Notmuch includes a header with the
programs' logo and a couple of buttons. The logo has the effect of
enlarging the height of the line, which negatively impacts the shape of
those buttons. Disabling the logo fixes the problem:
#+begin_src emacs-lisp
(setq notmuch-show-logo nil)
#+end_src
* Frequently Asked Questions
:properties:
:custom_id: h:b3384767-30d3-4484-ba7f-081729f03a47
@ -5124,8 +5466,8 @@ themes remains consistent.
The former criterion should be crystal clear as it pertains to the
scientific foundations of the themes: high legibility and taking care of
the needs of users with red-green colour deficiency (deuteranopia) by
avoiding red+green colour coding paradigms and/or by providing red+blue
the needs of users with red-green color deficiency (deuteranopia) by
avoiding red+green color coding paradigms and/or by providing red+blue
variants.
The latter criterion is the "je ne sais quoi" of the artistic aspect of
@ -5143,7 +5485,7 @@ but try to understand its spirit.
For a trivial example: the curly underline that Emacs draws for spelling
errors is thinner than, e.g., what a graphical web browser has, so if I
was to design for an editor than has a thicker curly underline I would
make the applicable colours less intense to counterbalance the
make the applicable colors less intense to counterbalance the
typographic intensity of the added thickness.
With those granted, if anyone is willing to develop a port of the
@ -5166,8 +5508,8 @@ in which you can contribute to their ongoing development.
The ~modus-operandi~ and ~modus-vivendi~ themes are built into Emacs 28.
The source code of the themes is [[https://gitlab.com/protesilaos/modus-themes/][available on Gitlab]], for the time
being. A [[https://github.com/protesilaos/modus-themes/][mirror on Github]] is also on offer.
The source code of the themes is [[https://gitlab.com/protesilaos/modus-themes/][available on GitLab]], for the time
being. A [[https://github.com/protesilaos/modus-themes/][mirror on GitHub]] is also on offer.
An HTML version of this manual is provided as an extension of the
[[https://protesilaos.com/emacs/modus-themes/][author's personal website]] (does not rely on any non-free code).
@ -5274,37 +5616,39 @@ The Modus themes are a collective effort. Every bit of work matters.
+ Author/maintainer :: Protesilaos Stavrou.
+ Contributions to code or documentation :: Alex Griffin, Anders
Johansson, Basil L.{{{space()}}} Contovounesios, Björn Lindström, Carlo
Zancanaro, Christian Tietze, Daniel Mendler, Eli Zaretskii, Fritz
Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Kostadin Ninev, Madhavan
Krishnan, Markus Beppler, Matthew Stevenson, Mauro Aranda, Nicolas De
Jaeghere, Philip Kaludercic, Rudolf Adamkovič, Stephen Gildea, Shreyas
Ragavan, Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen,
Yuanchen Xie.
Johansson, Basil L.{{{space()}}} Contovounesios, Björn Lindström,
Carlo Zancanaro, Christian Tietze, Daniel Mendler, Eli Zaretskii,
Fritz Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Kostadin Ninev,
Madhavan Krishnan, Markus Beppler, Matthew Stevenson, Mauro Aranda,
Nicolas De Jaeghere, Philip Kaludercic, Pierre Téchoueyres, Rudolf
Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan Kangas, Utkarsh
Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie.
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
Adrian Manea, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko,
Alok Singh, Anders Johansson, André Alexandre Gomes, Arif Rezai, Basil
L.{{{space()}}} Contovounesios, Burgess Chang, Christian Tietze,
Christopher Dimech, Damien Cassou, Daniel Mendler, Dario Gjorgjevski,
David Edmondson, Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele
Michele Alberto Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet,
Gerry Agbobada, Gianluca Recchia, Guilherme Semente, Gustavo Barros,
Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy Friesen, Jerry
Zhang, Johannes Grødem, John Haman, Joshua O'Connor, Kenta Usami,
Kevin Fleming, Kévin Le Gouguec, Kostadin Ninev, Len Trigg, Magne Hov,
Manuel Uberti, Mark Bestley, Mark Burton, Markus Beppler, Mauro
Aranda, Michael Goldenberg, Morgan Smith, Murilo Pereira, Nicky van
Alok Singh, Anders Johansson, André Alexandre Gomes, Antonio Hernández
Blas, Arif Rezai, Augusto Stoffel, Basil L.{{{space()}}}
Contovounesios, Burgess Chang, Christian Tietze, Christopher Dimech,
Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele Michele Alberto
Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada,
Gianluca Recchia, Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz,
Ilja Kocken, Iris Garcia, Jeremy Friesen, Jerry Zhang, Johannes
Grødem, John Haman, Jorge Morais, Joshua O'Connor, Julio
C. Villasante, Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin
Ninev, Len Trigg, Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark
Bestley, Mark Burton, Markus Beppler, Mauro Aranda, Michael
Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky van
Foreest, Nicolas De Jaeghere, Paul Poloskov, Pengji Zhang, Pete
Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Roman
Rudakov, Ryan Phillips, Rudolf Adamkovič, Sam Kleinman, Samuel
Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Tassilo Horn,
Thibaut Verron, Thomas Heartman, Togan Muftuoglu, Trey Merkley, Tomasz
Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As
well as users: Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux,
Fredrik, Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream,
derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
pRot0ta1p.
Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Robert
Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas, Rudolf
Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas Heartman,
Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz Hołubowicz, Toon
Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As well as users:
Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux, Fredrik,
Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream, derek-upham,
doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p.
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn
Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core Emacs),

View file

@ -6405,7 +6405,7 @@ special repeaters =++= and =.+=. For example:
Marking this DONE shifts the date to one month after today.
,** TODO Wash my hands
DEADLINE: <2019-04-05 08:00 Sun .+1h>
DEADLINE: <2019-04-05 08:00 Fri .+1h>
Marking this DONE shifts the date to exactly one hour from now.
#+end_example

View file

@ -154,8 +154,11 @@ deego: fsbot rules!
@cindex nick completion
@cindex completion of nicks
@vindex rcirc-cycle-completion-flag
@kindex TAB
Since this is so common, you can use @key{TAB} to do nick completion.
By default rcirc will use the default completion system, but you can
enable @code{rcirc-cycle-completion-flag} to cycle nicks in place.
@node Getting started with rcirc
@section Getting started with rcirc

View file

@ -220,7 +220,14 @@ You move around with the regular Emacs movement commands.
@table @kbd
@item j
Moves point to cell, specified by identifier (@code{ses-jump}).
Moves point to cell, specified by identifier (@code{ses-jump}). Unless
the cell is a renamed cell, the identifier is case-insensitive. A
prefix argument @math{n} move to cell with coordinates @math{(n\div R,
n \% C)} for a spreadsheet of @math{R} rows and @math{C} columns, and
A1 being of coordinates @math{(0,0)}. The way the identifier or the
command prefix argument are interpreted can be customized through
variables @code{ses-jump-cell-name-function} and
@code{ses-jump-prefix-function}.
@end table
Point is always at the left edge of a cell, or at the empty endline.
@ -726,10 +733,6 @@ yank. This doesn't make any difference?
@section Customizing @acronym{SES}
@cindex customizing
@vindex enable-local-eval
@vindex ses-mode-hook
@vindex safe-functions
@vindex enable-local-eval
By default, a newly-created spreadsheet has 1 row and 1 column. The
column width is 7 and the default printer is @samp{"%.7g"}. Each of these
@ -740,9 +743,34 @@ cell. You can customize @code{ses-after-entry-functions} to move left or
up or down. For diagonal movement, select two functions from the
list.
@vindex ses-jump-cell-name-function
@code{ses-jump-cell-name-function} is a customizable variable by
default set to the @code{upcase} function. This function is called
when you pass a cell name to the @command{ses-jump} command (@kbd{j}),
it changes the entered cell name to that where to jump. The default
setting @code{upcase} allows you to enter the cell name in low
case. Another use of @code{ses-jump-cell-name-function} could be some
internationalisation to convert non latin characters into latin
equivalents to name the cell. Instead of a cell name, the function may
return cell coordinates in the form of a cons, for instance @code{(0
. 0)} for cell @code{A1}, @code{(1 . 0)} for cell @code{A2}, etc.
@vindex ses-jump-prefix-function
@code{ses-jump-prefix-function} is a customisable variable by default
set to the @code{ses-jump-prefix} function. This function is called
when you give a prefix argument to the @command{ses-jump} command
(@kbd{j}). It returns a cell name or cell coordinates corresponding to
the prefix argument. Cell coordinates are in the form of a cons, for
instance @code{(1 . 0)} for cell @code{A2}. The default setting
@code{ses-jump-prefix} will number cells left to right and then top
down, so assuming a 4x3 spreadsheet prefix argument 0 jumps to cell
A1, prefix argument 2 jumps to C1, prefix argument 3 jumps to A2, etc.
@vindex ses-mode-hook
@code{ses-mode-hook} is a normal mode hook (list of functions to
execute when starting @acronym{SES} mode for a buffer).
@vindex safe-functions
The variable @code{safe-functions} is a list of possibly-unsafe
functions to be treated as safe when analyzing formulas and printers.
@xref{Virus protection}. Before customizing @code{safe-functions},

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{2022-01-02.12}
\def\texinfoversion{2022-04-09.08}
%
% Copyright 1985, 1986, 1988, 1990-2021 Free Software Foundation, Inc.
% Copyright 1985, 1986, 1988, 1990-2022 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
@ -3171,16 +3171,8 @@
% Default is `distinct'.
\kbdinputstyle distinct
% @kbd is like @code, except that if the argument is just one @key command,
% then @kbd has no effect.
\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
\def\xkey{\key}
\def\kbdsub#1#2#3\par{%
\def\one{#1}\def\three{#3}\def\threex{??}%
\ifx\one\xkey\ifx\threex\three \key{#2}%
\else{\tclose{\kbdfont\setcodequotes\look}}\fi
\else{\tclose{\kbdfont\setcodequotes\look}}\fi
\def\kbd#1{%
\tclose{\kbdfont\setcodequotes#1}%
}
% definition of @key that produces a lozenge. Doesn't adjust to text size.
@ -4417,7 +4409,7 @@
% Find the correct column width
\hsize=\expandafter\csname col\the\colcount\endcsname
%
\rightskip=0pt
\advance\rightskip by -1\rightskip % Zero leaving only any stretch
\ifnum\colcount=1
\advance\hsize by\leftskip % Add indent of surrounding text
\else
@ -5961,7 +5953,7 @@
% Chapters, sections, etc.
% Let's start with @part.
\outer\parseargdef\part{\partzzz{#1}}
\parseargdef\part{\partzzz{#1}}
\def\partzzz#1{%
\chapoddpage
\null
@ -8680,9 +8672,11 @@
}
\def\wordTop{Top}
% Until the next @node or @bye command, divert output to a box that is not
% output.
\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
% Until the next @node, @part or @bye command, divert output to a box that
% is not output.
\def\ignorenode{\setbox\dummybox\vbox\bgroup
\def\part{\egroup\part}%
\def\node{\egroup\node}%
\ignorenodebye
}
@ -9391,13 +9385,12 @@
\catcode`\^^M = 5 % in case we're inside an example
\normalturnoffactive % allow _ et al. in names
\makevalueexpandable
% If the image is by itself, center it.
\ifvmode
\imagevmodetrue
\else \ifx\centersub\centerV
% for @center @image, we need a vbox so we can have our vertical space
\imagevmodetrue
\vbox\bgroup % vbox has better behavior than vtop herev
\vbox\bgroup % vbox has better behavior than vtop here
\fi\fi
%
\ifimagevmode
@ -9405,11 +9398,14 @@
% Usually we'll have text after the image which will insert
% \parskip glue, so insert it here too to equalize the space
% above and below.
\nobreak\vskip\parskip
\nobreak
\vskip\parskip
%
% Place image in a \vtop for a top page margin that is (close to) correct,
% as \topskip glue is relative to the first baseline.
\vtop\bgroup\hrule height 0pt\vskip-\parskip
\fi
%
% Leave vertical mode so that indentation from an enclosing
% Enter horizontal mode so that indentation from an enclosing
% environment such as @quotation is respected.
% However, if we're at the top level, we don't want the
% normal paragraph indentation.
@ -9438,6 +9434,7 @@
\fi
%
\ifimagevmode
\egroup
\medskip % space after a standalone image
\fi
\ifx\centersub\centerV \egroup \fi
@ -10898,6 +10895,9 @@
\DeclareUnicodeCharacter{1EF8}{\~Y}%
\DeclareUnicodeCharacter{1EF9}{\~y}%
%
% Exotic spaces
\DeclareUnicodeCharacter{2007}{\hphantom{0}}%
%
% Punctuation
\DeclareUnicodeCharacter{2013}{--}%
\DeclareUnicodeCharacter{2014}{---}%

View file

@ -1881,29 +1881,25 @@ Example:
The following predefined functions parsing configuration files exist:
@table @asis
@ftable @asis
@item @code{tramp-parse-rhosts}
@findex tramp-parse-rhosts
This function parses files which are syntactical equivalent to
@file{~/.rhosts}. It returns both host names and user names, if
specified.
@item @code{tramp-parse-shosts}
@findex tramp-parse-shosts
This function parses files which are syntactical equivalent to
@file{~/.ssh/known_hosts}. Since there are no user names specified
in such files, it can return host names only.
@item @code{tramp-parse-sconfig}
@findex tramp-parse-sconfig
This function returns the host nicknames defined by @option{Host}
entries in @file{~/.ssh/config} style files.
@item @code{tramp-parse-shostkeys}
@findex tramp-parse-shostkeys
SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
@file{~/ssh2/hostkeys/*}. Hosts are coded in file names
@ -1911,7 +1907,6 @@ SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
are always @code{nil}.
@item @code{tramp-parse-sknownhosts}
@findex tramp-parse-sknownhosts
Another SSH2 style parsing of directories like
@file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}. This
@ -1919,26 +1914,22 @@ case, hosts names are coded in file names
@file{@var{host-name}.@var{algorithm}.pub}. User names are always @code{nil}.
@item @code{tramp-parse-hosts}
@findex tramp-parse-hosts
A function dedicated to @file{/etc/hosts} for host names.
@item @code{tramp-parse-passwd}
@findex tramp-parse-passwd
A function which parses @file{/etc/passwd} for user names.
@item @code{tramp-parse-etc-group}
@findex tramp-parse-etc-group
A function which parses @file{/etc/group} for group names.
@item @code{tramp-parse-netrc}
@findex tramp-parse-netrc
A function which parses @file{~/.netrc} and @file{~/.authinfo}-style files.
@end table
@end ftable
To keep a custom file with custom data in a custom structure, a custom
function has to be provided. This function must meet the following
@ -2658,6 +2649,41 @@ The most common @value{tramp} connection family is based on either
configuration recommendations are given.
@subsection Using ssh config include for host name completion
@vindex Include@r{, ssh option}
@findex tramp-set-completion-function
@findex tramp-get-completion-function
OpenSSH configuration files can use an @option{Include} option for
further configuration files. Default @value{tramp} host name
completion ignores this option. However, you can configure this
yourself.
Given, your @file{~/.ssh/config} file contains the following option:
@example
Include ~/.ssh/conf.d/*
@end example
The following code snippet in your @file{.emacs} uses all files in
that directory for host name completion:
@lisp
@group
(tramp-set-completion-function
"ssh" (append (tramp-get-completion-function "ssh")
(mapcar (lambda (file) `(tramp-parse-sconfig ,file))
(directory-files
"~/.ssh/conf.d/"
'full directory-files-no-dot-files-regexp))))
@end group
@end lisp
This code snippet does it for the @option{ssh} method. If you replace
@t{"ssh"} by @t{"scp"}, it does it also for that method (or any other
method you like).
@subsection Detection of session hangouts
@vindex ServerAliveInterval@r{, ssh option}
@ -2913,6 +2939,7 @@ Additionally, it declares also the arguments for running remote
processes, using the @command{ssh} command. These don't need to be
changed.
@node Android shell setup
@section Android shell setup hints
@cindex android shell setup for ssh
@ -4019,6 +4046,127 @@ using the @code{:connection-type} keyword. If this keyword is not
used, the value of @code{process-connection-type} is applied instead.
@subsection Process properties of asynchronous remote processes
@cindex Asynchronous remote processes
When available, @value{tramp} adds process properties to process
objects of asynchronous properties. However, it is not guaranteed
that all these properties are set.
@itemize
@item @code{remote-tty}
This is the name of the terminal a @var{process} uses on the remote
host, i.e., it reads and writes on.
@item @code{remote-pid}
The process id of the command executed on the remote host. This is
used when sending signals remotely.
@item @code{remote-command}
The remote command which has been invoked via @code{make-process} or
@code{start-file-process}, a list of strings (program and its
arguments). This does not show the additional shell sugar
@value{tramp} makes around the commands, in order to see this you must
inspect @value{tramp} @ref{Traces and Profiles, traces}.
@end itemize
@findex list-system-processes
@findex process-attributes
The functions @code{list-system-processes} and
@code{process-attributes} return information about system processes on
the respective remote host. In order to retrieve this information,
they use the command @command{ps}, driven by the following constants:
@defvr Constant tramp-process-attributes-ps-args
This is a list of arguments (strings) @command{ps} is called with.
The default value is appropriate for GNU/Linux remote hosts.
@end defvr
@defvr Constant tramp-process-attributes-ps-format
This is a list of cons cells @code{(@var{key} . @var{type})} for
interpretation of the @command{ps} output. @var{key} is a key used in
the @code{process-attributes} output plus the key @code{pid}, and
@var{type} is the respective value returned by @command{ps}. It can
be
@multitable {@bullet{} @code{numberp}} {--- a string of @var{number} width, could contain spaces}
@item @bullet{} @code{numberp} @tab --- a number
@item @bullet{} @code{stringp} @tab --- a string without spaces
@item @bullet{} @var{number}
@tab --- a string of @var{number} width, could contain spaces
@item @bullet{} @code{nil} @tab --- a string until end of line
@end multitable
The default value is appropriate for GNU/Linux remote hosts.
@end defvr
If, for example, @code{tramp-process-attributes-ps-args} is declared
as @code{("-eww" "-o" "pid,euid,euser,egid,egroup,comm:40,state")},
the output of the respective @command{ps} command would look like
@smallexample
@group
PID EUID EUSER EGID EGROUP COMMAND S
1 0 root 0 root systemd S
1610 0 root 0 root NFSv4 callback S
@dots{}
@end group
@end smallexample
The corresponding @code{tramp-process-attributes-ps-format} has the value
@smallexample
@group
@code{((pid . numberp) (euid . numberp) (user . stringp)
(egid . numberp) (group . stringp) (comm . 40) (state . stringp))}
@end group
@end smallexample
@vindex tramp-adb-connection-local-default-ps-profile
@vindex tramp-adb-connection-local-default-ps-variables
@vindex tramp-connection-local-bsd-ps-profile
@vindex tramp-connection-local-bsd-ps-variables
@vindex tramp-connection-local-busybox-ps-profile
@vindex tramp-connection-local-busybox-ps-variables
@vindex tramp-connection-local-darwin-ps-profile
@vindex tramp-connection-local-darwin-ps-variables
The default values for @code{tramp-process-attributes-ps-args} and
@code{tramp-process-attributes-ps-format} can be overwritten by
connection-local variables.
@ifinfo
@xref{Connection Variables, , , emacs}.
@end ifinfo
This is already done by @value{tramp} for the @option{adb} method, see
@code{tramp-adb-connection-local-default-ps-profile} and
@code{tramp-adb-connection-local-default-ps-variables}.
There are three further predefined sets of connection-local variables
for remote BSD systems, for remote macOS systems, and for a remote
@command{ps} command implemented with @command{busybox}. These are
called @code{tramp-connection-local-*-ps-profile} and
@code{tramp-connection-local-*-ps-variables}. Use them like
@lisp
@group
(connection-local-set-profiles
'(:application tramp :machine "mybsdhost")
'tramp-connection-local-bsd-ps-profile)
@end group
@end lisp
@cindex proced
@vindex proced-show-remote-processes
If you want to see a listing of remote system processes when calling
@code{proced}, set user option @code{proced-show-remote-processes} to
non-@code{nil}, or invoke that command with a negative argument like
@kbd{C-u - M-x proced @key{RET}} when your buffer has a remote
@code{default-directory}.
@anchor{Improving performance of asynchronous remote processes}
@subsection Improving performance of asynchronous remote processes
@cindex Asynchronous remote processes
@ -5000,6 +5148,26 @@ be restored by moving them manually from
@file{$@{XDG_DATA_HOME@}/Trash/files/}, if needed.
@item
How to identify temporary files produced by @value{tramp}?
@vindex tramp-temp-name-prefix
Temporary files are kept in your @code{temporary-file-directory}
directory, which is often @file{/tmp/}. By default, they have the
file name prefix @t{"tramp."}. If you want to change this prefix, for
example because you want to identify temporary files produced by
@code{file-local-copy} in your package, you can bind the variable
@code{tramp-temp-name-prefix} temporarily:
@example
@group
(let ((tramp-temp-name-prefix "my-prefix."))
(file-local-copy "@trampfn{ssh,,.emacs}"))
@result{} "/tmp/my-prefix.HDfgDZ"
@end group
@end example
@item
How to shorten long file names when typing in @value{tramp}?

View file

@ -23,9 +23,9 @@ General Public License for more details.
@end quotation
@end copying
@dircategory Emacs
@dircategory Emacs misc features
@direntry
* Transient: (transient). Transient Commands.
* Transient: (transient). Transient Commands.
@end direntry
@finalout

View file

@ -88,9 +88,9 @@ Here's just about the simplest vtable that can be created:
("Gazonk" 45)))
@end lisp
By default, vtable uses the @code{variable-pitch} font, and
right-aligns columns that have only numerical data (and left-aligns
the rest).
By default, vtable uses the @code{vtable} face (which inherits from
the @code{variable-pitch} face), and right-aligns columns that have
only numerical data (and left-aligns the rest).
You'd normally want to name the columns:
@ -383,9 +383,27 @@ there are several tables in the same buffer, then this should be
@code{nil}.
@item :face
The face to be used. This defaults to @code{variable-pitch}. This
face doesn't override the faces in the data, or the faces supplied by
the getter and formatter functions.
The face to be used. This defaults to @code{vtable}. This face
doesn't override the faces in the data, or the faces supplied by the
getter and formatter functions.
@item :row-colors
If present, this should be a list of color names to be used as the
background color on the rows. If there are fewer colors here than
there are rows, the rows will be repeated. The most common use
case here is to have alternating background colors on the rows, so
this would usually be a list of two colors. This can also be a list
of faces to be used.
@item :column-colors
If present, this should be a list of color names to be used as the
background color on the columns. If there are fewer colors here than
there are columns, the colors will be repeated. The most common use
case here is to have alternating background colors on the columns, so
this would usually be a list of two colors. This can also be a list
of faces to be used. If both @code{:row-colors} and
@code{:column-colors} is present, the colors will be ``blended'' to
produce the final colors in the table.
@item :actions
This uses the same syntax as @code{define-keymap}, but doesn't refer
@ -402,6 +420,13 @@ current line, they can use the @code{vtable-current-object} function
@item :separator-width
The width of the blank space between columns.
@item :divider-width
@itemx :divider
You can have a divider inserted between the columns. This can either
be specified by using @code{:divider}, which should be a string to be
displayed between the columns, or @code{:divider-width}, which
specifies the width of the space to be used as the divider.
@item :sort-by
This should be a list of tuples, and specifies how the table is to be
sorted. Each tuple should consist of an integer (the column index)

View file

@ -1574,8 +1574,8 @@ Eli Zaretskii: wrote [bidirectional display in xdisp.c]
and co-wrote help-tests.el
and changed xdisp.c display.texi w32.c msdos.c w32fns.c simple.el
files.el fileio.c keyboard.c emacs.c w32term.c text.texi dispnew.c
w32proc.c files.texi frames.texi configure.ac lisp.h dispextern.h
process.c editfns.c and 1232 other files
w32proc.c files.texi frames.texi configure.ac dispextern.h lisp.h
process.c ms-w32.h and 1236 other files
Eliza Velasquez: changed server.el
@ -2610,10 +2610,10 @@ Jimmy Yuen Ho Wong: changed nsm.el gnutls.c gnutls.el disass.el
Jim Paris: changed process.c
Jim Porter: changed delsel.el ansi-color-tests.el ansi-color.el
bindings.el term-tests.el term.el tramp.el callproc.c
dichromacy-theme.el diff-mode.el files-tests.el gdb-mi.el grep-tests.el
ispell.el leuven-theme.el man.el menu-bar.el misterioso-theme.el
process.c process.h progmodes/grep.el and 6 other files
bindings.el esh-var.el term-tests.el term.el tramp.el callproc.c
dichromacy-theme.el diff-mode.el em-pred.el eshell-tests.el eshell.texi
files-tests.el gdb-mi.el grep-tests.el ispell.el leuven-theme.el man.el
menu-bar.el and 10 other files
Jim Radford: changed gnus-start.el
@ -2950,7 +2950,7 @@ Juri Linkov: wrote compose.el files-x.el misearch.el repeat-tests.el
and changed isearch.el simple.el info.el replace.el dired.el dired-aux.el
progmodes/grep.el subr.el window.el image-mode.el mouse.el diff-mode.el
files.el menu-bar.el minibuffer.el progmodes/compile.el startup.el
faces.el vc.el display.texi search.texi and 444 other files
faces.el vc.el display.texi search.texi and 446 other files
Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
w32console.c w32heap.c w32inevt.c w32term.h
@ -3306,7 +3306,7 @@ and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el
rfc2047.el svg.el time-date.el
and changed gnus.texi simple.el subr.el files.el process.c text.texi
display.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
auth-source.el url-http.el edebug.el gnus-cite.el image.el pop3.el
auth-source.el url-http.el edebug.el image.el gnus-cite.el pop3.el
dired-aux.el fns.c image.c and 860 other files
Lars Rasmusson: changed ebrowse.c
@ -4564,9 +4564,10 @@ and changed xdisp.c comp.c fns.c pdumper.c alloc.c byte-opt.el
ccl-tests.el ccl.c ccl.el cmds.c comint.el comp-test-funcs.el
comp-tests.el comp.el composite.c and 28 other files
Po Lu: changed xdisp.c browse-url.el callproc.c cc-compat.el config.bat
esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h nsfns.m
nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp sedlibmk.inp
Po Lu: changed xdisp.c anti.texi browse-url.el callproc.c cc-compat.el
config.bat esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h
nsfns.m nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp
sedlibmk.inp tooltip.el xterm.c
Pontus Michael: changed simple.el
@ -5385,8 +5386,8 @@ and co-wrote ol-gnus.el
and changed bug-reference.el reftex-vars.el tex-mode.el browse-url.el
gnus.texi reftex-cite.el tsdh-dark-theme.el tsdh-light-theme.el
gnus-sum.el maintaining.texi file-notify-tests.el gnus-art.el misc.texi
reftex.el org-gnus.el prog-mode.el subword.el image-mode.el json.el
lisp-mode.el rcirc.el and 99 other files
reftex.el org-gnus.el prog-mode.el subword.el dired.el image-mode.el
json.el lisp-mode.el and 99 other files
Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el

View file

@ -947,10 +947,10 @@ several kinds of low-level problems in C code, including:
* Passing invalid values to some builtin functions, e.g., __builtin_clz (0).
* Reaching __builtin_unreachable calls (in Emacs, 'eassume' failure).
To use UndefinedBehaviorSanitizer with GCC and similar compilers,
append '-fsanitize=undefined' to CFLAGS, either when running
'configure' or running 'make'. When supported, you can also specify
'bound-strict' and 'float-cast-overflow'. For example:
To use GCC's UndefinedBehaviorSanitizer, append '-fsanitize=undefined'
to CFLAGS, either when running 'configure' or running 'make'.
When supported, you can also specify 'bound-strict' and
'float-cast-overflow'. For example:
./configure \
CFLAGS='-O0 -g3 -fsanitize=undefined,bounds-strict,float-cast-overflow'
@ -958,6 +958,11 @@ append '-fsanitize=undefined' to CFLAGS, either when running
You may need to append '-static-libubsan' to CFLAGS if your version of
GCC is installed in an unusual location.
Clang's UB sanitizer can also be used, but has coverage problems.
You'll need '-fsanitize=undefined -fno-sanitize=pointer-overflow' to
suppress misguided warnings about adding zero to a null pointer,
although this also suppresses any valid pointer overflow warnings.
When using GDB to debug an executable with undefined-behavior
sanitization, the GDB command:

View file

@ -27,9 +27,11 @@ Arabic (العربيّة) السّلام عليكم
Armenian (հայերեն) Բարև ձեզ
Belarusian (беларуская) Прывітанне
Bengali (বাংলা) নমস্কার
Brahmi (𑀩𑁆𑀭𑀸𑀳𑁆𑀫𑀻) 𑀦𑀫𑀲𑁆𑀢𑁂
Braille ⠓⠑⠇⠇⠕
Burmese (မြန်မာ) မင်္ဂလာပါ
C printf ("Hello, world!\n");
C printf (<x-color><param>orange red</param>"Hello, world!\n"</x-color>);
Cham (ꨌꩌ) ꨦꨤꩌ ꨦꨁꨰ
Cherokee (ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ) ᎣᏏᏲ / ᏏᏲ
Comanche /kəˈmæntʃiː/ Haa marʉ́awe

View file

@ -224,6 +224,8 @@ GNU Emacs 27.1 (2020-08-10) emacs-27.1
GNU Emacs 27.2 (2021-03-25) emacs-27.2
GNU Emacs 28.1 (2022-04-04) emacs-28.1
----------------------------------------------------------------------
This file is part of GNU Emacs.

819
etc/NEWS

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -451,10 +451,6 @@ you can now configure them.
(the default) or use the attachment directory of the current node, if
it is correctly configured as a Git repository.
*** Some faces now use fixed-pitch
See [[msg:875z8njaol.fsf@protesilaos.com][this thread]].
*** New option ~org-attach-sync-delete-empty-dir~
~org-attach-sync-delete-empty-dir~ controls the deletion of an empty
@ -509,7 +505,7 @@ heading, except return nil.
In the past, faces of todo keywords, emphasised text, tags, and
priority cookies inherited =default= face. The resulting headline
fontification was not always consistent, as discussed in [[https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00331.html][this bug
fontification was not always consistent, as discussed in [[msg::87h7sawubl.fsf@protesilaos.com][this bug
report]]. Now, the relevant faces adapt to face used to fontify the
current headline level.

View file

@ -651,6 +651,46 @@ And then rename the system's readline so that it won't be loaded:
See <https://pypi.python.org/pypi/gnureadline> for more details on
installation.
*** On MS-Windows, invoking "M-x run-python" signals an error.
If the error says something like this:
Python was not found; run with arguments to install
from the Microsoft Store, or disable this shortcut
from Settings > Manage App Execution Aliases.
Process Python exited abnormally with code 49
then this is due to the MS-Windows "feature" that is intended to
encourage you to install the latest available Python version. It
works by placing "fake" python.exe and python3.exe executables in a
special directory, and having that directory on your Path _before_ the
directory where the real Python executable is installed. That "fake"
Python then decides whether to redirect you to the Microsoft Store or
invoke the actual Python. The directory where Windows keeps those
"fake" executables is under your Windows user's 'AppData' directory,
typically 'C:\Users\<user>\AppData\Local\Microsoft\WindowsApps', where
"<user>" is the user name of your Windows user.
To solve this, you have several alternatives:
. Go to "Settings > Manage App Execution Aliases" and turn OFF the
aliases for python.exe and/or python3.exe. This will affect only
Python, and may require you to manage upgrades to your Python
installation manually, instead of being automatically prompted by
MS-Windows.
. Move the directory with the "fake" executables to the end of Path,
or at least after the directory where the real Python is
installed. Depending on the position in Path where you move it,
it will affect Python and/or other programs which Windows monitors
via the "App Execution Aliases" feature.
. Manually remove python.exe and/or python3.exe from the above
directory. Again, this affects only your Python installation.
Whatever you do, you will need to restart Emacs to refresh its notion
of the directory where python.exe/python3.exe lives, because that is
recorded when Python mode is started.
*** Visiting files in some auto-mounted directories causes Emacs to print
'Error reading dir-locals: (file-error "Read error" "is a directory" ...'
@ -1009,6 +1049,15 @@ index 5504171..431adf8 100644
If you can't modify that file directly, copy it to the directory
~/.m17n.d/ (create it if it doesn't exist), and apply the patch.
** On Haiku, some proportionally-spaced fonts display with artifacting.
This is a Haiku bug: https://dev.haiku-os.org/ticket/17229, which can
be remedied by using a different font that does not exhibit this
problem, or by configuring Emacs '--with-be-cairo'.
So far, Bitstream Charter and Noto Sans have been known to exhibit
this problem, while Noto Sans Display is known to not do so.
** On MS-Windows, some characters display as boxes with hex code.
Also, some characters could display with wrong fonts.
@ -1022,14 +1071,20 @@ modern fonts are used, such as Noto Emoji or Ebrima.
The solution is to switch to a configuration that uses HarfBuzz as its
shaping engine, where these problems don't exist.
** On Haiku, some proportionally-spaced fonts display with artifacting.
** On MS-Windows, selecting some fonts as the default font doesn't work.
This is a Haiku bug: https://dev.haiku-os.org/ticket/17229, which can
be remedied by using a different font that does not exhibit this
problem, or by configuring Emacs '--with-be-cairo'.
This can happen if you select font variants such as "Light" or "Thin"
or "Semibold" or "Heavy", and some others. The APIs used by Emacs on
Windows to enumerate fonts in a font family consider only 4 font
variants to belong to the same family: Regular, Italic, Bold, and
Bold-Italic. All the other variants aren't returned by those APIs
when we request to list all the fonts in a family, and thus aren't
considered by Emacs to belong to the family. So any font variant that
is not one of those 4 will likely not work as expected; in most cases
Emacs will select some other font instead.
So far, Bitstream Charter and Noto Sans have been known to exhibit
this problem, while Noto Sans Display is known to not do so.
The only workaround is not to choose such font variants as the default
font when running Emacs on MS-Windows.
* Internationalization problems
@ -1786,6 +1841,21 @@ remote X server, try this:
(setq mouse-highlight nil)
*** Dropping text on xterm doesn't work.
Emacs sends sythetic button events to legacy clients such as xterm
that do not support either the XDND or Motif drag-and-drop protocols
in order to "paste" the text that was dropped. Unfortunately, xterm
is configured to ignore these events by default. Add the following to
your X defaults file to avoid the problem:
XTerm.*.allowSendEvents: True
Note that this can in theory pose a security risk, but in practice
modern X servers have so many other ways to send input to clients
without signifying that the event is synthesized that it does not
matter.
* Runtime problems on character terminals
** The meta key does not work on xterm.

Binary file not shown.

View file

@ -1,33 +0,0 @@
/* XPM */
static char * catchup_xpm[] = {
"24 24 6 1",
" c None",
". c #FFFFFFFFFFFF",
"X c #E1E1E0E0E0E0",
"o c #A5A5A5A59595",
"O c #999999999999",
"+ c #000000000000",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" . ",
" . .X ",
" ... .oX . ",
" ..oooX.oXo .X ",
" .oooXXXX..oXXoXX ",
" .oXXXX.XoX.oXooX ",
" X...X.X.XX.XoXX ",
" Xo..X.XXX.XXXX ",
" . Xo.oXX..XXXXXX ",
"OOOOXoXXXXXo.XXXXX++OOOO",
"OOOOOX..X.XXXXXXXX++OOOO",
"OOOOOX..XXXXXXXXX++OOOOO",
"OOOOOOXXXXXXXXX+++OOOOOO",
"OOOOOOOOOXXXX++++OOOOOOO",
"OOOOOOOOO+++++OOOOOOOOOO",
"OOOOOOOOOO+OOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOOOOOOOOOO"};

Binary file not shown.

View file

@ -1,31 +0,0 @@
/* XPM */
static char * cu_exit_xpm[] = {
"24 24 4 1",
" c None",
". c #000000000000",
"X c #FFFFFFFFFFFF",
"o c #999999999999",
" ",
" ",
" ",
" ",
" ",
" ..... ",
" .. .XXX. ",
" ..X..XXXX... ",
" .XXXX.XXXX.X... ",
" ..XXXX.XXX.XXX.. ",
" .XXX.......... ",
" .XXX.XXX.XXX.. ",
" .XX.XXX.XXX. ",
" .XX.XXX.XX.. ",
" ............ ",
" .X.X.X.X.. ",
"ooooooo..........ooooooo",
"ooooooo.X.X.X.X.oooooooo",
"ooooooo.........oooooooo",
"ooooooo..X...X..oooooooo",
"ooooooo...X.X...oooooooo",
"ooooooo........ooooooooo",
"ooooooooo.....oooooooooo",
"oooooooooooooooooooooooo"};

Binary file not shown.

View file

@ -1,32 +0,0 @@
/* XPM */
static char * describe_group_xpm[] = {
"24 24 5 1",
". c None",
" c #000000000000",
"o c #FFFFF5F5ACAC",
"+ c #E1E1E0E0E0E0",
"@ c #C7C7C6C6C6C6",
"........................",
"........................",
".................oooo...",
" .. .. .. .. .. oo oo o.",
"..............oooooooooo",
".............ooooooooooo",
" .. .. .. .. oo oo oo oo",
"............oooooooooooo",
"............oooooooooooo",
" .. .. .. .. oo oo oo oo",
"............oooooooooooo",
"............oooooooooooo",
" .. .. .. .. oo oo oo oo",
"............oooooooooooo",
"..... ...oooooooooooo",
" .. ++ .. .o oo oo oo",
"... @@@+ ....ooooooooo",
"... @ ....oooooooo.",
" . . .. .. .. ..",
". ..............",
" ................",
" .. .. .. .. .. ..",
" ..................",
" ...................."};

Binary file not shown.

View file

@ -1,33 +0,0 @@
/* XPM */
static char * exit_gnus_xpm[] = {
"24 24 6 1",
" c None",
". c #8686ADAD7D7D",
"X c #919187876969",
"o c #C2C2B9B99C9C",
"O c #A8A8F0F0ECEC",
"+ c #EFEFEFEFEFEF",
" ",
" .... . ",
" .. .. . ",
" ............. ",
" . . . .... ",
" ............. ",
" .............. .. ",
" . . .......... . ",
" .XXXX... .. ",
" o.XXX. . .. ",
" oo.X. .. ... ",
" ooX. . ... ",
" oXo. .. ",
" ooX . . ",
" ooX ",
"OOOOoXXOOOOOOOOOOOOOOOOO",
"OOOoXoXOOOOOOOOOOOOOOOOO",
"OOOooXXOOOO+OOOOOOOOOOOO",
"O+OoooXOO+OOO+OO+OOO+OOO",
"OXXoXoXoXOO++O++OO++OO+O",
"XXXXXXXXXXXX+OOOOOOOOOOO",
"XXXXXXXXXXXXXX+O++OO++OO",
"XXXXXXXXXXXXXXXXOOOOOOOO",
"O++O++++O+OO++OOOO++OOO+"};

Binary file not shown.

View file

@ -1,30 +0,0 @@
/* XPM */
static char * exit_summ_xpm[] = {
"24 24 3 1",
". c None",
" c #000000000000",
"X c #E1E1E0E0E0E0",
" .. .. .. .. .. .. .. ..",
"........................",
"........................",
" .. .. .. ..",
"...... XXXX .....",
"...... XXXXXXX .....",
" .. .. XX XX XX .. ..",
"...... XXXXXXXX .....",
"...... XXXXXXX .....",
" .. .. X XX .. ..",
"...... XXXX .....",
"...... XXXX .....",
" .. .. X XXXXX .. ..",
"...... XXXXXXX .....",
"...... XXXXX XX .....",
" .. .. X XXXXX .. ..",
"...... XXXXX .....",
"...... X .....",
" .. . . .. ..",
"........................",
"........................",
" .. .. .. .. .. .. .. ..",
"........................",
"........................"};

Binary file not shown.

View file

@ -1,31 +0,0 @@
/* XPM */
static char * get_news_xpm[] = {
"24 24 4 1",
". c None",
"X c #A5A5A5A59595",
"o c #E1E1E0E0E0E0",
"O c #C7C7C6C6C6C6",
"........................",
"........................",
"........................",
".....XXX................",
"...XXoooXXXXX...........",
"XXXoooooXXoooX.XXX......",
"XoXooXXXooooXXXoooX.....",
"XooXoXoXooXXXoooooX.....",
"XooXXXooXoXoXooooooX....",
"XooXOXooXXXooXooooooX...",
"XoXOOXooXOXooXXooooooX..",
"OXOOOXoXOOXooXoooooooX..",
"OXOooOXOOOXoXOooooooooX.",
".OXooOXOooOXOOooooooooX.",
".OXoooOXooOXOooooooooooX",
"..OXooOXoooOXooooooooooX",
"..OXooOOXooOXooooooooooX",
"...OXooOXoooOXoooooooXXX",
"...OXooXOXooOXooooooXOO.",
"....OXXOOXooXOXoooXXO...",
".....OO..OXXOOXooXOO....",
"..........OO..OXXO......",
"...............OO.......",
"........................"};

Binary file not shown.

View file

@ -1,31 +0,0 @@
/* XPM */
static char * gnntg_xpm[] = {
"24 24 4 1",
" c None",
". c #000000000000",
"X c #FFFFFFFFFFFF",
"o c #C7C7C6C6C6C6",
" ",
" ....... ",
" .XXXXX. ",
" .XXXXX. ... ",
" .XXXXX... .ooo. ",
" .XXXXX.... ..ooo.. ",
" .XXXXX..o.. ..ooo.. ",
" .XXXXX...o.. ..o.. ",
" .XXXXX. ..o........ ",
" .XXXXX. ..oooooooo. ",
" ....... .oooooooo.. ",
" .ooooo..o. ",
" .oooo..o. ",
" .oooo..o. ",
" .oooo..o. ",
" .oooo..o. ",
" ......... ",
" ......oo. ",
" .ooooo... ",
" .oo..o... ",
" .oo..o.. ",
" ........ ",
" .... ... ",
" ... ... "};

Binary file not shown.

View file

@ -1,32 +0,0 @@
/* XPM */
static char *magick[] = {
/* columns rows colors chars-per-pixel */
"24 24 2 1",
"! c red",
"w c Gray75",
/* pixels */
"wwwwwwwwwwwwwwwwwwwwwwww",
"wwwwwwwwwwwwwwwwwwwwwwww",
"wwwwwwwww!!!wwwwwwwwwwww",
"wwwwwwwww!!!wwwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwww!!!!!!!wwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwwww!!!wwwwwwwwwwww",
"wwwwwwwwwwwwwwwwwwwwwwww",
"wwwwwwwww!!!wwwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwww!!!!!wwwwwwwwwww",
"wwwwwwwww!!!wwwwwwwwwwww",
"wwwwwwwwwwwwwwwwwwwwwwww",
"wwwwwwwwwwwwwwwwwwwwwwww"
};

Binary file not shown.

View file

@ -1,35 +0,0 @@
/* XPM */
static char * next_ur_xpm[] = {
"24 24 8 1",
". c None",
" c #000000000000",
"X c #A5A5A5A59595",
"o c #C7C7C6C6C6C6",
"O c #FFFF00000000",
"+ c #9A9A6C6C4E4E",
"@ c #E1E1E0E0E0E0",
"# c #FFFFFFFFFFFF",
" .. .. .. .. .. .. .. ..",
"........................",
"............X...........",
" .. .. .. .XXX. .. .. ..",
".........XXooOX.........",
".......XXooo+O@X........",
" .. XXXoooo++@@@X. .. ..",
"....X@Xoooooo@@@X.......",
"....X@@Xooo@@@@@@X......",
" .. X@@XXoo@@@@@@@X.. ..",
"....X@@Xoo@@@@@@@@@X....",
"....X@Xo@@@XX@@@@@@oX...",
" .. oXoo@XXooO@@@@@@X ..",
"....oXoXXooo+OX@@@@Xo...",
"....XXXoooo++@@X@@Xo....",
" .. X@Xoooooo@@@XX .. ..",
"....X@@Xooo@@@@@@X......",
"....X@@XXoo@@@@@@@X.....",
" .. X@@Xoo@@@@@@@@@X. ..",
"....X@Xo@ @@@@@@@ X...",
"... oXoo ## @@ @@ ## ...",
" .. oXo #### @ #### ..",
".....oX #### @@@ #### ..",
".....oX@ ## @@@@X ## ..."};

Binary file not shown.

View file

@ -1,35 +0,0 @@
/* XPM */
static char * post_xpm[] = {
"24 24 8 1",
". c None",
" c #434343434343",
"X c #A5A5A5A59595",
"O c #000000000000",
"+ c #C7C7C6C6C6C6",
"@ c #FFFF00000000",
"# c #9A9A6C6C4E4E",
"$ c #E1E1E0E0E0E0",
"O..O..O..O..O..O..O..O..",
"........................",
"............X...........",
"O..O..O..O.XXX.O..O..O..",
".........XX++@X.........",
".......XX+++#@$X........",
"O..OXXX++++##$$$X.O..O..",
"....X$X++++++$$$X.......",
"....X$$X+++$$$$$$X......",
"O..OX$$XX++$$$$$$$X..O..",
"....X$$X++$$$$$$$$$X....",
"....X$X+$$$$$$$$$$$+X...",
"O..O+X++$$$$$$$$$$$$XO..",
"....+X+$$$$$$$$$$$$X+...",
".....+X$$$$$$$$$$$X+....",
"O..O.+X$$$$$$$$$XXO..O..",
"......+X$$$$$$$X++......",
"......+X$$$$$XX+........",
"O..O..O+X$$$X++O..O..O..",
".......+X$$X++..........",
"........+XX+............",
"O..O..O..O+.O..O..O..O..",
"........................",
"........................"};

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