Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs into feature/pgtk

This commit is contained in:
Yuuki Harano 2021-11-11 00:39:53 +09:00
commit 4dd1f56f29
1764 changed files with 89018 additions and 41540 deletions

4
.gitignore vendored
View file

@ -65,6 +65,7 @@ lib/ieee754.h
lib/inttypes.h
lib/libgnu.a
lib/limits.h
lib/malloc/*.gl.h
lib/signal.h
lib/std*.h
!lib/std*.in.h
@ -143,6 +144,7 @@ src/gl-stamp
core
core.*[0-9]
gmon.out
native-lisp/
oo/
oo-spd/
src/*.map
@ -212,6 +214,8 @@ etc/charsets/*.map
lisp/international/charprop.el
lisp/international/charscript.el
lisp/international/cp51932.el
lisp/international/emoji-zwj.el
lisp/international/emoji-labels.el
lisp/international/eucjp-ms.el
lisp/international/uni-*.el
lisp/language/pinyin.el

View file

@ -58,7 +58,7 @@ format and whitespace are not munged in transit by the various mail
agents. To send just one such patch without additional remarks, it is
also possible to use a command like
git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch'.
git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch
However, we prefer the 'git format-patch' method with attachment, as
doing so delivers patches in the correct and easily-recognizable format
@ -157,6 +157,14 @@ top-level directory. Most tests are in the directory "test/". From
the "test/" directory, run "make <filename>" to run the tests for
<filename>.el(c). See "test/README" for more information.
If you're making changes that involve the Emacs build system, please
test 'out-of-tree' builds as well, i.e.:
mkdir emacs-build
cd emacs-build
../path-to-emacs-sources/configure
make
** Commit messages
Ordinarily, a change you commit should contain a log entry in its

View file

@ -35670,7 +35670,7 @@
2015-04-08 Artur Malabarba <bruce.connor.am@gmail.com>
* lisp/emacs-lisp/package.el (package-menu-mode): Mode-line notification
while dowloading information.
while downloading information.
* lisp/emacs-lisp/package.el: More conservative `ensure-init-file'
(package--ensure-init-file): Check file contents before visiting.

View file

@ -33355,9 +33355,9 @@
Fix the handling of font backend supersedence on MS-Windows
* src/w32font.c (syms_of_w32font): Don't make the Uniscribe
font backend "superceded" here, ...
font backend "superseded" here, ...
* src/w32uniscribe.c (syms_of_w32uniscribe_for_pdumper):
... make it "superceded" here, only if the HarfBuzz DLL was
... make it "superseded" here, only if the HarfBuzz DLL was
successfully loaded. This is because Emacs compiled with
HarfBuzz support might run on a system without the DLL.
* src/w32fns.c (Fx_create_frame, w32_create_tip_frame):
@ -36933,7 +36933,7 @@
electric--sort-post-self-insertion-hook.
* lisp/emacs-lisp/syntax.el (syntax-propertize, syntax-ppss):
Use new `depth` arg to make sure noone accidentally gets added
Use new `depth` arg to make sure no one accidentally gets added
after syntax-ppss-flush-cache.
* doc/lispref/modes.texi (Setting Hooks): Document new `depth` arg.
@ -58138,7 +58138,7 @@
Use bignums when Emacs converts to and from system types like
off_t for file sizes whose values can exceed fixnum range.
Formerly, Emacs sometimes generted floats and sometimes ad-hoc
Formerly, Emacs sometimes generated floats and sometimes ad-hoc
conses of integers. Emacs still accepts floats and conses for
these system types, in case some stray Lisp code is generating
them, though this usage is obsolescent.
@ -133272,7 +133272,7 @@
(g_b_init_compare_string_w): Move declaration to file scope.
* src/w32heap.c (dumped_data_commit): Now static.
(FREEABLE_P): Avoid warnings about pointer comparison with integer.
(mmap_realloc): Cast to 'char *' for arithmetics on void pointers.
(mmap_realloc): Cast to 'char *' for arithmetic on void pointers.
* src/w32console.c (ctrl_c_handler, sys_tputs, sys_tgetstr)
(evalcost, cmputc, cmcheckmagic, cmcostinit, cmgoto, Wcm_clear):
Provide prototypes.
@ -144146,7 +144146,7 @@
Move package test files to new directory.
* test/lisp/emacs-lisp/package-tests.el: Update resoruce file location.
* test/lisp/emacs-lisp/package-tests.el: Update resource file location.
* test/data/package: Moved to test/lisp/emacs-lisp/package-resources
2015-11-24 Phillip Lord <phillip.lord@russet.org.uk>

11
INSTALL
View file

@ -187,6 +187,7 @@ X11 is being used.
X libtiff for TIFF: http://www.simplesystems.org/libtiff/
X libgif for GIF: http://giflib.sourceforge.net/
librsvg2 for SVG: https://wiki.gnome.org/Projects/LibRsvg
libwebp for WebP: https://developers.google.com/speed/webp/
If you supply the appropriate --without-LIB option, 'configure' will
omit the corresponding library from Emacs, even if that makes for a
@ -220,7 +221,7 @@ GNU/Linux distribution that you use, and the options that you want to
configure Emacs with. On Debian-based systems, you can install all the
packages needed to build the installed version of Emacs with a command
like 'apt-get build-dep emacs' (on older systems, replace 'emacs' with
eg 'emacs25'). On Red Hat-based systems, the corresponding command is
e.g. 'emacs25'). On Red Hat-based systems, the corresponding command is
'dnf builddep emacs' (on older systems, use 'yum-builddep' instead).
On FreeBSD, the command is 'pkg install -y `pkg rquery %dn emacs-devel`'.
@ -313,6 +314,7 @@ or more of these options:
--without-gif for GIF image support
--without-png for PNG image support
--without-rsvg for SVG image support
--without-webp for WebP image support
Although ImageMagick support is disabled by default due to security
and stability concerns, you can enable it with --with-imagemagick.
@ -322,8 +324,11 @@ 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 --disable-largefile to omit support for files larger than 2GB on
systems which support that.
Use --disable-largefile to omit support for files larger than 2GB, and
--disable-year2038 to omit support for timestamps past the year 2038,
on systems which allow omitting such support. This may help when
linking Emacs to a library with an ABI that requires a particular
width for off_t or for time_t.
Use --without-sound to disable sound support.

View file

@ -288,10 +288,16 @@ use_gamedir=$(gameuser)$(gamegroup)
# not use an absolute path. So we must take care to always run
# INSTALL-type commands from the directory containing the Makefile.
# This explains (I think) the cd thisdir seen in several install rules.
SYSTEM_TYPE = @SYSTEM_TYPE@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_INFO = @INSTALL_INFO@
ifeq ($(SYSTEM_TYPE),cygwin)
INSTALL_ELN = $(INSTALL)
else
INSTALL_ELN = $(INSTALL_DATA)
endif
# By default, we uphold the dignity of our programs.
INSTALL_STRIP =
MKDIR_P = @MKDIR_P@
@ -312,6 +318,7 @@ TRANSFORM = @program_transform_name@
EMACS_NAME = `echo emacs | sed '$(TRANSFORM)'`
EMACS = ${EMACS_NAME}${EXEEXT}
EMACSFULL = `echo emacs-${version} | sed '$(TRANSFORM)'`${EXEEXT}
EMACS_PDMP = `./src/emacs${EXEEXT} --fingerprint`.pdmp
# Subdirectories to make recursively.
SUBDIR = $(NTDIR) lib lib-src src lisp
@ -522,7 +529,7 @@ install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
ifeq (${ns_self_contained},no)
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifeq (${DUMPING},pdumper)
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs.pdmp
${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}"/emacs-${EMACS_PDMP}
endif
-chmod 755 "$(DESTDIR)${bindir}/$(EMACSFULL)"
ifndef NO_BIN_LINK
@ -796,8 +803,9 @@ install-etc:
### Install native compiled Lisp files.
install-eln: lisp
ifeq ($(HAVE_NATIVE_COMP),yes)
umask 022 ; \
find native-lisp -type d -exec $(MKDIR_P) "$(ELN_DESTDIR){}" \; ; \
find native-lisp -type f -exec ${INSTALL_DATA} "{}" "$(ELN_DESTDIR){}" \;
find native-lisp -type f -exec ${INSTALL_ELN} "{}" "$(ELN_DESTDIR){}" \;
endif
### Build Emacs and install it, stripping binaries while installing them.
@ -1164,7 +1172,7 @@ ChangeLog:
./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
# Check that we are in a good state for changing history.
PREFERRED_BRANCH = emacs-27
PREFERRED_BRANCH = emacs-28
preferred-branch-is-current:
git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
unchanged-history-files:

2
README
View file

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

View file

@ -287,6 +287,7 @@ HAVE_UTIMENSAT
HAVE_UTMP_H
HAVE_VFORK
HAVE_VFORK_H
HAVE_WEBP
HAVE_WCHAR_H
HAVE_WCHAR_T
HAVE_WINDOW_SYSTEM

View file

@ -61,8 +61,19 @@ Brief description of sub-directories:
charsets scripts for generating charset map files
in ../etc/charsets
coccinelle patches to make coccinelle work with
the latest Emacs version. Since they
apply a few minor changes in Emacs internals
in multiple places, they are trivial for
copyright purposes.
grammars wisent and bovine grammars, used to produce
files in lisp/cedet/.
notes miscellaneous notes related to administrative
tasks.
nt support files for administrative tasks related
to building MS-Windows distributions.
unidata scripts for generating character property files
in ../lisp/international
in ../lisp/international/.
This file is part of GNU Emacs.

View file

@ -1330,7 +1330,7 @@ to print a message if FILE is not found."
(unless (or valid
(member file authors-ignored-files)
(authors-obsolete-file-p file)
(string-match "[*]" file)
(string-search "*" file)
(string-match "^[0-9.]+$" file)
laxlog)
(setq authors-invalid-file-names
@ -1465,7 +1465,7 @@ Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
((looking-at "^[ \t]+\\*")
(let ((line (buffer-substring-no-properties
(match-end 0) (line-end-position))))
(while (and (not (string-match ":" line))
(while (and (not (string-search ":" line))
(forward-line 1)
(not (looking-at ":\\|^[ \t]*$")))
(setq line (concat line
@ -1475,7 +1475,7 @@ Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
(when (string-match ":" line)
(setq line (substring line 0 (match-beginning 0)))
(setq line (replace-regexp-in-string "[[(<{].*$" "" line))
(setq line (replace-regexp-in-string "," "" line))
(setq line (string-replace "," "" line))
(dolist (file (split-string line))
(when (setq file (authors-canonical-file-name file log-file pos (car authors)))
(dolist (author authors)
@ -1610,7 +1610,8 @@ and a buffer *Authors Errors* containing references to unknown files."
;; the versioned ChangeLog.N rather than the unversioned ChangeLog.
(zerop (call-process "make" nil nil nil
"-C" root "change-history-nocommit"))
(error "Problem updating ChangeLog, try \"C-u M-x authors RET\""))
(error (substitute-command-keys
"Problem updating ChangeLog, try \"\\[universal-argument] \\[authors]\"")))
(let ((logs (process-lines find-program root "-name" "ChangeLog*"))
(table (make-hash-table :test 'equal))
(buffer-name "*Authors*")
@ -1676,7 +1677,7 @@ list of their contributions.\n")
(insert "\n "))
(insert " " file))
(insert "\n")))))
(insert "\nLocal" " Variables:\ncoding: "
(insert "\nLocal" " Variables:\nmode: etc-authors\ncoding: "
(symbol-name authors-coding-system) "\nEnd:\n")
(message "Generating buffer %s... done" buffer-name)
(unless noninteractive

View file

@ -37,7 +37,7 @@
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
[ $# -gt 0 ] && echo "$PN: $*" >&2
exit 1
}
@ -108,7 +108,8 @@ OPTIND=1
[ "$nocd" ] || {
cd $PD # this should be the admin directory
# $PD should be the admin directory
cd $PD || die "Could not change directory to $PD"
cd ../
}
@ -126,9 +127,13 @@ OPTIND=1
[ "$test" ] && build=1
tempfile=/tmp/$PN.$$
if [ -x "$(command -v mktemp)" ]; then
tempfile=$(mktemp "/tmp/$PN.XXXXXXXXXX")
else
tempfile=/tmp/$PN.$$
fi
trap "rm -f $tempfile 2> /dev/null" EXIT
trap 'rm -f $tempfile 2> /dev/null' EXIT
[ -e Makefile ] && [ "$build" ] && {
@ -148,7 +153,7 @@ trap "rm -f $tempfile 2> /dev/null" EXIT
rev=$(git rev-parse HEAD)
[ $(git rev-parse @{u}) = $rev ] || die "Local state does not match origin"
[ "$(git rev-parse @{u})" = "$rev" ] || die "Local state does not match origin"
merge ()
@ -157,12 +162,12 @@ merge ()
if $emacs --batch -Q -l ./admin/gitmerge.el \
--eval "(setq gitmerge-minimum-missing $nmin)" -f gitmerge \
>| $tempfile 2>&1; then
>| "$tempfile" 2>&1; then
echo "merged ok"
return 0
else
grep -E "Nothing to merge|Number of missing commits" $tempfile && \
grep -E "Nothing to merge|Number of missing commits" "$tempfile" && \
exit 0
cat "$tempfile" 1>&2
@ -186,13 +191,13 @@ git diff --stat --cached origin/master | grep -q "etc/NEWS " && \
echo "Running autoreconf..."
autoreconf -i -I m4 2>| $tempfile
autoreconf -i -I m4 2>| "$tempfile"
retval=$?
## Annoyingly, autoreconf puts the "installing `./foo' messages on stderr.
if [ "$quiet" ]; then
grep -v 'installing `\.' $tempfile 1>&2
grep -v 'installing `\.' "$tempfile" 1>&2
else
cat "$tempfile" 1>&2
fi
@ -231,7 +236,7 @@ echo "Tests finished ok"
echo "Checking for remote changes..."
git fetch || die "fetch error"
[ $(git rev-parse @{u}) = $rev ] || {
[ "$(git rev-parse @{u})" = "$rev" ] || {
echo "Upstream has changed"
@ -240,7 +245,7 @@ git fetch || die "fetch error"
## Ref eg https://lists.gnu.org/r/emacs-devel/2014-12/msg01435.html
## Instead, we throw away what we just did, and do the merge again.
echo "Resetting..."
git reset --hard $rev
git reset --hard "$rev"
echo "Pulling..."
git pull --ff-only || die "pull error"

View file

@ -1,4 +1,4 @@
# Created manually from <http://en.wikipedia.org/wiki/Code_page_720>.
# Created manually from <https://en.wikipedia.org/wiki/Code_page_720>.
# The text in that page is available under the terms of the GNU Free
# Documentation License.
0x00-0x7F 0x0000

View file

@ -1,4 +1,4 @@
# Created manually from <http://en.wikipedia.org/wiki/Code_page_858>.
# Created manually from <https://en.wikipedia.org/wiki/Code_page_858>.
# The text in that page is available under the terms of the GNU Free
# Documentation License.
0x00-0x7F 0x0000

View file

@ -28,6 +28,7 @@ s#^Installing git hooks...# Installing git hooks...#
s#^Running # Running #
s#^Configured for # Configured for #
s#^./temacs.*# \\& #
s#^make.*Error# \\& #
' | \
egrep --line-buffered -v "^make|\
^Loading|\

View file

@ -122,7 +122,8 @@ If nil, the function `gitmerge-default-branch' guesses.")
(with-temp-buffer
(if (not branch)
(insert-file-contents "configure.ac")
(call-process "git" nil t nil "show" (format "%s:configure.ac" branch))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "show" (format "%s:configure.ac" branch)))
(goto-char (point-min)))
(re-search-forward "^AC_INIT([^,]+, \\([0-9]+\\)\\.")
(string-to-number (match-string 1))))
@ -148,7 +149,8 @@ If nil, the function `gitmerge-default-branch' guesses.")
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(fundamental-mode)
(erase-buffer)
(call-process "git" nil t nil "log" "-1" commit)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "-1" commit))
(goto-char (point-min))
(gitmerge-highlight-skip-regexp)))))
@ -160,7 +162,8 @@ If nil, the function `gitmerge-default-branch' guesses.")
(when commit
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer)
(call-process "git" nil t nil "diff-tree" "-p" commit)
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff-tree" "-p" commit))
(goto-char (point-min))
(diff-mode)))))
@ -173,7 +176,9 @@ If nil, the function `gitmerge-default-branch' guesses.")
(pop-to-buffer (get-buffer-create gitmerge-output-buffer))
(erase-buffer)
(fundamental-mode)
(call-process "git" nil t nil "diff" "--name-only" (concat commit "^!"))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "diff" "--name-only"
(concat commit "^!")))
(goto-char (point-min))))))
(defun gitmerge-toggle-skip ()
@ -216,9 +221,10 @@ if and why this commit should be skipped."
;; Go through the log and remember all commits that match
;; `gitmerge-skip-regexp' or are marked by --cherry-mark.
(with-temp-buffer
(call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
"--no-decorate"
(concat from "..." (car (vc-git-branches))))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "--cherry-mark" "--left-only"
"--no-decorate"
(concat from "..." (car (vc-git-branches)))))
(goto-char (point-max))
(while (re-search-backward "^commit \\(.+\\) \\([0-9a-f]+\\).*" nil t)
(let ((cherrymark (match-string 1))
@ -241,9 +247,10 @@ if and why this commit should be skipped."
"Create the buffer for choosing commits."
(with-current-buffer (get-buffer-create gitmerge-buffer)
(erase-buffer)
(call-process "git" nil t nil "log" "--left-only"
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
(concat from "..." (car (vc-git-branches))))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil "log" "--left-only"
"--pretty=format:%h %<(20,trunc) %an: %<(100,trunc) %s"
(concat from "..." (car (vc-git-branches)))))
(goto-char (point-min))
(while (looking-at "^\\([a-f0-9]+\\)")
(let ((skipreason (gitmerge-skip-commit-p (match-string 1) commits)))
@ -326,7 +333,8 @@ Returns non-nil if conflicts remain."
;; (pop-to-buffer (current-buffer)) (debug 'before-resolve)
))
;; Try to resolve the conflicts.
(let (temp)
(let ((coding-system-for-read vc-git-log-output-coding-system)
temp)
(cond
;; FIXME when merging release branch to master, we still
;; need to detect and handle the case where NEWS was modified
@ -392,9 +400,10 @@ is nil, only the single commit BEG is merged."
(if end "s were " " was ")
"skipped:\n\n")
""))
(apply #'call-process "git" nil t nil "log" "--oneline"
(if end (list (concat beg "~.." end))
`("-1" ,beg)))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(apply #'call-process "git" nil t nil "log" "--oneline"
(if end (list (concat beg "~.." end))
`("-1" ,beg))))
(insert "\n")
;; Truncate to 72 chars so that the resulting ChangeLog line fits in 80.
(goto-char (point-min))
@ -408,8 +417,9 @@ MISSING must be a list of SHA1 strings."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer)
(let* ((skip (cdar missing))
(coding-system-for-read vc-git-log-output-coding-system)
(beg (car (pop missing)))
end commitmessage)
end commitmessage commitmessage1 commitmessage-file status)
;; Determine last revision with same boolean skip status.
(while (and missing
(eq (null (cdar missing))
@ -423,12 +433,32 @@ MISSING must be a list of SHA1 strings."
(if end (concat ".." (substring end 0 6)) ""))
(unless end
(setq end beg))
(unless (zerop
(apply #'call-process "git" nil t nil "merge" "--no-ff"
(append (when skip '("-s" "ours"))
`("-m" ,commitmessage ,end))))
(when (eq system-type 'windows-nt)
;; Command lines on MS-Windows cannot include newlines.
;; Since "git merge" doesn't accept a -F FILE option, we
;; commit the merge with a shortened single-line log message,
;; and then invoke "git commit --amend" with the full log
;; message from a temporary file.
(setq commitmessage1
;; Make sure the commit message is at most a single line.
(car (split-string commitmessage "[\f\n\r\v]+")))
(setq commitmessage-file (make-nearby-temp-file "gitmerge-msg"))
(let ((coding-system-for-write vc-git-commits-coding-system))
(write-region commitmessage nil commitmessage-file nil 'silent)))
(unless (setq status
(zerop
(apply #'call-process "git" nil t nil "merge" "--no-ff"
(append (when skip '("-s" "ours"))
(if commitmessage-file
`("-m" ,commitmessage1 ,end)
`("-m" ,commitmessage ,end))))))
(gitmerge-write-missing missing from)
(gitmerge-resolve-unmerged)))
(gitmerge-resolve-unmerged))
(when (and commitmessage-file (file-exists-p commitmessage-file))
(if status
(call-process "git" nil t nil
"commit" "--amend" "-F" commitmessage-file))
(delete-file commitmessage-file)))
missing))
(defun gitmerge-resolve-unmerged ()
@ -436,7 +466,8 @@ MISSING must be a list of SHA1 strings."
Throw an user-error if we cannot resolve automatically."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer)
(let (files conflicted)
(let ((coding-system-for-read vc-git-log-output-coding-system)
files conflicted)
;; List unmerged files
(if (not (zerop
(call-process "git" nil t nil
@ -479,17 +510,19 @@ Throw an user-error if we cannot resolve automatically."
(defun gitmerge-repo-clean ()
"Return non-nil if repository is clean."
(with-temp-buffer
(let ((coding-system-for-read vc-git-log-output-coding-system))
(call-process "git" nil t nil
"diff" "--staged" "--name-only")
(call-process "git" nil t nil
"diff" "--name-only")
(zerop (buffer-size))))
(zerop (buffer-size)))))
(defun gitmerge-commit ()
"Commit, and return non-nil if it succeeds."
(with-current-buffer (get-buffer-create gitmerge-output-buffer)
(erase-buffer)
(eq 0 (call-process "git" nil t nil "commit" "--no-edit"))))
(let ((coding-system-for-read vc-git-log-output-coding-system))
(erase-buffer)
(eq 0 (call-process "git" nil t nil "commit" "--no-edit")))))
(defun gitmerge-maybe-resume ()
"Check if we have to resume a merge.
@ -603,7 +636,7 @@ Branch FROM will be prepended to the list."
"(s) Toggle skip, (l) Show log, (d) Show diff, "
"(f) Show files, (m) Start merge\n"
(propertize "Flags: " 'font-lock-face 'bold)
"(C) Detected backport (cherry-mark), (R) Log matches "
"(C) Detected backport (cherry-mark), (R) Matches skip "
"regexp, (M) Manually picked\n\n")
(gitmerge-mode)
(pop-to-buffer (current-buffer))

View file

@ -42,6 +42,12 @@ 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.
2. Regenerate the etc/AUTHORS file:
M-: (require 'authors) RET
M-x authors RET

View file

@ -30,7 +30,8 @@ GNULIB_MODULES='
canonicalize-lgpl
careadlinkat close-stream copy-file-range
count-leading-zeros count-one-bits count-trailing-zeros
crypto/md5-buffer crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
crypto/md5 crypto/md5-buffer
crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
d-type diffseq double-slash-root dtoastr dtotimespec dup2
environ execinfo explicit_bzero faccessat
fchmodat fcntl fcntl-h fdopendir file-has-acl
@ -38,7 +39,8 @@ GNULIB_MODULES='
free-posix fstatat fsusage fsync futimens
getloadavg getopt-gnu getrandom gettime gettimeofday gitlog-to-changelog
ieee754-h ignore-value intprops largefile libgmp lstat
manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime nstrftime
manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime
nproc nstrftime
pathmax pipe2 pselect pthread_sigmask
qcopy-acl readlink readlinkat regex
sig2str sigdescr_np socklen stat-time std-gnu11 stdalign stddef stdio
@ -49,8 +51,8 @@ GNULIB_MODULES='
'
AVOIDED_MODULES='
btowc close dup fchdir fstat langinfo lock
malloc-posix mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
btowc close crypto/af_alg dup fchdir fstat langinfo lock
mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h raise
save-cwd select setenv sigprocmask stat stdarg stdbool
threadlib tzset unsetenv utime utime-h
@ -118,5 +120,8 @@ cp -- "$gnulib_srcdir"/build-aux/config.guess \
"$gnulib_srcdir"/build-aux/install-sh \
"$gnulib_srcdir"/build-aux/move-if-change \
"$src"build-aux &&
cp -- "$gnulib_srcdir"/lib/af_alg.h \
"$gnulib_srcdir"/lib/save-cwd.h \
"$src"lib &&
{ test -z "$src" || cd "$src"; } &&
./autogen.sh

View file

@ -84,7 +84,7 @@ generate a new report. The only time to send mail to the bug list
address is to create a new report.
Gnus users can add the following to message-dont-reply-to-names;
similarly with Rmail and rmail-dont-reply-to-names:
similarly with Rmail and mail-dont-reply-to-names:
"\\(emacs-pretest-bug\\|bug-gnu-emacs\\|bug-\\(e\\|gnu\\)macs\\)@gnu\\.org\\|\
\\(submit\\|control\\|owner\\)@debbugs\\.gnu\\.org"

View file

@ -31,20 +31,26 @@ The Emacs jobset is defined in the Emacs source tree, file
'.gitlab-ci.yml'. It 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
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', 'slow', 'platforms' and
'native-comp' (run respective test jobs based on the produced images).
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
and test parameters.
There are different types of jobs: 'prep-image-base' is responsible to
prepare the environment for the following jobs. 'build-image-*' jobs
are responsible to compile Emacs in different configuration. The
corresponding 'test-*' jobs run the ert tests.
The 'build-image-*' jobs of the different '*-images' stages run only
if there are severe changes in the Emacs sources, like in Makefiles
etc. Otherwise they are skipped, and the corresponding 'test-*' jobs
run just 'make -C test ...' in the respective Docker image from a
previous build run.
A special job is 'test-all-inotify', which runs 'make check-expensive'.
While most of the jobs run as soon as a respective file has been
committed into the Emacs git repository, this test job runs scheduled,
every 8 hours.
Jobs in the 'build-images' and 'normal' stages are triggered by
changes of respective files in the Emacs git repository. All other
jobs run scheduled in a pipeline every 8 hours.
The log files for every test job are kept on the server for a week.
They can be downloaded from the server, visiting the URL

View file

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

View file

@ -474,7 +474,7 @@ THINGS TO DO
definition.
Exceptions found so far: x-select-text and
x-cut-buffer-or-selection-value.
x-selection-value (old name: x-cut-buffer-or-selection-value).
** Have a look at fatal_error_hook.

View file

@ -12,17 +12,23 @@ Emacs uses the following files from the Unicode Character Database
. UnicodeData.txt
. Blocks.txt
. BidiBrackets.txt
. BidiCharacterTest.txt
. BidiMirroring.txt
. IVD_Sequences.txt
. NormalizationTest.txt
. SpecialCasing.txt
. emoji-data.txt
. emoji-zwj-sequences.txt
. emoji-sequences.txt
. BidiCharacterTest.txt
First, the first 7 files need to be copied into admin/unidata/, and
the file https://www.unicode.org/copyright.html should be copied over
copyright.html in admin/unidata (that file might need trailing
whitespace removed before it can be committed to the Emacs
repository).
Emacs also uses the file emoji-test.txt which should be imported from
the Unicode's Public/emoji/ directory.
First, the first 10 files and emoji-test.txt need to be copied into
admin/unidata/, and the file https://www.unicode.org/copyright.html
should be copied over copyright.html in admin/unidata (some of them
might need trailing whitespace removed before they can be committed to
the Emacs repository).
Then Emacs should be rebuilt for them to take effect. Rebuilding
Emacs updates several derived files elsewhere in the Emacs source
@ -81,7 +87,47 @@ regarding failing lines.
The file BidiCharacterTest.txt should be copied to the test suite, and
if its format has changed, the file biditest.el there should be
modified to follow suit.
modified to follow suit. If there's trailing whitespace in
BidiCharacterTest.txt, it should be removed before committing the new
version.
Visit "emoji-data.txt" with the rebuilt Emacs, and check that an
appropriate font is being used for the emoji (by default Emacs uses
"Noto Color Emoji"). Running the following command in that buffer
will give you an idea of which codepoints are not supported by
whichever font Emacs is using.
(defun check-emoji-coverage (font-name-regexp)
"Display a buffer containing emoji codepoints for which FONT-NAME is not used.
This must be run from a buffer in the format of emoji-data.txt.
FONT-NAME-REGEXP is checked using `string-match'."
(interactive "MFont Name: ")
(save-excursion
(goto-char (point-min))
(let (res char name ifont)
(while (re-search-forward "; Emoji_Presentation [^(]+(\\(.\\)[).]" nil t)
(setq char (aref (match-string 1) 0))
(setq ifont (car (internal-char-font nil char)))
(when ifont
(setq name (font-xlfd-name ifont)))
(if (or (not ifont) (not (string-match font-name-regexp name)))
(setq res (concat (string char) res))))
(when res
(with-output-to-temp-buffer "*Check-Emoji-Coverage*"
(princ (format "Font not matching '%s' was used for the following characters:\n%s"
font-name-regexp (reverse res))))))))
Visit "emoji-zwj-sequences.txt" and "emoji-sequences.txt" with the
rebuilt Emacs, and check that the sample sequences are composed
properly. Also check the Unicode style chart file available at
https://unicode.org/emoji/charts/emoji-style.txt for any issues
involving VS-15 and VS-16, if so you may need to update the value
generated for auto-composition-emoji-eligible-codepoints by
admin/unidata/emoji-zwj.awk. Note that your emoji font might not have
glyphs for the newest codepoints yet.
Finally, etc/NEWS should be updated to announce the support for the
new Unicode version.
Problems, fixmes and other unicode-related issues
-------------------------------------------------------------

View file

@ -3,6 +3,15 @@ Distribution Build Scripts for Windows
The scripts are used to build the binary distribution zip files for windows.
Environment
-----------
A full installation of msys2 is required along for the build. The
various dependencies of Emacs need to be installed also. These change
over time, but are listed in build-deps-zips.py.
File System Organization
------------------------
@ -15,15 +24,19 @@ The file system needs to be organized like so:
~/emacs-build/git
Contains a checkout of the Emacs git repository, organized according
to branches, with git worktree
Contains checkouts and worktrees of the Emacs git repository,
organized according to branches.
~/emacs-build/git/emacs-$branch
~/emacs-build/git/master
A branch of the git repository containing the current release
A checkout out of the master branch of the Emacs git repository.
~/emacs-build/git/emacs-$major-version
A worktree of the git repository containing the current release
branch. This has to be created by hand.
~/emacs-build/git/emacs-$version
~/emacs-build/git/emacs-$release-version
A branch of the git repository containing the last release. The
build-zips.sh file will create this for you.
@ -63,8 +76,8 @@ uploaded.
Build Process
-------------
For each major version
----------------------
### For each major version
The dependencies files need to be created. This can be around the time
of the pre-tests, then used for all releases of that version, to
@ -88,8 +101,7 @@ files will be created in ~/emacs-upload from where they can be signed
and uploaded with `gnupload`.
For snapshots from Master
-------------------------
### For snapshots from Master
Snapshots are generally created from master when there is a release
branch on which a release has already been created. At this point,
@ -110,8 +122,7 @@ used.
Now, run `build-zips.sh -s` to build a snapshot release.
For snapshots from a Release Branch
-----------------------------------
### For snapshots from a Release Branch
Snapshots can be built from a release branch; this is really only
useful before a pre-test has happened.
@ -123,8 +134,8 @@ version number must be added to the command line with `build-zips.sh
the version (e.g emacs-27-2019-12-26.zip) rather than than the Emacs
version (e.g emacs-27.0.50.zip).
For snapshots from another branch
---------------------------------
### For snapshots from another branch
Snapshots can be build from any other branch. There is rarely a need
to do this, except where some significant, wide-ranging feature is

View file

@ -134,7 +134,7 @@ while getopts "gb:hnsiV:" opt; do
echo " -g git update and worktree only"
echo " -i build installer only"
echo " -n do not configure"
echo " -s snaphot build"
echo " -s snapshot build"
exit 0
;;
\?)

76
admin/release-branch.txt Normal file
View file

@ -0,0 +1,76 @@
Instructions for cutting the Emacs release branch
1. In the clone of the Emacs Git repository, switch to the 'master'
branch, "git pull", and build it (using 'make bootstrap') to make
sure it's not broken. Run 'make check-expensive' and ensure all
tests pass. (Alternatively, verify that the automated build
servers are showing success for the latest revision.)
2. Create the release branch and switch to it. Assuming that it is
for releasing Emacs versions XY.1, XY.2, etc., the command is:
git checkout -b emacs-XY
3. Switch the release branch to the suitable version. The convention
is that release branches start with version XY.0.60, whereas the
master branch from which the release branch was cut was at the
version XY.0.50. To change the version, do the following inside
Emacs:
M-x load-file RET admin/admin.el RET
M-x set-version RET XY.0.60 RET
Change the value of 'customize-changed-options-previous-release'
in cus-edit.el to reference the last release from the emacs-XY-1
branch (last release for the previous major version).
The above modifies several files in the tree; commit the changes
with the appropriate log message, something like "Bump Emacs
version to XY.0.60", and with header saying "Cut the emacs-XY
release branch". Then push the changes:
git push --set-upstream origin emacs-XY
The "push" command should show the new branch just created.
4. Switch back to the master branch.
git checkout master
git pull
Set the version on the master branch to the next major release:
M-x set-version RET XY+1.0.50 RET
This creates a new file etc/NEWS.XY. "git add" it.
Change the value of 'customize-changed-options-previous-release'
in cus-edit.el to reference emacs-XY.1, the next version to be
released from the newly-committed release branch.
Update the emacs-module sources for the new version XY+1. This
entails:
. adding a new file src/module-env-XY+1.h, with contents just the
comment taken from the beginning of src/module-env-XY.h
. removing the comment from the beginning of src/module-env-XY.h
. adding two lines to configure.ac:
AC_SUBST_FILE([module_env_snippet_XY+1])
module_env_snippet_XY+1="$srcdir/src/module-env-XY+1.h"
. adding a new 'struct emacs_env_XY+1' to src/emacs-module.h.in,
with the contents identical to'struct emacs_env_XY', with one
line added:
@module_env_snippet_XY+1@
(FIXME: "M-x set-version" should do this emacs-module stuff
automatically when the version is NN.0.60, or when there's no
src/module-env-NN.h file.)
"git add" the new src/module-env-XY+1.h file.
Then rebuild Emacs. Then commit the new/changed files and push.
5. Announce the new release branch on emacs-devel.

View file

@ -1,11 +1,11 @@
# BidiBrackets-13.0.0.txt
# Date: 2019-09-09, 19:31:00 GMT [AG, LI, KW]
# © 2019 Unicode®, Inc.
# BidiBrackets-14.0.0.txt
# Date: 2021-06-30, 23:59:00 GMT [AG, LI, KW]
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/
# For documentation, see https://www.unicode.org/reports/tr44/
#
# Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties
#
@ -56,7 +56,7 @@
# of each line.
#
# For information on bidirectional paired brackets, see UAX #9: Unicode
# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/
# Bidirectional Algorithm, at https://www.unicode.org/reports/tr9/
#
# This file was originally created by Andrew Glass and Laurentiu Iancu
# for Unicode 6.3.
@ -147,6 +147,14 @@
2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET
2E28; 2E29; o # LEFT DOUBLE PARENTHESIS
2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS
2E55; 2E56; o # LEFT SQUARE BRACKET WITH STROKE
2E56; 2E55; c # RIGHT SQUARE BRACKET WITH STROKE
2E57; 2E58; o # LEFT SQUARE BRACKET WITH DOUBLE STROKE
2E58; 2E57; c # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
2E59; 2E5A; o # TOP HALF LEFT PARENTHESIS
2E5A; 2E59; c # TOP HALF RIGHT PARENTHESIS
2E5B; 2E5C; o # BOTTOM HALF LEFT PARENTHESIS
2E5C; 2E5B; c # BOTTOM HALF RIGHT PARENTHESIS
3008; 3009; o # LEFT ANGLE BRACKET
3009; 3008; c # RIGHT ANGLE BRACKET
300A; 300B; o # LEFT DOUBLE ANGLE BRACKET

View file

@ -1,10 +1,10 @@
# BidiMirroring-13.0.0.txt
# Date: 2019-09-09, 19:34:00 GMT [KW, LI, RP]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# BidiMirroring-14.0.0.txt
# Date: 2021-08-08, 22:55:00 GMT [KW, RP]
# © 2021 Unicode®, Inc.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see http://www.unicode.org/reports/tr44/
# For documentation, see https://www.unicode.org/reports/tr44/
#
# Bidi_Mirroring_Glyph Property
#
@ -15,7 +15,7 @@
# value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph.
#
# The repertoire covered by the file is Unicode 13.0.0.
# The repertoire covered by the file is Unicode 14.0.0.
#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.
@ -40,7 +40,7 @@
# for character-based mirroring.
#
# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm,
# at http://www.unicode.org/unicode/reports/tr9/
# at https://www.unicode.org/reports/tr9/
#
# This file was originally created by Markus Scherer.
# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,
@ -96,10 +96,10 @@
208D; 208E # SUBSCRIPT LEFT PARENTHESIS
208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
2208; 220B # ELEMENT OF
2209; 220C # NOT AN ELEMENT OF
2209; 220C # [BEST FIT] NOT AN ELEMENT OF
220A; 220D # SMALL ELEMENT OF
220B; 2208 # CONTAINS AS MEMBER
220C; 2209 # DOES NOT CONTAIN AS MEMBER
220C; 2209 # [BEST FIT] DOES NOT CONTAIN AS MEMBER
220D; 220A # SMALL CONTAINS AS MEMBER
2215; 29F5 # DIVISION SLASH
221F; 2BFE # RIGHT ANGLE
@ -453,6 +453,14 @@
2E27; 2E26 # RIGHT SIDEWAYS U BRACKET
2E28; 2E29 # LEFT DOUBLE PARENTHESIS
2E29; 2E28 # RIGHT DOUBLE PARENTHESIS
2E55; 2E56 # LEFT SQUARE BRACKET WITH STROKE
2E56; 2E55 # RIGHT SQUARE BRACKET WITH STROKE
2E57; 2E58 # LEFT SQUARE BRACKET WITH DOUBLE STROKE
2E58; 2E57 # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
2E59; 2E5A # TOP HALF LEFT PARENTHESIS
2E5A; 2E59 # TOP HALF RIGHT PARENTHESIS
2E5B; 2E5C # BOTTOM HALF LEFT PARENTHESIS
2E5C; 2E5B # BOTTOM HALF RIGHT PARENTHESIS
3008; 3009 # LEFT ANGLE BRACKET
3009; 3008 # RIGHT ANGLE BRACKET
300A; 300B # LEFT DOUBLE ANGLE BRACKET

View file

@ -1,6 +1,6 @@
# Blocks-13.0.0.txt
# Date: 2019-07-10, 19:06:00 GMT [KW]
# © 2019 Unicode®, Inc.
# Blocks-14.0.0.txt
# Date: 2021-01-22, 23:29:00 GMT [KW]
# © 2021 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
@ -52,6 +52,7 @@
0800..083F; Samaritan
0840..085F; Mandaic
0860..086F; Syriac Supplement
0870..089F; Arabic Extended-B
08A0..08FF; Arabic Extended-A
0900..097F; Devanagari
0980..09FF; Bengali
@ -215,7 +216,9 @@ FFF0..FFFF; Specials
104B0..104FF; Osage
10500..1052F; Elbasan
10530..1056F; Caucasian Albanian
10570..105BF; Vithkuqi
10600..1077F; Linear A
10780..107BF; Latin Extended-F
10800..1083F; Cypriot Syllabary
10840..1085F; Imperial Aramaic
10860..1087F; Palmyrene
@ -240,6 +243,7 @@ FFF0..FFFF; Specials
10E80..10EBF; Yezidi
10F00..10F2F; Old Sogdian
10F30..10F6F; Sogdian
10F70..10FAF; Old Uyghur
10FB0..10FDF; Chorasmian
10FE0..10FFF; Elymaic
11000..1107F; Brahmi
@ -259,13 +263,14 @@ FFF0..FFFF; Specials
11600..1165F; Modi
11660..1167F; Mongolian Supplement
11680..116CF; Takri
11700..1173F; Ahom
11700..1174F; Ahom
11800..1184F; Dogra
118A0..118FF; Warang Citi
11900..1195F; Dives Akuru
119A0..119FF; Nandinagari
11A00..11A4F; Zanabazar Square
11A50..11AAF; Soyombo
11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
11AC0..11AFF; Pau Cin Hau
11C00..11C6F; Bhaiksuki
11C70..11CBF; Marchen
@ -277,11 +282,13 @@ FFF0..FFFF; Specials
12000..123FF; Cuneiform
12400..1247F; Cuneiform Numbers and Punctuation
12480..1254F; Early Dynastic Cuneiform
12F90..12FFF; Cypro-Minoan
13000..1342F; Egyptian Hieroglyphs
13430..1343F; Egyptian Hieroglyph Format Controls
14400..1467F; Anatolian Hieroglyphs
16800..16A3F; Bamum Supplement
16A40..16A6F; Mro
16A70..16ACF; Tangsa
16AD0..16AFF; Bassa Vah
16B00..16B8F; Pahawh Hmong
16E40..16E9F; Medefaidrin
@ -290,13 +297,15 @@ FFF0..FFFF; Specials
17000..187FF; Tangut
18800..18AFF; Tangut Components
18B00..18CFF; Khitan Small Script
18D00..18D8F; Tangut Supplement
18D00..18D7F; Tangut Supplement
1AFF0..1AFFF; Kana Extended-B
1B000..1B0FF; Kana Supplement
1B100..1B12F; Kana Extended-A
1B130..1B16F; Small Kana Extension
1B170..1B2FF; Nushu
1BC00..1BC9F; Duployan
1BCA0..1BCAF; Shorthand Format Controls
1CF00..1CFCF; Znamenny Musical Notation
1D000..1D0FF; Byzantine Musical Symbols
1D100..1D1FF; Musical Symbols
1D200..1D24F; Ancient Greek Musical Notation
@ -305,9 +314,12 @@ FFF0..FFFF; Specials
1D360..1D37F; Counting Rod Numerals
1D400..1D7FF; Mathematical Alphanumeric Symbols
1D800..1DAAF; Sutton SignWriting
1DF00..1DFFF; Latin Extended-G
1E000..1E02F; Glagolitic Supplement
1E100..1E14F; Nyiakeng Puachue Hmong
1E290..1E2BF; Toto
1E2C0..1E2FF; Wancho
1E7E0..1E7FF; Ethiopic Extended-B
1E800..1E8DF; Mende Kikakui
1E900..1E95F; Adlam
1EC70..1ECBF; Indic Siyaq Numbers

View file

@ -2,6 +2,9 @@
#
# History:
#
# 2020-11-06 Registration of additional sequences in the MSARG
# collection.
#
# 2017-12-12 Registration of additional sequences in the Adobe-Japan1
# collection. Combined registration of the KRName collection
# and of sequences in that collection. Registration of
@ -27,10 +30,10 @@
#
# This file is part of the Unicode Ideographic Variation Database (IVD).
# For more details on the IVD, see UTS #37:
# http://www.unicode.org/reports/tr37/
# https://www.unicode.org/reports/tr37/
#
# Copyright 2006-2017 Unicode, Inc.
# For terms of use, see: http://www.unicode.org/terms_of_use.html
# Copyright 2006-2020 Unicode, Inc.
# For terms of use, see: https://www.unicode.org/copyright.html#8
#
3402 E0100; Adobe-Japan1; CID+13698
3402 E0101; Adobe-Japan1; CID+13697
@ -864,6 +867,8 @@
4054 E0100; Hanyo-Denshi; IA3507
4054 E0101; Hanyo-Denshi; TK01062970
4058 E0100; Adobe-Japan1; CID+18198
4058 E0101; MSARG; MD_4058
4058 E0102; MSARG; ME_4058_001
4071 E0100; Hanyo-Denshi; IA0509
4071 E0100; Moji_Joho; MJ002897
4071 E0101; Hanyo-Denshi; JTB661
@ -1094,6 +1099,8 @@
4359 E0101; Moji_Joho; MJ003650
4395 E0100; Hanyo-Denshi; IA4278
4395 E0101; Hanyo-Denshi; TK01074010
4397 E0100; MSARG; MA_9967
4397 E0101; MSARG; ME_4397_001
43A8 E0100; Hanyo-Denshi; IA4294
43A8 E0101; Hanyo-Denshi; TK01074340
43A9 E0100; Hanyo-Denshi; IA0588
@ -1407,6 +1414,8 @@
460D E0101; Moji_Joho; MJ004388
460F E0100; Adobe-Japan1; CID+18634
4610 E0100; Adobe-Japan1; CID+19136
4615 E0100; MSARG; MA_8FEB
4615 E0101; MSARG; ME_4615_001
462F E0100; Hanyo-Denshi; IA4925
462F E0101; Hanyo-Denshi; TK01083800
4635 E0100; Hanyo-Denshi; IA4929
@ -1560,6 +1569,8 @@
4921 E0101; Hanyo-Denshi; TK01092060
4938 E0100; Hanyo-Denshi; IA5637
4938 E0101; Hanyo-Denshi; TK01093220
493E E0100; MSARG; MA_97E1
493E E0101; MSARG; ME_493E_001
493F E0100; Hanyo-Denshi; IA5643
493F E0100; Moji_Joho; MJ005179
493F E0101; Hanyo-Denshi; KS462830
@ -1608,6 +1619,8 @@
4A28 E0101; Hanyo-Denshi; IB1033
4A28 E0101; Moji_Joho; MJ005391
4A29 E0100; Adobe-Japan1; CID+18910
4A29 E0101; MSARG; MD_4A29
4A29 E0102; MSARG; ME_4A29_001
4A3C E0100; Hanyo-Denshi; IB1041
4A3C E0100; Moji_Joho; MJ005411
4A3C E0101; Hanyo-Denshi; JTBEBD
@ -2016,6 +2029,8 @@
4E75 E0101; Moji_Joho; MJ006419
4E75 E0102; Hanyo-Denshi; JTAD26
4E75 E0102; Moji_Joho; MJ006420
4E78 E0100; MSARG; MA_9AFB
4E78 E0101; MSARG; ME_4E78_001
4E79 E0100; Adobe-Japan1; CID+19143
4E7E E0100; Adobe-Japan1; CID+1505
4E7F E0100; Adobe-Japan1; CID+14306
@ -2633,6 +2648,8 @@
5029 E0101; Moji_Joho; MJ006862
5029 E0102; Hanyo-Denshi; FT2068
5029 E0102; Moji_Joho; MJ006863
5029 E0103; MSARG; MB_ADC5
5029 E0104; MSARG; ME_5029_001
502A E0100; Adobe-Japan1; CID+4157
502B E0100; Adobe-Japan1; CID+3993
502B E0101; Hanyo-Denshi; JA4649
@ -3511,6 +3528,8 @@
51CD E0100; Adobe-Japan1; CID+3162
51CF E0100; Adobe-Japan1; CID+19177
51D1 E0100; Adobe-Japan1; CID+19178
51D1 E0101; MSARG; MA_FAA4
51D1 E0102; MSARG; ME_51D1_001
51D2 E0100; Adobe-Japan1; CID+21186
51D3 E0100; Adobe-Japan1; CID+19179
51D4 E0100; Adobe-Japan1; CID+19180
@ -4443,6 +4462,8 @@
53D6 E0100; Adobe-Japan1; CID+2324
53D7 E0100; Adobe-Japan1; CID+2337
53D7 E0101; Adobe-Japan1; CID+13813
53D8 E0100; MSARG; MA_895A
53D8 E0101; MSARG; ME_53D8_001
53D9 E0100; Adobe-Japan1; CID+2432
53DA E0100; Adobe-Japan1; CID+14372
53DB E0100; Adobe-Japan1; CID+3412
@ -4943,6 +4964,8 @@
555A E0102; Hanyo-Denshi; KS044550
555A E0102; Moji_Joho; MJ008401
555A E0103; Moji_Joho; MJ057180
555A E0104; MSARG; MD_555A
555A E0105; MSARG; ME_555A_001
555B E0100; Adobe-Japan1; CID+21282
555C E0100; Adobe-Japan1; CID+4392
555D E0100; Adobe-Japan1; CID+4398
@ -4951,6 +4974,8 @@
555D E0102; Hanyo-Denshi; JTAEDA
555D E0102; Moji_Joho; MJ008405
555E E0100; Adobe-Japan1; CID+7633
555F E0100; MSARG; MB_B1D2
555F E0101; MSARG; ME_555F_001
5560 E0100; Adobe-Japan1; CID+14392
5561 E0100; Adobe-Japan1; CID+20308
5561 E0101; Adobe-Japan1; CID+14393
@ -4961,6 +4986,8 @@
5568 E0100; Moji_Joho; MJ008415
5568 E0101; Hanyo-Denshi; IB1035
5568 E0101; Moji_Joho; MJ008416
556B E0100; MSARG; MA_94DC
556B E0101; MSARG; ME_556B_001
557B E0100; Adobe-Japan1; CID+4404
557C E0100; Adobe-Japan1; CID+4409
557C E0101; Hanyo-Denshi; JA5138
@ -5428,6 +5455,8 @@
56A0 E0102; Hanyo-Denshi; JTAF22
56A0 E0102; Moji_Joho; MJ008750
56A2 E0100; Adobe-Japan1; CID+3311
56A4 E0100; MSARG; MA_97A3
56A4 E0101; MSARG; ME_56A4_001
56A5 E0100; Adobe-Japan1; CID+4446
56A5 E0101; Adobe-Japan1; CID+7822
56A5 E0102; Hanyo-Denshi; JA5175
@ -6654,6 +6683,8 @@
59F6 E0100; Adobe-Japan1; CID+1132
59F7 E0100; Adobe-Japan1; CID+21401
59F8 E0100; Adobe-Japan1; CID+19312
59F8 E0101; MSARG; MA_9D55
59F8 E0102; MSARG; ME_59F8_001
59FB E0100; Adobe-Japan1; CID+1213
59FF E0100; Adobe-Japan1; CID+2207
59FF E0101; Adobe-Japan1; CID+13792
@ -6870,6 +6901,8 @@
5ACC E0103; Hanyo-Denshi; FT1791S
5ACC E0103; Moji_Joho; MJ009909
5ACF E0100; Adobe-Japan1; CID+21424
5ACF E0101; MSARG; MA_92F4
5ACF E0102; MSARG; ME_5ACF_001
5AD0 E0100; Adobe-Japan1; CID+4603
5AD6 E0100; Adobe-Japan1; CID+4596
5AD7 E0100; Adobe-Japan1; CID+4593
@ -7540,6 +7573,8 @@
5C8D E0100; Moji_Joho; MJ010418
5C8D E0101; Hanyo-Denshi; JTB06C
5C8D E0101; Moji_Joho; MJ010419
5C8D E0102; MSARG; MB_CAC0
5C8D E0103; MSARG; ME_5C8D_001
5C8F E0100; Adobe-Japan1; CID+16840
5C90 E0100; Adobe-Japan1; CID+1584
5C91 E0100; Adobe-Japan1; CID+4663
@ -7569,6 +7604,8 @@
5CAB E0100; Adobe-Japan1; CID+4666
5CAC E0100; Adobe-Japan1; CID+3764
5CAD E0100; Adobe-Japan1; CID+17557
5CAD E0101; MSARG; MB_CC64
5CAD E0102; MSARG; ME_5CAD_001
5CB1 E0100; Adobe-Japan1; CID+2866
5CB2 E0100; Adobe-Japan1; CID+21464
5CB3 E0100; Adobe-Japan1; CID+1463
@ -10095,6 +10132,8 @@
62D0 E0103; Moji_Joho; MJ012273
62D0 E0104; Hanyo-Denshi; IB1917
62D0 E0104; Moji_Joho; MJ012274
62D0 E0105; MSARG; MB_A9E4
62D0 E0106; MSARG; ME_62D0_001
62D1 E0100; Adobe-Japan1; CID+4961
62D2 E0100; Adobe-Japan1; CID+1675
62D2 E0101; Adobe-Japan1; CID+13715
@ -12633,6 +12672,8 @@
690D E0104; Hanyo-Denshi; KS170180
690D E0104; Moji_Joho; MJ057753
690D E0105; Hanyo-Denshi; TK01044570
690D E0106; MSARG; MB_B4D3
690D E0107; MSARG; ME_690D_001
690E E0100; Adobe-Japan1; CID+3043
690F E0100; Adobe-Japan1; CID+5206
6910 E0100; Adobe-Japan1; CID+21777
@ -13038,6 +13079,8 @@
6A0B E0102; Moji_Joho; MJ014416
6A0B E0103; Hanyo-Denshi; FT1907
6A0B E0103; Moji_Joho; MJ014417
6A0B E0104; MSARG; MA_FD42
6A0B E0105; MSARG; ME_6A0B_001
6A0C E0100; Adobe-Japan1; CID+5295
6A0F E0100; Adobe-Japan1; CID+14658
6A11 E0100; Adobe-Japan1; CID+17851
@ -13898,6 +13941,8 @@
6C67 E0102; Hanyo-Denshi; IB2201
6C67 E0102; Moji_Joho; MJ015090
6C67 E0103; Hanyo-Denshi; TK01049100
6C67 E0104; MSARG; MB_CB4C
6C67 E0105; MSARG; ME_6C67_001
6C68 E0100; Adobe-Japan1; CID+5392
6C6A E0100; Adobe-Japan1; CID+5385
6C6A E0101; Hanyo-Denshi; JA6174
@ -14318,6 +14363,8 @@
6DCD E0100; Hanyo-Denshi; IP6DCD
6DCD E0101; Hanyo-Denshi; TK01050160
6DCE E0100; Adobe-Japan1; CID+17952
6DCE E0101; MSARG; MD_6DCE
6DCE E0102; MSARG; ME_6DCE_001
6DCF E0100; Adobe-Japan1; CID+8520
6DCF E0101; Hanyo-Denshi; JB3957
6DCF E0101; Moji_Joho; MJ015459
@ -15270,6 +15317,8 @@
701E E0106; Hanyo-Denshi; IB2283
701E E0106; Moji_Joho; MJ016159
701E E0107; Hanyo-Denshi; TK01053770
701E E0108; MSARG; MA_96EE
701E E0109; MSARG; ME_701E_001
701F E0100; Adobe-Japan1; CID+5546
701F E0101; Hanyo-Denshi; JA6347
701F E0101; Moji_Joho; MJ016166
@ -15692,6 +15741,8 @@
71A8 E0100; Adobe-Japan1; CID+5580
71AC E0100; Adobe-Japan1; CID+5581
71AE E0100; Adobe-Japan1; CID+18037
71AE E0101; MSARG; MD_71AE
71AE E0102; MSARG; ME_71AE_001
71AF E0100; Adobe-Japan1; CID+18038
71B0 E0100; Adobe-Japan1; CID+21938
71B1 E0100; Adobe-Japan1; CID+3300
@ -15704,6 +15755,8 @@
71B3 E0103; Moji_Joho; MJ016595
71B9 E0100; Adobe-Japan1; CID+5583
71BA E0100; Adobe-Japan1; CID+16965
71BB E0100; MSARG; MD_71BB
71BB E0101; MSARG; ME_71BB_001
71BE E0100; Adobe-Japan1; CID+5584
71BE E0101; Hanyo-Denshi; JA6385
71BE E0101; Moji_Joho; MJ016605
@ -15827,6 +15880,8 @@
7210 E0100; Adobe-Japan1; CID+5597
7213 E0100; Adobe-Japan1; CID+21946
7215 E0100; Adobe-Japan1; CID+16967
7215 E0101; MSARG; MA_FE41
7215 E0102; MSARG; ME_7215_001
7217 E0100; Adobe-Japan1; CID+19521
7217 E0101; Hanyo-Denshi; JB4235
7217 E0101; Moji_Joho; MJ016708
@ -17688,6 +17743,8 @@
771F E0105; Moji_Joho; MJ018174
771F E0106; Hanyo-Denshi; TK01062480
771F E0107; Moji_Joho; MJ018175
771F E0108; MSARG; MB_AF75
771F E0109; MSARG; ME_771F_001
7720 E0100; Adobe-Japan1; CID+3774
7722 E0100; Adobe-Japan1; CID+19578
7724 E0100; Adobe-Japan1; CID+5815
@ -18016,6 +18073,8 @@
784F E0101; Moji_Joho; MJ018495
784F E0102; Hanyo-Denshi; JTB674
784F E0102; Moji_Joho; MJ018496
784F E0103; MSARG; MD_784F
784F E0104; MSARG; ME_784F_001
7851 E0100; Adobe-Japan1; CID+15420
7852 E0100; Adobe-Japan1; CID+22078
785C E0100; Adobe-Japan1; CID+19603
@ -19233,6 +19292,8 @@
7AAE E0103; Moji_Joho; MJ019272
7AAF E0100; Adobe-Japan1; CID+3900
7AB0 E0100; Adobe-Japan1; CID+5938
7AB0 E0101; MSARG; MA_8E50
7AB0 E0102; MSARG; ME_7AB0_001
7AB1 E0100; Hanyo-Denshi; IP7AB1
7AB1 E0101; Hanyo-Denshi; TK01068710
7AB3 E0100; Adobe-Japan1; CID+14931
@ -19444,6 +19505,8 @@
7B51 E0103; Moji_Joho; MJ019458
7B51 E0104; Hanyo-Denshi; JTB7A5
7B51 E0104; Moji_Joho; MJ019456
7B51 E0105; MSARG; MB_B5AE
7B51 E0106; MSARG; ME_7B51_001
7B52 E0100; Adobe-Japan1; CID+3189
7B53 E0100; Adobe-Japan1; CID+14173
7B53 E0101; Hanyo-Denshi; IP7B53
@ -20362,6 +20425,8 @@
7D86 E0103; Moji_Joho; MJ020134
7D88 E0100; Adobe-Japan1; CID+18353
7D89 E0100; Adobe-Japan1; CID+6084
7D89 E0101; MSARG; MA_8EA7
7D89 E0102; MSARG; ME_7D89_001
7D8B E0100; Adobe-Japan1; CID+14980
7D8C E0100; Adobe-Japan1; CID+14981
7D8D E0100; Adobe-Japan1; CID+19665
@ -20427,6 +20492,8 @@
7DAA E0102; Hanyo-Denshi; IB0846
7DAA E0102; Moji_Joho; MJ020184
7DAB E0100; Adobe-Japan1; CID+6095
7DAB E0101; MSARG; MA_8EA8
7DAB E0102; MSARG; ME_7DAB_001
7DAC E0100; Adobe-Japan1; CID+2342
7DAD E0100; Adobe-Japan1; CID+1185
7DAD E0101; Hanyo-Denshi; JA1661
@ -21226,6 +21293,8 @@
7FEB E0103; Moji_Joho; MJ020716
7FEB E0104; Moji_Joho; MJ020718
7FEC E0100; Adobe-Japan1; CID+15007
7FEC E0101; MSARG; MB_E6F8
7FEC E0102; MSARG; ME_7FEC_001
7FEE E0100; Adobe-Japan1; CID+15008
7FEF E0100; Adobe-Japan1; CID+15009
7FF0 E0100; Adobe-Japan1; CID+1545
@ -21238,6 +21307,8 @@
7FF0 E0104; Moji_Joho; MJ020725
7FF0 E0105; Hanyo-Denshi; TK01074020
7FF0 E0106; Hanyo-Denshi; TK01074040
7FF1 E0100; MSARG; MB_BFAC
7FF1 E0101; MSARG; ME_7FF1_001
7FF2 E0100; Adobe-Japan1; CID+18402
7FF3 E0100; Adobe-Japan1; CID+6199
7FF3 E0101; Hanyo-Denshi; JA7042
@ -21250,6 +21321,9 @@
7FF9 E0102; Hanyo-Denshi; FT2443
7FF9 E0102; Moji_Joho; MJ020737
7FFA E0100; Adobe-Japan1; CID+15010
7FFA E0101; MSARG; MA_8ECB
7FFA E0102; MSARG; ME_7FFA_001
7FFA E0103; MSARG; ME_7FFA_002
7FFB E0100; Adobe-Japan1; CID+3723
7FFB E0101; Adobe-Japan1; CID+14040
7FFB E0102; Hanyo-Denshi; JA4361
@ -23080,6 +23154,8 @@
833A E0101; Moji_Joho; MJ021843
833A E0102; Hanyo-Denshi; KS346690S
833A E0102; Moji_Joho; MJ021844
833A E0103; MSARG; MB_D072
833A E0104; MSARG; ME_833A_001
833C E0100; Adobe-Japan1; CID+18489
833C E0101; Hanyo-Denshi; JB5581
833C E0101; Moji_Joho; MJ021846
@ -23543,6 +23619,8 @@
83C1 E0104; Hanyo-Denshi; FT2479
83C1 E0104; Moji_Joho; MJ022062
83C1 E0105; Hanyo-Denshi; TK01078230
83C1 E0106; MSARG; MB_B5D7
83C1 E0107; MSARG; ME_83C1_001
83C2 E0100; Hanyo-Denshi; KS350410
83C2 E0101; Hanyo-Denshi; TK01078690
83C5 E0100; Adobe-Japan1; CID+2625
@ -24360,6 +24438,8 @@
84A8 E0103; Hanyo-Denshi; IB0865
84A8 E0103; Moji_Joho; MJ022481
84A8 E0104; Hanyo-Denshi; TK01080090
84A8 E0105; MSARG; MB_E3C8
84A8 E0106; MSARG; ME_84A8_001
84A9 E0100; Adobe-Japan1; CID+22350
84A9 E0101; Hanyo-Denshi; JB5680
84A9 E0101; Moji_Joho; MJ022484
@ -24871,6 +24951,8 @@
8534 E0101; Moji_Joho; MJ022738
8534 E0102; Hanyo-Denshi; KS360300
8534 E0102; Moji_Joho; MJ022739
8534 E0103; MSARG; MA_8F77
8534 E0104; MSARG; ME_8534_001
8535 E0100; Adobe-Japan1; CID+2818
8535 E0101; Hanyo-Denshi; JA3402
8535 E0102; Hanyo-Denshi; TK01081050
@ -26682,6 +26764,7 @@
8846 E0106; Hanyo-Denshi; TK01083450
8846 E0107; MSARG; MA_8FBC
8846 E0108; MSARG; ME_8846_001
8846 E0109; MSARG; ME_8846_002
8848 E0100; Adobe-Japan1; CID+22465
8849 E0100; Adobe-Japan1; CID+22466
884A E0100; Adobe-Japan1; CID+18635
@ -27969,6 +28052,8 @@
8B66 E0101; Moji_Joho; MJ024795
8B66 E0102; Hanyo-Denshi; KS408750S
8B66 E0102; Moji_Joho; MJ024796
8B67 E0100; MSARG; MB_F4D4
8B67 E0101; MSARG; ME_8B67_001
8B69 E0100; Adobe-Japan1; CID+17130
8B69 E0101; Hanyo-Denshi; JC9220
8B69 E0101; Moji_Joho; MJ024799
@ -28664,6 +28749,8 @@
8E26 E0100; Adobe-Japan1; CID+19850
8E27 E0100; Adobe-Japan1; CID+18732
8E2A E0100; Adobe-Japan1; CID+6824
8E2D E0100; MSARG; MA_9E5A
8E2D E0101; MSARG; ME_8E2D_001
8E30 E0100; Adobe-Japan1; CID+6813
8E30 E0101; Hanyo-Denshi; JA7692
8E30 E0101; Moji_Joho; MJ025364
@ -30340,6 +30427,8 @@
90A8 E0103; Moji_Joho; MJ026250
90A8 E0104; Hanyo-Denshi; TK01090660
90A8 E0105; Hanyo-Denshi; TK01090690
90A8 E0106; MSARG; MA_9068
90A8 E0107; MSARG; ME_90A8_001
90AA E0100; Adobe-Japan1; CID+2309
90AA E0101; Adobe-Japan1; CID+13454
90AA E0102; Adobe-Japan1; CID+13806
@ -30615,6 +30704,8 @@
9175 E0101; Moji_Joho; MJ026482
9175 E0102; Hanyo-Denshi; JTBDA9
9175 E0102; Moji_Joho; MJ026483
9176 E0100; MSARG; MA_9E4A
9176 E0101; MSARG; ME_9176_001
9177 E0100; Adobe-Japan1; CID+2053
9177 E0101; Adobe-Japan1; CID+13776
9177 E0102; Hanyo-Denshi; JA2583
@ -31073,6 +31164,8 @@
92B7 E0102; Moji_Joho; MJ026858
92B8 E0100; Adobe-Japan1; CID+22751
92B9 E0100; Adobe-Japan1; CID+6997
92B9 E0101; MSARG; MA_F9D7
92B9 E0102; MSARG; ME_92B9_001
92BA E0100; Adobe-Japan1; CID+22752
92BB E0100; Adobe-Japan1; CID+19920
92BC E0100; Adobe-Japan1; CID+19921
@ -31310,6 +31403,8 @@
936E E0101; Moji_Joho; MJ027061
936E E0102; Hanyo-Denshi; FT2650
936E E0102; Moji_Joho; MJ027062
936E E0103; MSARG; MA_A05F
936E E0104; MSARG; ME_936E_001
936F E0100; Adobe-Japan1; CID+22777
9370 E0100; Adobe-Japan1; CID+8676
9371 E0100; Adobe-Japan1; CID+18852
@ -32094,6 +32189,8 @@
96B6 E0101; Moji_Joho; MJ027706
96B6 E0102; Hanyo-Denshi; KS475490
96B6 E0102; Moji_Joho; MJ027705
96B6 E0103; MSARG; MA_90C4
96B6 E0104; MSARG; ME_96B6_001
96B7 E0100; Adobe-Japan1; CID+4020
96B8 E0100; Adobe-Japan1; CID+7114
96B9 E0100; Adobe-Japan1; CID+7115
@ -32370,6 +32467,8 @@
9759 E0102; Hanyo-Denshi; JA3237
9759 E0103; Hanyo-Denshi; TK01097430
9759 E0104; Hanyo-Denshi; TK01097490
9759 E0105; MSARG; MD_9759
9759 E0106; MSARG; ME_9759_001
975A E0100; Adobe-Japan1; CID+15275
975A E0101; Hanyo-Denshi; JB7121
975A E0101; Moji_Joho; MJ027909
@ -32392,6 +32491,8 @@
975C E0105; Moji_Joho; MJ027915
975C E0106; Hanyo-Denshi; TK01097530
975C E0107; Hanyo-Denshi; TK01097550
975C E0108; MSARG; MB_C052
975C E0109; MSARG; ME_975C_001
975D E0100; Hanyo-Denshi; IB1040
975D E0100; Moji_Joho; MJ027919
975D E0101; Hanyo-Denshi; IP975D
@ -32439,6 +32540,8 @@
976D E0103; Moji_Joho; MJ027942
976D E0104; Hanyo-Denshi; HG1633
976D E0104; Moji_Joho; MJ027941
976D E0105; MSARG; MA_9E46
976D E0106; MSARG; ME_976D_001
976E E0100; Adobe-Japan1; CID+15277
9771 E0100; Adobe-Japan1; CID+7152
9771 E0101; Adobe-Japan1; CID+7710
@ -32593,6 +32696,8 @@
97C8 E0103; Moji_Joho; MJ028052
97C8 E0104; Hanyo-Denshi; FT2682
97C8 E0104; Moji_Joho; MJ028054
97C8 E0105; MSARG; MA_9F76
97C8 E0106; MSARG; ME_97C8_001
97C9 E0100; Adobe-Japan1; CID+17192
97C9 E0101; Hanyo-Denshi; JB7160
97C9 E0101; Moji_Joho; MJ028055
@ -33066,6 +33171,7 @@
98EB E0103; Moji_Joho; MJ028358
98EC E0100; MSARG; MA_914B
98EC E0101; MSARG; ME_98EC_001
98EC E0102; MSARG; ME_98EC_002
98ED E0100; Adobe-Japan1; CID+4289
98ED E0101; Hanyo-Denshi; JA5012
98ED E0101; Moji_Joho; MJ028362
@ -33366,6 +33472,8 @@
9936 E0100; Moji_Joho; MJ028491
9936 E0101; Hanyo-Denshi; IP9936
9936 E0101; Moji_Joho; MJ028492
9938 E0100; MSARG; MA_9652
9938 E0101; MSARG; ME_9938_001
9939 E0100; Adobe-Japan1; CID+22892
9939 E0101; Hanyo-Denshi; JB7268
9939 E0101; Moji_Joho; MJ028494
@ -33844,6 +33952,8 @@
9A5F E0103; Hanyo-Denshi; KS510550
9A5F E0103; Moji_Joho; MJ028831
9A62 E0100; Adobe-Japan1; CID+7261
9A63 E0100; MSARG; MA_9557
9A63 E0101; MSARG; ME_9A63_001
9A64 E0100; Adobe-Japan1; CID+7263
9A65 E0100; Adobe-Japan1; CID+7262
9A65 E0101; Adobe-Japan1; CID+14268
@ -35128,6 +35238,8 @@
9ED8 E0102; Hanyo-Denshi; FT2329
9ED8 E0102; Moji_Joho; MJ029902
9ED9 E0100; Adobe-Japan1; CID+3815
9ED9 E0101; MSARG; MD_9ED9
9ED9 E0102; MSARG; ME_9ED9_001
9EDB E0100; Adobe-Japan1; CID+2883
9EDB E0101; Adobe-Japan1; CID+7729
9EDB E0102; Hanyo-Denshi; JA3467
@ -35813,6 +35925,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
206EE E0101; Moji_Joho; MJ031295
206F9 E0100; Moji_Joho; MJ031302
206F9 E0101; Moji_Joho; MJ031303
2070E E0100; MSARG; MA_92C3
2070E E0101; MSARG; ME_2070E_001
2071B E0100; Hanyo-Denshi; KS023680
2071B E0101; Hanyo-Denshi; TK01009920
2074F E0100; Adobe-Japan1; CID+17312
@ -36093,6 +36207,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
21764 E0100; Moji_Joho; MJ033638
21764 E0101; Hanyo-Denshi; KS073700
21764 E0101; Moji_Joho; MJ057303
217B5 E0100; MSARG; MA_96FD
217B5 E0101; MSARG; ME_217B5_001
21800 E0100; Hanyo-Denshi; TK01020690
21800 E0101; Hanyo-Denshi; TK01020760
21898 E0100; Hanyo-Denshi; KS077190
@ -36168,6 +36284,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
21D45 E0100; Adobe-Japan1; CID+17545
21D58 E0100; Hanyo-Denshi; KS089870
21D58 E0101; Hanyo-Denshi; TK01024500
21D5E E0100; MSARG; MA_876E
21D5E E0101; MSARG; ME_21D5E_001
21D62 E0100; Adobe-Japan1; CID+17547
21D78 E0100; Adobe-Japan1; CID+17546
21D92 E0100; Adobe-Japan1; CID+17556
@ -36660,6 +36778,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
23780 E0101; Hanyo-Denshi; JTB3B8
23780 E0101; Moji_Joho; MJ038377
23780 E0102; Hanyo-Denshi; TK01046760
237C2 E0100; MSARG; MA_FCF0
237C2 E0101; MSARG; ME_237C2_001
237E7 E0100; Adobe-Japan1; CID+17875
237E7 E0101; Hanyo-Denshi; JD1574
237E7 E0101; Moji_Joho; MJ038420
@ -36986,6 +37106,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
254C9 E0101; Hanyo-Denshi; TK01063840
254D9 E0100; Adobe-Japan1; CID+18217
2550E E0100; Adobe-Japan1; CID+17009
25584 E0100; MSARG; MA_93C3
25584 E0101; MSARG; ME_25584_001
255A7 E0100; Adobe-Japan1; CID+18229
25607 E0100; Hanyo-Denshi; IB0328
25607 E0100; Moji_Joho; MJ042965
@ -37297,6 +37419,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
263C1 E0101; Hanyo-Denshi; JTC0CA
263C1 E0101; Moji_Joho; MJ045051
263C1 E0102; Moji_Joho; MJ045050
263F9 E0100; MSARG; MD_263F9
263F9 E0101; MSARG; ME_263F9_001
26402 E0100; Adobe-Japan1; CID+18398
26405 E0100; Hanyo-Denshi; KS319810
26405 E0101; Hanyo-Denshi; TK01073730
@ -37311,12 +37435,18 @@ FA29 E0100; Adobe-Japan1; CID+8687
26408 E0102; Hanyo-Denshi; TK01073790
26409 E0100; Hanyo-Denshi; KS319910
26409 E0101; Hanyo-Denshi; TK01073770
26410 E0100; MSARG; MA_90CC
26410 E0101; MSARG; ME_26410_001
26439 E0100; MSARG; MD_26439
26439 E0101; MSARG; ME_26439_001
26462 E0100; Hanyo-Denshi; KS321040
26462 E0100; Moji_Joho; MJ045176
26462 E0101; Hanyo-Denshi; KS321270
26462 E0101; Moji_Joho; MJ045177
26489 E0100; Hanyo-Denshi; TK01007100
26489 E0101; Hanyo-Denshi; TK01074030
26489 E0102; MSARG; MA_8ECC
26489 E0103; MSARG; ME_26489_001
264B3 E0100; Hanyo-Denshi; KS322190
264B3 E0100; Moji_Joho; MJ058361
264B3 E0101; Hanyo-Denshi; KS322200S
@ -37581,6 +37711,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
27088 E0101; Hanyo-Denshi; TK01082110
270F0 E0100; Hanyo-Denshi; KS369820
270F0 E0101; Hanyo-Denshi; TK01082380
270F0 E0102; MSARG; MA_8FA8
270F0 E0103; MSARG; ME_270F0_001
270F4 E0100; Adobe-Japan1; CID+17103
270F4 E0101; Hanyo-Denshi; JC9141
270F4 E0101; Moji_Joho; MJ047259
@ -37698,6 +37830,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
2770F E0100; Moji_Joho; MJ048373
2770F E0101; Moji_Joho; MJ048374
27723 E0100; Adobe-Japan1; CID+18652
27741 E0100; MSARG; MA_94C7
27741 E0101; MSARG; ME_27741_001
27752 E0100; Adobe-Japan1; CID+18656
27753 E0100; Hanyo-Denshi; KS393290
27753 E0100; Moji_Joho; MJ048418
@ -39019,6 +39153,8 @@ FA29 E0100; Adobe-Japan1; CID+8687
2CF4C E0101; Moji_Joho; MJ056893
2CF4C E0102; Moji_Joho; MJ056894
2CF4C E0103; Moji_Joho; MJ056898
2CF7A E0100; MSARG; MC_00045
2CF7A E0101; MSARG; ME_2CF7A_001
2D020 E0100; Moji_Joho; MJ056969
2D020 E0101; Moji_Joho; MJ056970
2D028 E0100; Moji_Joho; MJ059338

View file

@ -41,7 +41,7 @@ unifiles = $(addprefix ${unidir}/,$(sort $(shell sed -n 's/^[ \t][ \t]*${lparen}
.PHONY: all
all: ${top_srcdir}/src/macuvs.h ${unifiles} ${unidir}/charscript.el \
${unidir}/charprop.el
${unidir}/charprop.el ${unidir}/emoji-zwj.el ${unidir}/emoji-labels.el
## Specify .elc as an order-only prereq so as to not needlessly rebuild
## target just because the .elc is missing.
@ -72,18 +72,30 @@ ${unifiles}: ${srcdir}/unidata-gen.el \
${srcdir}/BidiBrackets.txt | \
${srcdir}/unidata-gen.elc unidata.txt
$(AM_V_at)[ ! -f $@ ] || chmod +w $@
$(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
$(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
-f unidata-gen-file $@ ${srcdir}
${unidir}/emoji-labels.el: ${unidir}/../international/emoji.el \
${srcdir}/emoji-test.txt
$(AM_V_at)${emacs} -l emoji.el -f emoji--generate-file $@
.PHONY: charscript.el
charscript.el: ${unidir}/charscript.el
blocks = ${srcdir}/blocks.awk
${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks}
$(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
${unidir}/charscript.el: ${blocks}
${unidir}/charscript.el: ${srcdir}/Blocks.txt ${srcdir}/emoji-data.txt
$(AM_V_GEN)$(AWK) -f ${blocks} $^ > $@
.PHONY: emoji-zwj.el
emoji-zwj.el: ${unidir}/emoji-zwj.el
zwj = ${srcdir}/emoji-zwj.awk
${unidir}/emoji-zwj.el: ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt ${zwj}
$(AM_V_GEN)$(AWK) -f ${zwj} $^ > $@
.PHONY: clean bootstrap-clean distclean maintainer-clean gen-clean
@ -102,7 +114,9 @@ distclean: clean
## from a make target, we don't delete it here.
gen-clean:
rm -f ${unidir}/charscript.el*
rm -f ${unidir}/emoji-zwj.el*
rm -f ${unifiles} ${unidir}/charprop.el
rm -f ${unidir}/emoji-labels.el*
## ref: https://lists.gnu.org/r/emacs-devel/2013-11/msg01029.html
maintainer-clean: gen-clean distclean

File diff suppressed because it is too large Load diff

View file

@ -7,28 +7,44 @@ The names, URLs, and dates for these files are as follows.
BidiBrackets.txt
http://www.unicode.org/Public/UNIDATA/BidiBrackets.txt
2017-04-20
2021-06-30
BidiMirroring.txt
http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
2017-04-20
IVD_Sequences.txt
http://www.unicode.org/ivd/
2016-08-15
UnicodeData.txt
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
2017-03-07
2021-08-08
Blocks.txt
http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
2017-04-20
2021-01-22
IVD_Sequences.txt
http://www.unicode.org/ivd/
2020-11-06
NormalizationTest.txt
http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
2017-03-08
2021-05-28
SpecialCasing.txt
http://unicode.org/Public/UNIDATA/SpecialCasing.txt
2017-04-20
2021-03-08
UnicodeData.txt
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
2021-07-06
emoji-data.txt
https://www.unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
2021-08-26
emoji-zwj-sequences.txt
https://www.unicode.org/Public/emoji/14.0/emoji-zwj-sequences.txt
2021-06-08
emoji-sequences.txt
https://www.unicode.org/Public/emoji/14.0/emoji-sequences.txt
2020-08-26
emoji-test.txt
https://unicode.org/Public/emoji/14.0/emoji-test.txt
2021-10-28

View file

@ -1,6 +1,6 @@
# SpecialCasing-13.0.0.txt
# Date: 2019-09-08, 23:31:24 GMT
# © 2019 Unicode®, Inc.
# SpecialCasing-14.0.0.txt
# Date: 2021-03-08, 19:35:55 GMT
# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#

File diff suppressed because it is too large Load diff

View file

@ -131,7 +131,7 @@ function name2alias(name , w, w2) {
return name
}
/^[0-9A-F]/ {
FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
sep = index($1, "..")
len = length($1)
s = substr($1,1,sep-1)
@ -202,9 +202,42 @@ function name2alias(name , w, w2) {
}
}
FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji_Presentation / {
sep = index($1, "..")
len = length($1)
if (sep > 0) {
s = substr($1,1,sep-1)
e = substr($1,sep+2,len-sep-1)
} else {
s = $1
e = $1
}
$1 = ""
i++
start[i] = s
end[i] = e
alt[i] = "emoji"
name[i] = "Autogenerated emoji"
}
END {
idx = 0
# ## These are here so that font_range can choose Emoji presentation
# ## for the preceding codepoint when it encounters a VS
override_start[idx] = "FE00"
override_end[idx] = "FE0F"
for (k in override_start)
{
i++
start[i] = override_start[k]
end[i] = override_end[k]
alt[i] = "emoji"
name[i] = "Autogenerated emoji (override)"
}
print ";;; charscript.el --- character script table -*- lexical-binding:t -*-"
print ";;; Automatically generated from admin/unidata/Blocks.txt"
print ";;; Automatically generated from admin/unidata/{Blocks,emoji-data}.txt"
print "(let (script-list)"
print " (dolist (elt '("
@ -223,6 +256,6 @@ END {
print " (or (memq (nth 2 elt) script-list)"
print " (setq script-list (cons (nth 2 elt) script-list))))"
print " (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))"
print ""
print "\n"
print "(provide 'charscript)"
}

View file

@ -118,7 +118,7 @@ <h1>Unicode® Copyright and Terms of Use</h1>
<ol type="A">
<li><u><a name="1"></a>Unicode Copyright</u>
<ol>
<li>Copyright © 1991-2020 Unicode, Inc. All rights reserved.</li>
<li>Copyright © 1991-2021 Unicode, Inc. All rights reserved.</li>
</ol>
</li>

1297
admin/unidata/emoji-data.txt Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

4991
admin/unidata/emoji-test.txt Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

140
admin/unidata/emoji-zwj.awk Normal file
View file

@ -0,0 +1,140 @@
#!/usr/bin/awk -f
## Copyright (C) 2020 Free Software Foundation, Inc.
## Author: Robert Pluim <rpluim@gmail.com>
## This file is part of GNU Emacs.
## GNU Emacs is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
## GNU Emacs is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
## This script takes as input Unicode's emoji-zwj-sequences.txt
## and produces output for Emacs's lisp/international/emoji-zwj.el.
## It also outputs the composition sequences for flags, UK flags, and
## skin tones which have been derived from emoji-sequences.txt by hand.
## For additional details, see <https://debbugs.gnu.org/39799#8>.
## Things to do after installing a new version of
## emoji-zwj-sequences.txt and emoji-sequences.txt
## Check the output against the old output. See if there are any new
## composition sequences in emoji-sequences.txt that that need to be
## added Rebuild emacs, visit emoji-zwj-sequences.txt and
## emoji-sequences.txt and check that the various sequences are being
## composed properly. Don't forget to install an appropriate font,
## such as Noto Color Emoji.
### Code:
/^[0-9A-F].*; RGI_Emoji_(ZWJ|Modifier)_Sequence/ {
sub(/ *;.*/, "", $0)
num = split($0, elts)
if (ch[elts[1]] == "")
{
vec[elts[1]] = ""
ch[elts[1]] = elts[1]
}
else
{
vec[elts[1]] = vec[elts[1]] "\n"
}
vec[elts[1]] = vec[elts[1]] "\""
for (j = 1; j <= num; j++)
{
c = sprintf("\\N{U+%s}", elts[j])
vec[elts[1]] = vec[elts[1]] c
}
vec[elts[1]] = vec[elts[1]] "\""
}
END {
print ";;; emoji-zwj.el --- emoji zwj character composition table -*- lexical-binding:t -*-"
print ";;; Automatically generated from admin/unidata/emoji-{zwj-,}sequences.txt"
print "(eval-when-compile (require 'regexp-opt))"
# The following codepoints are not emoji, but they are part of
# emoji sequences. We have code in font.c:font_range that will
# try to display them with the emoji font anyway.
trigger_codepoints[1] = "261D"
trigger_codepoints[2] = "26F9"
trigger_codepoints[3] = "270C"
trigger_codepoints[4] = "270D"
trigger_codepoints[5] = "2764"
trigger_codepoints[6] = "1F3CB"
trigger_codepoints[7] = "1F3CC"
trigger_codepoints[8] = "1F3F3"
trigger_codepoints[9] = "1F3F4"
trigger_codepoints[10] = "1F441"
trigger_codepoints[11] = "1F574"
trigger_codepoints[12] = "1F575"
trigger_codepoints[13] = "1F590"
printf "(setq auto-composition-emoji-eligible-codepoints\n"
printf "'("
for (trig in trigger_codepoints)
{
printf("\n?\\N{U+%s}", trigger_codepoints[trig])
}
printf "\n))\n\n"
# We add entries for 'codepoint U+FE0F' here to ensure that the
# code in font_range is triggered.
for (trig in trigger_codepoints)
{
codepoint = trigger_codepoints[trig]
c = sprintf("\\N{U+%s}", codepoint)
vec[codepoint] = vec[codepoint] "\n\"" c "\\N{U+FE0F}\""
}
print "(dolist (elt `("
for (elt in ch)
{
printf("(#x%s .\n,(eval-when-compile (regexp-opt\n'(\n%s\n))))\n", elt, vec[elt])
}
print "))"
print " (set-char-table-range composition-function-table"
print " (car elt)"
print " (nconc (char-table-range composition-function-table (car elt))"
print " (list (vector (cdr elt)"
print " 0"
print " 'compose-gstring-for-graphic)))))"
print ";; The following two blocks are derived by hand from emoji-sequences.txt"
print ";; FIXME: add support for Emoji_Keycap_Sequence once we learn how to respect FE0F/VS-16"
print ";; for ASCII characters."
print ";; Flags"
print "(set-char-table-range composition-function-table"
print " '(#x1F1E6 . #x1F1FF)"
print " (nconc (char-table-range composition-function-table '(#x1F1E6 . #x1F1FF))"
print " (list (vector \"[\\U0001F1E6-\\U0001F1FF][\\U0001F1E6-\\U0001F1FF]\""
print " 0"
print " 'compose-gstring-for-graphic))))"
print ";; UK Flags"
print "(set-char-table-range composition-function-table"
print " #x1F3F4"
print " (nconc (char-table-range composition-function-table #x1F3F4)"
print " (list (vector \"\\U0001F3F4\\U000E0067\\U000E0062\\\\(?:\\U000E0065\\U000E006E\\U000E0067\\\\|\\U000E0073\\U000E0063\\U000E0074\\\\|\\U000E0077\\U000E006C\\U000E0073\\\\)\\U000E007F\""
print " 0"
print " 'compose-gstring-for-graphic))))"
printf "\n(provide 'emoji-zwj)"
}

1229
build-aux/config.guess vendored

File diff suppressed because it is too large Load diff

87
build-aux/config.sub vendored
View file

@ -2,7 +2,9 @@
# Configuration validation subroutine script.
# Copyright 1992-2021 Free Software Foundation, Inc.
timestamp='2021-01-07'
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2021-08-14'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -50,7 +52,14 @@ timestamp='2021-01-07'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
me=$(echo "$0" | sed -e 's,.*/,,')
# The "shellcheck disable" line above the timestamp inhibits complaints
# about features and limitations of the classic Bourne shell that were
# superseded or lifted in POSIX. However, this script identifies a wide
# variety of pre-POSIX systems that do not have POSIX shells at all, and
# even some reasonably current systems (Solaris 10 as case-in-point) still
# have a pre-POSIX /bin/sh.
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@ -112,9 +121,11 @@ esac
# Split fields of configuration type
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <<EOF
$1
EOF
IFS=$saved_IFS
# Separate into logical components for further validation
case $1 in
@ -163,6 +174,10 @@ case $1 in
basic_machine=$field1
basic_os=$field2
;;
zephyr*)
basic_machine=$field1-unknown
basic_os=$field2
;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
@ -769,22 +784,22 @@ case $basic_machine in
vendor=hp
;;
i*86v32)
cpu=$(echo "$1" | sed -e 's/86.*/86/')
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv32
;;
i*86v4*)
cpu=$(echo "$1" | sed -e 's/86.*/86/')
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv4
;;
i*86v)
cpu=$(echo "$1" | sed -e 's/86.*/86/')
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv
;;
i*86sol2)
cpu=$(echo "$1" | sed -e 's/86.*/86/')
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=solaris2
;;
@ -917,14 +932,16 @@ case $basic_machine in
;;
leon-*|leon[3-9]-*)
cpu=sparc
vendor=$(echo "$basic_machine" | sed 's/-.*//')
vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
*-*)
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read cpu vendor <<EOF
$basic_machine
EOF
IFS=$saved_IFS
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@ -1084,7 +1101,7 @@ case $cpu-$vendor in
cpu=mipsisa64sb1el
;;
sh5e[lb]-*)
cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
;;
spur-*)
cpu=spur
@ -1102,7 +1119,7 @@ case $cpu-$vendor in
cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
arm64-*)
cpu=aarch64
@ -1165,7 +1182,7 @@ case $cpu-$vendor in
| alphapca5[67] | alpha64pca5[67] \
| am33_2.0 \
| amdgcn \
| arc | arceb \
| arc | arceb | arc32 | arc64 \
| arm | arm[lb]e | arme[lb] | armv* \
| avr | avr32 \
| asmjs \
@ -1204,9 +1221,13 @@ case $cpu-$vendor in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa32r3 | mipsisa32r3el \
| mipsisa32r5 | mipsisa32r5el \
| mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
| mipsisa64r3 | mipsisa64r3el \
| mipsisa64r5 | mipsisa64r5el \
| mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
@ -1288,30 +1309,32 @@ then
case $basic_os in
gnu/linux*)
kernel=linux
os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
;;
os2-emx)
kernel=os2
os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
;;
nto-qnx*)
kernel=nto
os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
;;
*-*)
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read kernel os <<EOF
$basic_os
EOF
IFS=$saved_IFS
;;
# Default OS when just kernel was specified
nto*)
kernel=nto
os=$(echo $basic_os | sed -e 's|nto|qnx|')
os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
;;
linux*)
kernel=linux
os=$(echo $basic_os | sed -e 's|linux|gnu|')
os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
;;
*)
kernel=
@ -1332,7 +1355,7 @@ case $os in
os=cnk
;;
solaris1 | solaris1.*)
os=$(echo $os | sed -e 's|solaris1|sunos4|')
os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
;;
solaris)
os=solaris2
@ -1361,7 +1384,7 @@ case $os in
os=sco3.2v4
;;
sco3.2.[4-9]*)
os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
;;
sco*v* | scout)
# Don't match below
@ -1391,7 +1414,7 @@ case $os in
os=lynxos
;;
mac[0-9]*)
os=$(echo "$os" | sed -e 's|mac|macos|')
os=`echo "$os" | sed -e 's|mac|macos|'`
;;
opened*)
os=openedition
@ -1400,10 +1423,10 @@ case $os in
os=os400
;;
sunos5*)
os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
sunos6*)
os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
wince*)
os=wince
@ -1437,7 +1460,7 @@ case $os in
;;
# Preserve the version number of sinix5.
sinix5.*)
os=$(echo $os | sed -e 's|sinix|sysv|')
os=`echo "$os" | sed -e 's|sinix|sysv|'`
;;
sinix*)
os=sysv4
@ -1683,12 +1706,15 @@ fi
# Now, validate our (potentially fixed-up) OS.
case $os in
# Sometimes we do "kernel-abi", so those need to count as OSes.
musl* | newlib* | uclibc*)
# Sometimes we do "kernel-libc", so those need to count as OSes.
musl* | newlib* | relibc* | uclibc*)
;;
# Likewise for "kernel-libc"
# Likewise for "kernel-abi"
eabi* | gnueabi*)
;;
# VxWorks passes extra cpu info in the 4th filed.
simlinux | simwindows | spe)
;;
# Now accept the basic system types.
# The portable systems comes first.
# Each alternative MUST end in a * to match a version number.
@ -1704,12 +1730,12 @@ case $os in
| nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
| clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
| mirbsd* | netbsd* | dicos* | openedition* | ose* \
| bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
| bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
| ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
| bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
| ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
| udi* | lites* | ieee* | go32* | aux* | hcos* \
| chorusrdb* | cegcc* | glidix* \
| chorusrdb* | cegcc* | glidix* | serenity* \
| cygwin* | msys* | pe* | moss* | proelf* | rtems* \
| midipix* | mingw32* | mingw64* | mint* \
| uxpv* | beos* | mpeix* | udk* | moxiebox* \
@ -1722,7 +1748,7 @@ case $os in
| skyos* | haiku* | rdos* | toppers* | drops* | es* \
| onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
| midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
| nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
| nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*)
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@ -1739,11 +1765,12 @@ esac
# As a final step for OS-related things, validate the OS-kernel combination
# (given a valid OS), if there is a kernel.
case $kernel-$os in
linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
| linux-musl* | linux-relibc* | linux-uclibc* )
;;
uclinux-uclibc* )
;;
-dietlibc* | -newlib* | -musl* | -uclibc* )
-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
@ -1751,6 +1778,8 @@ case $kernel-$os in
;;
kfreebsd*-gnu* | kopensolaris*-gnu*)
;;
vxworks-simlinux | vxworks-simwindows | vxworks-spe)
;;
nto-qnx*)
;;
os2-emx)

View file

@ -35,7 +35,7 @@
eval 'exec perl -wSx "$0" "$@"'
if 0;
my $VERSION = '2020-04-04 15:07'; # UTC
my $VERSION = '2021-02-24 23:42'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
@ -455,7 +455,8 @@ sub git_dir_option($)
# If there were any lines
if (@line == 0)
{
warn "$ME: warning: empty commit message:\n $date_line\n";
warn "$ME: warning: empty commit message:\n"
. " commit $sha\n $date_line\n";
}
else
{

View file

@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
AC_PREREQ(2.65)
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
AC_INIT(GNU Emacs, 28.0.50, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
AC_INIT(GNU Emacs, 29.0.50, bug-gnu-emacs@gnu.org, , https://www.gnu.org/software/emacs/)
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
dnl and then quoted again for a C string. Separate options with spaces.
@ -447,6 +447,7 @@ OPTION_DEFAULT_ON([tiff],[don't compile with TIFF image support])
OPTION_DEFAULT_ON([gif],[don't compile with GIF image support])
OPTION_DEFAULT_ON([png],[don't compile with PNG image support])
OPTION_DEFAULT_ON([rsvg],[don't compile with SVG image support])
OPTION_DEFAULT_ON([webp],[don't compile with WebP image support])
OPTION_DEFAULT_ON([lcms2],[don't compile with Little CMS support])
OPTION_DEFAULT_ON([libsystemd],[don't compile with libsystemd support])
OPTION_DEFAULT_ON([cairo],[don't compile with Cairo drawing])
@ -486,6 +487,7 @@ OPTION_DEFAULT_ON([zlib],[don't compile with zlib decompression support])
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])
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)])],
@ -876,8 +878,8 @@ done
ac_func_list=$funcs
# Emacs does not use the wchar or wctype-h modules.
AC_DEFUN([gt_TYPE_WINT_T],
[GNULIB_OVERRIDES_WINT_T=0
AC_SUBST([GNULIB_OVERRIDES_WINT_T])])
[GNULIBHEADERS_OVERRIDE_WINT_T=0
AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T])])
# Initialize gnulib right after choosing the compiler.
dnl Amongst other things, this sets AR and ARFLAGS.
@ -1335,6 +1337,11 @@ if test -n "$BREW"; then
[`$BREW --prefix texinfo 2>/dev/null`/bin$PATH_SEPARATOR$PATH])
fi
# Check MacPorts on macOS.
if test $opsys = darwin; then
AC_PATH_PROG(HAVE_MACPORTS, port)
fi
## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals.
: ${MAKEINFO:=makeinfo}
case `($MAKEINFO --version) 2>/dev/null` in
@ -2595,6 +2602,28 @@ if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${window_sys
fi
fi
### Use -lwebp if available, unless '--with-webp=no'
HAVE_WEBP=no
if test "${with_webp}" != "no"; then
if test "${HAVE_X11}" = "yes" || test "${opsys}" = "mingw32" \
|| test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes"; then
WEBP_REQUIRED=0.6.0
WEBP_MODULE="libwebp >= $WEBP_REQUIRED"
EMACS_CHECK_MODULES([WEBP], [$WEBP_MODULE])
AC_SUBST(WEBP_CFLAGS)
AC_SUBST(WEBP_LIBS)
fi
if test $HAVE_WEBP = yes; then
AC_DEFINE(HAVE_WEBP, 1, [Define to 1 if using libwebp.])
CFLAGS="$CFLAGS $WEBP_CFLAGS"
# Windows loads libwebp dynamically
if test "${opsys}" = "mingw32"; then
WEBP_LIBS=
fi
fi
fi
HAVE_IMAGEMAGICK=no
if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test "${window_system}" = "pgtk" || test "${HAVE_W32}" = "yes"; then
if test "${with_imagemagick}" != "no"; then
@ -3803,10 +3832,12 @@ AC_SUBST_FILE([module_env_snippet_25])
AC_SUBST_FILE([module_env_snippet_26])
AC_SUBST_FILE([module_env_snippet_27])
AC_SUBST_FILE([module_env_snippet_28])
AC_SUBST_FILE([module_env_snippet_29])
module_env_snippet_25="$srcdir/src/module-env-25.h"
module_env_snippet_26="$srcdir/src/module-env-26.h"
module_env_snippet_27="$srcdir/src/module-env-27.h"
module_env_snippet_28="$srcdir/src/module-env-28.h"
module_env_snippet_29="$srcdir/src/module-env-29.h"
emacs_major_version="${PACKAGE_VERSION%%.*}"
AC_SUBST(emacs_major_version)
@ -3862,7 +3893,7 @@ AC_DEFUN([libgccjit_dev_not_found], [
not found.
Please try installing libgccjit-dev or a similar package.
If you are sure you want Emacs be compiled without ELisp native compiler,
pass the --without-nativecomp option to configure.])])
pass the --without-native-compilation option to configure.])])
AC_DEFUN([libgccjit_broken], [
AC_MSG_ERROR([The installed libgccjit failed to compile and run a test program using
@ -3877,51 +3908,92 @@ source on this site:
<https://gcc.gnu.org/wiki/JIT>.])])
HAVE_NATIVE_COMP=no
LIBGCCJIT_LIB=
LIBGCCJIT_LIBS=
LIBGCCJIT_CFLAGS=
if test "$canonical" = i686-pc-cygwin; then
if test "${with_cygwin32_native_compilation}" = yes; then
with_native_compilation=yes
elif test "${with_native_compilation}" != no; then
AC_MSG_ERROR([Native compilation is not supported on 32-bit Cygwin.
If you really want to try it anyway, use the configure option
'--with-cygwin32-native-compilation'.])
fi
fi
if test "${with_native_compilation}" != "no"; then
if test "${HAVE_PDUMPER}" = no; then
AC_MSG_ERROR(['--with-nativecomp' requires '--with-dumping=pdumper'])
AC_MSG_ERROR(['--with-native-compilation' requires '--with-dumping=pdumper'])
fi
if test "${HAVE_ZLIB}" = no; then
AC_MSG_ERROR(['--with-nativecomp' requires zlib])
AC_MSG_ERROR(['--with-native-compilation' requires zlib])
fi
# Ensure libgccjit installed by Homebrew can be found.
if test -n "$BREW"; then
BREW_LIBGCCJIT_PREFIX=`$BREW --prefix --installed libgccjit 2>/dev/null`
if test "$BREW_LIBGCCJIT_PREFIX"; then
brew_libdir=`find ${BREW_LIBGCCJIT_PREFIX}/ -name \*.so \
| sed -e '1!d;s|/[[^/]]*\.so$||'`
CFLAGS="$CFLAGS -I${BREW_LIBGCCJIT_PREFIX}/include"
LDFLAGS="$LDFLAGS -L${brew_libdir} -I${BREW_LIBGCCJIT_PREFIX}/include"
SAVE_CFLAGS=$CFLAGS
SAVE_LIBS=$LIBS
if test "${opsys}" = "darwin"; then
# Ensure libgccjit installed by Homebrew or macports can be found.
if test -n "$BREW"; then
if test -n "`$BREW --prefix --installed libgccjit 2>/dev/null`"; then
MAC_CFLAGS="-I$(dirname $($BREW ls -v libgccjit | \
grep libgccjit.h))"
MAC_LIBS="-L$(dirname $($BREW ls -v libgccjit| \
grep libgccjit.so\$))"
fi
fi
if test -n "$HAVE_MACPORTS"; then
# Determine which gcc version has been installed (gcc11, for
# instance). Use the latest version, if more than one is
# available. (We filter out the gcc4 packages, because they
# don't support jit, and they have names like "gcc49" that
# sort later than "gcc11".)
PORT_PACKAGE=$(port installed active | grep '^ *gcc@<:@0-9@:>@* ' | \
awk '{ print $1; }' | grep -v 'gcc4@<:@0-9@:>@' | \
sort -V | tail -n 1)
if test -n "$PORT_PACKAGE"; then
MAC_CFLAGS="-I$(dirname $(port contents $PORT_PACKAGE | \
grep libgccjit.h))"
MAC_LIBS="-L$(dirname $(port contents $PORT_PACKAGE | \
grep libgccjit.dylib))"
fi
fi
if test -n "$MAC_CFLAGS" && test -n "$MAC_LIBS"; then
CFLAGS="$CFLAGS ${MAC_CFLAGS}"
LIBS="$LIBS ${MAC_LIBS}"
fi
fi
# Check if libgccjit is available.
AC_CHECK_LIB(gccjit, gcc_jit_context_acquire, [], [libgccjit_not_found])
AC_CHECK_HEADERS(libgccjit.h, [], [libgccjit_dev_not_found])
emacs_save_LIBS=$LIBS
LIBS="-lgccjit"
# Check if libgccjit really works.
AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken])
LIBS=$emacs_save_LIBS
HAVE_NATIVE_COMP=yes
case "${opsys}" in
# mingw32 loads the library dynamically.
mingw32) ;;
# OpenBSD doesn't have libdl, all the functions are in libc
netbsd|openbsd)
LIBGCCJIT_LIB="-lgccjit" ;;
LIBGCCJIT_LIBS="-lgccjit" ;;
darwin)
LIBGCCJIT_CFLAGS="${MAC_CFLAGS}"
LIBGCCJIT_LIBS="${MAC_LIBS} -lgccjit -ldl";;
*)
LIBGCCJIT_LIB="-lgccjit -ldl" ;;
LIBGCCJIT_LIBS="-lgccjit -ldl" ;;
esac
NEED_DYNLIB=yes
AC_DEFINE(HAVE_NATIVE_COMP, 1, [Define to 1 if native compiler is available.])
CFLAGS=$SAVE_CFLAGS
LIBS=$SAVE_LIBS
fi
AC_DEFINE_UNQUOTED(NATIVE_ELISP_SUFFIX, ".eln",
[System extension for native compiled elisp])
AC_SUBST(HAVE_NATIVE_COMP)
AC_SUBST(LIBGCCJIT_LIB)
AC_SUBST(LIBGCCJIT_CFLAGS)
AC_SUBST(LIBGCCJIT_LIBS)
DYNLIB_OBJ=
if test "${NEED_DYNLIB}" = yes; then
@ -4954,7 +5026,7 @@ emacs_broken_SIGIO=no
case $opsys in
dnl SIGIO exists, but the feature doesn't work in the way Emacs needs.
hpux* | nacl | openbsd | solaris | unixware )
hpux* | nacl | solaris | unixware )
emacs_broken_SIGIO=yes
;;
@ -5709,11 +5781,12 @@ CFLAGS=$pre_PKG_CONFIG_CFLAGS
LIBS="$LIB_PTHREAD $pre_PKG_CONFIG_LIBS"
gl_ASSERT_NO_GNULIB_POSIXCHECK
gl_ASSERT_NO_GNULIB_TESTS
gl_EEMALLOC
gl_INIT
CFLAGS=$SAVE_CFLAGS
LIBS=$SAVE_LIBS
# timer_getoverrun needs the same libarary as timer_settime
# timer_getoverrun needs the same library as timer_settime
OLD_LIBS=$LIBS
LIBS="$LIB_TIMER_TIME $LIBS"
AC_CHECK_FUNCS(timer_getoverrun)
@ -5734,7 +5807,8 @@ case "$opsys" in
if test "$HAVE_NS" = "yes"; then
libs_nsgui="-framework AppKit"
if test "$NS_IMPL_COCOA" = "yes"; then
libs_nsgui="$libs_nsgui -framework IOKit -framework Carbon -framework IOSurface"
libs_nsgui="$libs_nsgui -framework IOKit -framework Carbon \
-framework IOSurface -framework QuartzCore"
fi
else
libs_nsgui=
@ -5916,8 +5990,8 @@ emacs_config_features=
for opt in ACL CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS \
HARFBUZZ IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 \
M17N_FLT MODULES NATIVE_COMP NOTIFY NS OLDXMENU PDUMPER PGTK PNG RSVG SECCOMP \
SOUND THREADS TIFF \
TOOLKIT_SCROLL_BARS UNEXEC X11 XAW3D XDBE XFT XIM XPM XWIDGETS X_TOOLKIT \
SOUND THREADS TIFF TOOLKIT_SCROLL_BARS \
UNEXEC WEBP X11 XAW3D XDBE XFT XIM XPM XWIDGETS X_TOOLKIT \
ZLIB; do
case $opt in
@ -5962,6 +6036,7 @@ AS_ECHO([" Does Emacs use -lXaw3d? ${HAVE_XAW3D
Does Emacs use a gif library? ${HAVE_GIF} $LIBGIF
Does Emacs use a png library? ${HAVE_PNG} $LIBPNG
Does Emacs use -lrsvg-2? ${HAVE_RSVG}
Does Emacs use -lwebp? ${HAVE_WEBP}
Does Emacs use cairo? ${HAVE_CAIRO}
Does Emacs use -llcms2? ${HAVE_LCMS2}
Does Emacs use imagemagick? ${HAVE_IMAGEMAGICK}

View file

@ -4,156 +4,138 @@
@c See file emacs.texi for copying conditions.
@node Antinews
@appendix Emacs 26 Antinews
@appendix Emacs 27 Antinews
@c Update the emacs.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information
about downgrading to Emacs version 26.3. We hope you will enjoy the
about downgrading to Emacs version 27.2. We hope you will enjoy the
greater simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Emacs no longer uses @acronym{GMP}, the GNU Multiple Precision
library, and doesn't support Lisp integers greater than
@code{most-positive-fixnum} or smaller than
@code{most-negative-fixnum}. We now have only one kind of a Lisp
integer. This simplifies many Lisp programs that use integers, and
makes integer calculations always fast. If you want larger values,
use Lisp floats, as Emacs has done since day one.
Emacs can no longer be built with support of native compilation of
Lisp programs. This means Emacs builds much faster, and the problems
that came with native compilation: the need to have GCC and Binutils
installed, the complications of managing your @file{eln-cache}
directories---all of that is now future history. The simplicity and
elegance of the Emacs byte-compiled code is now restored in all of its
pristine beauty.
@item
Emacs no longer supports HarfBuzz as the engine for shaping complex
text. As you move back in time, we will gradually shed off all traces
of support for complex text shaping, and this is one step in that
direction.
Emacs no longer builds by default with Cairo, even if it's present.
The warnings about not using HarfBuzz are also gone, in preparation
for complete removal of HarfBuzz support in previous Emacs versions.
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
We have removed support for building with the Jansson library, and
consequently the native support for JSON parsing is gone. The
importance of JSON decreases as we go back in time, so for now using
the Lisp code for handling it should be good enough; in one of the
past Emacs versions, we intend to remove even that, as useless bloat.
The library for supporting JSONRPC applications was removed for the
same reason.
As Motif becomes more and more important with moving farther into the
past, we've reinstated the code which supports Motif in Emacs.
@item
The ``portable dumper'' feature is gone. We are once again using the
field-proven ``unexec'' way of dumping Emacs. With that, the hope for
being able to re-dump your customized Emacs session is also gone: why
would anyone want to record their random customization experiments on
disk, and restore them the next time they start Emacs? And true
Emacsers don't restart their Emacs sessions anyway.
Emacs once again supports versions 5.3 and older OpenBSD systems,
which will be needed as you move back in time.
@item
We dropped the support for @acronym{XDG}-style configuration
directories and the @env{XDG_CONFIG_HOME} environment variable.
There's once again only one place where Emacs looks for its init
files: the @file{~/.emacs.d} directory, with the @file{~/.emacs} file
as fallback. We think this will go a long way towards preventing
confusion among users who for some reason have @env{XDG_CONFIG_HOME}
set, thus risking to have their init files randomly spread between two
places. In one of the past Emacs versions, we intend to further
simplify this, removing the @file{~/.emacs.d} place and leaving only
@file{~/.emacs}; stay tuned.
For similar reasons, we've removed the ``early init'' file. You can
now again use all the tricks you want to initialize variables like
@code{package-user-dir} and @code{package-load-list} just in time for
the packages to load.
@command{emacsclient} no longer supports @acronym{XDG}-style directory
trees, either.
We've dropped support for Secure Computing filter on GNU/Linux. The
past world is much more secure than the present, so the complexities
related with this stuff, which can only be explained by severe
paranoia, are no longer justified.
@item
TLS connections are back to their lenient security settings. We
decided that too tight security settings are an annoyance for users,
and make little sense considering the world-wide tendency to have
fewer and fewer network security problems as we move back in time
(those issues will be completely gone when networks disappear in some
distant past).
Emacs reverted back to supporting Unicode 13.x, since the following
versions of the standards are not yet published where you are going.
The @samp{emoji} script and the support for displaying Emoji sequences
were removed for the same reasons: no one will produce them in the
past.
@item
The @code{server-after-make-frame-hook} hook was deleted, in
preparation for removing the entire daemon business in some past Emacs
version. You will be glad to learn that setting up the GUI
customizations of your sessions is now once again as easy as it ever
was, with just the @code{after-make-frame-functions} to use.
Mode-specific commands and the @kbd{M-S-x} command that invokes them
were removed. As you move back in time, the command set in Emacs
becomes smaller, so any such filtering of applicable commands just
gets in the way.
@item
The @code{flex} completion style was removed. We feel that it
unnecessarily complicates the Emacs user experience, and therefore
will continue to remove other tricky completion styles, until in some
past Emacs version we get to a single original style Emacs pioneered
decades ago. Long live simplicity; down with complications!
We have removed the system for displaying documentation of groups of
related functions, the @kbd{shortdoc-display-group} command to go with
it, and the corresponding ``See also'' button in the @file{*Help*}
buffer. That should make searching for certain functions simpler:
just use the venerable @samp{apropos} commands.
@item
The optional display of the fill-column indicator is no longer
supported. With the display sizes becoming smaller and smaller as you
move back in time, we feel that the display itself will always show
you where to fill or wrap your text, and do this much more easily and
reliably than any such display indicator.
The @code{context-menu-mode} was removed, and with it the context
menus popped by pressing the right mouse button. This is one small
step towards freeing Emacs (and eventually, the whole world of
computing) from the tyranny of the GUI pointing devices in general,
and moving back to the simplicity of text-mode user interfaces.
Down with mice and other rodents!
@item
We removed the features that made visiting large files easier. Thus,
Emacs will no longer suggest visiting a large file literally, nor
offer the @code{so-long} mode to deal with overly-long lines. We
decided that this simplification is worthwhile, given that the general
tendency of having very large files is becoming a rarity as we move
back in time.
The commands @kbd{C-x 4 4} and @kbd{C-x 5 5} for displaying the
results in a new window/frame re gone. We are quite certain that
creating a new window/frame before running a command is much simpler,
and doesn't require a complication of a new prefix.
@item
We have removed the feature that displayed echo-area messages without
hiding content of the active minibuffer. This should prevent user
confusion from having two unrelated pieces of text staring at them,
with no clear separation between them. Users with good memories (and
Emacs users are all expected to be of that kind) will have no trouble
keeping the minibuffer text in their minds, and typing the responses
without actually seeing the prompts.
The behavior of active minibuffers when switching frames is now the
perfect mess it should be: sometimes the minibuffer moves to the new
selected frame, sometimes it doesn't, and sometimes you get an error.
This makes Emacs usage much more fun, as you get to guess the result,
instead of having it boringly consistent.
@item
Horizontal scrolling using the mouse or touchpad has been removed. In
the past, wide monitors will become less popular, so horizontal
scrolling will no longer be needed. Removal of the mouse support for
horizontal scrolling is the first step towards its complete removal in
prior Emacs versions.
Compact mode-line display mode has been removed. The items displayed
on the mode line are now always in the same place, and if there's not
enough space for them, they are not displayed at all, instead of being
confusingly displayed in a different position. You no longer need to
think twice where to find a particular mode-line element on display.
@item
The @code{main-thread} variable and @code{list-threads} were removed,
and @code{thread-join} no longer returns the result of the finished
thread. We intend to remove the support for Lisp threads in some past
Emacs version, so we continue removing the associated complexities and
features as we go back in time.
Many commands and options related to tab bars were removed, including
(but not limited to) frame-specific appearance of tab bars, the
@code{tab-bar-format} option, the @kbd{C-x t n}, @kbd{C-x t N},
@kbd{C-x t M}, and @kbd{C-x t G} commands, and many mouse gestures on
the tab bar. We are going to delete the tab bar support from Emacs in
one of the past versions, and this is a step in that direction.
@item
Tab bar and window tab-lines were removed. This should make the Emacs
display simpler and less cluttered, and help those users who disable
menu bar and tool bar in their GUI sessions. The fashion to provide
tabs in every GUI application out there is gaining less and less
popularity as we move back in time, and will completely disappear at
some past point; removing the tabs from Emacs is the step in that
direction.
The ``transient'' input methods have been removed; use @kbd{C-\} to
turn input methods on and off instead. This is in preparation for
complete removal of input methods from Emacs in version 19, and
consistent with the fact that the number of input methods we support
becomes smaller as you move back in time.
@item
Displaying line numbers for a buffer is only possibly using add-on
features, such as @code{linum-mode}, which can only display the
numbers in the display margins. Line-number display using these
features is also slow, as we firmly believe such a feature is
un-Emacsy and should not have been included in Emacs to begin with.
Consequently, @code{display-line-numbers-mode} was removed.
We disabled @code{show-paren-mode} by default, since we think the
venerable @code{blink-matching-paren} feature is more than enough, and
better fits the simplicity of past Emacs versions. It will definitely
be better when colors are removed from Emacs in the distant past.
For the same reason, sub-groups in interactive regexp searches are no
longer highlighted in distinct colors.
@item
On our permanent quest for simplifying Emacs, we've removed the
support for changing the font size by turning the mouse wheel.
On our permanent quest for simplifying Emacs, we've removed the Ispell
command @code{ispell-comment-or-string-at-point}; the old-time friend
@code{ispell-comments-and-strings} should suffice.
@item
Several commands, deemed to be unnecessary complications, have been
removed. Examples include @code{make-empty-file},
@code{font-lock-refontify}, @code{xref-find-definitions-at-mouse},
@code{make-frame-on-monitor}, and @code{diff-buffers}.
Many Gnus commands and options were deemed to unnecessarily complicate
the use of Gnus (which is too complex to begin with), and thus were
removed. This includes @code{gnus-topic-display-predicate},
@code{gnus-process-mark-toggle}, @code{gnus-registry-register-all},
@code{gnus-paging-select-next}, and many others. The @code{nnselect}
backend was deleted for the same reason.
@item
The @file{project.el} package have been redesigned to remove many
unnecessary features, so that just the bare essentials remain. We
plan on removing this package from Emacs in a previous version, but
decided to begin with removing some extra features first.
@item
To keep up with decreasing computer memory capacity and disk space, many
other functions and files have been eliminated in Emacs 26.3.
other functions and files have been eliminated in Emacs 27.2.
@end itemize

View file

@ -48,6 +48,7 @@ The ability to:
Create @strong{PostScript output} from plain-text files (special
editing modes for @LaTeX{} and @TeX{} are included).
@item
@strong{Compile} and @strong{debug} from inside Emacs.
@ -67,7 +68,7 @@ Enjoy the use of extensive @strong{merge} and @strong{diff} functions.
@item
Take advantage of built-in support for many @strong{version control
systems}, including Git, Mercurial, Bazaar, Subversion, and CVS.
systems,} including Git, Mercurial, Bazaar, Subversion, and CVS.
@item
And much more!
@ -82,8 +83,8 @@ useful to expert users. It also includes appendices with specific
material about X and GTK resources, and with details for users of
macOS and Microsoft Windows.
And when you tire of all the work you can accomplish with it, Emacs
contains games to play.
And when you tire of all the work you can accomplish with Emacs, enjoy
the games that come with it.
@strong{About the original and principal author:}
@ -92,8 +93,10 @@ Emacs in 1984/85. He has received the ACM Grace Hopper Award, a
MacArthur Foundation fellowship, the Electronic Frontier Foundation's
Pioneer award, the Takeda Award for Social/Economic Betterment, and
the ACM Software and System Award, as well as several doctorates
honoris causa.
@emph{honoris causa.}
@end quotation
@hfil
@bye
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

View file

@ -887,15 +887,19 @@ z z z}. The first @kbd{C-x z} repeats the command once, and each
subsequent @kbd{z} repeats it once again.
@findex repeat-mode
Also you can activate @code{repeat-mode} that temporarily enables
a transient mode with short keys after a limited number of commands.
@vindex repeat-exit-key
@vindex repeat-exit-timeout
Also you can activate @code{repeat-mode} that temporarily enables a
transient mode with short keys after a limited number of commands.
Currently supported shorter key sequences are @kbd{C-x u u} instead of
@kbd{C-x u C-x u} to undo many changes, @kbd{C-x o o} instead of
@kbd{C-x o C-x o} to switch several windows, @kbd{C-x @{ @{ @} @} ^ ^
v v} to resize the selected window interactively, @kbd{M-g n n p p} to
navigate @code{next-error} matches. Any other key exits transient mode
and then is executed normally. The user option @code{repeat-exit-key}
defines an additional key to exit this transient mode. Also it's
possible to break the repetition chain automatically after idle time
by customizing the user option @code{repeat-exit-timeout} to a number
of seconds.
navigate @code{next-error} matches, and @kbd{C-x ] ] [ [} to navigate
through pages. Any other key exits transient mode and then is
executed normally. The user option @code{repeat-exit-key} defines an
additional key to exit this transient mode. Also it's possible to
break the repetition chain automatically after some idle time by
customizing the user option @code{repeat-exit-timeout} to specify the
idle time in seconds after which this transient mode will be turned
off.

View file

@ -13,7 +13,7 @@
@center @titlefont{GNU Emacs Manual}
@sp 5
@center @value{EDITION} edition, for Emacs Version @value{EMACSVER}
@center @value{EDITION} edition, for Emacs version @value{EMACSVER}
@sp 5
@center by Richard M.@: Stallman et al.

View file

@ -213,7 +213,6 @@ Select a buffer to be used by next invocation of @code{next-error} and
@kindex M-g n
@kindex C-x `
@findex next-error
@findex next-error-message
@vindex next-error-message-highlight
@vindex next-error-highlight
@vindex next-error-highlight-no-select
@ -263,7 +262,9 @@ to skip any messages.
highlights the relevant source line. The duration of this highlight
is determined by the variable @code{next-error-highlight} for the locus
in the selected buffer, and @code{next-error-highlight-no-select} for
the locus in non-selected buffers.
the locus in non-selected buffers. Also you can customize the variable
@code{next-error-message-highlight} that defines how to highlight the
current error message in the buffer that contains messages.
@vindex compilation-context-lines
If the @file{*compilation*} buffer is shown in a window with a left
@ -1491,7 +1492,7 @@ Emacs Lisp Reference Manual}.
code not unlike the one produced by a C or Fortran compiler. Native
code runs even faster than byte-code. Natively-compiled Emacs Lisp
code is stored in files whose names end in @samp{.eln}. @xref{Native
Compilation,, Byte Compilation, elisp, the Emacs Lisp Reference Manual}.
Compilation,, Native Compilation, elisp, the Emacs Lisp Reference Manual}.
@findex load-file
To @dfn{load} an Emacs Lisp file, type @kbd{M-x load-file}. This

View file

@ -1363,6 +1363,20 @@ the 11 above to @samp{'(1 2 3)} and have the entry apply to the last
Thursday of January, February, and March. If the month is @code{t}, the
entry applies to all months of the year.
@findex diary-offset
@example
%%(diary-offset '(diary-float t 3 4) 2) Monthly committee meeting
@end example
@noindent
This entry applies to the Saturday after the third Thursday of each
month. The 2 specifies number of days after when the sexp
@w{@code{'(diary-float t 3 4)}} would evaluate to @code{t}. This is
useful when for example your organization has a committee meeting two
days after every monthly meeting which takes place on the third
Thursday, or if you would like to attend a virtual meeting scheduled
in a different timezone causing a difference in the date.
Each of the standard sexp diary entries takes an optional parameter
specifying the name of a face or a single-character string to use when
marking the entry in the calendar. Most generally, sexp diary entries

View file

@ -185,6 +185,11 @@ successfully.
@item --version
@opindex --version
Print Emacs version, then exit successfully.
@item --fingerprint
@opindex --fingerprint
Print the Emacs ``fingerprint'', which is used to uniquely identify
the compiled version of Emacs.
@end table
@node Initial Options
@ -266,6 +271,11 @@ disables auto-saving except in buffers for which auto-saving is
explicitly requested, and when saving files it omits the @code{fsync}
system call unless otherwise requested.
@vindex backtrace-on-error-noninteractive
Errors that occur when running a @samp{--batch} Emacs will result in
an Emacs Lisp backtrace being printed. To disable this behavior, set
@code{backtrace-on-error-noninteractive} to @code{nil}.
@item --script @var{file}
@opindex --script
@cindex script mode

View file

@ -121,7 +121,7 @@ C-k} is two key sequences, not one.
By default, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h},
@kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x
n}, @kbd{C-x r}, @kbd{C-x t}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5},
@kbd{C-x 6}, @key{ESC}, @kbd{M-g}, and @kbd{M-o}. (@key{F1} and
@kbd{C-x 6}, @key{ESC}, and @kbd{M-g}. (@key{F1} and
@key{F2} are aliases for @kbd{C-h} and @kbd{C-x 6}.) This list is not
cast in stone; if you customize Emacs, you can make new prefix keys.
You could even eliminate some of the standard ones, though this is not

View file

@ -195,7 +195,7 @@ the customization buffer:
The first line shows that the variable is named
@code{kill-ring-max}, formatted as @samp{Kill Ring Max} for easier
viewing. Its value is @samp{60}. The button labeled @samp{[Hide]},
viewing. Its value is @samp{120}. The button labeled @samp{[Hide]},
if activated, hides the variable's value and state; this is useful to
avoid cluttering up the customization buffer with very long values
(for this reason, variables that have very long values may start out
@ -1084,8 +1084,9 @@ first line:
@noindent
You can specify any number of variable/value pairs in this way, each
pair with a colon and semicolon. The special variable/value pair
@code{mode: @var{modename};}, if present, specifies a major mode. The
@var{value}s are used literally, and not evaluated.
@code{mode: @var{modename};}, if present, specifies a major mode
(without the ``-mode'' suffix). The @var{value}s are used literally,
and not evaluated.
@findex add-file-local-variable-prop-line
@findex delete-file-local-variable-prop-line
@ -1473,9 +1474,10 @@ as Dired buffers (@pxref{Dired}).
Most of the variables reflect the situation on the local machine.
Often, they must use a different value when you operate in buffers
with a remote default directory. Think about the shell to be applied
when calling @code{shell} -- it might be @file{/bin/bash} on your
local machine, and @file{/bin/ksh} on a remote machine.
with a remote default directory. Think about the behavior when
calling @code{shell} -- on your local machine, you might use
@file{/bin/bash} and rely on termcap, but on a remote machine, it may
be @file{/bin/ksh} and terminfo.
This can be accomplished with @dfn{connection-local variables}.
Directory and file local variables override connection-local
@ -1491,6 +1493,10 @@ variables/value pairs in a @dfn{profile}, using the
criteria, identifying a remote machine:
@example
(connection-local-set-profile-variables 'remote-terminfo
'((system-uses-terminfo . t)
(comint-terminfo-terminal . "dumb-emacs-ansi")))
(connection-local-set-profile-variables 'remote-ksh
'((shell-file-name . "/bin/ksh")
(shell-command-switch . "-c")))
@ -1500,13 +1506,15 @@ criteria, identifying a remote machine:
(shell-command-switch . "-c")))
(connection-local-set-profiles
'(:application tramp :machine "remotemachine") 'remote-ksh)
'(:application tramp :machine "remotemachine")
'remote-terminfo 'remote-ksh)
@end example
This code declares two different profiles, @code{remote-ksh} and
@code{remote-bash}. The profile @code{remote-ksh} is applied to all
This code declares three different profiles, @code{remote-terminfo},
@code{remote-ksh}, and @code{remote-bash}. The profiles
@code{remote-terminfo} and @code{remote-ksh} are applied to all
buffers which have a remote default directory matching the regexp
@code{"remotemachine} as host name. Such a criteria can also
@code{"remotemachine"} as host name. Such a criteria can also
discriminate for the properties @code{:protocol} (this is the Tramp
method) or @code{:user} (a remote user name). The @code{nil} criteria
matches all buffers with a remote default directory.
@ -1721,6 +1729,17 @@ previous ones, but they are specifically for file name completion.
They do not bind @key{SPC}.
@end itemize
By default, @key{TAB}, @key{SPC} and @key{?} do completion in
@code{minibuffer-local-completion-map}. If you commonly complete over
collections that have elements with space or question mark characters in
them, it may be convenient to disable completion on those keys by
putting this in your init file:
@lisp
(define-key minibuffer-local-completion-map " " 'self-insert-command)
(define-key minibuffer-local-completion-map "?" 'self-insert-command)
@end lisp
@node Rebinding
@subsection Changing Key Bindings Interactively
@cindex key rebinding, this session
@ -2355,14 +2374,19 @@ function @code{setq} to set the variable @code{fill-column}
(@pxref{Filling}) to 60.
You can set any Lisp variable with @code{setq}, but with certain
variables @code{setq} won't do what you probably want in the
init file. Some variables automatically become buffer-local
when set with @code{setq}; what you want in the init file is to set
the default value, using @code{setq-default}. Some customizable minor
mode variables do special things to enable the mode when you set them
with Customize, but ordinary @code{setq} won't do that; to enable the
mode in your init file, call the minor mode command. The
following section has examples of both of these methods.
variables @code{setq} won't do what you probably want in the init
file. Some variables automatically become buffer-local when set with
@code{setq}; what you want in the init file is to set the default
value, using @code{setq-default}. (The following section has examples
of both of these methods.)
Some customizable minor mode variables do special things to enable the
mode when you set them with Customize, but ordinary @code{setq} won't
do that; to enable the mode in your init file, call the minor mode
command. Finally, a few customizable user options are initialized in
complex ways, and these have to be set either via the customize
interface (@pxref{Customization}) or by using
@code{customize-set-variable} (@pxref{Examining}).
The second argument to @code{setq} is an expression for the new
value of the variable. This can be a constant, a variable, or a
@ -2510,6 +2534,14 @@ Turn on Auto Fill mode automatically in Text mode and related modes
(add-hook 'text-mode-hook 'auto-fill-mode)
@end example
@item
Change the coding system used when using the clipboard
(@pxref{Communication Coding}).
@example
(customize-set-variable 'selection-coding-system 'utf-8)
@end example
@item
Load the installed Lisp library named @file{foo} (actually a file
@file{foo.elc} or @file{foo.el} in a standard Emacs directory).
@ -2783,12 +2815,12 @@ Type @kbd{C-q}, followed by the key you want to bind, to insert @var{char}.
@cindex early init file
Most customizations for Emacs should be put in the normal init file.
@xref{Init File}. However, it is sometimes desirable
to have customizations that take effect during Emacs startup earlier than the
@xref{Init File}. However, it is sometimes necessary
to have customizations take effect during Emacs startup earlier than the
normal init file is processed. Such customizations can be put in the early
init file, @file{~/.config/emacs/early-init.el} or @file{~/.emacs.d/early-init.el}. This file is loaded before the
package system and GUI is initialized, so in it you can customize variables
that affect frame appearance as well as the package initialization process,
that affect the package initialization process,
such as @code{package-enable-at-startup}, @code{package-load-list}, and
@code{package-user-dir}. Note that variables like @code{package-archives}
which only affect the installation of new packages, and not the process of

View file

@ -823,7 +823,9 @@ link.
Change the mode (also called @dfn{permission bits}) of the specified
files (@code{dired-do-chmod}). @var{modespec} can be in octal or
symbolic notation, like arguments handled by the @command{chmod}
program.
program. This command does not follow symbolic links, so it reports
an error if you try to change the mode of a symbolic link on a
platform where such modes are immutable.
@findex dired-do-chgrp
@kindex G @r{(Dired)}
@ -850,8 +852,8 @@ different systems put @command{chown} in different places).
@cindex changing file time (in Dired)
@item T @var{timestamp} @key{RET}
Touch the specified files (@code{dired-do-touch}). This means
updating their modification times to the present time. This is like
the shell command @code{touch}.
updating their modification times to @var{timestamp}, which defaults
to the present time. This is like the shell command @command{touch}.
@findex dired-do-print
@kindex P @r{(Dired)}
@ -1505,16 +1507,14 @@ buffer containing image-dired, corresponding to the marked files.
You can also enter Image-Dired directly by typing @kbd{M-x
image-dired}. This prompts for a directory; specify one that has
image files. This creates thumbnails for all the images in that
directory, and displays them all in the thumbnail buffer. This
takes a long time if the directory contains many image files, and it
asks for confirmation if the number of image files exceeds
@code{image-dired-show-all-from-dir-max-files}.
directory, and displays them all in the thumbnail buffer. The
thumbnails are generated in the background and are loaded as they
become available.
With point in the thumbnail buffer, you can type @key{RET}
(@code{image-dired-display-thumbnail-original-image}) to display a
sized version of it in another window. This sizes the image to fit
the window. Use the arrow keys to move around in the buffer. For
easy browsing, use @key{SPC}
(@code{image-dired-display-thumbnail-original-image}) to display the
image in another window. Use the arrow keys to move around in the
thumbnail buffer. For easy browsing, use @key{SPC}
(@code{image-dired-display-next-thumbnail-original}) to advance and
display the next image. Typing @key{DEL}
(@code{image-dired-display-previous-thumbnail-original}) backs up to
@ -1553,6 +1553,11 @@ image. You comment a file from the thumbnail buffer by typing
@kbd{c}. You will be prompted for a comment. Type @kbd{C-t c} to add
a comment from Dired (@code{image-dired-dired-comment-files}).
@vindex image-dired-thumb-visible-marks
Files that are marked in Dired will also be marked in Image-Dired if
@code{image-dired-thumb-visible-marks} is non-@code{nil} (which is the
default).
Image-Dired also provides simple image manipulation. In the
thumbnail buffer, type @kbd{L} to rotate the original image 90 degrees
anti clockwise, and @kbd{R} to rotate it 90 degrees clockwise. This

View file

@ -150,6 +150,14 @@ gives you less jerky scrolling when you hold down @kbd{C-v}, but the
window contents after any action which scrolls into a fresh portion of
the buffer will be momentarily unfontified.
@vindex redisplay-skip-fontification-on-input
Finally, a third alternative to these variables is
@code{redisplay-skip-fontification-on-input}. If this variable is
non-@code{nil}, skip some fontifications is there's input pending.
This usually does not affect the display because redisplay is
completely skipped anyway if input was pending, but it can make
scrolling smoother by avoiding unnecessary fontification.
@vindex scroll-up
@vindex scroll-down
@findex scroll-up-line
@ -1767,6 +1775,10 @@ multiple screen lines. Setting the variable @code{truncate-lines} in
any way makes it local to the current buffer; until that time, the
default value, which is normally @code{nil}, is in effect.
Since line truncation and word wrap (described in the next section)
are contradictory, @code{toggle-truncate-lines} disables word wrap
when it turns on line truncation.
If a split window becomes too narrow, Emacs may automatically enable
line truncation. @xref{Split Window}, for the variable
@code{truncate-partial-width-windows} which controls this.
@ -1797,6 +1809,10 @@ mode is enabled, the mode line shows the string @samp{wrap} in the
mode display. The command @kbd{M-x global-visual-line-mode} toggles
Visual Line mode in all buffers.
Since word wrap and line truncation (described in the previous
section) are contradictory, turning on @code{visual-line-mode}
disables line truncation.
@findex beginning-of-visual-line
@findex end-of-visual-line
@findex next-logical-line

View file

@ -116,7 +116,7 @@ ways to customize it; it corresponds to GNU Emacs version @value{EMACSVER}.
@c See 'manual-html-mono' and 'manual-html-node' in admin/admin.el.
@ifset WWW_GNU_ORG
@html
The homepage for GNU Emacs is at
The GNU Emacs website is at
<a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
To view this manual in other formats, click
<a href="/software/emacs/manual/emacs.html">here</a>.<br>
@ -219,7 +219,7 @@ Appendices
* GNU Free Documentation License:: The license for this documentation.
* Emacs Invocation:: Hairy startup options.
* X Resources:: X resources for customizing Emacs.
* Antinews:: Information about Emacs version 26.
* Antinews:: Information about Emacs version 27.
* Mac OS / GNUstep:: Using Emacs under macOS and GNUstep.
* Microsoft Windows:: Using Emacs on Microsoft Windows and MS-DOS.
* Manifesto:: What's GNU? Gnu's Not Unix!

View file

@ -742,6 +742,17 @@ always supposed to end in newlines. Such major modes set the variable
setting the latter variable, you can control how these modes handle
final newlines.
@vindex file-preserve-symlinks-on-save
If this option is non-@code{nil} and you're visiting a file via a
symbolic link, Emacs will break the symbolic link upon saving the
buffer, and will write the buffer to a file with the same name as the
symbolic link, if the value of @code{file-precious-flag} is
non-@code{nil} (@pxref{Saving Buffers, file-precious-flag,, elisp, The
Emacs Lisp Reference Manual}). If you want Emacs to save the buffer
to the file the symbolic link points to (thereby preserving the link)
in these cases, customize the variable
@code{file-preserve-symlinks-on-save} to @code{t}.
@vindex write-region-inhibit-fsync
Normally, when a program writes a file, the operating system briefly
caches the file's data in main memory before committing the data to
@ -948,7 +959,7 @@ Manual}). For customizations, see the Custom group @code{time-stamp}.
then change your mind, you can @dfn{revert} the changes and go back to
the saved version of the file. To do this, type @kbd{C-x x g}. Since
reverting unintentionally could lose a lot of work, Emacs asks for
confirmation first.
confirmation first if the buffer is modified.
The @code{revert-buffer} command tries to position point in such a
way that, if the file was edited only slightly, you will be at
@ -991,6 +1002,17 @@ revert it automatically if it has changed---provided the buffer itself
is not modified. (If you have edited the text, it would be wrong to
discard your changes.)
@vindex revert-buffer-quick-short-answers
@findex revert-buffer-quick
The @kbd{C-x x g} keystroke is bound to the
@code{revert-buffer-quick} command. This is like the
@code{revert-buffer} command, but prompts less. Unlike
@code{revert-buffer}, it will not prompt if the current buffer visits
a file, and the buffer is not modified. It also respects the
@code{revert-buffer-quick-short-answers} user option. If this option
is non-@code{nil}, use a shorter @kbd{y/n} query instead of a longer
@kbd{yes/no} query.
You can also tell Emacs to revert buffers automatically when their
visited files change on disk; @pxref{Auto Revert}.
@ -1169,6 +1191,13 @@ visited file. (You can inhibit this by setting the variable
file name with @kbd{C-x C-w} or @code{set-visited-file-name} renames
any auto-save file to go with the new visited name.
@vindex kill-buffer-delete-auto-save-files
Killing a buffer, by default, doesn't remove the buffer's auto-save
file. If @code{kill-buffer-delete-auto-save-files} is non-@code{nil},
killing a buffer that has an auto-save file will make Emacs prompt the
user for whether the auto-save file should be deleted. (This is
inhibited if @code{delete-auto-save-files} is @code{nil}.)
@node Auto Save Control
@subsection Controlling Auto-Saving
@ -1717,12 +1746,16 @@ exists.
@kbd{M-x copy-file} copies the contents of the file @var{old} to the
file @var{new}.
@vindex copy-directory-create-symlink
@findex copy-directory
@kbd{M-x copy-directory} copies directories, similar to the
@command{cp -r} shell command. If @var{new} is a directory name, it
creates a copy of the @var{old} directory and puts it in @var{new}.
Otherwise it copies all the contents of @var{old} into a new directory
named @var{new}.
named @var{new}. If @code{copy-directory-create-symlink} is
non-@code{nil} and @var{old} is a symbolic link, this command will
copy the symbolic link. If @code{nil}, this command will follow the
link and copy the contents instead. (This is the default.)
@cindex renaming files
@findex rename-file
@ -2172,11 +2205,11 @@ window, so this is only necessary if you customize the default
behavior by using the options @code{image-auto-resize} and
@code{image-auto-resize-on-window-resize}.
@findex image-transform-fit-both
@findex image-transform-fit-to-window
@findex image-transform-set-scale
@findex image-transform-reset
To resize the image manually you can use the command
@code{image-transform-fit-both} bound to @kbd{s b}
@code{image-transform-fit-to-window} bound to @kbd{s w}
that fits the image to both the window height and width.
To scale the image specifying a scale factor, use the command
@code{image-transform-set-scale} bound to @kbd{s s}.

View file

@ -462,10 +462,9 @@ use @code{flyspell-region} or @code{flyspell-buffer} for that.
When Flyspell mode highlights a word as misspelled, you can click on
it with @kbd{mouse-2} (@code{flyspell-correct-word}) to display a menu
of possible corrections and actions. If you want this menu on
@kbd{mouse-3} instead, customize the variable
@code{flyspell-use-mouse-3-for-menu}. In addition, @kbd{C-.} or
@kbd{@key{ESC}-@key{TAB}} (@code{flyspell-auto-correct-word}) will
propose various successive corrections for the word at point, and
@kbd{mouse-3} instead, enable @code{context-menu-mode}. In addition,
@kbd{C-.} or @kbd{@key{ESC} @key{TAB}} (@code{flyspell-auto-correct-word})
will propose various successive corrections for the word at point, and
@w{@kbd{C-c $}} (@code{flyspell-correct-word-before-point}) will pop
up a menu of possible corrections. Of course, you can always correct
the misspelled word by editing it manually in any way you like.

View file

@ -366,20 +366,24 @@ This menu is for changing the default face within the window's buffer.
@xref{Text Scale}.
@end table
Some graphical applications use @kbd{mouse-3} for a mode-specific
menu. If you prefer @kbd{mouse-3} in Emacs to bring up such a menu
instead of running the @code{mouse-save-then-kill} command, rebind
@kbd{mouse-3} by adding the following line to your init file
(@pxref{Init Rebinding}):
@smallexample
(global-set-key [mouse-3]
'(menu-item "Menu Bar" ignore
:filter (lambda (_)
(if (zerop (or (frame-parameter nil 'menu-bar-lines) 0))
(mouse-menu-bar-map)
(mouse-menu-major-mode-map)))))
@end smallexample
@cindex context menu
@findex context-menu-mode
@vindex context-menu-functions
@kindex Down-mouse-3
@kindex S-F10
Many GUI applications use @kbd{mouse-3} to display @dfn{context
menus}: menus that provide access to various pertinent settings and
actions for the location and context of the mouse click. If you
prefer this in Emacs over the default function of @kbd{mouse-3}, which
is bound to the @code{mouse-save-then-kill} command (@pxref{Mouse
Commands}), you can enable the minor mode @code{context-menu-mode}.
Then Emacs will show context menus when you click @kbd{mouse-3}. The
exact contents of these context menus depends on the current major
mode and the buffer contents around the place where you click the
mouse. To customize the contents of the context menu, you can use the
variable @code{context-menu-functions} (@pxref{Major Mode
Conventions,,, elisp, The Emacs Lisp Reference Manual}).
You can also invoke the context menu by pressing @kbd{S-@key{F10}}.
@node Mode Line Mouse
@section Mode Line Mouse Commands
@ -448,7 +452,14 @@ buffer to select:
@item C-x 5 2
@kindex C-x 5 2
@findex make-frame-command
Create a new frame (@code{make-frame-command}).
Create a new frame using the default frame parameters
(@code{make-frame-command}).
@item C-x 5 c
@kindex C-x 5 c
@findex clone-frame
Create a new frame using the window configuration and frame parameters
of the current frame (@code{clone-frame}).
@item C-x 5 b @var{bufname} @key{RET}
Select buffer @var{bufname} in another frame. This runs
@ -480,9 +491,10 @@ frame. This runs @code{find-file-read-only-other-frame}.
@xref{Visiting}.
@item C-x 5 5
A more general prefix command affects the buffer displayed by the next
command invoked immediately after this prefix command. It requests
the buffer of the next command to be displayed in another frame.
A more general prefix command that affects the buffer displayed by the
next command invoked immediately after this prefix command
(@code{other-frame-prefix}). It requests the buffer of the next
command to be displayed in another frame.
@end table
You can control the appearance and behavior of the newly-created
@ -1217,7 +1229,9 @@ the use of menu bars at startup, customize the variable
terminals, where this makes one additional line available for text.
If the menu bar is off, you can still pop up a menu of its contents
with @kbd{C-mouse-3} on a display which supports pop-up menus.
@xref{Menu Mouse Clicks}.
Or you can enable @code{context-menu-mode} and customize the variable
@code{context-menu-functions} to pop up a context menu with
@kbd{mouse-3}. @xref{Menu Mouse Clicks}.
@xref{Menu Bar}, for information on how to invoke commands with the
menu bar. @xref{X Resources}, for how to customize the menu bar
@ -1267,19 +1281,23 @@ displayed by moving the mouse pointer to the top of the screen.
@section Tab Bars
@cindex tab bar mode
@cindex mode, Tab Bar
@cindex tabs, tabbar
@cindex tabs, on the Tab Bar
On graphical displays and on text terminals, Emacs can optionally
display a @dfn{Tab Bar} at the top of each frame, just below the menu
bar. The Tab Bar is a row of @dfn{tabs}---buttons that you can click
to switch between window configurations on that frame.
bar (@pxref{Menu Bars}) and above or below the tool bar (@pxref{Tool
Bars}) depending on the variable @code{tab-bar-position}.
The Tab Bar is a row of @dfn{tabs}---buttons that you can click to
switch between window configurations.
Each tab on the Tab Bar represents a named persistent window
configuration. Its name is composed from the list of names of buffers
visible in windows of that window configuration. Clicking on the tab
switches to the window configuration recorded by the tab; it is a
configuration of windows and buffers which was previously used in the
frame when that tab was the current tab.
configuration of its frame, i.e., how that frame is partitioned into
windows and which buffer is displayed in each window. The tab's name
is composed from the list of names of buffers shown in windows of that
window configuration. Clicking on the tab switches to the window
configuration recorded by the tab; it is a configuration of windows
and buffers which was previously used in the frame when that tab was
the current tab.
If you are using the desktop library to save and restore your
sessions (@pxref{Saving Emacs Sessions}), the tabs from the Tab Bar are
@ -1288,28 +1306,40 @@ configurations, and will be available after restoring the session.
Note that the Tab Bar is different from the Tab Line (@pxref{Tab Line}).
Whereas tabs on the Tab Line at the top of each window are used to
switch between buffers, tabs on the Tab Bar at the top of each frame
are used to switch between window configurations containing several
windows with buffers.
switch between buffers in the window, tabs on the Tab Bar at the top
of each frame are used to switch between window configurations
containing several windows showing one or more buffers.
@findex tab-bar-mode
To toggle the use of tab bars, type @kbd{M-x tab-bar-mode}. This
To toggle the use of Tab Bars, type @kbd{M-x tab-bar-mode}. This
command applies to all frames, including frames yet to be created. To
control the use of tab bars at startup, customize the variable
@code{tab-bar-mode}.
@code{tab-bar-mode} and save your customization.
@vindex tab-bar-show
The variable @code{tab-bar-show} controls whether the Tab Bar mode
is turned on automatically. If the value is @code{t}, then
@code{tab-bar-mode} is enabled when using the commands that create new
tabs. The value @code{1} hides the tab bar when it has only one tab,
and shows it again when more tabs are created. The value @code{nil}
always keeps the tab bar hidden; in this case it's still possible to
switch between named window configurations without the tab bar by
using @kbd{M-x tab-next}, @kbd{M-x tab-switcher}, and other commands
that provide completion on tab names. Also it's possible to create
and close tabs without the tab bar by using commands @kbd{M-x
tab-new}, @kbd{M-x tab-close}, etc.
and shows it again when more tabs are created. More generally, a
value that is a non-negative integer causes the Tab Bar to be
displayed only if the number of tabs is greater than that integer.
The value @code{nil} always keeps the Tab Bar hidden; in this case
it's still possible to switch between named window configurations
without displaying the Tab Bar by using @kbd{M-x tab-next}, @kbd{M-x
tab-switcher}, and other commands that provide completion on tab
names. Also it's possible to create and close tabs without the Tab
Bar by using commands @kbd{M-x tab-new}, @kbd{M-x tab-close}, etc.
Note that a numerical value of @code{tab-bar-show} can cause the Tab
Bar to be displayed on some frames, but not on others, depending on
the number of tabs created on each frame.
@findex toggle-frame-tab-bar
To toggle the use of the Tab Bar only on the selected frame, type
@kbd{M-x toggle-frame-tab-bar}. This command allows to enable the
display of the Tab Bar on some frames and disable it on others,
regardless of the values of @code{tab-bar-mode} and @code{tab-bar-show}.
@kindex C-x t
The prefix key @kbd{C-x t} is analogous to @kbd{C-x 5}.
@ -1322,29 +1352,41 @@ buffer to select. The following commands can be used to select a buffer
in a new tab:
@table @kbd
@item C-x t 2
@kindex C-x t 2
@findex tab-new
@vindex tab-bar-tab-name-function
@item C-x t 2
Add a new tab (@code{tab-new}). You can control the choice of the
buffer displayed in a new tab by customizing the variable
@code{tab-bar-new-tab-choice}.
@code{tab-bar-new-tab-choice}. You can control the names given by
default to new tabs by customizing the variable
@code{tab-bar-tab-name-function}.
@kindex C-x t b
@findex switch-to-buffer-other-tab
@item C-x t b @var{bufname} @key{RET}
Select buffer @var{bufname} in another tab. This runs
@code{switch-to-buffer-other-tab}.
@kindex C-x t f
@findex find-file-other-tab
@item C-x t f @var{filename} @key{RET}
Visit file @var{filename} and select its buffer in another tab. This
runs @code{find-file-other-tab}. @xref{Visiting}.
Visit the file @var{filename} (@pxref{Visiting}) and select its buffer
in another tab. This runs @code{find-file-other-tab}.
@kindex C-x t d
@findex dired-other-tab
@item C-x t d @var{directory} @key{RET}
Select a Dired buffer for directory @var{directory} in another tab.
This runs @code{dired-other-tab}. @xref{Dired}.
Edit the specified @var{directory} (@pxref{Dired}) in another tab.
This runs @code{dired-other-tab}.
@kindex C-x t t
@findex other-tab-prefix
@item C-x t t
A more general prefix command affects the buffer displayed by the next
command invoked immediately after this prefix command. It requests
the buffer of the next command to be displayed in another tab.
This is a prefix command (@code{other-tab-prefix}) that affects the
next command invoked immediately after this prefix command. It
requests the buffer displayed by the next command to be shown in
another tab.
@end table
@vindex tab-bar-new-tab-choice
@ -1360,17 +1402,18 @@ By default, a new tab is added on the right side of the current tab.
The following commands can be used to delete tabs:
@table @kbd
@item C-x t 0
@kindex C-x t 0
@findex tab-close
Close the selected tab (@code{tab-close}). It has no effect if there
@vindex tab-bar-close-last-tab-choice
@item C-x t 0
Close the selected tab (@code{tab-close}). This has no effect if there
is only one tab, unless the variable @code{tab-bar-close-last-tab-choice}
is customized to a non-default value.
@item C-x t 1
@kindex C-x t 1
@findex tab-close-other
Close all tabs on the selected frame, except the selected one.
@item C-x t 1
Close all tabs, except the selected tab, on the selected frame.
@end table
@vindex tab-bar-close-tab-select
@ -1384,77 +1427,113 @@ a recently used tab.
The following commands can be used to switch between tabs:
@table @kbd
@item C-x t o
@itemx C-@key{TAB}
@kindex C-x t o
@kindex C-TAB
@findex tab-next
Switch to the next tab. If you repeat this command, it cycles through
all the tabs on the selected frame. With a positive numeric argument
@var{n}, it switches to the next @var{n}th tab; with a negative
argument @minus{}@var{n}, it switches back to the previous @var{n}th
tab.
@item C-x t o
@itemx C-@key{TAB}
Switch to the next tab (@code{tab-next}). If you repeat this command,
it cycles through all the tabs on the selected frame. With a positive
numeric argument @var{n}, it switches to the @var{n}th next tab; with
a negative argument @minus{}@var{n}, it switches back to the @var{n}th
previous tab.
@item S-C-@key{TAB}
@kindex S-C-TAB
@findex tab-previous
Switch to the previous tab. With a positive numeric argument @var{n},
it switches to the previous @var{n}th tab; with a negative argument
@minus{}@var{n}, it switches back to the next @var{n}th tab.
@item S-C-@key{TAB}
Switch to the previous tab (@code{tab-previous}). With a positive
numeric argument @var{n}, it switches to the @var{n}th previous tab;
with a negative argument @minus{}@var{n}, it switches to the
@var{n}th next tab.
@kindex C-x t @key{RET}
@findex tab-switch
@item C-x t @key{RET} @var{tabname} @key{RET}
Switch to the tab by its name, with completion on all tab names.
Default values are tab names sorted by recency, so you can use
@kbd{M-n} (@code{next-history-element}) to get the name of the last
visited tab, the second last, and so on.
Switch to the tab by its name (@code{tab-switch}), with completion on
all tab names. The default value and the ``future history'' of tab
names is sorted by recency, so you can use @kbd{M-n}
(@code{next-history-element}) to get the name of the last visited tab,
the second last, and so on.
@item @var{modifier}-@var{tabnumber}
@kindex C-1, tab bar
@kindex M-1, tab bar
@findex tab-select
Switch to the tab by its number. After customizing the variable
@code{tab-bar-select-tab-modifiers} to specify a @var{modifier} key, you
can select a tab by its ordinal number using the specified modifier in
combination with the tab number to select. To display the tab number
alongside the tab name, you can customize another variable
@code{tab-bar-tab-hints}. This will help you to decide what key to press
to select the tab by its number.
@vindex tab-bar-select-tab-modifiers
@vindex tab-bar-tab-hints
@item @var{modifier}-@var{tab-number}
Switch to the tab by its number @var{tab-number} (@code{tab-select}).
After customizing the variable @code{tab-bar-select-tab-modifiers} to
specify one or more @var{modifier} keys, you can select a tab by its
ordinal number using one of the specified modifiers in combination
with the tab number to select. The number 9 can be used to select the
last tab. You can select any modifiers supported by Emacs,
@pxref{Modifier Keys}. To display the tab number alongside the tab
name, you can customize another variable @code{tab-bar-tab-hints}.
This will help you decide which numerical key to press to select the
tab by its number.
@item @var{modifier}-@kbd{0}
@kindex C-9, tab bar
@kindex M-9, tab bar
@findex tab-last
@item @var{modifier}-@kbd{9}
Switch to the last tab (@code{tab-last}). The key combination is
the modifier key defined by @code{tab-bar-select-tab-modifiers} and
the key @kbd{9}. With a numeric argument @var{n}, switch to the
@var{n}th last tab.
@kindex C-0, tab bar
@kindex M-0, tab bar
@findex tab-recent
Switch to the recent tab. The key combination is the modifier key
defined by @code{tab-bar-select-tab-modifiers} and the key @kbd{0}.
With a numeric argument @var{n}, switch to the @var{n}th recent tab.
@item @var{modifier}-@kbd{0}
Switch to the recent tab (@code{tab-recent}). The key combination is
the modifier key defined by @code{tab-bar-select-tab-modifiers} and
the key @kbd{0}. With a numeric argument @var{n}, switch to the
@var{n}th recent tab.
@end table
The following commands can be used to operate on tabs:
@table @kbd
@item C-x t r @var{tabname} @key{RET}
@kindex C-x t r
@findex tab-rename
Rename the current tab to @var{tabname}. You can control the
programmatic name given to a tab by default by customizing the
variable @code{tab-bar-tab-name-function}.
@item C-x t r @var{tabname} @key{RET}
Rename the current tab to @var{tabname} (@code{tab-rename}).
@item C-x t m
@kindex C-x t m
@findex tab-move
Move the current tab @var{n} positions to the right with a positive
numeric argument @var{n}. With a negative argument @minus{}@var{n},
move the current tab @var{n} positions to the left.
@item C-x t m
Move the current tab one position to the right (@code{tab-move}).
With a positive numeric argument @var{n}, move it that many positions
to the right; with a negative argument @minus{}@var{n}, move it
@var{n} positions to the left.
@end table
You can use the mouse to operate on tabs. Clicking @kbd{mouse-2}
closes the tab. Clicking @kbd{mouse-3} pops up the context menu with
the items that operate on the clicked tab. Dragging the tab with
@kbd{mouse-1} moves it to another position on the tab bar. Mouse
wheel scrolling switches to the next or previous tab. Holding down
the @key{SHIFT} key during scrolling moves the tab to the left or right.
@findex tab-bar-history-mode
You can enable @code{tab-bar-history-mode} to remember window
configurations used in every tab, and restore them.
configurations used in every tab, and later restore them.
@table @kbd
@item tab-bar-history-back
@findex tab-bar-history-back
@item M-x tab-bar-history-back
Restore a previous window configuration used in the current tab.
This navigates back in the history of window configurations.
@item tab-bar-history-forward
@findex tab-bar-history-forward
@item M-x tab-bar-history-forward
Cancel restoration of the previous window configuration.
This navigates forward in the history of window configurations.
This moves forward in the history of window configurations.
@end table
It's possible to customize the items displayed on the tab bar
by the user option @code{tab-bar-format}.
@node Dialog Boxes
@section Using Dialog Boxes
@cindex dialog boxes

View file

@ -86,8 +86,8 @@ delimiter for you (@pxref{Matching,,Matching Parens}).
@anchor{Glossary---Balanced Expression}
@item Balanced Expressions
A balanced expression is a syntactically recognizable expression, such
as a symbol, number, string constant, block, or parenthesized expression
in C@. @xref{Expressions,Balanced Expressions}.
as a symbol (q.v.@:), number, string constant, block, or parenthesized
expression in C@. @xref{Expressions,Balanced Expressions}.
@item Balloon Help
@xref{Glossary---Tooltips}.
@ -238,7 +238,7 @@ a key binding in Emacs or to be invoked by its name
@anchor{Glossary---Command Name}
@item Command Name
A command name is the name of a Lisp symbol that is a command
A command name is the name of a Lisp symbol (q.v.@:) that is a command
(@pxref{Commands}). You can invoke any command by its name using
@kbd{M-x} (@pxref{M-x,M-x,Running Commands by Name}).
@ -1113,7 +1113,7 @@ Emacs. @xref{Query Replace}.
@anchor{Glossary---Quitting}
@item Quitting
Quitting means canceling a partially typed command or a running
command, using @kbd{C-g} (or @kbd{C-@key{BREAK}} on MS-DOS). @xref{Quitting}.
command, using @kbd{C-g} (or @kbd{C-@key{Break}} on MS-DOS). @xref{Quitting}.
@item Quoting
Quoting means depriving a character of its usual special significance.
@ -1334,6 +1334,13 @@ allowed as well.
@item String Substitution
@xref{Glossary---Global Substitution}.
@item Symbol
A symbol in Emacs Lisp is an object with a name. The object can be a
variable (q.v.@:), a function or command (q.v.@:), or a face (q.v.@:).
The symbol's name serves as the printed representation of the symbol.
@xref{Symbol Type,, Symbol Type, elisp, The Emacs Lisp Reference
Manual}.
@item Syntax Highlighting
@xref{Glossary---Font Lock}.

View file

@ -278,6 +278,15 @@ name is defined as a Lisp function. Type @kbd{C-g} to cancel the
@kbd{C-h f} command if you don't really want to view the
documentation.
@vindex help-enable-symbol-autoload
If you request help for an autoloaded function whose @code{autoload}
form (@pxref{Autoload,,, elisp, The Emacs Lisp Reference Manual})
doesn't provide a doc string, the @file{*Help*} buffer won't have any
doc string to display. In that case, if
@code{help-enable-symbol-autoload} is non-@code{nil}, Emacs will try
to load the file in which the function is defined to see whether
there's a doc string there.
@findex shortdoc-display-group
You can get an overview of functions relevant for a particular topic
by using the @kbd{M-x shortdoc-display-group} command. This will
@ -310,6 +319,14 @@ variable, or a face. If the symbol has more than one definition, like
it has both definition as a function and as a variable, this command
will show the documentation of all of them, one after the other.
@vindex completions-detailed
If the @code{completions-detailed} user option is non-@code{nil},
some commands provide details about the possible values when
displaying completions. For instance, @kbd{C-h o TAB} will then
include the first line of the doc string, and will also say whether
each symbol is a function or a variable (and so on). Which details
are included varies depending on the command used.
@node Apropos
@section Apropos
@cindex apropos
@ -426,11 +443,13 @@ alphabetical order, change the variable
@node Help Mode
@section Help Mode Commands
@findex help-mode
@cindex help mode
Help buffers provide the same commands as View mode (@pxref{View
Mode}); for instance, @key{SPC} scrolls forward, and @key{DEL} or
@kbd{S-@key{SPC}} scrolls backward. A few special commands are also
provided:
Help buffers have Help mode as their major mode. Help mode provides
the same commands as View mode (@pxref{View Mode}); for instance,
@key{SPC} scrolls forward, and @key{DEL} or @kbd{S-@key{SPC}} scrolls
backward. It also provides a few special commands:
@table @kbd
@item @key{RET}
@ -442,15 +461,18 @@ Move point back to the previous hyperlink (@code{backward-button}).
@item mouse-1
@itemx mouse-2
Follow a hyperlink that you click on.
@item n
@itemx p
Move forward and back between pages in the Help buffer.
@item C-c C-c
Show all documentation about the symbol at point
(@code{help-follow-symbol}).
@item C-c C-f
@itemx r
Go forward to the next help topic (@code{help-go-forward}).
Go forward in history of help commands (@code{help-go-forward}).
@item C-c C-b
@itemx l
Go back to the previous help topic (@code{help-go-back}).
Go back in history of help commands (@code{help-go-back}).
@item s
View the source of the current help topic (if any)
(@code{help-view-source}).
@ -479,6 +501,30 @@ C-b} or @kbd{l} (@code{help-go-back}). While retracing your steps,
you can go forward by using @kbd{C-c C-f} or @kbd{r}
(@code{help-go-forward}).
@kindex TAB @r{(Help mode)}
@findex forward-button
@kindex S-TAB @r{(Help mode)}
@findex backward-button
To move between hyperlinks in a help buffer, use @key{TAB}
(@code{forward-button}) to move forward to the next hyperlink and
@kbd{S-@key{TAB}} (@code{backward-button}) to move back to the
previous hyperlink. These commands act cyclically; for instance,
typing @key{TAB} at the last hyperlink moves back to the first
hyperlink.
@kindex n @r{(Help mode)}
@kindex p @r{(Help mode)}
@findex help-goto-next-page
@findex help-goto-previous-page
Help buffers produced by some Help commands (like @kbd{C-h b}, which
shows a long list of key bindings) are divided into pages by the
@samp{^L} character. In such buffers, the @kbd{n}
(@code{help-goto-next-page}) command will take you to the next start
of page, and the @kbd{p} (@code{help-goto-previous-page}) command will
take you to the previous start of page. This way you can quickly
navigate between the different kinds of documentation in a help
buffer.
@cindex URL, viewing in help
@cindex help, viewing web pages
@cindex viewing web pages in help
@ -488,16 +534,6 @@ code definitions, and URLs (web pages). The first two are opened in
Emacs, and the third using a web browser via the @code{browse-url}
command (@pxref{Browse-URL}).
@kindex TAB @r{(Help mode)}
@findex forward-button
@kindex S-TAB @r{(Help mode)}
@findex backward-button
In a help buffer, @key{TAB} (@code{forward-button}) moves point
forward to the next hyperlink, while @kbd{S-@key{TAB}}
(@code{backward-button}) moves point back to the previous hyperlink.
These commands act cyclically; for instance, typing @key{TAB} at the
last hyperlink moves back to the first hyperlink.
To view all documentation about any symbol in the text, move point
to the symbol and type @kbd{C-c C-c} (@code{help-follow-symbol}).
This shows the documentation for all the meanings of the symbol---as a
@ -629,14 +665,14 @@ Emacs Lisp Reference Manual}).
@findex describe-prefix-bindings
You can get a list of subcommands for a particular prefix key by
typing @kbd{C-h}, @kbd{?}, or @key{f1}
typing @kbd{C-h}, @kbd{?}, or @key{F1}
(@code{describe-prefix-bindings}) after the prefix key. (There are a
few prefix keys for which not all of these keys work---those that
provide their own bindings for that key. One of these prefix keys
is @key{ESC}, because @kbd{@key{ESC} C-h} and @kbd{@key{ESC} ?} are
actually @kbd{C-M-h} (@code{mark-defun}) and @kbd{M-?}
(@code{xref-find-references}), respectively. However,
@w{@kbd{@key{ESC} @key{f1}}} works fine.)
@w{@kbd{@key{ESC} @key{F1}}} works fine.)
@findex describe-keymap
Finally, @kbd{M-x describe-keymap} prompts for the name of a keymap,

View file

@ -353,7 +353,7 @@ other ways to move text around.)
@vindex kill-ring-max
The maximum number of entries in the kill ring is controlled by the
variable @code{kill-ring-max}. The default is 60. If you make a new
variable @code{kill-ring-max}. The default is 120. If you make a new
kill when this limit has been reached, Emacs makes room by deleting
the oldest entry in the kill ring.
@ -562,6 +562,14 @@ new yank to the clipboard.
To prevent kill and yank commands from accessing the clipboard,
change the variable @code{select-enable-clipboard} to @code{nil}.
@findex yank-media
Programs can put other things than plain text on the clipboard. For
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}).
@cindex clipboard manager
@vindex x-select-enable-clipboard-manager
Many X desktop environments support a feature called the

View file

@ -102,7 +102,7 @@ are in the process of defining one, or calls the last macro
otherwise.) You can also supply @key{F4} with a numeric prefix
argument @samp{n}, which means to invoke the macro @samp{n} times. An
argument of zero repeats the macro indefinitely, until it gets an
error or you type @kbd{C-g} (or, on MS-DOS, @kbd{C-@key{BREAK}}).
error or you type @kbd{C-g} (or, on MS-DOS, @kbd{C-@key{Break}}).
The above example demonstrates a handy trick that you can employ
with keyboard macros: if you wish to repeat an operation at regularly
@ -180,11 +180,11 @@ define it, so @kbd{C-u 4 C-x )} executes the macro immediately 3
additional times.
@findex kdb-macro-redisplay
@kindex C-x C-k Q
@kindex C-x C-k d
While executing a long-running keyboard macro, it can sometimes be
useful to trigger a redisplay (to show how far we've gotten). The
@kbd{C-x C-k Q} can be used for this. As a not very useful example,
@kbd{C-x ( M-f C-x C-k Q C-x )} will create a macro that will
@kbd{C-x C-k d} command can be used for this. As a not very useful
example, @kbd{C-x ( M-f C-x C-k d C-x )} will create a macro that will
redisplay once per iteration when saying @kbd{C-u 42 C-x e}.
@node Keyboard Macro Ring

View file

@ -45,10 +45,11 @@ from running the command by name.
@cindex obsolete command
When @kbd{M-x} completes on commands, it ignores the commands that
are declared @dfn{obsolete}; for these, you will have to type their
full name. (Obsolete commands are those for which newer, better
alternatives exist, and which are slated for removal in some future
Emacs release.)
were declared @dfn{obsolete} in any previous major version of Emacs;
for these, you will have to type their full name. Commands that were
marked obsolete in the current version of Emacs are listed. (Obsolete
commands are those for which newer, better alternatives exist, and
which are slated for removal in some future Emacs release.)
@vindex read-extended-command-predicate
In addition, @kbd{M-x} completion can exclude commands that are not

View file

@ -290,7 +290,7 @@ The default behavior is to save all file-visiting buffers.
@cindex using Nextstep services (macOS)
Emacs also allows users to make use of Nextstep services, via a set
of commands whose names begin with @samp{ns-service-} and end with the
name of the service. Type @kbd{M-x ns-service-@key{TAB}} to
name of the service. Type @kbd{M-x ns-service- @key{TAB}} to
see a list of these commands. These functions either operate on
marked text (replacing it with the result) or take a string argument
and return the result as a string. You can also use the Lisp function

View file

@ -493,7 +493,7 @@ action on the current VC fileset: either registering it with a version
control system, or committing it, or unlocking it, or merging changes
into it. The precise actions are described in detail in the following
subsections. You can use @kbd{C-x v v} either in a file-visiting
buffer or in a VC Directory buffer.
buffer, in a Dired buffer, or in a VC Directory buffer.
Note that VC filesets are distinct from the named filesets used
for viewing and visiting files in functional groups
@ -945,7 +945,7 @@ the author's description of the changes in the revision on the current
line.
@item w
Annotate the working revision--the one you are editing. If you used
Annotate the working revision---the one you are editing. If you used
@kbd{p} and @kbd{n} to browse to other revisions, use this key to
return to your working revision.
@ -1136,13 +1136,17 @@ Revert the work file(s) in the current VC fileset to the last revision
@findex vc-revert
@vindex vc-revert-show-diff
If you want to discard all the changes you have made to the current
VC fileset, type @kbd{C-x v u} (@code{vc-revert}). This shows
you a diff between the work file(s) and the revision from which you
started editing, and asks for confirmation for discarding the changes.
If you agree, the fileset is reverted. If you don't want @kbd{C-x v
u} to show a diff, set the variable @code{vc-revert-show-diff} to
@code{nil} (you can still view the diff directly with @kbd{C-x v =};
@pxref{Old Revisions}).
VC fileset, type @kbd{C-x v u} (@code{vc-revert}). This will ask you
for confirmation before discarding the changes. If you agree, the
fileset is reverted.
If @code{vc-revert-show-diff} is non-@code{nil}, this command will
show you a diff between the work file(s) and the revision from which
you started editing. Afterwards, the diff buffer will either be
killed (if this variable is @code{kill}), or the buffer will be buried
(any other non-@code{nil} value). If you don't want @kbd{C-x v u} to
show a diff, set this variable to @code{nil} (you can still view the
diff directly with @kbd{C-x v =}; @pxref{Old Revisions}).
On locking-based version control systems, @kbd{C-x v u} leaves files
unlocked; you must lock again to resume editing. You can also use
@ -1731,7 +1735,8 @@ the full file name of the file to visit, you can type only the file's
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 default to visit.
name at point, this command offers that file as the first element of
the ``future history''.
@findex project-find-regexp
The command @kbd{C-x p g} (@code{project-find-regexp}) is similar to
@ -1743,10 +1748,12 @@ commands (@pxref{Xref Commands}). When invoked with a prefix
argument, this command additionally prompts for the base directory
from which to start the search; this allows, for example, to limit the
search only to project files under a certain subdirectory of the
project root.
project root. The way this command displays the matches is affected
by the value of @code{xref-auto-jump-to-first-xref} (@pxref{Identifier
Search}).
@findex project-search
@kbd{M-x project-search} is an interactive variant of
@kbd{M-x project-search} is a sequential variant of
@code{project-find-regexp}. It prompts for a regular expression to
search in the current project's files, but instead of finding all the
matches and displaying them, it stops when it finds a match and visits
@ -1762,8 +1769,13 @@ Replace}), and continues to the next match after you respond. If your
response causes Emacs to exit the query-replace loop, you can later
continue with @w{@kbd{M-x fileloop-continue @key{RET}}}.
@findex project-find-dir
The command @kbd{C-x p d} (@code{project-find-dir}) prompts you to
choose a directory inside the current project, with completion.
And opens a Dired buffer (@pxref{Dired}) listing the files in it.
@findex project-dired
The command @kbd{C-x p d} (@code{project-dired}) opens a Dired
The command @kbd{C-x p D} (@code{project-dired}) opens a Dired
buffer (@pxref{Dired}) listing the files in the current project's root
directory.
@ -1854,14 +1866,14 @@ records the list of known projects. It defaults to the file
@subsection Managing the Project List File
@table @kbd
@item M-x project-remove-known-project
@item M-x project-forget-project
Remove a known project from the @code{project-list-file}.
@end table
@findex project-remove-known-project
@findex project-forget-project
Normally Emacs automatically adds and removes projects to and from the
@code{project-list-file}, but sometimes you may want to manually edit
the available projects. @kbd{M-x project-remove-known-project}
the available projects. @kbd{M-x project-forget-project}
prompts you to choose one of the available projects, and then removes
it from the file.
@ -2127,7 +2139,10 @@ Find definition of identifier, and display it in a new frame
Find definition of identifier at mouse click.
@item M-,
Go back to where you previously invoked @kbd{M-.} and friends
(@code{xref-pop-marker-stack}).
(@code{xref-go-back}).
@item C-M-,
Go forward to where you previously invoked @kbd{M-,}
(@code{xref-go-forward}).
@item M-x xref-etags-mode
Switch @code{xref} to use the @code{etags} backend.
@end table
@ -2135,24 +2150,15 @@ Switch @code{xref} to use the @code{etags} backend.
@kindex M-.
@findex xref-find-definitions
@vindex xref-prompt-for-identifier
@kbd{M-.}@: (@code{xref-find-definitions}) shows the definitions of
@kbd{M-.}@: (@code{xref-find-definitions}) shows the definition of
the identifier at point. With a prefix argument, or if there's no
identifier at point, it prompts for the identifier. (If you want it
to always prompt, customize @code{xref-prompt-for-identifier} to
@code{t}.)
If the specified identifier has only one definition, the command jumps
to it. If the identifier has more than one possible definition (e.g.,
in an object-oriented language, or if there's a function and a
variable by the same name), the command shows the candidate
definitions in the @file{*xref*} buffer, together with the files in
which these definitions are found. Selecting one of these candidates
by typing @kbd{@key{RET}} or clicking @kbd{mouse-2} will pop a buffer
showing the corresponding definition.
When entering the identifier argument to @kbd{M-.}, the usual
minibuffer completion commands can be used (@pxref{Completion}), with
the known identifier names as completion candidates.
When entering the identifier argument to @kbd{M-.}, you can use the
usual minibuffer completion commands (@pxref{Completion}), with the
known identifier names being the completion candidates.
@kindex C-x 4 .
@findex xref-find-definitions-other-window
@ -2170,29 +2176,48 @@ former is @w{@kbd{C-x 4 .}}
or around the place of a mouse event. This command is intended to be
bound to a mouse event, such as @kbd{C-M-mouse-1}, for example.
@findex xref-find-apropos
@kindex C-M-.
The command @kbd{C-M-.} (@code{xref-find-apropos}) finds the
definitions of one or more identifiers that match a specified regular
expression. It is just like @kbd{M-.} except that it does regexp
@findex xref-find-apropos
@vindex tags-apropos-additional-actions
The command @kbd{C-M-.}@: (@code{xref-find-apropos}) is like
@code{apropos} for tags (@pxref{Apropos}). It displays a list of
identifiers in the selected tags table whose names match the specified
@var{regexp}. This is just like @kbd{M-.}, except that it does regexp
matching of identifiers instead of matching symbol names as fixed
strings.
strings. By default, the command pops up the @file{*xref*} buffer,
like @kbd{M-.}, but you can display additional output by customizing
the variable @code{tags-apropos-additional-actions}; see its
documentation for details.
When any of the above commands finds more than one definition, it
presents the @file{*xref*} buffer showing the definition candidates.
In that buffer, you have several specialized commands, described in
@ref{Xref Commands}.
@vindex xref-auto-jump-to-first-definition
If any of the above commands finds more than one matching
definition, it by default pops up the @file{*xref*} buffer showing the
matching candidates. (@kbd{C-M-.}@: @emph{always} pops up the
@file{*xref*} buffer if it finds at least one match.) The candidates
are normally shown in that buffer as the name of a file and the
matching identifier(s) in that file. In that buffer, you can select
any of the candidates for display, and you have several additional
commands, described in @ref{Xref Commands}. However, if the value of
the variable @code{xref-auto-jump-to-first-definition} is @code{move},
the first of these candidates is automatically selected in the
@file{*xref*} buffer, and if it's @code{t} or @code{show}, the first
candidate is automatically shown in its own window; @code{t} also
selects the window showing the first candidate. The default value is
@code{nil}, which just shows the candidates in the @file{*xref*}
buffer, but doesn't select any of them.
@kindex M-,
@findex xref-pop-marker-stack
@vindex xref-marker-ring-length
To go back to places @emph{from where} you found the definition,
use @kbd{M-,} (@code{xref-pop-marker-stack}). It jumps back to the
@findex xref-go-back
To go back to places @emph{from where} you've displayed the definition,
use @kbd{M-,} (@code{xref-go-back}). It jumps back to the
point of the last invocation of @kbd{M-.}. Thus you can find and
examine the definition of something with @kbd{M-.} and then return to
where you were with @kbd{M-,}. @kbd{M-,} allows you to retrace your
steps to a depth determined by the variable
@code{xref-marker-ring-length}, which defaults to 16.
where you were with @kbd{M-,}.
@kindex C-M-,
@findex xref-go-forward
Go forward to a place from where you previously went back using @kbd{M-,}.
This is useful if you find that you went back too far.
@findex xref-etags-mode
Some major modes install @code{xref} support facilities that might
@ -2218,10 +2243,16 @@ the special XREF mode:
@table @kbd
@item @key{RET}
@itemx mouse-2
@itemx mouse-1
Display the reference on the current line (@code{xref-goto-xref}).
With prefix argument, also bury the @file{*xref*} buffer.
@item mouse-2
@findex xref-select-and-show-xref
The same as @code{mouse-1}, but make the window displaying the
@file{*xref*} buffer the selected window
(@code{xref-select-and-show-xref}).
@item n
@itemx .
@findex xref-next-line
@ -2257,10 +2288,15 @@ the match with @var{replacement}. @xref{Identifier Search}.
@item g
@findex xref-revert-buffer
Refresh the contents of the @file{*xref*} buffer
(@code{xref-revert-buffer}.
(@code{xref-revert-buffer}).
@item M-,
@findex xref-quit-and-pop-marker-stack
Quit the window showing the @file{*xref*} buffer, and then jump to the
previous Xref stack location (@code{xref-quit-and-pop-marker-stack}).
@findex xref-quit
@item q
@findex xref-quit
Quit the window showing the @file{*xref*} buffer (@code{xref-quit}).
@end table
@ -2311,6 +2347,16 @@ identifier, showing the file name and the line where the identifier is
referenced. The XREF mode commands are available in this buffer, see
@ref{Xref Commands}.
@vindex xref-auto-jump-to-first-xref
If the value of the variable @code{xref-auto-jump-to-first-xref} is
@code{t}, @code{xref-find-references} automatically jumps to the first
result and selects the window where it is displayed. If the value is
@code{show}, the first result is shown, but the window showing the
@file{*xref*} buffer is left selected. If the value is @code{move},
the first result is selected in the @file{*xref*} buffer, but is not
shown. The default value is @code{nil}, which just shows the results
in the @file{*xref*} buffer, but doesn't select any of them.
@findex xref-query-replace-in-results
@kbd{M-x xref-query-replace-in-results} reads a regexp to match identifier
names and a replacement string, just like ordinary @kbd{M-x
@ -2381,13 +2427,14 @@ Searching}.
Perform completion on the text around point, possibly using the
selected tags table if one is loaded (@code{completion-at-point}).
@item M-x xref-find-apropos @key{RET} @var{regexp} @key{RET}
Display a list of all known identifiers matching @var{regexp}.
@item M-x list-tags @key{RET} @var{file} @key{RET}
Display a list of the identifiers defined in the program file
@var{file}.
@item C-M-. @var{regexp} @key{RET}
Display a list of all identifiers matching @var{regexp}
(@code{xref-find-apropos}). @xref{Looking Up Identifiers}.
@item M-x tags-next-file
Visit files recorded in the selected tags table.
@end table
@ -2409,26 +2456,6 @@ for the project to be available. @xref{Tags Tables}. If used
interactively, the default tag is file name of the current buffer if
used interactively.
@c Sadly, the new-and-improved Xref feature doesn't provide anything
@c close to the described below features of the now-obsoleted
@c tags-apropos. I'm leaving this here to encourage enhancements to
@c xref.el.
@ignore
@findex tags-apropos
@vindex tags-apropos-verbose
@vindex tags-tag-face
@vindex tags-apropos-additional-actions
@kbd{M-x tags-apropos} is like @code{apropos} for tags
(@pxref{Apropos}). It displays a list of tags in the selected tags
table whose entries match @var{regexp}. If the variable
@code{tags-apropos-verbose} is non-@code{nil}, it displays the names
of the tags files together with the tag names. You can customize the
appearance of the output by setting the variable @code{tags-tag-face}
to a face. You can display additional output by customizing the
variable @code{tags-apropos-additional-actions}; see its documentation
for details.
@end ignore
@findex tags-next-file
@kbd{M-x tags-next-file} visits files covered by the selected tags table.
The first time it is called, it visits the first file covered by the
@ -3097,19 +3124,23 @@ these local variables section would do.
@smallexample
;; Local Variables:
;; bug-reference-bug-regexp: "\\([Bb]ug[#-]\\)\\([0-9]+\\)"
;; bug-reference-bug-regexp: "\\([Bb]ug[#-]\\([0-9]+\\)\\)"
;; bug-reference-url-format: "https://project.org/issues/%s"
;; End:
@end smallexample
The string captured by the first regexp group defines the bounds of
the overlay bug-reference creates, i.e., the part which is highlighted
and made clickable.
The string captured by the second regexp group in
@code{bug-reference-bug-regexp} is used to replace the @code{%s}
template in the @code{bug-reference-url-format}.
Note that @code{bug-reference-url-format} may also be a function in
order to cater for more complex scenarios, e.g., when the part before
the actual bug number has to be used to distinguish between issues and
merge requests where each of them has a different URL.
order to cater for more complex scenarios, e.g., when different parts
of the bug reference have to be used to distinguish between issues and
merge requests resulting in different URLs.
@heading Automatic Setup
@ -3124,20 +3155,22 @@ variables itself by calling the functions in
one is able to set the variables.
@vindex bug-reference-setup-from-vc-alist
@vindex bug-reference-forge-alist
@vindex bug-reference-setup-from-mail-alist
@vindex bug-reference-setup-from-irc-alist
Right now, there are three types of setup functions.
@enumerate
@item
Setup for version-controlled files configurable by the variable
@code{bug-reference-setup-from-vc-alist}. The default is able to
Setup for version-controlled files configurable by the variables
@code{bug-reference-forge-alist}, and
@code{bug-reference-setup-from-vc-alist}. The defaults are able to
setup GNU projects where @url{https://debbugs.gnu.org} is used as
issue tracker and issues are usually referenced as @code{bug#13} (but
many different notations are considered, too), Sourcehut projects
where issues are referenced using the notation @code{#17}, Codeberg
and Github projects where both bugs and pull requests are referenced
using the same notation, and GitLab projects where bugs are referenced
with @code{#17}, too, but merge requests use the @code{!18} notation.
many different notations are considered, too), and several kinds of
modern software forges such as GitLab, Gitea, SourceHut, or GitHub.
If you deploy a self-hosted instance of such a forge, the easiest way
to tell bug-reference about it is through
@code{bug-reference-forge-alist}.
@item
Setup for email guessing from mail folder/mbox names, and mail header

View file

@ -409,9 +409,14 @@ region by dragging the mouse, you can continue to extend the region
using shifted cursor motion commands. In either case, any unshifted
cursor motion command deactivates the mark.
@vindex shift-select-mode
To turn off shift-selection, set @code{shift-select-mode} to
@code{nil}. Doing so does not disable setting the mark via mouse
commands.
commands. If you set @code{shift-select-mode} to the value
@code{permanent}, cursor motion keys that were not shift-translated
will not deactivate the mark, so, for example, the region set by prior
commands can be extended by shift-selection, and unshifted cursor
motion keys will extend the region set by shift-selection.
@node Disabled Transient Mark
@section Disabling Transient Mark Mode

View file

@ -41,11 +41,14 @@ Alternatively, you can type @kbd{C-g} to exit the minibuffer by
canceling the command asking for the argument (@pxref{Quitting}).
@cindex default argument
@vindex minibuffer-default-prompt-format
Sometimes, the prompt shows a @dfn{default argument}, inside
parentheses before the colon. This default will be used as the
argument if you just type @key{RET}. For example, commands that read
buffer names usually show a buffer name as the default; you can type
@key{RET} to operate on that default buffer.
@key{RET} to operate on that default buffer. You can customize how
the default argument is shown with the user option
@code{minibuffer-default-prompt-format}.
@cindex Minibuffer Electric Default mode
@cindex mode, Minibuffer Electric Default

View file

@ -163,14 +163,13 @@ List killed groups (@code{gnus-group-list-killed}).
List zombie groups (@code{gnus-group-list-zombies}).
@kindex u @r{(Gnus Group mode)}
@findex gnus-group-unsubscribe-current-group
@findex gnus-group-toggle-subscription
@cindex subscribe groups
@cindex unsubscribe groups
@item u
Toggle the subscription status of the group
(@code{gnus-group-unsubscribe-current-group}) on the current line
(i.e., turn a subscribed group into an unsubscribed group, or vice
versa). Invoking this on a killed or zombie group turns it into an
(@code{gnus-group-toggle-subscription}) on the current line.
Invoking this on a killed or zombie group turns it into an
unsubscribed group.
@kindex C-k @r{(Gnus Group mode)}
@ -1114,6 +1113,19 @@ subshell:
@end example
@end table
By default, Shell mode handles common @acronym{ANSI} escape codes (for
instance, for changing the color of text). Emacs also optionally
supports some extend escape codes, like some of the @acronym{OSC}
(Operating System Codes) if you put the following in your init file:
@lisp
(add-hook 'comint-output-filter-functions 'comint-osc-process-output)
@end lisp
With this enabled, the output from, for instance, @code{ls
--hyperlink} will be made into clickable buttons in the Shell mode
buffer.
@cindex Comint mode
@cindex mode, Comint
Shell mode is a derivative of Comint mode, a general-purpose mode for
@ -1485,14 +1497,20 @@ directory stack if they are not already on it
underlying shell, of course.
@vindex comint-terminfo-terminal
@vindex system-uses-terminfo
@vindex TERM@r{, environment variable, in sub-shell}
Comint mode sets the @env{TERM} environment variable to a safe default
value, but this value disables some useful features. For example,
color is disabled in applications that use @env{TERM} to determine if
color is supported. Therefore, Emacs provides an option
@code{comint-terminfo-terminal}, which you can set to a terminal that
is present in your system's terminfo database, in order to take
advantage of advanced features of that terminal.
@code{comint-terminfo-terminal} to let you choose a terminal with more
advanced features, as defined in your system's terminfo database.
Emacs will use this option as the value for @env{TERM} so long as
@code{system-uses-terminfo} is non-nil.
Both @code{comint-terminfo-terminal} and @code{system-uses-terminfo}
can be declared as connection-local variables to adjust these options
to match what a remote system expects (@pxref{Connection Variables}).
@node Terminal emulator
@subsection Emacs Terminal Emulator
@ -1974,6 +1992,11 @@ the new frame displays the @file{*scratch*} buffer by default. You
can customize this behavior with the variable @code{initial-buffer-choice}
(@pxref{Entering Emacs}).
@item -r
@itemx --reuse-frame
Create a new graphical client frame if none exists, otherwise use an
existing Emacs frame.
@item -F @var{alist}
@itemx --frame-parameters=@var{alist}
Set the parameters for a newly-created graphical frame
@ -2590,7 +2613,7 @@ invoked @code{hexl-mode}.
@noindent
Other Hexl commands let you insert strings (sequences) of binary
bytes, move by @code{short}s or @code{int}s, etc.; type @kbd{C-h a
hexl-@key{RET}} for details.
hexl- @key{TAB}} for details.
Hexl mode can also be used for editing text files. This could come
in handy if the text file includes unusual characters or uses unusual
@ -2930,6 +2953,33 @@ one-key commands for scrolling the widget, changing its size, and
reloading it. Type @w{@kbd{C-h b}} in that buffer to see the key
bindings.
@findex xwidget-webkit-edit-mode
@cindex xwidget-webkit-edit-mode
By default, typing a self-inserting character inside an xwidget
webkit buffer will do nothing, or trigger some special action. To
make those characters and other common editing keys insert themselves
when pressed, you can enable @code{xwidget-webkit-edit-mode}, which
redefines them to be passed through to the WebKit xwidget.
You can also enable @code{xwidget-webkit-edit-mode} by typing @kbd{e}
inside the xwidget webkit buffer.
@findex xwidget-webkit-isearch-mode
@cindex searching in webkit buffers
@code{xwidget-webkit-isearch-mode} is a minor mode that behaves
similarly to incremental search (@pxref{Incremental Search}), but
operates on the contents of a WebKit widget instead of the current
buffer. It is bound to @kbd{C-s} and @kbd{C-r} inside xwidget-webkit
buffers. When it is invoked by @kbd{C-r}, the initial search will be
performed in reverse direction.
Typing any self-inserting character will cause the character to be
inserted into the current search query. Typing @kbd{C-s} will cause
the WebKit widget to display the next search result, while typing
@kbd{C-r} will cause it to display the previous one.
To leave incremental search, you can type @kbd{C-g}.
@node Browse-URL
@subsection Following URLs
@cindex World Wide Web
@ -2974,6 +3024,15 @@ URLs.
For more information, view the package commentary by typing @kbd{C-h P
browse-url @key{RET}}.
@findex url-handler-mode
Emacs also has a minor mode that has some support for handling
@acronym{URL}s as if they were files. @code{url-handler-mode} is a
global minor mode that affects most of the Emacs commands and
primitives that deal with file names. After switching on this mode,
you can say, for instance, @kbd{C-x C-f https://www.gnu.org/ RET} to
see the @acronym{HTML} for that web page, and you can then edit it and
save it to a local file, for instance.
@node Goto Address mode
@subsection Activating URLs
@findex goto-address-mode

View file

@ -543,7 +543,7 @@ keyboard input in Emacs.
conventional uses in MS-Windows programs conflict with traditional
Emacs key bindings. (These Emacs key bindings were established years
before Microsoft was founded.) Examples of conflicts include
@kbd{C-c}, @kbd{C-x}, @kbd{C-z}, @kbd{C-a}, and @kbd{W-@key{SPC}}.
@kbd{C-c}, @kbd{C-x}, @kbd{C-z}, and @kbd{C-a}.
You can redefine some of them with meanings more like the MS-Windows
meanings by enabling CUA Mode (@pxref{CUA Bindings}). Another
optional feature which will make Emacs behave like other Windows
@ -1181,6 +1181,14 @@ The default is @code{t}, which fits well with the Windows default
click-to-focus policy.
@end ifnottex
On Windows 10 (version 1809 and higher) and Windows 11, Emacs title
bars and scroll bars will follow the system's Light or Dark mode,
similar to other programs such as Explorer and Command Prompt. To
change the color mode, select @code{Personalization} from
@w{@code{Windows Settings}}, then
@w{@code{Colors->Choose your color}} (or @w{@code{Choose your default
app mode}}); then restart Emacs.
@ifnottex
@include msdos-xtra.texi
@end ifnottex

View file

@ -473,6 +473,10 @@ First, letters are mapped into symbols for particular sounds or tone
marks; then, sequences of these that make up a whole syllable are
mapped into one syllable sign.
@kindex C-f@r{, when using input methods}
@kindex C-b@r{, when using input methods}
@kindex C-n@r{, when using input methods}
@kindex C-p@r{, when using input methods}
Chinese and Japanese require more complex methods. In Chinese input
methods, first you enter the phonetic spelling of a Chinese word (in
input method @code{chinese-py}, among others), or a sequence of
@ -498,6 +502,7 @@ alternatives in the row are also numbered; the number appears before
the alternative. Typing a number selects the associated alternative
of the current row and uses it as input.
@kindex TAB@r{, when using Chinese input methods}
@key{TAB} in these Chinese input methods displays a buffer showing
all the possible characters at once; then clicking @kbd{mouse-2} on
one of them selects that alternative. The keys @kbd{C-f}, @kbd{C-b},
@ -571,11 +576,37 @@ modes that make buffer text or parts of it read-only, such as
@code{read-only-mode} and @code{image-mode}, even when an input method
is active.
@kindex C-x 8 @key{RET}
@cindex insert character by name or code-point
Another facility for typing characters not on your keyboard is by
using @kbd{C-x 8 @key{RET}} (@code{insert-char}) to insert a single
character based on its Unicode name or code-point; see @ref{Inserting
Text}.
@cindex emoji input
@cindex inserting Emoji
@kindex C-x 8 e
@findex emoji-insert
@findex emoji-list
@findex emoji-search
There are specialized commands for inserting Emoji, and these can be
found on the @kbd{C-x 8 e} keymap. @kbd{C-x 8 e e}
(@code{emoji-insert}) will let you navigate through different Emoji
categories and then choose one. @kbd{C-x 8 e l} (@code{emoji-list})
will pop up a new buffer and list all the Emoji; clicking (or using
@kbd{RET}) on an emoji character will insert it in the current buffer.
Finally, @kbd{C-x 8 e s} (@code{emoji-search}) will allow you to
search for Emoji based on their names.
@findex emoji-describe
@code{describe-char} displays a lot of information about the
character/glyphs under point (including emojis). It's sometimes
useful to get a quick description of the name, and you can use the
@kbd{C-x 8 e d} (@code{emoji-describe}) command to do that. It's
meant primarily to help distinguish between different Emoji
variants (which can look very similar), but it will also tell you
the names of non-Emoji characters.
@node Select Input Method
@section Selecting an Input Method
@ -1330,6 +1361,12 @@ You can do this by putting
@noindent
in your init file.
@findex w32-set-console-codepage
Setting @code{keyboard-coding-system} has no effect on MS-Windows,
except on old Windows 9X systems, in which case the encoding must
match the current codepage of the MS-Windows console, which can be
changed by calling @code{w32-set-console-codepage}.
There is a similarity between using a coding system translation for
keyboard input, and using an input method: both define sequences of
keyboard input that translate into single characters. However, input

View file

@ -129,7 +129,7 @@ entails.
@item w
@kindex w @r{(Package Menu)}
@findex package-browse-url
Open the home page of the package on the current line in a browser
Open the package website on the current line in a browser
(@code{package-browse-url}). @code{browse-url} is used to open the
browser.

View file

@ -275,8 +275,10 @@ a non-@code{nil} value. There is no need to rescan because of small
changes in the text.
@vindex imenu-auto-rescan-maxout
@vindex imenu-max-index-time
@code{imenu-auto-rescan} will be disabled in buffers that are larger
than @code{imenu-auto-rescan-maxout} in bytes.
than @code{imenu-auto-rescan-maxout} in bytes, and scanning is
stopped if it takes more than @code{imenu-max-index-time} seconds.
@vindex imenu-sort-function
You can customize the way the menus are sorted by setting the
@ -469,6 +471,23 @@ the function name. This is normally done for macro definitions, using
the @code{declare} construct. @xref{Defining Macros,,, elisp, The
Emacs Lisp Reference Manual}.
In Emacs Lisp, lists are usually indented as if they are
function-like forms:
@lisp
(setq foo '(bar zot
gazonk))
@end lisp
However, if you add a space after the opening parenthesis, this tells
Emacs that it's a data list instead of a piece of code, and Emacs will
then indent it like this:
@lisp
(setq foo '( bar zot
gazonk))
@end lisp
@node C Indent
@subsection Commands for C Indentation
@ -809,41 +828,55 @@ displayed. The default is 102400.
@cindex Show Paren mode
@cindex highlighting matching parentheses
@findex show-paren-mode
Show Paren mode, a global minor mode, provides a more powerful kind
@findex show-paren-local-mode
Show Paren mode is a minor mode that provides a more powerful kind
of automatic matching. Whenever point is before an opening delimiter
or after a closing delimiter, the delimiter, its matching delimiter,
and optionally the text between them are highlighted. To toggle Show
Paren mode, type @kbd{M-x show-paren-mode}. To customize it, type
@kbd{M-x customize-group @key{RET} paren-showing}. The customizable
options which control the operation of this mode include:
Paren mode globally, type @kbd{M-x show-paren-mode}. To toggle it
only in the current buffer, type @kbd{M-x show-paren-local-mode}. To
customize it, type @w{@kbd{M-x customize-group @key{RET} paren-showing}}.
The customizable options which control the operation of this mode
include:
@itemize @bullet
@item
@vindex show-paren-highlight-openparen
@code{show-paren-highlight-openparen} controls whether to highlight
an open paren when point stands just before it, and hence its position
an open paren when point is just before it, and hence its position
is marked by the cursor anyway. The default is non-@code{nil} (yes).
@item
@vindex show-paren-style
@code{show-paren-style} controls whether just the two parens, or also
the space between them get highlighted. The valid options here are
the text between them get highlighted. The valid options here are
@code{parenthesis} (show the matching paren), @code{expression}
(highlight the entire expression enclosed by the parens), and
@code{mixed} (highlight the matching paren if it is visible, the
expression otherwise).
@code{mixed} (highlight the matching paren if it is visible in the
window, the expression otherwise).
@item
@vindex show-paren-when-point-inside-paren
@code{show-paren-when-point-inside-paren}, when non-@code{nil}, causes
highlighting also when point is on the inside of a parenthesis.
highlighting also when point is inside of the parentheses. The
default is @code{nil}.
@item
@vindex show-paren-when-point-in-periphery
@code{show-paren-when-point-in-periphery}, when non-@code{nil}, causes
highlighting also when point is in whitespace at the beginning or end
of a line, and there is a paren at, respectively, the first or last,
or the last, non-whitespace position on the line.
highlighting also when point is in whitespace at the beginning of a
line and there is a paren at the first or last non-whitespace position
on the line, or when point is at the end of a line and there is a
paren at the last non-whitespace position on the line.
@item
@vindex show-paren-context-when-offscreen
@code{show-paren-context-when-offscreen}, when non-@code{nil}, shows
some context in the echo area when point is in a closing delimiter and
the opening delimiter is offscreen. The context is usually the line
that contains the opening delimiter, except if the opening delimiter
is on its own line, in which case the context includes the previous
nonblank line.
@end itemize
@cindex Electric Pair mode
@ -1098,13 +1131,13 @@ match the last comment before point in the buffer, and then does a
expression that is the value of the variable @code{comment-start-skip}.
Make sure this regexp does not match the null string. It may match more
than the comment starting delimiter in the strictest sense of the word;
for example, in C mode the value of the variable is
for example, in C mode the value of the variable could be
@c This stops M-q from breaking the line inside that @code.
@code{@w{"\\(//+\\|/\\*+\\)\\s *"}}, which matches extra stars and
spaces after the @samp{/*} itself, and accepts C++ style comments
also. (Note that @samp{\\} is needed in Lisp syntax to include a
@samp{\} in the string, which is needed to deny the first star its
special meaning in regexp syntax. @xref{Regexp Backslash}.)
@code{@w{"/\\*+[ \t]*\\|//+[ \t]*"}}, which matches extra stars and
spaces after the @samp{/*} itself, and accepts C++ style (@samp{//})
comments also. (Note that @samp{\\} is needed in Lisp syntax to
include a @samp{\} in the string, which is needed to deny the first
star its special meaning in regexp syntax. @xref{Regexp Backslash}.)
@vindex comment-start
@vindex comment-end

View file

@ -222,6 +222,15 @@ going past the original starting point of the search, it changes to
@samp{Overwrapped}, which means that you are revisiting matches that
you have already seen.
@vindex isearch-wrap-pause
You can control what happens when there are no more matches by
customizing the @code{isearch-wrap-pause} user option. If it is
@code{t} (the default), signal an error. (Repeating the search will
wrap around.) If @code{no}, issue a @code{ding} and wrap immediately
after reaching the last match. If @code{no-ding}, wrap immediately,
but don't @code{ding}. Finally, if @code{nil}, never wrap, but just
stop at the last match.
@cindex search ring
@findex isearch-ring-advance
@findex isearch-ring-retreat
@ -328,6 +337,16 @@ value of the variable @code{search-upper-case} (@pxref{Lax Search,
search-upper-case}) is other than @code{not-yanks}, that disables this
down-casing.
@kindex M-s M-.
@findex isearch-forward-thing-at-point
To begin a new incremental search with the text near point yanked
into the initial search string, type @kbd{M-s M-.} that runs the
command @code{isearch-forward-thing-at-point}. If the region was
active, then it yanks the text from the region into the search string.
Otherwise, it tries to yank a URL, a symbol or an expression found
near point. What to yank is defined by the user option
@code{isearch-forward-thing-at-point}.
@node Error in Isearch
@subsection Errors in Incremental Search
@ -593,6 +612,19 @@ or the selected window and frame. The command must not itself attempt
an incremental search. This feature is disabled if
@code{isearch-allow-scroll} is @code{nil} (which it is by default).
@vindex isearch-allow-motion
@vindex isearch-motion-changes-direction
Likewise, if you change the variable @code{isearch-allow-motion}
to a non-@code{nil} value, this enables the use of the keyboard motion
commands @kbd{M-<}, @kbd{M->}, @kbd{C-v} and @kbd{M-v}, to move
respectively to the first occurrence of the current search string in
the buffer, the last one, the first one after the current window,
and the last one before the current window. The search direction
does not change when these motion commands are used, unless you change
the variable @code{isearch-motion-changes-direction} to a non-@code{nil}
value, in which case the search direction is forward after @kbd{M-<} and
@kbd{C-v}, and backward after @kbd{M->} and @kbd{M-v}.
@item Motion Commands
@cindex motion commands, during incremental search
When @code{isearch-yank-on-move} is customized to @code{shift},
@ -1309,10 +1341,9 @@ matches @w{@samp{foo bar}}, @w{@samp{foo@ @ bar}},
precisely, Emacs matches each sequence of space characters in the
search string to a regular expression specified by the variable
@code{search-whitespace-regexp}. For example, to make spaces match
sequences of newlines as well as spaces, set it to
@samp{"[[:space:]\n]+"}. The default value of this variable depends
on the buffer's major mode; most major modes classify spaces, tabs,
and formfeed characters as whitespace.
sequences of newlines as well as spaces, set it to the regular expression
@samp{[[:space:]\n]+}. The default value of this variable considers
any sequence of spaces and tab characters as whitespace.
If you want whitespace characters to match exactly, you can turn lax
space matching off by typing @kbd{M-s @key{SPC}}

View file

@ -572,7 +572,7 @@ Set the fill column (@code{set-fill-column}).
Fill each paragraph in the region (@code{fill-region}).
@item M-x fill-region-as-paragraph
Fill the region, considering it as one paragraph.
@item M-o M-s
@item M-x center-line
Center a line.
@end table
@ -621,10 +621,9 @@ numeric argument, it uses that as the new fill column. With just
@kbd{C-u} as argument, it sets @code{fill-column} to the current
horizontal position of point.
@kindex M-o M-s @r{(Text mode)}
@cindex centering
@findex center-line
The command @kbd{M-o M-s} (@code{center-line}) centers the current line
The command @kbd{M-x center-line} centers the current line
within the current fill column. With an argument @var{n}, it centers
@var{n} lines individually and moves past them. This binding is
made by Text mode and is available only in that and related modes
@ -997,6 +996,20 @@ specific file (@pxref{File Variables}).
major mode's special commands. (The variable
@code{outline-minor-mode-prefix} controls the prefix used.)
@vindex outline-minor-mode-use-buttons
If @code{outline-minor-mode-use-buttons} is non-@code{nil}, Outline
minor mode will use buttons (at the start of the header lines) in
addition to ellipsis to show that a section is hidden. Using
@kbd{RET} (or clicking on the button with a mouse) will toggle
displaying the section.
@vindex outline-minor-mode-cycle
If the @code{outline-minor-mode-cycle} user option is
non-@code{nil}, the @kbd{TAB} and @kbd{S-@key{TAB}} keys are enabled on the
outline heading lines. @kbd{TAB} cycles hiding, showing the
sub-heading, and showing all for the current section. @kbd{S-@key{TAB}}
does the same for the entire buffer.
@menu
* Outline Format:: What the text of an outline looks like.
* Outline Motion:: Special commands for moving through outlines.

View file

@ -393,7 +393,7 @@ this---saving them---updates the files themselves.
associated with any files, or if the autosave was not recent enough to
have recorded important changes, you can use the
@file{etc/emacs-buffer.gdb} script with GDB (the GNU Debugger) to
retrieve them from a core dump--provided that a core dump was saved,
retrieve them from a core dump---provided that a core dump was saved,
and that the Emacs executable was not stripped of its debugging
symbols.
@ -1352,8 +1352,13 @@ downloaded the repository source, you should read the file
from a normal build).
If you would like to make more extensive contributions, see the
@file{CONTRIBUTE} file in the Emacs distribution for information on
how to be an Emacs developer.
@file{CONTRIBUTE} file in the Emacs source tree for information on how
to be an Emacs developer. That file is distributed as part of the source
tarball of every released Emacs version, and can also be found on-line
in the @url{https://git.savannah.gnu.org/cgit/emacs.git/tree/CONTRIBUTE,
Emacs on-line source repository}. If you cloned the Emacs repository,
per the instructions in @url{https://savannah.gnu.org/projects/emacs/},
you will find this file in the top directory of the source Emacs tree.
For documentation on Emacs (to understand how to implement your
desired change), refer to:

View file

@ -444,7 +444,7 @@ selected window write:
@group
(customize-set-variable
'display-buffer-alist
'("\\*scratch\\*" (display-buffer-same-window)))
'(("\\*scratch\\*" (display-buffer-same-window))))
@end group
@end example
@ -603,16 +603,16 @@ buffer. @xref{Follow Mode}.
between neighboring windows in a frame. @kbd{M-x windmove-right}
selects the window immediately to the right of the currently selected
one, and similarly for the left, up, and down counterparts.
@w{@kbd{M-x windmove-default-keybindings}} binds these commands to
@code{windmove-default-keybindings} binds these commands to
@kbd{S-right} etc.; doing so disables shift selection for those keys
(@pxref{Shift Selection}). In the same way as keybindings can be
defined for commands that select windows directionally, you can use
@w{@kbd{M-x windmove-display-default-keybindings}} to define
keybindings for commands that specify in what direction to display the
window for the buffer that the next command is going to display.
Also there is @w{@kbd{M-x windmove-delete-default-keybindings}} to
define keybindings for commands that delete windows directionally, and
@w{@kbd{M-x windmove-swap-states-default-keybindings}} that defines
@code{windmove-display-default-keybindings} to define keybindings for
commands that specify in what direction to display the window for the
buffer that the next command is going to display. Also there is
@code{windmove-delete-default-keybindings} to define keybindings for
commands that delete windows directionally, and
@code{windmove-swap-states-default-keybindings} that defines
keybindings for commands that swap the window contents of the selected
window with the window in the specified direction.

View file

@ -238,7 +238,7 @@ supports it in developing GNU and promoting software freedom.''
@ifset WWW_GNU_ORG
@html
<p>The homepage for GNU Emacs is at
<p>The GNU Emacs website is at
<a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
To view this manual in other formats, click
<a href="/software/emacs/manual/eintr.html">here</a>.
@ -1162,6 +1162,10 @@ computer. Often, people use the term @dfn{expression}
indiscriminately. (Also, in many texts, the word @dfn{form} is used
as a synonym for expression.)
@c This and the next paragraph say ``kinds of atom'', but that is not
@c a typo, just slightly ``old-fashioned wording which adds a fillip
@c of interest to it'', and ``is more elegant writing'', according to
@c RMS.
Incidentally, the atoms that make up our universe were named such when
they were thought to be indivisible; but it has been found that physical
atoms are not indivisible. Parts can split off an atom or it can
@ -4201,7 +4205,7 @@ times.
The part of the buffer between point and mark is called @dfn{the
region}. Numerous commands work on the region, including
@code{center-region}, @code{count-lines-region}, @code{kill-region}, and
@code{center-region}, @code{count-words-region}, @code{kill-region}, and
@code{print-region}.
The @code{save-excursion} special form saves the location of point and
@ -4214,7 +4218,7 @@ evaluated.
In Emacs, a function frequently moves point as part of its internal
workings even though a user would not expect this. For example,
@code{count-lines-region} moves point. To prevent the user from being
@code{count-words-region} moves point. To prevent the user from being
bothered by jumps that are both unexpected and (from the user's point of
view) unnecessary, @code{save-excursion} is often used to keep point in
the location expected by the user. The use of
@ -4893,6 +4897,23 @@ region.
@c FIXME: the definition of append-to-buffer has been changed (in
@c 2010-03-30).
@c In Bug#8275, Stefan Monner <monnier@iro.umontreal.ca> writes:
@c >> Do you want to fix this, or shall I try? The problem is that
@c >> append-to-buffer now uses let* and with-current-buffer, so this might
@c >> break the flow of the text. At this point in the book, let* and
@c >> with-current-buffer are not yet introduced.
@c >
@c > Here are some thoughts:
@c > - I don't think it's of any importance that the example code be
@c > identical to the currently used code.
@c > - append-to-buffer might not be the best example since AFAICT copying
@c > text from one buffer to another is not a common operation and in most
@c > cases this is done via buffer-substring + insert (often with some
@c > processing on the string between the two) rather than with
@c > insert-buffer-substring which is a rarely used function.
@c > - yes, I think the text would benefit from some rethink to try and present
@c > with-current-buffer in preference to set-buffer, but it's not
@c > a simple fix.
@node append-to-buffer
@section The Definition of @code{append-to-buffer}
@findex append-to-buffer
@ -8767,7 +8788,7 @@ keeps the kill ring from growing too long. It looks like this:
The code checks whether the length of the kill ring is greater than
the maximum permitted length. This is the value of
@code{kill-ring-max} (which is 60, by default). If the length of the
@code{kill-ring-max} (which is 120, by default). If the length of the
kill ring is too long, then this code sets the last element of the
kill ring to @code{nil}. It does this by using two functions,
@code{nthcdr} and @code{setcdr}.
@ -13473,10 +13494,9 @@ The template for an interactive function definition is, as always:
What we need to do is fill in the slots.
The name of the function should be self-explanatory and similar to the
existing @code{count-lines-region} name. This makes the name easier
The name of the function should be self-explanatory and easy
to remember. @code{count-words-region} is the obvious choice. Since
that name is now used for the standard Emacs command to count words, we
that name is used for the standard Emacs command to count words, we
will name our implementation @code{@value{COUNT-WORDS}}.
The function counts words within a region. This means that the
@ -14650,7 +14670,9 @@ Let's re-use @kbd{C-c =} as a convenient keybinding:
Now we can try out @code{count-words-defun}: install both
@code{count-words-in-defun} and @code{count-words-defun}, and set the
keybinding, and then place the cursor within the following definition:
keybinding. Then copy the following to an Emacs Lisp buffer (like,
for instance, @file{*scratch*}), place the cursor within the
definition, and use the @kbd{C-c =} command.
@smallexample
@group
@ -17455,9 +17477,9 @@ Manual}, for more information.
@findex line-to-top-of-window
@cindex Simple extension in @file{.emacs} file
Here is a simple extension to Emacs that moves the line point is on to
the top of the window. I use this all the time, to make text easier
to read.
Here is a simple extension to Emacs that moves the line that point is
on to the top of the window. I use this all the time, to make text
easier to read.
You can put the following code into a separate file and then load it
from your @file{.emacs} file, or you can include it within your
@ -17838,7 +17860,7 @@ xmodmap -e "keysym Alt_L = Meta_L Alt_L"
Finally, a feature I really like: a modified mode line.
When I work over a network, I forget which machine I am using. Also,
I tend to I lose track of where I am, and which line point is on.
I tend to lose track of where I am, and which line point is on.
So I reset my mode line to look like this:

View file

@ -6,186 +6,179 @@
@c This node must have no pointers.
@node Antinews
@appendix Emacs 26 Antinews
@appendix Emacs 27 Antinews
@c Update the elisp.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information about
downgrading to Emacs version 26.3. We hope you will enjoy the greater
downgrading to Emacs version 27.2. We hope you will enjoy the greater
simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Lisp objects are again implemented on the C level as integer types,
not as pointers. This might be a small step for Emacs Lisp users, but
it's a giant leap for the Emacs developers who work on the C level,
since it is now again easy to print Lisp object in the debugger in the
decimal format, which is so much easier for debugging. It also makes
calling Emacs functions from the debugger easier, and allows us to
freely mix integers and Lisp objects in the C code.
The annoying @code{lexical-binding} local variable now heeds the
value of @code{enable-local-variables}: if it's @code{nil}, the
@code{lexical-binding} cookie is ignored. We are working hard on
removing the lexical-binding support in some past Emacs version, and
this small step advances us back to that change.
@item
The test suite was removed from the distribution tarball. We believe
that tests need seldom if ever be run, certainly not by the end
users. Removing the tests from the tarball makes it much smaller,
which is important since disk space becomes more and more at premium
as you move back in time.
The @code{load-dangerous-libraries} variable is not obsolete, as it
must be used to allow loading Lisp compiled by XEmacs, which will
become more and more important as you move back in time.
@item
Dynamic module support is disabled by default. This both makes Emacs
smaller (a worthy goal by itself), and removes the complications and
additional complexity related with installing module support files and
letting random shared objects an opportunity to be loaded into Emacs
and mess with it.
The optional @var{modes} argument of @code{interactive} is not
supported, and every command is deemed applicable to any major mode.
We believe this makes the life of Lisp programmers much simpler, as
there's now no need to tag commands with the modes where they make
sense.
@item
You now must activate any installed packages only after loading your
init files. That requires an explicit call to
@code{package-initialize} in your init file, which is a Good Thing, as
it makes you think seriously where and indeed whether you'd like your
packages to become available to your sessions. Simplicity should
tramp convenience!
Shorthands for Lisp symbols have been removed, which makes loading
Lisp files and handling Lisp symbols much simpler and more efficient.
This is important for decent performance on slower CPUs as you move
back in time.
@item
To reduce the amount of code in Emacs related to unimportant features,
we've removed native rotation and resizing of images. You will have
to build Emacs with ImageMagick if you want to resize or rotate images
inside Emacs. We don't expect anyone to miss that.
we've removed the variables @code{global-minor-modes} and
@code{local-minor-modes}. If your Lisp program needs to determine
whether some minor mode is in effect, it will have to test explicitly
for every mode. We don't expect anyone to miss those fancy variables.
@item
We've re-enabled color fonts usage by the XFT font back-end. We
consider the availability of these fonts more important than a random
crash here and there, especially since the use of these fonts for
displaying Emoji will become less and less important as we travel back
in time, and will completely disappear in some past Emacs version.
The default preference for servicing sub-processes that produce output
at a high rate, and the associated variable
@code{process-prioritize-lower-fds}, have been removed. Moving back
in time means fewer and fewer programs can produce such high-rate
output, so this features becomes just useless crud.
@item
The function @code{network-interface-list} can now return only IPv4
addresses. We consider the complexity introduced by IPv6 to be too
much to be justified, and on the other hand its removal is the step in
the right direction, given that IPv6 is expected to be completely
removed as we move back in time.
The encodings that are variants of EBCDIC were removed. This includes
@code{ibm256}, @code{ibm273}, and others---variants of the EBCDIC
encoding tailored for some Japanese and European locales. You won't
need those where you are going.
@item
The limit on repetitions in regular expressions was reduced to
@ifnottex
2**15 @minus{} 1.
@end ifnottex
@tex
@math{2^{15}-1}.
@end tex
We envision that regular expressions will become more and more simple
as we move towards the distant past.
The ``Bindat type expression'' description language has been removed,
as the existing data layout specifications are perfectly suited for
this job.
@item
To simplify code and reduce complexity, we removed the capability of
searching programs on remote hosts in @code{executable-find}. If you
really need this feature (why would you?), you can always write your
own shell script and run it on the remote.
specifying the success handler in @code{condition-case} via the
@code{:success} keyword. If you really need this feature (why would
you?), you can always write some simple Lisp that has the same effect.
@item
The @code{:extend} face attribute is no longer available; all faces
have their background color extended by default past end of line.
This should significantly simplify face management and remove
unnecessary code bloat, as well as make faces significantly simpler to
understand and use.
Emacs modules can no longer provide interactive functions, or install
finalizers, nor open channels to existing pipe sub-processes. All
this is extra ballast, especially since we plan on removing modules in
some past Emacs version. The @code{make_unibyte_string} module API
was removed for the same reason.
@item
The predicates @code{display-blink-cursor-p} and
@code{display-symbol-keys-p} were deleted. They are rarely if ever
needed, and can easily be substituted by appropriate calls to old and
proven APIs like @code{display-graphic-p}. As an additional bonus,
writing Lisp programs that depend on this functionality will make sure
the programmer understands better what exactly is the required
features of the display terminal.
To keep Emacs clean and elegant, we've removed the
@code{print-integers-as-characters} option. Recognizing characters by
their decimal codes is a basic requirement for Emacs Lisp programmers,
and with the expected decrease in use of Unicode characters, this will
be soon limited to ASCII only: surely something you all can master!
@item
Relative directories in the value of the @env{HOME} environment
variable are once again interpreted relative to the
@code{default-directory} of the current buffer. This is much simpler,
and also allows @env{HOME} to resolve to a different place in
different buffers, which allows some interesting applications.
For the same reasons, @code{file-name-absolute-p} now again considers
@file{~foo} an absolute file name, even if there's no known user
@samp{foo}. This means a Lisp program which uses such file names will
always work the same on any system, regardless of its known users.
The optional @var{count} argument of the @code{directory-files}
function has been removed. Extracting the first @var{n} members from
the full list is trivial, so this is a significant simplification for
an insignificant cost.
@item
File-related primitives like @code{file-attributes},
@code{file-modes}, @code{file-newer-than-file-p}, and some others once
again return @code{nil} when the underlying low-level APIs fail,
instead of signaling an error. We decided that functions which signal
errors require more complex code from Lisp programs which use them,
and found this complexity unjustified when returning @code{nil} will
do.
Functions that create sub-processes and network connections no longer
accept the @code{:coding} argument; use
@code{set-process-coding-system} or bind
@code{coding-system-for-read/write} instead: again, a significant
reduction in Emacs complexity for little or no cost.
@item
Similarly, old-style backquotes no longer signal errors; they generate
warnings instead. You can remove error handling from programs that
use backquotes.
We deleted from the macros @code{define-derived-mode} and
@code{define-minor-mode} the code which allowed using the
@code{:interactive} argument. The possibility of marking a mode
non-interactive makes very little sense,
@item
Formatting floating-point numbers has been sped up by letting the
underlying implementation produce unpredictable values, instead of
signaling errors when the number is too large to format correctly. We
believe the Emacs Lisp programmers should always know what they are
doing when they deal with floating-point values.
The possibility of having links to man pages in doc strings has been
removed. Use plain text instead, if you need such references.
@item
The function @code{read-char-from-minibuffer} was deleted. We decided
that @code{read-char} should be enough for any Lisp program that needs
to ask the user for a single-character input, in recognition of the
fact that nothing makes Emacs Lisp hackers rejoice more than the need
to sit down and write yet another interactive question-and-answer
function, and make it optimal for each specific case. Consequently,
no history is provided for such responses (why would someone want
history of single-key strokes, anyway?).
Temporary buffers are no longer exempt from running any buffer-related
hooks. Programs that don't want such hooks in some buffer can always
disable it locally, whereas making that simpler complicates Emacs for
no good reason.
@item
The function @code{ngettext} was deleted. Non-English languages will
become less and less widespread, let alone useful, as you move back in
time, so we took this small step in that direction, and simplified
Emacs as a nice bonus.
Several features that complicated the byte compiler have been removed:
@itemize @minus
@item
The checks for missing declarations of dynamic variables. This will
continue making less and less sense as we move away of lexical-binding
support.
@item
Focus-change notifications on text-mode frames are no longer
recognized or supported. You can now safely disregard the possibility
of receiving such notifications on TTY frames. This is one small step
on the long road of removing all non-character input events Emacs
supports on TTY frames.
The ability of compiling symlinked @file{*.el} files, which is really
gross: copy the files instead.
@item
Face specifications in @code{face-remapping-alist} now have to be
buffer-specific, without any differences between windows showing the
same buffers. This allowed us to remove a lot of unneeded code bloat
from Emacs, and make the face handling much simpler.
The warnings about too-wide doc strings---that is just a nuisance, as
the programmers should be trusted to know what they are doing.
@end itemize
@item
The @samp{%o} and @samp{%x} formats now always produce unsigned
values, as you'd expect. This allows you to reveal the underlying
machine representation, which is different on each architecture,
something we consider a valuable feature.
We deleted several features of the @code{pcase} macro, in accordance
with our general plane to remove @code{pcase} from Emacs:
@itemize @minus
@item
The @code{cl-type} pattern.
@item
We no longer highlight in @code{font-lock-warning-face} symbols with
confusable quote characters, such as U+2018. Detecting them
needed non-trivial amount of code, and we firmly believe that Lisp
programmers always know what they are doing, and don't need to be
annoyed with typefaces that stand out and distract.
the @code{pcase-setq} macro.
@item
The function @code{file-system-info} was dropped on Posix platforms,
since you can always invoke @command{df} instead and parse its
output.
The @code{pcase-compile-patterns} function.
@end itemize
@item
The functions that implement the @samp{base64url} encoding were
removed, as they can always be emulated by suitable tweaking of the
normal base-64 encoding. No need to bloat Emacs and force Lisp
programmers learn more interfaces on this account.
Some of the keywords used in Edebug specification lists were deemed to
be of little use, and were therefore removed: @code{&interpose},
@code{&error}, and @code{&name}. The long-term plane is for Emacs to
drop Edebug entirely, leaving only the trusted Lisp debugger, and we
continue working according to that plan.
@item
The function @code{object-intervals} was dropped, as a Lisp program
can easily collect the intervals of a buffer or a string by iterating
through them one by one.
@item
We decided that the @code{require-theme} function is an unnecessary
complication, so we deleted it. Lisp programs can easily search along
@code{custom-theme-load-path} instead.
@item
The convenience functions @code{length<}, @code{length>}, and
@code{length=} were removed, as using @code{length} followed by a
comparison should be good enough for everyone, especially considering
that the typical length of a list keeps going down as you move back
through time.
@item
The variable @code{current-minibuffer-command} is no longer available,
as we found little justification for keeping it.
@item
As part of the ongoing quest for simplicity, many other functions and
variables have been eliminated.
variables have been eliminated. Other functions and variables, that
were declared obsolete since Emacs 23, have been added back, in
preparation for releasing Emacs 23 in some distant past.
@end itemize

View file

@ -89,11 +89,12 @@ in which most editing takes place. Most of the primitives for
examining or changing text operate implicitly on the current buffer
(@pxref{Text}).
Normally, the buffer displayed in the selected window is the current
buffer, but this is not always so: a Lisp program can temporarily
designate any buffer as current in order to operate on its contents,
without changing what is displayed on the screen. The most basic
function for designating a current buffer is @code{set-buffer}.
Normally, the buffer displayed in the selected window
(@pxref{Selecting Windows}) is the current buffer, but this is not
always so: a Lisp program can temporarily designate any buffer as
current in order to operate on its contents, without changing what is
displayed on the screen. The most basic function for designating a
current buffer is @code{set-buffer}.
@defun current-buffer
This function returns the current buffer.
@ -118,12 +119,12 @@ on it.
When an editing command returns to the editor command loop, Emacs
automatically calls @code{set-buffer} on the buffer shown in the
selected window. This is to prevent confusion: it ensures that the
buffer that the cursor is in, when Emacs reads a command, is the
buffer to which that command applies (@pxref{Command Loop}). Thus,
you should not use @code{set-buffer} to switch visibly to a different
buffer; for that, use the functions described in @ref{Switching
Buffers}.
selected window (@pxref{Selecting Windows}). This is to prevent
confusion: it ensures that the buffer that the cursor is in, when Emacs
reads a command, is the buffer to which that command applies
(@pxref{Command Loop}). Thus, you should not use @code{set-buffer} to
switch visibly to a different buffer; for that, use the functions
described in @ref{Switching Buffers}.
When writing a Lisp function, do @emph{not} rely on this behavior of
the command loop to restore the current buffer after an operation.
@ -912,16 +913,17 @@ History}) provided it is shown in that window.
If @var{buffer-or-name} is @code{nil} or omitted, this means to bury the
current buffer. In addition, if the current buffer is displayed in the
selected window, this makes sure that the window is either deleted or
another buffer is shown in it. More precisely, if the selected window
is dedicated (@pxref{Dedicated Windows}) and there are other windows on
its frame, the window is deleted. If it is the only window on its frame
and that frame is not the only frame on its terminal, the frame is
dismissed by calling the function specified by
@code{frame-auto-hide-function} (@pxref{Quitting Windows}). Otherwise,
it calls @code{switch-to-prev-buffer} (@pxref{Window History}) to show
another buffer in that window. If @var{buffer-or-name} is displayed in
some other window, it remains displayed there.
selected window (@pxref{Selecting Windows}), this makes sure that the
window is either deleted or another buffer is shown in it. More
precisely, if the selected window is dedicated (@pxref{Dedicated
Windows}) and there are other windows on its frame, the window is
deleted. If it is the only window on its frame and that frame is not
the only frame on its terminal, the frame is dismissed by calling the
function specified by @code{frame-auto-hide-function} (@pxref{Quitting
Windows}). Otherwise, it calls @code{switch-to-prev-buffer}
(@pxref{Window History}) to show another buffer in that window. If
@var{buffer-or-name} is displayed in some other window, it remains
displayed there.
To replace a buffer in all the windows that display it, use
@code{replace-buffer-in-windows}, @xref{Buffers and Windows}.

View file

@ -601,6 +601,9 @@ Put them into three windows, selecting the last one."
@node Command Modes
@subsection Specifying Modes For Commands
@cindex commands, mode-specific
@cindex commands, specify as mode-specific
@cindex mode-specific commands
Many commands in Emacs are general, and not tied to any specific mode.
For instance, @kbd{M-x kill-region} can be used in pretty much any
@ -1173,6 +1176,7 @@ intended by Lisp code to be used as an event.
* Repeat Events:: Double and triple click (or drag, or down).
* Motion Events:: Just moving the mouse, not pushing a button.
* Focus Events:: Moving the mouse between frames.
* Xwidget Events:: Events generated by xwidgets.
* Misc Events:: Other events the system can generate.
* Event Examples:: Examples of the lists for mouse events.
* Classifying Events:: Finding the modifier keys in an event symbol.
@ -1421,9 +1425,12 @@ binding of the key sequence.
@subsection Click Events
@cindex click event
@cindex mouse click event
@cindex mouse wheel event
When the user presses a mouse button and releases it at the same
location, that generates a @dfn{click} event. All mouse click event
location, that generates a @dfn{click} event. Depending on how your
window-system reports mouse-wheel events, turning the mouse wheel can
generate either a mouse click or a mouse-wheel event. All mouse event
share the same format:
@example
@ -1434,7 +1441,8 @@ share the same format:
@item @var{event-type}
This is a symbol that indicates which mouse button was used. It is
one of the symbols @code{mouse-1}, @code{mouse-2}, @dots{}, where the
buttons are numbered left to right.
buttons are numbered left to right. For mouse-wheel event, it can be
@code{wheel-up} or @code{wheel-down}.
You can also use prefixes @samp{A-}, @samp{C-}, @samp{H-}, @samp{M-},
@samp{S-} and @samp{s-} for modifiers alt, control, hyper, meta, shift
@ -1447,19 +1455,20 @@ describe events by their types; thus, if there is a key binding for
@item @var{position}
@cindex mouse position list
This is a @dfn{mouse position list} specifying where the mouse click
This is a @dfn{mouse position list} specifying where the mouse event
occurred; see below for details.
@item @var{click-count}
This is the number of rapid repeated presses so far of the same mouse
button. @xref{Repeat Events}.
button or the number of repeated turns of the wheel. @xref{Repeat
Events}.
@end table
To access the contents of a mouse position list in the
@var{position} slot of a click event, you should typically use the
@var{position} slot of a mouse event, you should typically use the
functions documented in @ref{Accessing Mouse}.
The explicit format of the list depends on where the click occurred.
The explicit format of the list depends on where the event occurred.
For clicks in the text area, mode line, header line, tab line, or in
the fringe or marginal areas, the mouse position list has the form
@ -1474,11 +1483,11 @@ The meanings of these list elements are as follows:
@table @asis
@item @var{window}
The window in which the click occurred.
The window in which the mouse event occurred.
@item @var{pos-or-area}
The buffer position of the character clicked on in the text area; or,
if the click was outside the text area, the window area where it
if the event was outside the text area, the window area where it
occurred. It is one of the symbols @code{mode-line},
@code{header-line}, @code{tab-line}, @code{vertical-line},
@code{left-margin}, @code{right-margin}, @code{left-fringe}, or
@ -1490,10 +1499,10 @@ happens after the imaginary prefix keys for the event are registered
by Emacs. @xref{Key Sequence Input}.
@item @var{x}, @var{y}
The relative pixel coordinates of the click. For clicks in the text
The relative pixel coordinates of the event. For events in the text
area of a window, the coordinate origin @code{(0 . 0)} is taken to be
the top left corner of the text area. @xref{Window Sizes}. For
clicks in a mode line, header line or tab line, the coordinate origin
events in a mode line, header line or tab line, the coordinate origin
is the top left corner of the window itself. For fringes, margins,
and the vertical border, @var{x} does not have meaningful data.
For fringes and margins, @var{y} is relative to the bottom edge of the
@ -1505,9 +1514,9 @@ The time at which the event occurred, as an integer number of
milliseconds since a system-dependent initial time.
@item @var{object}
Either @code{nil}, which means the click occurred on buffer text, or a
Either @code{nil}, which means the event occurred on buffer text, or a
cons cell of the form @w{(@var{string} . @var{string-pos})} if there
is a string from a text property or an overlay at the click position.
is a string from a text property or an overlay at the event position.
@table @asis
@item @var{string}
@ -1592,7 +1601,8 @@ handle), @code{up} (the up arrow at one end of the scroll bar), or
@end table
For clicks on the frame's internal border (@pxref{Frame Layout}),
@var{position} has this form:
the frame's tool bar (@pxref{Tool Bar}) or tab bar, @var{position}
has this form:
@example
(@var{frame} @var{part} (@var{X} . @var{Y}) @var{timestamp})
@ -1600,19 +1610,20 @@ For clicks on the frame's internal border (@pxref{Frame Layout}),
@table @asis
@item @var{frame}
The frame whose internal border was clicked on.
The frame whose internal border or tool bar or tab bar was clicked on.
@item @var{part}
The part of the internal border which was clicked on. This can be one
The part of the frame which was clicked on. This can be one
of the following:
@table @code
@item nil
The frame does not have an internal border. This usually happens on
text-mode frames. This can also happen on GUI frames with internal
border if the frame doesn't have its @code{drag-internal-border}
parameter (@pxref{Mouse Dragging Parameters}) set to a non-@code{nil}
value.
@cindex tool-bar mouse events
@item tool-bar
The frame has a tool bar, and the event was in the tool-bar area.
@cindex tab-bar mouse events
@item tab-bar
The frame has a tab bar, and the event was in the tab-bar area.
@item left-edge
@itemx top-edge
@ -1626,6 +1637,13 @@ canonical character from the border's nearest corner.
@itemx bottom-right-corner
@itemx bottom-left-corner
The click was on the corresponding corner of the internal border.
@item nil
The frame does not have an internal border, and the event was not on
the tab bar or the tool bar. This usually happens on text-mode
frames. This can also happen on GUI frames with internal border if
the frame doesn't have its @code{drag-internal-border} parameter
(@pxref{Mouse Dragging Parameters}) set to a non-@code{nil} value.
@end table
@end table
@ -1854,6 +1872,85 @@ sequence---that is, after a prefix key---then Emacs reorders the events
so that the focus event comes either before or after the multi-event key
sequence, and not within it.
@node Xwidget Events
@subsection Xwidget events
Xwidgets (@pxref{Xwidgets}) can send events to update Lisp programs on
their status. These events are dubbed @code{xwidget-events}, and
contain various data describing the nature of the change.
@table @code
@cindex @code{xwidget-event} event
@item (xwidget-event @var{kind} @var{xwidget} @var{arg})
This event is sent whenever some kind of update occurs in
@var{xwidget}. There are several types of updates, identified by
their @var{kind}.
@table @code
@cindex @code{load-changed} xwidget event
@item load-changed
This xwidget event indicates that the @var{xwidget} has reached a
particular point of the page-loading process. When these events are
sent, @var{arg} will contain a string that futher describes the status
of the widget:
@table @samp
@cindex @samp{load-started} in xwidgets
@item load-started
This means the widget has begun a page-loading operation.
@cindex @samp{load-finished} in xwidgets
@item load-finished
This means the @var{xwidget} has finished processing whatever
page-loading operation that it was previously performing.
@cindex @samp{load-redirected} in xwidgets
@item load-redirected
This means the @var{xwidget} has encountered and followed a redirect
during the page-loading operation.
@cindex @samp{load-committed} in xwidgets
@item load-committed
This means the @var{xwidget} has committed to a given URL during the
page-loading operation, i.e.@: the URL is the final URL that will be
rendered by @var{xwidget} during the current page-loading operation.
@end table
@cindex @code{download-callback} xwidget events
@item download-callback
This event indicates that a download of some kind has been completed.
@end table
In the above events, there can be arguments after @var{arg}, which
itself indicates the URL from which the download file was retrieved:
the first argument after @var{arg} indicates the MIME type of the
download, as a string, while the second argument contains the full
file name of the downloaded file.
@table @code
@cindex @code{download-started} xwidget events
@item download-started
This event indicates that a download has been started. In these
events, @var{arg} contains the URL of the file that is currently being
downloaded.
@cindex @code{javascript-callback} xwidget events
@item javascript-callback
This event contains JavaScript callback data. These events are used
internally by @code{xwidget-webkit-execute-script}.
@end table
@cindex @code{xwidget-display-event} event
@item (xwidget-display-event @var{xwidget})
This event is sent whenever an xwidget requests that another xwidget
be displayed. @var{xwidget} is the xwidget that should be displayed.
@var{xwidget}'s buffer will be set to a temporary buffer. When
displaying the widget, care should be taken to replace the buffer with
the buffer in which the xwidget will be displayed, using
@code{set-xwidget-buffer} (@pxref{Xwidgets}).
@end table
@node Misc Events
@subsection Miscellaneous System Events
@ -2337,10 +2434,9 @@ This function returns position information corresponding to pixel
coordinates @var{x} and @var{y} in a specified frame or window,
@var{frame-or-window}, which defaults to the selected window.
The coordinates @var{x} and @var{y} are relative to the
frame or window used.
If @var{whole} is @code{nil}, the coordinates are relative
to the window text area, otherwise they are relative to
the entire window area including scroll bars, margins and fringes.
text area of the selected window.
If @var{whole} is @code{non-nil}, the @var{x} coordinate is relative
to the entire window area including scroll bars, margins and fringes.
@end defun
@node Accessing Scroll
@ -2600,10 +2696,14 @@ returns the key sequence as a vector, never as a string.
@cindex upper case key sequence
@cindex downcasing in @code{lookup-key}
@cindex shift-translation
@vindex translate-upper-case-key-bindings
If an input character is upper-case (or has the shift modifier) and
has no key binding, but its lower-case equivalent has one, then
@code{read-key-sequence} converts the character to lower case. Note
that @code{lookup-key} does not perform case conversion in this way.
@code{read-key-sequence} converts the character to lower case. (This
behaviour can be disabled by setting the
@code{translate-upper-case-key-bindings} user option to @code{nil}.)
Note that @code{lookup-key} does not perform case conversion in this
way.
@vindex this-command-keys-shift-translated
When reading input results in such a @dfn{shift-translation}, Emacs
@ -3568,17 +3668,19 @@ commands.
@cindex exit recursive editing
@cindex aborting
To invoke a recursive editing level, call the function
@code{recursive-edit}. This function contains the command loop; it also
contains a call to @code{catch} with tag @code{exit}, which makes it
possible to exit the recursive editing level by throwing to @code{exit}
(@pxref{Catch and Throw}). If you throw a @code{nil} value, then
@code{recursive-edit} returns normally to the function that called it.
The command @kbd{C-M-c} (@code{exit-recursive-edit}) does this.
Throwing a @code{t} value causes @code{recursive-edit} to quit, so that
control returns to the command loop one level up. This is called
@dfn{aborting}, and is done by @kbd{C-]} (@code{abort-recursive-edit}).
You can also throw a function value. In that case,
@code{recursive-edit}. This function contains the command loop; it
also contains a call to @code{catch} with tag @code{exit}, which makes
it possible to exit the recursive editing level by throwing to
@code{exit} (@pxref{Catch and Throw}). Throwing a @code{t} value
causes @code{recursive-edit} to quit, so that control returns to the
command loop one level up. This is called @dfn{aborting}, and is done
by @kbd{C-]} (@code{abort-recursive-edit}). Similarly, you can throw
a string value to make @code{recursive-edit} signal an error, printing
this string as the message. If you throw a function,
@code{recursive-edit} will call it without arguments before returning.
Throwing any other value, will make @code{recursive-edit} return
normally to the function that called it. The command @kbd{C-M-c}
(@code{exit-recursive-edit}) does this.
Most applications should not use recursive editing, except as part of
using the minibuffer. Usually it is more convenient for the user if you

View file

@ -811,8 +811,7 @@ for you to be able to native-compile Lisp code.
@vindex native-compile@r{, a Lisp feature}
To determine whether the current Emacs process can produce and load
natively-compiled Lisp code, test whether the @code{native-compile}
feature is available (@pxref{Named Features}). Alternatively, call
natively-compiled Lisp code, call
@code{native-comp-available-p} (@pxref{Native-Compilation Functions}).
Unlike byte-compiled code, natively-compiled Lisp code is executed
@ -904,13 +903,20 @@ invokes the same Emacs executable as the process that called this
function.
@end defun
@defun batch-native-compile
@defun batch-native-compile &optional for-tarball
This function runs native-compilation on files specified on the Emacs
command line in batch mode. It must be used only in a batch execution
of Emacs, as it kills Emacs upon completion of the compilation. If
one or more of the files fail to compile, the Emacs process will
attempt to compile all the other files, and will terminate with a
non-zero status code.
non-zero status code. The optional argument @var{for-tarball}, if
non-@code{nil}, tells the function to place the resulting @file{.eln}
files in the last directory mentioned in
@code{native-comp-eln-load-path} (@pxref{Library Search}); this is
meant to be used as part of building an Emacs source tarball for the
first time, when the natively-compiled files, which are absent from
the source tarball, should be generated in the build tree instead of
the user's cache directory.
@end defun
Native compilation can be run entirely asynchronously, in a subprocess

View file

@ -555,6 +555,16 @@ Two symbols to avoid are @code{t}, which behaves like @code{_}
Likewise, it makes no sense to bind keyword symbols
(@pxref{Constant Variables}).
@item (cl-type @var{type})
Matches if @var{expval} is of type @var{type}, which is a type
descriptor as accepted by @code{cl-typep} (@pxref{Type Predicates,,,cl,Common
Lisp Extensions}). Examples:
@lisp
(cl-type integer)
(cl-type (integer 0 10))
@end lisp
@item (pred @var{function})
Matches if the predicate @var{function} returns non-@code{nil}
when called on @var{expval}. The test can be negated with the syntax
@ -1273,6 +1283,15 @@ bindings that can then be used inside @var{body}. The variable
bindings are produced by destructuring binding of elements of
@var{pattern} to the values of the corresponding elements of the
evaluated @var{exp}.
Here's a trivial example:
@example
(pcase-let ((`(,major ,minor)
(split-string "image/png" "/")))
minor)
@result{} "png"
@end example
@end defmac
@defmac pcase-let* bindings body@dots{}
@ -1302,6 +1321,10 @@ element of @var{list}. The bindings are performed as if by
up being equivalent to @code{dolist} (@pxref{Iteration}).
@end defmac
@defmac pcase-setq pattern value@dots{}
Assign values to variables in a @code{setq} form, destructuring each
@var{value} according to its respective @var{pattern}.
@end defmac
@node Iteration
@section Iteration

View file

@ -594,6 +594,9 @@ want to take the time to work out a more specific type to use.
@item integer
The value must be an integer.
@item natnum
The value must be a nonnegative integer.
@item number
The value must be a number (floating point or integer).

View file

@ -1043,9 +1043,9 @@ functions written in Lisp, it cannot profile Emacs primitives.
@cindex benchmarking
You can measure the time it takes to evaluate individual Emacs Lisp
forms using the @file{benchmark} library. See the function
@code{benchmark-call} as well as the macros
@code{benchmark-run}, @code{benchmark-run-compiled} and
@code{benchmark-progn} in @file{benchmark.el}. You can also use the
@code{benchmark-call} as well as the macros @code{benchmark-run},
@code{benchmark-run-compiled}, @code{benchmark-progn} and
@code{benchmark-call} in @file{benchmark.el}. You can also use the
@code{benchmark} command for timing forms interactively.
@c Not worth putting in the printed manual.

View file

@ -152,6 +152,9 @@ truncation; a @samp{\} on the rightmost column indicates a line that
wraps. (The display table can specify alternate characters to use
for this; @pxref{Display Tables}).
Since wrapping and truncation of text contradict each other, Emacs
turns off line truncation when wrapping is requested, and vice versa.
@defopt truncate-lines
If this buffer-local variable is non-@code{nil}, lines that extend
beyond the right edge of the window are truncated; otherwise, they are
@ -558,6 +561,26 @@ You can rewrite the previous example with this macro as follows:
@end example
@end defmac
@defmac with-delayed-message (timeout message) body@dots{}
Sometimes it's unclear whether an operation will take a long time to
execute or not, or it can be inconvenient to implement a progress
reporter. This macro can be used in those situations.
@lisp
(with-delayed-message (2 (format "Gathering data for %s" entry))
(setq data (gather-data entry)))
@end lisp
In this example, if the body takes more than two seconds to execute,
the message will be displayed. If it takes a shorter time than that,
the message won't be displayed. In either case, the body is evaluated
as normally, and the return value of the final element in the body is
the return value of the macro.
The @var{message} element is evaluated before @var{body}, and is
always evaluated, whether the message is displayed or not.
@end defmac
@node Logging Messages
@subsection Logging Messages in @file{*Messages*}
@cindex logging echo-area messages
@ -646,9 +669,9 @@ If the value is zero, then command input is not echoed.
@defvar message-truncate-lines
Normally, displaying a long message resizes the echo area to display
the entire message. But if the variable @code{message-truncate-lines}
is non-@code{nil}, the echo area does not resize, and the message is
truncated to fit it.
the entire message, wrapping long line as needed. But if the variable
@code{message-truncate-lines} is non-@code{nil}, long lines of
echo-area message are instead truncated to fit the mini-window width.
@end defvar
The variable @code{max-mini-window-height}, which specifies the
@ -1331,6 +1354,11 @@ are not resized. By default, this mode uses @code{fit-window-to-buffer}
(@pxref{Resizing Windows}) for resizing. You can specify a different
function by customizing the options @code{temp-buffer-max-height} and
@code{temp-buffer-max-width} below.
The effect of this option can be overridden by providing a suitable
@code{window-height}, @code{window-width} or @code{window-size} action
alist entry for @code{display-buffer} (@pxref{Buffer Display Action
Alists}).
@end defopt
@defopt temp-buffer-max-height
@ -1917,7 +1945,8 @@ This function returns a list of the overlays that overlap the region
contains one or more characters in the region; empty overlays
(@pxref{Managing Overlays, empty overlay}) overlap if they are at
@var{beg}, strictly between @var{beg} and @var{end}, or at @var{end}
when @var{end} denotes the position at the end of the buffer.
when @var{end} denotes the position at the end of the accessible part
of the buffer.
@end defun
@defun next-overlay-change pos
@ -1979,7 +2008,8 @@ The return value is an approximation: it only considers the values
returned by @code{char-width} for the constituent characters, always
takes a tab character as taking @code{tab-width} columns, ignores
display properties and fonts, etc. For these reasons, we recommend
using @code{window-text-pixel-size}, described below, instead.
using @code{window-text-pixel-size} or @code{string-pixel-width},
described below, instead.
@end defun
@defun truncate-string-to-width string width &optional start-column padding ellipsis ellipsis-text-property
@ -1993,11 +2023,11 @@ If a multi-column character in @var{string} exceeds the goal
result can sometimes fall short of @var{width}, but cannot go beyond
it.
The optional argument @var{start-column} specifies the starting column.
If this is non-@code{nil}, then the first @var{start-column} columns of
the string are omitted from the result. If one multi-column character in
@var{string} extends across the column @var{start-column}, that
character is omitted.
The optional argument @var{start-column} specifies the starting
column; it defaults to zero. If this is non-@code{nil}, then the
first @var{start-column} columns of the string are omitted from the
result. If one multi-column character in @var{string} extends across
the column @var{start-column}, that character is omitted.
The optional argument @var{padding}, if non-@code{nil}, is a padding
character added at the beginning and end of the result string, to
@ -2022,12 +2052,22 @@ means hide the excess parts of @var{string} with a @code{display} text
property (@pxref{Display Property}) showing the ellipsis, instead of
actually truncating the string.
@group
@example
(truncate-string-to-width "\tab\t" 12 4)
@result{} "ab"
(truncate-string-to-width "\tab\t" 12 4 ?\s)
@result{} " ab "
@end example
@end group
This function uses @code{string-width} and @code{char-width} to find
the suitable truncation point when @var{string} is too wide, so it
suffers from the same basic issues as @code{string-width} does. In
particular, when character composition happens within @var{string},
the display width of a string could be smaller than the sum of widths
of the constituent characters, and this function might return
inaccurate results.
@end defun
@defun truncate-string-ellipsis
@ -2046,7 +2086,7 @@ displayed in a given window. This function is used by
(@pxref{Resizing Windows}) to make a window exactly as large as the text
it contains.
@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line
@defun window-text-pixel-size &optional window from to x-limit y-limit mode-lines
This function returns the size of the text of @var{window}'s buffer in
pixels. @var{window} must be a live window and defaults to the
selected one. The return value is a cons of the maximum pixel-width
@ -2088,12 +2128,12 @@ calculating the pixel-height of a large buffer can take some time, it
makes sense to specify this argument; in particular, if the caller
does not know the size of the buffer.
The optional argument @var{mode-and-header-line} @code{nil} or omitted
means to not include the height of the mode- or header-line of
@var{window} in the return value. If it is either the symbol
@code{mode-line} or @code{header-line}, include only the height of that
The optional argument @var{mode-lines} @code{nil} or omitted means to
not include the height of the mode-, tab- or header-line of @var{window}
in the return value. If it is either the symbol @code{mode-line},
@code{tab-line} or @code{header-line}, include only the height of that
line, if present, in the return value. If it is @code{t}, include the
height of both, if present, in the return value.
height of all of these lines, if present, in the return value.
@end defun
@code{window-text-pixel-size} treats the text displayed in a window as a
@ -2161,12 +2201,42 @@ though when this function is run from an idle timer with a delay of zero
seconds.
@end defun
@defun string-pixel-width string
This is a convenience function that uses @code{window-text-pixel-size}
to compute the width of @var{string} (in pixels).
@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
(@pxref{Line Height}).
@end defun
@cindex grapheme cluster
@defun string-glyph-split string
When character compositions are in effect, sequence of characters can
be composed for display to form @dfn{grapheme clusters}, for example
to display accented characters, or ligatures, or Emoji, or when
complex text shaping requires that for some scripts. When that
happens, characters no longer map in a simple way to display columns,
and display layout decisions with such strings, such as truncating too
wide strings, can be a complex job. This function helps in performing
suvh jobs: it splits up its argument @var{string} into a list of
substrings, where each substring produces a single grapheme cluster
that should be displayed as a unit. Lisp programs can then use this
list to construct visually-valid substrings of @var{string} which will
look correctly on display, or compute the width of any substring of
@var{string} by adding the width of its constituents in the returned
list, etc.
For instance, if you want to display a string without the first glyph,
you can say:
@example
(apply #'insert (cdr (string-glyph-split string))))
@end example
@end defun
When a buffer is displayed with line numbers (@pxref{Display Custom,,,
emacs, The GNU Emacs Manual}), it is sometimes useful to know the
width taken for displaying the line numbers. The following function
@ -2358,8 +2428,10 @@ value @code{unspecified}. This special value means that the face
doesn't specify that attribute directly. An @code{unspecified}
attribute tells Emacs to refer instead to a parent face (see the
description @code{:inherit} attribute below); or, failing that, to an
underlying face (@pxref{Displaying Faces}). The @code{default} face
must specify all attributes.
underlying face (@pxref{Displaying Faces}). (However,
@code{unspecified} is not a valid value in @code{defface}.)
The @code{default} face must specify all attributes.
Some of these attributes are meaningful only on certain kinds of
displays. If your display cannot handle a certain attribute, the
@ -2746,6 +2818,11 @@ terminal must match one of the @var{value}s specified for it in
:group 'basic-faces)
@end example
@kindex face-defface-spec @r{(face symbol property)}
@kindex saved-face @r{(face symbol property)}
@kindex customized-face @r{(face symbol property)}
@kindex theme-face @r{(face symbol property)}
@kindex face-documentation @r{(face symbol property)}
Internally, Emacs stores each face's default spec in its
@code{face-defface-spec} symbol property (@pxref{Symbol Properties}).
The @code{saved-face} property stores any face spec saved by the user
@ -2802,9 +2879,12 @@ This function returns the value of the @var{attribute} attribute for
If @var{frame} is omitted or @code{nil}, that means the selected frame
(@pxref{Input Focus}). If @var{frame} is @code{t}, this function
returns the value of the specified attribute for newly-created frames
(this is normally @code{unspecified}, unless you have specified some
value using @code{set-face-attribute}; see below).
returns the value of the specified attribute for newly-created frames,
i.e.@: the value of the attribute before applying the face spec in the
face's @code{defface} definition (@pxref{Defining Faces}) or the spec
set by @code{face-spec-set}. This default value of @var{attribute} is
normally @code{unspecified}, unless you have specified some other
value using @code{set-face-attribute}; see below.
If @var{inherit} is @code{nil}, only attributes directly defined by
@var{face} are considered, so the return value may be
@ -2854,7 +2934,12 @@ elements of the result are name-value pairs of the form
@w{@code{(@var{attr-name} . @var{attr-value})}}. Optional argument
@var{frame} specifies the frame whose definition of @var{face} to
return; if omitted or @code{nil}, the returned value describes the
default attributes of @var{face} for newly created frames.
default attributes of @var{face} for newly created frames, i.e.@: the
values these attributes have before applying the face spec in the
face's @code{defface} definition or the spec set by
@code{face-spec-set}. These default values of the attributes are
normally @code{unspecified}, unless you have specified some other
value using @code{set-face-attribute}; see below.
@end defun
@defun merge-face-attribute attribute value1 value2
@ -2872,7 +2957,7 @@ 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 specifies in this way override the face
@var{frame}. The attributes specified in this way override the face
spec(s) belonging to @var{face}.
The extra arguments @var{arguments} specify the attributes to set, and
@ -2889,9 +2974,10 @@ sets the attribute @code{:weight} to @code{bold} and the attribute
If @var{frame} is @code{t}, this function sets the default attributes
for newly created frames. If @var{frame} is @code{nil}, this function
sets the attributes for all existing frames, as well as for newly
created frames.
for newly created frames; they will effectively override the attribute
values specified by @code{defface}. If @var{frame} is @code{nil},
this function sets the attributes for all existing frames, as well as
for newly created frames.
@end defun
The following commands and functions mostly provide compatibility
@ -5255,13 +5341,13 @@ to modify the set of known names for these dynamic libraries.
Supported image formats (and the required support libraries) include
PBM and XBM (which do not depend on support libraries and are always
available), XPM (@code{libXpm}), GIF (@code{libgif} or
@code{libungif}), JPEG (@code{libjpeg}), TIFF
(@code{libtiff}), PNG (@code{libpng}), and SVG (@code{librsvg}).
@code{libungif}), JPEG (@code{libjpeg}), TIFF (@code{libtiff}), PNG
(@code{libpng}), SVG (@code{librsvg}), and WebP (@code{libwebp}).
Each of these image formats is associated with an @dfn{image type
symbol}. The symbols for the above formats are, respectively,
@code{pbm}, @code{xbm}, @code{xpm}, @code{gif},
@code{jpeg}, @code{tiff}, @code{png}, and @code{svg}.
@code{pbm}, @code{xbm}, @code{xpm}, @code{gif}, @code{jpeg},
@code{tiff}, @code{png}, @code{svg}, and @code{webp}.
Furthermore, if you build Emacs with ImageMagick
(@code{libMagickWand}) support, Emacs can display any image format
@ -5969,7 +6055,7 @@ To @var{svg} add an embedded (raster) image placed at
@code{:base-uri} specifies a (possibly non-existing) file name of the
svg image to be created, thus all the embedded files are searched
relatively to the @code{:base-uri} filename's directory. If
@code{:base-uri} is ommited, then filename from where svg image is
@code{:base-uri} is omitted, then filename from where svg image is
loaded is used. Using @code{:base-uri} improves the performance of
embedding large images, comparing to @code{svg-embed}, because all the
work is done directly by librsvg.
@ -6265,6 +6351,9 @@ Image type @code{png}.
@item TIFF
Image type @code{tiff}.
Supports the @code{:index} property. @xref{Multi-Frame Images}.
@item WebP
Image type @code{webp}.
@end table
@node Defining Images
@ -6416,7 +6505,7 @@ will compute a scaling factor based on the font pixel size.
property yourself, but it is easier to use the functions in this
section.
@defun insert-image image &optional string area slice
@defun insert-image image &optional string area slice inhibit-isearch
This function inserts @var{image} in the current buffer at point. The
value @var{image} should be an image descriptor; it could be a value
returned by @code{create-image}, or the value of a symbol defined with
@ -6441,7 +6530,9 @@ image.
Internally, this function inserts @var{string} in the buffer, and gives
it a @code{display} property which specifies @var{image}. @xref{Display
Property}.
Property}. By default, doing interactive searches in the buffer will
consider @var{string} when searching. If @var{inhibit-isearch} is
non-@code{nil}, this is inhibited.
@end defun
@cindex slice, image
@ -6517,6 +6608,11 @@ cache, it can always be displayed, even if the value of
@code{max-image-size} is subsequently changed (@pxref{Image Cache}).
@end defvar
@defun image-at-point-p
This function returns @code{t} if point is on an image, and @code{nil}
otherwise.
@end defun
Images inserted with the insertion functions above also get a local
keymap installed in the text properties (or overlays) that span the
displayed image. This keymap defines the following commands:
@ -6688,7 +6784,10 @@ xwidget object, and then use that object as the display specifier
in a @code{display} text or overlay property (@pxref{Display
Property}).
@defun make-xwidget type title width height arguments &optional buffer
Embedded widgets can send events notifying Lisp code about changes
occurring within them. (@pxref{Xwidget Events}).
@defun make-xwidget type title width height arguments &optional buffer related
This creates and returns an xwidget object. If
@var{buffer} is omitted or @code{nil}, it defaults to the current
buffer. If @var{buffer} names a buffer that doesn't exist, it will be
@ -6701,7 +6800,10 @@ The WebKit component.
@end table
The @var{width} and @var{height} arguments specify the widget size in
pixels, and @var{title}, a string, specifies its title.
pixels, and @var{title}, a string, specifies its title. @var{related}
is used internally by the WebKit widget, and specifies another WebKit
widget that the newly created widget should share settings and
subprocesses with.
@end defun
@defun xwidgetp object
@ -6722,6 +6824,10 @@ property list given by @var{plist}.
This function returns the buffer of @var{xwidget}.
@end defun
@defun set-xwidget-buffer xwidget buffer
This function sets the buffer of @var{xwidget} to @var{buffer}.
@end defun
@defun get-buffer-xwidgets buffer
This function returns a list of xwidget objects associated with the
@var{buffer}, which can be specified as a buffer object or a name of
@ -6782,6 +6888,61 @@ This function returns the current setting of @var{xwidget}s
query-on-exit flag, either @code{t} or @code{nil}.
@end defun
@defun xwidget-perform-lispy-event xwidget event frame
Send an input event @var{event} to @var{xwidget}. The precise action
performed is platform-specific. @xref{Input Events}.
You can optionally pass the frame on which the event was generated via
@var{frame}. On X11, modifier keys in key events will not be
considered if @var{frame} is @code{nil}, and the selected frame is not
an X-Windows frame.
On GTK, only keyboard and function key events are supported. Mouse,
motion, and click events are dispatched to the xwidget without going
through Lisp code, and as such shouldn't require this function to be
called.
@end defun
@defun xwidget-webkit-search query xwidget &optional case-insensitive backwards wrap-around
Start an incremental search on the WebKit widget @var{xwidget} with
the string @var{query} as the query. @var{case-insensitive} denotes
whether or not the search is case-insensitive, @var{backwards}
determines if the search is performed backwards towards the start of
the document, and @var{wrap-around} determines whether or not the
search terminates at the end of the document.
If the function is called while a search query is already present,
then the query specified here will replace the existing query.
To stop a search query, use @code{xwidget-webkit-finish-search}.
@end defun
@defun xwidget-webkit-next-result xwidget
Display the next search result in @var{xwidget}. This function will
signal an error if a search query has not been already started in
@var{xwidget} through @code{xwidget-webkit-search}.
If @code{wrap-around} was non-nil when @code{xwidget-webkit-search}
was called, then the search will restart from the beginning of the
document when its end is reached.
@end defun
@defun xwidget-webkit-previous-result xwidget
Display the previous search result in @var{xwidget}. This function
signals an error if a search query has not been already started in
@var{xwidget} through @code{xwidget-webkit-search}.
If @code{wrap-around} was non-nil when @code{xwidget-webkit-search}
was called, then the search will restart from the end of the
document when its beginning is reached.
@end defun
@defun xwidget-webkit-finish-search xwidget
Finish a search operation started with @code{xwidget-webkit-search} in
@var{xwidget}. If there is no query currently ongoing, this function
signals an error.
@end defun
@node Buttons
@section Buttons
@cindex buttons in buffers
@ -6975,7 +7136,7 @@ This inserts a button with the label @var{label} at point, using text
properties.
@end defun
@defun button-buttonize string callback &optional data
@defun buttonize string callback &optional data
Sometimes it's more convenient to make a string into a button without
inserting it into a buffer immediately, for instance when creating
data structures that may then, later, be inserted into a buffer. This
@ -7948,6 +8109,11 @@ Characters of Unicode General Category [Cf], such as U+200E
@sc{left-to-right mark}, but excluding characters that have graphic
images, such as U+00AD @sc{soft hyphen}.
@item variation-selectors
Unicode VS-1 through VS-16 (U+FE00 through U+FE0F), which are used to
select between different glyphs for the same codepoints (typically
emojis).
@item no-font
Characters for which there is no suitable font, or which cannot be
encoded by the terminal's coding system.

View file

@ -1216,9 +1216,7 @@ directs processing of arguments.
@table @asis
@item @code{t}
All arguments are instrumented for evaluation.
@item @code{0}
None of the arguments is instrumented.
This is short for @code{(body)}.
@item a symbol
The symbol must have an Edebug specification, which is used instead.
@ -1528,6 +1526,16 @@ example of the @code{let} specification.
It may be easier to understand Edebug specifications by studying
the examples provided here.
Consider a hypothetical macro @code{my-test-generator} that runs
tests on supplied lists of data. Although it is Edebug's default
behavior to not instrument arguments as code, as controlled by
@code{edebug-eval-macro-args} (@pxref{Instrumenting Macro Calls}),
it can be useful to explicitly document that the arguments are data:
@example
(def-edebug-spec my-test-generator (&rest sexp))
@end example
A @code{let} special form has a sequence of bindings and a body. Each
of the bindings is either a symbol or a sublist with a symbol and
optional expression. In the specification below, notice the @code{gate}

View file

@ -161,7 +161,7 @@ Cover art by Etienne Suvasa.
@ifset WWW_GNU_ORG
@html
<p>The homepage for GNU Emacs is at
<p>The GNU Emacs website is at
<a href="/software/emacs/">https://www.gnu.org/software/emacs/</a>.<br>
For information on using Emacs, refer to the
<a href="/software/emacs/manual/emacs.html">Emacs Manual</a>.<br>
@ -234,7 +234,7 @@ To view this manual in other formats, click
Appendices
* Antinews:: Info for users downgrading to Emacs 26.
* Antinews:: Info for users downgrading to Emacs 27.
* GNU Free Documentation License:: The license for this documentation.
* GPL:: Conditions for copying and changing GNU Emacs.
* Tips:: Advice and coding conventions for Emacs Lisp.
@ -365,6 +365,7 @@ Editing Types
* Keymap Type:: What function a keystroke invokes.
* Overlay Type:: How an overlay is represented.
* Font Type:: Fonts for displaying text.
* Xwidget Type:: Embeddable widgets.
Numbers
@ -788,6 +789,7 @@ Defining Commands
* Interactive Codes:: The standard letter-codes for reading arguments
in various ways.
* Interactive Examples:: Examples of how to read interactive arguments.
* Command Modes:: Specifying that commands are for a specific mode.
* Generic Commands:: Select among command alternatives.
@ -1047,6 +1049,7 @@ Windows
* Basic Windows:: Basic information on using windows.
* Windows and Frames:: Relating windows to the frame they appear on.
* Selecting Windows:: The selected window is the one that you edit in.
* Window Sizes:: Accessing a window's size.
* Resizing Windows:: Changing the sizes of windows.
* Preserving Window Sizes:: Preserving the size of windows.
@ -1054,7 +1057,6 @@ Windows
* Deleting Windows:: Deleting a window gives its space to other windows.
* Recombining Windows:: Preserving the frame layout when splitting and
deleting windows.
* Selecting Windows:: The selected window is the one that you edit in.
* Cyclic Window Ordering:: Moving around the existing windows.
* Buffers and Windows:: Each window displays the contents of a buffer.
* Switching Buffers:: Higher-level functions for switching to a buffer.
@ -1122,6 +1124,7 @@ Frames
* Dialog Boxes:: Displaying a box to ask yes or no.
* Pointer Shape:: Specifying the shape of the mouse pointer.
* Window System Selections::Transferring text to and from other X clients.
* Yanking Media:: Yanking things that aren't plain text.
* Drag and Drop:: Internals of Drag-and-Drop implementation.
* Color Names:: Getting the definitions of color names.
* Text Terminal Colors:: Defining colors for text terminals.
@ -1315,6 +1318,7 @@ Regular Expressions
* Rx Notation:: An alternative, structured regexp notation.
@end ifnottex
* Regexp Functions:: Functions for operating on regular expressions.
* Regexp Problems:: Some problems and how they may be avoided.
Syntax of Regular Expressions

View file

@ -862,8 +862,13 @@ expressions that were read, evaluated, and printed from buffers
(including the minibuffer) by the standard Emacs commands which do
this. (Note that this does @emph{not} include evaluation in
@file{*ielm*} buffers, nor evaluation using @kbd{C-j}, @kbd{C-x C-e},
and similar evaluation commands in @code{lisp-interaction-mode}.) The
elements are ordered most recent first.
and similar evaluation commands in @code{lisp-interaction-mode}.)
This variable is obsolete, and will be removed in a future version,
since it constantly enlarges the memory footprint of the Emacs
process. For that reason, we recommend against using it.
The elements of @code{values} are ordered most recent first.
@example
@group
@ -880,8 +885,8 @@ values
@end group
@end example
This variable is useful for referring back to values of forms recently
evaluated. It is generally a bad idea to print the value of
This variable could be useful for referring back to values of forms
recently evaluated. It is generally a bad idea to print the value of
@code{values} itself, since this may be very long. Instead, examine
particular elements, like this:

View file

@ -563,7 +563,17 @@ In this case, @var{visit} must be @code{nil}. For example,
@end example
@noindent
inserts the first 500 characters of a file.
inserts the characters coded by the first 500 bytes of a file.
If @var{beg} or @var{end} happens to be in the middle of a character's
multibyte sequence, Emacs's character code conversion will insert one
or more eight-bit characters (a.k.a.@: ``raw bytes'')
(@pxref{Character Sets}) into the buffer. If you want to read part of
a file this way, we recommend to bind @code{coding-system-for-read} to
a suitable value around the call to this function (@pxref{Specifying
Coding Systems}), and to write Lisp code which will check for raw
bytes at the boundaries, read the entire sequence of these bytes, and
convert them back to valid characters.
If the argument @var{replace} is non-@code{nil}, it means to replace the
contents of the buffer (actually, just the accessible portion) with the
@ -577,10 +587,11 @@ with @code{insert-file-contents}, as long as @var{replace} and
@end defun
@defun insert-file-contents-literally filename &optional visit beg end replace
This function works like @code{insert-file-contents} except that it
does not run @code{after-insert-file-functions}, and does not do
format decoding, character code conversion, automatic uncompression,
and so on.
This function works like @code{insert-file-contents} except that each
byte in the file is handled separately, being converted into an
eight-bit character if needed. It does not run
@code{after-insert-file-functions}, and does not do format decoding,
character code conversion, automatic uncompression, and so on.
@end defun
If you want to pass a file name to another process so that another
@ -936,6 +947,16 @@ file in @file{/foo/} will give an error:
@end example
@end defun
@defmac with-existing-directory body@dots{}
This macro ensures that @code{default-directory} is bound to an
existing directory before executing @var{body}. If
@code{default-directory} already exists, that's preferred, and
otherwise some other directory is used. This macro can be useful, for
instance, when calling an external command that requires that it's
running in a directory that exists. The chosen directory is not
guaranteed to be writable.
@end defmac
@defun access-file filename string
If you can read @var{filename} this function returns @code{nil};
otherwise it signals an error
@ -1293,6 +1314,20 @@ on the 19th, @file{aug-20} was written on the 20th, and the file
@end example
@end defun
@defun file-has-changed-p filename tag
This function returns non-@code{nil} if the time stamp of
@var{filename} has changed since the last call. When called for the
first time for some @var{filename}, it records the last modification
time and size of the file, and returns non-@code{nil} when
@var{filename} exists. Thereafter, when called for the same
@var{filename}, it compares the current time stamp and size with the
recorded ones, and returns non-@code{nil} only if either the time
stamp or the size (or both) are different. This is useful when a Lisp
program wants to re-read a file whenever it changes. With an optional
argument @var{tag}, which must be a symbol, the size and modification
time comparisons are limited to calls with the same tag.
@end defun
@defun file-attributes filename &optional id-format
@anchor{Definition of file-attributes}
This function returns a list of attributes of file @var{filename}. If
@ -1864,7 +1899,7 @@ Interactively, @var{mode} is read from the minibuffer using
@code{read-file-modes} (see below), which lets the user type in either
an integer or a string representing the permissions symbolically.
@xref{File Attributes}, for the function @code{file-modes}, which
@xref{Testing Accessibility}, for the function @code{file-modes}, which
returns the permissions of a file.
@end deffn
@ -2062,6 +2097,9 @@ directory. Therefore, Emacs considers a file name as having two main
parts: the @dfn{directory name} part, and the @dfn{nondirectory} part
(or @dfn{file name within the directory}). Either part may be empty.
Concatenating these two parts reproduces the original file name.
@footnote{Emacs follows the GNU convention to use the term @emph{file name}
instead of the term @emph{pathname}. We use the term @emph{path} only for
search paths, which are lists of directory names.}
On most systems, the directory part is everything up to and including
the last slash (backslash is also allowed in input on MS-DOS or
@ -2206,6 +2244,19 @@ and @code{file-name-nondirectory}. For example,
@end example
@end defun
@defun file-name-split filename
This function splits a file name into its components, and can be
thought of as the inverse of @code{string-join} with the appropriate
directory separator. For example,
@example
(file-name-split "/tmp/foo.txt")
@result{} ("" "tmp" "foo.txt")
(string-join (file-name-split "/tmp/foo.txt") "/")
@result{} "/tmp/foo.txt"
@end example
@end defun
@node Relative File Names
@subsection Absolute and Relative File Names
@cindex absolute file name

View file

@ -105,6 +105,7 @@ window of another Emacs frame. @xref{Child Frames}.
* Dialog Boxes:: Displaying a box to ask yes or no.
* Pointer Shape:: Specifying the shape of the mouse pointer.
* Window System Selections:: Transferring text to and from other X clients.
* Yanking Media:: Yanking things that aren't plain text.
* Drag and Drop:: Internals of Drag-and-Drop implementation.
* Color Names:: Getting the definitions of color names.
* Text Terminal Colors:: Defining colors for text terminals.
@ -151,7 +152,7 @@ the window (a.k.a.@: the @dfn{dominating} monitor).
This function itself does not make the new frame the selected frame.
@xref{Input Focus}. The previously selected frame remains selected.
On graphical terminals, however, the windowing system may select the
On graphical terminals, however, the window system may select the
new frame for its own reasons.
@end deffn
@ -494,7 +495,8 @@ a graphical terminal:
| | |_____________ Title Bar ______________| |
| | (1)_____________ Menu Bar ______________| | ^
| | (2)_____________ Tool Bar ______________| | ^
| | (3) _________ Internal Border ________ | | ^
| | (3)_____________ Tab Bar _______________| | ^
| | | _________ Internal Border ________ | | ^
| | | | ^ | | | |
| | | | | | | | |
Outer | | | Inner | | | Native
@ -640,6 +642,15 @@ GTK+, on the other hand, never wraps the tool bar but may
automatically increase the outer width of a frame in order to
accommodate an overlong tool bar.
@item Tab Bar
@cindex tab bar
The tab bar (@pxref{Tab Bars,,,emacs, The GNU Emacs Manual}) is always
drawn by Emacs itself. The tab bar appears above the tool bar in
Emacs built with an internal tool bar, and below the tool bar in
builds with an external tool bar.
Display of the tab bar can be suppressed by setting the
@code{tab-bar-lines} parameter (@pxref{Layout Parameters}) to zero.
@item Native Frame
@cindex native frame
@cindex native edges
@ -740,8 +751,8 @@ the internal border, one vertical scroll bar, and one left and one right
fringe if they are specified for this frame, see @ref{Layout
Parameters}. Its height can be obtained by removing from that of the
native height the widths of the internal border and the heights of the
frame's internal menu and tool bars and one horizontal scroll bar if
specified for this frame.
frame's internal menu and tool bars, the tab bar and one horizontal
scroll bar if specified for this frame.
@end table
@cindex absolute position
@ -1208,10 +1219,10 @@ width of one scroll bar provided this option is @code{nil} and keep it
unchanged if this option is @code{t} or a list containing
@code{vertical-scroll-bars}.
The default value is @code{'(tab-bar-lines tool-bar-lines)} for Lucid,
The default value is @code{(tab-bar-lines tool-bar-lines)} for Lucid,
Motif and MS-Windows (which means that adding/removing a tool or tab
bar there does not change the outer frame height),
@code{'(tab-bar-lines)} on all other window systems including GTK+
@code{(tab-bar-lines)} on all other window systems including GTK+
(which means that changing any of the parameters listed above with the
exception of @code{tab-bar-lines} may change the size of the outer
frame), and @code{t} otherwise (which means the outer frame size never
@ -1875,6 +1886,13 @@ The position of the tool bar when Emacs was built with GTK+. Its value
can be one of @code{top}, @code{bottom} @code{left}, @code{right}. The
default is @code{top}.
@vindex tab-bar-lines@r{, a frame parameter}
@item tab-bar-lines
The number of lines to use for the tab bar (@pxref{Tab Bars,,,emacs, The
GNU Emacs Manual}). The default is one if Tab Bar mode is enabled and
zero otherwise. This value may change whenever the tab bar wraps
(@pxref{Frame Layout}).
@vindex line-spacing@r{, a frame parameter}
@item line-spacing
Additional space to leave below each text line, in pixels (a positive
@ -2692,18 +2710,19 @@ frame and defaults to the selected frame. It never returns a frame
whose @code{no-other-frame} parameter (@pxref{Frame Interaction
Parameters}) is non-@code{nil}.
The second argument, @var{minibuf}, says which frames to consider:
The second argument, @var{minibuf}, says which frames to consider when
deciding what the next frame should be:
@table @asis
@item @code{nil}
Exclude minibuffer-only frames.
Consider all frames except minibuffer-only frames.
@item @code{visible}
Consider all visible frames.
Consider only visible frames.
@item 0
Consider all visible or iconified frames.
Consider only visible or iconified frames.
@item a window
Consider only the frames using that particular window as their
minibuffer.
minibuffer window.
@item anything else
Consider all frames.
@end table
@ -2757,7 +2776,8 @@ Terminals}.
@cindex selected frame
At any time, one frame in Emacs is the @dfn{selected frame}. The
selected window always resides on the selected frame.
selected window (@pxref{Selecting Windows}) always resides on the
selected frame.
When Emacs displays its frames on several terminals (@pxref{Multiple
Terminals}), each terminal has its own selected frame. But only one
@ -2991,12 +3011,11 @@ Auto-selection}).
Note that this option does not distinguish ``sloppy'' focus (where the
frame that previously had focus retains focus as long as the mouse
pointer does not move into another window manager window) from
``strict'' focus (where a frame immediately loses focus when it's left
by the mouse pointer). Neither does it recognize whether your window
manager supports delayed focusing or auto-raising where you can
explicitly specify the time until a new frame gets focus or is
auto-raised.
pointer does not move into another window-system window) from ``strict''
focus (where a frame immediately loses focus when it's left by the mouse
pointer). Neither does it recognize whether your window manager
supports delayed focusing or auto-raising where you can explicitly
specify the time until a new frame gets focus or is auto-raised.
You can supply a ``focus follows mouse'' policy for individual Emacs
windows by customizing the variable @code{mouse-autoselect-window}
@ -3905,6 +3924,47 @@ For backward compatibility, there are obsolete aliases
names of @code{gui-get-selection} and @code{gui-set-selection} before
Emacs 25.1.
@node Yanking Media
@section Yanking Media
If you choose, for instance, ``Copy Image'' in a web browser, that
image is put onto the clipboard, and Emacs can access it via
@code{gui-get-selection}. But in general, inserting image data into
an arbitrary buffer isn't very useful---you can't really do much with
it by default.
So Emacs has a system to let modes register handlers for these
``complicated'' selections.
@defun yank-media-handler types handler
@var{types} can be a @acronym{MIME} media type symbol, a regexp to
match these, or a list of these symbols and regexps. For instance:
@example
(yank-media-handler 'text/html #'my-html-handler)
(yank-media-handler "image/.*" #'my-image-handler)
@end example
A mode can register as many handlers as required.
The @var{handler} function is called with two parameters: The
@acronym{MIME} media type symbol and the data (as a string). The
handler should then insert the object into the buffer, or save it, or
do whatever is appropriate for the mode.
@end defun
The @code{yank-media} command will consult the registered handlers in
the current buffer, compare that with the available media types on the
clipboard, and then pass on the matching selection to the handler (if
any). If there's more than one matching selection, the user is
queried first.
The @code{yank-media-types} command can be used to explore the
clipboard/primary selection. It lists all the media types that are
currently available, and can be handy when creating handlers---to see
what data is actually available. Some applications put a surprising
amount of different data types on the clipboard.
@node Drag and Drop
@section Drag and Drop
@cindex drag and drop

View file

@ -378,7 +378,7 @@ keyword @code{&rest} before one final argument.
@group
(@var{required-vars}@dots{}
@r{[}&optional @r{[}@var{optional-vars}@dots{}@r{]}@r{]}
@r{[}&rest @r{[}@var{rest-var}@r{]}@r{]})
@r{[}&rest @var{rest-var}@r{]})
@end group
@end example
@ -826,12 +826,20 @@ This function returns a new function which, when called, will call
@var{func} with the list of arguments composed from @var{args} and
additional arguments specified at the time of the call. If @var{func}
accepts @var{n} arguments, then a call to @code{apply-partially} with
@w{@code{@var{m} < @var{n}}} arguments will produce a new function of
@w{@code{@var{n} - @var{m}}} arguments.
@w{@code{@var{m} <= @var{n}}} arguments will produce a new function of
@w{@code{@var{n} - @var{m}}} arguments@footnote{
If the number of arguments that @var{func} can accept is unlimited,
then the new function will also accept an unlimited number of
arguments, so in that case @code{apply-partially} doesn't reduce the
number of arguments that the new function could accept.
}.
Here's how we could define the built-in function @code{1+}, if it
didn't exist, using @code{apply-partially} and @code{+}, another
built-in function:
built-in function@footnote{
Note that unlike the built-in function, this version accepts any
number of arguments.
}:
@example
@group
@ -902,11 +910,11 @@ length of @var{sequence}. For example:
@example
@group
(mapcar 'car '((a b) (c d) (e f)))
(mapcar #'car '((a b) (c d) (e f)))
@result{} (a c e)
(mapcar '1+ [1 2 3])
(mapcar #'1+ [1 2 3])
@result{} (2 3 4)
(mapcar 'string "abc")
(mapcar #'string "abc")
@result{} ("a" "b" "c")
@end group
@ -922,14 +930,14 @@ Return the list of results."
;; @r{If no list is exhausted,}
(if (not (memq nil args))
;; @r{apply function to @sc{car}s.}
(cons (apply function (mapcar 'car args))
(apply 'mapcar* function
(cons (apply function (mapcar #'car args))
(apply #'mapcar* function
;; @r{Recurse for rest of elements.}
(mapcar 'cdr args)))))
(mapcar #'cdr args)))))
@end group
@group
(mapcar* 'cons '(a b c) '(1 2 3 4))
(mapcar* #'cons '(a b c) '(1 2 3 4))
@result{} ((a . 1) (b . 2) (c . 3))
@end group
@end example
@ -946,10 +954,10 @@ the results (which must be lists), by altering the results (using
@example
@group
;; @r{Contrast this:}
(mapcar 'list '(a b c d))
(mapcar #'list '(a b c d))
@result{} ((a) (b) (c) (d))
;; @r{with this:}
(mapcan 'list '(a b c d))
(mapcan #'list '(a b c d))
@result{} (a b c d)
@end group
@end example
@ -961,14 +969,14 @@ side-effects only---the values it returns are ignored, not collected
into a list. @code{mapc} always returns @var{sequence}.
@end defun
@defun mapconcat function sequence separator
@defun mapconcat function sequence &optional separator
@code{mapconcat} applies @var{function} to each element of
@var{sequence}; the results, which must be sequences of characters
(strings, vectors, or lists), are concatenated into a single string
return value. Between each pair of result sequences, @code{mapconcat}
inserts the characters from @var{separator}, which also must be a
string, or a vector or list of characters. @xref{Sequences Arrays
Vectors}.
string, or a vector or list of characters; a @code{nil} value is
treated as the empty string. @xref{Sequences Arrays Vectors}.
The argument @var{function} must be a function that can take one
argument and returns a sequence of characters: a string, a vector, or
@ -978,7 +986,7 @@ string.
@example
@group
(mapconcat 'symbol-name
(mapconcat #'symbol-name
'(The cat in the hat)
" ")
@result{} "The cat in the hat"
@ -986,8 +994,7 @@ string.
@group
(mapconcat (lambda (x) (format "%c" (1+ x)))
"HAL-8000"
"")
"HAL-8000")
@result{} "IBM.9111"
@end group
@end example
@ -1443,7 +1450,7 @@ is not a function, e.g., a keyboard macro (@pxref{Keyboard Macros}):
@result{} "\^u2\^k"
@end example
It you wish to use @code{fset} to make an alternate name for a
If you wish to use @code{fset} to make an alternate name for a
function, consider using @code{defalias} instead. @xref{Definition of
defalias}.
@end defun

View file

@ -18,11 +18,13 @@ arguments and their values are completely ignored. The recommended way
to put a new function on such a hook is to call @code{add-hook}.
@xref{Hooks}, for more information about using hooks.
The variables whose names end in @samp{-functions} are usually @dfn{abnormal
hooks} (some old code may also use the deprecated @samp{-hooks} suffix); their
values are lists of functions, but these functions are called in a special way
(they are passed arguments, or their return values are used). The variables
whose names end in @samp{-function} have single functions as their values.
The variables whose names end in @samp{-functions} are usually
@dfn{abnormal hooks} (some old code may also use the deprecated
@samp{-hooks} suffix). Their values are lists of functions, but these
functions are called in a special way: they are either passed
arguments, or their return values are used in some way. The variables
whose names end in @samp{-function} have single functions as their
values.
This is not an exhaustive list, it only covers the more general hooks.
For example, every major mode defines a hook named
@ -262,7 +264,6 @@ after-set-visited-file-name-hook
auto-coding-functions
choose-completion-string-functions
completing-read-function
completion-annotate-function
completion-at-point-functions
completion-list-insert-choice-function
deactivate-current-input-method-function

View file

@ -218,6 +218,14 @@ the Emacs executable that dumped them.
If you want to use this function in an Emacs that was already dumped,
you must run Emacs with the @samp{-batch} option.
@vindex after-pdump-load-hook
If you're including @samp{.el} files in the dumped Emacs and that
@samp{.el} file has code that is normally run at load time, that code
won't be run when Emacs starts after dumping. To help work around
that problem, you can put functions on the
@code{after-pdump-load-hook} hook. This hook is run when starting
Emacs.
@end defun
@defun dump-emacs to-file from-file
@ -337,18 +345,22 @@ by the vector allocation code while iterating over the vector blocks.
It is quite common to use some storage for a while, then release it
by (for example) killing a buffer or deleting the last pointer to an
object. Emacs provides a @dfn{garbage collector} to reclaim this
abandoned storage. The garbage collector operates by finding and
marking all Lisp objects that are still accessible to Lisp programs.
To begin with, it assumes all the symbols, their values and associated
function definitions, and any data presently on the stack, are
accessible. Any objects that can be reached indirectly through other
accessible objects are also accessible.
abandoned storage. The garbage collector operates, in essence, by
finding and marking all Lisp objects that are still accessible to Lisp
programs. To begin with, it assumes all the symbols, their values and
associated function definitions, and any data presently on the stack,
are accessible. Any objects that can be reached indirectly through
other accessible objects are also accessible, but this calculation is
done ``conservatively'', so it may slightly overestimate how many
objects that are accessible.
When marking is finished, all objects still unmarked are garbage. No
matter what the Lisp program or the user does, it is impossible to refer
to them, since there is no longer a way to reach them. Their space
might as well be reused, since no one will miss them. The second
(sweep) phase of the garbage collector arranges to reuse them.
(sweep) phase of the garbage collector arranges to reuse them. (But
since the marking was done ``conservatively'', not all unused objects
are guaranteed to be garbage-collected by any one sweep.)
@c ??? Maybe add something describing weak hash tables here?

View file

@ -94,8 +94,25 @@ Manual}.
(kbd "<f1> SPC") @result{} [f1 32]
(kbd "C-M-<down>") @result{} [C-M-down]
@end example
@findex kbd-valid-p
The @code{kbd} function is very permissive, and will try to return
something sensible even if the syntax used isn't completely
conforming. To check whether the syntax is actually valid, use the
@code{kbd-valid-p} function.
@code{define-key} also supports using the shorthand syntax
@samp{["..."]} syntax to define a key. The string has to be a
strictly valid @code{kbd} sequence, and if it's not valid, an error
will be signalled. For instance, to bind @key{C-c f}, you can say:
@lisp
(define-key global-map ["C-c f"] #'find-file-literally)
@end lisp
@end defun
@node Keymap Basics
@section Keymap Basics
@cindex key binding
@ -1278,24 +1295,46 @@ Binding Conventions}).
@cindex meta character key constants
@cindex control character key constants
In writing the key sequence to rebind, it is good to use the special
escape sequences for control and meta characters (@pxref{String Type}).
The syntax @samp{\C-} means that the following character is a control
character and @samp{\M-} means that the following character is a meta
character. Thus, the string @code{"\M-x"} is read as containing a
single @kbd{M-x}, @code{"\C-f"} is read as containing a single
@kbd{C-f}, and @code{"\M-\C-x"} and @code{"\C-\M-x"} are both read as
containing a single @kbd{C-M-x}. You can also use this escape syntax in
vectors, as well as others that aren't allowed in strings; one example
is @samp{[?\C-\H-x home]}. @xref{Character Type}.
@code{define-key} (and other functions that are used to rebind keys)
understand a number of different syntaxes for the keys.
The key definition and lookup functions accept an alternate syntax for
event types in a key sequence that is a vector: you can use a list
containing modifier names plus one base event (a character or function
key name). For example, @code{(control ?a)} is equivalent to
@code{?\C-a} and @code{(hyper control left)} is equivalent to
@code{C-H-left}. One advantage of such lists is that the precise
numeric codes for the modifier bits don't appear in compiled files.
@table @asis
@item A vector containing a single string.
This is the preferred way to represent a key sequence. Here's a
couple of examples:
@example
["C-c M-f"]
["S-<home>"]
@end example
The syntax is the same as the one used by Emacs when displaying key
bindings, for instance in @samp{*Help*} buffers and help texts.
If the syntax isn't valid, an error will be raised when running
@code{define-key}, or when byte-compiling code that has these calls.
@item A vector containing lists of keys.
You can use a list containing modifier names plus one base event (a
character or function key name). For example, @code{[(control ?a)
(meta b)]} is equivalent to @kbd{C-a M-b} and @code{[(hyper control
left)]} is equivalent to @kbd{C-H-left}.
@item A string with control and meta characters.
Internally, key sequences are often represented as strings using the
special escape sequences for control and meta characters
(@pxref{String Type}), but this representation can also be used by
users when rebinding keys. A string like @code{"\M-x"} is read as
containing a single @kbd{M-x}, @code{"\C-f"} is read as containing a
single @kbd{C-f}, and @code{"\M-\C-x"} and @code{"\C-\M-x"} are both
read as containing a single @kbd{C-M-x}.
@item a vector of characters.
This is the other internal representation of key sequences, and
supports a fuller range of modifiers than the string representation.
One example is @samp{[?\C-\H-x home]}, which represents the @kbd{C-H-x
home} key sequence. @xref{Character Type}.
@end table
The functions below signal an error if @var{keymap} is not a keymap,
or if @var{key} is not a string or vector representing a key sequence.
@ -1337,7 +1376,7 @@ bindings in it:
@result{} (keymap)
@end group
@group
(define-key map "\C-f" 'forward-char)
(define-key map ["C-f"] 'forward-char)
@result{} forward-char
@end group
@group
@ -1347,7 +1386,7 @@ map
@group
;; @r{Build sparse submap for @kbd{C-x} and bind @kbd{f} in that.}
(define-key map (kbd "C-x f") 'forward-word)
(define-key map ["C-x f"] 'forward-word)
@result{} forward-word
@end group
@group
@ -1360,14 +1399,14 @@ map
@group
;; @r{Bind @kbd{C-p} to the @code{ctl-x-map}.}
(define-key map (kbd "C-p") ctl-x-map)
(define-key map ["C-p"] ctl-x-map)
;; @code{ctl-x-map}
@result{} [nil @dots{} find-file @dots{} backward-kill-sentence]
@end group
@group
;; @r{Bind @kbd{C-f} to @code{foo} in the @code{ctl-x-map}.}
(define-key map (kbd "C-p C-f") 'foo)
(define-key map ["C-p C-f"] 'foo)
@result{} 'foo
@end group
@group
@ -1386,6 +1425,99 @@ changing an entry in @code{ctl-x-map}, and this has the effect of
changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the
default global map.
@defun define-keymap &key options... &rest pairs...
@code{define-key} is the general work horse for defining a key in a
keymap. When writing modes, however, you frequently have to bind a
large number of keys at once, and using @code{define-key} on them all
can be tedious and error-prone. Instead you can use
@code{define-keymap}, which creates a keymaps and binds a number of
keys. Here's a very basic example:
@lisp
(define-keymap
"n" #'forward-line
"f" #'previous-line
["C-c C-c"] #'quit-window)
@end lisp
This function creates a new sparse keymap, defines the two keystrokes
in @var{pairs}, and returns the new keymap.
@var{pairs} is a list of alternating key bindings and key definitions,
as accepted by @code{define-key}. In addition the key can be the
special symbol @code{:menu}, in which case the definition should be a
menu definition as accepted by @code{easy-menu-define} (@pxref{Easy
Menu}). Here's a brief example:
@lisp
(define-keymap :full t
"g" #'eww-reload
:menu '("Eww"
["Exit" quit-window t]
["Reload" eww-reload t]))
@end lisp
A number of keywords can be used before the key/definition pairs to
changes features of the new keymap. If the keyword is missing, the
default value for the feature is @code{nil}. Here's a list of the
available keywords:
@table @code
@item :full
If non-@code{nil}, create a chartable keymap (as from
@code{make-keymap}) instead of a sparse keymap (as from
@code{make-sparse-keymap} (@pxref{Creating Keymaps}). A sparse keymap
is the default.
@item :parent
If non-@code{nil}, this should be a keymap to use as the parent
(@pxref{Inheritance and Keymaps}).
@item :keymap
If non-@code{nil}, this should be a keymap. Instead of creating a new
keymap, this keymap is modified instead.
@item :suppress
If non-@code{nil}, the keymap will be suppressed with
@code{suppress-keymap} (@pxref{Changing Key Bindings}). If
@code{nodigits}, treat digits like other chars.
@item :name
If non-@code{nil}, this should be a string to use as the menu for the
keymap if you use it as a menu with @code{x-popup-menu} (@pxref{Pop-Up
Menus}).
@item :prefix
If non-@code{nil}, this should be a symbol to be used as a prefix
command (@pxref{Prefix Keys}). If this is the case, this symbol is
returned by @code{define-keymap} instead of the map itself.
@end table
@end defun
@defmac defvar-keymap name &key options... &rest pairs...
By far, the most common thing to do with a keymap is to bind it to a
variable. This is what virtually all modes do---a mode called
@code{foo} almost always has a variable called @code{foo-mode-map}.
This macro defines @var{name} as a variable, and passes @var{options}
and @var{pars} to @code{define-keymap}, and uses the result as the
default value for the variable.
@var{options} is like the keywords in @code{define-keymap}, but adds a
@code{:doc} keyword that says what the doc string for the @var{name}
variable should be.
Here's an example:
@lisp
(defvar-keymap eww-textarea-map
:parent text-mode-map
"\r" #'forward-line
[?\t] #'shr-next-link)
@end lisp
@end defmac
The function @code{substitute-key-definition} scans a keymap for
keys that have a certain binding and rebinds them with a different
binding. Another feature which is cleaner and can often produce the
@ -2227,6 +2359,12 @@ This property specifies that @var{string} is the string to display
as the keyboard equivalent for this menu item. You can use
the @samp{\\[...]} documentation construct in @var{string}.
This property can also be a function (which will be called with no
arguments). This function should return a string. This function will
be called every time the menu is computed, so using a function that
takes a lot of time to compute is not a good idea, and it should
expect to be called from any context.
@item :filter @var{filter-fn}
This property provides a way to compute the menu item dynamically.
The property value @var{filter-fn} should be a function of one argument;

View file

@ -679,6 +679,20 @@ list are in the same order as in @var{tree}.
@result{}(1 2 3 4 5 6 7)
@end example
@defun ensure-list object
This function returns @var{object} as a list. If @var{object} is
already a list, the function returns it; otherwise, the function
returns a one-element list containing @var{object}.
This is usually useful if you have a variable that may or may not be a
list, and you can then say, for instance:
@lisp
(dolist (elem (ensure-list foo))
(princ elem))
@end lisp
@end defun
@defun number-sequence from &optional to separation
This function returns a list of numbers starting with @var{from} and
incrementing by @var{separation}, and ending at or just before
@ -1213,13 +1227,13 @@ this is not guaranteed to happen):
@cindex lists as sets
@cindex sets
A list can represent an unordered mathematical set---simply consider a
value an element of a set if it appears in the list, and ignore the
order of the list. To form the union of two sets, use @code{append} (as
long as you don't mind having duplicate elements). You can remove
@code{equal} duplicates using @code{delete-dups}. Other useful
functions for sets include @code{memq} and @code{delq}, and their
@code{equal} versions, @code{member} and @code{delete}.
A list can represent an unordered mathematical set---simply consider
a value an element of a set if it appears in the list, and ignore the
order of the list. To form the union of two sets, use @code{append}
(as long as you don't mind having duplicate elements). You can remove
@code{equal} duplicates using @code{delete-dups} or @code{seq-uniq}.
Other useful functions for sets include @code{memq} and @code{delq},
and their @code{equal} versions, @code{member} and @code{delete}.
@cindex CL note---lack @code{union}, @code{intersection}
@quotation
@ -1475,7 +1489,8 @@ comparison.
This function destructively removes all @code{equal} duplicates from
@var{list}, stores the result in @var{list} and returns it. Of
several @code{equal} occurrences of an element in @var{list},
@code{delete-dups} keeps the first one.
@code{delete-dups} keeps the first one. See @code{seq-uniq} for
non-destructive operation (@pxref{Sequence Functions}).
@end defun
See also the function @code{add-to-list}, in @ref{List Variables},
@ -1557,10 +1572,12 @@ of property lists and association lists.
@defun assoc key alist &optional testfn
This function returns the first association for @var{key} in
@var{alist}, comparing @var{key} against the alist elements using
@var{testfn} if it is non-@code{nil} and @code{equal} otherwise
(@pxref{Equality Predicates}). It returns @code{nil} if no
association in @var{alist} has a @sc{car} equal to @var{key}. For
example:
@var{testfn} if it is a function, and @code{equal} otherwise
(@pxref{Equality Predicates}). If @var{testfn} is a function, it is
called with two arguments: the @sc{car} of an element from @var{alist}
and @var{key}. The function returns @code{nil} if no
association in @var{alist} has a @sc{car} equal to @var{key}, as
tested by @var{testfn}. For example:
@smallexample
(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))

View file

@ -469,6 +469,18 @@ If @var{default} is a non-@code{nil} list, the first element of the
list is used in the prompt.
@end defun
@defvar read-minibuffer-restore-windows
If this option is non-@code{nil} (the default), getting input from the
minibuffer will restore, on exit, the window configurations of the frame
where the minibuffer was entered from and, if it is different, the frame
that owns the minibuffer window. This means that if, for example, a
user splits a window while getting input from the minibuffer on the same
frame, that split will be undone when exiting the minibuffer.
If this option is @code{nil}, no such restorations are done. Hence, the
window split mentioned above will persist after exiting the minibuffer.
@end defvar
@node Object from Minibuffer
@section Reading Lisp Objects with the Minibuffer
@cindex minibuffer input, reading lisp objects
@ -2197,7 +2209,7 @@ Here is an example:
@smallexample
@group
(yes-or-no-p "Do you really want to remove everything? ")
(yes-or-no-p "Do you really want to remove everything?")
;; @r{After evaluation of the preceding expression,}
;; @r{the following prompt appears,}

View file

@ -59,12 +59,13 @@ runs just before Emacs suspends itself (@pxref{Suspending Emacs}).
@cindex abnormal hook
If the hook variable's name does not end with @samp{-hook}, that
indicates it is probably an @dfn{abnormal hook}. That means the hook
functions are called with arguments, or their return values are used
in some way. The hook's documentation says how the functions are
called. Any functions added to an abnormal hook must follow the
hook's calling convention. By convention, abnormal hook names end in
@samp{-functions}.
indicates it is probably an @dfn{abnormal hook}. These differ from
normal hooks in two ways: they can be called with one or more
arguments, and their return values can be used in some way. The
hook's documentation says how the functions are called and how their
return values are used. Any functions added to an abnormal hook must
follow the hook's calling convention. By convention, abnormal hook
names end in @samp{-functions}.
@cindex single-function hook
If the name of the variable ends in @samp{-predicate} or
@ -266,6 +267,18 @@ This function restores the major mode recorded by
function calls @code{normal-mode} (@pxref{Auto Major Mode,
normal-mode}), but tries to force it not to choose any modes in
@var{avoided-modes}, if that argument is non-@code{nil}.
@end defun
@defun clean-mode
Changing the major mode clears out most local variables, but it
doesn't remove all artefacts in the buffer (like text properties and
overlays). It's rare to change a buffer from one major mode to
another (except from @code{fundamental-mode} to everything else), so
this is usually not a concern. It can sometimes be convenient (mostly
when debugging a problem in a buffer) to do a ``full reset'' of the
buffer, and that's what the @code{clean-mode} major mode offers. It
will kill all local variables (even the permanently local ones), and
also removes all overlays and text properties.
@end defun
The easiest way to write a major mode is to use the macro
@ -470,6 +483,22 @@ setting up a buffer-local value for the variable
Each face that the mode defines should, if possible, inherit from an
existing Emacs face. @xref{Basic Faces}, and @ref{Faces for Font Lock}.
@item
Consider adding a mode-specific menu to the menu bar. This should
preferably include the most important menu-specific settings and
commands that will allow users discovering the main features quickly
and efficiently.
@item
@cindex context menus, for a major mode
@vindex context-menu-functions
Consider adding mode-specific context menus for the mode, to be used
if and when users activate the @code{context-menu-mode} (@pxref{Menu
Mouse Clicks,,, emacs, The Emacs Manual}). To this end, define a
mode-specific function which builds one or more menus depending on the
location of the @kbd{mouse-3} click in the buffer, and then add that
function to the buffer-local value of @code{context-menu-functions}.
@item
The mode should specify how Imenu should find the definitions or
sections of a buffer, by setting up a buffer-local value for the
@ -1121,10 +1150,11 @@ re-sorting entries. Comparison is done with @code{equal}.
@item
@var{contents} is a vector with the same number of elements as
@code{tabulated-list-format}. Each vector element is either a string,
which is inserted into the buffer as-is, or a list @code{(@var{label}
. @var{properties})}, which means to insert a text button by calling
@code{insert-text-button} with @var{label} and @var{properties} as
arguments (@pxref{Making Buttons}).
which is inserted into the buffer as-is; an image descriptor, which is
used to insert an image (@pxref{Image Descriptors}); or a list
@w{@code{(@var{label} . @var{properties})}}, which means to insert a
text button by calling @code{insert-text-button} with @var{label} and
@var{properties} as arguments (@pxref{Making Buttons}).
There should be no newlines in any of these strings.
@end itemize
@ -1728,7 +1758,8 @@ anything that can be used with the @code{setf} function
(@pxref{Generalized Variables}).
@var{place} can also be a cons @code{(@var{get} . @var{set})},
where @var{get} is an expression that returns the current state,
and @var{set} is a function of one argument (a state) that sets it.
and @var{set} is a function of one argument (a state) which should be
assigned to @var{place}.
@item :after-hook @var{after-hook}
This defines a single Lisp form which is evaluated after the mode hooks
@ -2251,16 +2282,15 @@ number.
The format used to display column numbers when
@code{column-number-mode} (@pxref{Optional Mode Line,,, emacs, The GNU
Emacs Manual}) is switched on. @samp{%c} in the format will be
replaced with the column number, and this is zero-based if
@code{column-number-indicator-zero-based} is non-@code{nil}, and
one-based if @code{column-number-indicator-zero-based} is @code{nil}.
replaced with a zero-based column number, and @samp{%C} will be
replaced with a one-based column number.
@end defvar
@defvar mode-line-position-column-line-format
The format used to display column numbers when both
@code{line-number-mode} and @code{column-number-mode} are switched on.
See the previous two variables for the meaning of the @samp{%l} and
@samp{%c} format specs.
See the previous two variables for the meaning of the @samp{%l},
@samp{%c} and @samp{%C} format specs.
@end defvar
@defvar minor-mode-alist
@ -3299,6 +3329,11 @@ This function tells Font Lock mode to run the Lisp function
current buffer. It calls @var{function} before calling the default
fontification functions, and gives it two arguments, @var{start} and
@var{end}, which specify the region to be fontified or refontified.
If @var{function} performs fontifications, it can return a list of the
form @w{@code{(jit-lock-bounds @var{beg} . @var{end})}}, to indicate
the bounds of the region it actually fontified; JIT font-lock will use
this information to optimize subsequent redisplay cycles and regions
of buffer text it will pass to future calls to @var{function}.
The optional argument @var{contextual}, if non-@code{nil}, forces Font
Lock mode to always refontify a syntactically relevant part of the
@ -3445,9 +3480,17 @@ for string constants.
@item font-lock-doc-face
@vindex font-lock-doc-face
for documentation strings in the code. This inherits, by default, from
for documentation embedded in program code inside specially-formed
comments or strings. This face inherits, by default, from
@code{font-lock-string-face}.
@item font-lock-doc-markup-face
@vindex font-lock-doc-markup-face
for mark-up elements in text using @code{font-lock-doc-face}.
It is typically used for the mark-up constructs in documentation embedded
in program code, following conventions such as Haddock, Javadoc or Doxygen.
This face inherits, by default, from @code{font-lock-constant-face}.
@item font-lock-negation-char-face
@vindex font-lock-negation-char-face
for easily-overlooked negation characters.

View file

@ -459,7 +459,7 @@ of character properties. In particular, Emacs supports the
@uref{https://www.unicode.org/reports/tr23/, Unicode Character Property
Model}, and the Emacs character property database is derived from the
Unicode Character Database (@acronym{UCD}). See the
@uref{https://www.unicode.org/versions/Unicode12.1.0/ch04.pdf, Character
@uref{https://www.unicode.org/versions/Unicode14.0.0/ch04.pdf, Character
Properties chapter of the Unicode Standard}, for a detailed
description of Unicode character properties and their meaning. This
section assumes you are already familiar with that chapter of the
@ -1988,7 +1988,9 @@ for decoding keyboard input from @var{terminal}. If
@var{coding-system} is @code{nil}, that means not to decode keyboard
input. If @var{terminal} is a frame, it means that frame's terminal;
if it is @code{nil}, that means the currently selected frame's
terminal. @xref{Multiple Terminals}.
terminal. @xref{Multiple Terminals}. Note that on modern MS-Windows
systems Emacs always uses Unicode input when decoding keyboard input,
so the encoding set by this command has no effect on Windows.
@end deffn
@defun terminal-coding-system &optional terminal

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