Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs into feature/pgtk
This commit is contained in:
commit
4dd1f56f29
1764 changed files with 89018 additions and 41540 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -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
|
||||
|
|
10
CONTRIBUTE
10
CONTRIBUTE
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
12
ChangeLog.3
12
ChangeLog.3
|
@ -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
11
INSTALL
|
@ -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.
|
||||
|
||||
|
|
14
Makefile.in
14
Makefile.in
|
@ -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
2
README
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
13
admin/README
13
admin/README
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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|\
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
-------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
76
admin/release-branch.txt
Normal 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.
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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)"
|
||||
}
|
||||
|
|
|
@ -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
1297
admin/unidata/emoji-data.txt
Normal file
File diff suppressed because it is too large
Load diff
1469
admin/unidata/emoji-sequences.txt
Normal file
1469
admin/unidata/emoji-sequences.txt
Normal file
File diff suppressed because it is too large
Load diff
4991
admin/unidata/emoji-test.txt
Normal file
4991
admin/unidata/emoji-test.txt
Normal file
File diff suppressed because it is too large
Load diff
1410
admin/unidata/emoji-zwj-sequences.txt
Normal file
1410
admin/unidata/emoji-zwj-sequences.txt
Normal file
File diff suppressed because it is too large
Load diff
140
admin/unidata/emoji-zwj.awk
Normal file
140
admin/unidata/emoji-zwj.awk
Normal 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
1229
build-aux/config.guess
vendored
File diff suppressed because it is too large
Load diff
87
build-aux/config.sub
vendored
87
build-aux/config.sub
vendored
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
127
configure.ac
127
configure.ac
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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}.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}.
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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,}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
Loading…
Add table
Reference in a new issue