mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 12:31:25 +00:00
; Merge from master.
This commit is contained in:
commit
82d5e902af
617 changed files with 39449 additions and 15566 deletions
914
ChangeLog.3
914
ChangeLog.3
|
|
@ -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
11
INSTALL
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 **
|
||||
|
||||
|
|
|
|||
141
admin/admin.el
141
admin/admin.el
|
|
@ -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
|
||||
|
|
|
|||
214
admin/authors.el
214
admin/authors.el
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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'.")
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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/.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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=
|
||||
|
|
|
|||
113
configure.ac
113
configure.ac
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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} doesn’t.
|
||||
|
||||
@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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
system’s 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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
|
|
@ -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}{---}%
|
||||
|
|
|
|||
|
|
@ -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}?
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
27
etc/AUTHORS
27
etc/AUTHORS
|
|
@ -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
|
||||
|
||||
|
|
|
|||
13
etc/DEBUG
13
etc/DEBUG
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
691
etc/NEWS.28
691
etc/NEWS.28
File diff suppressed because it is too large
Load diff
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
82
etc/PROBLEMS
82
etc/PROBLEMS
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
Loading…
Reference in a new issue