aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Corallo2021-04-05 21:00:18 +0200
committerAndrea Corallo2021-04-05 21:00:18 +0200
commit74b58f28ecbc6fe9d7a60c96c79acfdf2329ff73 (patch)
treeb1e99508f836a1d12d17eb3072e14b0cfb2ba407
parent0a3e715e1f5e13874139b4678375b8f5704b800b (diff)
parent14d295871a93c37a33d558ec4e8d49a93b787d8e (diff)
downloademacs-74b58f28ecbc6fe9d7a60c96c79acfdf2329ff73.tar.gz
emacs-74b58f28ecbc6fe9d7a60c96c79acfdf2329ff73.zip
Merge remote-tracking branch 'savannah/master' into native-comp
-rw-r--r--GNUmakefile2
-rw-r--r--Makefile.in4
-rw-r--r--admin/charsets/Makefile.in12
-rw-r--r--admin/grammars/Makefile.in35
-rw-r--r--admin/unidata/Makefile.in16
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi96
-rw-r--r--doc/lispref/display.texi22
-rw-r--r--doc/misc/Makefile.in15
-rw-r--r--doc/misc/reftex.texi85
-rw-r--r--doc/misc/woman.texi8
-rw-r--r--etc/NEWS13
-rw-r--r--etc/images/README27
-rw-r--r--etc/images/checkbox-mixed.svg6
-rw-r--r--etc/images/checked.svg6
-rw-r--r--etc/images/down.svg40
-rw-r--r--etc/images/left.svg40
-rw-r--r--etc/images/radio-checked.svg6
-rw-r--r--etc/images/radio-mixed.svg6
-rw-r--r--etc/images/radio.svg3
-rw-r--r--etc/images/right.svg40
-rw-r--r--etc/images/unchecked.svg3
-rw-r--r--etc/images/up.svg40
-rw-r--r--leim/Makefile.in14
-rw-r--r--lisp/Makefile.in4
-rw-r--r--lisp/avoid.el17
-rw-r--r--lisp/calc/calc-alg.el12
-rw-r--r--lisp/calc/calc-ext.el22
-rw-r--r--lisp/calc/calc-prog.el12
-rw-r--r--lisp/calendar/icalendar.el9
-rw-r--r--lisp/cedet/semantic/bovine/grammar.el2
-rw-r--r--lisp/cedet/semantic/wisent/grammar.el2
-rw-r--r--lisp/dframe.el2
-rw-r--r--lisp/doc-view.el13
-rw-r--r--lisp/emacs-lisp/checkdoc.el9
-rw-r--r--lisp/emacs-lisp/seq.el3
-rw-r--r--lisp/emulation/edt.el6
-rw-r--r--lisp/epg-config.el6
-rw-r--r--lisp/eshell/em-dirs.el8
-rw-r--r--lisp/eshell/em-hist.el2
-rw-r--r--lisp/eshell/em-pred.el58
-rw-r--r--lisp/eshell/em-script.el11
-rw-r--r--lisp/eshell/esh-util.el36
-rw-r--r--lisp/eshell/eshell.el6
-rw-r--r--lisp/forms.el82
-rw-r--r--lisp/gnus/gnus-art.el5
-rw-r--r--lisp/gnus/gnus-cite.el4
-rw-r--r--lisp/gnus/gnus-group.el38
-rw-r--r--lisp/gnus/gnus-range.el17
-rw-r--r--lisp/gnus/gnus-registry.el6
-rw-r--r--lisp/gnus/gnus-score.el4
-rw-r--r--lisp/gnus/gnus-sum.el11
-rw-r--r--lisp/gnus/gnus-uu.el4
-rw-r--r--lisp/gnus/mm-partial.el16
-rw-r--r--lisp/gnus/nndiary.el2
-rw-r--r--lisp/gnus/nnimap.el10
-rw-r--r--lisp/gnus/nnselect.el68
-rw-r--r--lisp/gnus/nnvirtual.el6
-rw-r--r--lisp/gnus/spam-stat.el2
-rw-r--r--lisp/gnus/spam.el14
-rw-r--r--lisp/hilit-chg.el117
-rw-r--r--lisp/htmlfontify.el29
-rw-r--r--lisp/image-mode.el5
-rw-r--r--lisp/image.el8
-rw-r--r--lisp/international/characters.el60
-rw-r--r--lisp/international/fontset.el48
-rw-r--r--lisp/international/latin1-disp.el4
-rw-r--r--lisp/international/mule-cmds.el48
-rw-r--r--lisp/international/mule-diag.el16
-rw-r--r--lisp/international/mule.el28
-rw-r--r--lisp/international/quail.el32
-rw-r--r--lisp/international/titdic-cnv.el26
-rw-r--r--lisp/isearchb.el8
-rw-r--r--lisp/ldefs-boot.el301
-rw-r--r--lisp/linum.el6
-rw-r--r--lisp/loadhist.el15
-rw-r--r--lisp/mail/mail-extr.el4
-rw-r--r--lisp/mail/rmail.el6
-rw-r--r--lisp/mail/smtpmail.el18
-rw-r--r--lisp/man.el4
-rw-r--r--lisp/mpc.el14
-rw-r--r--lisp/net/gnutls.el4
-rw-r--r--lisp/net/imap.el6
-rw-r--r--lisp/net/newst-backend.el1
-rw-r--r--lisp/net/pop3.el6
-rw-r--r--lisp/net/tramp-sh.el61
-rw-r--r--lisp/net/tramp.el25
-rw-r--r--lisp/nxml/rng-loc.el2
-rw-r--r--lisp/nxml/rng-match.el2
-rw-r--r--lisp/nxml/rng-nxml.el2
-rw-r--r--lisp/nxml/rng-util.el28
-rw-r--r--lisp/pcomplete.el27
-rw-r--r--lisp/pixel-scroll.el8
-rw-r--r--lisp/play/bubbles.el8
-rw-r--r--lisp/progmodes/cc-styles.el4
-rw-r--r--lisp/progmodes/cfengine.el4
-rw-r--r--lisp/progmodes/cperl-mode.el32
-rw-r--r--lisp/progmodes/dcl-mode.el59
-rw-r--r--lisp/progmodes/ebnf-yac.el8
-rw-r--r--lisp/progmodes/ebnf2ps.el8
-rw-r--r--lisp/progmodes/executable.el2
-rw-r--r--lisp/progmodes/grep.el28
-rw-r--r--lisp/progmodes/idlwave.el12
-rw-r--r--lisp/progmodes/inf-lisp.el114
-rw-r--r--lisp/progmodes/octave.el4
-rw-r--r--lisp/progmodes/project.el7
-rw-r--r--lisp/progmodes/python.el8
-rw-r--r--lisp/progmodes/simula.el99
-rw-r--r--lisp/progmodes/xref.el4
-rw-r--r--lisp/recentf.el108
-rw-r--r--lisp/shadowfile.el31
-rw-r--r--lisp/strokes.el166
-rw-r--r--lisp/textmodes/artist.el21
-rw-r--r--lisp/textmodes/fill.el12
-rw-r--r--lisp/textmodes/ispell.el6
-rw-r--r--lisp/textmodes/reftex-vars.el98
-rw-r--r--lisp/textmodes/remember.el9
-rw-r--r--lisp/textmodes/rst.el332
-rw-r--r--lisp/url/url-cookie.el8
-rw-r--r--lisp/url/url-dav.el17
-rw-r--r--lisp/url/url-history.el16
-rw-r--r--lisp/url/url-mailto.el4
-rw-r--r--lisp/url/url-vars.el9
-rw-r--r--lisp/vc/ediff-mult.el6
-rw-r--r--lisp/vc/ediff-util.el7
-rw-r--r--lisp/vc/vc-git.el8
-rw-r--r--lisp/vc/vc-hg.el2
-rw-r--r--lisp/vcursor.el298
-rw-r--r--lisp/wid-edit.el25
-rw-r--r--lisp/woman.el8
-rw-r--r--lwlib/Makefile.in4
-rw-r--r--src/dispextern.h5
-rw-r--r--src/frame.c12
-rw-r--r--src/frame.h7
-rw-r--r--src/image.c109
-rw-r--r--src/nsterm.m2
-rw-r--r--src/pdumper.c8
-rw-r--r--test/infra/Dockerfile.emba2
-rw-r--r--test/lisp/electric-tests.el90
-rw-r--r--test/lisp/epg-config-tests.el47
-rw-r--r--test/lisp/filenotify-tests.el3
-rw-r--r--test/lisp/progmodes/executable-tests.el51
-rw-r--r--test/lisp/progmodes/xref-tests.el2
-rw-r--r--test/src/thread-tests.el6
143 files changed, 2073 insertions, 1904 deletions
diff --git a/GNUmakefile b/GNUmakefile
index f27163840b7..5155487de28 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -50,6 +50,8 @@ help:
50 @echo "make distclean -- delete all build and configuration files," 50 @echo "make distclean -- delete all build and configuration files,"
51 @echo " leave only files included in source distribution" 51 @echo " leave only files included in source distribution"
52 @echo "make maintainer-clean -- delete almost everything that can be regenerated" 52 @echo "make maintainer-clean -- delete almost everything that can be regenerated"
53 @echo "make extraclean -- like maintainer-clean, and also delete"
54 @echo " backup and autosave files"
53 @echo "make bootstrap -- delete all compiled files to force a new bootstrap" 55 @echo "make bootstrap -- delete all compiled files to force a new bootstrap"
54 @echo " from a clean slate, then build in the normal way" 56 @echo " from a clean slate, then build in the normal way"
55 @echo "make uninstall -- remove files installed by 'make install'" 57 @echo "make uninstall -- remove files installed by 'make install'"
diff --git a/Makefile.in b/Makefile.in
index 6f09878331a..aa32ec8bc5e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -48,8 +48,6 @@
48# 48#
49# make extraclean 49# make extraclean
50# Still more severe - delete backup and autosave files, too. 50# Still more severe - delete backup and autosave files, too.
51# Also generated files that do not normally change and can be slow
52# to rebuild (eg leim/ja-dic).
53# 51#
54# make bootstrap 52# make bootstrap
55# Removes all the compiled files to force a new bootstrap from a 53# Removes all the compiled files to force a new bootstrap from a
@@ -941,7 +939,7 @@ maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
941### Note that we abuse this in some subdirectories (eg leim), 939### Note that we abuse this in some subdirectories (eg leim),
942### to delete some generated files that are slow to rebuild. 940### to delete some generated files that are slow to rebuild.
943extraclean_dirs = ${NTDIR} lib-src src leim \ 941extraclean_dirs = ${NTDIR} lib-src src leim \
944 admin/charsets admin/grammars admin/unidata lisp lib 942 admin/charsets admin/grammars admin/unidata lisp lib lwlib
945 943
946$(foreach dir,$(extraclean_dirs),$(eval $(call submake_template,$(dir),extraclean))) 944$(foreach dir,$(extraclean_dirs),$(eval $(call submake_template,$(dir),extraclean)))
947 945
diff --git a/admin/charsets/Makefile.in b/admin/charsets/Makefile.in
index 1fe029984b8..00424843bc4 100644
--- a/admin/charsets/Makefile.in
+++ b/admin/charsets/Makefile.in
@@ -297,17 +297,19 @@ ${charsetdir}/%.map: ${GLIBC_CHARMAPS}/%.gz ${mapconv} ${compact}
297 ${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x/' GLIBC-1 ${compact} > $@ 297 ${AM_V_GEN}${run_mapconv} $< '/^<.*[ ]\/x/' GLIBC-1 ${compact} > $@
298 298
299 299
300.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean 300.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean gen-clean
301 301
302clean: 302clean:
303 303
304## IMO this should also run gen-clean.
304bootstrap-clean: clean 305bootstrap-clean: clean
305 306
306distclean: clean 307distclean: clean
307 rm -f Makefile 308 rm -f Makefile
308 309
309maintainer-clean: distclean 310gen-clean:
310
311## Do not remove these files, even in a bootstrap. They rarely change.
312extraclean:
313 rm -f ${CHARSETS} ${SED_SCRIPT} ${TRANS_TABLE} ${srcdir}/charsets.stamp 311 rm -f ${CHARSETS} ${SED_SCRIPT} ${TRANS_TABLE} ${srcdir}/charsets.stamp
312
313maintainer-clean: gen-clean distclean
314
315extraclean: maintainer-clean
diff --git a/admin/grammars/Makefile.in b/admin/grammars/Makefile.in
index aa09d9edf94..35ce55461f3 100644
--- a/admin/grammars/Makefile.in
+++ b/admin/grammars/Makefile.in
@@ -34,7 +34,7 @@ top_builddir = @top_builddir@
34unexport EMACSDATA EMACSDOC EMACSPATH 34unexport EMACSDATA EMACSDOC EMACSPATH
35 35
36EMACS = ${top_builddir}/src/emacs 36EMACS = ${top_builddir}/src/emacs
37emacs = EMACSLOADPATH= "${EMACS}" -batch --no-site-file --no-site-lisp 37emacs = EMACSLOADPATH= "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefer-newer t)'
38 38
39make_bovine = ${emacs} -l semantic/bovine/grammar -f bovine-batch-make-parser 39make_bovine = ${emacs} -l semantic/bovine/grammar -f bovine-batch-make-parser
40make_wisent = ${emacs} -l semantic/wisent/grammar -f wisent-batch-make-parser 40make_wisent = ${emacs} -l semantic/wisent/grammar -f wisent-batch-make-parser
@@ -43,6 +43,9 @@ cedetdir = ${top_srcdir}/lisp/cedet
43bovinedir = ${cedetdir}/semantic/bovine 43bovinedir = ${cedetdir}/semantic/bovine
44wisentdir = ${cedetdir}/semantic/wisent 44wisentdir = ${cedetdir}/semantic/wisent
45 45
46grammar_bovine = ${bovinedir}/grammar.el
47grammar_wisent = ${wisentdir}/grammar.el
48
46BOVINE = \ 49BOVINE = \
47 ${bovinedir}/c-by.el \ 50 ${bovinedir}/c-by.el \
48 ${bovinedir}/make-by.el \ 51 ${bovinedir}/make-by.el \
@@ -51,7 +54,7 @@ BOVINE = \
51## FIXME Should include this one too: 54## FIXME Should include this one too:
52## ${cedetdir}/semantic/grammar-wy.el 55## ${cedetdir}/semantic/grammar-wy.el
53## but semantic/grammar.el (which is what we use to generate grammar-wy.el) 56## but semantic/grammar.el (which is what we use to generate grammar-wy.el)
54## requires it! 57## requires it! https://debbugs.gnu.org/16008
55WISENT = \ 58WISENT = \
56 ${wisentdir}/javat-wy.el \ 59 ${wisentdir}/javat-wy.el \
57 ${wisentdir}/js-wy.el \ 60 ${wisentdir}/js-wy.el \
@@ -69,46 +72,46 @@ bovine: ${BOVINE}
69wisent: ${WISENT} 72wisent: ${WISENT}
70 73
71## c-by.el, make-by.el. 74## c-by.el, make-by.el.
72${bovinedir}/%-by.el: ${srcdir}/%.by 75${bovinedir}/%-by.el: ${srcdir}/%.by ${grammar_bovine}
73 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 76 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
74 $(AM_V_at)${make_bovine} -o "$@" $< 77 $(AM_V_at)${make_bovine} -o "$@" $<
75 78
76${bovinedir}/scm-by.el: ${srcdir}/scheme.by 79${bovinedir}/scm-by.el: ${srcdir}/scheme.by ${grammar_bovine}
77 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 80 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
78 $(AM_V_at)${make_bovine} -o "$@" $< 81 $(AM_V_at)${make_bovine} -o "$@" $<
79 82
80## grammar-wy.el 83## grammar-wy.el
81${cedetdir}/semantic/%-wy.el: ${srcdir}/%.wy 84${cedetdir}/semantic/%-wy.el: ${srcdir}/%.wy ${grammar_wisent}
82 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 85 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
83 $(AM_V_at)${make_wisent} -o "$@" $< 86 $(AM_V_at)${make_wisent} -o "$@" $<
84 87
85## js-wy.el, python-wy.el 88## js-wy.el, python-wy.el
86${wisentdir}/%-wy.el: ${srcdir}/%.wy 89${wisentdir}/%-wy.el: ${srcdir}/%.wy ${grammar_wisent}
87 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 90 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
88 $(AM_V_at)${make_wisent} -o "$@" $< 91 $(AM_V_at)${make_wisent} -o "$@" $<
89 92
90${wisentdir}/javat-wy.el: ${srcdir}/java-tags.wy 93${wisentdir}/javat-wy.el: ${srcdir}/java-tags.wy ${grammar_wisent}
91 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 94 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
92 $(AM_V_at)${make_wisent} -o "$@" $< 95 $(AM_V_at)${make_wisent} -o "$@" $<
93 96
94${cedetdir}/srecode/srt-wy.el: ${srcdir}/srecode-template.wy 97${cedetdir}/srecode/srt-wy.el: ${srcdir}/srecode-template.wy ${grammar_wisent}
95 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@" 98 $(AM_V_GEN)[ ! -f "$@" ] || chmod +w "$@"
96 $(AM_V_at)${make_wisent} -o "$@" $< 99 $(AM_V_at)${make_wisent} -o "$@" $<
97 100
98 101.PHONY: distclean bootstrap-clean maintainer-clean extraclean gen-clean
99.PHONY: distclean bootstrap-clean maintainer-clean extraclean
100 102
101distclean: 103distclean:
102 rm -f Makefile 104 rm -f Makefile
103 105
104## Perhaps this should do what extraclean (qv) does. 106## IMO this should run gen-clean.
105bootstrap-clean: 107bootstrap-clean:
106 108
107maintainer-clean: distclean 109gen-clean:
108
109## We do not normally delete the generated files, even in bootstrap.
110## Creating them does not take long, so we could easily change this.
111extraclean:
112 rm -f ${ALL} 110 rm -f ${ALL}
113 111
112maintainer-clean: gen-clean distclean
113
114extraclean: maintainer-clean
115
116
114# Makefile.in ends here 117# Makefile.in ends here
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 183569fb9b6..b7a927d1919 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -85,26 +85,26 @@ ${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks}
85 $(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@ 85 $(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
86 86
87 87
88.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean 88.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean gen-clean
89 89
90clean: 90clean:
91 rm -f ${srcdir}/*.elc unidata.txt 91 rm -f ${srcdir}/*.elc unidata.txt
92 92
93## IMO this should also run gen-clean.
93bootstrap-clean: clean 94bootstrap-clean: clean
94 95
95distclean: clean 96distclean: clean
96 rm -f Makefile 97 rm -f Makefile
97 98
98maintainer-clean: distclean
99
100## Do not remove these files, even in a bootstrap, because they rarely
101## change and it slows down bootstrap (a tiny bit).
102## Cf leim/ja-dic (which is much slower).
103
104## macuvs.h is a generated file, but it's also checked in because 99## macuvs.h is a generated file, but it's also checked in because
105## macOS builds would need to do a headless bootstrap without it, 100## macOS builds would need to do a headless bootstrap without it,
106## which is currently awkward. To avoid changing checked-in files 101## which is currently awkward. To avoid changing checked-in files
107## from a make target, we don't delete it here. 102## from a make target, we don't delete it here.
108extraclean: distclean 103gen-clean:
109 rm -f ${unidir}/charscript.el* 104 rm -f ${unidir}/charscript.el*
110 rm -f ${unifiles} ${unidir}/charprop.el 105 rm -f ${unifiles} ${unidir}/charprop.el
106## ref: https://lists.gnu.org/r/emacs-devel/2013-11/msg01029.html
107
108maintainer-clean: gen-clean distclean
109
110extraclean: maintainer-clean
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 5b15a456ff0..fade4096e38 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -1364,19 +1364,6 @@ C-e}:
1364(this is an unquoted list) 1364(this is an unquoted list)
1365@end smallexample 1365@end smallexample
1366 1366
1367@ignore
1368@noindent
1369What you see depends on which version of Emacs you are running. GNU
1370Emacs version 22 provides more information than version 20 and before.
1371First, the more recent result of generating an error; then the
1372earlier, version 20 result.
1373
1374@need 1250
1375@noindent
1376In GNU Emacs version 22, a @file{*Backtrace*} window will open up and
1377you will see the following in it:
1378@end ignore
1379
1380A @file{*Backtrace*} window will open up and you should see the 1367A @file{*Backtrace*} window will open up and you should see the
1381following in it: 1368following in it:
1382 1369
@@ -1838,19 +1825,6 @@ Debugger entered--Lisp error: (void-function fill-column)
1838(Remember, to quit the debugger and make the debugger window go away, 1825(Remember, to quit the debugger and make the debugger window go away,
1839type @kbd{q} in the @file{*Backtrace*} buffer.) 1826type @kbd{q} in the @file{*Backtrace*} buffer.)
1840 1827
1841@ignore
1842@need 800
1843In GNU Emacs 20 and before, you will produce an error message that says:
1844
1845@smallexample
1846Symbol's function definition is void:@: fill-column
1847@end smallexample
1848
1849@noindent
1850(The message will go away as soon as you move the cursor or type
1851another key.)
1852@end ignore
1853
1854@node Void Variable 1828@node Void Variable
1855@subsection Error Message for a Symbol Without a Value 1829@subsection Error Message for a Symbol Without a Value
1856@cindex Symbol without value error 1830@cindex Symbol without value error
@@ -1907,18 +1881,6 @@ Since @code{+} does not have a value bound to it, just the function
1907definition, the error message reported that the symbol's value as a 1881definition, the error message reported that the symbol's value as a
1908variable was void. 1882variable was void.
1909 1883
1910@ignore
1911@need 800
1912In GNU Emacs version 20 and before, your error message will say:
1913
1914@example
1915Symbol's value as variable is void:@: +
1916@end example
1917
1918@noindent
1919The meaning is the same as in GNU Emacs 22.
1920@end ignore
1921
1922@node Arguments 1884@node Arguments
1923@section Arguments 1885@section Arguments
1924@cindex Arguments 1886@cindex Arguments
@@ -2197,19 +2159,6 @@ addition had been passed the correct type of object, the value passed
2197would have been a number, such as 37, rather than a symbol like 2159would have been a number, such as 37, rather than a symbol like
2198@code{hello}. But then you would not have got the error message. 2160@code{hello}. But then you would not have got the error message.
2199 2161
2200@ignore
2201@need 1250
2202In GNU Emacs version 20 and before, the echo area displays an error
2203message that says:
2204
2205@smallexample
2206Wrong type argument:@: number-or-marker-p, hello
2207@end smallexample
2208
2209This says, in different words, the same as the top line of the
2210@file{*Backtrace*} buffer.
2211@end ignore
2212
2213@node message 2162@node message
2214@subsection The @code{message} Function 2163@subsection The @code{message} Function
2215@findex message 2164@findex message
@@ -6663,9 +6612,9 @@ original text of the function:
6663@end group 6612@end group
6664@end smallexample 6613@end smallexample
6665 6614
6666(In recent versions of GNU Emacs, the @code{what-line} function has 6615(In modern versions of GNU Emacs, the @code{what-line} function has
6667been expanded to tell you your line number in a narrowed buffer as 6616been expanded to tell you your line number in a narrowed buffer as
6668well as your line number in a widened buffer. The recent version is 6617well as your line number in a widened buffer. The modern version is
6669more complex than the version shown here. If you feel adventurous, 6618more complex than the version shown here. If you feel adventurous,
6670you might want to look at it after figuring out how this version 6619you might want to look at it after figuring out how this version
6671works. You will probably need to use @kbd{C-h f} 6620works. You will probably need to use @kbd{C-h f}
@@ -10392,9 +10341,8 @@ echo area: @code{^Jgazelle^J^Jgiraffe^J^Jlion^J^Jtiger^Jnil}, in which
10392each @samp{^J} stands for a newline.) 10341each @samp{^J} stands for a newline.)
10393 10342
10394@need 1500 10343@need 1500
10395In a recent instance of GNU Emacs, you can evaluate these expressions 10344You can evaluate these expressions directly in the Info buffer, and
10396directly in the Info buffer, and the echo area will grow to show the 10345the echo area will grow to show the results.
10397results.
10398 10346
10399@smallexample 10347@smallexample
10400@group 10348@group
@@ -18104,8 +18052,7 @@ argument of 4:
18104@end smallexample 18052@end smallexample
18105 18053
18106@noindent 18054@noindent
18107In a recent GNU Emacs, you will create and enter a @file{*Backtrace*} 18055This will create and enter a @file{*Backtrace*} buffer that says:
18108buffer that says:
18109 18056
18110@noindent 18057@noindent
18111@smallexample 18058@smallexample
@@ -18139,25 +18086,12 @@ In practice, for a bug as simple as this, the Lisp error line will
18139tell you what you need to know to correct the definition. The 18086tell you what you need to know to correct the definition. The
18140function @code{1=} is void. 18087function @code{1=} is void.
18141 18088
18142@ignore
18143@need 800
18144In GNU Emacs 20 and before, you will see:
18145
18146@smallexample
18147Symbol's function definition is void:@: 1=
18148@end smallexample
18149
18150@noindent
18151which has the same meaning as the @file{*Backtrace*} buffer line in
18152version 21.
18153@end ignore
18154
18155However, suppose you are not quite certain what is going on? 18089However, suppose you are not quite certain what is going on?
18156You can read the complete backtrace. 18090You can read the complete backtrace.
18157 18091
18158In this case, you need to run a recent GNU Emacs, which automatically 18092Emacs automatically starts the debugger that puts you in the
18159starts the debugger that puts you in the @file{*Backtrace*} buffer; or 18093@file{*Backtrace*} buffer. You can also start the debugger manually
18160else, you need to start the debugger manually as described below. 18094as described below.
18161 18095
18162Read the @file{*Backtrace*} buffer from the bottom up; it tells you 18096Read the @file{*Backtrace*} buffer from the bottom up; it tells you
18163what Emacs did that led to the error. Emacs made an interactive call 18097what Emacs did that led to the error. Emacs made an interactive call
@@ -18197,14 +18131,8 @@ then run your test again.
18197@section @code{debug-on-entry} 18131@section @code{debug-on-entry}
18198@findex debug-on-entry 18132@findex debug-on-entry
18199 18133
18200A recent GNU Emacs starts the debugger automatically when your 18134Emacs starts the debugger automatically when your function has an
18201function has an error. 18135error.
18202
18203@ignore
18204GNU Emacs version 20 and before did not; it simply
18205presented you with an error message. You had to start the debugger
18206manually.
18207@end ignore
18208 18136
18209Incidentally, you can start the debugger manually for all versions of 18137Incidentally, you can start the debugger manually for all versions of
18210Emacs; the advantage is that the debugger runs even if you do not have 18138Emacs; the advantage is that the debugger runs even if you do not have
@@ -20079,8 +20007,8 @@ the tic marks themselves and their spacing:
20079@code{defvar}. The @code{boundp} predicate checks whether it has 20007@code{defvar}. The @code{boundp} predicate checks whether it has
20080already been set; @code{boundp} returns @code{nil} if it has not. If 20008already been set; @code{boundp} returns @code{nil} if it has not. If
20081@code{graph-blank} were unbound and we did not use this conditional 20009@code{graph-blank} were unbound and we did not use this conditional
20082construction, in a recent GNU Emacs, we would enter the debugger and 20010construction, we would enter the debugger and see an error message
20083see an error message saying @samp{@w{Debugger entered--Lisp error:} 20011saying @samp{@w{Debugger entered--Lisp error:}
20084@w{(void-variable graph-blank)}}.) 20012@w{(void-variable graph-blank)}}.)
20085 20013
20086@need 1200 20014@need 1200
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 2e1b4a6b669..68d7e827d26 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -5751,6 +5751,28 @@ Cropping is performed after scaling but before rotation.
5751@cindex SVG images 5751@cindex SVG images
5752 5752
5753SVG (Scalable Vector Graphics) is an XML format for specifying images. 5753SVG (Scalable Vector Graphics) is an XML format for specifying images.
5754SVG images support the following additional image descriptor
5755properties:
5756
5757@table @code
5758@item :foreground @var{foreground}
5759@var{foreground}, if non-@code{nil}, should be a string specifying a
5760color, which is used as the image's foreground color. If the value is
5761@code{nil}, it defaults to the faces's foreground color.
5762
5763@item :background @var{background}
5764@var{background}, if non-@code{nil}, should be a string specifying a
5765color, which is used as the image's background color if the image
5766supports transparency. If the value is @code{nil}, it defaults to the
5767faces's background color.
5768
5769@item :css @var{css}
5770@var{css}, if non-@code{nil}, should be a string specifying the CSS to
5771override the default CSS used when generating the image.
5772@end table
5773
5774@subsubheading SVG library
5775
5754If your Emacs build has SVG support, you can create and manipulate 5776If your Emacs build has SVG support, you can create and manipulate
5755these images with the following functions from the @file{svg.el} 5777these images with the following functions from the @file{svg.el}
5756library. 5778library.
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 63d4bf0337f..7982c0dc5ae 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -22,7 +22,7 @@ SHELL = @SHELL@
22# Where to find the source code. $(srcdir) will be the doc/misc subdirectory 22# Where to find the source code. $(srcdir) will be the doc/misc subdirectory
23# of the source tree. This is set by configure's '--srcdir' option. 23# of the source tree. This is set by configure's '--srcdir' option.
24srcdir=@srcdir@ 24srcdir=@srcdir@
25 25top_srcdir = @top_srcdir@
26top_builddir = @top_builddir@ 26top_builddir = @top_builddir@
27 27
28## Where the output files go. 28## Where the output files go.
@@ -100,10 +100,6 @@ texi_sources = $(addsuffix .texi,${TARGETS})
100texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources}) 100texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources})
101texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen} 101texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen}
102SOURCES = $(sort ${texi_and_org}) 102SOURCES = $(sort ${texi_and_org})
103.PHONY: echo-sources
104## Used by the top-level Makefile.
105echo-sources:
106 @echo ${SOURCES}
107 103
108DVI_TARGETS = $(TARGETS:=.dvi) 104DVI_TARGETS = $(TARGETS:=.dvi)
109HTML_TARGETS = $(TARGETS:=.html) 105HTML_TARGETS = $(TARGETS:=.html)
@@ -122,7 +118,7 @@ ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \
122gfdl = ${srcdir}/doclicense.texi 118gfdl = ${srcdir}/doclicense.texi
123style = ${emacsdir}/docstyle.texi 119style = ${emacsdir}/docstyle.texi
124 120
125.PHONY: info dvi html pdf ps echo-info $(INFO_TARGETS) 121.PHONY: info dvi html pdf ps echo-info echo-sources $(INFO_TARGETS)
126## Prevent implicit rule triggering for foo.info. 122## Prevent implicit rule triggering for foo.info.
127.SUFFIXES: 123.SUFFIXES:
128 124
@@ -138,6 +134,9 @@ echo-info:
138 @echo "$(INFO_INSTALL) " | \ 134 @echo "$(INFO_INSTALL) " | \
139 sed -e 's|[^ ]*/||g' -e 's/\.info//g' -e "s/ */.info /g" 135 sed -e 's|[^ ]*/||g' -e 's/\.info//g' -e "s/ */.info /g"
140 136
137echo-sources:
138 @echo ${SOURCES}
139
141dvi: $(DVI_TARGETS) 140dvi: $(DVI_TARGETS)
142 141
143html: $(HTML_TARGETS) 142html: $(HTML_TARGETS)
@@ -235,14 +234,14 @@ ${buildinfodir}/tramp.info tramp.html: ${srcdir}/trampver.texi
235 234
236abs_top_builddir = @abs_top_builddir@ 235abs_top_builddir = @abs_top_builddir@
237EMACS = ${abs_top_builddir}/src/emacs 236EMACS = ${abs_top_builddir}/src/emacs
238emacs = "${EMACS}" -batch --no-site-file --no-site-lisp 237emacs = "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefer-newer t)'
239 238
240# Generated .texi files go in srcdir so they can be included in the 239# Generated .texi files go in srcdir so they can be included in the
241# release tarfile along with the others. 240# release tarfile along with the others.
242# Work in srcdir (and use abs_top_builddir) so that +setupfile and 241# Work in srcdir (and use abs_top_builddir) so that +setupfile and
243# things like org-setup's "version" macro work. Sigh. 242# things like org-setup's "version" macro work. Sigh.
244define org_template 243define org_template
245 $(1:.org=.texi): $(1) 244 $(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el
246 $${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \ 245 $${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \
247 -f org-texinfo-export-to-texinfo-batch $$(notdir $$<) $$(notdir $$@) 246 -f org-texinfo-export-to-texinfo-batch $$(notdir $$<) $$(notdir $$@)
248endef 247endef
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 599252fabf7..f1074d3d143 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -254,73 +254,6 @@ version 20.2. It has also been bundled and pre-installed with XEmacs
254plug-in package which is available from the @value{XEMACSFTP}. See the 254plug-in package which is available from the @value{XEMACSFTP}. See the
255XEmacs 21.x documentation on package installation for details. 255XEmacs 21.x documentation on package installation for details.
256 256
257Users of earlier Emacs distributions (including Emacs 19) or people
258craving for new features and bugs can get a copy of the @RefTeX{}
259distribution from the maintainer's web page. @xref{Imprint}, for more
260information. The following instructions will guide you through the
261process of installing such a distribution.
262
263@subsection Building and Installing
264
265Note: Currently installation is supported for Emacs only. XEmacs users
266might want to refer to the @RefTeX{} package available through the
267package system of XEmacs.
268
269@subsubheading Installation with make
270
271In order to install RefTeX, unpack the distribution and edit the header
272of the Makefile. Basically, you need to change the path specifications
273for Emacs Lisp files and info files. Also, enter the name of your Emacs
274executable (usually either @samp{emacs} or @samp{xemacs}).
275
276Then, type
277
278@example
279make
280make install
281@end example
282
283to compile and install the code and documentation.
284
285Per default @RefTeX{} is installed in its own subdirectory which might
286not be on your load path. In this case, add it to load path with a
287command like the following, replacing the sample directory with the one
288where @RefTeX{} is installed in your case.
289
290@example
291(add-to-list 'load-path "/path/to/reftex")
292@end example
293
294Put this command into your init file before other @RefTeX{}-related
295settings.
296
297@subsubheading Installation by Hand
298
299If you want to get your hands dirty, there is also the possibility to
300install by manually copying files.
301
302@enumerate a
303@item
304Copy the reftex*.el lisp files to a directory on your load path. Make
305sure that no old copy of @RefTeX{} shadows these files.
306@item
307Byte compile the files. The sequence of compiling should be:
308reftex-var.el, reftex.el, and then all the others.
309@item
310Copy the info file reftex.info to the info directory.
311@end enumerate
312
313@subsection Loading @RefTeX{}
314
315In order to make the most important functions for entering @RefTeX{}
316mode available add the following line to your init file.
317
318@example
319(require 'reftex)
320@end example
321
322@subsection Entering @RefTeX{} Mode
323
324@findex turn-on-reftex 257@findex turn-on-reftex
325@findex reftex-mode 258@findex reftex-mode
326@vindex LaTeX-mode-hook 259@vindex LaTeX-mode-hook
@@ -3259,9 +3192,9 @@ with the @kbd{g} key. To get this behavior, use instead
3259 3192
3260@AUCTeX{} is without doubt the best major mode for editing @TeX{} and @LaTeX{} 3193@AUCTeX{} is without doubt the best major mode for editing @TeX{} and @LaTeX{}
3261files with Emacs (@pxref{Top,AUCTeX,,auctex, The AUCTeX User Manual}). 3194files with Emacs (@pxref{Top,AUCTeX,,auctex, The AUCTeX User Manual}).
3262If @AUCTeX{} is not part of your Emacs distribution, you can get 3195You can get it from its home page at @value{AUCTEXSITE}, but since
3263it@footnote{XEmacs 21.x users may want to install the corresponding 3196it is available from GNU ELPA, you can simply install it from @kbd{M-x
3264XEmacs package.} by FTP from the @value{AUCTEXSITE}. 3197list-packages}.
3265 3198
3266@menu 3199@menu
3267* AUCTeX-RefTeX Interface:: How both packages work together 3200* AUCTeX-RefTeX Interface:: How both packages work together
@@ -3611,18 +3544,6 @@ after the @samp{@{step+@}}, also when specifying how to get
3611context. 3544context.
3612 3545
3613@item 3546@item
3614@b{Idle timers in XEmacs}@*
3615@cindex Idle timer restart
3616@vindex reftex-use-itimer-in-xemacs
3617In XEmacs, idle timer restart does not work reliably after fast
3618keystrokes. Therefore @RefTeX{} currently uses the post command
3619hook to start the timer used for automatic crossref information. When
3620this bug gets fixed, a real idle timer can be requested with
3621@lisp
3622(setq reftex-use-itimer-in-xemacs t)
3623@end lisp
3624
3625@item
3626@b{Viper mode}@* 3547@b{Viper mode}@*
3627@cindex Viper mode 3548@cindex Viper mode
3628@cindex Key bindings, problems with Viper mode 3549@cindex Key bindings, problems with Viper mode
diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi
index 4470afcad20..33b3a33f0f4 100644
--- a/doc/misc/woman.texi
+++ b/doc/misc/woman.texi
@@ -105,11 +105,9 @@ Mile End Road, London E1 4NS, UK
105@chapter Introduction 105@chapter Introduction
106@cindex introduction 106@cindex introduction
107 107
108This version of WoMan should run with GNU Emacs 20.3 or later on any 108WoMan was developed primarily on various versions of Microsoft
109platform. It has not been tested, and may not run, with any other 109Windows, but has also been tested on MS-DOS, and various versions of
110version of Emacs. It was developed primarily on various versions of 110UNIX and GNU/Linux.
111Microsoft Windows, but has also been tested on MS-DOS, and various
112versions of UNIX and GNU/Linux.
113 111
114WoMan is distributed with GNU Emacs. 112WoMan is distributed with GNU Emacs.
115 113
diff --git a/etc/NEWS b/etc/NEWS
index 6028da4fe01..720a14248e4 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1061,6 +1061,10 @@ the commands 'customize', 'customize-group', 'customize-apropos' and
1061To customize obsolete user options, use 'customize-option' or 1061To customize obsolete user options, use 'customize-option' or
1062'customize-saved'. 1062'customize-saved'.
1063 1063
1064*** New SVG icons for checkboxes and arrows.
1065They will be used automatically instead of the old icons. If Emacs is
1066built without SVG support, the old icons will be used instead.
1067
1064** Edebug 1068** Edebug
1065 1069
1066*** Obsoletions 1070*** Obsoletions
@@ -1524,6 +1528,15 @@ This controls whether to use smoothing or not for an image. Values
1524include nil (no smoothing), t (do smoothing) or a predicate function 1528include nil (no smoothing), t (do smoothing) or a predicate function
1525that's called with the image object and should return nil/t. 1529that's called with the image object and should return nil/t.
1526 1530
1531+++
1532*** SVG images now support user stylesheets.
1533The ':css' image attribute can be used to override the default CSS
1534stylesheet for an image. The default sets 'font-family' and
1535'font-size' to match the current face, so an image with 'height="1em"'
1536will match the font size in use where it is embedded.
1537
1538This feature relies on librsvg 2.48 or above being available.
1539
1527** EWW 1540** EWW
1528 1541
1529+++ 1542+++
diff --git a/etc/images/README b/etc/images/README
index 00aac4f510a..9bbe796cc95 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -104,3 +104,30 @@ same conditions.
104 104
105The *.pbm files were generally converted from *.xpm by running GIMP or 105The *.pbm files were generally converted from *.xpm by running GIMP or
106ImageMagick's 'convert'. 106ImageMagick's 'convert'.
107
108
109* The following icons are from the Adwaita Icon Theme (made by the
110GNOME project). They are not part of Emacs, but are distributed and
111used by Emacs. They are licensed under either the GNU LGPL v3 or the
112Creative Commons Attribution-Share Alike 3.0 United States License.
113
114To view a copy of the CC-BY-SA licence, visit
115http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
116Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
117
118For more information see the adwaita-icon-theme repository at:
119
120 https://gitlab.gnome.org/GNOME/adwaita-icon-theme
121
122Emacs images and their source in the Adwaita/scalable directory:
123
124 checked.svg ui/checkbox-checked-symbolic.svg
125 unchecked.svg ui/checkbox-symbolic.svg
126 checkbox-mixed.svg ui/checkbox-mixed-symbolic.svg
127 radio.svg ui/radio-symbolic.svg
128 radio-mixed.svg ui/radio-mixed-symbolic.svg
129 radio-checked.svg ui/radio-checked-symbolic.svg
130 down.svg ui/pan-down-symbolic.svg
131 left.svg ui/pan-start-symbolic.svg
132 right.svg ui/pan-end-symbolic.svg
133 up.svg ui/pan-up-symbolic.svg
diff --git a/etc/images/checkbox-mixed.svg b/etc/images/checkbox-mixed.svg
new file mode 100644
index 00000000000..6e46b803c81
--- /dev/null
+++ b/etc/images/checkbox-mixed.svg
@@ -0,0 +1,6 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <g>
3 <path d="M3.5 1A2.506 2.506 0 0 0 1 3.5v9C1 13.876 2.124 15 3.5 15h9c1.376 0 2.5-1.124 2.5-2.5v-9C15 2.124 13.876 1 12.5 1zm0 1h9c.84 0 1.5 .66 1.5 1.5v9c0 .84-.66 1.5-1.5 1.5h-9c-.84 0-1.5-.66-1.5-1.5v-9C2 2.66 2.66 2 3.5 2z" overflow="visible" />
4 <path d="M5 6a2 2 0 1 0 0 4h6a2 2 0 1 0 0 -4z" overflow="visible" />
5 </g>
6</svg>
diff --git a/etc/images/checked.svg b/etc/images/checked.svg
new file mode 100644
index 00000000000..4cbdef04f25
--- /dev/null
+++ b/etc/images/checked.svg
@@ -0,0 +1,6 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <g>
3 <path d="M3.5 1A2.506 2.506 0 0 0 1 3.5v9C1 13.876 2.124 15 3.5 15h9c1.376 0 2.5-1.124 2.5-2.5v-9C15 2.124 13.876 1 12.5 1zm0 1h9c.84 0 1.5 .66 1.5 1.5v9c0 .84-.66 1.5-1.5 1.5h-9c-.84 0-1.5-.66-1.5-1.5v-9C2 2.66 2.66 2 3.5 2z" overflow="visible" />
4 <path d="M14.5 3l-.5-.5L7.5 9 5 6.5l-2 2L7.5 13l7-7z" overflow="visible" />
5 </g>
6</svg>
diff --git a/etc/images/down.svg b/etc/images/down.svg
new file mode 100644
index 00000000000..e2760427d73
--- /dev/null
+++ b/etc/images/down.svg
@@ -0,0 +1,40 @@
1<?xml version='1.0' encoding='UTF-8' standalone='no'?>
2<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='pan-down-symbolic.svg' inkscape:export-filename='/home/sam/source-symbolic.png' inkscape:export-xdpi='270' inkscape:export-ydpi='270' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' style='enable-background:new' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='1.0 (4035a4fb49, 2020-05-01)' width='16' xmlns='http://www.w3.org/2000/svg'>
3 <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='false' bordercolor='#000000' borderlayer='false' borderopacity='0.50196078' inkscape:current-layer='layer10' inkscape:cx='-8.85234' inkscape:cy='7.9624984' inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='0,0' inkscape:object-nodes='true' inkscape:object-paths='true' objecttolerance='10' pagecolor='#e2e2e2' inkscape:pageopacity='0' inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:showpageshadow='false' inkscape:snap-bbox='true' inkscape:snap-bbox-edge-midpoints='false' inkscape:snap-bbox-midpoints='true' inkscape:snap-center='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-intersection-paths='false' inkscape:snap-midpoints='true' inkscape:snap-nodes='true' inkscape:snap-object-midpoints='true' inkscape:snap-others='true' inkscape:snap-page='false' inkscape:snap-smooth-nodes='true' inkscape:snap-to-guides='true' inkscape:window-height='1205' inkscape:window-maximized='0' inkscape:window-width='1553' inkscape:window-x='26' inkscape:window-y='23' inkscape:zoom='1'>
4 <inkscape:grid color='#000000' dotted='false' empcolor='#0800ff' empopacity='0.4627451' empspacing='4' enabled='true' id='grid4866' opacity='0.16470588' originx='-152.00586' originy='-952' snapvisiblegridlinesonly='true' spacingx='1' spacingy='1' type='xygrid' visible='true'/>
5 <inkscape:grid dotted='true' empcolor='#3f3fff' empopacity='0' empspacing='4' id='grid3540' originx='-152.00586' originy='-952' spacingx='0.5' spacingy='0.5' type='xygrid'/>
6 </sodipodi:namedview>
7 <metadata id='metadata90'>
8 <rdf:RDF>
9 <cc:Work rdf:about=''>
10 <dc:format>image/svg+xml</dc:format>
11 <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
12 <dc:title>Gnome Symbolic Icons</dc:title>
13 <cc:license rdf:resource='http://creativecommons.org/licenses/by-sa/4.0/'/>
14 </cc:Work>
15 <cc:License rdf:about='http://creativecommons.org/licenses/by-sa/4.0/'>
16 <cc:permits rdf:resource='http://creativecommons.org/ns#Reproduction'/>
17 <cc:permits rdf:resource='http://creativecommons.org/ns#Distribution'/>
18 <cc:requires rdf:resource='http://creativecommons.org/ns#Notice'/>
19 <cc:requires rdf:resource='http://creativecommons.org/ns#Attribution'/>
20 <cc:permits rdf:resource='http://creativecommons.org/ns#DerivativeWorks'/>
21 <cc:requires rdf:resource='http://creativecommons.org/ns#ShareAlike'/>
22 </cc:License>
23 </rdf:RDF>
24 </metadata>
25 <title id='title8473'>Gnome Symbolic Icons</title>
26 <defs id='defs7386'/>
27 <g inkscape:groupmode='layer' id='layer10' inkscape:label='ui' transform='translate(-152.00586,-952)'>
28 <path inkscape:connector-curvature='0' d='m 166,957 -5.99414,5.99999 L 154,957 Z' id='path6424' sodipodi:nodetypes='cccc' style='fill:#2e3436;fill-opacity:1;stroke:none'/>
29 </g>
30 <g inkscape:groupmode='layer' id='layer1' inkscape:label='status' transform='translate(-152.00586,-888)'/>
31 <g inkscape:groupmode='layer' id='layer11' inkscape:label='legacy' transform='translate(-152.00586,-952)'/>
32 <g inkscape:groupmode='layer' id='layer7' inkscape:label='places' transform='translate(-152.00586,-888)'/>
33 <g inkscape:groupmode='layer' id='layer6' inkscape:label='mimetypes' transform='translate(-152.00586,-888)'/>
34 <g inkscape:groupmode='layer' id='layer5' inkscape:label='emotes' transform='translate(-152.00586,-888)'/>
35 <g inkscape:groupmode='layer' id='layer9' inkscape:label='emblems' transform='translate(-152.00586,-888)'/>
36 <g inkscape:groupmode='layer' id='layer2' inkscape:label='devices' transform='translate(-152.00586,-888)'/>
37 <g inkscape:groupmode='layer' id='layer8' inkscape:label='categories' transform='translate(-152.00586,-888)'/>
38 <g inkscape:groupmode='layer' id='layer3' inkscape:label='apps' transform='translate(-152.00586,-888)'/>
39 <g inkscape:groupmode='layer' id='layer4' inkscape:label='actions' transform='translate(-152.00586,-888)'/>
40</svg>
diff --git a/etc/images/left.svg b/etc/images/left.svg
new file mode 100644
index 00000000000..d6429bc4109
--- /dev/null
+++ b/etc/images/left.svg
@@ -0,0 +1,40 @@
1<?xml version='1.0' encoding='UTF-8' standalone='no'?>
2<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='pan-start-symbolic.svg' inkscape:export-filename='/home/sam/source-symbolic.png' inkscape:export-xdpi='270' inkscape:export-ydpi='270' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' style='enable-background:new' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='1.0 (4035a4fb49, 2020-05-01)' width='16' xmlns='http://www.w3.org/2000/svg'>
3 <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='false' bordercolor='#000000' borderlayer='false' borderopacity='0.50196078' inkscape:current-layer='layer10' inkscape:cx='51.147672' inkscape:cy='7.96251' inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='0,0' inkscape:object-nodes='true' inkscape:object-paths='true' objecttolerance='10' pagecolor='#e2e2e2' inkscape:pageopacity='0' inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:showpageshadow='false' inkscape:snap-bbox='true' inkscape:snap-bbox-edge-midpoints='false' inkscape:snap-bbox-midpoints='true' inkscape:snap-center='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-intersection-paths='false' inkscape:snap-midpoints='true' inkscape:snap-nodes='true' inkscape:snap-object-midpoints='true' inkscape:snap-others='true' inkscape:snap-page='false' inkscape:snap-smooth-nodes='true' inkscape:snap-to-guides='true' inkscape:window-height='1205' inkscape:window-maximized='0' inkscape:window-width='1553' inkscape:window-x='26' inkscape:window-y='23' inkscape:zoom='1'>
4 <inkscape:grid color='#000000' dotted='false' empcolor='#0800ff' empopacity='0.4627451' empspacing='4' enabled='true' id='grid4866' opacity='0.16470588' originx='-92.005848' originy='-951.99999' snapvisiblegridlinesonly='true' spacingx='1' spacingy='1' type='xygrid' visible='true'/>
5 <inkscape:grid dotted='true' empcolor='#3f3fff' empopacity='0' empspacing='4' id='grid3540' originx='-92.005848' originy='-951.99999' spacingx='0.5' spacingy='0.5' type='xygrid'/>
6 </sodipodi:namedview>
7 <metadata id='metadata90'>
8 <rdf:RDF>
9 <cc:Work rdf:about=''>
10 <dc:format>image/svg+xml</dc:format>
11 <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
12 <dc:title>Gnome Symbolic Icons</dc:title>
13 <cc:license rdf:resource='http://creativecommons.org/licenses/by-sa/4.0/'/>
14 </cc:Work>
15 <cc:License rdf:about='http://creativecommons.org/licenses/by-sa/4.0/'>
16 <cc:permits rdf:resource='http://creativecommons.org/ns#Reproduction'/>
17 <cc:permits rdf:resource='http://creativecommons.org/ns#Distribution'/>
18 <cc:requires rdf:resource='http://creativecommons.org/ns#Notice'/>
19 <cc:requires rdf:resource='http://creativecommons.org/ns#Attribution'/>
20 <cc:permits rdf:resource='http://creativecommons.org/ns#DerivativeWorks'/>
21 <cc:requires rdf:resource='http://creativecommons.org/ns#ShareAlike'/>
22 </cc:License>
23 </rdf:RDF>
24 </metadata>
25 <title id='title8473'>Gnome Symbolic Icons</title>
26 <defs id='defs7386'/>
27 <g inkscape:groupmode='layer' id='layer10' inkscape:label='ui' transform='translate(-92.005848,-951.99999)'>
28 <path inkscape:connector-curvature='0' d='M 103,966 97.00585,959.99999 103,954 Z' id='path6400' sodipodi:nodetypes='cccc' style='fill:#2e3436;fill-opacity:1;stroke:none'/>
29 </g>
30 <g inkscape:groupmode='layer' id='layer1' inkscape:label='status' transform='translate(-92.005848,-887.99999)'/>
31 <g inkscape:groupmode='layer' id='layer11' inkscape:label='legacy' transform='translate(-92.005848,-951.99999)'/>
32 <g inkscape:groupmode='layer' id='layer7' inkscape:label='places' transform='translate(-92.005848,-887.99999)'/>
33 <g inkscape:groupmode='layer' id='layer6' inkscape:label='mimetypes' transform='translate(-92.005848,-887.99999)'/>
34 <g inkscape:groupmode='layer' id='layer5' inkscape:label='emotes' transform='translate(-92.005848,-887.99999)'/>
35 <g inkscape:groupmode='layer' id='layer9' inkscape:label='emblems' transform='translate(-92.005848,-887.99999)'/>
36 <g inkscape:groupmode='layer' id='layer2' inkscape:label='devices' transform='translate(-92.005848,-887.99999)'/>
37 <g inkscape:groupmode='layer' id='layer8' inkscape:label='categories' transform='translate(-92.005848,-887.99999)'/>
38 <g inkscape:groupmode='layer' id='layer3' inkscape:label='apps' transform='translate(-92.005848,-887.99999)'/>
39 <g inkscape:groupmode='layer' id='layer4' inkscape:label='actions' transform='translate(-92.005848,-887.99999)'/>
40</svg>
diff --git a/etc/images/radio-checked.svg b/etc/images/radio-checked.svg
new file mode 100644
index 00000000000..8950b447a0b
--- /dev/null
+++ b/etc/images/radio-checked.svg
@@ -0,0 +1,6 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <g>
3 <path d="M8 5a3.001 3.001 0 0 0 0 6 3.001 3.001 0 0 0 0 -6z" overflow="visible"/>
4 <path d="M8.004 1C4.144 1 1 4.144 1 8.004c0 3.86 3.144 7.006 7.004 7.006 3.86 0 7.006-3.146 7.006-7.006C15.01 4.144 11.864 1 8.004 1zm0 1a6.002 6.002 0 0 1 6.006 6.004 6.004 6.004 0 0 1 -6.006 6.006A6.002 6.002 0 0 1 2 8.004 6 6 0 0 1 8.004 2z" overflow="visible"/>
5 </g>
6</svg>
diff --git a/etc/images/radio-mixed.svg b/etc/images/radio-mixed.svg
new file mode 100644
index 00000000000..1b3bfa78e9d
--- /dev/null
+++ b/etc/images/radio-mixed.svg
@@ -0,0 +1,6 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <g>
3 <path d="M8 1C4.142 1 1 4.142 1 8s3.142 7 7 7 7-3.142 7-7-3.142-7-7-7zm0 1c3.316 0 6 2.684 6 6s-2.684 6-6 6-6-2.684-6-6 2.684-6 6-6z" overflow="visible" />
4 <path d="M5 6a2 2 0 1 0 0 4h6a2 2 0 1 0 0 -4z" overflow="visible" />
5 </g>
6</svg>
diff --git a/etc/images/radio.svg b/etc/images/radio.svg
new file mode 100644
index 00000000000..2593a78610e
--- /dev/null
+++ b/etc/images/radio.svg
@@ -0,0 +1,3 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <path d="M8 1C4.142 1 1 4.142 1 8s3.142 7 7 7 7-3.142 7-7-3.142-7-7-7zm0 1c3.316 0 6 2.684 6 6s-2.684 6-6 6-6-2.684-6-6 2.684-6 6-6z" overflow="visible" />
3</svg>
diff --git a/etc/images/right.svg b/etc/images/right.svg
new file mode 100644
index 00000000000..d58cd364359
--- /dev/null
+++ b/etc/images/right.svg
@@ -0,0 +1,40 @@
1<?xml version='1.0' encoding='UTF-8' standalone='no'?>
2<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='pan-end-symbolic.svg' inkscape:export-filename='/home/sam/source-symbolic.png' inkscape:export-xdpi='270' inkscape:export-ydpi='270' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' style='enable-background:new' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='1.0 (4035a4fb49, 2020-05-01)' width='16' xmlns='http://www.w3.org/2000/svg'>
3 <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='false' bordercolor='#000000' borderlayer='false' borderopacity='0.50196078' inkscape:current-layer='layer10' inkscape:cx='31.147668' inkscape:cy='7.96251' inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='0,0' inkscape:object-nodes='true' inkscape:object-paths='true' objecttolerance='10' pagecolor='#e2e2e2' inkscape:pageopacity='0' inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:showpageshadow='false' inkscape:snap-bbox='true' inkscape:snap-bbox-edge-midpoints='false' inkscape:snap-bbox-midpoints='true' inkscape:snap-center='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-intersection-paths='false' inkscape:snap-midpoints='true' inkscape:snap-nodes='true' inkscape:snap-object-midpoints='true' inkscape:snap-others='true' inkscape:snap-page='false' inkscape:snap-smooth-nodes='true' inkscape:snap-to-guides='true' inkscape:window-height='1205' inkscape:window-maximized='0' inkscape:window-width='1553' inkscape:window-x='26' inkscape:window-y='23' inkscape:zoom='1'>
4 <inkscape:grid color='#000000' dotted='false' empcolor='#0800ff' empopacity='0.4627451' empspacing='4' enabled='true' id='grid4866' opacity='0.16470588' originx='-112.00585' originy='-951.99999' snapvisiblegridlinesonly='true' spacingx='1' spacingy='1' type='xygrid' visible='true'/>
5 <inkscape:grid dotted='true' empcolor='#3f3fff' empopacity='0' empspacing='4' id='grid3540' originx='-112.00585' originy='-951.99999' spacingx='0.5' spacingy='0.5' type='xygrid'/>
6 </sodipodi:namedview>
7 <metadata id='metadata90'>
8 <rdf:RDF>
9 <cc:Work rdf:about=''>
10 <dc:format>image/svg+xml</dc:format>
11 <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
12 <dc:title>Gnome Symbolic Icons</dc:title>
13 <cc:license rdf:resource='http://creativecommons.org/licenses/by-sa/4.0/'/>
14 </cc:Work>
15 <cc:License rdf:about='http://creativecommons.org/licenses/by-sa/4.0/'>
16 <cc:permits rdf:resource='http://creativecommons.org/ns#Reproduction'/>
17 <cc:permits rdf:resource='http://creativecommons.org/ns#Distribution'/>
18 <cc:requires rdf:resource='http://creativecommons.org/ns#Notice'/>
19 <cc:requires rdf:resource='http://creativecommons.org/ns#Attribution'/>
20 <cc:permits rdf:resource='http://creativecommons.org/ns#DerivativeWorks'/>
21 <cc:requires rdf:resource='http://creativecommons.org/ns#ShareAlike'/>
22 </cc:License>
23 </rdf:RDF>
24 </metadata>
25 <title id='title8473'>Gnome Symbolic Icons</title>
26 <defs id='defs7386'/>
27 <g inkscape:groupmode='layer' id='layer10' inkscape:label='ui' transform='translate(-112.00585,-951.99999)'>
28 <path inkscape:connector-curvature='0' d='m 117,966 6.00585,-6.00001 L 117,954 Z' id='path6412' sodipodi:nodetypes='cccc' style='fill:#2e3436;fill-opacity:1;stroke:none'/>
29 </g>
30 <g inkscape:groupmode='layer' id='layer1' inkscape:label='status' transform='translate(-112.00585,-887.99999)'/>
31 <g inkscape:groupmode='layer' id='layer11' inkscape:label='legacy' transform='translate(-112.00585,-951.99999)'/>
32 <g inkscape:groupmode='layer' id='layer7' inkscape:label='places' transform='translate(-112.00585,-887.99999)'/>
33 <g inkscape:groupmode='layer' id='layer6' inkscape:label='mimetypes' transform='translate(-112.00585,-887.99999)'/>
34 <g inkscape:groupmode='layer' id='layer5' inkscape:label='emotes' transform='translate(-112.00585,-887.99999)'/>
35 <g inkscape:groupmode='layer' id='layer9' inkscape:label='emblems' transform='translate(-112.00585,-887.99999)'/>
36 <g inkscape:groupmode='layer' id='layer2' inkscape:label='devices' transform='translate(-112.00585,-887.99999)'/>
37 <g inkscape:groupmode='layer' id='layer8' inkscape:label='categories' transform='translate(-112.00585,-887.99999)'/>
38 <g inkscape:groupmode='layer' id='layer3' inkscape:label='apps' transform='translate(-112.00585,-887.99999)'/>
39 <g inkscape:groupmode='layer' id='layer4' inkscape:label='actions' transform='translate(-112.00585,-887.99999)'/>
40</svg>
diff --git a/etc/images/unchecked.svg b/etc/images/unchecked.svg
new file mode 100644
index 00000000000..09bab8de95b
--- /dev/null
+++ b/etc/images/unchecked.svg
@@ -0,0 +1,3 @@
1<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 16 16">
2 <path d="M3.5 1A2.506 2.506 0 0 0 1 3.5v9C1 13.876 2.124 15 3.5 15h9c1.376 0 2.5-1.124 2.5-2.5v-9C15 2.124 13.876 1 12.5 1zm0 1h9c.84 0 1.5 .66 1.5 1.5v9c0 .84-.66 1.5-1.5 1.5h-9c-.84 0-1.5-.66-1.5-1.5v-9C2 2.66 2.66 2 3.5 2z" overflow="visible" />
3</svg>
diff --git a/etc/images/up.svg b/etc/images/up.svg
new file mode 100644
index 00000000000..9e1a245be74
--- /dev/null
+++ b/etc/images/up.svg
@@ -0,0 +1,40 @@
1<?xml version='1.0' encoding='UTF-8' standalone='no'?>
2<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/' sodipodi:docname='pan-up-symbolic.svg' inkscape:export-filename='/home/sam/source-symbolic.png' inkscape:export-xdpi='270' inkscape:export-ydpi='270' height='16' id='svg7384' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' style='enable-background:new' xmlns:svg='http://www.w3.org/2000/svg' version='1.1' inkscape:version='1.0 (4035a4fb49, 2020-05-01)' width='16' xmlns='http://www.w3.org/2000/svg'>
3 <sodipodi:namedview inkscape:bbox-nodes='true' inkscape:bbox-paths='false' bordercolor='#000000' borderlayer='false' borderopacity='0.50196078' inkscape:current-layer='layer10' inkscape:cx='11.14767' inkscape:cy='7.9625016' inkscape:document-rotation='0' gridtolerance='10' inkscape:guide-bbox='true' guidetolerance='10' id='namedview88' inkscape:measure-end='0,0' inkscape:measure-start='0,0' inkscape:object-nodes='true' inkscape:object-paths='true' objecttolerance='10' pagecolor='#e2e2e2' inkscape:pageopacity='0' inkscape:pageshadow='2' showborder='false' showgrid='true' showguides='false' inkscape:showpageshadow='false' inkscape:snap-bbox='true' inkscape:snap-bbox-edge-midpoints='false' inkscape:snap-bbox-midpoints='true' inkscape:snap-center='false' inkscape:snap-global='true' inkscape:snap-grids='true' inkscape:snap-intersection-paths='false' inkscape:snap-midpoints='true' inkscape:snap-nodes='true' inkscape:snap-object-midpoints='true' inkscape:snap-others='true' inkscape:snap-page='false' inkscape:snap-smooth-nodes='true' inkscape:snap-to-guides='true' inkscape:window-height='1205' inkscape:window-maximized='0' inkscape:window-width='1553' inkscape:window-x='26' inkscape:window-y='23' inkscape:zoom='1'>
4 <inkscape:grid color='#000000' dotted='false' empcolor='#0800ff' empopacity='0.4627451' empspacing='4' enabled='true' id='grid4866' opacity='0.16470588' originx='-132.00585' originy='-952' snapvisiblegridlinesonly='true' spacingx='1' spacingy='1' type='xygrid' visible='true'/>
5 <inkscape:grid dotted='true' empcolor='#3f3fff' empopacity='0' empspacing='4' id='grid3540' originx='-132.00585' originy='-952' spacingx='0.5' spacingy='0.5' type='xygrid'/>
6 </sodipodi:namedview>
7 <metadata id='metadata90'>
8 <rdf:RDF>
9 <cc:Work rdf:about=''>
10 <dc:format>image/svg+xml</dc:format>
11 <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
12 <dc:title>Gnome Symbolic Icons</dc:title>
13 <cc:license rdf:resource='http://creativecommons.org/licenses/by-sa/4.0/'/>
14 </cc:Work>
15 <cc:License rdf:about='http://creativecommons.org/licenses/by-sa/4.0/'>
16 <cc:permits rdf:resource='http://creativecommons.org/ns#Reproduction'/>
17 <cc:permits rdf:resource='http://creativecommons.org/ns#Distribution'/>
18 <cc:requires rdf:resource='http://creativecommons.org/ns#Notice'/>
19 <cc:requires rdf:resource='http://creativecommons.org/ns#Attribution'/>
20 <cc:permits rdf:resource='http://creativecommons.org/ns#DerivativeWorks'/>
21 <cc:requires rdf:resource='http://creativecommons.org/ns#ShareAlike'/>
22 </cc:License>
23 </rdf:RDF>
24 </metadata>
25 <title id='title8473'>Gnome Symbolic Icons</title>
26 <defs id='defs7386'/>
27 <g inkscape:groupmode='layer' id='layer10' inkscape:label='ui' transform='translate(-132.00585,-952)'>
28 <path inkscape:connector-curvature='0' d='M 146,963 140.00585,956.99999 134,963 Z' id='path6418' sodipodi:nodetypes='cccc' style='fill:#2e3436;fill-opacity:1;stroke:none'/>
29 </g>
30 <g inkscape:groupmode='layer' id='layer1' inkscape:label='status' transform='translate(-132.00585,-888)'/>
31 <g inkscape:groupmode='layer' id='layer11' inkscape:label='legacy' transform='translate(-132.00585,-952)'/>
32 <g inkscape:groupmode='layer' id='layer7' inkscape:label='places' transform='translate(-132.00585,-888)'/>
33 <g inkscape:groupmode='layer' id='layer6' inkscape:label='mimetypes' transform='translate(-132.00585,-888)'/>
34 <g inkscape:groupmode='layer' id='layer5' inkscape:label='emotes' transform='translate(-132.00585,-888)'/>
35 <g inkscape:groupmode='layer' id='layer9' inkscape:label='emblems' transform='translate(-132.00585,-888)'/>
36 <g inkscape:groupmode='layer' id='layer2' inkscape:label='devices' transform='translate(-132.00585,-888)'/>
37 <g inkscape:groupmode='layer' id='layer8' inkscape:label='categories' transform='translate(-132.00585,-888)'/>
38 <g inkscape:groupmode='layer' id='layer3' inkscape:label='apps' transform='translate(-132.00585,-888)'/>
39 <g inkscape:groupmode='layer' id='layer4' inkscape:label='actions' transform='translate(-132.00585,-888)'/>
40</svg>
diff --git a/leim/Makefile.in b/leim/Makefile.in
index c2f9cf5ab5f..2646abcfff9 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -137,19 +137,23 @@ ${srcdir}/../lisp/language/pinyin.el: ${srcdir}/MISC-DIC/pinyin.map
137 $(AM_V_GEN)${RUN_EMACS} -l titdic-cnv -f pinyin-convert $< $@ 137 $(AM_V_GEN)${RUN_EMACS} -l titdic-cnv -f pinyin-convert $< $@
138 138
139 139
140.PHONY: bootstrap-clean distclean maintainer-clean extraclean 140.PHONY: bootstrap-clean distclean maintainer-clean extraclean gen-clean
141 141
142## Perhaps this should run gen-clean.
142bootstrap-clean: 143bootstrap-clean:
143 rm -f ${TIT_MISC} ${leimdir}/leim-list.el 144 rm -f ${TIT_MISC} ${leimdir}/leim-list.el
144 145
145distclean: 146distclean:
146 rm -f Makefile 147 rm -f Makefile
147 148
148maintainer-clean: distclean bootstrap-clean 149maintainer-clean: gen-clean distclean
149 150
150## We do not delete ja-dic, even in a bootstrap, because it rarely 151## ja-dic rarely changes and is slow to regenerate, and tends to be a
151## changes and is slow to regenerate. 152## bottleneck in parallel builds.
152extraclean: bootstrap-clean 153gen-clean:
154 rm -f ${TIT_MISC} ${leimdir}/leim-list.el
153 rm -rf ${leimdir}/ja-dic 155 rm -rf ${leimdir}/ja-dic
154 156
157extraclean: maintainer-clean
158
155### Makefile.in ends here 159### Makefile.in ends here
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index c9266489a95..b970451dd20 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -480,8 +480,10 @@ maintainer-clean: distclean bootstrap-clean
480 rm -f TAGS 480 rm -f TAGS
481 481
482extraclean: bootstrap-clean distclean 482extraclean: bootstrap-clean distclean
483 -for file in $(LOADDEFS); do rm -f $${file}~; done 483 -for file in $(loaddefs); do rm -f $${file}~; done
484 -rm -f $(lisp)/loaddefs.el~ 484 -rm -f $(lisp)/loaddefs.el~
485 -find $(lisp) -name '*~' $(FIND_DELETE)
486 -find $(lisp) -name '#*' $(FIND_DELETE)
485 487
486.PHONY: check-declare 488.PHONY: check-declare
487 489
diff --git a/lisp/avoid.el b/lisp/avoid.el
index 3b3848e20d1..d3afecf8cc2 100644
--- a/lisp/avoid.el
+++ b/lisp/avoid.el
@@ -1,4 +1,4 @@
1;;; avoid.el --- make mouse pointer stay out of the way of editing 1;;; avoid.el --- make mouse pointer stay out of the way of editing -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1993-1994, 2000-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2000-2021 Free Software Foundation, Inc.
4 4
@@ -80,7 +80,6 @@ use either \\[customize] or \\[mouse-avoidance-mode]."
80 :initialize 'custom-initialize-default 80 :initialize 'custom-initialize-default
81 :type '(choice (const :tag "none" nil) (const banish) (const jump) 81 :type '(choice (const :tag "none" nil) (const banish) (const jump)
82 (const animate) (const exile) (const proteus)) 82 (const animate) (const exile) (const proteus))
83 :group 'avoid
84 :require 'avoid 83 :require 'avoid
85 :version "20.3") 84 :version "20.3")
86 85
@@ -89,25 +88,21 @@ use either \\[customize] or \\[mouse-avoidance-mode]."
89 "Average distance that mouse will be moved when approached by cursor. 88 "Average distance that mouse will be moved when approached by cursor.
90Only applies in Mouse Avoidance mode `jump' and its derivatives. 89Only applies in Mouse Avoidance mode `jump' and its derivatives.
91For best results make this larger than `mouse-avoidance-threshold'." 90For best results make this larger than `mouse-avoidance-threshold'."
92 :type 'integer 91 :type 'integer)
93 :group 'avoid)
94 92
95(defcustom mouse-avoidance-nudge-var 10 93(defcustom mouse-avoidance-nudge-var 10
96 "Variability of `mouse-avoidance-nudge-dist' (which see)." 94 "Variability of `mouse-avoidance-nudge-dist' (which see)."
97 :type 'integer 95 :type 'integer)
98 :group 'avoid)
99 96
100(defcustom mouse-avoidance-animation-delay .01 97(defcustom mouse-avoidance-animation-delay .01
101 "Delay between animation steps, in seconds." 98 "Delay between animation steps, in seconds."
102 :type 'number 99 :type 'number)
103 :group 'avoid)
104 100
105(defcustom mouse-avoidance-threshold 5 101(defcustom mouse-avoidance-threshold 5
106 "Mouse-pointer's flight distance. 102 "Mouse-pointer's flight distance.
107If the cursor gets closer than this, the mouse pointer will move away. 103If the cursor gets closer than this, the mouse pointer will move away.
108Only applies in Mouse Avoidance modes `animate' and `jump'." 104Only applies in Mouse Avoidance modes `animate' and `jump'."
109 :type 'integer 105 :type 'integer)
110 :group 'avoid)
111 106
112(defcustom mouse-avoidance-banish-position '((frame-or-window . frame) 107(defcustom mouse-avoidance-banish-position '((frame-or-window . frame)
113 (side . right) 108 (side . right)
@@ -380,7 +375,7 @@ redefine this function to suit your own tastes."
380 (mouse-avoidance-nudge-mouse) 375 (mouse-avoidance-nudge-mouse)
381 (if (not (eq (selected-frame) (car old-pos))) 376 (if (not (eq (selected-frame) (car old-pos)))
382 ;; This should never happen. 377 ;; This should never happen.
383 (apply 'set-mouse-position old-pos))))) 378 (apply #'set-mouse-position old-pos)))))
384 379
385;;;###autoload 380;;;###autoload
386(defun mouse-avoidance-mode (&optional mode) 381(defun mouse-avoidance-mode (&optional mode)
diff --git a/lisp/calc/calc-alg.el b/lisp/calc/calc-alg.el
index 1327cf0a39b..162026d092b 100644
--- a/lisp/calc/calc-alg.el
+++ b/lisp/calc/calc-alg.el
@@ -444,12 +444,12 @@ Code can refer to the expression to simplify via lexical variable `expr'
444and should return the simplified expression to use (or nil)." 444and should return the simplified expression to use (or nil)."
445 (declare (indent 1) (debug (sexp body))) 445 (declare (indent 1) (debug (sexp body)))
446 (cons 'progn 446 (cons 'progn
447 (mapcar #'(lambda (func) 447 (mapcar (lambda (func)
448 `(put ',func 'math-simplify 448 `(put ',func 'math-simplify
449 (nconc 449 (nconc
450 (get ',func 'math-simplify) 450 (get ',func 'math-simplify)
451 (list 451 (list
452 #'(lambda (expr) ,@code))))) 452 (lambda (expr) ,@code)))))
453 (if (symbolp funcs) (list funcs) funcs)))) 453 (if (symbolp funcs) (list funcs) funcs))))
454 454
455(math-defsimplify (+ -) 455(math-defsimplify (+ -)
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 24781ed6c86..e85ecf03906 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -2784,23 +2784,23 @@ If X is not an error form, return 1."
2784 (declare (indent 1) (debug (sexp body))) 2784 (declare (indent 1) (debug (sexp body)))
2785 (setq math-integral-cache nil) 2785 (setq math-integral-cache nil)
2786 (cons 'progn 2786 (cons 'progn
2787 (mapcar #'(lambda (func) 2787 (mapcar (lambda (func)
2788 `(put ',func 'math-integral 2788 `(put ',func 'math-integral
2789 (nconc 2789 (nconc
2790 (get ',func 'math-integral) 2790 (get ',func 'math-integral)
2791 (list 2791 (list
2792 #'(lambda (u) ,@code))))) 2792 (lambda (u) ,@code)))))
2793 (if (symbolp funcs) (list funcs) funcs)))) 2793 (if (symbolp funcs) (list funcs) funcs))))
2794 2794
2795(defmacro math-defintegral-2 (funcs &rest code) 2795(defmacro math-defintegral-2 (funcs &rest code)
2796 (declare (indent 1) (debug (sexp body))) 2796 (declare (indent 1) (debug (sexp body)))
2797 (setq math-integral-cache nil) 2797 (setq math-integral-cache nil)
2798 (cons 'progn 2798 (cons 'progn
2799 (mapcar #'(lambda (func) 2799 (mapcar (lambda (func)
2800 `(put ',func 'math-integral-2 2800 `(put ',func 'math-integral-2
2801 (nconc 2801 (nconc
2802 (get ',func 'math-integral-2) 2802 (get ',func 'math-integral-2)
2803 (list #'(lambda (u v) ,@code))))) 2803 (list (lambda (u v) ,@code)))))
2804 (if (symbolp funcs) (list funcs) funcs)))) 2804 (if (symbolp funcs) (list funcs) funcs))))
2805 2805
2806(defvar var-IntegAfterRules 'calc-IntegAfterRules) 2806(defvar var-IntegAfterRules 'calc-IntegAfterRules)
diff --git a/lisp/calc/calc-prog.el b/lisp/calc/calc-prog.el
index dd221457f83..4e27d7671e2 100644
--- a/lisp/calc/calc-prog.el
+++ b/lisp/calc/calc-prog.el
@@ -1881,9 +1881,9 @@ Redefine the corresponding command."
1881 (if (fboundp (setq chk (intern (concat "math-" qual-name)))) 1881 (if (fboundp (setq chk (intern (concat "math-" qual-name))))
1882 (append rest 1882 (append rest
1883 (if is-rest 1883 (if is-rest
1884 `((mapcar #'(lambda (x) 1884 `((mapcar (lambda (x)
1885 (or (,chk x) 1885 (or (,chk x)
1886 (math-reject-arg x ',qual))) 1886 (math-reject-arg x ',qual)))
1887 ,var)) 1887 ,var))
1888 `((or (,chk ,var) 1888 `((or (,chk ,var)
1889 (math-reject-arg ,var ',qual))))) 1889 (math-reject-arg ,var ',qual)))))
@@ -1894,9 +1894,9 @@ Redefine the corresponding command."
1894 qual-name 1)))))) 1894 qual-name 1))))))
1895 (append rest 1895 (append rest
1896 (if is-rest 1896 (if is-rest
1897 `((mapcar #'(lambda (x) 1897 `((mapcar (lambda (x)
1898 (and (,chk x) 1898 (and (,chk x)
1899 (math-reject-arg x ',qual))) 1899 (math-reject-arg x ',qual)))
1900 ,var)) 1900 ,var))
1901 `((and 1901 `((and
1902 (,chk ,var) 1902 (,chk ,var)
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index d9cd21e3cd2..04b525efc8a 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -105,10 +105,6 @@
105 105
106;;; Code: 106;;; Code:
107 107
108(defconst icalendar-version "0.19"
109 "Version number of icalendar.el.")
110(make-obsolete-variable 'icalendar-version nil "28.1")
111
112;; ====================================================================== 108;; ======================================================================
113;; Customizables 109;; Customizables
114;; ====================================================================== 110;; ======================================================================
@@ -2557,6 +2553,11 @@ the entry."
2557 (or (icalendar--get-event-property event 'URL) "") 2553 (or (icalendar--get-event-property event 'URL) "")
2558 (or (icalendar--get-event-property event 'CLASS) ""))) 2554 (or (icalendar--get-event-property event 'CLASS) "")))
2559 2555
2556;; Obsolete
2557
2558(defconst icalendar-version "0.19" "Version number of icalendar.el.")
2559(make-obsolete-variable 'icalendar-version 'emacs-version "28.1")
2560
2560(provide 'icalendar) 2561(provide 'icalendar)
2561 2562
2562;;; icalendar.el ends here 2563;;; icalendar.el ends here
diff --git a/lisp/cedet/semantic/bovine/grammar.el b/lisp/cedet/semantic/bovine/grammar.el
index a5b9873445e..a2717d711fe 100644
--- a/lisp/cedet/semantic/bovine/grammar.el
+++ b/lisp/cedet/semantic/bovine/grammar.el
@@ -475,7 +475,7 @@ Menu items are appended to the common grammar menu.")
475 (with-current-buffer (find-file-noselect infile) 475 (with-current-buffer (find-file-noselect infile)
476 (setq infile buffer-file-name) 476 (setq infile buffer-file-name)
477 (if outdir (setq default-directory outdir)) 477 (if outdir (setq default-directory outdir))
478 (semantic-grammar-create-package nil t)) 478 (semantic-grammar-create-package t t))
479 (error (message "%s" (error-message-string err)) nil))) 479 (error (message "%s" (error-message-string err)) nil)))
480 lang filename copyright-end) 480 lang filename copyright-end)
481 (when (and packagename 481 (when (and packagename
diff --git a/lisp/cedet/semantic/wisent/grammar.el b/lisp/cedet/semantic/wisent/grammar.el
index 465d4720031..c5e4554082e 100644
--- a/lisp/cedet/semantic/wisent/grammar.el
+++ b/lisp/cedet/semantic/wisent/grammar.el
@@ -477,7 +477,7 @@ Menu items are appended to the common grammar menu.")
477 (condition-case err 477 (condition-case err
478 (with-current-buffer (find-file-noselect infile) 478 (with-current-buffer (find-file-noselect infile)
479 (if outdir (setq default-directory outdir)) 479 (if outdir (setq default-directory outdir))
480 (semantic-grammar-create-package nil t)) 480 (semantic-grammar-create-package t t))
481 (error (message "%s" (error-message-string err)) nil))) 481 (error (message "%s" (error-message-string err)) nil)))
482 output-data) 482 output-data)
483 (when (setq output-data (assoc packagename wisent-make-parsers--parser-file-name)) 483 (when (setq output-data (assoc packagename wisent-make-parsers--parser-file-name))
diff --git a/lisp/dframe.el b/lisp/dframe.el
index e61d2ea0581..f4208f3755a 100644
--- a/lisp/dframe.el
+++ b/lisp/dframe.el
@@ -828,7 +828,7 @@ the mode-line."
828 828
829(defvar dframe-version "1.3" 829(defvar dframe-version "1.3"
830 "The current version of the dedicated frame library.") 830 "The current version of the dedicated frame library.")
831(make-obsolete-variable 'dframe-version nil "28.1") 831(make-obsolete-variable 'dframe-version 'emacs-version "28.1")
832 832
833(provide 'dframe) 833(provide 'dframe)
834 834
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index cef09009d95..0ae22934b2c 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -1802,11 +1802,6 @@ If BACKWARD is non-nil, jump to the previous match."
1802 (remove-overlays (point-min) (point-max) 'doc-view t) 1802 (remove-overlays (point-min) (point-max) 'doc-view t)
1803 (if (consp image-mode-winprops-alist) (setq image-mode-winprops-alist nil))) 1803 (if (consp image-mode-winprops-alist) (setq image-mode-winprops-alist nil)))
1804 1804
1805(defun doc-view-intersection (l1 l2)
1806 (let ((l ()))
1807 (dolist (x l1) (if (memq x l2) (push x l)))
1808 l))
1809
1810(defun doc-view-set-doc-type () 1805(defun doc-view-set-doc-type ()
1811 "Figure out the current document type (`doc-view-doc-type')." 1806 "Figure out the current document type (`doc-view-doc-type')."
1812 (let ((name-types 1807 (let ((name-types
@@ -1841,7 +1836,7 @@ If BACKWARD is non-nil, jump to the previous match."
1841 ((looking-at "AT&TFORM") '(djvu)))))) 1836 ((looking-at "AT&TFORM") '(djvu))))))
1842 (setq-local 1837 (setq-local
1843 doc-view-doc-type 1838 doc-view-doc-type
1844 (car (or (doc-view-intersection name-types content-types) 1839 (car (or (nreverse (seq-intersection name-types content-types #'eq))
1845 (when (and name-types content-types) 1840 (when (and name-types content-types)
1846 (error "Conflicting types: name says %s but content says %s" 1841 (error "Conflicting types: name says %s but content says %s"
1847 name-types content-types)) 1842 name-types content-types))
@@ -2146,6 +2141,12 @@ See the command `doc-view-mode' for more information on this mode."
2146 (add-hook 'bookmark-after-jump-hook show-fn-sym) 2141 (add-hook 'bookmark-after-jump-hook show-fn-sym)
2147 (bookmark-default-handler bmk))) 2142 (bookmark-default-handler bmk)))
2148 2143
2144;; Obsolete.
2145
2146(defun doc-view-intersection (l1 l2)
2147 (declare (obsolete seq-intersection "28.1"))
2148 (nreverse (seq-intersection l1 l2 #'eq)))
2149
2149(provide 'doc-view) 2150(provide 'doc-view)
2150 2151
2151;; Local Variables: 2152;; Local Variables:
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 62851660c66..96b16f7ed45 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -160,9 +160,6 @@
160;; not specifically docstring related. Would this even be useful? 160;; not specifically docstring related. Would this even be useful?
161 161
162;;; Code: 162;;; Code:
163(defvar checkdoc-version "0.6.2"
164 "Release version of checkdoc you are currently running.")
165(make-obsolete-variable 'checkdoc-version nil "28.1")
166 163
167(require 'cl-lib) 164(require 'cl-lib)
168(require 'help-mode) ;; for help-xref-info-regexp 165(require 'help-mode) ;; for help-xref-info-regexp
@@ -2709,6 +2706,12 @@ function called to create the messages."
2709 2706
2710(custom-add-option 'emacs-lisp-mode-hook 'checkdoc-minor-mode) 2707(custom-add-option 'emacs-lisp-mode-hook 'checkdoc-minor-mode)
2711 2708
2709;; Obsolete
2710
2711(defvar checkdoc-version "0.6.2"
2712 "Release version of checkdoc you are currently running.")
2713(make-obsolete-variable 'checkdoc-version 'emacs-version "28.1")
2714
2712(provide 'checkdoc) 2715(provide 'checkdoc)
2713 2716
2714;;; checkdoc.el ends here 2717;;; checkdoc.el ends here
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 2b8807faad5..6c15463ad52 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -147,6 +147,7 @@ the sequence, and its index within the sequence."
147 "Return a shallow copy of SEQUENCE." 147 "Return a shallow copy of SEQUENCE."
148 (copy-sequence sequence)) 148 (copy-sequence sequence))
149 149
150;;;###autoload
150(cl-defgeneric seq-subseq (sequence start &optional end) 151(cl-defgeneric seq-subseq (sequence start &optional end)
151 "Return the sequence of elements of SEQUENCE from START to END. 152 "Return the sequence of elements of SEQUENCE from START to END.
152END is exclusive. 153END is exclusive.
@@ -430,6 +431,7 @@ Equality is defined by TESTFN if non-nil or by `equal' if nil."
430 (setq index (1+ index))) 431 (setq index (1+ index)))
431 nil))) 432 nil)))
432 433
434;;;###autoload
433(cl-defgeneric seq-uniq (sequence &optional testfn) 435(cl-defgeneric seq-uniq (sequence &optional testfn)
434 "Return a list of the elements of SEQUENCE with duplicates removed. 436 "Return a list of the elements of SEQUENCE with duplicates removed.
435TESTFN is used to compare elements, or `equal' if TESTFN is nil." 437TESTFN is used to compare elements, or `equal' if TESTFN is nil."
@@ -467,6 +469,7 @@ Equality is defined by TESTFN if non-nil or by `equal' if nil."
467 (seq-reverse sequence1) 469 (seq-reverse sequence1)
468 '())) 470 '()))
469 471
472;;;###autoload
470(cl-defgeneric seq-difference (sequence1 sequence2 &optional testfn) 473(cl-defgeneric seq-difference (sequence1 sequence2 &optional testfn)
471 "Return a list of the elements that appear in SEQUENCE1 but not in SEQUENCE2. 474 "Return a list of the elements that appear in SEQUENCE1 but not in SEQUENCE2.
472Equality is defined by TESTFN if non-nil or by `equal' if nil." 475Equality is defined by TESTFN if non-nil or by `equal' if nil."
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index 50979c4dbb3..f11afb1d02d 100644
--- a/lisp/emulation/edt.el
+++ b/lisp/emulation/edt.el
@@ -178,9 +178,6 @@
178(defvar edt-user-global-map) 178(defvar edt-user-global-map)
179(defvar rect-start-point) 179(defvar rect-start-point)
180 180
181(defconst edt-version "4.0" "EDT Emulation version number.")
182(make-obsolete-variable 'edt-version nil "28.1")
183
184;;; 181;;;
185;;; User Configurable Variables 182;;; User Configurable Variables
186;;; 183;;;
@@ -2533,6 +2530,9 @@ G-C-\\: Split Window | FNDNXT | Yank | CUT |
2533 (set-frame-width nil 132) 2530 (set-frame-width nil 132)
2534 (message "Terminal width 132")) 2531 (message "Terminal width 132"))
2535 2532
2533(defconst edt-version "4.0" "EDT Emulation version number.")
2534(make-obsolete-variable 'edt-version 'emacs-version "28.1")
2535
2536(provide 'edt) 2536(provide 'edt)
2537 2537
2538;;; edt.el ends here 2538;;; edt.el ends here
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index 59d097c91f0..d32c8c897c7 100644
--- a/lisp/epg-config.el
+++ b/lisp/epg-config.el
@@ -1,4 +1,4 @@
1;;; epg-config.el --- configuration of the EasyPG Library 1;;; epg-config.el --- configuration of the EasyPG Library -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2006-2021 Free Software Foundation, Inc. 3;; Copyright (C) 2006-2021 Free Software Foundation, Inc.
4 4
@@ -21,6 +21,8 @@
21;; You should have received a copy of the GNU General Public License 21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. 22;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
23 23
24;;; Commentary:
25
24;;; Code: 26;;; Code:
25;;; Prelude 27;;; Prelude
26 28
@@ -157,7 +159,7 @@ version requirement is met."
157 (setq program-alist epg-config--program-alist)) 159 (setq program-alist epg-config--program-alist))
158 (let ((entry (assq protocol program-alist))) 160 (let ((entry (assq protocol program-alist)))
159 (unless entry 161 (unless entry
160 (error "Unknown protocol %S" protocol)) 162 (error "Unknown protocol `%S'" protocol))
161 (cl-destructuring-bind (symbol . alist) 163 (cl-destructuring-bind (symbol . alist)
162 (cdr entry) 164 (cdr entry)
163 (let ((constructor 165 (let ((constructor
diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index c702ee192a6..c04a1a67d58 100644
--- a/lisp/eshell/em-dirs.el
+++ b/lisp/eshell/em-dirs.el
@@ -199,10 +199,10 @@ Thus, this does not include the current directory.")
199 199
200 (when eshell-cd-on-directory 200 (when eshell-cd-on-directory
201 (setq-local eshell-interpreter-alist 201 (setq-local eshell-interpreter-alist
202 (cons (cons #'(lambda (file _args) 202 (cons (cons (lambda (file _args)
203 (eshell-lone-directory-p file)) 203 (eshell-lone-directory-p file))
204 'eshell-dirs-substitute-cd) 204 'eshell-dirs-substitute-cd)
205 eshell-interpreter-alist))) 205 eshell-interpreter-alist)))
206 206
207 (add-hook 'eshell-parse-argument-hook 207 (add-hook 'eshell-parse-argument-hook
208 #'eshell-parse-user-reference nil t) 208 #'eshell-parse-user-reference nil t)
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index b7b1778ebb1..e559f5b39fe 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -758,7 +758,7 @@ matched."
758 (setq nth (eshell-hist-word-reference nth))) 758 (setq nth (eshell-hist-word-reference nth)))
759 (unless (numberp mth) 759 (unless (numberp mth)
760 (setq mth (eshell-hist-word-reference mth))) 760 (setq mth (eshell-hist-word-reference mth)))
761 (cons (mapconcat #'identity (eshell-sublist textargs nth mth) " ") 761 (cons (mapconcat #'identity (seq-subseq textargs nth (1+ mth)) " ")
762 end)))) 762 end))))
763 763
764(defun eshell-hist-parse-modifier (hist reference) 764(defun eshell-hist-parse-modifier (hist reference)
diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el
index aecc8bb4e0a..0780d6ee83a 100644
--- a/lisp/eshell/em-pred.el
+++ b/lisp/eshell/em-pred.el
@@ -85,18 +85,18 @@ ordinary strings."
85 (?s . (eshell-pred-file-mode #o4000)) ; setuid 85 (?s . (eshell-pred-file-mode #o4000)) ; setuid
86 (?S . (eshell-pred-file-mode #o2000)) ; setgid 86 (?S . (eshell-pred-file-mode #o2000)) ; setgid
87 (?t . (eshell-pred-file-mode #o1000)) ; sticky bit 87 (?t . (eshell-pred-file-mode #o1000)) ; sticky bit
88 (?U . #'(lambda (file) ; owned by effective uid 88 (?U . (lambda (file) ; owned by effective uid
89 (if (file-exists-p file) 89 (if (file-exists-p file)
90 (= (file-attribute-user-id (file-attributes file)) 90 (= (file-attribute-user-id (file-attributes file))
91 (user-uid))))) 91 (user-uid)))))
92 ;; (?G . #'(lambda (file) ; owned by effective gid 92 ;; (?G . (lambda (file) ; owned by effective gid
93 ;; (if (file-exists-p file) 93 ;; (if (file-exists-p file)
94 ;; (= (file-attribute-user-id (file-attributes file)) 94 ;; (= (file-attribute-user-id (file-attributes file))
95 ;; (user-uid))))) 95 ;; (user-uid)))))
96 (?* . #'(lambda (file) 96 (?* . (lambda (file)
97 (and (file-regular-p file) 97 (and (file-regular-p file)
98 (not (file-symlink-p file)) 98 (not (file-symlink-p file))
99 (file-executable-p file)))) 99 (file-executable-p file))))
100 (?l . (eshell-pred-file-links)) 100 (?l . (eshell-pred-file-links))
101 (?u . (eshell-pred-user-or-group ?u "user" 2 'eshell-user-id)) 101 (?u . (eshell-pred-user-or-group ?u "user" 2 'eshell-user-id))
102 (?g . (eshell-pred-user-or-group ?g "group" 3 'eshell-group-id)) 102 (?g . (eshell-pred-user-or-group ?g "group" 3 'eshell-group-id))
@@ -114,25 +114,25 @@ The format of each entry is
114(put 'eshell-predicate-alist 'risky-local-variable t) 114(put 'eshell-predicate-alist 'risky-local-variable t)
115 115
116(defcustom eshell-modifier-alist 116(defcustom eshell-modifier-alist
117 '((?E . #'(lambda (lst) 117 '((?E . (lambda (lst)
118 (mapcar 118 (mapcar
119 (lambda (str) 119 (lambda (str)
120 (eshell-stringify 120 (eshell-stringify
121 (car (eshell-parse-argument str)))) 121 (car (eshell-parse-argument str))))
122 lst))) 122 lst)))
123 (?L . #'(lambda (lst) (mapcar 'downcase lst))) 123 (?L . (lambda (lst) (mapcar #'downcase lst)))
124 (?U . #'(lambda (lst) (mapcar 'upcase lst))) 124 (?U . (lambda (lst) (mapcar #'upcase lst)))
125 (?C . #'(lambda (lst) (mapcar 'capitalize lst))) 125 (?C . (lambda (lst) (mapcar #'capitalize lst)))
126 (?h . #'(lambda (lst) (mapcar 'file-name-directory lst))) 126 (?h . (lambda (lst) (mapcar #'file-name-directory lst)))
127 (?i . (eshell-include-members)) 127 (?i . (eshell-include-members))
128 (?x . (eshell-include-members t)) 128 (?x . (eshell-include-members t))
129 (?r . #'(lambda (lst) (mapcar 'file-name-sans-extension lst))) 129 (?r . (lambda (lst) (mapcar #'file-name-sans-extension lst)))
130 (?e . #'(lambda (lst) (mapcar 'file-name-extension lst))) 130 (?e . (lambda (lst) (mapcar #'file-name-extension lst)))
131 (?t . #'(lambda (lst) (mapcar 'file-name-nondirectory lst))) 131 (?t . (lambda (lst) (mapcar #'file-name-nondirectory lst)))
132 (?q . #'(lambda (lst) (mapcar 'eshell-escape-arg lst))) 132 (?q . (lambda (lst) (mapcar #'eshell-escape-arg lst)))
133 (?u . #'(lambda (lst) (eshell-uniquify-list lst))) 133 (?u . (lambda (lst) (seq-uniq lst)))
134 (?o . #'(lambda (lst) (sort lst 'string-lessp))) 134 (?o . (lambda (lst) (sort lst #'string-lessp)))
135 (?O . #'(lambda (lst) (nreverse (sort lst 'string-lessp)))) 135 (?O . (lambda (lst) (nreverse (sort lst #'string-lessp))))
136 (?j . (eshell-join-members)) 136 (?j . (eshell-join-members))
137 (?S . (eshell-split-members)) 137 (?S . (eshell-split-members))
138 (?R . 'reverse) 138 (?R . 'reverse)
diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el
index aecc48610f7..1f08e891919 100644
--- a/lisp/eshell/em-script.el
+++ b/lisp/eshell/em-script.el
@@ -59,11 +59,12 @@ This includes when running `eshell-command'."
59(defun eshell-script-initialize () ;Called from `eshell-mode' via intern-soft! 59(defun eshell-script-initialize () ;Called from `eshell-mode' via intern-soft!
60 "Initialize the script parsing code." 60 "Initialize the script parsing code."
61 (setq-local eshell-interpreter-alist 61 (setq-local eshell-interpreter-alist
62 (cons (cons #'(lambda (file _args) 62 (cons (cons (lambda (file _args)
63 (string= (file-name-nondirectory file) 63 (and (file-regular-p file)
64 "eshell")) 64 (string= (file-name-nondirectory file)
65 'eshell/source) 65 "eshell")))
66 eshell-interpreter-alist)) 66 'eshell/source)
67 eshell-interpreter-alist))
67 (setq-local eshell-complex-commands 68 (setq-local eshell-complex-commands
68 (append '("source" ".") eshell-complex-commands)) 69 (append '("source" ".") eshell-complex-commands))
69 ;; these two variables are changed through usage, but we don't want 70 ;; these two variables are changed through usage, but we don't want
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 8ef1ac9c345..a48f62654d5 100644
--- a/lisp/eshell/esh-util.el
+++ b/lisp/eshell/esh-util.el
@@ -223,18 +223,6 @@ then quoting is done by a backslash, rather than a doubled delimiter."
223 (string-to-number string) 223 (string-to-number string)
224 string)))))) 224 string))))))
225 225
226(defun eshell-sublist (l &optional n m)
227 "Return from LIST the N to M elements.
228If N or M is nil, it means the end of the list."
229 (let ((a (copy-sequence l)))
230 (if (and m (consp (nthcdr m a)))
231 (setcdr (nthcdr m a) nil))
232 (if n
233 (setq a (nthcdr n a))
234 (setq n (1- (length a))
235 a (last a)))
236 a))
237
238(defvar-local eshell-path-env (getenv "PATH") 226(defvar-local eshell-path-env (getenv "PATH")
239 "Content of $PATH. 227 "Content of $PATH.
240It might be different from \(getenv \"PATH\"), when 228It might be different from \(getenv \"PATH\"), when
@@ -303,20 +291,6 @@ Prepend remote identification of `default-directory', if any."
303 291
304(define-obsolete-function-alias 'eshell-flatten-list #'flatten-tree "27.1") 292(define-obsolete-function-alias 'eshell-flatten-list #'flatten-tree "27.1")
305 293
306(defun eshell-uniquify-list (l)
307 "Remove occurring multiples in L. You probably want to sort first."
308 (let ((m l))
309 (while m
310 (while (and (cdr m)
311 (string= (car m)
312 (cadr m)))
313 (setcdr m (cddr m)))
314 (setq m (cdr m))))
315 l)
316(define-obsolete-function-alias
317 'eshell-uniqify-list
318 'eshell-uniquify-list "27.1")
319
320(defun eshell-stringify (object) 294(defun eshell-stringify (object)
321 "Convert OBJECT into a string value." 295 "Convert OBJECT into a string value."
322 (cond 296 (cond
@@ -710,9 +684,19 @@ gid format. Valid values are `string' and `integer', defaulting to
710; (or result 684; (or result
711; (file-attributes filename)))) 685; (file-attributes filename))))
712 686
687;; Obsolete.
688
689(define-obsolete-function-alias 'eshell-uniquify-list #'seq-uniq "28.1")
690(define-obsolete-function-alias 'eshell-uniqify-list #'seq-uniq "28.1")
713(define-obsolete-function-alias 'eshell-copy-tree #'copy-tree "28.1") 691(define-obsolete-function-alias 'eshell-copy-tree #'copy-tree "28.1")
714(define-obsolete-function-alias 'eshell-user-name #'user-login-name "28.1") 692(define-obsolete-function-alias 'eshell-user-name #'user-login-name "28.1")
715 693
694(defun eshell-sublist (l &optional n m)
695 "Return from LIST the N to M elements.
696If N or M is nil, it means the end of the list."
697 (declare (obsolete seq-subseq "28.1"))
698 (seq-subseq l n (1+ m)))
699
716(provide 'esh-util) 700(provide 'esh-util)
717 701
718;;; esh-util.el ends here 702;;; esh-util.el ends here
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index 3aaf2fb78aa..101ac860346 100644
--- a/lisp/eshell/eshell.el
+++ b/lisp/eshell/eshell.el
@@ -294,9 +294,9 @@ With prefix ARG, insert output into the current buffer at point."
294 (setq arg current-prefix-arg)) 294 (setq arg current-prefix-arg))
295 (let ((eshell-non-interactive-p t)) 295 (let ((eshell-non-interactive-p t))
296 ;; Enable `eshell-mode' only in this minibuffer. 296 ;; Enable `eshell-mode' only in this minibuffer.
297 (minibuffer-with-setup-hook #'(lambda () 297 (minibuffer-with-setup-hook (lambda ()
298 (eshell-mode) 298 (eshell-mode)
299 (eshell-command-mode +1)) 299 (eshell-command-mode +1))
300 (unless command 300 (unless command
301 (setq command (read-from-minibuffer "Emacs shell command: ")) 301 (setq command (read-from-minibuffer "Emacs shell command: "))
302 (if (eshell-using-module 'eshell-hist) 302 (if (eshell-using-module 'eshell-hist)
diff --git a/lisp/forms.el b/lisp/forms.el
index 62c4288869a..8696aea98ee 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -1,7 +1,6 @@
1;;; forms.el --- Forms mode: edit a file as a form to fill in 1;;; forms.el --- Forms mode: edit a file as a form to fill in -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1991, 1994-1997, 2001-2021 Free Software Foundation, 3;; Copyright (C) 1991-2021 Free Software Foundation, Inc.
4;; Inc.
5 4
6;; Author: Johan Vromans <jvromans@squirrel.nl> 5;; Author: Johan Vromans <jvromans@squirrel.nl>
7 6
@@ -298,7 +297,6 @@
298 297
299(defcustom forms-mode-hook nil 298(defcustom forms-mode-hook nil
300 "Hook run upon entering Forms mode." 299 "Hook run upon entering Forms mode."
301 :group 'forms
302 :type 'hook) 300 :type 'hook)
303 301
304;;; Mandatory variables - must be set by evaluating the control file. 302;;; Mandatory variables - must be set by evaluating the control file.
@@ -316,7 +314,6 @@
316 314
317(defcustom forms-check-number-of-fields t 315(defcustom forms-check-number-of-fields t
318 "If non-nil, warn about records with wrong number of fields." 316 "If non-nil, warn about records with wrong number of fields."
319 :group 'forms
320 :type 'boolean) 317 :type 'boolean)
321 318
322(defvar forms-field-sep "\t" 319(defvar forms-field-sep "\t"
@@ -332,13 +329,11 @@ If not nil: use this character to separate multi-line fields (default C-k).")
332(defcustom forms-forms-scroll nil 329(defcustom forms-forms-scroll nil
333 "Non-nil means replace scroll-up/down commands in Forms mode. 330 "Non-nil means replace scroll-up/down commands in Forms mode.
334The replacement commands performs forms-next/prev-record." 331The replacement commands performs forms-next/prev-record."
335 :group 'forms
336 :type 'boolean) 332 :type 'boolean)
337 333
338(defcustom forms-forms-jump nil 334(defcustom forms-forms-jump nil
339 "Non-nil means redefine beginning/end-of-buffer in Forms mode. 335 "Non-nil means redefine beginning/end-of-buffer in Forms mode.
340The replacement commands performs forms-first/last-record." 336The replacement commands performs forms-first/last-record."
341 :group 'forms
342 :type 'boolean) 337 :type 'boolean)
343 338
344(defvar forms-read-file-filter nil 339(defvar forms-read-file-filter nil
@@ -363,23 +358,19 @@ The contents may NOT be modified.")
363 358
364(defcustom forms-use-text-properties t 359(defcustom forms-use-text-properties t
365 "Non-nil means to use text properties. " 360 "Non-nil means to use text properties. "
366 :group 'forms
367 :type 'boolean) 361 :type 'boolean)
368 362
369(defcustom forms-insert-after nil 363(defcustom forms-insert-after nil
370 "Non-nil means: inserts of new records go after current record. 364 "Non-nil means: inserts of new records go after current record.
371Also, initial position is at last record." 365Also, initial position is at last record."
372 :group 'forms
373 :type 'boolean) 366 :type 'boolean)
374 367
375(defcustom forms-ro-face 'default 368(defcustom forms-ro-face 'default
376 "The face (a symbol) that is used to display read-only text on the screen." 369 "The face (a symbol) that is used to display read-only text on the screen."
377 :group 'forms
378 :type 'face) 370 :type 'face)
379 371
380(defcustom forms-rw-face 'region 372(defcustom forms-rw-face 'region
381 "The face (a symbol) that is used to display read-write text on the screen." 373 "The face (a symbol) that is used to display read-write text on the screen."
382 :group 'forms
383 :type 'face) 374 :type 'face)
384 375
385;;; Internal variables. 376;;; Internal variables.
@@ -767,7 +758,7 @@ Commands: Equivalent keys in read-only mode:
767 ;; If it is a symbol, eval it first. 758 ;; If it is a symbol, eval it first.
768 (if (and (symbolp el) 759 (if (and (symbolp el)
769 (boundp el)) 760 (boundp el))
770 (setq el (eval el))) 761 (setq el (symbol-value el)))
771 762
772 (cond 763 (cond
773 764
@@ -1261,35 +1252,35 @@ Commands: Equivalent keys in read-only mode:
1261 1252
1262 ;; `forms-mode-map' is always accessible via \C-c prefix. 1253 ;; `forms-mode-map' is always accessible via \C-c prefix.
1263 (setq forms-mode-map (make-keymap)) 1254 (setq forms-mode-map (make-keymap))
1264 (define-key forms-mode-map "\t" 'forms-next-field) 1255 (define-key forms-mode-map "\t" #'forms-next-field)
1265 (define-key forms-mode-map "\C-k" 'forms-delete-record) 1256 (define-key forms-mode-map "\C-k" #'forms-delete-record)
1266 (define-key forms-mode-map "\C-q" 'forms-toggle-read-only) 1257 (define-key forms-mode-map "\C-q" #'forms-toggle-read-only)
1267 (define-key forms-mode-map "\C-o" 'forms-insert-record) 1258 (define-key forms-mode-map "\C-o" #'forms-insert-record)
1268 (define-key forms-mode-map "\C-l" 'forms-jump-record) 1259 (define-key forms-mode-map "\C-l" #'forms-jump-record)
1269 (define-key forms-mode-map "\C-n" 'forms-next-record) 1260 (define-key forms-mode-map "\C-n" #'forms-next-record)
1270 (define-key forms-mode-map "\C-p" 'forms-prev-record) 1261 (define-key forms-mode-map "\C-p" #'forms-prev-record)
1271 (define-key forms-mode-map "\C-r" 'forms-search-backward) 1262 (define-key forms-mode-map "\C-r" #'forms-search-backward)
1272 (define-key forms-mode-map "\C-s" 'forms-search-forward) 1263 (define-key forms-mode-map "\C-s" #'forms-search-forward)
1273 (define-key forms-mode-map "\C-x" 'forms-exit) 1264 (define-key forms-mode-map "\C-x" #'forms-exit)
1274 (define-key forms-mode-map "<" 'forms-first-record) 1265 (define-key forms-mode-map "<" #'forms-first-record)
1275 (define-key forms-mode-map ">" 'forms-last-record) 1266 (define-key forms-mode-map ">" #'forms-last-record)
1276 (define-key forms-mode-map "\C-?" 'forms-prev-record) 1267 (define-key forms-mode-map "\C-?" #'forms-prev-record)
1277 1268
1278 ;; `forms-mode-ro-map' replaces the local map when in read-only mode. 1269 ;; `forms-mode-ro-map' replaces the local map when in read-only mode.
1279 (setq forms-mode-ro-map (make-keymap)) 1270 (setq forms-mode-ro-map (make-keymap))
1280 (suppress-keymap forms-mode-ro-map) 1271 (suppress-keymap forms-mode-ro-map)
1281 (define-key forms-mode-ro-map "\C-c" forms-mode-map) 1272 (define-key forms-mode-ro-map "\C-c" forms-mode-map)
1282 (define-key forms-mode-ro-map "q" 'forms-toggle-read-only) 1273 (define-key forms-mode-ro-map "q" #'forms-toggle-read-only)
1283 (define-key forms-mode-ro-map "l" 'forms-jump-record) 1274 (define-key forms-mode-ro-map "l" #'forms-jump-record)
1284 (define-key forms-mode-ro-map "n" 'forms-next-record) 1275 (define-key forms-mode-ro-map "n" #'forms-next-record)
1285 (define-key forms-mode-ro-map "p" 'forms-prev-record) 1276 (define-key forms-mode-ro-map "p" #'forms-prev-record)
1286 (define-key forms-mode-ro-map "r" 'forms-search-backward) 1277 (define-key forms-mode-ro-map "r" #'forms-search-backward)
1287 (define-key forms-mode-ro-map "s" 'forms-search-forward) 1278 (define-key forms-mode-ro-map "s" #'forms-search-forward)
1288 (define-key forms-mode-ro-map "x" 'forms-exit) 1279 (define-key forms-mode-ro-map "x" #'forms-exit)
1289 (define-key forms-mode-ro-map "<" 'forms-first-record) 1280 (define-key forms-mode-ro-map "<" #'forms-first-record)
1290 (define-key forms-mode-ro-map ">" 'forms-last-record) 1281 (define-key forms-mode-ro-map ">" #'forms-last-record)
1291 (define-key forms-mode-ro-map "?" 'describe-mode) 1282 (define-key forms-mode-ro-map "?" #'describe-mode)
1292 (define-key forms-mode-ro-map " " 'forms-next-record) 1283 (define-key forms-mode-ro-map " " #'forms-next-record)
1293 (forms--mode-commands1 forms-mode-ro-map) 1284 (forms--mode-commands1 forms-mode-ro-map)
1294 (forms--mode-menu-ro forms-mode-ro-map) 1285 (forms--mode-menu-ro forms-mode-ro-map)
1295 1286
@@ -1395,13 +1386,13 @@ Commands: Equivalent keys in read-only mode:
1395 1386
1396(defun forms--mode-commands1 (map) 1387(defun forms--mode-commands1 (map)
1397 "Helper routine to define keys." 1388 "Helper routine to define keys."
1398 (define-key map "\t" 'forms-next-field) 1389 (define-key map "\t" #'forms-next-field)
1399 (define-key map [S-tab] 'forms-prev-field) 1390 (define-key map [S-tab] #'forms-prev-field)
1400 (define-key map [next] 'forms-next-record) 1391 (define-key map [next] #'forms-next-record)
1401 (define-key map [prior] 'forms-prev-record) 1392 (define-key map [prior] #'forms-prev-record)
1402 (define-key map [begin] 'forms-first-record) 1393 (define-key map [begin] #'forms-first-record)
1403 (define-key map [last] 'forms-last-record) 1394 (define-key map [last] #'forms-last-record)
1404 (define-key map [backtab] 'forms-prev-field) 1395 (define-key map [backtab] #'forms-prev-field)
1405 ) 1396 )
1406 1397
1407;;; Changed functions 1398;;; Changed functions
@@ -2034,8 +2025,7 @@ Usage: (setq forms-number-of-fields
2034 2025
2035(defcustom forms--debug nil 2026(defcustom forms--debug nil
2036 "If non-nil, enable Forms mode debugging." 2027 "If non-nil, enable Forms mode debugging."
2037 :type 'boolean 2028 :type 'boolean)
2038 :group 'forms)
2039 2029
2040(defun forms--debug (&rest args) 2030(defun forms--debug (&rest args)
2041 "Internal debugging routine." 2031 "Internal debugging routine."
@@ -2046,7 +2036,7 @@ Usage: (setq forms-number-of-fields
2046 (if (stringp el) el 2036 (if (stringp el) el
2047 (concat (prin1-to-string el) " = " 2037 (concat (prin1-to-string el) " = "
2048 (if (boundp el) 2038 (if (boundp el)
2049 (prin1-to-string (eval el)) 2039 (prin1-to-string (symbol-value el))
2050 "<unbound>") 2040 "<unbound>")
2051 "\n" 2041 "\n"
2052 (if (fboundp el) 2042 (if (fboundp el)
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index c1071c1c68c..d989a4d5bb5 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -6648,9 +6648,10 @@ not have a face in `gnus-article-boring-faces'."
6648 (catch 'only-boring 6648 (catch 'only-boring
6649 (while (re-search-forward "\\b\\w\\w" nil t) 6649 (while (re-search-forward "\\b\\w\\w" nil t)
6650 (forward-char -1) 6650 (forward-char -1)
6651 (when (not (gnus-intersection 6651 (when (not (seq-intersection
6652 (gnus-faces-at (point)) 6652 (gnus-faces-at (point))
6653 (symbol-value 'gnus-article-boring-faces))) 6653 (symbol-value 'gnus-article-boring-faces)
6654 #'eq))
6654 (throw 'only-boring nil))) 6655 (throw 'only-boring nil)))
6655 (throw 'only-boring t)))))) 6656 (throw 'only-boring t))))))
6656 6657
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index 1f564f192b0..4249b50b9ff 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -839,7 +839,7 @@ See also the documentation for `gnus-article-highlight-citation'."
839 (setq current (car loop) 839 (setq current (car loop)
840 loop (cdr loop)) 840 loop (cdr loop))
841 (setcdr current 841 (setcdr current
842 (gnus-set-difference (cdr current) numbers))))))))) 842 (seq-difference (cdr current) numbers #'eq)))))))))
843 843
844(defun gnus-cite-parse-attributions () 844(defun gnus-cite-parse-attributions ()
845 (let (al-alist) 845 (let (al-alist)
@@ -999,7 +999,7 @@ See also the documentation for `gnus-article-highlight-citation'."
999 loop (cdr loop)) 999 loop (cdr loop))
1000 (if (eq current best) 1000 (if (eq current best)
1001 () 1001 ()
1002 (setcdr current (gnus-set-difference (cdr current) numbers)) 1002 (setcdr current (seq-difference (cdr current) numbers #'eq))
1003 (when (null (cdr current)) 1003 (when (null (cdr current))
1004 (setq gnus-cite-loose-prefix-alist 1004 (setq gnus-cite-loose-prefix-alist
1005 (delq current gnus-cite-loose-prefix-alist) 1005 (delq current gnus-cite-loose-prefix-alist)
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 909391b6b0c..423b180408a 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -4697,20 +4697,20 @@ This command may read the active file."
4697 (gnus-cache-open)) 4697 (gnus-cache-open))
4698 (funcall gnus-group-prepare-function 4698 (funcall gnus-group-prepare-function
4699 (or level gnus-level-subscribed) 4699 (or level gnus-level-subscribed)
4700 #'(lambda (info) 4700 (lambda (info)
4701 (let ((marks (gnus-info-marks info))) 4701 (let ((marks (gnus-info-marks info)))
4702 (assq 'cache marks))) 4702 (assq 'cache marks)))
4703 lowest 4703 lowest
4704 #'(lambda (group) 4704 (lambda (group)
4705 (or (gethash group 4705 (or (gethash group
4706 gnus-cache-active-hashtb) 4706 gnus-cache-active-hashtb)
4707 ;; Cache active file might use "." 4707 ;; Cache active file might use "."
4708 ;; instead of ":". 4708 ;; instead of ":".
4709 (gethash 4709 (gethash
4710 (mapconcat #'identity 4710 (mapconcat #'identity
4711 (split-string group ":") 4711 (split-string group ":")
4712 ".") 4712 ".")
4713 gnus-cache-active-hashtb)))) 4713 gnus-cache-active-hashtb))))
4714 (goto-char (point-min)) 4714 (goto-char (point-min))
4715 (gnus-group-position-point)) 4715 (gnus-group-position-point))
4716 4716
@@ -4728,9 +4728,9 @@ This command may read the active file."
4728 (gnus-cache-open)) 4728 (gnus-cache-open))
4729 (funcall gnus-group-prepare-function 4729 (funcall gnus-group-prepare-function
4730 (or level gnus-level-subscribed) 4730 (or level gnus-level-subscribed)
4731 #'(lambda (info) 4731 (lambda (info)
4732 (let ((marks (gnus-info-marks info))) 4732 (let ((marks (gnus-info-marks info)))
4733 (assq 'dormant marks))) 4733 (assq 'dormant marks)))
4734 lowest 4734 lowest
4735 'ignore) 4735 'ignore)
4736 (goto-char (point-min)) 4736 (goto-char (point-min))
@@ -4750,9 +4750,9 @@ This command may read the active file."
4750 (gnus-cache-open)) 4750 (gnus-cache-open))
4751 (funcall gnus-group-prepare-function 4751 (funcall gnus-group-prepare-function
4752 (or level gnus-level-subscribed) 4752 (or level gnus-level-subscribed)
4753 #'(lambda (info) 4753 (lambda (info)
4754 (let ((marks (gnus-info-marks info))) 4754 (let ((marks (gnus-info-marks info)))
4755 (assq 'tick marks))) 4755 (assq 'tick marks)))
4756 lowest 4756 lowest
4757 'ignore) 4757 'ignore)
4758 (goto-char (point-min)) 4758 (goto-char (point-min))
diff --git a/lisp/gnus/gnus-range.el b/lisp/gnus/gnus-range.el
index 6cc60cb49b3..7d12ae9fdcc 100644
--- a/lisp/gnus/gnus-range.el
+++ b/lisp/gnus/gnus-range.el
@@ -42,13 +42,8 @@ If RANGE is a single range, return (RANGE). Otherwise, return RANGE."
42 42
43(defun gnus-set-difference (list1 list2) 43(defun gnus-set-difference (list1 list2)
44 "Return a list of elements of LIST1 that do not appear in LIST2." 44 "Return a list of elements of LIST1 that do not appear in LIST2."
45 (let ((hash2 (make-hash-table :test 'eq)) 45 (declare (obsolete seq-difference "28.1"))
46 (result nil)) 46 (seq-difference list1 list2 #'eq))
47 (dolist (elt list2) (puthash elt t hash2))
48 (dolist (elt list1)
49 (unless (gethash elt hash2)
50 (setq result (cons elt result))))
51 (nreverse result)))
52 47
53(defun gnus-range-nconcat (&rest ranges) 48(defun gnus-range-nconcat (&rest ranges)
54 "Return a range comprising all the RANGES, which are pre-sorted. 49 "Return a range comprising all the RANGES, which are pre-sorted.
@@ -179,12 +174,8 @@ Both lists have to be sorted over <."
179 174
180;;;###autoload 175;;;###autoload
181(defun gnus-intersection (list1 list2) 176(defun gnus-intersection (list1 list2)
182 (let ((result nil)) 177 (declare (obsolete seq-intersection "28.1"))
183 (while list2 178 (nreverse (seq-intersection list1 list2 #'eq)))
184 (when (memq (car list2) list1)
185 (setq result (cons (car list2) result)))
186 (setq list2 (cdr list2)))
187 result))
188 179
189;;;###autoload 180;;;###autoload
190(defun gnus-sorted-intersection (list1 list2) 181(defun gnus-sorted-intersection (list1 list2)
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index e3b9c196186..6ac646fbeac 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -1290,9 +1290,9 @@ from your existing entries."
1290 (registry-reindex db) 1290 (registry-reindex db)
1291 (cl-loop for k being the hash-keys of (oref db data) 1291 (cl-loop for k being the hash-keys of (oref db data)
1292 using (hash-value v) 1292 using (hash-value v)
1293 do (let ((newv (delq nil (mapcar #'(lambda (entry) 1293 do (let ((newv (delq nil (mapcar (lambda (entry)
1294 (unless (member (car entry) extra) 1294 (unless (member (car entry) extra)
1295 entry)) 1295 entry))
1296 v)))) 1296 v))))
1297 (registry-delete db (list k) nil) 1297 (registry-delete db (list k) nil)
1298 (gnus-registry-insert db k newv))) 1298 (gnus-registry-insert db k newv)))
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index ce64dcef041..f40da9e9c4c 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -1182,8 +1182,8 @@ If FORMAT, also format the current score file."
1182 (when (consp rule) ;; the rule exists 1182 (when (consp rule) ;; the rule exists
1183 (setq rule (if (symbolp (car rule)) 1183 (setq rule (if (symbolp (car rule))
1184 (format "(%S)" (car rule)) 1184 (format "(%S)" (car rule))
1185 (mapconcat #'(lambda (obj) 1185 (mapconcat (lambda (obj)
1186 (regexp-quote (format "%S" obj))) 1186 (regexp-quote (format "%S" obj)))
1187 rule 1187 rule
1188 sep))) 1188 sep)))
1189 (goto-char (point-min)) 1189 (goto-char (point-min))
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index c30f9a5f350..eeb5ac851ae 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -5676,9 +5676,9 @@ or a straight list of headers."
5676 (or dependencies 5676 (or dependencies
5677 (with-current-buffer gnus-summary-buffer 5677 (with-current-buffer gnus-summary-buffer
5678 gnus-newsgroup-dependencies)))) 5678 gnus-newsgroup-dependencies))))
5679 (delq nil (mapcar #'(lambda (header) 5679 (delq nil (mapcar (lambda (header)
5680 (gnus-dependencies-add-header 5680 (gnus-dependencies-add-header
5681 header dependencies force-new)) 5681 header dependencies force-new))
5682 gnus-headers-retrieved-by))))) 5682 gnus-headers-retrieved-by)))))
5683 (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name))) 5683 (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name)))
5684 5684
@@ -8569,8 +8569,9 @@ If UNREPLIED (the prefix), limit to unreplied articles."
8569 (interactive "P" gnus-summary-mode) 8569 (interactive "P" gnus-summary-mode)
8570 (if unreplied 8570 (if unreplied
8571 (gnus-summary-limit 8571 (gnus-summary-limit
8572 (gnus-set-difference gnus-newsgroup-articles 8572 (seq-difference gnus-newsgroup-articles
8573 gnus-newsgroup-replied)) 8573 gnus-newsgroup-replied
8574 #'eq))
8574 (gnus-summary-limit gnus-newsgroup-replied)) 8575 (gnus-summary-limit gnus-newsgroup-replied))
8575 (gnus-summary-position-point)) 8576 (gnus-summary-position-point))
8576 8577
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index bd9a1a33ec3..ceb2ebcdcb1 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -578,8 +578,8 @@ didn't work, and overwrite existing files. Otherwise, ask each time."
578 578
579(defun gnus-new-processable (unmarkp articles) 579(defun gnus-new-processable (unmarkp articles)
580 (if unmarkp 580 (if unmarkp
581 (gnus-intersection gnus-newsgroup-processable articles) 581 (nreverse (seq-intersection gnus-newsgroup-processable articles #'eq))
582 (gnus-set-difference articles gnus-newsgroup-processable))) 582 (seq-difference articles gnus-newsgroup-processable #'eq)))
583 583
584(defun gnus-uu-mark-by-regexp (regexp &optional unmark) 584(defun gnus-uu-mark-by-regexp (regexp &optional unmark)
585 "Set the process mark on articles whose subjects match REGEXP. 585 "Set the process mark on articles whose subjects match REGEXP.
diff --git a/lisp/gnus/mm-partial.el b/lisp/gnus/mm-partial.el
index 0c25c8f8bcd..0c628055acb 100644
--- a/lisp/gnus/mm-partial.el
+++ b/lisp/gnus/mm-partial.el
@@ -72,14 +72,14 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
72 id 72 id
73 (with-current-buffer gnus-summary-buffer 73 (with-current-buffer gnus-summary-buffer
74 (gnus-summary-article-number)))) 74 (gnus-summary-article-number))))
75 #'(lambda (a b) 75 (lambda (a b)
76 (let ((anumber (string-to-number 76 (let ((anumber (string-to-number
77 (cdr (assq 'number 77 (cdr (assq 'number
78 (cdr (mm-handle-type a)))))) 78 (cdr (mm-handle-type a))))))
79 (bnumber (string-to-number 79 (bnumber (string-to-number
80 (cdr (assq 'number 80 (cdr (assq 'number
81 (cdr (mm-handle-type b))))))) 81 (cdr (mm-handle-type b)))))))
82 (< anumber bnumber))))) 82 (< anumber bnumber)))))
83 (setq gnus-article-mime-handles 83 (setq gnus-article-mime-handles
84 (mm-merge-handles gnus-article-mime-handles phandles)) 84 (mm-merge-handles gnus-article-mime-handles phandles))
85 (with-current-buffer (generate-new-buffer " *mm*") 85 (with-current-buffer (generate-new-buffer " *mm*")
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 15003fabcd2..adf4427523f 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -558,7 +558,7 @@ all. This may very well take some time.")
558 (nnmail-activate 'nndiary) 558 (nnmail-activate 'nndiary)
559 ;; Articles not listed in active-articles are already gone, 559 ;; Articles not listed in active-articles are already gone,
560 ;; so don't try to expire them. 560 ;; so don't try to expire them.
561 (setq articles (gnus-intersection articles active-articles)) 561 (setq articles (nreverse (seq-intersection articles active-articles #'eq)))
562 (while articles 562 (while articles
563 (setq article (nndiary-article-to-file (setq number (pop articles)))) 563 (setq article (nndiary-article-to-file (setq number (pop articles))))
564 (if (and (nndiary-deletable-article-p group number) 564 (if (and (nndiary-deletable-article-p group number)
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index f06959f65d9..8990b2bebeb 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1614,13 +1614,15 @@ If LIMIT, first try to limit the search to the N last articles."
1614 (setq start-article 1)) 1614 (setq start-article 1))
1615 (let* ((unread 1615 (let* ((unread
1616 (gnus-compress-sequence 1616 (gnus-compress-sequence
1617 (gnus-set-difference 1617 (seq-difference
1618 (gnus-set-difference 1618 (seq-difference
1619 existing 1619 existing
1620 (gnus-sorted-union 1620 (gnus-sorted-union
1621 (cdr (assoc '%Seen flags)) 1621 (cdr (assoc '%Seen flags))
1622 (cdr (assoc '%Deleted flags)))) 1622 (cdr (assoc '%Deleted flags)))
1623 (cdr (assoc '%Flagged flags))))) 1623 #'eq)
1624 (cdr (assoc '%Flagged flags))
1625 #'eq)))
1624 (read (gnus-range-difference 1626 (read (gnus-range-difference
1625 (cons start-article high) unread))) 1627 (cons start-article high) unread)))
1626 (when (> start-article 1) 1628 (when (> start-article 1)
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
index 1daa8aa673b..e314e1d8d10 100644
--- a/lisp/gnus/nnselect.el
+++ b/lisp/gnus/nnselect.el
@@ -100,8 +100,8 @@
100 (setq selection 100 (setq selection
101 (vconcat 101 (vconcat
102 (cl-map 'vector 102 (cl-map 'vector
103 #'(lambda (art) 103 (lambda (art)
104 (vector artgroup art artrsv)) 104 (vector artgroup art artrsv))
105 (gnus-uncompress-sequence artseq)) selection))) 105 (gnus-uncompress-sequence artseq)) selection)))
106 selection))) 106 selection)))
107 107
@@ -211,12 +211,12 @@ as `(keyfunc member)' and the corresponding element is just
211 #'nnselect-article-group #'nnselect-article-number)) 211 #'nnselect-article-group #'nnselect-article-number))
212 ((eq ,type 'tuple) 212 ((eq ,type 'tuple)
213 (nnselect-categorize ,articles 213 (nnselect-categorize ,articles
214 #'(lambda (elem) 214 (lambda (elem)
215 (nnselect-article-group (car elem))) 215 (nnselect-article-group (car elem)))
216 #'(lambda (elem) 216 (lambda (elem)
217 (cons (nnselect-article-number 217 (cons (nnselect-article-number
218 (car elem)) 218 (car elem))
219 (cdr elem))))) 219 (cdr elem)))))
220 (t 220 (t
221 (nnselect-categorize ,articles 221 (nnselect-categorize ,articles
222 #'nnselect-article-group 222 #'nnselect-article-group
@@ -464,8 +464,8 @@ If this variable is nil, or if the provided function returns nil,
464 (error "Group %s does not support article expiration" artgroup)) 464 (error "Group %s does not support article expiration" artgroup))
465 (unless (gnus-check-server (gnus-find-method-for-group artgroup)) 465 (unless (gnus-check-server (gnus-find-method-for-group artgroup))
466 (error "Couldn't open server for group %s" artgroup)) 466 (error "Couldn't open server for group %s" artgroup))
467 (push (mapcar #'(lambda (art) 467 (push (mapcar (lambda (art)
468 (car (rassq art artids))) 468 (car (rassq art artids)))
469 (let ((nnimap-expunge 'immediately)) 469 (let ((nnimap-expunge 'immediately))
470 (gnus-request-expire-articles 470 (gnus-request-expire-articles
471 artlist artgroup force))) 471 artlist artgroup force)))
@@ -549,8 +549,8 @@ If this variable is nil, or if the provided function returns nil,
549 (gnus-add-to-range 549 (gnus-add-to-range
550 (gnus-info-read info) 550 (gnus-info-read info)
551 (delq nil (mapcar 551 (delq nil (mapcar
552 #'(lambda (art) 552 (lambda (art)
553 (unless (memq (cdr art) unread) (car art))) 553 (unless (memq (cdr art) unread) (car art)))
554 artids)))) 554 artids))))
555 (pcase-dolist (`(,type . ,mark-list) marks) 555 (pcase-dolist (`(,type . ,mark-list) marks)
556 (let ((mark-type (gnus-article-mark-to-type type)) new) 556 (let ((mark-type (gnus-article-mark-to-type type)) new)
@@ -560,19 +560,19 @@ If this variable is nil, or if the provided function returns nil,
560 (cond 560 (cond
561 ((eq mark-type 'tuple) 561 ((eq mark-type 'tuple)
562 (mapcar 562 (mapcar
563 #'(lambda (id) 563 (lambda (id)
564 (let (mark) 564 (let (mark)
565 (when 565 (when
566 (setq mark (assq (cdr id) mark-list)) 566 (setq mark (assq (cdr id) mark-list))
567 (cons (car id) (cdr mark))))) 567 (cons (car id) (cdr mark)))))
568 artids)) 568 artids))
569 (t 569 (t
570 (setq mark-list 570 (setq mark-list
571 (gnus-uncompress-range mark-list)) 571 (gnus-uncompress-range mark-list))
572 (mapcar 572 (mapcar
573 #'(lambda (id) 573 (lambda (id)
574 (when (memq (cdr id) mark-list) 574 (when (memq (cdr id) mark-list)
575 (car id))) artids))))) 575 (car id))) artids)))))
576 (let ((previous (alist-get type newmarks))) 576 (let ((previous (alist-get type newmarks)))
577 (if previous 577 (if previous
578 (nconc previous new) 578 (nconc previous new)
@@ -607,8 +607,8 @@ If this variable is nil, or if the provided function returns nil,
607 (let ((thread 607 (let ((thread
608 (gnus-id-to-thread (mail-header-id header)))) 608 (gnus-id-to-thread (mail-header-id header))))
609 (when thread 609 (when thread
610 (cl-some #'(lambda (x) 610 (cl-some (lambda (x)
611 (when (and x (> x 0)) x)) 611 (when (and x (> x 0)) x))
612 (gnus-articles-in-thread thread))))))))) 612 (gnus-articles-in-thread thread)))))))))
613 ;; Check if search-based thread referral is permitted, and 613 ;; Check if search-based thread referral is permitted, and
614 ;; available. 614 ;; available.
@@ -642,15 +642,15 @@ If this variable is nil, or if the provided function returns nil,
642 old-arts seq 642 old-arts seq
643 headers) 643 headers)
644 (mapc 644 (mapc
645 #'(lambda (article) 645 (lambda (article)
646 (if 646 (if
647 (setq seq 647 (setq seq
648 (cl-position article 648 (cl-position article
649 gnus-newsgroup-selection :test 'equal)) 649 gnus-newsgroup-selection :test 'equal))
650 (push (1+ seq) old-arts) 650 (push (1+ seq) old-arts)
651 (setq gnus-newsgroup-selection 651 (setq gnus-newsgroup-selection
652 (vconcat gnus-newsgroup-selection (vector article))) 652 (vconcat gnus-newsgroup-selection (vector article)))
653 (cl-incf last))) 653 (cl-incf last)))
654 new-nnselect-artlist) 654 new-nnselect-artlist)
655 (setq headers 655 (setq headers
656 (gnus-fetch-headers 656 (gnus-fetch-headers
@@ -671,9 +671,9 @@ If this variable is nil, or if the provided function returns nil,
671 (when (setq new-marks 671 (when (setq new-marks
672 (delq nil 672 (delq nil
673 (mapcar 673 (mapcar
674 #'(lambda (art) 674 (lambda (art)
675 (when (memq (cdr art) marked) 675 (when (memq (cdr art) marked)
676 (car art))) 676 (car art)))
677 artids))) 677 artids)))
678 (nconc 678 (nconc
679 (symbol-value 679 (symbol-value
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index b3b701e4126..03a0ff296f2 100644
--- a/lisp/gnus/nnvirtual.el
+++ b/lisp/gnus/nnvirtual.el
@@ -362,9 +362,9 @@ It is computed from the marks of individual component groups.")
362 (dolist (group nnvirtual-component-groups) 362 (dolist (group nnvirtual-component-groups)
363 (setq unexpired (nconc unexpired 363 (setq unexpired (nconc unexpired
364 (mapcar 364 (mapcar
365 #'(lambda (article) 365 (lambda (article)
366 (nnvirtual-reverse-map-article 366 (nnvirtual-reverse-map-article
367 group article)) 367 group article))
368 (gnus-uncompress-range 368 (gnus-uncompress-range
369 (gnus-group-expire-articles-1 group)))))) 369 (gnus-group-expire-articles-1 group))))))
370 (sort (delq nil unexpired) #'<))) 370 (sort (delq nil unexpired) #'<)))
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 3e804ecb4bb..ab9be0da890 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -492,7 +492,7 @@ Add user supplied modifications if supplied."
492 (let* ((probs (mapcar #'cadr spam-stat-score-data)) 492 (let* ((probs (mapcar #'cadr spam-stat-score-data))
493 (prod (apply #'* probs)) 493 (prod (apply #'* probs))
494 (score0 494 (score0
495 (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) 495 (/ prod (+ prod (apply #'* (mapcar (lambda (x) (- 1 x))
496 probs))))) 496 probs)))))
497 (score1s 497 (score1s
498 (condition-case nil 498 (condition-case nil
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index d00f0a60b66..3f978918b9a 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -710,16 +710,8 @@ finds ham or spam.")
710(defun spam-set-difference (list1 list2) 710(defun spam-set-difference (list1 list2)
711 "Return a set difference of LIST1 and LIST2. 711 "Return a set difference of LIST1 and LIST2.
712When either list is nil, the other is returned." 712When either list is nil, the other is returned."
713 (if (and list1 list2) 713 (declare (obsolete seq-difference "28.1"))
714 ;; we have two non-nil lists 714 (seq-difference list1 list2 #'eq))
715 (progn
716 (dolist (item (append list1 list2))
717 (when (and (memq item list1) (memq item list2))
718 (setq list1 (delq item list1))
719 (setq list2 (delq item list2))))
720 (append list1 list2))
721 ;; if either of the lists was nil, return the other one
722 (if list1 list1 list2)))
723 715
724(defun spam-group-ham-mark-p (group mark &optional spam) 716(defun spam-group-ham-mark-p (group mark &optional spam)
725 "Checks if MARK is considered a ham mark in GROUP." 717 "Checks if MARK is considered a ham mark in GROUP."
@@ -1327,7 +1319,7 @@ In the case of mover backends, checks the setting of
1327 (new-articles (spam-list-articles 1319 (new-articles (spam-list-articles
1328 gnus-newsgroup-articles 1320 gnus-newsgroup-articles
1329 classification)) 1321 classification))
1330 (changed-articles (spam-set-difference new-articles old-articles))) 1322 (changed-articles (seq-difference new-articles old-articles #'eq)))
1331 ;; now that we have the changed articles, we go through the processors 1323 ;; now that we have the changed articles, we go through the processors
1332 (dolist (backend (spam-backend-list)) 1324 (dolist (backend (spam-backend-list))
1333 (let (unregister-list) 1325 (let (unregister-list)
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el
index 89a1a9108c4..3c3c4073986 100644
--- a/lisp/hilit-chg.el
+++ b/lisp/hilit-chg.el
@@ -1,4 +1,4 @@
1;;; hilit-chg.el --- minor mode displaying buffer changes with special face 1;;; hilit-chg.el --- minor mode displaying buffer changes with special face -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1998, 2000-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2000-2021 Free Software Foundation, Inc.
4 4
@@ -68,8 +68,7 @@
68;; (defun my-highlight-changes-mode-hook () 68;; (defun my-highlight-changes-mode-hook ()
69;; (if highlight-changes-mode 69;; (if highlight-changes-mode
70;; (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t) 70;; (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)
71;; (remove-hook 'write-file-functions 'highlight-changes-rotate-faces t) 71;; (remove-hook 'write-file-functions 'highlight-changes-rotate-faces t)))
72;; ))
73 72
74 73
75;; Automatically enabling Highlight Changes mode 74;; Automatically enabling Highlight Changes mode
@@ -114,16 +113,16 @@
114 113
115 114
116;; Possible bindings: 115;; Possible bindings:
117;; (global-set-key '[C-right] 'highlight-changes-next-change) 116;; (global-set-key '[C-right] #'highlight-changes-next-change)
118;; (global-set-key '[C-left] 'highlight-changes-previous-change) 117;; (global-set-key '[C-left] #'highlight-changes-previous-change)
119;; 118;;
120;; Other interactive functions (that could be bound if desired): 119;; Other interactive functions (that could be bound if desired):
121;; highlight-changes-mode 120;; `highlight-changes-mode'
122;; highlight-changes-toggle-visibility 121;; `highlight-changes-toggle-visibility'
123;; highlight-changes-remove-highlight 122;; `highlight-changes-remove-highlight'
124;; highlight-compare-with-file 123;; `highlight-compare-with-file'
125;; highlight-compare-buffers 124;; `highlight-compare-buffers'
126;; highlight-changes-rotate-faces 125;; `highlight-changes-rotate-faces'
127 126
128 127
129;;; Bugs: 128;;; Bugs:
@@ -179,7 +178,6 @@
179 :version "20.4" 178 :version "20.4"
180 :group 'faces) 179 :group 'faces)
181 180
182
183;; Face information: How the changes appear. 181;; Face information: How the changes appear.
184 182
185;; Defaults for face: red foreground, no change to background, 183;; Defaults for face: red foreground, no change to background,
@@ -192,22 +190,20 @@
192 '((((min-colors 88) (class color)) (:foreground "red1")) 190 '((((min-colors 88) (class color)) (:foreground "red1"))
193 (((class color)) (:foreground "red" )) 191 (((class color)) (:foreground "red" ))
194 (t (:inverse-video t))) 192 (t (:inverse-video t)))
195 "Face used for highlighting changes." 193 "Face used for highlighting changes.")
196 :group 'highlight-changes)
197 194
198;; This looks pretty ugly, actually. Maybe the underline should be removed. 195;; This looks pretty ugly, actually. Maybe the underline should be removed.
199(defface highlight-changes-delete 196(defface highlight-changes-delete
200 '((((min-colors 88) (class color)) (:foreground "red1" :underline t)) 197 '((((min-colors 88) (class color)) (:foreground "red1" :underline t))
201 (((class color)) (:foreground "red" :underline t)) 198 (((class color)) (:foreground "red" :underline t))
202 (t (:inverse-video t))) 199 (t (:inverse-video t)))
203 "Face used for highlighting deletions." 200 "Face used for highlighting deletions.")
204 :group 'highlight-changes)
205 201
206;; A (not very good) default list of colors to rotate through. 202;; A (not very good) default list of colors to rotate through.
207(defcustom highlight-changes-colors 203(defcustom highlight-changes-colors
208 (if (eq (frame-parameter nil 'background-mode) 'light) 204 (if (eq (frame-parameter nil 'background-mode) 'light)
209 ;; defaults for light background: 205 ;; defaults for light background:
210 '( "magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue") 206 '("magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue")
211 ;; defaults for dark background: 207 ;; defaults for dark background:
212 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid")) 208 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid"))
213 "Colors used by `highlight-changes-rotate-faces'. 209 "Colors used by `highlight-changes-rotate-faces'.
@@ -218,8 +214,7 @@ This list is used if `highlight-changes-face-list' is nil, otherwise that
218variable overrides this list. If you only care about foreground 214variable overrides this list. If you only care about foreground
219colors then use this, if you want fancier faces then set 215colors then use this, if you want fancier faces then set
220`highlight-changes-face-list'." 216`highlight-changes-face-list'."
221 :type '(repeat color) 217 :type '(repeat color))
222 :group 'highlight-changes)
223 218
224;; When you invoke highlight-changes-mode, should highlight-changes-visible-mode 219;; When you invoke highlight-changes-mode, should highlight-changes-visible-mode
225;; be on or off? 220;; be on or off?
@@ -230,8 +225,7 @@ colors then use this, if you want fancier faces then set
230This controls the initial value of `highlight-changes-visible-mode'. 225This controls the initial value of `highlight-changes-visible-mode'.
231When a buffer is in Highlight Changes mode the function 226When a buffer is in Highlight Changes mode the function
232`highlight-changes-visible-mode' is used to toggle the mode on or off." 227`highlight-changes-visible-mode' is used to toggle the mode on or off."
233 :type 'boolean 228 :type 'boolean)
234 :group 'highlight-changes)
235 229
236;; These are the strings displayed in the mode-line for the minor mode: 230;; These are the strings displayed in the mode-line for the minor mode:
237 231
@@ -240,16 +234,14 @@ When a buffer is in Highlight Changes mode the function
240This should be set to nil if no indication is desired, or to 234This should be set to nil if no indication is desired, or to
241a string with a leading space." 235a string with a leading space."
242 :type '(choice string 236 :type '(choice string
243 (const :tag "None" nil)) 237 (const :tag "None" nil)))
244 :group 'highlight-changes)
245 238
246(defcustom highlight-changes-invisible-string " -Chg" 239(defcustom highlight-changes-invisible-string " -Chg"
247 "The string used when in Highlight Changes mode and changes are hidden. 240 "The string used when in Highlight Changes mode and changes are hidden.
248This should be set to nil if no indication is desired, or to 241This should be set to nil if no indication is desired, or to
249a string with a leading space." 242a string with a leading space."
250 :type '(choice string 243 :type '(choice string
251 (const :tag "None" nil)) 244 (const :tag "None" nil)))
252 :group 'highlight-changes)
253 245
254(defcustom highlight-changes-global-modes t 246(defcustom highlight-changes-global-modes t
255 "Determine whether a buffer is suitable for global Highlight Changes mode. 247 "Determine whether a buffer is suitable for global Highlight Changes mode.
@@ -279,9 +271,7 @@ modes only."
279 (repeat :tag "Modes" :inline t (symbol :tag "mode"))) 271 (repeat :tag "Modes" :inline t (symbol :tag "mode")))
280 (function :menu-tag "determined by function" 272 (function :menu-tag "determined by function"
281 :value buffer-file-name) 273 :value buffer-file-name)
282 (const :tag "none" nil) 274 (const :tag "none" nil)))
283 )
284 :group 'highlight-changes)
285 275
286(defcustom highlight-changes-global-changes-existing-buffers nil 276(defcustom highlight-changes-global-changes-existing-buffers nil
287 "If non-nil, toggling global Highlight Changes mode affects existing buffers. 277 "If non-nil, toggling global Highlight Changes mode affects existing buffers.
@@ -290,8 +280,7 @@ created). However, if `highlight-changes-global-changes-existing-buffers'
290is non-nil, then turning on `global-highlight-changes-mode' will turn on 280is non-nil, then turning on `global-highlight-changes-mode' will turn on
291Highlight Changes mode in suitable buffers, and turning the mode off will 281Highlight Changes mode in suitable buffers, and turning the mode off will
292remove it from existing buffers." 282remove it from existing buffers."
293 :type 'boolean 283 :type 'boolean)
294 :group 'highlight-changes)
295 284
296;; These are for internal use. 285;; These are for internal use.
297 286
@@ -320,9 +309,7 @@ through various faces.
320\\[highlight-compare-with-file] - mark text as changed by comparing this 309\\[highlight-compare-with-file] - mark text as changed by comparing this
321buffer with the contents of a file 310buffer with the contents of a file
322\\[highlight-compare-buffers] highlights differences between two buffers." 311\\[highlight-compare-buffers] highlights differences between two buffers."
323 nil ;; init-value 312 :lighter hilit-chg-string
324 hilit-chg-string ;; lighter
325 nil ;; keymap
326 (if (or (display-color-p) 313 (if (or (display-color-p)
327 (and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p))) 314 (and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
328 (progn 315 (progn
@@ -352,13 +339,8 @@ The default value can be customized with variable
352`highlight-changes-visibility-initial-state'. 339`highlight-changes-visibility-initial-state'.
353 340
354This command does not itself set Highlight Changes mode." 341This command does not itself set Highlight Changes mode."
355 342 :init-value t
356 t ;; init-value 343 (hilit-chg-update))
357 nil ;; lighter
358 nil ;; keymap
359
360 (hilit-chg-update)
361 )
362 344
363 345
364(defun hilit-chg-cust-fix-changes-face-list (w _wc &optional event) 346(defun hilit-chg-cust-fix-changes-face-list (w _wc &optional event)
@@ -371,12 +353,10 @@ This command does not itself set Highlight Changes mode."
371 ;; faces are saved but not to the actual list itself. 353 ;; faces are saved but not to the actual list itself.
372 (let ((old-list (widget-value w))) 354 (let ((old-list (widget-value w)))
373 (if (member 'default old-list) 355 (if (member 'default old-list)
374 (let 356 (let ((p (reverse old-list))
375 ((p (reverse old-list))
376 (n (length old-list)) 357 (n (length old-list))
377 new-name old-name 358 new-name old-name
378 (new-list nil) 359 (new-list nil))
379 )
380 (while p 360 (while p
381 (setq old-name (car p)) 361 (setq old-name (car p))
382 (setq new-name (intern (format "highlight-changes-%d" n))) 362 (setq new-name (intern (format "highlight-changes-%d" n)))
@@ -396,9 +376,7 @@ This command does not itself set Highlight Changes mode."
396 (if (equal new-list (widget-value w)) 376 (if (equal new-list (widget-value w))
397 nil ;; (message "notify: no change!") 377 nil ;; (message "notify: no change!")
398 (widget-value-set w new-list) 378 (widget-value-set w new-list)
399 (widget-setup) 379 (widget-setup)))
400 )
401 )
402 ;; (message "notify: no default here!") 380 ;; (message "notify: no default here!")
403 )) 381 ))
404 (let ((parent (widget-get w :parent))) 382 (let ((parent (widget-get w :parent)))
@@ -417,10 +395,8 @@ Otherwise, this list will be constructed when needed from
417 :type '(choice 395 :type '(choice
418 (repeat 396 (repeat
419 :notify hilit-chg-cust-fix-changes-face-list 397 :notify hilit-chg-cust-fix-changes-face-list
420 face ) 398 face)
421 (const :tag "Derive from highlight-changes-colors" nil) 399 (const :tag "Derive from highlight-changes-colors" nil)))
422 )
423 :group 'highlight-changes)
424 400
425 401
426(defun hilit-chg-map-changes (func &optional start-position end-position) 402(defun hilit-chg-map-changes (func &optional start-position end-position)
@@ -446,7 +422,7 @@ An overlay from BEG to END containing a change face is added
446from the information in the text property of type `hilit-chg'. 422from the information in the text property of type `hilit-chg'.
447 423
448This is the opposite of `hilit-chg-hide-changes'." 424This is the opposite of `hilit-chg-hide-changes'."
449 (hilit-chg-map-changes 'hilit-chg-make-ov beg end)) 425 (hilit-chg-map-changes #'hilit-chg-make-ov beg end))
450 426
451 427
452(defun hilit-chg-make-ov (prop start end) 428(defun hilit-chg-make-ov (prop start end)
@@ -467,8 +443,7 @@ This is the opposite of `hilit-chg-hide-changes'."
467 (overlay-put ov 'evaporate t) 443 (overlay-put ov 'evaporate t)
468 ;; We set the change property so we can tell this is one 444 ;; We set the change property so we can tell this is one
469 ;; of our overlays (so we don't delete someone else's). 445 ;; of our overlays (so we don't delete someone else's).
470 (overlay-put ov 'hilit-chg t) 446 (overlay-put ov 'hilit-chg t))
471 )
472 (error "hilit-chg-make-ov: no face for prop: %s" prop)))) 447 (error "hilit-chg-make-ov: no face for prop: %s" prop))))
473 448
474(defun hilit-chg-hide-changes (&optional beg end) 449(defun hilit-chg-hide-changes (&optional beg end)
@@ -726,7 +701,7 @@ this, eval the following in the buffer to be saved:
726 ;; remove our existing overlays 701 ;; remove our existing overlays
727 (hilit-chg-hide-changes) 702 (hilit-chg-hide-changes)
728 ;; for each change text property, increment it 703 ;; for each change text property, increment it
729 (hilit-chg-map-changes 'hilit-chg-bump-change) 704 (hilit-chg-map-changes #'hilit-chg-bump-change)
730 ;; and display them 705 ;; and display them
731 (hilit-chg-display-changes)) 706 (hilit-chg-display-changes))
732 (unless modified 707 (unless modified
@@ -759,7 +734,7 @@ is non-nil."
759 (buf-b-read-only (with-current-buffer buf-b buffer-read-only)) 734 (buf-b-read-only (with-current-buffer buf-b buffer-read-only))
760 temp-a temp-b) 735 temp-a temp-b)
761 (if (and file-a bufa-modified) 736 (if (and file-a bufa-modified)
762 (if (y-or-n-p (format "Save buffer %s? " buf-a)) 737 (if (y-or-n-p (format "Save buffer %s? " buf-a))
763 (with-current-buffer buf-a 738 (with-current-buffer buf-a
764 (save-buffer) 739 (save-buffer)
765 (setq bufa-modified (buffer-modified-p buf-a))) 740 (setq bufa-modified (buffer-modified-p buf-a)))
@@ -768,7 +743,7 @@ is non-nil."
768 (setq temp-a (setq file-a (ediff-make-temp-file buf-a nil)))) 743 (setq temp-a (setq file-a (ediff-make-temp-file buf-a nil))))
769 744
770 (if (and file-b bufb-modified) 745 (if (and file-b bufb-modified)
771 (if (y-or-n-p (format "Save buffer %s? " buf-b)) 746 (if (y-or-n-p (format "Save buffer %s? " buf-b))
772 (with-current-buffer buf-b 747 (with-current-buffer buf-b
773 (save-buffer) 748 (save-buffer)
774 (setq bufb-modified (buffer-modified-p buf-b))) 749 (setq bufb-modified (buffer-modified-p buf-b)))
@@ -809,12 +784,11 @@ is non-nil."
809 (if temp-a 784 (if temp-a
810 (delete-file temp-a)) 785 (delete-file temp-a))
811 (if temp-b 786 (if temp-b
812 (delete-file temp-b))) 787 (delete-file temp-b)))))
813 ))
814 788
815;;;###autoload 789;;;###autoload
816(defun highlight-compare-buffers (buf-a buf-b) 790(defun highlight-compare-buffers (buf-a buf-b)
817"Compare two buffers and highlight the differences. 791 "Compare two buffers and highlight the differences.
818 792
819The default is the current buffer and the one in the next window. 793The default is the current buffer and the one in the next window.
820 794
@@ -835,8 +809,7 @@ changes are made, so \\[highlight-changes-next-change] and
835 (window-buffer (next-window)) t)))) 809 (window-buffer (next-window)) t))))
836 (let ((file-a (buffer-file-name buf-a)) 810 (let ((file-a (buffer-file-name buf-a))
837 (file-b (buffer-file-name buf-b))) 811 (file-b (buffer-file-name buf-b)))
838 (highlight-markup-buffers buf-a file-a buf-b file-b) 812 (highlight-markup-buffers buf-a file-a buf-b file-b)))
839 ))
840 813
841;;;###autoload 814;;;###autoload
842(defun highlight-compare-with-file (file-b) 815(defun highlight-compare-with-file (file-b)
@@ -876,9 +849,11 @@ changes are made, so \\[highlight-changes-next-change] and
876 (find-file-noselect file-b)))) 849 (find-file-noselect file-b))))
877 (highlight-markup-buffers buf-a file-a buf-b file-b (not existing-buf)) 850 (highlight-markup-buffers buf-a file-a buf-b file-b (not existing-buf))
878 (unless existing-buf 851 (unless existing-buf
879 (kill-buffer buf-b)) 852 (kill-buffer buf-b))))
880 ))
881 853
854(defvar hilit-x) ; placate the byte-compiler
855(defvar hilit-y)
856(defvar hilit-e)
882 857
883(defun hilit-chg-get-diff-info (buf-a file-a buf-b file-b) 858(defun hilit-chg-get-diff-info (buf-a file-a buf-b file-b)
884 ;; hilit-e,x,y are set by function hilit-chg-get-diff-list-hk. 859 ;; hilit-e,x,y are set by function hilit-chg-get-diff-list-hk.
@@ -886,8 +861,7 @@ changes are made, so \\[highlight-changes-next-change] and
886 (ediff-setup buf-a file-a buf-b file-b 861 (ediff-setup buf-a file-a buf-b file-b
887 nil nil ; buf-c file-C 862 nil nil ; buf-c file-C
888 '(hilit-chg-get-diff-list-hk) 863 '(hilit-chg-get-diff-list-hk)
889 (list (cons 'ediff-job-name 'something)) 864 (list (cons 'ediff-job-name 'something)))
890 )
891 (ediff-with-current-buffer hilit-e (ediff-really-quit nil)) 865 (ediff-with-current-buffer hilit-e (ediff-really-quit nil))
892 (list hilit-x hilit-y))) 866 (list hilit-x hilit-y)))
893 867
@@ -895,9 +869,6 @@ changes are made, so \\[highlight-changes-next-change] and
895(defun hilit-chg-get-diff-list-hk () 869(defun hilit-chg-get-diff-list-hk ()
896 ;; hilit-e/x/y are dynamically bound by hilit-chg-get-diff-info 870 ;; hilit-e/x/y are dynamically bound by hilit-chg-get-diff-info
897 ;; which calls this function as a hook. 871 ;; which calls this function as a hook.
898 (defvar hilit-x) ; placate the byte-compiler
899 (defvar hilit-y)
900 (defvar hilit-e)
901 (setq hilit-e (current-buffer)) 872 (setq hilit-e (current-buffer))
902 (let ((n 0) extent p va vb a b) 873 (let ((n 0) extent p va vb a b)
903 (setq hilit-x nil hilit-y nil) 874 (setq hilit-x nil hilit-y nil)
@@ -931,7 +902,7 @@ changes are made, so \\[highlight-changes-next-change] and
931 (setq extent (list (overlay-start (car p)) 902 (setq extent (list (overlay-start (car p))
932 (overlay-end (car p)))) 903 (overlay-end (car p))))
933 (setq p (cdr p)) 904 (setq p (cdr p))
934 (setq hilit-y (append hilit-y (list extent) ))) 905 (setq hilit-y (append hilit-y (list extent))))
935 (setq n (1+ n)));; while 906 (setq n (1+ n)));; while
936 ;; ediff-quit doesn't work here. 907 ;; ediff-quit doesn't work here.
937 ;; No point in returning a value, since this is a hook function. 908 ;; No point in returning a value, since this is a hook function.
@@ -961,8 +932,7 @@ This is called when `global-highlight-changes-mode' is turned on."
961 (and 932 (and
962 (not (string-match "^[ *]" (buffer-name))) 933 (not (string-match "^[ *]" (buffer-name)))
963 (buffer-file-name)))) 934 (buffer-file-name))))
964 (highlight-changes-mode 1)) 935 (highlight-changes-mode 1))))
965 ))
966 936
967 937
968;;;; Desktop support. 938;;;; Desktop support.
@@ -985,8 +955,7 @@ This is called when `global-highlight-changes-mode' is turned on."
985;; (message "--- hilit-chg-debug-show ---") 955;; (message "--- hilit-chg-debug-show ---")
986;; (hilit-chg-map-changes (lambda (prop start end) 956;; (hilit-chg-map-changes (lambda (prop start end)
987;; (message "%d-%d: %s" start end prop)) 957;; (message "%d-%d: %s" start end prop))
988;; beg end 958;; beg end))
989;; ))
990;; 959;;
991;; ================== end of debug =============== 960;; ================== end of debug ===============
992 961
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index 0c8d5348247..b453061388f 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -523,22 +523,10 @@ therefore no longer care about) will be invalid at any time.\n
523(defvar hfy-tmpfont-stack nil 523(defvar hfy-tmpfont-stack nil
524 "An alist of derived fonts resulting from overlays.") 524 "An alist of derived fonts resulting from overlays.")
525 525
526(defconst hfy-hex-regex "[[:xdigit:]]")
527
528(defconst hfy-triplet-regex 526(defconst hfy-triplet-regex
529 (concat 527 (rx (group xdigit xdigit)
530 "\\(" hfy-hex-regex hfy-hex-regex "\\)" 528 (group xdigit xdigit)
531 "\\(" hfy-hex-regex hfy-hex-regex "\\)" 529 (group xdigit xdigit)))
532 "\\(" hfy-hex-regex hfy-hex-regex "\\)"))
533
534(defun hfy-interq (set-a set-b)
535 "Return the intersection (using `eq') of two lists SET-A and SET-B."
536 (let ((sa set-a) (interq nil) (elt nil))
537 (while sa
538 (setq elt (car sa)
539 sa (cdr sa))
540 (if (memq elt set-b) (setq interq (cons elt interq))))
541 interq))
542 530
543(defun hfy-color-vals (color) 531(defun hfy-color-vals (color)
544 "Where COLOR is a color name or #XXXXXX style triplet, return a 532 "Where COLOR is a color name or #XXXXXX style triplet, return a
@@ -887,7 +875,9 @@ See also `hfy-display-class' for details of valid values for CLASS."
887 (setq score 0) (ignore "t match")) 875 (setq score 0) (ignore "t match"))
888 ((not (cdr (assq key face-class))) ;Neither good nor bad. 876 ((not (cdr (assq key face-class))) ;Neither good nor bad.
889 nil (ignore "non match, non collision")) 877 nil (ignore "non match, non collision"))
890 ((setq x (hfy-interq val (cdr (assq key face-class)))) 878 ((setq x (nreverse
879 (seq-intersection val (cdr (assq key face-class))
880 #'eq)))
891 (setq score (+ score (length x))) 881 (setq score (+ score (length x)))
892 (ignore "intersection")) 882 (ignore "intersection"))
893 (t ;; nope. 883 (t ;; nope.
@@ -2355,6 +2345,13 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'."
2355 (let ((file (hfy-initfile))) 2345 (let ((file (hfy-initfile)))
2356 (load file 'NOERROR nil nil) )) 2346 (load file 'NOERROR nil nil) ))
2357 2347
2348;; Obsolete.
2349
2350(defun hfy-interq (set-a set-b)
2351 "Return the intersection (using `eq') of two lists SET-A and SET-B."
2352 (declare (obsolete seq-intersection "28.1"))
2353 (nreverse (seq-intersection set-a set-b #'eq)))
2354
2358(provide 'htmlfontify) 2355(provide 'htmlfontify)
2359 2356
2360;;; htmlfontify.el ends here 2357;;; htmlfontify.el ends here
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 2de16cb6afd..f4ff35f9c41 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -732,8 +732,9 @@ displays an image file as text."
732 (setq image-type previous-image-type) 732 (setq image-type previous-image-type)
733 ;; Enable image minor mode with `C-c C-c'. 733 ;; Enable image minor mode with `C-c C-c'.
734 (image-minor-mode 1) 734 (image-minor-mode 1)
735 ;; Show the image file as text. 735 (unless (image-get-display-property)
736 (image-toggle-display-text))) 736 ;; Show the image file as text.
737 (image-toggle-display-text))))
737 738
738(defun image-mode-as-hex () 739(defun image-mode-as-hex ()
739 "Set a non-image mode as major mode in combination with image minor mode. 740 "Set a non-image mode as major mode in combination with image minor mode.
diff --git a/lisp/image.el b/lisp/image.el
index b802c1c906f..610d020aab5 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -603,12 +603,16 @@ means display it in the right marginal area."
603(defun insert-image (image &optional string area slice) 603(defun insert-image (image &optional string area slice)
604 "Insert IMAGE into current buffer at point. 604 "Insert IMAGE into current buffer at point.
605IMAGE is displayed by inserting STRING into the current buffer 605IMAGE is displayed by inserting STRING into the current buffer
606with a `display' property whose value is the image. STRING 606with a `display' property whose value is the image.
607defaults to a single space if you omit it. 607
608STRING defaults to a single space if you omit it, which means
609that the inserted image will behave as whitespace syntactically.
610
608AREA is where to display the image. AREA nil or omitted means 611AREA is where to display the image. AREA nil or omitted means
609display it in the text area, a value of `left-margin' means 612display it in the text area, a value of `left-margin' means
610display it in the left marginal area, a value of `right-margin' 613display it in the left marginal area, a value of `right-margin'
611means display it in the right marginal area. 614means display it in the right marginal area.
615
612SLICE specifies slice of IMAGE to insert. SLICE nil or omitted 616SLICE specifies slice of IMAGE to insert. SLICE nil or omitted
613means insert whole image. SLICE is a list (X Y WIDTH HEIGHT) 617means insert whole image. SLICE is a list (X Y WIDTH HEIGHT)
614specifying the X and Y positions and WIDTH and HEIGHT of image area 618specifying the X and Y positions and WIDTH and HEIGHT of image area
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index c643f66cbb0..97bf31acfc3 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -484,9 +484,9 @@ with L, LRE, or LRO Unicode bidi character type.")
484 (progn 484 (progn
485 (modify-syntax-entry chars syntax) 485 (modify-syntax-entry chars syntax)
486 (modify-category-entry chars category)) 486 (modify-category-entry chars category))
487 (mapc #'(lambda (x) 487 (mapc (lambda (x)
488 (modify-syntax-entry x syntax) 488 (modify-syntax-entry x syntax)
489 (modify-category-entry x category)) 489 (modify-category-entry x category))
490 chars))))) 490 chars)))))
491 491
492;; Bidi categories 492;; Bidi categories
@@ -1390,8 +1390,8 @@ with L, LRE, or LRO Unicode bidi character type.")
1390 (dolist (charset-info (nthcdr 2 slot)) 1390 (dolist (charset-info (nthcdr 2 slot))
1391 (let ((charset (car charset-info))) 1391 (let ((charset (car charset-info)))
1392 (dolist (code-range (cdr charset-info)) 1392 (dolist (code-range (cdr charset-info))
1393 (map-charset-chars #'(lambda (range _arg) 1393 (map-charset-chars (lambda (range _arg)
1394 (set-char-table-range table range 2)) 1394 (set-char-table-range table range 2))
1395 charset nil 1395 charset nil
1396 (car code-range) (cdr code-range))))) 1396 (car code-range) (cdr code-range)))))
1397 (optimize-char-table table) 1397 (optimize-char-table table)
@@ -1417,8 +1417,8 @@ Setup char-width-table appropriate for non-CJK language environment."
1417 (require 'charscript)) 1417 (require 'charscript))
1418 1418
1419(map-charset-chars 1419(map-charset-chars
1420 #'(lambda (range _ignore) 1420 (lambda (range _ignore)
1421 (set-char-table-range char-script-table range 'tibetan)) 1421 (set-char-table-range char-script-table range 'tibetan))
1422 'tibetan) 1422 'tibetan)
1423 1423
1424 1424
@@ -1426,14 +1426,14 @@ Setup char-width-table appropriate for non-CJK language environment."
1426 1426
1427(when (setq unicode-category-table 1427(when (setq unicode-category-table
1428 (unicode-property-table-internal 'general-category)) 1428 (unicode-property-table-internal 'general-category))
1429 (map-char-table #'(lambda (key val) 1429 (map-char-table (lambda (key val)
1430 (if val 1430 (if val
1431 (cond ((or (and (/= (aref (symbol-name val) 0) ?M) 1431 (cond ((or (and (/= (aref (symbol-name val) 0) ?M)
1432 (/= (aref (symbol-name val) 0) ?C)) 1432 (/= (aref (symbol-name val) 0) ?C))
1433 (eq val 'Zs)) 1433 (eq val 'Zs))
1434 (modify-category-entry key ?.)) 1434 (modify-category-entry key ?.))
1435 ((eq val 'Mn) 1435 ((eq val 'Mn)
1436 (modify-category-entry key ?^))))) 1436 (modify-category-entry key ?^)))))
1437 unicode-category-table)) 1437 unicode-category-table))
1438 1438
1439(optimize-char-table (standard-category-table)) 1439(optimize-char-table (standard-category-table))
@@ -1524,21 +1524,21 @@ option `glyphless-char-display'."
1524 ((eq target 'format-control) 1524 ((eq target 'format-control)
1525 (when unicode-category-table 1525 (when unicode-category-table
1526 (map-char-table 1526 (map-char-table
1527 #'(lambda (char category) 1527 (lambda (char category)
1528 (if (eq category 'Cf) 1528 (if (eq category 'Cf)
1529 (let ((this-method method) 1529 (let ((this-method method)
1530 from to) 1530 from to)
1531 (if (consp char) 1531 (if (consp char)
1532 (setq from (car char) to (cdr char)) 1532 (setq from (car char) to (cdr char))
1533 (setq from char to char)) 1533 (setq from char to char))
1534 (while (<= from to) 1534 (while (<= from to)
1535 (when (/= from #xAD) 1535 (when (/= from #xAD)
1536 (if (eq method 'acronym) 1536 (if (eq method 'acronym)
1537 (setq this-method 1537 (setq this-method
1538 (aref char-acronym-table from))) 1538 (aref char-acronym-table from)))
1539 (set-char-table-range glyphless-char-display 1539 (set-char-table-range glyphless-char-display
1540 from this-method)) 1540 from this-method))
1541 (setq from (1+ from)))))) 1541 (setq from (1+ from))))))
1542 unicode-category-table))) 1542 unicode-category-table)))
1543 ((eq target 'no-font) 1543 ((eq target 'no-font)
1544 (set-char-table-extra-slot glyphless-char-display 0 method)) 1544 (set-char-table-extra-slot glyphless-char-display 0 method))
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 8f0f263dcce..3deaff96774 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -497,37 +497,37 @@
497 (:registry "iso10646-1")))) 497 (:registry "iso10646-1"))))
498 (cjk-table (make-char-table nil)) 498 (cjk-table (make-char-table nil))
499 (script-coverage 499 (script-coverage
500 #'(lambda (script) 500 (lambda (script)
501 (let ((coverage)) 501 (let ((coverage))
502 (map-char-table 502 (map-char-table
503 #'(lambda (range val) 503 (lambda (range val)
504 (when (eq val script) 504 (when (eq val script)
505 (if (consp range) 505 (if (consp range)
506 (setq range (cons (car range) (cdr range)))) 506 (setq range (cons (car range) (cdr range))))
507 (push range coverage))) 507 (push range coverage)))
508 char-script-table) 508 char-script-table)
509 coverage))) 509 coverage)))
510 (data (list (vconcat (mapcar 'car cjk)))) 510 (data (list (vconcat (mapcar 'car cjk))))
511 (i 0)) 511 (i 0))
512 (dolist (elt cjk) 512 (dolist (elt cjk)
513 (let ((mask (ash 1 i))) 513 (let ((mask (ash 1 i)))
514 (map-charset-chars 514 (map-charset-chars
515 #'(lambda (range _arg) 515 (lambda (range _arg)
516 (let ((from (car range)) (to (cdr range))) 516 (let ((from (car range)) (to (cdr range)))
517 (if (< to #x110000) 517 (if (< to #x110000)
518 (while (<= from to) 518 (while (<= from to)
519 (or (memq (aref char-script-table from) 519 (or (memq (aref char-script-table from)
520 '(kana hangul han cjk-misc)) 520 '(kana hangul han cjk-misc))
521 (aset cjk-table from 521 (aset cjk-table from
522 (logior (or (aref cjk-table from) 0) mask))) 522 (logior (or (aref cjk-table from) 0) mask)))
523 (setq from (1+ from)))))) 523 (setq from (1+ from))))))
524 (nth 1 elt) nil (nth 2 elt) (nth 3 elt))) 524 (nth 1 elt) nil (nth 2 elt) (nth 3 elt)))
525 (setq i (1+ i))) 525 (setq i (1+ i)))
526 (map-char-table 526 (map-char-table
527 #'(lambda (range val) 527 (lambda (range val)
528 (if (consp range) 528 (if (consp range)
529 (setq range (cons (car range) (cdr range)))) 529 (setq range (cons (car range) (cdr range))))
530 (push (cons range val) data)) 530 (push (cons range val) data))
531 cjk-table) 531 cjk-table)
532 (dolist (script scripts) 532 (dolist (script scripts)
533 (dolist (range (funcall script-coverage (car script))) 533 (dolist (range (funcall script-coverage (car script)))
@@ -1227,7 +1227,7 @@ Done when `mouse-set-font' is called."
1227 (string-match "fontset-auto[0-9]+$" fontset) 1227 (string-match "fontset-auto[0-9]+$" fontset)
1228 (push (list (fontset-plain-name fontset) fontset) l))) 1228 (push (list (fontset-plain-name fontset) fontset) l)))
1229 (cons "Fontset" 1229 (cons "Fontset"
1230 (sort l #'(lambda (x y) (string< (car x) (car y))))))) 1230 (sort l (lambda (x y) (string< (car x) (car y)))))))
1231 1231
1232(declare-function query-fontset "fontset.c" (pattern &optional regexpp)) 1232(declare-function query-fontset "fontset.c" (pattern &optional regexpp))
1233 1233
diff --git a/lisp/international/latin1-disp.el b/lisp/international/latin1-disp.el
index 4b6ef9833e5..b3d6a635b1c 100644
--- a/lisp/international/latin1-disp.el
+++ b/lisp/international/latin1-disp.el
@@ -186,8 +186,8 @@ character set."
186 'arabic-iso8859-6 186 'arabic-iso8859-6
187 (car (remq 'ascii (get-language-info language 187 (car (remq 'ascii (get-language-info language
188 'charset)))))) 188 'charset))))))
189 (map-charset-chars #'(lambda (range _arg) 189 (map-charset-chars (lambda (range _arg)
190 (standard-display-default (car range) (cdr range))) 190 (standard-display-default (car range) (cdr range)))
191 charset)) 191 charset))
192 (sit-for 0)) 192 (sit-for 0))
193 193
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index bf0df6f971d..578d97bcc0a 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -679,18 +679,18 @@ DEFAULT is the coding system to use by default in the query."
679 ;; ((CODING (POS . CHAR) (POS . CHAR) ...) ...) 679 ;; ((CODING (POS . CHAR) (POS . CHAR) ...) ...)
680 (if unsafe 680 (if unsafe
681 (setq unsafe 681 (setq unsafe
682 (mapcar #'(lambda (coding) 682 (mapcar (lambda (coding)
683 (cons coding 683 (cons coding
684 (if (stringp from) 684 (if (stringp from)
685 (mapcar #'(lambda (pos) 685 (mapcar (lambda (pos)
686 (cons pos (aref from pos))) 686 (cons pos (aref from pos)))
687 (unencodable-char-position 687 (unencodable-char-position
688 0 (length from) coding 688 0 (length from) coding
689 11 from)) 689 11 from))
690 (mapcar #'(lambda (pos) 690 (mapcar (lambda (pos)
691 (cons pos (char-after pos))) 691 (cons pos (char-after pos)))
692 (unencodable-char-position 692 (unencodable-char-position
693 from to coding 11))))) 693 from to coding 11)))))
694 unsafe))) 694 unsafe)))
695 695
696 (setq codings (sanitize-coding-system-list codings)) 696 (setq codings (sanitize-coding-system-list codings))
@@ -744,19 +744,19 @@ e.g., for sending an email message.\n ")
744 (insert (format " %s cannot encode these:" (car coding))) 744 (insert (format " %s cannot encode these:" (car coding)))
745 (let ((i 0) 745 (let ((i 0)
746 (func1 746 (func1
747 #'(lambda (bufname pos) 747 (lambda (bufname pos)
748 (when (buffer-live-p (get-buffer bufname)) 748 (when (buffer-live-p (get-buffer bufname))
749 (pop-to-buffer bufname) 749 (pop-to-buffer bufname)
750 (goto-char pos)))) 750 (goto-char pos))))
751 (func2 751 (func2
752 #'(lambda (bufname pos coding) 752 (lambda (bufname pos coding)
753 (when (buffer-live-p (get-buffer bufname)) 753 (when (buffer-live-p (get-buffer bufname))
754 (pop-to-buffer bufname) 754 (pop-to-buffer bufname)
755 (if (< (point) pos) 755 (if (< (point) pos)
756 (goto-char pos) 756 (goto-char pos)
757 (forward-char 1) 757 (forward-char 1)
758 (search-unencodable-char coding) 758 (search-unencodable-char coding)
759 (forward-char -1)))))) 759 (forward-char -1))))))
760 (dolist (elt (cdr coding)) 760 (dolist (elt (cdr coding))
761 (insert " ") 761 (insert " ")
762 (if (stringp from) 762 (if (stringp from)
diff --git a/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index a0063c8dbb6..2d3cd25b4a4 100644
--- a/lisp/international/mule-diag.el
+++ b/lisp/international/mule-diag.el
@@ -45,8 +45,8 @@
45(define-button-type 'sort-listed-character-sets 45(define-button-type 'sort-listed-character-sets
46 'help-echo (purecopy "mouse-2, RET: sort on this column") 46 'help-echo (purecopy "mouse-2, RET: sort on this column")
47 'face 'bold 47 'face 'bold
48 'action #'(lambda (button) 48 'action (lambda (button)
49 (sort-listed-character-sets (button-get button 'sort-key)))) 49 (sort-listed-character-sets (button-get button 'sort-key))))
50 50
51(define-button-type 'list-charset-chars 51(define-button-type 'list-charset-chars
52 :supertype 'help-xref 52 :supertype 'help-xref
@@ -1172,12 +1172,12 @@ The default is 20. If LIMIT is negative, do not limit the listing."
1172 (if (or (vectorp elt) (listp elt)) 1172 (if (or (vectorp elt) (listp elt))
1173 (let ((i 0)) 1173 (let ((i 0))
1174 (catch 'tag 1174 (catch 'tag
1175 (mapc #'(lambda (x) 1175 (mapc (lambda (x)
1176 (setq i (1+ i)) 1176 (setq i (1+ i))
1177 (when (= i limit) 1177 (when (= i limit)
1178 (insert " ...\n") 1178 (insert " ...\n")
1179 (throw 'tag nil)) 1179 (throw 'tag nil))
1180 (insert (format " %s\n" x))) 1180 (insert (format " %s\n" x)))
1181 elt))) 1181 elt)))
1182 (insert (format " %s\n" elt))))))) 1182 (insert (format " %s\n" elt)))))))
1183 1183
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 91d18c34295..9cd38afd8be 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -32,7 +32,7 @@
32 32
33(defconst mule-version "6.0 (HANACHIRUSATO)" "\ 33(defconst mule-version "6.0 (HANACHIRUSATO)" "\
34Version number and name of this version of MULE (multilingual environment).") 34Version number and name of this version of MULE (multilingual environment).")
35(make-obsolete-variable 'mule-version nil "28.1") 35(make-obsolete-variable 'mule-version 'emacs-version "28.1")
36 36
37(defconst mule-version-date "2003.9.1" "\ 37(defconst mule-version-date "2003.9.1" "\
38Distribution date of this version of MULE (multilingual environment).") 38Distribution date of this version of MULE (multilingual environment).")
@@ -491,27 +491,27 @@ per-character basis, this may not be accurate."
491 (cond 491 (cond
492 ((listp cs-list) 492 ((listp cs-list)
493 (catch 'tag 493 (catch 'tag
494 (mapc #'(lambda (charset) 494 (mapc (lambda (charset)
495 (if (encode-char char charset) 495 (if (encode-char char charset)
496 (throw 'tag charset))) 496 (throw 'tag charset)))
497 cs-list) 497 cs-list)
498 nil)) 498 nil))
499 ((eq cs-list 'iso-2022) 499 ((eq cs-list 'iso-2022)
500 (catch 'tag2 500 (catch 'tag2
501 (mapc #'(lambda (charset) 501 (mapc (lambda (charset)
502 (if (and (plist-get (charset-plist charset) 502 (if (and (plist-get (charset-plist charset)
503 :iso-final-char) 503 :iso-final-char)
504 (encode-char char charset)) 504 (encode-char char charset))
505 (throw 'tag2 charset))) 505 (throw 'tag2 charset)))
506 charset-list) 506 charset-list)
507 nil)) 507 nil))
508 ((eq cs-list 'emacs-mule) 508 ((eq cs-list 'emacs-mule)
509 (catch 'tag3 509 (catch 'tag3
510 (mapc #'(lambda (charset) 510 (mapc (lambda (charset)
511 (if (and (plist-get (charset-plist charset) 511 (if (and (plist-get (charset-plist charset)
512 :emacs-mule-id) 512 :emacs-mule-id)
513 (encode-char char charset)) 513 (encode-char char charset))
514 (throw 'tag3 charset))) 514 (throw 'tag3 charset)))
515 charset-list) 515 charset-list)
516 nil))))))))))) 516 nil)))))))))))
517 517
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 87a905045d4..fff06deee88 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -728,9 +728,9 @@ Available types are listed in the variable `quail-keyboard-layout-alist'."
728 :type (cons 'choice (mapcar (lambda (elt) 728 :type (cons 'choice (mapcar (lambda (elt)
729 (list 'const (car elt))) 729 (list 'const (car elt)))
730 quail-keyboard-layout-alist)) 730 quail-keyboard-layout-alist))
731 :set #'(lambda (symbol value) 731 :set (lambda (symbol value)
732 (quail-update-keyboard-layout value) 732 (quail-update-keyboard-layout value)
733 (set symbol value))) 733 (set symbol value)))
734 734
735;;;###autoload 735;;;###autoload
736(defun quail-set-keyboard-layout (kbd-type) 736(defun quail-set-keyboard-layout (kbd-type)
@@ -1571,12 +1571,12 @@ with more keys."
1571 (let (char) 1571 (let (char)
1572 (if (stringp quail-current-str) 1572 (if (stringp quail-current-str)
1573 (catch 'tag 1573 (catch 'tag
1574 (mapc #'(lambda (ch) 1574 (mapc (lambda (ch)
1575 (when (/= (unibyte-char-to-multibyte 1575 (when (/= (unibyte-char-to-multibyte
1576 (multibyte-char-to-unibyte ch)) 1576 (multibyte-char-to-unibyte ch))
1577 ch) 1577 ch)
1578 (setq char ch) 1578 (setq char ch)
1579 (throw 'tag nil))) 1579 (throw 'tag nil)))
1580 quail-current-str)) 1580 quail-current-str))
1581 (if (/= (unibyte-char-to-multibyte 1581 (if (/= (unibyte-char-to-multibyte
1582 (multibyte-char-to-unibyte quail-current-str)) 1582 (multibyte-char-to-unibyte quail-current-str))
@@ -2827,19 +2827,19 @@ If CHAR is an ASCII character and can be input by typing itself, return t."
2827 (key-list nil)) 2827 (key-list nil))
2828 (if (consp decode-map) 2828 (if (consp decode-map)
2829 (let ((str (string char))) 2829 (let ((str (string char)))
2830 (mapc #'(lambda (elt) 2830 (mapc (lambda (elt)
2831 (if (string= str (car elt)) 2831 (if (string= str (car elt))
2832 (setq key-list (cons (cdr elt) key-list)))) 2832 (setq key-list (cons (cdr elt) key-list))))
2833 (cdr decode-map))) 2833 (cdr decode-map)))
2834 (let ((key-head (aref decode-map char))) 2834 (let ((key-head (aref decode-map char)))
2835 (if (stringp key-head) 2835 (if (stringp key-head)
2836 (setq key-list (quail-find-key1 2836 (setq key-list (quail-find-key1
2837 (quail-lookup-key key-head nil t) 2837 (quail-lookup-key key-head nil t)
2838 key-head char nil)) 2838 key-head char nil))
2839 (mapc #'(lambda (elt) 2839 (mapc (lambda (elt)
2840 (setq key-list 2840 (setq key-list
2841 (quail-find-key1 2841 (quail-find-key1
2842 (quail-lookup-key elt nil t) elt char key-list))) 2842 (quail-lookup-key elt nil t) elt char key-list)))
2843 key-head)))) 2843 key-head))))
2844 (or key-list 2844 (or key-list
2845 (and (< char 128) 2845 (and (< char 128)
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index 64d66443760..ccb4c8390bb 100644
--- a/lisp/international/titdic-cnv.el
+++ b/lisp/international/titdic-cnv.el
@@ -781,7 +781,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\"."
781 (if val (setq trans (concat val trans))) 781 (if val (setq trans (concat val trans)))
782 (puthash key trans table) 782 (puthash key trans table)
783 (forward-line 1))) 783 (forward-line 1)))
784 (maphash #'(lambda (key val) (setq dic (cons (cons key val) dic))) 784 (maphash (lambda (key val) (setq dic (cons (cons key val) dic)))
785 table))) 785 table)))
786 (setq dic (sort dic (lambda (x y) (string< (car x ) (car y))))) 786 (setq dic (sort dic (lambda (x y) (string< (car x ) (car y)))))
787 (dolist (elt dic) 787 (dolist (elt dic)
@@ -931,18 +931,18 @@ method `chinese-tonepy' with which you must specify tones by digits
931 (if val (setq trans (vconcat val trans))) 931 (if val (setq trans (vconcat val trans)))
932 (puthash key trans table) 932 (puthash key trans table)
933 (forward-line 1)) 933 (forward-line 1))
934 (maphash #'(lambda (key trans) 934 (maphash (lambda (key trans)
935 (let ((len (length trans)) 935 (let ((len (length trans))
936 i) 936 i)
937 (if (and (= len 1) (= (length (aref trans 0)) 1)) 937 (if (and (= len 1) (= (length (aref trans 0)) 1))
938 (setq trans (aref trans 0)) 938 (setq trans (aref trans 0))
939 (setq i 0) 939 (setq i 0)
940 (while (and (< i len) 940 (while (and (< i len)
941 (= (length (aref trans i)) 1)) 941 (= (length (aref trans i)) 1))
942 (setq i (1+ i))) 942 (setq i (1+ i)))
943 (if (= i len) 943 (if (= i len)
944 (setq trans (mapconcat #'identity trans ""))))) 944 (setq trans (mapconcat #'identity trans "")))))
945 (setq dic (cons (cons key trans) dic))) 945 (setq dic (cons (cons key trans) dic)))
946 table))) 946 table)))
947 (setq dic (sort dic (lambda (x y) (string< (car x) (car y))))) 947 (setq dic (sort dic (lambda (x y) (string< (car x) (car y)))))
948 (goto-char (point-max)) 948 (goto-char (point-max))
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index 3713879e3b6..67020b76ecb 100644
--- a/lisp/isearchb.el
+++ b/lisp/isearchb.el
@@ -1,4 +1,4 @@
1;;; isearchb --- a marriage between iswitchb and isearch 1;;; isearchb.el --- a marriage between iswitchb and isearch -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2004-2021 Free Software Foundation, Inc. 3;; Copyright (C) 2004-2021 Free Software Foundation, Inc.
4 4
@@ -89,13 +89,11 @@
89 "Number of idle seconds before isearchb turns itself off. 89 "Number of idle seconds before isearchb turns itself off.
90If nil, don't use a timeout." 90If nil, don't use a timeout."
91 :type '(choice (integer :tag "Seconds") 91 :type '(choice (integer :tag "Seconds")
92 (const :tag "Disable" nil)) 92 (const :tag "Disable" nil)))
93 :group 'isearchb)
94 93
95(defcustom isearchb-show-completions t 94(defcustom isearchb-show-completions t
96 "If non-nil, show possible completions in the minibuffer." 95 "If non-nil, show possible completions in the minibuffer."
97 :type 'boolean 96 :type 'boolean)
98 :group 'isearchb)
99 97
100(defvar isearchb-start-buffer nil) 98(defvar isearchb-start-buffer nil)
101(defvar isearchb-last-buffer nil) 99(defvar isearchb-last-buffer nil)
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index c9210c62514..412751bf450 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -477,31 +477,31 @@ With value nil, inhibit any automatic allout-mode activation.")
477 477
478(custom-autoload 'allout-auto-activation "allout" nil) 478(custom-autoload 'allout-auto-activation "allout" nil)
479 479
480(put 'allout-use-hanging-indents 'safe-local-variable 'booleanp) 480(put 'allout-use-hanging-indents 'safe-local-variable #'booleanp)
481 481
482(put 'allout-reindent-bodies 'safe-local-variable (lambda (x) (memq x '(nil t text force)))) 482(put 'allout-reindent-bodies 'safe-local-variable (lambda (x) (memq x '(nil t text force))))
483 483
484(put 'allout-show-bodies 'safe-local-variable 'booleanp) 484(put 'allout-show-bodies 'safe-local-variable #'booleanp)
485 485
486(put 'allout-header-prefix 'safe-local-variable 'stringp) 486(put 'allout-header-prefix 'safe-local-variable #'stringp)
487 487
488(put 'allout-primary-bullet 'safe-local-variable 'stringp) 488(put 'allout-primary-bullet 'safe-local-variable #'stringp)
489 489
490(put 'allout-plain-bullets-string 'safe-local-variable 'stringp) 490(put 'allout-plain-bullets-string 'safe-local-variable #'stringp)
491 491
492(put 'allout-distinctive-bullets-string 'safe-local-variable 'stringp) 492(put 'allout-distinctive-bullets-string 'safe-local-variable #'stringp)
493 493
494(put 'allout-use-mode-specific-leader 'safe-local-variable (lambda (x) (or (memq x '(t nil allout-mode-leaders comment-start)) (stringp x)))) 494(put 'allout-use-mode-specific-leader 'safe-local-variable (lambda (x) (or (memq x '(t nil allout-mode-leaders comment-start)) (stringp x))))
495 495
496(put 'allout-old-style-prefixes 'safe-local-variable 'booleanp) 496(put 'allout-old-style-prefixes 'safe-local-variable #'booleanp)
497 497
498(put 'allout-stylish-prefixes 'safe-local-variable 'booleanp) 498(put 'allout-stylish-prefixes 'safe-local-variable #'booleanp)
499 499
500(put 'allout-numbered-bullet 'safe-local-variable 'string-or-null-p) 500(put 'allout-numbered-bullet 'safe-local-variable #'string-or-null-p)
501 501
502(put 'allout-file-xref-bullet 'safe-local-variable 'string-or-null-p) 502(put 'allout-file-xref-bullet 'safe-local-variable #'string-or-null-p)
503 503
504(put 'allout-presentation-padding 'safe-local-variable 'integerp) 504(put 'allout-presentation-padding 'safe-local-variable #'integerp)
505 505
506(put 'allout-layout 'safe-local-variable (lambda (x) (or (numberp x) (listp x) (memq x '(: * + -))))) 506(put 'allout-layout 'safe-local-variable (lambda (x) (or (numberp x) (listp x) (memq x '(: * + -)))))
507 507
@@ -784,7 +784,7 @@ OPEN: A TOPIC that is not CLOSED, though its OFFSPRING or BODY may be.
784 784
785\(fn &optional ARG)" t nil) 785\(fn &optional ARG)" t nil)
786 786
787(defalias 'outlinify-sticky 'outlineify-sticky) 787(defalias 'outlinify-sticky #'outlineify-sticky)
788 788
789(autoload 'outlineify-sticky "allout" "\ 789(autoload 'outlineify-sticky "allout" "\
790Activate outline mode and establish file var so it is started subsequently. 790Activate outline mode and establish file var so it is started subsequently.
@@ -827,7 +827,7 @@ See `allout-widgets-mode' for allout widgets mode features.")
827 827
828(custom-autoload 'allout-widgets-auto-activation "allout-widgets" nil) 828(custom-autoload 'allout-widgets-auto-activation "allout-widgets" nil)
829 829
830(put 'allout-widgets-mode-inhibit 'safe-local-variable 'booleanp) 830(put 'allout-widgets-mode-inhibit 'safe-local-variable #'booleanp)
831 831
832(autoload 'allout-widgets-mode "allout-widgets" "\ 832(autoload 'allout-widgets-mode "allout-widgets" "\
833Toggle Allout Widgets mode. 833Toggle Allout Widgets mode.
@@ -1161,11 +1161,11 @@ Returns list of symbols and documentation found.
1161(autoload 'archive-mode "arc-mode" "\ 1161(autoload 'archive-mode "arc-mode" "\
1162Major mode for viewing an archive file in a dired-like way. 1162Major mode for viewing an archive file in a dired-like way.
1163You can move around using the usual cursor motion commands. 1163You can move around using the usual cursor motion commands.
1164Letters no longer insert themselves. 1164Letters no longer insert themselves.\\<archive-mode-map>
1165Type `e' to pull a file out of the archive and into its own buffer; 1165Type \\[archive-extract] to pull a file out of the archive and into its own buffer;
1166or click mouse-2 on the file's line in the archive mode buffer. 1166or click mouse-2 on the file's line in the archive mode buffer.
1167 1167
1168If you edit a sub-file of this archive (as with the `e' command) and 1168If you edit a sub-file of this archive (as with the \\[archive-extract] command) and
1169save it, the contents of that buffer will be saved back into the 1169save it, the contents of that buffer will be saved back into the
1170archive. 1170archive.
1171 1171
@@ -1539,7 +1539,7 @@ ENTRY is the name of a password-store entry.
1539The key used to retrieve the password is the symbol `secret'. 1539The key used to retrieve the password is the symbol `secret'.
1540 1540
1541The convention used as the format for a password-store file is 1541The convention used as the format for a password-store file is
1542the following (see http://www.passwordstore.org/#organization): 1542the following (see https://www.passwordstore.org/#organization):
1543 1543
1544secret 1544secret
1545key1: value1 1545key1: value1
@@ -1995,6 +1995,20 @@ seconds.
1995;;;;;; 0 0)) 1995;;;;;; 0 0))
1996;;; Generated autoloads from emacs-lisp/benchmark.el 1996;;; Generated autoloads from emacs-lisp/benchmark.el
1997 1997
1998(autoload 'benchmark-call "benchmark" "\
1999Measure the run time of calling FUNC a number REPETITIONS of times.
2000The result is a list (TIME GC GCTIME)
2001where TIME is the total time it took, in seconds.
2002GCTIME is the amount of time that was spent in the GC
2003and GC is the number of times the GC was called.
2004
2005REPETITIONS can also be a floating point number, in which case it
2006specifies a minimum number of seconds that the benchmark execution
2007should take. In that case the return value is prepended with the
2008number of repetitions actually used.
2009
2010\(fn FUNC &optional REPETITIONS)" nil nil)
2011
1998(autoload 'benchmark-run "benchmark" "\ 2012(autoload 'benchmark-run "benchmark" "\
1999Time execution of FORMS. 2013Time execution of FORMS.
2000If REPETITIONS is supplied as a number, run FORMS that many times, 2014If REPETITIONS is supplied as a number, run FORMS that many times,
@@ -2024,6 +2038,8 @@ Interactively, REPETITIONS is taken from the prefix arg, and
2024the command prompts for the form to benchmark. 2038the command prompts for the form to benchmark.
2025For non-interactive use see also `benchmark-run' and 2039For non-interactive use see also `benchmark-run' and
2026`benchmark-run-compiled'. 2040`benchmark-run-compiled'.
2041FORM can also be a function in which case we measure the time it takes
2042to call it without any argument.
2027 2043
2028\(fn REPETITIONS FORM)" t nil) 2044\(fn REPETITIONS FORM)" t nil)
2029 2045
@@ -2035,7 +2051,7 @@ The return value is the value of the final form in BODY.
2035 2051
2036(function-put 'benchmark-progn 'lisp-indent-function '0) 2052(function-put 'benchmark-progn 'lisp-indent-function '0)
2037 2053
2038(register-definition-prefixes "benchmark" '("benchmark-elapse")) 2054(register-definition-prefixes "benchmark" '("benchmark-"))
2039 2055
2040;;;*** 2056;;;***
2041 2057
@@ -4794,7 +4810,7 @@ element to judge if that element should be excluded from the list.
4794The buffer is left in Command History mode." t nil) 4810The buffer is left in Command History mode." t nil)
4795 4811
4796(autoload 'command-history "chistory" "\ 4812(autoload 'command-history "chistory" "\
4797Examine commands from `command-history' in a buffer. 4813Examine commands from variable `command-history' in a buffer.
4798The number of commands listed is controlled by `list-command-history-max'. 4814The number of commands listed is controlled by `list-command-history-max'.
4799The command history is filtered by `list-command-history-filter' if non-nil. 4815The command history is filtered by `list-command-history-filter' if non-nil.
4800Use \\<command-history-map>\\[command-history-repeat] to repeat the command on the current line. 4816Use \\<command-history-map>\\[command-history-repeat] to repeat the command on the current line.
@@ -4892,8 +4908,12 @@ all methods of NAME have to use the same set of arguments for dispatch.
4892Each dispatch argument and TYPE are specified in ARGS where the corresponding 4908Each dispatch argument and TYPE are specified in ARGS where the corresponding
4893formal argument appears as (VAR TYPE) rather than just VAR. 4909formal argument appears as (VAR TYPE) rather than just VAR.
4894 4910
4895The optional second argument QUALIFIER is a specifier that 4911The optional EXTRA element, on the form `:extra STRING', allows
4896modifies how the method is combined with other methods, including: 4912you to add more methods for the same specializers and qualifiers.
4913These are distinguished by STRING.
4914
4915The optional argument QUALIFIER is a specifier that modifies how
4916the method is combined with other methods, including:
4897 :before - Method will be called before the primary 4917 :before - Method will be called before the primary
4898 :after - Method will be called after the primary 4918 :after - Method will be called after the primary
4899 :around - Method will be called around everything else 4919 :around - Method will be called around everything else
@@ -4910,9 +4930,9 @@ method to be applicable.
4910The set of acceptable TYPEs (also called \"specializers\") is defined 4930The set of acceptable TYPEs (also called \"specializers\") is defined
4911\(and can be extended) by the various methods of `cl-generic-generalizers'. 4931\(and can be extended) by the various methods of `cl-generic-generalizers'.
4912 4932
4913\(fn NAME [QUALIFIER] ARGS &rest [DOCSTRING] BODY)" nil t) 4933\(fn NAME [EXTRA] [QUALIFIER] ARGS &rest [DOCSTRING] BODY)" nil t)
4914 4934
4915(function-put 'cl-defmethod 'doc-string-elt '3) 4935(function-put 'cl-defmethod 'doc-string-elt 'cl--defmethod-doc-pos)
4916 4936
4917(function-put 'cl-defmethod 'lisp-indent-function 'defun) 4937(function-put 'cl-defmethod 'lisp-indent-function 'defun)
4918 4938
@@ -6769,6 +6789,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message.
6769 6789
6770\(fn EVENT)" t nil) 6790\(fn EVENT)" t nil)
6771 6791
6792(function-put 'dbus-handle-event 'completion-predicate #'ignore)
6793
6772(autoload 'dbus-monitor "dbus" "\ 6794(autoload 'dbus-monitor "dbus" "\
6773Invoke `dbus-register-monitor' interactively, and switch to the buffer. 6795Invoke `dbus-register-monitor' interactively, and switch to the buffer.
6774BUS is either a Lisp keyword, `:system' or `:session', or a 6796BUS is either a Lisp keyword, `:system' or `:session', or a
@@ -10614,7 +10636,7 @@ be invoked for the values of the other parameters.
10614 10636
10615\(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) PASSWORD (FULL-NAME (erc-compute-full-name)))" t nil) 10637\(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) PASSWORD (FULL-NAME (erc-compute-full-name)))" t nil)
10616 10638
10617(defalias 'erc-select 'erc) 10639(defalias 'erc-select #'erc)
10618 10640
10619(autoload 'erc-tls "erc" "\ 10641(autoload 'erc-tls "erc" "\
10620Interactively select TLS connection parameters and run ERC. 10642Interactively select TLS connection parameters and run ERC.
@@ -10737,7 +10759,7 @@ and how to display message.
10737 10759
10738\(fn SELECTOR &optional OUTPUT-BUFFER-NAME MESSAGE-FN)" t nil) 10760\(fn SELECTOR &optional OUTPUT-BUFFER-NAME MESSAGE-FN)" t nil)
10739 10761
10740(defalias 'ert 'ert-run-tests-interactively) 10762(defalias 'ert #'ert-run-tests-interactively)
10741 10763
10742(autoload 'ert-describe-test "ert" "\ 10764(autoload 'ert-describe-test "ert" "\
10743Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). 10765Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test).
@@ -11948,6 +11970,13 @@ Besides the choice of face, it is the same as `buffer-face-mode'.
11948 11970
11949;;;*** 11971;;;***
11950 11972
11973;;;### (autoloads nil "facemenu" "facemenu.el" (0 0 0 0))
11974;;; Generated autoloads from facemenu.el
11975
11976(register-definition-prefixes "facemenu" '("facemenu-" "list-colors-"))
11977
11978;;;***
11979
11951;;;### (autoloads nil "faceup" "emacs-lisp/faceup.el" (0 0 0 0)) 11980;;;### (autoloads nil "faceup" "emacs-lisp/faceup.el" (0 0 0 0))
11952;;; Generated autoloads from emacs-lisp/faceup.el 11981;;; Generated autoloads from emacs-lisp/faceup.el
11953(push (purecopy '(faceup 0 0 6)) package--builtin-versions) 11982(push (purecopy '(faceup 0 0 6)) package--builtin-versions)
@@ -12212,6 +12241,8 @@ Otherwise, signal a `file-notify-error'.
12212 12241
12213\(fn OBJECT)" t nil) 12242\(fn OBJECT)" t nil)
12214 12243
12244(function-put 'file-notify-handle-event 'completion-predicate #'ignore)
12245
12215(register-definition-prefixes "filenotify" '("file-notify-")) 12246(register-definition-prefixes "filenotify" '("file-notify-"))
12216 12247
12217;;;*** 12248;;;***
@@ -12711,7 +12742,6 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP.
12711 12742
12712;;;### (autoloads nil "finder" "finder.el" (0 0 0 0)) 12743;;;### (autoloads nil "finder" "finder.el" (0 0 0 0))
12713;;; Generated autoloads from finder.el 12744;;; Generated autoloads from finder.el
12714(push (purecopy '(finder 1 0)) package--builtin-versions)
12715 12745
12716(autoload 'finder-list-keywords "finder" "\ 12746(autoload 'finder-list-keywords "finder" "\
12717Display descriptions of the keywords in the Finder buffer." t nil) 12747Display descriptions of the keywords in the Finder buffer." t nil)
@@ -12780,7 +12810,7 @@ lines.
12780(autoload 'flymake-log "flymake" "\ 12810(autoload 'flymake-log "flymake" "\
12781Log, at level LEVEL, the message MSG formatted with ARGS. 12811Log, at level LEVEL, the message MSG formatted with ARGS.
12782LEVEL is passed to `display-warning', which is used to display 12812LEVEL is passed to `display-warning', which is used to display
12783the warning. If this form is included in a byte-compiled file, 12813the warning. If this form is included in a file,
12784the generated warning contains an indication of the file that 12814the generated warning contains an indication of the file that
12785generated it. 12815generated it.
12786 12816
@@ -14390,15 +14420,15 @@ If FORCE is non-nil, replace the old ones.
14390Minor mode for providing mailing-list commands. 14420Minor mode for providing mailing-list commands.
14391 14421
14392If called interactively, toggle `Gnus-Mailing-List mode'. If the 14422If called interactively, toggle `Gnus-Mailing-List mode'. If the
14393prefix argument is positive, enable the mode, and if it is zero 14423prefix argument is positive, enable the mode, and if it is zero or
14394or negative, disable the mode. 14424negative, disable the mode.
14395 14425
14396If called from Lisp, toggle the mode if ARG is `toggle'. Enable 14426If called from Lisp, toggle the mode if ARG is `toggle'. Enable the
14397the mode if ARG is nil, omitted, or is a positive number. 14427mode if ARG is nil, omitted, or is a positive number. Disable the
14398Disable the mode if ARG is a negative number. 14428mode if ARG is a negative number.
14399 14429
14400The mode's hook is called both when the mode is enabled and when 14430The mode's hook is called both when the mode is enabled and when it is
14401it is disabled. 14431disabled.
14402 14432
14403\\{gnus-mailing-list-mode-map} 14433\\{gnus-mailing-list-mode-map}
14404 14434
@@ -16840,7 +16870,7 @@ buffers which are visiting a file.
16840 16870
16841(autoload 'ibuffer "ibuffer" "\ 16871(autoload 'ibuffer "ibuffer" "\
16842Begin using Ibuffer to edit a list of buffers. 16872Begin using Ibuffer to edit a list of buffers.
16843Type `h' after entering ibuffer for more information. 16873Type \\<ibuffer-mode-map>\\[describe-mode] after entering ibuffer for more information.
16844 16874
16845All arguments are optional. 16875All arguments are optional.
16846OTHER-WINDOW-P says to use another window. 16876OTHER-WINDOW-P says to use another window.
@@ -17126,7 +17156,7 @@ The main features of this mode are
17126 Use \\[idlwave-fill-paragraph] to refill a paragraph inside a 17156 Use \\[idlwave-fill-paragraph] to refill a paragraph inside a
17127 comment. The indentation of the second line of the paragraph 17157 comment. The indentation of the second line of the paragraph
17128 relative to the first will be retained. Use 17158 relative to the first will be retained. Use
17129 \\[idlwave-auto-fill-mode] to toggle auto-fill mode for these 17159 \\[auto-fill-mode] to toggle auto-fill mode for these
17130 comments. When the variable `idlwave-fill-comment-line-only' is 17160 comments. When the variable `idlwave-fill-comment-line-only' is
17131 nil, code can also be auto-filled and auto-indented. 17161 nil, code can also be auto-filled and auto-indented.
17132 17162
@@ -18594,25 +18624,6 @@ See Info node `(elisp)Defining Functions' for more details.
18594 18624
18595;;;*** 18625;;;***
18596 18626
18597;;;### (autoloads nil "inversion" "cedet/inversion.el" (0 0 0 0))
18598;;; Generated autoloads from cedet/inversion.el
18599(push (purecopy '(inversion 1 3)) package--builtin-versions)
18600
18601(autoload 'inversion-require-emacs "inversion" "\
18602Declare that you need either EMACS-VER, XEMACS-VER or SXEMACS-ver.
18603Only checks one based on which kind of Emacs is being run.
18604
18605This function is obsolete; do this instead:
18606 (when (version<= \"28.1\" emacs-version) ...)
18607
18608\(fn EMACS-VER XEMACS-VER SXEMACS-VER)" nil nil)
18609
18610(make-obsolete 'inversion-require-emacs 'nil '"28.1")
18611
18612(register-definition-prefixes "inversion" '("inversion-"))
18613
18614;;;***
18615
18616;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (0 18627;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (0
18617;;;;;; 0 0 0)) 18628;;;;;; 0 0 0))
18618;;; Generated autoloads from international/isearch-x.el 18629;;; Generated autoloads from international/isearch-x.el
@@ -19540,13 +19551,13 @@ A major mode to edit GNU ld script files
19540;;;;;; (0 0 0 0)) 19551;;;;;; (0 0 0 0))
19541;;; Generated autoloads from textmodes/less-css-mode.el 19552;;; Generated autoloads from textmodes/less-css-mode.el
19542 19553
19543(put 'less-css-compile-at-save 'safe-local-variable 'booleanp) 19554(put 'less-css-compile-at-save 'safe-local-variable #'booleanp)
19544 19555
19545(put 'less-css-lessc-options 'safe-local-variable t) 19556(put 'less-css-lessc-options 'safe-local-variable t)
19546 19557
19547(put 'less-css-output-directory 'safe-local-variable 'stringp) 19558(put 'less-css-output-directory 'safe-local-variable #'stringp)
19548 19559
19549(put 'less-css-input-file-name 'safe-local-variable 'stringp) 19560(put 'less-css-input-file-name 'safe-local-variable #'stringp)
19550 (add-to-list 'auto-mode-alist '("\\.less\\'" . less-css-mode)) 19561 (add-to-list 'auto-mode-alist '("\\.less\\'" . less-css-mode))
19551 19562
19552(autoload 'less-css-mode "less-css-mode" "\ 19563(autoload 'less-css-mode "less-css-mode" "\
@@ -20535,7 +20546,7 @@ Default bookmark handler for Man buffers.
20535 20546
20536;;;### (autoloads nil "map" "emacs-lisp/map.el" (0 0 0 0)) 20547;;;### (autoloads nil "map" "emacs-lisp/map.el" (0 0 0 0))
20537;;; Generated autoloads from emacs-lisp/map.el 20548;;; Generated autoloads from emacs-lisp/map.el
20538(push (purecopy '(map 2 1)) package--builtin-versions) 20549(push (purecopy '(map 3 0)) package--builtin-versions)
20539 20550
20540(register-definition-prefixes "map" '("map-")) 20551(register-definition-prefixes "map" '("map-"))
20541 20552
@@ -22087,6 +22098,32 @@ QUALITY can be:
22087;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0)) 22098;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0))
22088;;; Generated autoloads from mwheel.el 22099;;; Generated autoloads from mwheel.el
22089 22100
22101(defcustom mouse-wheel-mode t "\
22102Non-nil if Mouse-Wheel mode is enabled.
22103See the `mouse-wheel-mode' command
22104for a description of this minor mode.
22105Setting this variable directly does not take effect;
22106either customize it (see the info node `Easy Customization')
22107or call the function `mouse-wheel-mode'." :set #'custom-set-minor-mode :initialize 'custom-initialize-delay :group 'mouse :type 'boolean)
22108
22109(custom-autoload 'mouse-wheel-mode "mwheel" nil)
22110
22111(autoload 'mouse-wheel-mode "mwheel" "\
22112Toggle mouse wheel support (Mouse Wheel mode).
22113
22114If called interactively, toggle `Mouse-Wheel mode'. If the prefix
22115argument is positive, enable the mode, and if it is zero or negative,
22116disable the mode.
22117
22118If called from Lisp, toggle the mode if ARG is `toggle'. Enable the
22119mode if ARG is nil, omitted, or is a positive number. Disable the
22120mode if ARG is a negative number.
22121
22122The mode's hook is called both when the mode is enabled and when it is
22123disabled.
22124
22125\(fn &optional ARG)" t nil)
22126
22090(register-definition-prefixes "mwheel" '("mouse-wheel-" "mwheel-")) 22127(register-definition-prefixes "mwheel" '("mouse-wheel-" "mwheel-"))
22091 22128
22092;;;*** 22129;;;***
@@ -22347,7 +22384,7 @@ gnutls-boot (as returned by `gnutls-boot-parameters').
22347 22384
22348\(fn NAME BUFFER HOST SERVICE &rest PARAMETERS)" nil nil) 22385\(fn NAME BUFFER HOST SERVICE &rest PARAMETERS)" nil nil)
22349 22386
22350(defalias 'open-protocol-stream 'open-network-stream) 22387(define-obsolete-function-alias 'open-protocol-stream #'open-network-stream "26.1")
22351 22388
22352(register-definition-prefixes "network-stream" '("network-stream-")) 22389(register-definition-prefixes "network-stream" '("network-stream-"))
22353 22390
@@ -24041,6 +24078,8 @@ Turning on outline mode calls the value of `text-mode-hook' and then of
24041`outline-mode-hook', if they are non-nil. 24078`outline-mode-hook', if they are non-nil.
24042 24079
24043\(fn)" t nil) 24080\(fn)" t nil)
24081(put 'outline-minor-mode-cycle 'safe-local-variable 'booleanp)
24082(put 'outline-minor-mode-highlight 'safe-local-variable 'booleanp)
24044 24083
24045(autoload 'outline-minor-mode "outline" "\ 24084(autoload 'outline-minor-mode "outline" "\
24046Toggle Outline minor mode. 24085Toggle Outline minor mode.
@@ -24186,7 +24225,11 @@ directory.
24186 24225
24187(autoload 'package-install-selected-packages "package" "\ 24226(autoload 'package-install-selected-packages "package" "\
24188Ensure packages in `package-selected-packages' are installed. 24227Ensure packages in `package-selected-packages' are installed.
24189If some packages are not installed propose to install them." t nil) 24228If some packages are not installed, propose to install them.
24229If optional argument NOCONFIRM is non-nil, don't ask for
24230confirmation to install packages.
24231
24232\(fn &optional NOCONFIRM)" t nil)
24190 24233
24191(autoload 'package-reinstall "package" "\ 24234(autoload 'package-reinstall "package" "\
24192Reinstall package PKG. 24235Reinstall package PKG.
@@ -25898,6 +25941,13 @@ Save the result in `project-list-file' if the list of projects has changed.
25898 25941
25899\(fn PR)" nil nil) 25942\(fn PR)" nil nil)
25900 25943
25944(autoload 'project-remove-known-project "project" "\
25945Remove directory PROJECT-ROOT from the project list.
25946PROJECT-ROOT is the root directory of a known project listed in
25947the project list.
25948
25949\(fn PROJECT-ROOT)" t nil)
25950
25901(autoload 'project-known-project-roots "project" "\ 25951(autoload 'project-known-project-roots "project" "\
25902Return the list of root directories of all known projects." nil nil) 25952Return the list of root directories of all known projects." nil nil)
25903 25953
@@ -25906,19 +25956,6 @@ Execute an extended command in project root." t nil)
25906 25956
25907(function-put 'project-execute-extended-command 'interactive-only 'command-execute) 25957(function-put 'project-execute-extended-command 'interactive-only 'command-execute)
25908 25958
25909(defvar project-switch-commands '((project-find-file "Find file") (project-find-regexp "Find regexp") (project-dired "Dired") (project-vc-dir "VC-Dir") (project-eshell "Eshell")) "\
25910Alist mapping commands to descriptions.
25911Used by `project-switch-project' to construct a dispatch menu of
25912commands available upon \"switching\" to another project.
25913
25914Each element is of the form (COMMAND LABEL &optional KEY) where
25915COMMAND is the command to run when KEY is pressed. LABEL is used
25916to distinguish the menu entries in the dispatch menu. If KEY is
25917absent, COMMAND must be bound in `project-prefix-map', and the
25918key is looked up in that map.")
25919
25920(custom-autoload 'project-switch-commands "project" t)
25921
25922(autoload 'project-switch-project "project" "\ 25959(autoload 'project-switch-project "project" "\
25923\"Switch\" to another project by running an Emacs command. 25960\"Switch\" to another project by running an Emacs command.
25924The available commands are presented as a dispatch menu 25961The available commands are presented as a dispatch menu
@@ -26495,7 +26532,7 @@ Add one translation rule, KEY to TRANSLATION, in the current Quail package.
26495KEY is a string meaning a sequence of keystrokes to be translated. 26532KEY is a string meaning a sequence of keystrokes to be translated.
26496TRANSLATION is a character, a string, a vector, a Quail map, 26533TRANSLATION is a character, a string, a vector, a Quail map,
26497 a function, or a cons. 26534 a function, or a cons.
26498It it is a character, it is the sole translation of KEY. 26535If it is a character, it is the sole translation of KEY.
26499If it is a string, each character is a candidate for the translation. 26536If it is a string, each character is a candidate for the translation.
26500If it is a vector, each element (string or character) is a candidate 26537If it is a vector, each element (string or character) is a candidate
26501 for the translation. 26538 for the translation.
@@ -28351,24 +28388,7 @@ For more details, see Info node `(elisp) Extending Rx'.
28351 28388
28352(function-put 'rx-define 'lisp-indent-function 'defun) 28389(function-put 'rx-define 'lisp-indent-function 'defun)
28353 28390
28354(autoload 'rx--pcase-macroexpander "rx" "\ 28391(eval-and-compile (defun rx--pcase-macroexpander (&rest regexps) "A pattern that matches strings against `rx' REGEXPS in sexp form.\nREGEXPS are interpreted as in `rx'. The pattern matches any\nstring that is a match for REGEXPS, as if by `string-match'.\n\nIn addition to the usual `rx' syntax, REGEXPS can contain the\nfollowing constructs:\n\n (let REF RX...) binds the symbol REF to a submatch that matches\n the regular expressions RX. REF is bound in\n CODE to the string of the submatch or nil, but\n can also be used in `backref'.\n (backref REF) matches whatever the submatch REF matched.\n REF can be a number, as usual, or a name\n introduced by a previous (let REF ...)\n construct." (let* ((rx--pcase-vars nil) (regexp (rx--to-expr (rx--pcase-transform (cons 'seq regexps)))) (nvars (length rx--pcase-vars))) `(and (pred stringp) ,(if (zerop nvars) `(pred (string-match ,regexp)) `(app (lambda (s) (and (string-match ,regexp s) ,(rx--reduce-right (lambda (a b) `(cons ,a ,b)) (mapcar (lambda (i) `(match-string ,i s)) (number-sequence 1 nvars))))) ,(list '\` (rx--reduce-right #'cons (mapcar (lambda (name) (list '\, name)) (reverse rx--pcase-vars))))))))))
28355A pattern that matches strings against `rx' REGEXPS in sexp form.
28356REGEXPS are interpreted as in `rx'. The pattern matches any
28357string that is a match for REGEXPS, as if by `string-match'.
28358
28359In addition to the usual `rx' syntax, REGEXPS can contain the
28360following constructs:
28361
28362 (let REF RX...) binds the symbol REF to a submatch that matches
28363 the regular expressions RX. REF is bound in
28364 CODE to the string of the submatch or nil, but
28365 can also be used in `backref'.
28366 (backref REF) matches whatever the submatch REF matched.
28367 REF can be a number, as usual, or a name
28368 introduced by a previous (let REF ...)
28369 construct.
28370
28371\(fn &rest REGEXPS)" nil nil)
28372 28392
28373(define-symbol-prop 'rx--pcase-macroexpander 'edebug-form-spec 'nil) 28393(define-symbol-prop 'rx--pcase-macroexpander 'edebug-form-spec 'nil)
28374 28394
@@ -28863,14 +28883,6 @@ Major mode for editing Bovine grammars.
28863 28883
28864;;;*** 28884;;;***
28865 28885
28866;;;### (autoloads nil "semantic/grammar-wy" "cedet/semantic/grammar-wy.el"
28867;;;;;; (0 0 0 0))
28868;;; Generated autoloads from cedet/semantic/grammar-wy.el
28869
28870(register-definition-prefixes "semantic/grammar-wy" '("semantic-grammar-wy--"))
28871
28872;;;***
28873
28874;;;### (autoloads nil "semantic/java" "cedet/semantic/java.el" (0 28886;;;### (autoloads nil "semantic/java" "cedet/semantic/java.el" (0
28875;;;;;; 0 0 0)) 28887;;;;;; 0 0 0))
28876;;; Generated autoloads from cedet/semantic/java.el 28888;;; Generated autoloads from cedet/semantic/java.el
@@ -29500,7 +29512,7 @@ or Edit/Text Properties/Face commands.
29500Pages can have <a name=\"SOMENAME\">named points</a> and can link other points 29512Pages can have <a name=\"SOMENAME\">named points</a> and can link other points
29501to them with <a href=\"#SOMENAME\">see also somename</a>. In the same way <a 29513to them with <a href=\"#SOMENAME\">see also somename</a>. In the same way <a
29502href=\"URL\">see also URL</a> where URL is a filename relative to current 29514href=\"URL\">see also URL</a> where URL is a filename relative to current
29503directory, or absolute as in `http://www.cs.indiana.edu/elisp/w3/docs.html'. 29515directory, or absolute as in `https://www.cs.indiana.edu/elisp/w3/docs.html'.
29504 29516
29505Images in many formats can be inlined with <img src=\"URL\">. 29517Images in many formats can be inlined with <img src=\"URL\">.
29506 29518
@@ -31249,7 +31261,7 @@ Major-mode for writing SRecode macros.
31249 31261
31250\(fn)" t nil) 31262\(fn)" t nil)
31251 31263
31252(defalias 'srt-mode 'srecode-template-mode) 31264(defalias 'srt-mode #'srecode-template-mode)
31253 31265
31254(register-definition-prefixes "srecode/srt-mode" '("semantic-" "srecode-")) 31266(register-definition-prefixes "srecode/srt-mode" '("semantic-" "srecode-"))
31255 31267
@@ -31811,7 +31823,7 @@ Move the point under the table as shown below.
31811 +--------------+------+--------------------------------+ 31823 +--------------+------+--------------------------------+
31812 -!- 31824 -!-
31813 31825
31814Type M-x table-insert-row instead of \\[table-insert-row-column]. \\[table-insert-row-column] does not work 31826Type \\[table-insert-row] instead of \\[table-insert-row-column]. \\[table-insert-row-column] does not work
31815when the point is outside of the table. This insertion at 31827when the point is outside of the table. This insertion at
31816outside of the table effectively appends a row at the end. 31828outside of the table effectively appends a row at the end.
31817 31829
@@ -32108,11 +32120,11 @@ HTML:
32108 URL `https://www.w3.org' 32120 URL `https://www.w3.org'
32109 32121
32110LaTeX: 32122LaTeX:
32111 URL `http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/Tables.html' 32123 URL `https://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/Tables.html'
32112 32124
32113CALS (DocBook DTD): 32125CALS (DocBook DTD):
32114 URL `http://www.oasis-open.org/html/a502.htm' 32126 URL `https://www.oasis-open.org/html/a502.htm'
32115 URL `http://www.oreilly.com/catalog/docbook/chapter/book/table.html#AEN114751' 32127 URL `https://www.oreilly.com/catalog/docbook/chapter/book/table.html#AEN114751'
32116 32128
32117\(fn LANGUAGE &optional DEST-BUFFER CAPTION)" t nil) 32129\(fn LANGUAGE &optional DEST-BUFFER CAPTION)" t nil)
32118 32130
@@ -32320,12 +32332,12 @@ Connect to the Emacs talk group from the current X display or tty frame." t nil)
32320(autoload 'tar-mode "tar-mode" "\ 32332(autoload 'tar-mode "tar-mode" "\
32321Major mode for viewing a tar file as a dired-like listing of its contents. 32333Major mode for viewing a tar file as a dired-like listing of its contents.
32322You can move around using the usual cursor motion commands. 32334You can move around using the usual cursor motion commands.
32323Letters no longer insert themselves. 32335Letters no longer insert themselves.\\<tar-mode-map>
32324Type `e' to pull a file out of the tar file and into its own buffer; 32336Type \\[tar-extract] to pull a file out of the tar file and into its own buffer;
32325or click mouse-2 on the file's line in the Tar mode buffer. 32337or click mouse-2 on the file's line in the Tar mode buffer.
32326Type `c' to copy an entry from the tar file into another file on disk. 32338Type \\[tar-copy] to copy an entry from the tar file into another file on disk.
32327 32339
32328If you edit a sub-file of this archive (as with the `e' command) and 32340If you edit a sub-file of this archive (as with the \\[tar-extract] command) and
32329save it with \\[save-buffer], the contents of that buffer will be 32341save it with \\[save-buffer], the contents of that buffer will be
32330saved back into the tar-file buffer; in this way you can edit a file 32342saved back into the tar-file buffer; in this way you can edit a file
32331inside of a tar archive without extracting it and re-archiving it. 32343inside of a tar archive without extracting it and re-archiving it.
@@ -32679,11 +32691,11 @@ says which mode to use.
32679 32691
32680\(fn)" t nil) 32692\(fn)" t nil)
32681 32693
32682(defalias 'TeX-mode 'tex-mode) 32694(defalias 'TeX-mode #'tex-mode)
32683 32695
32684(defalias 'plain-TeX-mode 'plain-tex-mode) 32696(defalias 'plain-TeX-mode #'plain-tex-mode)
32685 32697
32686(defalias 'LaTeX-mode 'latex-mode) 32698(defalias 'LaTeX-mode #'latex-mode)
32687 32699
32688(autoload 'plain-tex-mode "tex-mode" "\ 32700(autoload 'plain-tex-mode "tex-mode" "\
32689Major mode for editing files of input for plain TeX. 32701Major mode for editing files of input for plain TeX.
@@ -33339,7 +33351,11 @@ point.
33339\(fn &optional FORMAT HERE)" t nil) 33351\(fn &optional FORMAT HERE)" t nil)
33340 33352
33341(autoload 'emacs-init-time "time" "\ 33353(autoload 'emacs-init-time "time" "\
33342Return a string giving the duration of the Emacs initialization." t nil) 33354Return a string giving the duration of the Emacs initialization.
33355FORMAT is a string to format the result, using `format'. If nil,
33356the default format \"%f seconds\" is used.
33357
33358\(fn &optional FORMAT)" t nil)
33343 33359
33344(register-definition-prefixes "time" '("display-time-" "legacy-style-world-list" "time--display-world-list" "world-clock-" "zoneinfo-style-world-list")) 33360(register-definition-prefixes "time" '("display-time-" "legacy-style-world-list" "time--display-world-list" "world-clock-" "zoneinfo-style-world-list"))
33345 33361
@@ -34025,6 +34041,13 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
34025 34041
34026;;;*** 34042;;;***
34027 34043
34044;;;### (autoloads nil "tramp-fuse" "net/tramp-fuse.el" (0 0 0 0))
34045;;; Generated autoloads from net/tramp-fuse.el
34046
34047(register-definition-prefixes "tramp-fuse" '("tramp-fuse-"))
34048
34049;;;***
34050
34028;;;### (autoloads nil "tramp-gvfs" "net/tramp-gvfs.el" (0 0 0 0)) 34051;;;### (autoloads nil "tramp-gvfs" "net/tramp-gvfs.el" (0 0 0 0))
34029;;; Generated autoloads from net/tramp-gvfs.el 34052;;; Generated autoloads from net/tramp-gvfs.el
34030 34053
@@ -34062,6 +34085,13 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
34062 34085
34063;;;*** 34086;;;***
34064 34087
34088;;;### (autoloads nil "tramp-sshfs" "net/tramp-sshfs.el" (0 0 0 0))
34089;;; Generated autoloads from net/tramp-sshfs.el
34090
34091(register-definition-prefixes "tramp-sshfs" '("tramp-sshfs-"))
34092
34093;;;***
34094
34065;;;### (autoloads nil "tramp-sudoedit" "net/tramp-sudoedit.el" (0 34095;;;### (autoloads nil "tramp-sudoedit" "net/tramp-sudoedit.el" (0
34066;;;;;; 0 0 0)) 34096;;;;;; 0 0 0))
34067;;; Generated autoloads from net/tramp-sudoedit.el 34097;;; Generated autoloads from net/tramp-sudoedit.el
@@ -34134,8 +34164,8 @@ resumed later.
34134;;;;;; 0 0)) 34164;;;;;; 0 0))
34135;;; Generated autoloads from textmodes/two-column.el 34165;;; Generated autoloads from textmodes/two-column.el
34136 (autoload '2C-command "two-column" () t 'keymap) 34166 (autoload '2C-command "two-column" () t 'keymap)
34137 (global-set-key "\C-x6" '2C-command) 34167 (global-set-key "\C-x6" #'2C-command)
34138 (global-set-key [f2] '2C-command) 34168 (global-set-key [f2] #'2C-command)
34139 34169
34140(autoload '2C-two-columns "two-column" "\ 34170(autoload '2C-two-columns "two-column" "\
34141Split current window vertically for two-column editing. 34171Split current window vertically for two-column editing.
@@ -35240,7 +35270,12 @@ The buffer in question is current when this function is called.
35240 35270
35241\(fn FILENAME)" nil nil) 35271\(fn FILENAME)" nil nil)
35242 35272
35243(register-definition-prefixes "userlock" '("ask-user-about-" "file-" "userlock--check-content-unchanged")) 35273(autoload 'userlock--handle-unlock-error "userlock" "\
35274Report an ERROR that occurred while unlocking a file.
35275
35276\(fn ERROR)" nil nil)
35277
35278(register-definition-prefixes "userlock" '("ask-user-about-" "file-" "userlock--"))
35244 35279
35245;;;*** 35280;;;***
35246 35281
@@ -36027,7 +36062,7 @@ Key bindings:
36027;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el" 36062;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el"
36028;;;;;; (0 0 0 0)) 36063;;;;;; (0 0 0 0))
36029;;; Generated autoloads from progmodes/verilog-mode.el 36064;;; Generated autoloads from progmodes/verilog-mode.el
36030(push (purecopy '(verilog-mode 2021 2 2 263931197)) package--builtin-versions) 36065(push (purecopy '(verilog-mode 2021 3 30 243771231)) package--builtin-versions)
36031 36066
36032(autoload 'verilog-mode "verilog-mode" "\ 36067(autoload 'verilog-mode "verilog-mode" "\
36033Major mode for editing Verilog code. 36068Major mode for editing Verilog code.
@@ -36782,7 +36817,7 @@ Don't change this variable directly, you must change it by one of the
36782functions that enable or disable view mode.") 36817functions that enable or disable view mode.")
36783 36818
36784(autoload 'kill-buffer-if-not-modified "view" "\ 36819(autoload 'kill-buffer-if-not-modified "view" "\
36785Like `kill-buffer', but does nothing if the buffer is modified. 36820Like `kill-buffer', but does nothing if buffer BUF is modified.
36786 36821
36787\(fn BUF)" nil nil) 36822\(fn BUF)" nil nil)
36788 36823
@@ -36848,7 +36883,7 @@ file: Users may suspend viewing in order to modify the buffer.
36848Exiting View mode will then discard the user's edits. Setting 36883Exiting View mode will then discard the user's edits. Setting
36849EXIT-ACTION to `kill-buffer-if-not-modified' avoids this. 36884EXIT-ACTION to `kill-buffer-if-not-modified' avoids this.
36850 36885
36851This function does not enable View mode if the buffer's major-mode 36886This function does not enable View mode if the buffer's major mode
36852has a `special' mode-class, because such modes usually have their 36887has a `special' mode-class, because such modes usually have their
36853own View-like bindings. 36888own View-like bindings.
36854 36889
@@ -36870,7 +36905,7 @@ Optional argument EXIT-ACTION is either nil or a function with buffer as
36870argument. This function is called when finished viewing buffer. Use 36905argument. This function is called when finished viewing buffer. Use
36871this argument instead of explicitly setting `view-exit-action'. 36906this argument instead of explicitly setting `view-exit-action'.
36872 36907
36873This function does not enable View mode if the buffer's major-mode 36908This function does not enable View mode if the buffer's major mode
36874has a `special' mode-class, because such modes usually have their 36909has a `special' mode-class, because such modes usually have their
36875own View-like bindings. 36910own View-like bindings.
36876 36911
@@ -36892,7 +36927,7 @@ Optional argument EXIT-ACTION is either nil or a function with buffer as
36892argument. This function is called when finished viewing buffer. Use 36927argument. This function is called when finished viewing buffer. Use
36893this argument instead of explicitly setting `view-exit-action'. 36928this argument instead of explicitly setting `view-exit-action'.
36894 36929
36895This function does not enable View mode if the buffer's major-mode 36930This function does not enable View mode if the buffer's major mode
36896has a `special' mode-class, because such modes usually have their 36931has a `special' mode-class, because such modes usually have their
36897own View-like bindings. 36932own View-like bindings.
36898 36933
@@ -38341,15 +38376,15 @@ Zone out, completely." t nil)
38341;;;;;; "cedet/semantic/db-typecache.el" "cedet/semantic/db.el" "cedet/semantic/debug.el" 38376;;;;;; "cedet/semantic/db-typecache.el" "cedet/semantic/db.el" "cedet/semantic/debug.el"
38342;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el" 38377;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el"
38343;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/edit.el" 38378;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/edit.el"
38344;;;;;; "cedet/semantic/find.el" "cedet/semantic/format.el" "cedet/semantic/html.el" 38379;;;;;; "cedet/semantic/find.el" "cedet/semantic/format.el" "cedet/semantic/grammar-wy.el"
38345;;;;;; "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" "cedet/semantic/idle.el" 38380;;;;;; "cedet/semantic/html.el" "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el"
38346;;;;;; "cedet/semantic/imenu.el" "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" 38381;;;;;; "cedet/semantic/idle.el" "cedet/semantic/imenu.el" "cedet/semantic/lex-spp.el"
38347;;;;;; "cedet/semantic/mru-bookmark.el" "cedet/semantic/scope.el" 38382;;;;;; "cedet/semantic/lex.el" "cedet/semantic/mru-bookmark.el"
38348;;;;;; "cedet/semantic/senator.el" "cedet/semantic/sort.el" "cedet/semantic/symref.el" 38383;;;;;; "cedet/semantic/scope.el" "cedet/semantic/senator.el" "cedet/semantic/sort.el"
38349;;;;;; "cedet/semantic/symref/cscope.el" "cedet/semantic/symref/global.el" 38384;;;;;; "cedet/semantic/symref.el" "cedet/semantic/symref/cscope.el"
38350;;;;;; "cedet/semantic/symref/grep.el" "cedet/semantic/symref/idutils.el" 38385;;;;;; "cedet/semantic/symref/global.el" "cedet/semantic/symref/grep.el"
38351;;;;;; "cedet/semantic/symref/list.el" "cedet/semantic/tag-file.el" 38386;;;;;; "cedet/semantic/symref/idutils.el" "cedet/semantic/symref/list.el"
38352;;;;;; "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" 38387;;;;;; "cedet/semantic/tag-file.el" "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el"
38353;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el" 38388;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el"
38354;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el" 38389;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el"
38355;;;;;; "cedet/semantic/wisent/javat-wy.el" "cedet/semantic/wisent/js-wy.el" 38390;;;;;; "cedet/semantic/wisent/javat-wy.el" "cedet/semantic/wisent/js-wy.el"
@@ -38381,7 +38416,7 @@ Zone out, completely." t nil)
38381;;;;;; "eshell/em-ls.el" "eshell/em-pred.el" "eshell/em-prompt.el" 38416;;;;;; "eshell/em-ls.el" "eshell/em-pred.el" "eshell/em-prompt.el"
38382;;;;;; "eshell/em-rebind.el" "eshell/em-script.el" "eshell/em-smart.el" 38417;;;;;; "eshell/em-rebind.el" "eshell/em-script.el" "eshell/em-smart.el"
38383;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el" 38418;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el"
38384;;;;;; "eshell/em-xtra.el" "facemenu.el" "faces.el" "files.el" "font-core.el" 38419;;;;;; "eshell/em-xtra.el" "faces.el" "files.el" "font-core.el"
38385;;;;;; "font-lock.el" "format.el" "frame.el" "help.el" "hfy-cmap.el" 38420;;;;;; "font-lock.el" "format.el" "frame.el" "help.el" "hfy-cmap.el"
38386;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charprop.el" 38421;;;;;; "ibuf-ext.el" "indent.el" "international/characters.el" "international/charprop.el"
38387;;;;;; "international/charscript.el" "international/cp51932.el" 38422;;;;;; "international/charscript.el" "international/cp51932.el"
diff --git a/lisp/linum.el b/lisp/linum.el
index f9761d22c6e..b0281d366cd 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -31,9 +31,6 @@
31 31
32;;; Code: 32;;; Code:
33 33
34(defconst linum-version "0.9x")
35(make-obsolete-variable 'linum-version nil "28.1")
36
37(defvar-local linum-overlays nil "Overlays used in this buffer.") 34(defvar-local linum-overlays nil "Overlays used in this buffer.")
38(defvar-local linum-available nil "Overlays available for reuse.") 35(defvar-local linum-available nil "Overlays available for reuse.")
39(defvar linum-before-numbering-hook nil 36(defvar linum-before-numbering-hook nil
@@ -244,6 +241,9 @@ Linum mode is a buffer-local minor mode."
244 ;; continue standard unloading 241 ;; continue standard unloading
245 nil) 242 nil)
246 243
244(defconst linum-version "0.9x")
245(make-obsolete-variable 'linum-version 'emacs-version "28.1")
246
247(provide 'linum) 247(provide 'linum)
248 248
249;;; linum.el ends here 249;;; linum.el ends here
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index a60d6b29095..59c002d3078 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -82,12 +82,6 @@ A library name is equivalent to the file name that `load-library' would load."
82 (when (eq (car-safe x) 'require) 82 (when (eq (car-safe x) 'require)
83 (push (cdr x) requires))))) 83 (push (cdr x) requires)))))
84 84
85(defsubst file-set-intersect (p q)
86 "Return the set intersection of two lists."
87 (let (ret)
88 (dolist (x p ret)
89 (when (memq x q) (push x ret)))))
90
91(defun file-dependents (file) 85(defun file-dependents (file)
92 "Return the list of loaded libraries that depend on FILE. 86 "Return the list of loaded libraries that depend on FILE.
93This can include FILE itself. 87This can include FILE itself.
@@ -97,7 +91,7 @@ A library name is equivalent to the file name that `load-library' would load."
97 (dependents nil)) 91 (dependents nil))
98 (dolist (x load-history dependents) 92 (dolist (x load-history dependents)
99 (when (and (stringp (car x)) 93 (when (and (stringp (car x))
100 (file-set-intersect provides (file-requires (car x)))) 94 (seq-intersection provides (file-requires (car x)) #'eq))
101 (push (car x) dependents))))) 95 (push (car x) dependents)))))
102 96
103(defun read-feature (prompt &optional loaded-p) 97(defun read-feature (prompt &optional loaded-p)
@@ -322,6 +316,13 @@ something strange, such as redefining an Emacs function."
322 ;; Don't return load-history, it is not useful. 316 ;; Don't return load-history, it is not useful.
323 nil) 317 nil)
324 318
319;; Obsolete.
320
321(defsubst file-set-intersect (p q)
322 "Return the set intersection of two lists."
323 (declare (obsolete seq-intersection "28.1"))
324 (nreverse (seq-intersection p q #'eq)))
325
325(provide 'loadhist) 326(provide 'loadhist)
326 327
327;;; loadhist.el ends here 328;;; loadhist.el ends here
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index 7fbdfefc461..88fb0866856 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -2236,13 +2236,13 @@ place. It affects how `mail-extract-address-components' works."
2236 2236
2237 2237
2238;(let ((all nil)) 2238;(let ((all nil))
2239; (mapatoms #'(lambda (x) 2239; (mapatoms (lambda (x)
2240; (if (and (boundp x) 2240; (if (and (boundp x)
2241; (string-match "^mail-extr-" (symbol-name x))) 2241; (string-match "^mail-extr-" (symbol-name x)))
2242; (setq all (cons x all))))) 2242; (setq all (cons x all)))))
2243; (setq all (sort all #'string-lessp)) 2243; (setq all (sort all #'string-lessp))
2244; (cons 'setq 2244; (cons 'setq
2245; (apply 'nconc (mapcar #'(lambda (x) 2245; (apply 'nconc (mapcar (lambda (x)
2246; (list x (symbol-value x))) 2246; (list x (symbol-value x)))
2247; all)))) 2247; all))))
2248 2248
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index c7960f85043..455ae7feefc 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -3671,9 +3671,9 @@ If BUFFER is not swapped, yank out of its message viewer buffer."
3671 (push (cons "cc" cc) other-headers) 3671 (push (cons "cc" cc) other-headers)
3672 (push (cons "in-reply-to" in-reply-to) other-headers) 3672 (push (cons "in-reply-to" in-reply-to) other-headers)
3673 (setq other-headers 3673 (setq other-headers
3674 (mapcar #'(lambda (elt) 3674 (mapcar (lambda (elt)
3675 (cons (car elt) (if (stringp (cdr elt)) 3675 (cons (car elt) (if (stringp (cdr elt))
3676 (rfc2047-decode-string (cdr elt))))) 3676 (rfc2047-decode-string (cdr elt)))))
3677 other-headers)) 3677 other-headers))
3678 (if (stringp to) (setq to (rfc2047-decode-string to))) 3678 (if (stringp to) (setq to (rfc2047-decode-string to)))
3679 (if (stringp in-reply-to) 3679 (if (stringp in-reply-to)
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index ac5e8c3b6fb..ab58aa455e9 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -489,13 +489,6 @@ for `smtpmail-try-auth-method'.")
489 recipient 489 recipient
490 (concat recipient "@" smtpmail-sendto-domain))) 490 (concat recipient "@" smtpmail-sendto-domain)))
491 491
492(defun smtpmail-intersection (list1 list2)
493 (let ((result nil))
494 (dolist (el2 list2)
495 (when (memq el2 list1)
496 (push el2 result)))
497 (nreverse result)))
498
499(defun smtpmail-command-or-throw (process string &optional code) 492(defun smtpmail-command-or-throw (process string &optional code)
500 (let (ret) 493 (let (ret)
501 (smtpmail-send-command process string) 494 (smtpmail-send-command process string)
@@ -512,9 +505,10 @@ for `smtpmail-try-auth-method'.")
512 (if port 505 (if port
513 (format "%s" port) 506 (format "%s" port)
514 "smtp")) 507 "smtp"))
515 (let* ((mechs (smtpmail-intersection 508 (let* ((mechs (seq-intersection
509 smtpmail-auth-supported
516 (cdr-safe (assoc 'auth supported-extensions)) 510 (cdr-safe (assoc 'auth supported-extensions))
517 smtpmail-auth-supported)) 511 #'eq))
518 (auth-source-creation-prompts 512 (auth-source-creation-prompts
519 '((user . "SMTP user name for %h: ") 513 '((user . "SMTP user name for %h: ")
520 (secret . "SMTP password for %u@%h: "))) 514 (secret . "SMTP password for %u@%h: ")))
@@ -1087,6 +1081,12 @@ many continuation lines."
1087 (while (and (looking-at "^[ \t].*\n") (< (point) header-end)) 1081 (while (and (looking-at "^[ \t].*\n") (< (point) header-end))
1088 (replace-match "")))))) 1082 (replace-match ""))))))
1089 1083
1084;; Obsolete.
1085
1086(defun smtpmail-intersection (list1 list2)
1087 (declare (obsolete seq-intersection "28.1"))
1088 (seq-intersection list2 list1 #'eq))
1089
1090(provide 'smtpmail) 1090(provide 'smtpmail)
1091 1091
1092;;; smtpmail.el ends here 1092;;; smtpmail.el ends here
diff --git a/lisp/man.el b/lisp/man.el
index abb9bbad8fd..9b941a2b3d2 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -1503,7 +1503,9 @@ manpage command."
1503 (quit-restore-window 1503 (quit-restore-window
1504 (get-buffer-window Man-buffer t) 'kill) 1504 (get-buffer-window Man-buffer t) 'kill)
1505 ;; Ensure that we end up in the correct window. 1505 ;; Ensure that we end up in the correct window.
1506 (select-window (old-selected-window))) 1506 (let ((old-window (old-selected-window)))
1507 (when (window-live-p old-window)
1508 (select-window old-window))))
1507 (kill-buffer Man-buffer))) 1509 (kill-buffer Man-buffer)))
1508 1510
1509 (when message 1511 (when message
diff --git a/lisp/mpc.el b/lisp/mpc.el
index 827f8aacdd6..315d8c0626d 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -129,12 +129,10 @@
129 "Return L1 after removing all elements not found in L2. 129 "Return L1 after removing all elements not found in L2.
130If SELECTFUN is non-nil, elements aren't compared directly, but instead 130If SELECTFUN is non-nil, elements aren't compared directly, but instead
131they are passed through SELECTFUN before comparison." 131they are passed through SELECTFUN before comparison."
132 (let ((res ())) 132 (when selectfun
133 (if selectfun (setq l2 (mapcar selectfun l2))) 133 (setq l1 (mapcar selectfun l1))
134 (dolist (elem l1) 134 (setq l2 (mapcar selectfun l2)))
135 (when (member (if selectfun (funcall selectfun elem) elem) l2) 135 (seq-intersection l1 l2))
136 (push elem res)))
137 (nreverse res)))
138 136
139(defun mpc-event-set-point (event) 137(defun mpc-event-set-point (event)
140 (condition-case nil (posn-set-point (event-end event)) 138 (condition-case nil (posn-set-point (event-end event))
@@ -698,7 +696,7 @@ The songs are returned as alists."
698 (let* ((osongs (mpc-cmd-find other-tag value)) 696 (let* ((osongs (mpc-cmd-find other-tag value))
699 (ofiles (mpc-assq-all 'file (apply 'append osongs))) 697 (ofiles (mpc-assq-all 'file (apply 'append osongs)))
700 (plfiles (mpc-assq-all 'file (apply 'append plsongs)))) 698 (plfiles (mpc-assq-all 'file (apply 'append plsongs))))
701 (when (mpc-intersection plfiles ofiles) 699 (when (seq-intersection plfiles ofiles)
702 (push pl pls))))))) 700 (push pl pls)))))))
703 pls)) 701 pls))
704 702
@@ -1669,7 +1667,7 @@ Return non-nil if a selection was deactivated."
1669 (mpc-cmd-list mpc-tag (car cst) val)) 1667 (mpc-cmd-list mpc-tag (car cst) val))
1670 (cdr cst))))) 1668 (cdr cst)))))
1671 (setq active 1669 (setq active
1672 (if (listp active) (mpc-intersection active vals) vals)))) 1670 (if (listp active) (seq-intersection active vals) vals))))
1673 1671
1674 (when (listp active) 1672 (when (listp active)
1675 ;; Remove the selections if they are all in conflict with 1673 ;; Remove the selections if they are all in conflict with
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 683abaaa04a..43dd9dc15cd 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -336,8 +336,8 @@ defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
336 t) 336 t)
337 ;; if a list, look for hostname matches 337 ;; if a list, look for hostname matches
338 ((listp gnutls-verify-error) 338 ((listp gnutls-verify-error)
339 (cadr (cl-find-if #'(lambda (x) 339 (cadr (cl-find-if (lambda (x)
340 (string-match (car x) hostname)) 340 (string-match (car x) hostname))
341 gnutls-verify-error))) 341 gnutls-verify-error)))
342 ;; else it's nil 342 ;; else it's nil
343 (t nil)))) 343 (t nil))))
diff --git a/lisp/net/imap.el b/lisp/net/imap.el
index 052ef292957..d29584e55bd 100644
--- a/lisp/net/imap.el
+++ b/lisp/net/imap.el
@@ -737,9 +737,9 @@ sure of changing the value of `foo'."
737 :end-of-command "\r\n" 737 :end-of-command "\r\n"
738 :success "^1 OK " 738 :success "^1 OK "
739 :starttls-function 739 :starttls-function
740 #'(lambda (capabilities) 740 (lambda (capabilities)
741 (when (string-match-p "STARTTLS" capabilities) 741 (when (string-match-p "STARTTLS" capabilities)
742 "1 STARTTLS\r\n")))) 742 "1 STARTTLS\r\n"))))
743 done) 743 done)
744 (when process 744 (when process
745 (imap-log buffer) 745 (imap-log buffer)
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index 1d3a5e0f7da..e623dab26df 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -1680,6 +1680,7 @@ Sat, 07 Sep 2002 00:00:01 GMT
1680 nil)))) 1680 nil))))
1681 nil)) 1681 nil))
1682 1682
1683;; FIXME: Can this be replaced by seq-intersection?
1683(defun newsticker--lists-intersect-p (list1 list2) 1684(defun newsticker--lists-intersect-p (list1 list2)
1684 "Return t if LIST1 and LIST2 share elements." 1685 "Return t if LIST1 and LIST2 share elements."
1685 (let ((result nil)) 1686 (let ((result nil))
diff --git a/lisp/net/pop3.el b/lisp/net/pop3.el
index dcac36f2a4a..cb49f75c81d 100644
--- a/lisp/net/pop3.el
+++ b/lisp/net/pop3.el
@@ -725,9 +725,9 @@ Otherwise, return the size of the message-id MSG."
725 (setq pop3-read-point (point-marker)) 725 (setq pop3-read-point (point-marker))
726 (goto-char (match-beginning 0)) 726 (goto-char (match-beginning 0))
727 (setq end (point-marker)) 727 (setq end (point-marker))
728 (mapcar #'(lambda (s) (let ((split (split-string s " "))) 728 (mapcar (lambda (s) (let ((split (split-string s " ")))
729 (cons (string-to-number (nth 0 split)) 729 (cons (string-to-number (nth 0 split))
730 (string-to-number (nth 1 split))))) 730 (string-to-number (nth 1 split)))))
731 (split-string (buffer-substring start end) "\r\n" t))))))) 731 (split-string (buffer-substring start end) "\r\n" t)))))))
732 732
733(defun pop3-retr (process msg crashbuf) 733(defun pop3-retr (process msg crashbuf)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 1764f2ef03f..499bf8abe41 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -103,12 +103,12 @@ detected as prompt when being sent on echoing hosts, therefore.")
103(defconst tramp-end-of-heredoc (md5 tramp-end-of-output) 103(defconst tramp-end-of-heredoc (md5 tramp-end-of-output)
104 "String used to recognize end of heredoc strings.") 104 "String used to recognize end of heredoc strings.")
105 105
106(defcustom tramp-use-ssh-controlmaster-options t 106(defcustom tramp-use-ssh-controlmaster-options (not (eq system-type 'windows-nt))
107 "Whether to use `tramp-ssh-controlmaster-options'. 107 "Whether to use `tramp-ssh-controlmaster-options'.
108Set it to nil, if you use Control* or Proxy* options in your ssh 108Set it to nil, if you use Control* or Proxy* options in your ssh
109configuration." 109configuration."
110 :group 'tramp 110 :group 'tramp
111 :version "24.4" 111 :version "28.1"
112 :type 'boolean) 112 :type 'boolean)
113 113
114(defvar tramp-ssh-controlmaster-options nil 114(defvar tramp-ssh-controlmaster-options nil
@@ -389,7 +389,14 @@ The string is used in `tramp-methods'.")
389 (regexp-opt 389 (regexp-opt
390 '("rcp" "remcp" "rsh" "telnet" "nc" "krlogin" "fcp")) 390 '("rcp" "remcp" "rsh" "telnet" "nc" "krlogin" "fcp"))
391 "\\'") 391 "\\'")
392 nil ,(user-login-name)))) 392 nil ,(user-login-name)))
393
394 ;; MS Windows Openssh client does not cooperate well with cmdproxy.
395 (when-let ((encoding-shell
396 (and (eq system-type 'windows-nt) (executable-find "powershell"))))
397 (add-to-list 'tramp-connection-properties
398 `(,(regexp-opt '("/sshx:" "/scpx:"))
399 "encoding-shell" ,encoding-shell))))
393 400
394;;;###tramp-autoload 401;;;###tramp-autoload
395(defconst tramp-completion-function-alist-rsh 402(defconst tramp-completion-function-alist-rsh
@@ -484,6 +491,7 @@ shell from reading its init file."
484 '((tramp-login-prompt-regexp tramp-action-login) 491 '((tramp-login-prompt-regexp tramp-action-login)
485 (tramp-password-prompt-regexp tramp-action-password) 492 (tramp-password-prompt-regexp tramp-action-password)
486 (tramp-wrong-passwd-regexp tramp-action-permission-denied) 493 (tramp-wrong-passwd-regexp tramp-action-permission-denied)
494 (tramp-no-job-control-regexp tramp-action-permission-denied)
487 (shell-prompt-pattern tramp-action-succeed) 495 (shell-prompt-pattern tramp-action-succeed)
488 (tramp-shell-prompt-pattern tramp-action-succeed) 496 (tramp-shell-prompt-pattern tramp-action-succeed)
489 (tramp-yesno-prompt-regexp tramp-action-yesno) 497 (tramp-yesno-prompt-regexp tramp-action-yesno)
@@ -2584,12 +2592,9 @@ The method used must be an out-of-band method."
2584 (save-restriction 2592 (save-restriction
2585 (narrow-to-region beg-marker end-marker) 2593 (narrow-to-region beg-marker end-marker)
2586 ;; Check for "--dired" output. 2594 ;; Check for "--dired" output.
2587 (forward-line -2) 2595 (when (re-search-backward "^//DIRED//\\s-+\\(.+\\)$" nil 'noerror)
2588 (when (looking-at-p "//SUBDIRED//") 2596 (let ((beg (match-beginning 1))
2589 (forward-line -1)) 2597 (end (match-end 0)))
2590 (when (looking-at "//DIRED//\\s-+")
2591 (let ((beg (match-end 0))
2592 (end (point-at-eol)))
2593 ;; Now read the numeric positions of file names. 2598 ;; Now read the numeric positions of file names.
2594 (goto-char beg) 2599 (goto-char beg)
2595 (while (< (point) end) 2600 (while (< (point) end)
@@ -2599,7 +2604,7 @@ The method used must be an out-of-band method."
2599 ;; End is followed by \n or by " -> ". 2604 ;; End is followed by \n or by " -> ".
2600 (put-text-property start end 'dired-filename t)))))) 2605 (put-text-property start end 'dired-filename t))))))
2601 ;; Remove trailing lines. 2606 ;; Remove trailing lines.
2602 (goto-char (point-at-bol)) 2607 (beginning-of-line)
2603 (while (looking-at "//") 2608 (while (looking-at "//")
2604 (forward-line 1) 2609 (forward-line 1)
2605 (delete-region (match-beginning 0) (point)))) 2610 (delete-region (match-beginning 0) (point))))
@@ -3751,12 +3756,17 @@ Fall back to normal file name handler if no Tramp handler exists."
3751 ;; Determine monitor name. 3756 ;; Determine monitor name.
3752 (unless (tramp-connection-property-p proc "gio-file-monitor") 3757 (unless (tramp-connection-property-p proc "gio-file-monitor")
3753 (cond 3758 (cond
3754 ;; We have seen this only on cygwin gio, which uses the 3759 ;; We have seen this on cygwin gio and on emba. Let's make some assumptions.
3755 ;; GPollFileMonitor.
3756 ((string-match 3760 ((string-match
3757 "Can't find module 'help' specified in GIO_USE_FILE_MONITOR" string) 3761 "Can't find module 'help' specified in GIO_USE_FILE_MONITOR" string)
3758 (tramp-set-connection-property 3762 (cond
3759 proc "gio-file-monitor" 'GPollFileMonitor)) 3763 ((getenv "EMACS_EMBA_CI")
3764 (tramp-set-connection-property
3765 proc "gio-file-monitor" 'GInotifyFileMonitor))
3766 ((eq system-type 'cygwin)
3767 (tramp-set-connection-property
3768 proc "gio-file-monitor" 'GPollFileMonitor))
3769 (t (tramp-error proc 'file-error "Cannot determine gio monitor"))))
3760 ;; TODO: What happens, if several monitor names are reported? 3770 ;; TODO: What happens, if several monitor names are reported?
3761 ((string-match "\ 3771 ((string-match "\
3762Supported arguments for GIO_USE_FILE_MONITOR environment variable: 3772Supported arguments for GIO_USE_FILE_MONITOR environment variable:
@@ -4855,8 +4865,6 @@ connection if a previous connection has died for some reason."
4855 (setenv "HISTSIZE" "0")))) 4865 (setenv "HISTSIZE" "0"))))
4856 (setenv "PROMPT_COMMAND") 4866 (setenv "PROMPT_COMMAND")
4857 (setenv "PS1" tramp-initial-end-of-output) 4867 (setenv "PS1" tramp-initial-end-of-output)
4858 (unless (stringp tramp-encoding-shell)
4859 (tramp-error vec 'file-error "`tramp-encoding-shell' not set"))
4860 (let* ((current-host tramp-system-name) 4868 (let* ((current-host tramp-system-name)
4861 (target-alist (tramp-compute-multi-hops vec)) 4869 (target-alist (tramp-compute-multi-hops vec))
4862 ;; We will apply `tramp-ssh-controlmaster-options' 4870 ;; We will apply `tramp-ssh-controlmaster-options'
@@ -4868,17 +4876,23 @@ connection if a previous connection has died for some reason."
4868 ;; W32 systems. 4876 ;; W32 systems.
4869 (process-coding-system-alist nil) 4877 (process-coding-system-alist nil)
4870 (coding-system-for-read nil) 4878 (coding-system-for-read nil)
4871 (extra-args (tramp-get-sh-extra-args tramp-encoding-shell)) 4879 (encoding-shell
4880 (tramp-get-connection-property
4881 vec "encoding-shell" tramp-encoding-shell))
4882 (extra-args (tramp-get-sh-extra-args encoding-shell))
4872 ;; This must be done in order to avoid our file 4883 ;; This must be done in order to avoid our file
4873 ;; name handler. 4884 ;; name handler.
4874 (p (let ((default-directory 4885 (p (let ((default-directory
4875 (tramp-compat-temporary-file-directory))) 4886 (tramp-compat-temporary-file-directory)))
4887 (unless (stringp encoding-shell)
4888 (tramp-error
4889 vec 'file-error "`tramp-encoding-shell' not set"))
4876 (apply 4890 (apply
4877 #'start-process 4891 #'start-process
4878 (tramp-get-connection-name vec) 4892 (tramp-get-connection-name vec)
4879 (tramp-get-connection-buffer vec) 4893 (tramp-get-connection-buffer vec)
4880 (append 4894 (append
4881 (list tramp-encoding-shell) 4895 (list encoding-shell)
4882 (and extra-args (split-string extra-args)) 4896 (and extra-args (split-string extra-args))
4883 (and tramp-encoding-command-interactive 4897 (and tramp-encoding-command-interactive
4884 (list tramp-encoding-command-interactive))))))) 4898 (list tramp-encoding-command-interactive)))))))
@@ -4897,8 +4911,7 @@ connection if a previous connection has died for some reason."
4897 4911
4898 ;; Check whether process is alive. 4912 ;; Check whether process is alive.
4899 (tramp-barf-if-no-shell-prompt 4913 (tramp-barf-if-no-shell-prompt
4900 p 10 4914 p 10 "Couldn't find local shell prompt for %s" encoding-shell)
4901 "Couldn't find local shell prompt for %s" tramp-encoding-shell)
4902 4915
4903 ;; Now do all the connections as specified. 4916 ;; Now do all the connections as specified.
4904 (while target-alist 4917 (while target-alist
@@ -4972,12 +4985,8 @@ connection if a previous connection has died for some reason."
4972 ?h (or l-host "") ?u (or l-user "") ?p (or l-port "") 4985 ?h (or l-host "") ?u (or l-user "") ?p (or l-port "")
4973 ?c (format-spec options (format-spec-make ?t tmpfile)) 4986 ?c (format-spec options (format-spec-make ?t tmpfile))
4974 ?l (concat remote-shell " " extra-args " -i")) 4987 ?l (concat remote-shell " " extra-args " -i"))
4975 ;; Local shell could be a Windows COMSPEC. It 4988 ;; A restricted shell does not allow "exec".
4976 ;; doesn't know the ";" syntax, but we must 4989 (when r-shell '("; exit")))
4977 ;; exit always for `start-file-process'. It
4978 ;; could also be a restricted shell, which does
4979 ;; not allow "exec".
4980 (when r-shell '("&&" "exit" "||" "exit")))
4981 " ")) 4990 " "))
4982 4991
4983 ;; Send the command. 4992 ;; Send the command.
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 8141f026f74..99955b54598 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -354,12 +354,13 @@ Notes:
354All these arguments can be overwritten by connection properties. 354All these arguments can be overwritten by connection properties.
355See Info node `(tramp) Predefined connection information'. 355See Info node `(tramp) Predefined connection information'.
356 356
357When using `su' or `sudo' the phrase \"open connection to a remote 357When using `su', `sudo' or `doas' the phrase \"open connection to
358host\" sounds strange, but it is used nevertheless, for consistency. 358a remote host\" sounds strange, but it is used nevertheless, for
359No connection is opened to a remote host, but `su' or `sudo' is 359consistency. No connection is opened to a remote host, but `su',
360started on the local host. You should specify a remote host 360`sudo' or `doas' is started on the local host. You should
361`localhost' or the name of the local host. Another host name is 361specify a remote host `localhost' or the name of the local host.
362useful only in combination with `tramp-default-proxies-alist'.") 362Another host name is useful only in combination with
363`tramp-default-proxies-alist'.")
363 364
364(defcustom tramp-default-method 365(defcustom tramp-default-method
365 ;; An external copy method seems to be preferred, because it performs 366 ;; An external copy method seems to be preferred, because it performs
@@ -690,6 +691,15 @@ The regexp should match at end of buffer."
690 :version "27.1" 691 :version "27.1"
691 :type 'regexp) 692 :type 'regexp)
692 693
694;; Powershell requires "ssh -t -t" for terminal emulation. If it
695;; doesn't fit, there is an error.
696(defcustom tramp-no-job-control-regexp
697 (regexp-quote "Thus no job control in this shell.")
698 "Regular expression matching powershell's job control message.
699The regexp should match at end of buffer."
700 :version "28.1"
701 :type 'regexp)
702
693(defcustom tramp-operation-not-permitted-regexp 703(defcustom tramp-operation-not-permitted-regexp
694 (concat "\\(" "preserving times.*" "\\|" "set mode" "\\)" ":\\s-*" 704 (concat "\\(" "preserving times.*" "\\|" "set mode" "\\)" ":\\s-*"
695 (regexp-opt '("Operation not permitted") t)) 705 (regexp-opt '("Operation not permitted") t))
@@ -1808,6 +1818,7 @@ The outline level is equal to the verbosity of the Tramp message."
1808 "Get the debug buffer for VEC." 1818 "Get the debug buffer for VEC."
1809 (with-current-buffer (get-buffer-create (tramp-debug-buffer-name vec)) 1819 (with-current-buffer (get-buffer-create (tramp-debug-buffer-name vec))
1810 (when (bobp) 1820 (when (bobp)
1821 (set-buffer-file-coding-system 'utf-8)
1811 (setq buffer-undo-list t) 1822 (setq buffer-undo-list t)
1812 ;; Activate `outline-mode'. This runs `text-mode-hook' and 1823 ;; Activate `outline-mode'. This runs `text-mode-hook' and
1813 ;; `outline-mode-hook'. We must prevent that local processes 1824 ;; `outline-mode-hook'. We must prevent that local processes
@@ -1848,7 +1859,7 @@ ARGUMENTS to actually emit the message (if applicable)."
1848 (when (bobp) 1859 (when (bobp)
1849 (insert 1860 (insert
1850 (format 1861 (format
1851 ";; Emacs: %s Tramp: %s -*- mode: outline; -*-" 1862 ";; Emacs: %s Tramp: %s -*- mode: outline; coding: utf-8; -*-"
1852 emacs-version tramp-version)) 1863 emacs-version tramp-version))
1853 (when (>= tramp-verbose 10) 1864 (when (>= tramp-verbose 10)
1854 (let ((tramp-verbose 0)) 1865 (let ((tramp-verbose 0))
diff --git a/lisp/nxml/rng-loc.el b/lisp/nxml/rng-loc.el
index d5a608d6ff2..a38da794226 100644
--- a/lisp/nxml/rng-loc.el
+++ b/lisp/nxml/rng-loc.el
@@ -182,7 +182,7 @@ If TYPE-ID is non-nil, then locate the schema for this TYPE-ID."
182 (while files 182 (while files
183 (setq type-ids (rng-possible-type-ids-using (car files) type-ids)) 183 (setq type-ids (rng-possible-type-ids-using (car files) type-ids))
184 (setq files (cdr files))) 184 (setq files (cdr files)))
185 (rng-uniquify-equal (sort type-ids 'string<)))) 185 (seq-uniq (sort type-ids 'string<))))
186 186
187(defun rng-locate-schema-file-using (files) 187(defun rng-locate-schema-file-using (files)
188 "Locate a schema using the schema locating files FILES. 188 "Locate a schema using the schema locating files FILES.
diff --git a/lisp/nxml/rng-match.el b/lisp/nxml/rng-match.el
index 4fc6727d0e6..7a2739c0616 100644
--- a/lisp/nxml/rng-match.el
+++ b/lisp/nxml/rng-match.el
@@ -472,7 +472,7 @@ list is nullable and whose cdr is the normalized list."
472 (cons nullable 472 (cons nullable
473 (if sorted 473 (if sorted
474 head 474 head
475 (rng-uniquify-eq (sort head 'rng-compare-ipattern)))))) 475 (seq-uniq (sort head 'rng-compare-ipattern) #'eq)))))
476 476
477(defun rng-compare-ipattern (p1 p2) 477(defun rng-compare-ipattern (p1 p2)
478 (< (rng--ipattern-index p1) 478 (< (rng--ipattern-index p1)
diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el
index 7ea6fb2e49d..33768a46c94 100644
--- a/lisp/nxml/rng-nxml.el
+++ b/lisp/nxml/rng-nxml.el
@@ -522,7 +522,7 @@ set `xmltok-dtd'. Returns the position of the end of the token."
522 (unless attribute-flag 522 (unless attribute-flag
523 (setcdr ns-prefixes (cons nil (cdr ns-prefixes)))))) 523 (setcdr ns-prefixes (cons nil (cdr ns-prefixes))))))
524 (setq iter (cdr iter))) 524 (setq iter (cdr iter)))
525 (rng-uniquify-equal 525 (seq-uniq
526 (sort (apply #'append 526 (sort (apply #'append
527 (cons extra-strings 527 (cons extra-strings
528 (mapcar (lambda (name) 528 (mapcar (lambda (name)
diff --git a/lisp/nxml/rng-util.el b/lisp/nxml/rng-util.el
index a20e95086cb..67e2ee9f1e3 100644
--- a/lisp/nxml/rng-util.el
+++ b/lisp/nxml/rng-util.el
@@ -36,26 +36,6 @@
36 36
37(defconst rng-builtin-datatypes-uri (rng-make-datatypes-uri "")) 37(defconst rng-builtin-datatypes-uri (rng-make-datatypes-uri ""))
38 38
39(defun rng-uniquify-eq (list)
40 "Destructively remove `eq' duplicates from LIST."
41 (and list
42 (let ((head list))
43 (while (cdr head)
44 (if (eq (car head) (cadr head))
45 (setcdr head (cddr head)))
46 (setq head (cdr head)))
47 list)))
48
49(defun rng-uniquify-equal (list)
50 "Destructively remove `equal' duplicates from LIST."
51 (and list
52 (let ((head list))
53 (while (cdr head)
54 (if (equal (car head) (cadr head))
55 (setcdr head (cddr head)))
56 (setq head (cdr head)))
57 list)))
58
59(defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str)) 39(defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str))
60 40
61(defun rng-substq (new old list) 41(defun rng-substq (new old list)
@@ -104,6 +84,14 @@ LIST is not modified."
104 84
105(define-error 'rng-error nil) 85(define-error 'rng-error nil)
106 86
87;; Obsolete.
88
89(defun rng-uniquify-eq (list)
90 (declare (obsolete seq-uniq "28.1"))
91 (seq-uniq list #'eq))
92
93(define-obsolete-function-alias 'rng-uniquify-equal #'seq-uniq "28.1")
94
107(provide 'rng-util) 95(provide 'rng-util)
108 96
109;;; rng-util.el ends here 97;;; rng-util.el ends here
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index b648ecf0986..64acc416c23 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -1260,18 +1260,9 @@ If specific documentation can't be given, be generic."
1260 1260
1261(defun pcomplete-uniquify-list (l) 1261(defun pcomplete-uniquify-list (l)
1262 "Sort and remove multiples in L." 1262 "Sort and remove multiples in L."
1263 (setq l (sort l 'string-lessp)) 1263 (setq l (sort l #'string-lessp))
1264 (let ((m l)) 1264 (seq-uniq l))
1265 (while m 1265(define-obsolete-function-alias 'pcomplete-uniqify-list #'pcomplete-uniquify-list "27.1")
1266 (while (and (cdr m)
1267 (string= (car m)
1268 (cadr m)))
1269 (setcdr m (cddr m)))
1270 (setq m (cdr m))))
1271 l)
1272(define-obsolete-function-alias
1273 'pcomplete-uniqify-list
1274 'pcomplete-uniquify-list "27.1")
1275 1266
1276(defun pcomplete-process-result (cmd &rest args) 1267(defun pcomplete-process-result (cmd &rest args)
1277 "Call CMD using `call-process' and return the simplest result." 1268 "Call CMD using `call-process' and return the simplest result."
@@ -1320,18 +1311,6 @@ If specific documentation can't be given, be generic."
1320 (pcomplete-read-hosts pcomplete-hosts-file 'pcomplete--host-name-cache 1311 (pcomplete-read-hosts pcomplete-hosts-file 'pcomplete--host-name-cache
1321 'pcomplete--host-name-cache-timestamp))) 1312 'pcomplete--host-name-cache-timestamp)))
1322 1313
1323;; create a set of aliases which allow completion functions to be not
1324;; quite so verbose
1325
1326;;; jww (1999-10-20): are these a good idea?
1327;; (defalias 'pc-here 'pcomplete-here)
1328;; (defalias 'pc-test 'pcomplete-test)
1329;; (defalias 'pc-opt 'pcomplete-opt)
1330;; (defalias 'pc-match 'pcomplete-match)
1331;; (defalias 'pc-match-string 'pcomplete-match-string)
1332;; (defalias 'pc-match-beginning 'pcomplete-match-beginning)
1333;; (defalias 'pc-match-end 'pcomplete-match-end)
1334
1335(provide 'pcomplete) 1314(provide 'pcomplete)
1336 1315
1337;;; pcomplete.el ends here 1316;;; pcomplete.el ends here
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 68dc0fb94b3..78b8259b395 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -1,4 +1,4 @@
1;;; pixel-scroll.el --- Scroll a line smoothly 1;;; pixel-scroll.el --- Scroll a line smoothly -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2017-2021 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
4;; Author: Tak Kunihiro <tkk@misasa.okayama-u.ac.jp> 4;; Author: Tak Kunihiro <tkk@misasa.okayama-u.ac.jp>
@@ -124,7 +124,7 @@ This is an alternative of `scroll-up'. Scope moves downward."
124 (or arg (setq arg 1)) 124 (or arg (setq arg 1))
125 (if (pixel-scroll-in-rush-p) 125 (if (pixel-scroll-in-rush-p)
126 (scroll-up arg) 126 (scroll-up arg)
127 (dotimes (ii arg) ; move scope downward 127 (dotimes (_ arg) ; move scope downward
128 (let ((amt (if pixel-resolution-fine-flag 128 (let ((amt (if pixel-resolution-fine-flag
129 (if (integerp pixel-resolution-fine-flag) 129 (if (integerp pixel-resolution-fine-flag)
130 pixel-resolution-fine-flag 130 pixel-resolution-fine-flag
@@ -145,7 +145,7 @@ This is and alternative of `scroll-down'. Scope moves upward."
145 (or arg (setq arg 1)) 145 (or arg (setq arg 1))
146 (if (pixel-scroll-in-rush-p) 146 (if (pixel-scroll-in-rush-p)
147 (scroll-down arg) 147 (scroll-down arg)
148 (dotimes (ii arg) 148 (dotimes (_ arg)
149 (let ((amt (if pixel-resolution-fine-flag 149 (let ((amt (if pixel-resolution-fine-flag
150 (if (integerp pixel-resolution-fine-flag) 150 (if (integerp pixel-resolution-fine-flag)
151 pixel-resolution-fine-flag 151 pixel-resolution-fine-flag
@@ -244,7 +244,7 @@ that was scrolled."
244 (dst (* line height)) ; goal @25 @25 @92 244 (dst (* line height)) ; goal @25 @25 @92
245 (delta (- dst src))) ; pixels to be scrolled 25 17 4 245 (delta (- dst src))) ; pixels to be scrolled 25 17 4
246 (pixel--whistlestop-pixel-up (1- delta)) ; until one less @24 @24 @91 246 (pixel--whistlestop-pixel-up (1- delta)) ; until one less @24 @24 @91
247 (dotimes (ii line) 247 (dotimes (_ line)
248 ;; On horizontal scrolling, move cursor. 248 ;; On horizontal scrolling, move cursor.
249 (when (> (window-hscroll) 0) 249 (when (> (window-hscroll) 0)
250 (vertical-motion 1)) 250 (vertical-motion 1))
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el
index 50f65a1215e..e695a75e083 100644
--- a/lisp/play/bubbles.el
+++ b/lisp/play/bubbles.el
@@ -72,9 +72,6 @@
72 72
73;;; Code: 73;;; Code:
74 74
75(defconst bubbles-version "0.5" "Version number of bubbles.el.")
76(make-obsolete-variable 'bubbles-version nil "28.1")
77
78(require 'gamegrid) 75(require 'gamegrid)
79 76
80;; User options 77;; User options
@@ -1405,6 +1402,11 @@ Return t if new char is non-empty."
1405 (forward-char 1))) 1402 (forward-char 1)))
1406 (put-text-property (point-min) (point-max) 'pointer 'arrow))))) 1403 (put-text-property (point-min) (point-max) 'pointer 'arrow)))))
1407 1404
1405;; Obsolete.
1406
1407(defconst bubbles-version "0.5" "Version number of bubbles.el.")
1408(make-obsolete-variable 'bubbles-version 'emacs-version "28.1")
1409
1408(provide 'bubbles) 1410(provide 'bubbles)
1409 1411
1410;;; bubbles.el ends here 1412;;; bubbles.el ends here
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index aec259f1b38..29cbe54c3bd 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -476,8 +476,8 @@ and exists only for compatibility reasons."
476 (if current-prefix-arg " or add" "") 476 (if current-prefix-arg " or add" "")
477 ": ") 477 ": ")
478 (mapcar 478 (mapcar
479 #'(lambda (langelem) 479 (lambda (langelem)
480 (cons (format "%s" (car langelem)) nil)) 480 (cons (format "%s" (car langelem)) nil))
481 (get 'c-offsets-alist 'c-stylevar-fallback)) 481 (get 'c-offsets-alist 'c-stylevar-fallback))
482 nil (not current-prefix-arg) 482 nil (not current-prefix-arg)
483 ;; initial contents tries to be the last element 483 ;; initial contents tries to be the last element
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 472788d18e5..4649e506541 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -1,4 +1,4 @@
1;;; cfengine.el --- mode for editing Cfengine files 1;;; cfengine.el --- mode for editing Cfengine files -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 2001-2021 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
4 4
@@ -1440,7 +1440,7 @@ to the action header."
1440 (cfengine3-mode) 1440 (cfengine3-mode)
1441 (cfengine2-mode))) 1441 (cfengine2-mode)))
1442 1442
1443(defalias 'cfengine-mode 'cfengine3-mode) 1443(defalias 'cfengine-mode #'cfengine3-mode)
1444 1444
1445(provide 'cfengine3) 1445(provide 'cfengine3)
1446(provide 'cfengine) 1446(provide 'cfengine)
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 7612f8d284a..7878e91096c 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -3608,7 +3608,8 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
3608 ;; 1+6+2+1+1+6+1+1+1=20 extra () before this: 3608 ;; 1+6+2+1+1+6+1+1+1=20 extra () before this:
3609 "\\|" 3609 "\\|"
3610 "\\\\\\(['`\"($]\\)") ; BACKWACKED something-hairy 3610 "\\\\\\(['`\"($]\\)") ; BACKWACKED something-hairy
3611 "")))) 3611 "")))
3612 warning-message)
3612 (unwind-protect 3613 (unwind-protect
3613 (progn 3614 (progn
3614 (save-excursion 3615 (save-excursion
@@ -3671,7 +3672,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
3671 (looking-at "\\(cut\\|end\\)\\>")) 3672 (looking-at "\\(cut\\|end\\)\\>"))
3672 (if (or (nth 3 state) (nth 4 state) ignore-max) 3673 (if (or (nth 3 state) (nth 4 state) ignore-max)
3673 nil ; Doing a chunk only 3674 nil ; Doing a chunk only
3674 (message "=cut is not preceded by a POD section") 3675 (setq warning-message "=cut is not preceded by a POD section")
3675 (or (car err-l) (setcar err-l (point)))) 3676 (or (car err-l) (setcar err-l (point))))
3676 (beginning-of-line) 3677 (beginning-of-line)
3677 3678
@@ -3686,7 +3687,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
3686 (goto-char b) 3687 (goto-char b)
3687 (if (re-search-forward "\n=\\(cut\\|end\\)\\>" stop-point 'toend) 3688 (if (re-search-forward "\n=\\(cut\\|end\\)\\>" stop-point 'toend)
3688 (progn 3689 (progn
3689 (message "=cut is not preceded by an empty line") 3690 (setq warning-message "=cut is not preceded by an empty line")
3690 (setq b1 t) 3691 (setq b1 t)
3691 (or (car err-l) (setcar err-l b)))))) 3692 (or (car err-l) (setcar err-l b))))))
3692 (beginning-of-line 2) ; An empty line after =cut is not POD! 3693 (beginning-of-line 2) ; An empty line after =cut is not POD!
@@ -3829,7 +3830,8 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
3829 (progn ; Pretend we matched at the end 3830 (progn ; Pretend we matched at the end
3830 (goto-char (point-max)) 3831 (goto-char (point-max))
3831 (re-search-forward "\\'") 3832 (re-search-forward "\\'")
3832 (message "End of here-document `%s' not found." tag) 3833 (setq warning-message
3834 (format "End of here-document `%s' not found." tag))
3833 (or (car err-l) (setcar err-l b)))) 3835 (or (car err-l) (setcar err-l b))))
3834 (if cperl-pod-here-fontify 3836 (if cperl-pod-here-fontify
3835 (progn 3837 (progn
@@ -3906,7 +3908,8 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
3906 'face font-lock-string-face) 3908 'face font-lock-string-face)
3907 (cperl-commentify (point) (+ (point) 2) nil) 3909 (cperl-commentify (point) (+ (point) 2) nil)
3908 (cperl-put-do-not-fontify (point) (+ (point) 2) t)) 3910 (cperl-put-do-not-fontify (point) (+ (point) 2) t))
3909 (message "End of format `%s' not found." name) 3911 (setq warning-message
3912 (format "End of format `%s' not found." name))
3910 (or (car err-l) (setcar err-l b))) 3913 (or (car err-l) (setcar err-l b)))
3911 (forward-line) 3914 (forward-line)
3912 (if (> (point) max) 3915 (if (> (point) max)
@@ -4426,8 +4429,9 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
4426 REx-subgr-end argument) ; continue 4429 REx-subgr-end argument) ; continue
4427 (setq argument nil))) 4430 (setq argument nil)))
4428 (and argument 4431 (and argument
4429 (message "Couldn't find end of charclass in a REx, pos=%s" 4432 (setq warning-message
4430 REx-subgr-start)) 4433 (format "Couldn't find end of charclass in a REx, pos=%s"
4434 REx-subgr-start)))
4431 (setq argument (1- (point))) 4435 (setq argument (1- (point)))
4432 (goto-char REx-subgr-end) 4436 (goto-char REx-subgr-end)
4433 (cperl-highlight-charclass 4437 (cperl-highlight-charclass
@@ -4483,7 +4487,8 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
4483 (setq qtag "Can't find })"))) 4487 (setq qtag "Can't find })")))
4484 (progn 4488 (progn
4485 (goto-char (1- e)) 4489 (goto-char (1- e))
4486 (message "%s" qtag)) 4490 (setq warning-message
4491 (format "%s" qtag)))
4487 (cperl-postpone-fontification 4492 (cperl-postpone-fontification
4488 (1- tag) (1- (point)) 4493 (1- tag) (1- (point))
4489 'face font-lock-variable-name-face) 4494 'face font-lock-variable-name-face)
@@ -4512,9 +4517,9 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
4512 ;; (1- e) 'toend) 4517 ;; (1- e) 'toend)
4513 (search-forward ")" (1- e) 'toend) 4518 (search-forward ")" (1- e) 'toend)
4514 ;;) 4519 ;;)
4515 (message 4520 (setq warning-message
4516 "Couldn't find end of (?#...)-comment in a REx, pos=%s" 4521 (format "Couldn't find end of (?#...)-comment in a REx, pos=%s"
4517 REx-subgr-start)))) 4522 REx-subgr-start)))))
4518 (if (>= (point) e) 4523 (if (>= (point) e)
4519 (goto-char (1- e))) 4524 (goto-char (1- e)))
4520 (cond 4525 (cond
@@ -4592,8 +4597,8 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
4592 (if (> (point) stop-point) 4597 (if (> (point) stop-point)
4593 (progn 4598 (progn
4594 (if end 4599 (if end
4595 (message "Garbage after __END__/__DATA__ ignored") 4600 (setq warning-message "Garbage after __END__/__DATA__ ignored")
4596 (message "Unbalanced syntax found while scanning") 4601 (setq warning-message "Unbalanced syntax found while scanning")
4597 (or (car err-l) (setcar err-l b))) 4602 (or (car err-l) (setcar err-l b)))
4598 (goto-char stop-point)))) 4603 (goto-char stop-point))))
4599 (setq cperl-syntax-state (cons state-point state) 4604 (setq cperl-syntax-state (cons state-point state)
@@ -4612,6 +4617,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
4612 ;; cperl-mode-syntax-table. 4617 ;; cperl-mode-syntax-table.
4613 ;; (set-syntax-table cperl-mode-syntax-table) 4618 ;; (set-syntax-table cperl-mode-syntax-table)
4614 ) 4619 )
4620 (when warning-message (message warning-message))
4615 (list (car err-l) overshoot))) 4621 (list (car err-l) overshoot)))
4616 4622
4617(defun cperl-find-pods-heres-region (min max) 4623(defun cperl-find-pods-heres-region (min max)
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index 14eefdca1e6..ed024f24344 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -1,4 +1,4 @@
1;;; dcl-mode.el --- major mode for editing DCL command files 1;;; dcl-mode.el --- major mode for editing DCL command files -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1997, 2001-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2001-2021 Free Software Foundation, Inc.
4 4
@@ -23,9 +23,11 @@
23 23
24;;; Commentary: 24;;; Commentary:
25 25
26;; DCL mode is a package for editing DCL command files. It helps you 26;; DCL mode is a package for editing
27;; indent lines, add leading `$' and trailing `-', move around in the 27;; [DCL](https://en.wikipedia.org/wiki/DIGITAL_Command_Language)
28;; code and insert lexical functions. 28;; command files.
29;; It helps you indent lines, add leading `$' and trailing `-', move
30;; around in the code and insert lexical functions.
29;; 31;;
30;; Type `C-h m' when you are editing a .COM file to get more 32;; Type `C-h m' when you are editing a .COM file to get more
31;; information about this mode. 33;; information about this mode.
@@ -270,22 +272,22 @@ See `imenu-generic-expression' for details."
270 272
271(defvar dcl-mode-map 273(defvar dcl-mode-map
272 (let ((map (make-sparse-keymap))) 274 (let ((map (make-sparse-keymap)))
273 (define-key map "\e\n" 'dcl-split-line) 275 (define-key map "\e\n" #'dcl-split-line)
274 (define-key map "\e\t" 'tempo-complete-tag) 276 (define-key map "\e\t" #'tempo-complete-tag)
275 (define-key map "\e^" 'dcl-delete-indentation) 277 (define-key map "\e^" #'dcl-delete-indentation)
276 (define-key map "\em" 'dcl-back-to-indentation) 278 (define-key map "\em" #'dcl-back-to-indentation)
277 (define-key map "\ee" 'dcl-forward-command) 279 (define-key map "\ee" #'dcl-forward-command)
278 (define-key map "\ea" 'dcl-backward-command) 280 (define-key map "\ea" #'dcl-backward-command)
279 (define-key map "\e\C-q" 'dcl-indent-command) 281 (define-key map "\e\C-q" #'dcl-indent-command)
280 (define-key map "\t" 'dcl-tab) 282 (define-key map "\t" #'dcl-tab)
281 (define-key map ":" 'dcl-electric-character) 283 (define-key map ":" #'dcl-electric-character)
282 (define-key map "F" 'dcl-electric-character) 284 (define-key map "F" #'dcl-electric-character)
283 (define-key map "f" 'dcl-electric-character) 285 (define-key map "f" #'dcl-electric-character)
284 (define-key map "E" 'dcl-electric-character) 286 (define-key map "E" #'dcl-electric-character)
285 (define-key map "e" 'dcl-electric-character) 287 (define-key map "e" #'dcl-electric-character)
286 (define-key map "\C-c\C-o" 'dcl-set-option) 288 (define-key map "\C-c\C-o" #'dcl-set-option)
287 (define-key map "\C-c\C-f" 'tempo-forward-mark) 289 (define-key map "\C-c\C-f" #'tempo-forward-mark)
288 (define-key map "\C-c\C-b" 'tempo-backward-mark) 290 (define-key map "\C-c\C-b" #'tempo-backward-mark)
289 map) 291 map)
290 "Keymap used in DCL-mode buffers.") 292 "Keymap used in DCL-mode buffers.")
291 293
@@ -533,7 +535,7 @@ $
533 535
534There is some minimal font-lock support (see vars 536There is some minimal font-lock support (see vars
535`dcl-font-lock-defaults' and `dcl-font-lock-keywords')." 537`dcl-font-lock-defaults' and `dcl-font-lock-keywords')."
536 (setq-local indent-line-function 'dcl-indent-line) 538 (setq-local indent-line-function #'dcl-indent-line)
537 (setq-local comment-start "!") 539 (setq-local comment-start "!")
538 (setq-local comment-end "") 540 (setq-local comment-end "")
539 (setq-local comment-multi-line nil) 541 (setq-local comment-multi-line nil)
@@ -547,7 +549,7 @@ There is some minimal font-lock support (see vars
547 549
548 (setq imenu-generic-expression dcl-imenu-generic-expression) 550 (setq imenu-generic-expression dcl-imenu-generic-expression)
549 (setq imenu-case-fold-search t) 551 (setq imenu-case-fold-search t)
550 (setq imenu-create-index-function 'dcl-imenu-create-index-function) 552 (setq imenu-create-index-function #'dcl-imenu-create-index-function)
551 553
552 (make-local-variable 'dcl-comment-line-regexp) 554 (make-local-variable 'dcl-comment-line-regexp)
553 (make-local-variable 'dcl-block-begin-regexp) 555 (make-local-variable 'dcl-block-begin-regexp)
@@ -1391,7 +1393,7 @@ regexps in `dcl-electric-reindent-regexps'."
1391 (let ((case-fold-search t)) 1393 (let ((case-fold-search t))
1392 ;; There must be a better way than (memq t ...). 1394 ;; There must be a better way than (memq t ...).
1393 ;; (apply 'or ...) didn't work 1395 ;; (apply 'or ...) didn't work
1394 (if (memq t (mapcar 'dcl-was-looking-at dcl-electric-reindent-regexps)) 1396 (if (memq t (mapcar #'dcl-was-looking-at dcl-electric-reindent-regexps))
1395 (dcl-indent-line))))) 1397 (dcl-indent-line)))))
1396 1398
1397 1399
@@ -1567,7 +1569,7 @@ Must return a string."
1567 ((fboundp action) 1569 ((fboundp action)
1568 (funcall action option-assoc)) 1570 (funcall action option-assoc))
1569 ((eq action 'toggle) 1571 ((eq action 'toggle)
1570 (not (eval option))) 1572 (not (symbol-value option)))
1571 ((eq action 'curval) 1573 ((eq action 'curval)
1572 (cond ((or (stringp (symbol-value option)) 1574 (cond ((or (stringp (symbol-value option))
1573 (numberp (symbol-value option))) 1575 (numberp (symbol-value option)))
@@ -1735,7 +1737,7 @@ Set or update the value of VAR in the current buffers
1735 (setq continue nil) 1737 (setq continue nil)
1736 (beginning-of-line) 1738 (beginning-of-line)
1737 (insert (concat prefix-string (symbol-name var) ": " 1739 (insert (concat prefix-string (symbol-name var) ": "
1738 (prin1-to-string (eval var)) " " 1740 (prin1-to-string (symbol-value var)) " "
1739 suffix-string "\n"))) 1741 suffix-string "\n")))
1740 ;; Is it the variable we are looking for? 1742 ;; Is it the variable we are looking for?
1741 (if (eq var found-var) 1743 (if (eq var found-var)
@@ -1748,7 +1750,7 @@ Set or update the value of VAR in the current buffers
1748 (delete-region (point) (progn (read (current-buffer)) 1750 (delete-region (point) (progn (read (current-buffer))
1749 (point))) 1751 (point)))
1750 (insert " ") 1752 (insert " ")
1751 (prin1 (eval var) (current-buffer)) 1753 (prin1 (symbol-value var) (current-buffer))
1752 (skip-chars-backward "\n") 1754 (skip-chars-backward "\n")
1753 (skip-chars-forward " \t") 1755 (skip-chars-forward " \t")
1754 (or (if suffix (looking-at suffix) (eolp)) 1756 (or (if suffix (looking-at suffix) (eolp))
@@ -1781,7 +1783,7 @@ Set or update the value of VAR in the current buffers
1781 (concat " " comment-end)))))) 1783 (concat " " comment-end))))))
1782 (insert (concat def-prefix "Local variables:" def-suffix "\n")) 1784 (insert (concat def-prefix "Local variables:" def-suffix "\n"))
1783 (insert (concat def-prefix (symbol-name var) ": " 1785 (insert (concat def-prefix (symbol-name var) ": "
1784 (prin1-to-string (eval var)) def-suffix "\n")) 1786 (prin1-to-string (symbol-value var)) def-suffix "\n"))
1785 (insert (concat def-prefix "end:" def-suffix))) 1787 (insert (concat def-prefix "end:" def-suffix)))
1786 ))) 1788 )))
1787 1789
@@ -1815,7 +1817,8 @@ still be present in the `Local Variables:' section with its old value."
1815 (option-name (symbol-name option))) 1817 (option-name (symbol-name option)))
1816 (if (and (string-equal "dcl-" 1818 (if (and (string-equal "dcl-"
1817 (substring option-name 0 4)) 1819 (substring option-name 0 4))
1818 (not (equal (default-value option) (eval option)))) 1820 (not (equal (default-value option)
1821 (symbol-value option))))
1819 (dcl-save-local-variable option "$! ")))) 1822 (dcl-save-local-variable option "$! "))))
1820 dcl-option-alist)) 1823 dcl-option-alist))
1821 1824
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el
index 5abf1debb15..816cc432d1b 100644
--- a/lisp/progmodes/ebnf-yac.el
+++ b/lisp/progmodes/ebnf-yac.el
@@ -271,13 +271,13 @@
271 (let ((table (make-vector 256 'error))) 271 (let ((table (make-vector 256 'error)))
272 ;; upper & lower case letters: 272 ;; upper & lower case letters:
273 (mapc 273 (mapc
274 #'(lambda (char) 274 (lambda (char)
275 (aset table char 'non-terminal)) 275 (aset table char 'non-terminal))
276 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") 276 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
277 ;; printable characters: 277 ;; printable characters:
278 (mapc 278 (mapc
279 #'(lambda (char) 279 (lambda (char)
280 (aset table char 'character)) 280 (aset table char 'character))
281 "!#$&()*+-.0123456789=?@[\\]^_`~") 281 "!#$&()*+-.0123456789=?@[\\]^_`~")
282 ;; Override space characters: 282 ;; Override space characters:
283 (aset table ?\n 'space) ; [NL] linefeed 283 (aset table ?\n 'space) ; [NL] linefeed
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 7092d2c1d1f..a00440d898c 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -4398,8 +4398,8 @@ end
4398 4398
4399(defun ebnf-format-float (&rest floats) 4399(defun ebnf-format-float (&rest floats)
4400 (mapconcat 4400 (mapconcat
4401 #'(lambda (float) 4401 (lambda (float)
4402 (format ebnf-format-float float)) 4402 (format ebnf-format-float float))
4403 floats 4403 floats
4404 " ")) 4404 " "))
4405 4405
@@ -4959,8 +4959,8 @@ killed after process termination."
4959 4959
4960(defvar ebnf-map-name 4960(defvar ebnf-map-name
4961 (let ((map (make-vector 256 ?\_))) 4961 (let ((map (make-vector 256 ?\_)))
4962 (mapc #'(lambda (char) 4962 (mapc (lambda (char)
4963 (aset map char char)) 4963 (aset map char char))
4964 (concat "#$%&+-.0123456789=?@~" 4964 (concat "#$%&+-.0123456789=?@~"
4965 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 4965 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
4966 "abcdefghijklmnopqrstuvwxyz")) 4966 "abcdefghijklmnopqrstuvwxyz"))
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index 85e9b4bb882..0d8b09c33c1 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -1,4 +1,4 @@
1;;; executable.el --- base functionality for executable interpreter scripts 1;;; executable.el --- base functionality for executable interpreter scripts -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1994-1996, 2000-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1996, 2000-2021 Free Software Foundation, Inc.
4 4
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 8c9a1b53b1b..e9fbcbbfcd0 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -1134,13 +1134,13 @@ command before it's run."
1134 (and grep-find-ignored-files 1134 (and grep-find-ignored-files
1135 (concat " --exclude=" 1135 (concat " --exclude="
1136 (mapconcat 1136 (mapconcat
1137 #'(lambda (ignore) 1137 (lambda (ignore)
1138 (cond ((stringp ignore) 1138 (cond ((stringp ignore)
1139 (shell-quote-argument ignore)) 1139 (shell-quote-argument ignore))
1140 ((consp ignore) 1140 ((consp ignore)
1141 (and (funcall (car ignore) dir) 1141 (and (funcall (car ignore) dir)
1142 (shell-quote-argument 1142 (shell-quote-argument
1143 (cdr ignore)))))) 1143 (cdr ignore))))))
1144 grep-find-ignored-files 1144 grep-find-ignored-files
1145 " --exclude="))) 1145 " --exclude=")))
1146 (and (eq grep-use-directories-skip t) 1146 (and (eq grep-use-directories-skip t)
@@ -1274,13 +1274,13 @@ command before it's run."
1274 ;; we should use shell-quote-argument here 1274 ;; we should use shell-quote-argument here
1275 " -name " 1275 " -name "
1276 (mapconcat 1276 (mapconcat
1277 #'(lambda (ignore) 1277 (lambda (ignore)
1278 (cond ((stringp ignore) 1278 (cond ((stringp ignore)
1279 (shell-quote-argument ignore)) 1279 (shell-quote-argument ignore))
1280 ((consp ignore) 1280 ((consp ignore)
1281 (and (funcall (car ignore) dir) 1281 (and (funcall (car ignore) dir)
1282 (shell-quote-argument 1282 (shell-quote-argument
1283 (cdr ignore)))))) 1283 (cdr ignore))))))
1284 grep-find-ignored-files 1284 grep-find-ignored-files
1285 " -o -name ") 1285 " -o -name ")
1286 " " 1286 " "
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index f53f3f3b995..75f2016fc24 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -7601,15 +7601,6 @@ associated TAG, if any."
7601 (put-text-property (match-beginning 0) (match-end 0) 7601 (put-text-property (match-beginning 0) (match-end 0)
7602 'face 'font-lock-string-face)))))) 7602 'face 'font-lock-string-face))))))
7603 7603
7604(defun idlwave-uniquify (list)
7605 (let ((ht (make-hash-table :size (length list) :test 'equal)))
7606 (delq nil
7607 (mapcar (lambda (x)
7608 (unless (gethash x ht)
7609 (puthash x t ht)
7610 x))
7611 list))))
7612
7613(defun idlwave-after-successful-completion (type slash &optional verify) 7604(defun idlwave-after-successful-completion (type slash &optional verify)
7614 "Add `=' or `(' after successful completion of keyword and function. 7605 "Add `=' or `(' after successful completion of keyword and function.
7615Restore the pre-completion window configuration if possible." 7606Restore the pre-completion window configuration if possible."
@@ -9101,6 +9092,9 @@ This function was written since `list-abbrevs' looks terrible for IDLWAVE mode."
9101;; Run the hook 9092;; Run the hook
9102(run-hooks 'idlwave-load-hook) 9093(run-hooks 'idlwave-load-hook)
9103 9094
9095;; Obsolete.
9096(define-obsolete-function-alias 'idlwave-uniquify #'seq-uniq "28.1")
9097
9104(provide 'idlwave) 9098(provide 'idlwave)
9105 9099
9106;;; idlwave.el ends here 9100;;; idlwave.el ends here
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index af6ccce3d62..0a72ae96bba 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -1,7 +1,6 @@
1;;; inf-lisp.el --- an inferior-lisp mode 1;;; inf-lisp.el --- an inferior-lisp mode -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1988, 1993-1994, 2001-2021 Free Software Foundation, 3;; Copyright (C) 1988-2021 Free Software Foundation, Inc.
4;; Inc.
5 4
6;; Author: Olin Shivers <shivers@cs.cmu.edu> 5;; Author: Olin Shivers <shivers@cs.cmu.edu>
7;; Keywords: processes, lisp 6;; Keywords: processes, lisp
@@ -23,13 +22,13 @@
23 22
24;;; Commentary: 23;;; Commentary:
25 24
26;; Hacked from tea.el by Olin Shivers (shivers@cs.cmu.edu). 8/88 25;; Hacked from tea.el by Olin Shivers (shivers@cs.cmu.edu). 8/88
27 26
28;; This file defines a lisp-in-a-buffer package (inferior-lisp mode) 27;; This file defines a lisp-in-a-buffer package (inferior-lisp mode)
29;; built on top of comint mode. This version is more featureful, 28;; built on top of comint mode. This version is more featureful,
30;; robust, and uniform than the Emacs 18 version. The key bindings are 29;; robust, and uniform than the Emacs 18 version. The key bindings are
31;; also more compatible with the bindings of Hemlock and Zwei (the 30;; also more compatible with the bindings of Hemlock and Zwei (the
32;; Lisp Machine emacs). 31;; Lisp Machine Emacs).
33 32
34;; Since this mode is built on top of the general command-interpreter-in- 33;; Since this mode is built on top of the general command-interpreter-in-
35;; a-buffer mode (comint mode), it shares a common base functionality, 34;; a-buffer mode (comint mode), it shares a common base functionality,
@@ -40,19 +39,19 @@
40;; the hooks available for customizing it, see the file comint.el. 39;; the hooks available for customizing it, see the file comint.el.
41;; For further information on inferior-lisp mode, see the comments below. 40;; For further information on inferior-lisp mode, see the comments below.
42 41
43;; Needs fixin: 42;; Needs fixing:
44;; The load-file/compile-file default mechanism could be smarter -- it 43;; The load-file/compile-file default mechanism could be smarter -- it
45;; doesn't know about the relationship between filename extensions and 44;; doesn't know about the relationship between filename extensions and
46;; whether the file is source or executable. If you compile foo.lisp 45;; whether the file is source or executable. If you compile foo.lisp
47;; with compile-file, then the next load-file should use foo.bin for 46;; with compile-file, then the next load-file should use foo.bin for
48;; the default, not foo.lisp. This is tricky to do right, particularly 47;; the default, not foo.lisp. This is tricky to do right, particularly
49;; because the extension for executable files varies so much (.o, .bin, 48;; because the extension for executable files varies so much (.o, .bin,
50;; .lbin, .mo, .vo, .ao, ...). 49;; .lbin, .mo, .vo, .ao, ...).
51;; 50;;
52;; It would be nice if inferior-lisp (and inferior scheme, T, ...) modes 51;; It would be nice if inferior-lisp (and inferior scheme, T, ...) modes
53;; had a verbose minor mode wherein sending or compiling defuns, etc. 52;; had a verbose minor mode wherein sending or compiling defuns, etc.
54;; would be reflected in the transcript with suitable comments, e.g. 53;; would be reflected in the transcript with suitable comments, e.g.
55;; ";;; redefining fact". Several ways to do this. Which is right? 54;; ";;; redefining fact". Several ways to do this. Which is right?
56;; 55;;
57;; When sending text from a source file to a subprocess, the process-mark can 56;; When sending text from a source file to a subprocess, the process-mark can
58;; move off the window, so you can lose sight of the process interactions. 57;; move off the window, so you can lose sight of the process interactions.
@@ -81,19 +80,19 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword
81(defvar inferior-lisp-mode-map 80(defvar inferior-lisp-mode-map
82 (let ((map (copy-keymap comint-mode-map))) 81 (let ((map (copy-keymap comint-mode-map)))
83 (set-keymap-parent map lisp-mode-shared-map) 82 (set-keymap-parent map lisp-mode-shared-map)
84 (define-key map "\C-x\C-e" 'lisp-eval-last-sexp) 83 (define-key map "\C-x\C-e" #'lisp-eval-last-sexp)
85 (define-key map "\C-c\C-l" 'lisp-load-file) 84 (define-key map "\C-c\C-l" #'lisp-load-file)
86 (define-key map "\C-c\C-k" 'lisp-compile-file) 85 (define-key map "\C-c\C-k" #'lisp-compile-file)
87 (define-key map "\C-c\C-a" 'lisp-show-arglist) 86 (define-key map "\C-c\C-a" #'lisp-show-arglist)
88 (define-key map "\C-c\C-d" 'lisp-describe-sym) 87 (define-key map "\C-c\C-d" #'lisp-describe-sym)
89 (define-key map "\C-c\C-f" 'lisp-show-function-documentation) 88 (define-key map "\C-c\C-f" #'lisp-show-function-documentation)
90 (define-key map "\C-c\C-v" 'lisp-show-variable-documentation) 89 (define-key map "\C-c\C-v" #'lisp-show-variable-documentation)
91 map)) 90 map))
92 91
93(easy-menu-define 92(easy-menu-define
94 inferior-lisp-menu 93 inferior-lisp-menu
95 inferior-lisp-mode-map 94 inferior-lisp-mode-map
96 "Inferior Lisp Menu" 95 "Inferior Lisp Menu."
97 '("Inf-Lisp" 96 '("Inf-Lisp"
98 ["Eval Last Sexp" lisp-eval-last-sexp t] 97 ["Eval Last Sexp" lisp-eval-last-sexp t]
99 "--" 98 "--"
@@ -107,20 +106,20 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword
107 106
108;;; These commands augment Lisp mode, so you can process Lisp code in 107;;; These commands augment Lisp mode, so you can process Lisp code in
109;;; the source files. 108;;; the source files.
110(define-key lisp-mode-map "\M-\C-x" 'lisp-eval-defun) ; GNU convention 109(define-key lisp-mode-map "\M-\C-x" #'lisp-eval-defun) ; GNU convention
111(define-key lisp-mode-map "\C-x\C-e" 'lisp-eval-last-sexp) ; GNU convention 110(define-key lisp-mode-map "\C-x\C-e" #'lisp-eval-last-sexp) ; GNU convention
112(define-key lisp-mode-map "\C-c\C-e" 'lisp-eval-defun) 111(define-key lisp-mode-map "\C-c\C-e" #'lisp-eval-defun)
113(define-key lisp-mode-map "\C-c\C-r" 'lisp-eval-region) 112(define-key lisp-mode-map "\C-c\C-r" #'lisp-eval-region)
114(define-key lisp-mode-map "\C-c\C-n" 'lisp-eval-form-and-next) 113(define-key lisp-mode-map "\C-c\C-n" #'lisp-eval-form-and-next)
115(define-key lisp-mode-map "\C-c\C-p" 'lisp-eval-paragraph) 114(define-key lisp-mode-map "\C-c\C-p" #'lisp-eval-paragraph)
116(define-key lisp-mode-map "\C-c\C-c" 'lisp-compile-defun) 115(define-key lisp-mode-map "\C-c\C-c" #'lisp-compile-defun)
117(define-key lisp-mode-map "\C-c\C-z" 'switch-to-lisp) 116(define-key lisp-mode-map "\C-c\C-z" #'switch-to-lisp)
118(define-key lisp-mode-map "\C-c\C-l" 'lisp-load-file) 117(define-key lisp-mode-map "\C-c\C-l" #'lisp-load-file)
119(define-key lisp-mode-map "\C-c\C-k" 'lisp-compile-file) ; "kompile" file 118(define-key lisp-mode-map "\C-c\C-k" #'lisp-compile-file) ; "kompile" file
120(define-key lisp-mode-map "\C-c\C-a" 'lisp-show-arglist) 119(define-key lisp-mode-map "\C-c\C-a" #'lisp-show-arglist)
121(define-key lisp-mode-map "\C-c\C-d" 'lisp-describe-sym) 120(define-key lisp-mode-map "\C-c\C-d" #'lisp-describe-sym)
122(define-key lisp-mode-map "\C-c\C-f" 'lisp-show-function-documentation) 121(define-key lisp-mode-map "\C-c\C-f" #'lisp-show-function-documentation)
123(define-key lisp-mode-map "\C-c\C-v" 'lisp-show-variable-documentation) 122(define-key lisp-mode-map "\C-c\C-v" #'lisp-show-variable-documentation)
124 123
125 124
126;; This function exists for backwards compatibility. 125;; This function exists for backwards compatibility.
@@ -133,24 +132,23 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword
133;;; (with-eval-after-load 'inf-lisp 'inferior-lisp-install-letter-bindings) 132;;; (with-eval-after-load 'inf-lisp 'inferior-lisp-install-letter-bindings)
134;;;You can modify this function to install just the bindings you want." 133;;;You can modify this function to install just the bindings you want."
135(defun inferior-lisp-install-letter-bindings () 134(defun inferior-lisp-install-letter-bindings ()
136 (define-key lisp-mode-map "\C-ce" 'lisp-eval-defun-and-go) 135 (define-key lisp-mode-map "\C-ce" #'lisp-eval-defun-and-go)
137 (define-key lisp-mode-map "\C-cr" 'lisp-eval-region-and-go) 136 (define-key lisp-mode-map "\C-cr" #'lisp-eval-region-and-go)
138 (define-key lisp-mode-map "\C-cc" 'lisp-compile-defun-and-go) 137 (define-key lisp-mode-map "\C-cc" #'lisp-compile-defun-and-go)
139 (define-key lisp-mode-map "\C-cz" 'switch-to-lisp) 138 (define-key lisp-mode-map "\C-cz" #'switch-to-lisp)
140 (define-key lisp-mode-map "\C-cl" 'lisp-load-file) 139 (define-key lisp-mode-map "\C-cl" #'lisp-load-file)
141 (define-key lisp-mode-map "\C-ck" 'lisp-compile-file) 140 (define-key lisp-mode-map "\C-ck" #'lisp-compile-file)
142 (define-key lisp-mode-map "\C-ca" 'lisp-show-arglist) 141 (define-key lisp-mode-map "\C-ca" #'lisp-show-arglist)
143 (define-key lisp-mode-map "\C-cd" 'lisp-describe-sym) 142 (define-key lisp-mode-map "\C-cd" #'lisp-describe-sym)
144 (define-key lisp-mode-map "\C-cf" 'lisp-show-function-documentation) 143 (define-key lisp-mode-map "\C-cf" #'lisp-show-function-documentation)
145 (define-key lisp-mode-map "\C-cv" 'lisp-show-variable-documentation) 144 (define-key lisp-mode-map "\C-cv" #'lisp-show-variable-documentation)
146 145
147 (define-key inferior-lisp-mode-map "\C-cl" 'lisp-load-file) 146 (define-key inferior-lisp-mode-map "\C-cl" #'lisp-load-file)
148 (define-key inferior-lisp-mode-map "\C-ck" 'lisp-compile-file) 147 (define-key inferior-lisp-mode-map "\C-ck" #'lisp-compile-file)
149 (define-key inferior-lisp-mode-map "\C-ca" 'lisp-show-arglist) 148 (define-key inferior-lisp-mode-map "\C-ca" #'lisp-show-arglist)
150 (define-key inferior-lisp-mode-map "\C-cd" 'lisp-describe-sym) 149 (define-key inferior-lisp-mode-map "\C-cd" #'lisp-describe-sym)
151 (define-key inferior-lisp-mode-map "\C-cf" 'lisp-show-function-documentation) 150 (define-key inferior-lisp-mode-map "\C-cf" #'lisp-show-function-documentation)
152 (define-key inferior-lisp-mode-map "\C-cv" 151 (define-key inferior-lisp-mode-map "\C-cv" #'lisp-show-variable-documentation))
153 'lisp-show-variable-documentation))
154 152
155(defcustom inferior-lisp-program "lisp" 153(defcustom inferior-lisp-program "lisp"
156 "Program name for invoking an inferior Lisp in Inferior Lisp mode." 154 "Program name for invoking an inferior Lisp in Inferior Lisp mode."
@@ -181,7 +179,7 @@ franz: \"^\\\\(->\\\\|<[0-9]*>:\\\\) *\"
181kcl: \"^>+ *\"" 179kcl: \"^>+ *\""
182 :type 'regexp) 180 :type 'regexp)
183 181
184(defvar inferior-lisp-buffer nil "*The current inferior-lisp process buffer. 182(defvar inferior-lisp-buffer nil "*The current `inferior-lisp' process buffer.
185 183
186MULTIPLE PROCESS SUPPORT 184MULTIPLE PROCESS SUPPORT
187=========================================================================== 185===========================================================================
@@ -326,18 +324,18 @@ Prefix argument means switch to the Lisp buffer afterwards."
326 (if and-go (switch-to-lisp t))) 324 (if and-go (switch-to-lisp t)))
327 325
328(defun lisp-compile-string (string) 326(defun lisp-compile-string (string)
329 "Send the string to the inferior Lisp process to be compiled and executed." 327 "Send STRING to the inferior Lisp process to be compiled and executed."
330 (comint-send-string 328 (comint-send-string
331 (inferior-lisp-proc) 329 (inferior-lisp-proc)
332 (format "(funcall (compile nil (lambda () %s)))\n" string))) 330 (format "(funcall (compile nil (lambda () %s)))\n" string)))
333 331
334(defun lisp-eval-string (string) 332(defun lisp-eval-string (string)
335 "Send the string to the inferior Lisp process to be executed." 333 "Send STRING to the inferior Lisp process to be executed."
336 (comint-send-string (inferior-lisp-proc) (concat string "\n"))) 334 (comint-send-string (inferior-lisp-proc) (concat string "\n")))
337 335
338(defun lisp-do-defun (do-string do-region) 336(defun lisp-do-defun (do-string do-region)
339 "Send the current defun to the inferior Lisp process. 337 "Send the current defun to the inferior Lisp process.
340The actually processing is done by `do-string' and `do-region' 338The actually processing is done by DO-STRING and DO-REGION
341 which determine whether the code is compiled before evaluation. 339 which determine whether the code is compiled before evaluation.
342DEFVAR forms reset the variables to the init values." 340DEFVAR forms reset the variables to the init values."
343 (save-excursion 341 (save-excursion
@@ -444,7 +442,7 @@ With argument, positions cursor at end of buffer."
444;;; (let ((name-start (point))) 442;;; (let ((name-start (point)))
445;;; (forward-sexp 1) 443;;; (forward-sexp 1)
446;;; (process-send-string "inferior-lisp" 444;;; (process-send-string "inferior-lisp"
447;;; (format "(compile '%s #'(lambda " 445;;; (format "(compile '%s (lambda "
448;;; (buffer-substring name-start 446;;; (buffer-substring name-start
449;;; (point))))) 447;;; (point)))))
450;;; (let ((body-start (point))) 448;;; (let ((body-start (point)))
@@ -460,7 +458,7 @@ With argument, positions cursor at end of buffer."
460;;; (interactive "r") 458;;; (interactive "r")
461;;; (save-excursion 459;;; (save-excursion
462;;; (goto-char start) (end-of-defun) (beginning-of-defun) ; error check 460;;; (goto-char start) (end-of-defun) (beginning-of-defun) ; error check
463;;; (if (< (point) start) (error "region begins in middle of defun")) 461;;; (if (< (point) start) (error "Region begins in middle of defun"))
464;;; (goto-char start) 462;;; (goto-char start)
465;;; (let ((s start)) 463;;; (let ((s start))
466;;; (end-of-defun) 464;;; (end-of-defun)
@@ -591,7 +589,7 @@ See variable `lisp-function-doc-command'."
591 (format lisp-function-doc-command fn))) 589 (format lisp-function-doc-command fn)))
592 590
593(defun lisp-show-variable-documentation (var) 591(defun lisp-show-variable-documentation (var)
594 "Send a command to the inferior Lisp to give documentation for function FN. 592 "Send a command to the inferior Lisp to give documentation for variable VAR.
595See variable `lisp-var-doc-command'." 593See variable `lisp-var-doc-command'."
596 (interactive (lisp-symprompt "Variable doc" (lisp-var-at-pt))) 594 (interactive (lisp-symprompt "Variable doc" (lisp-var-at-pt)))
597 (comint-proc-query (inferior-lisp-proc) (format lisp-var-doc-command var))) 595 (comint-proc-query (inferior-lisp-proc) (format lisp-var-doc-command var)))
@@ -620,8 +618,8 @@ See variable `lisp-describe-sym-command'."
620 (error "No Lisp subprocess; see variable `inferior-lisp-buffer'")))) 618 (error "No Lisp subprocess; see variable `inferior-lisp-buffer'"))))
621 619
622 620
623;;; Do the user's customization... 621;; Obsolete.
624;;;=============================== 622
625(defvar inferior-lisp-load-hook nil 623(defvar inferior-lisp-load-hook nil
626 "This hook is run when the library `inf-lisp' is loaded.") 624 "This hook is run when the library `inf-lisp' is loaded.")
627(make-obsolete-variable 'inferior-lisp-load-hook 625(make-obsolete-variable 'inferior-lisp-load-hook
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index 196f2de3440..a1a5192ee1f 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -1769,8 +1769,8 @@ sentence."
1769 (insert "\nRetry with ") 1769 (insert "\nRetry with ")
1770 (insert-text-button "'-all'" 1770 (insert-text-button "'-all'"
1771 'follow-link t 1771 'follow-link t
1772 'action #'(lambda (_b) 1772 'action (lambda (_b)
1773 (octave-lookfor str '-all))) 1773 (octave-lookfor str '-all)))
1774 (insert ".\n")) 1774 (insert ".\n"))
1775 (octave-help-mode))))) 1775 (octave-help-mode)))))
1776 1776
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 4101962f06a..910f70db03c 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -732,13 +732,14 @@ requires quoting, e.g. `\\[quoted-insert]<space>'."
732 (interactive (list (project--read-regexp))) 732 (interactive (list (project--read-regexp)))
733 (require 'xref) 733 (require 'xref)
734 (require 'grep) 734 (require 'grep)
735 (let* ((pr (project-current t)) 735 (let* ((caller-dir default-directory)
736 (pr (project-current t))
736 (default-directory (project-root pr)) 737 (default-directory (project-root pr))
737 (files 738 (files
738 (if (not current-prefix-arg) 739 (if (not current-prefix-arg)
739 (project-files pr) 740 (project-files pr)
740 (let ((dir (read-directory-name "Base directory: " 741 (let ((dir (read-directory-name "Base directory: "
741 nil default-directory t))) 742 caller-dir nil t)))
742 (project--files-in-directory dir 743 (project--files-in-directory dir
743 nil 744 nil
744 (grep-read-files regexp)))))) 745 (grep-read-files regexp))))))
@@ -1321,7 +1322,7 @@ are legal even if they aren't listed in the dispatch menu."
1321 key tmp))) 1322 key tmp)))
1322 (let ((key (if key 1323 (let ((key (if key
1323 (vector key) 1324 (vector key)
1324 (where-is-internal cmd project-prefix-map t)))) 1325 (where-is-internal cmd (list project-prefix-map) t))))
1325 (format "[%s] %s" 1326 (format "[%s] %s"
1326 (propertize (key-description key) 'face 'bold) 1327 (propertize (key-description key) 'face 'bold)
1327 label))) 1328 label)))
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index afb96974b17..e5c15d148f8 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -241,8 +241,8 @@
241;; 2) Add the following hook in your .emacs: 241;; 2) Add the following hook in your .emacs:
242 242
243;; (add-hook 'python-mode-hook 243;; (add-hook 'python-mode-hook
244;; #'(lambda () 244;; (lambda ()
245;; (define-key python-mode-map "\C-m" 'newline-and-indent))) 245;; (define-key python-mode-map "\C-m" 'newline-and-indent)))
246 246
247;; I'd recommend the first one since you'll get the same behavior for 247;; I'd recommend the first one since you'll get the same behavior for
248;; all modes out-of-the-box. 248;; all modes out-of-the-box.
@@ -3976,8 +3976,8 @@ Returns the tracked buffer."
3976 "Finish tracking." 3976 "Finish tracking."
3977 (python-pdbtrack-unset-tracked-buffer) 3977 (python-pdbtrack-unset-tracked-buffer)
3978 (when python-pdbtrack-kill-buffers 3978 (when python-pdbtrack-kill-buffers
3979 (mapc #'(lambda (buffer) 3979 (mapc (lambda (buffer)
3980 (ignore-errors (kill-buffer buffer))) 3980 (ignore-errors (kill-buffer buffer)))
3981 python-pdbtrack-buffers-to-kill)) 3981 python-pdbtrack-buffers-to-kill))
3982 (setq python-pdbtrack-buffers-to-kill nil)) 3982 (setq python-pdbtrack-buffers-to-kill nil))
3983 3983
diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el
index f92f4468098..7c0de9fc359 100644
--- a/lisp/progmodes/simula.el
+++ b/lisp/progmodes/simula.el
@@ -1,4 +1,4 @@
1;;; simula.el --- SIMULA 87 code editing commands for Emacs 1;;; simula.el --- SIMULA 87 code editing commands for Emacs -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1992, 1994, 1996, 2001-2021 Free Software Foundation, 3;; Copyright (C) 1992, 1994, 1996, 2001-2021 Free Software Foundation,
4;; Inc. 4;; Inc.
@@ -52,6 +52,7 @@ the run of whitespace at the beginning of the line.")
52Otherwise TAB indents only when point is within 52Otherwise TAB indents only when point is within
53the run of whitespace at the beginning of the line." 53the run of whitespace at the beginning of the line."
54 :type 'boolean) 54 :type 'boolean)
55(make-obsolete-variable 'simula-tab-always-indent 'tab-always-indent "28.1")
55 56
56(defconst simula-indent-level-default 3 57(defconst simula-indent-level-default 3
57 "Indentation of SIMULA statements with respect to containing block.") 58 "Indentation of SIMULA statements with respect to containing block.")
@@ -148,7 +149,24 @@ Please note that the standard definitions are required
148for SIMULA mode to function correctly." 149for SIMULA mode to function correctly."
149 :type '(choice file (const nil))) 150 :type '(choice file (const nil)))
150 151
151(defvar simula-mode-syntax-table nil 152(defvar simula-mode-syntax-table
153 (let ((st (copy-syntax-table (standard-syntax-table))))
154 (modify-syntax-entry ?! "<" st)
155 (modify-syntax-entry ?$ "." st)
156 (modify-syntax-entry ?% "< b" st)
157 (modify-syntax-entry ?\n "> b" st)
158 (modify-syntax-entry ?' "\"" st)
159 (modify-syntax-entry ?\( "()" st)
160 (modify-syntax-entry ?\) ")(" st)
161 (modify-syntax-entry ?\; ">" st)
162 (modify-syntax-entry ?\[ "." st)
163 (modify-syntax-entry ?\\ "." st)
164 (modify-syntax-entry ?\] "." st)
165 (modify-syntax-entry ?_ "_" st)
166 (modify-syntax-entry ?\| "." st)
167 (modify-syntax-entry ?\{ "." st)
168 (modify-syntax-entry ?\} "." st)
169 st)
152 "Syntax table in SIMULA mode buffers.") 170 "Syntax table in SIMULA mode buffers.")
153 171
154(defconst simula-syntax-propertize-function 172(defconst simula-syntax-propertize-function
@@ -237,39 +255,20 @@ for SIMULA mode to function correctly."
237 ["Forward Statement" simula-next-statement t] 255 ["Forward Statement" simula-next-statement t]
238 ["Backward Up Level" simula-backward-up-level t] 256 ["Backward Up Level" simula-backward-up-level t]
239 ["Forward Down Statement" simula-forward-down-level t]) 257 ["Forward Down Statement" simula-forward-down-level t])
240 "Lucid Emacs menu for SIMULA mode.") 258 "Emacs menu for SIMULA mode.")
241
242(if simula-mode-syntax-table
243 ()
244 (setq simula-mode-syntax-table (copy-syntax-table (standard-syntax-table)))
245 (modify-syntax-entry ?! "<" simula-mode-syntax-table)
246 (modify-syntax-entry ?$ "." simula-mode-syntax-table)
247 (modify-syntax-entry ?% "< b" simula-mode-syntax-table)
248 (modify-syntax-entry ?\n "> b" simula-mode-syntax-table)
249 (modify-syntax-entry ?' "\"" simula-mode-syntax-table)
250 (modify-syntax-entry ?\( "()" simula-mode-syntax-table)
251 (modify-syntax-entry ?\) ")(" simula-mode-syntax-table)
252 (modify-syntax-entry ?\; ">" simula-mode-syntax-table)
253 (modify-syntax-entry ?\[ "." simula-mode-syntax-table)
254 (modify-syntax-entry ?\\ "." simula-mode-syntax-table)
255 (modify-syntax-entry ?\] "." simula-mode-syntax-table)
256 (modify-syntax-entry ?_ "_" simula-mode-syntax-table)
257 (modify-syntax-entry ?\| "." simula-mode-syntax-table)
258 (modify-syntax-entry ?\{ "." simula-mode-syntax-table)
259 (modify-syntax-entry ?\} "." simula-mode-syntax-table))
260 259
261(defvar simula-mode-map 260(defvar simula-mode-map
262 (let ((map (make-sparse-keymap))) 261 (let ((map (make-sparse-keymap)))
263 (define-key map "\C-c\C-u" 'simula-backward-up-level) 262 (define-key map "\C-c\C-u" #'simula-backward-up-level)
264 (define-key map "\C-c\C-p" 'simula-previous-statement) 263 (define-key map "\C-c\C-p" #'simula-previous-statement)
265 (define-key map "\C-c\C-d" 'simula-forward-down-level) 264 (define-key map "\C-c\C-d" #'simula-forward-down-level)
266 (define-key map "\C-c\C-n" 'simula-next-statement) 265 (define-key map "\C-c\C-n" #'simula-next-statement)
267 ;; (define-key map "\C-c\C-g" 'simula-goto-definition) 266 ;; (define-key map "\C-c\C-g" #'simula-goto-definition)
268 ;; (define-key map "\C-c\C-h" 'simula-standard-help) 267 ;; (define-key map "\C-c\C-h" #'simula-standard-help)
269 (define-key map "\177" 'backward-delete-char-untabify) 268 (define-key map "\177" #'backward-delete-char-untabify)
270 (define-key map ":" 'simula-electric-label) 269 (define-key map ":" #'simula-electric-label)
271 (define-key map "\e\C-q" 'simula-indent-exp) 270 (define-key map "\e\C-q" #'simula-indent-exp)
272 (define-key map "\t" 'simula-indent-command) 271 ;; (define-key map "\t" #'simula-indent-command)
273 map) 272 map)
274 "Keymap used in `simula-mode'.") 273 "Keymap used in `simula-mode'.")
275 274
@@ -285,8 +284,8 @@ for SIMULA mode to function correctly."
285 ["Previous Statement" simula-previous-statement 284 ["Previous Statement" simula-previous-statement
286 :enable (not (bobp))] 285 :enable (not (bobp))]
287 "---" 286 "---"
288 ["Indent Line" simula-indent-command 287 ;; ["Indent Line" simula-indent-command
289 :enable (not buffer-read-only)] 288 ;; :enable (not buffer-read-only)]
290 ["Indent Expression" simula-indent-exp 289 ["Indent Expression" simula-indent-exp
291 :enable (not buffer-read-only)])) 290 :enable (not buffer-read-only)]))
292 291
@@ -295,9 +294,6 @@ for SIMULA mode to function correctly."
295 "Major mode for editing SIMULA code. 294 "Major mode for editing SIMULA code.
296\\{simula-mode-map} 295\\{simula-mode-map}
297Variables controlling indentation style: 296Variables controlling indentation style:
298 `simula-tab-always-indent'
299 Non-nil means TAB in SIMULA mode should always reindent the current line,
300 regardless of where in the line point is when the TAB command is used.
301 `simula-indent-level' 297 `simula-indent-level'
302 Indentation of SIMULA statements with respect to containing block. 298 Indentation of SIMULA statements with respect to containing block.
303 `simula-substatement-offset' 299 `simula-substatement-offset'
@@ -335,7 +331,7 @@ with no arguments, if that value is non-nil."
335 ;; (setq-local end-comment-column 75) 331 ;; (setq-local end-comment-column 75)
336 (setq-local paragraph-start "[ \t]*$\\|\f") 332 (setq-local paragraph-start "[ \t]*$\\|\f")
337 (setq-local paragraph-separate paragraph-start) 333 (setq-local paragraph-separate paragraph-start)
338 (setq-local indent-line-function 'simula-indent-line) 334 (setq-local indent-line-function #'simula-indent-line)
339 (setq-local comment-start "! ") 335 (setq-local comment-start "! ")
340 (setq-local comment-end " ;") 336 (setq-local comment-end " ;")
341 (setq-local comment-start-skip "!+ *") 337 (setq-local comment-start-skip "!+ *")
@@ -415,6 +411,7 @@ A numeric argument, regardless of its value, means indent rigidly
415all the lines of the SIMULA statement after point so that this line 411all the lines of the SIMULA statement after point so that this line
416becomes properly indented. 412becomes properly indented.
417The relative indentation among the lines of the statement are preserved." 413The relative indentation among the lines of the statement are preserved."
414 (declare (obsolete indent-for-tab-command "28.1"))
418 (interactive "P") 415 (interactive "P")
419 (let ((case-fold-search t)) 416 (let ((case-fold-search t))
420 (if (or whole-exp simula-tab-always-indent 417 (if (or whole-exp simula-tab-always-indent
@@ -1564,30 +1561,6 @@ If not nil and not t, move to limit of search and return nil."
1564 (simula-install-standard-abbrevs)) 1561 (simula-install-standard-abbrevs))
1565 1562
1566;; Hilit mode support. 1563;; Hilit mode support.
1567(when (fboundp 'hilit-set-mode-patterns)
1568 (when (and (boundp 'hilit-patterns-alist)
1569 (not (assoc 'simula-mode hilit-patterns-alist)))
1570 (hilit-set-mode-patterns
1571 'simula-mode
1572 '(
1573 ("^%\\([ \t\f].*\\)?$" nil comment)
1574 ("^%include\\>" nil include)
1575 ("\"[^\"\n]*\"\\|'.'\\|'![0-9]+!'" nil string)
1576 ((regexp-opt '("ACTIVATE" "AFTER" "AND" "ARRAY" "AT" "BEFORE"
1577 "BEGIN" "BOOLEAN" "CHARACTER" "CLASS" "DELAY"
1578 "DO" "ELSE" "END" "EQ" "EQV" "EXTERNAL" "FALSE"
1579 "FOR" "GE" "GO" "GOTO" "GT" "HIDDEN" "IF" "IMP"
1580 "IN" "INNER" "INSPECT" "INTEGER" "IS" "LABEL"
1581 "LE" "LONG" "LT" "NAME" "NE" "NEW" "NONE" "NOT"
1582 "NOTEXT" "OR" "OTHERWISE" "PRIOR" "PROCEDURE"
1583 "PROTECTED" "QUA" "REACTIVATE" "REAL" "REF"
1584 "SHORT" "STEP" "SWITCH" "TEXT" "THEN" "THIS"
1585 "TO" "TRUE" "UNTIL" "VALUE" "VIRTUAL" "WHEN"
1586 "WHILE")
1587 'words)
1588 nil keyword)
1589 ("!\\|\\<COMMENT\\>" ";" comment))
1590 nil 'case-insensitive)))
1591 1564
1592;; obsolete 1565;; obsolete
1593 1566
@@ -1598,7 +1571,7 @@ If not nil and not t, move to limit of search and return nil."
1598 "24.4") 1571 "24.4")
1599 1572
1600(define-obsolete-function-alias 'simula-submit-bug-report 1573(define-obsolete-function-alias 'simula-submit-bug-report
1601 'report-emacs-bug "24.4") 1574 #'report-emacs-bug "24.4")
1602 1575
1603(defun simula-popup-menu (_e) 1576(defun simula-popup-menu (_e)
1604 "Pops up the SIMULA menu." 1577 "Pops up the SIMULA menu."
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index ea52befec57..cada1f11092 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -103,7 +103,7 @@ This is typically the filename.")
103 103
104;;;; Commonly needed location classes are defined here: 104;;;; Commonly needed location classes are defined here:
105 105
106(defcustom xref-file-name-display 'abs 106(defcustom xref-file-name-display 'project-relative
107 "Style of file name display in *xref* buffers. 107 "Style of file name display in *xref* buffers.
108 108
109If the value is the symbol `abs', the default, show the file names 109If the value is the symbol `abs', the default, show the file names
@@ -521,7 +521,7 @@ If SELECT is non-nil, select the target window."
521 "Face for displaying line numbers in the xref buffer." 521 "Face for displaying line numbers in the xref buffer."
522 :version "27.1") 522 :version "27.1")
523 523
524(defface xref-match '((t :inherit highlight)) 524(defface xref-match '((t :inherit match))
525 "Face used to highlight matches in the xref buffer." 525 "Face used to highlight matches in the xref buffer."
526 :version "27.1") 526 :version "27.1")
527 527
diff --git a/lisp/recentf.el b/lisp/recentf.el
index c819397a33d..9ae059a70dd 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,4 +1,4 @@
1;;; recentf.el --- setup a menu of recently opened files 1;;; recentf.el --- setup a menu of recently opened files -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1999-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
4 4
@@ -24,16 +24,21 @@
24;;; Commentary: 24;;; Commentary:
25 25
26;; This package maintains a menu for visiting files that were operated 26;; This package maintains a menu for visiting files that were operated
27;; on recently. When enabled a new "Open Recent" sub menu is 27;; on recently. When enabled a new "Open Recent" submenu is
28;; displayed in the "File" menu. The recent files list is 28;; displayed in the "File" menu. The recent files list is
29;; automatically saved across Emacs sessions. You can customize the 29;; automatically saved across Emacs sessions.
30;; number of recent files displayed, the location of the menu and
31;; others options (see the source code for details).
32 30
33;; To enable this package, add the following to your .emacs: 31;; You can customize the number of recent files displayed, the
34;; (recentf-mode 1) 32;; location of the menu and others options. Type:
33;;
34;; M-x customize-group RET recentf RET
35
36;; To enable this package, add this line to your Init file:
37;;
38;; (recentf-mode 1)
35 39
36;;; Code: 40;;; Code:
41
37(require 'tree-widget) 42(require 'tree-widget)
38(require 'timer) 43(require 'timer)
39 44
@@ -73,7 +78,7 @@ See the command `recentf-save-list'."
73 :type 'file 78 :type 'file
74 :initialize 'custom-initialize-default 79 :initialize 'custom-initialize-default
75 :set (lambda (symbol value) 80 :set (lambda (symbol value)
76 (let ((oldvalue (eval symbol))) 81 (let ((oldvalue (symbol-value symbol)))
77 (custom-set-default symbol value) 82 (custom-set-default symbol value)
78 (and (not (equal value oldvalue)) 83 (and (not (equal value oldvalue))
79 recentf-mode 84 recentf-mode
@@ -292,7 +297,7 @@ They are successively passed a file name to transform it."
292 (function :tag "Other function"))))) 297 (function :tag "Other function")))))
293 298
294(defcustom recentf-show-file-shortcuts-flag t 299(defcustom recentf-show-file-shortcuts-flag t
295 "Whether to show \"[N]\" for the Nth item up to 10. 300 "Non-nil means to show \"[N]\" for the Nth item up to 10.
296If non-nil, `recentf-open-files' will show labels for keys that can be 301If non-nil, `recentf-open-files' will show labels for keys that can be
297used as shortcuts to open the Nth file." 302used as shortcuts to open the Nth file."
298 :group 'recentf 303 :group 'recentf
@@ -327,15 +332,6 @@ Ignore case if `recentf-case-fold-search' is non-nil."
327 (setq list (cdr list))) 332 (setq list (cdr list)))
328 list) 333 list)
329 334
330(defsubst recentf-trunc-list (l n)
331 "Return from L the list of its first N elements."
332 (let (nl)
333 (while (and l (> n 0))
334 (setq nl (cons (car l) nl)
335 n (1- n)
336 l (cdr l)))
337 (nreverse nl)))
338
339(defun recentf-dump-variable (variable &optional limit) 335(defun recentf-dump-variable (variable &optional limit)
340 "Insert a \"(setq VARIABLE value)\" in the current buffer. 336 "Insert a \"(setq VARIABLE value)\" in the current buffer.
341When the value of VARIABLE is a list, optional argument LIMIT 337When the value of VARIABLE is a list, optional argument LIMIT
@@ -345,7 +341,7 @@ the full list."
345 (if (atom value) 341 (if (atom value)
346 (insert (format "\n(setq %S '%S)\n" variable value)) 342 (insert (format "\n(setq %S '%S)\n" variable value))
347 (when (and (integerp limit) (> limit 0)) 343 (when (and (integerp limit) (> limit 0))
348 (setq value (recentf-trunc-list value limit))) 344 (setq value (seq-take value limit)))
349 (insert (format "\n(setq %S\n '(" variable)) 345 (insert (format "\n(setq %S\n '(" variable))
350 (dolist (e value) 346 (dolist (e value)
351 (insert (format "\n %S" e))) 347 (insert (format "\n %S" e)))
@@ -516,7 +512,7 @@ filter function this variable is reset to nil.")
516 512
517(defsubst recentf-elements (n) 513(defsubst recentf-elements (n)
518 "Return a list of the first N elements of the recent list." 514 "Return a list of the first N elements of the recent list."
519 (recentf-trunc-list recentf-list n)) 515 (seq-take recentf-list n))
520 516
521(defsubst recentf-make-menu-element (menu-item menu-value) 517(defsubst recentf-make-menu-element (menu-item menu-value)
522 "Create a new menu-element. 518 "Create a new menu-element.
@@ -556,7 +552,7 @@ This a menu element (FILE . FILE)."
556(defsubst recentf-menu-elements (n) 552(defsubst recentf-menu-elements (n)
557 "Return a list of the first N default menu elements from the recent list. 553 "Return a list of the first N default menu elements from the recent list.
558See also `recentf-make-default-menu-element'." 554See also `recentf-make-default-menu-element'."
559 (mapcar 'recentf-make-default-menu-element 555 (mapcar #'recentf-make-default-menu-element
560 (recentf-elements n))) 556 (recentf-elements n)))
561 557
562(defun recentf-apply-menu-filter (filter l) 558(defun recentf-apply-menu-filter (filter l)
@@ -597,7 +593,7 @@ This is a menu filter function which ignores the MENU argument."
597 (let* ((recentf-menu-shortcuts 0) 593 (let* ((recentf-menu-shortcuts 0)
598 (file-items 594 (file-items
599 (condition-case err 595 (condition-case err
600 (mapcar 'recentf-make-menu-item 596 (mapcar #'recentf-make-menu-item
601 (recentf-apply-menu-filter 597 (recentf-apply-menu-filter
602 recentf-menu-filter 598 recentf-menu-filter
603 (recentf-menu-elements recentf-max-menu-items))) 599 (recentf-menu-elements recentf-max-menu-items)))
@@ -639,7 +635,7 @@ Return nil if file NAME is not one of the ten more recent."
639 (let ((item (recentf-menu-element-item elt)) 635 (let ((item (recentf-menu-element-item elt))
640 (value (recentf-menu-element-value elt))) 636 (value (recentf-menu-element-value elt)))
641 (if (recentf-sub-menu-element-p elt) 637 (if (recentf-sub-menu-element-p elt)
642 (cons item (mapcar 'recentf-make-menu-item value)) 638 (cons item (mapcar #'recentf-make-menu-item value))
643 (let ((k (and (< recentf-menu-shortcuts 10) 639 (let ((k (and (< recentf-menu-shortcuts 10)
644 (recentf-menu-value-shortcut value)))) 640 (recentf-menu-value-shortcut value))))
645 (vector item 641 (vector item
@@ -764,12 +760,12 @@ This filter combines the `recentf-sort-basenames-descending' and
764(defun recentf-relative-filter (l) 760(defun recentf-relative-filter (l)
765 "Filter the list of menu-elements L to show relative filenames. 761 "Filter the list of menu-elements L to show relative filenames.
766Filenames are relative to the `default-directory'." 762Filenames are relative to the `default-directory'."
767 (mapcar #'(lambda (menu-element) 763 (mapcar (lambda (menu-element)
768 (let* ((ful (recentf-menu-element-value menu-element)) 764 (let* ((ful (recentf-menu-element-value menu-element))
769 (rel (file-relative-name ful default-directory))) 765 (rel (file-relative-name ful default-directory)))
770 (if (string-match "^\\.\\." rel) 766 (if (string-match "^\\.\\." rel)
771 menu-element 767 menu-element
772 (recentf-make-menu-element rel ful)))) 768 (recentf-make-menu-element rel ful))))
773 l)) 769 l))
774 770
775;;; Rule based menu filters 771;;; Rule based menu filters
@@ -941,10 +937,10 @@ Rules obey `recentf-arrange-rules' format."
941This simplified version of `recentf-show-basenames' does not handle 937This simplified version of `recentf-show-basenames' does not handle
942duplicates. It is used by `recentf-arrange-by-dir' as its 938duplicates. It is used by `recentf-arrange-by-dir' as its
943`recentf-arrange-by-rule-subfilter'." 939`recentf-arrange-by-rule-subfilter'."
944 (mapcar #'(lambda (e) 940 (mapcar (lambda (e)
945 (recentf-make-menu-element 941 (recentf-make-menu-element
946 (file-name-nondirectory (recentf-menu-element-value e)) 942 (file-name-nondirectory (recentf-menu-element-value e))
947 (recentf-menu-element-value e))) 943 (recentf-menu-element-value e)))
948 l)) 944 l))
949 945
950(defun recentf-dir-rule (file) 946(defun recentf-dir-rule (file)
@@ -997,15 +993,15 @@ Filtering of L is delegated to the selected filter in the menu."
997 (list 993 (list
998 `("Show files" 994 `("Show files"
999 ,@(mapcar 995 ,@(mapcar
1000 #'(lambda (f) 996 (lambda (f)
1001 `[,(cdr f) 997 `[,(cdr f)
1002 (setq recentf-filter-changer-current ',(car f)) 998 (setq recentf-filter-changer-current ',(car f))
1003 ;;:active t 999 ;;:active t
1004 :style radio ;;radio Don't work with GTK :-( 1000 :style radio ;;radio Don't work with GTK :-(
1005 :selected (eq recentf-filter-changer-current 1001 :selected (eq recentf-filter-changer-current
1006 ',(car f)) 1002 ',(car f))
1007 ;;:help ,(cdr f) 1003 ;;:help ,(cdr f)
1008 ]) 1004 ])
1009 recentf-filter-changer-alist)))) 1005 recentf-filter-changer-alist))))
1010 (recentf-apply-menu-filter recentf-filter-changer-current l))) 1006 (recentf-apply-menu-filter recentf-filter-changer-current l)))
1011 1007
@@ -1062,9 +1058,9 @@ Go to the beginning of buffer if not found."
1062(defvar recentf-dialog-mode-map 1058(defvar recentf-dialog-mode-map
1063 (let ((km (copy-keymap recentf--shortcuts-keymap))) 1059 (let ((km (copy-keymap recentf--shortcuts-keymap)))
1064 (set-keymap-parent km widget-keymap) 1060 (set-keymap-parent km widget-keymap)
1065 (define-key km "q" 'recentf-cancel-dialog) 1061 (define-key km "q" #'recentf-cancel-dialog)
1066 (define-key km "n" 'next-line) 1062 (define-key km "n" #'next-line)
1067 (define-key km "p" 'previous-line) 1063 (define-key km "p" #'previous-line)
1068 km) 1064 km)
1069 "Keymap used in recentf dialogs.") 1065 "Keymap used in recentf dialogs.")
1070 1066
@@ -1083,8 +1079,8 @@ Go to the beginning of buffer if not found."
1083 ;; Cleanup buffer 1079 ;; Cleanup buffer
1084 (let ((inhibit-read-only t) 1080 (let ((inhibit-read-only t)
1085 (ol (overlay-lists))) 1081 (ol (overlay-lists)))
1086 (mapc 'delete-overlay (car ol)) 1082 (mapc #'delete-overlay (car ol))
1087 (mapc 'delete-overlay (cdr ol)) 1083 (mapc #'delete-overlay (cdr ol))
1088 (erase-buffer)) 1084 (erase-buffer))
1089 (recentf-dialog-mode) 1085 (recentf-dialog-mode)
1090 ,@forms 1086 ,@forms
@@ -1178,7 +1174,7 @@ IGNORE other arguments."
1178 :node (item :tag ,(car menu-element) 1174 :node (item :tag ,(car menu-element)
1179 :sample-face bold 1175 :sample-face bold
1180 :format "%{%t%}:\n") 1176 :format "%{%t%}:\n")
1181 ,@(mapcar 'recentf-open-files-item 1177 ,@(mapcar #'recentf-open-files-item
1182 (cdr menu-element))) 1178 (cdr menu-element)))
1183 ;; Represent a single file with a link widget 1179 ;; Represent a single file with a link widget
1184 `(link :tag ,(car menu-element) 1180 `(link :tag ,(car menu-element)
@@ -1193,8 +1189,8 @@ IGNORE other arguments."
1193(defun recentf-open-files-items (files) 1189(defun recentf-open-files-items (files)
1194 "Return a list of widgets to display FILES in a dialog buffer." 1190 "Return a list of widgets to display FILES in a dialog buffer."
1195 (setq-local recentf--files-with-key 1191 (setq-local recentf--files-with-key
1196 (recentf-trunc-list files 10)) 1192 (seq-take files 10))
1197 (mapcar 'recentf-open-files-item 1193 (mapcar #'recentf-open-files-item
1198 (append 1194 (append
1199 ;; When requested group the files with shortcuts together 1195 ;; When requested group the files with shortcuts together
1200 ;; at the top of the list. 1196 ;; at the top of the list.
@@ -1202,12 +1198,12 @@ IGNORE other arguments."
1202 (setq files (nthcdr 10 files)) 1198 (setq files (nthcdr 10 files))
1203 (recentf-apply-menu-filter 1199 (recentf-apply-menu-filter
1204 'recentf-show-digit-shortcut-filter 1200 'recentf-show-digit-shortcut-filter
1205 (mapcar 'recentf-make-default-menu-element 1201 (mapcar #'recentf-make-default-menu-element
1206 recentf--files-with-key))) 1202 recentf--files-with-key)))
1207 ;; Then the other files. 1203 ;; Then the other files.
1208 (recentf-apply-menu-filter 1204 (recentf-apply-menu-filter
1209 recentf-menu-filter 1205 recentf-menu-filter
1210 (mapcar 'recentf-make-default-menu-element 1206 (mapcar #'recentf-make-default-menu-element
1211 files))))) 1207 files)))))
1212 1208
1213(defun recentf-open-files (&optional files buffer-name) 1209(defun recentf-open-files (&optional files buffer-name)
@@ -1228,7 +1224,7 @@ use for the dialog. It defaults to \"*`recentf-menu-title'*\"."
1228 (format-message "Click on Cancel or type `q' to cancel.\n")) 1224 (format-message "Click on Cancel or type `q' to cancel.\n"))
1229 ;; Use a L&F that looks like the recentf menu. 1225 ;; Use a L&F that looks like the recentf menu.
1230 (tree-widget-set-theme "folder") 1226 (tree-widget-set-theme "folder")
1231 (apply 'widget-create 1227 (apply #'widget-create
1232 `(group 1228 `(group
1233 :indent 2 1229 :indent 2
1234 :format "\n%v\n" 1230 :format "\n%v\n"
@@ -1310,7 +1306,7 @@ empty `file-name-history' with the recent list."
1310 (load-file file) 1306 (load-file file)
1311 (and recentf-initialize-file-name-history 1307 (and recentf-initialize-file-name-history
1312 (not file-name-history) 1308 (not file-name-history)
1313 (setq file-name-history (mapcar 'abbreviate-file-name 1309 (setq file-name-history (mapcar #'abbreviate-file-name
1314 recentf-list)))))) 1310 recentf-list))))))
1315 1311
1316(defun recentf-cleanup () 1312(defun recentf-cleanup ()
@@ -1377,6 +1373,10 @@ buffers you switch to a lot, you can say something like the following:
1377 ;; continue standard unloading 1373 ;; continue standard unloading
1378 nil) 1374 nil)
1379 1375
1376;; Obsolete.
1377
1378(define-obsolete-function-alias 'recentf-trunc-list #'seq-take "28.1")
1379
1380(provide 'recentf) 1380(provide 'recentf)
1381 1381
1382(run-hooks 'recentf-load-hook) 1382(run-hooks 'recentf-load-hook)
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index a4f0eba4449..a03965cf6c7 100644
--- a/lisp/shadowfile.el
+++ b/lisp/shadowfile.el
@@ -172,20 +172,6 @@ created by `shadow-define-regexp-group'.")
172;;; Syntactic sugar; General list and string manipulation 172;;; Syntactic sugar; General list and string manipulation
173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
174 174
175(defun shadow-union (a b)
176 "Add members of list A to list B if not equal to items already in B."
177 (if (null a)
178 b
179 (if (member (car a) b)
180 (shadow-union (cdr a) b)
181 (shadow-union (cdr a) (cons (car a) b)))))
182
183(defun shadow-find (func list)
184 "If FUNC applied to some element of LIST is non-nil, return first such element."
185 (while (and list (not (funcall func (car list))))
186 (setq list (cdr list)))
187 (car list))
188
189(defun shadow-regexp-superquote (string) 175(defun shadow-regexp-superquote (string)
190 "Like `regexp-quote', but includes the \\` and \\'. 176 "Like `regexp-quote', but includes the \\` and \\'.
191This makes sure regexp matches nothing but STRING." 177This makes sure regexp matches nothing but STRING."
@@ -226,7 +212,7 @@ information defining the cluster. For interactive use, call
226 212
227(defun shadow-get-cluster (name) 213(defun shadow-get-cluster (name)
228 "Return cluster named NAME, or nil." 214 "Return cluster named NAME, or nil."
229 (shadow-find 215 (seq-find
230 (lambda (x) (string-equal (shadow-cluster-name x) name)) 216 (lambda (x) (string-equal (shadow-cluster-name x) name))
231 shadow-clusters)) 217 shadow-clusters))
232 218
@@ -252,7 +238,7 @@ information defining the cluster. For interactive use, call
252(defun shadow-site-cluster (site) 238(defun shadow-site-cluster (site)
253 "Given a SITE, return cluster it is in, or nil." 239 "Given a SITE, return cluster it is in, or nil."
254 (or (shadow-get-cluster (shadow-site-name site)) 240 (or (shadow-get-cluster (shadow-site-name site))
255 (shadow-find 241 (seq-find
256 (lambda (x) 242 (lambda (x)
257 (string-match (shadow-cluster-regexp x) (shadow-name-site site))) 243 (string-match (shadow-cluster-regexp x) (shadow-name-site site)))
258 shadow-clusters))) 244 shadow-clusters)))
@@ -653,7 +639,7 @@ Consider them as regular expressions if third arg REGEXP is true."
653 shadows shadow-files-to-copy (with-output-to-string (backtrace)))) 639 shadows shadow-files-to-copy (with-output-to-string (backtrace))))
654 (when shadows 640 (when shadows
655 (setq shadow-files-to-copy 641 (setq shadow-files-to-copy
656 (shadow-union shadows shadow-files-to-copy)) 642 (cl-union shadows shadow-files-to-copy :test #'equal))
657 (when (not shadow-inhibit-message) 643 (when (not shadow-inhibit-message)
658 (message "%s" (substitute-command-keys 644 (message "%s" (substitute-command-keys
659 "Use \\[shadow-copy-files] to update shadows.")) 645 "Use \\[shadow-copy-files] to update shadows."))
@@ -839,6 +825,17 @@ look for files that have been changed and need to be copied to other systems."
839 ;; continue standard unloading 825 ;; continue standard unloading
840 nil) 826 nil)
841 827
828;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
829;;; Obsolete
830;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
831
832(defun shadow-union (a b)
833 "Add members of list A to list B if not equal to items already in B."
834 (declare (obsolete cl-union "28.1"))
835 (cl-union a b :test #'equal))
836
837(define-obsolete-function-alias 'shadow-find #'seq-find "28.1")
838
842(provide 'shadowfile) 839(provide 'shadowfile)
843 840
844;;; shadowfile.el ends here 841;;; shadowfile.el ends here
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 55f2ae8cc47..4b682e99feb 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -1,4 +1,4 @@
1;;; strokes.el --- control Emacs through mouse strokes 1;;; strokes.el --- control Emacs through mouse strokes -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1997, 2000-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2000-2021 Free Software Foundation, Inc.
4 4
@@ -216,14 +216,12 @@ static char * stroke_xpm[] = {
216 216
217(defcustom strokes-lighter " Strokes" 217(defcustom strokes-lighter " Strokes"
218 "Mode line identifier for Strokes mode." 218 "Mode line identifier for Strokes mode."
219 :type 'string 219 :type 'string)
220 :group 'strokes)
221 220
222(defcustom strokes-character ?@ 221(defcustom strokes-character ?@
223 "Character used when drawing strokes in the strokes buffer. 222 "Character used when drawing strokes in the strokes buffer.
224\(The default is `@', which works well.)" 223\(The default is `@', which works well.)"
225 :type 'character 224 :type 'character)
226 :group 'strokes)
227 225
228(defcustom strokes-minimum-match-score 1000 226(defcustom strokes-minimum-match-score 1000
229 "Minimum score for a stroke to be considered a possible match. 227 "Minimum score for a stroke to be considered a possible match.
@@ -239,8 +237,7 @@ then you can set `strokes-minimum-match-score' to something that works
239for you. The only purpose of this variable is to insure that if you 237for you. The only purpose of this variable is to insure that if you
240do a bogus stroke that really doesn't match any of the predefined 238do a bogus stroke that really doesn't match any of the predefined
241ones, then strokes should NOT pick the one that came closest." 239ones, then strokes should NOT pick the one that came closest."
242 :type 'integer 240 :type 'integer)
243 :group 'strokes)
244 241
245(defcustom strokes-grid-resolution 9 242(defcustom strokes-grid-resolution 9
246 "Integer defining dimensions of the stroke grid. 243 "Integer defining dimensions of the stroke grid.
@@ -256,14 +253,12 @@ WARNING: Changing the value of this variable will gravely affect the
256 figure out what it should be based on your needs and on how 253 figure out what it should be based on your needs and on how
257 quick the particular platform(s) you're operating on, and 254 quick the particular platform(s) you're operating on, and
258 only then start programming in your custom strokes." 255 only then start programming in your custom strokes."
259 :type 'integer 256 :type 'integer)
260 :group 'strokes)
261 257
262(defcustom strokes-file (locate-user-emacs-file "strokes" ".strokes") 258(defcustom strokes-file (locate-user-emacs-file "strokes" ".strokes")
263 "File containing saved strokes for Strokes mode." 259 "File containing saved strokes for Strokes mode."
264 :version "24.4" ; added locate-user-emacs-file 260 :version "24.4" ; added locate-user-emacs-file
265 :type 'file 261 :type 'file)
266 :group 'strokes)
267 262
268(defvar strokes-buffer-name " *strokes*" 263(defvar strokes-buffer-name " *strokes*"
269 "The name of the buffer that the strokes take place in.") 264 "The name of the buffer that the strokes take place in.")
@@ -273,8 +268,7 @@ WARNING: Changing the value of this variable will gravely affect the
273If nil, strokes will be read the same, however the user will not be 268If nil, strokes will be read the same, however the user will not be
274able to see the strokes. This be helpful for people who don't like 269able to see the strokes. This be helpful for people who don't like
275the delay in switching to the strokes buffer." 270the delay in switching to the strokes buffer."
276 :type 'boolean 271 :type 'boolean)
277 :group 'strokes)
278 272
279;;; internal variables... 273;;; internal variables...
280 274
@@ -1044,7 +1038,7 @@ o Strokes are a bit computer-dependent in that they depend somewhat on
1044 (help-mode) 1038 (help-mode)
1045 (help-print-return-message))) 1039 (help-print-return-message)))
1046 1040
1047(define-obsolete-function-alias 'strokes-report-bug 'report-emacs-bug "24.1") 1041(define-obsolete-function-alias 'strokes-report-bug #'report-emacs-bug "24.1")
1048 1042
1049(defun strokes-window-configuration-changed-p () 1043(defun strokes-window-configuration-changed-p ()
1050 "Non-nil if the `strokes-window-configuration' frame properties changed. 1044 "Non-nil if the `strokes-window-configuration' frame properties changed.
@@ -1379,8 +1373,8 @@ If STROKES-MAP is not given, `strokes-global-map' will be used instead."
1379 1373
1380(defvar strokes-mode-map 1374(defvar strokes-mode-map
1381 (let ((map (make-sparse-keymap))) 1375 (let ((map (make-sparse-keymap)))
1382 (define-key map [(shift down-mouse-2)] 'strokes-do-stroke) 1376 (define-key map [(shift down-mouse-2)] #'strokes-do-stroke)
1383 (define-key map [(meta down-mouse-2)] 'strokes-do-complex-stroke) 1377 (define-key map [(meta down-mouse-2)] #'strokes-do-complex-stroke)
1384 map)) 1378 map))
1385 1379
1386;;;###autoload 1380;;;###autoload
@@ -1399,8 +1393,7 @@ Encode/decode your strokes with \\[strokes-encode-buffer],
1399\\[strokes-decode-buffer]. 1393\\[strokes-decode-buffer].
1400 1394
1401\\{strokes-mode-map}" 1395\\{strokes-mode-map}"
1402 nil strokes-lighter strokes-mode-map 1396 nil strokes-lighter strokes-mode-map :global t
1403 :group 'strokes :global t
1404 (cond ((not (display-mouse-p)) 1397 (cond ((not (display-mouse-p))
1405 (error "Can't use Strokes without a mouse")) 1398 (error "Can't use Strokes without a mouse"))
1406 (strokes-mode ; turn on strokes 1399 (strokes-mode ; turn on strokes
@@ -1408,15 +1401,15 @@ Encode/decode your strokes with \\[strokes-encode-buffer],
1408 (null strokes-global-map) 1401 (null strokes-global-map)
1409 (strokes-load-user-strokes)) 1402 (strokes-load-user-strokes))
1410 (add-hook 'kill-emacs-query-functions 1403 (add-hook 'kill-emacs-query-functions
1411 'strokes-prompt-user-save-strokes) 1404 #'strokes-prompt-user-save-strokes)
1412 (add-hook 'select-frame-hook 1405 (add-hook 'select-frame-hook
1413 'strokes-update-window-configuration) 1406 #'strokes-update-window-configuration)
1414 (strokes-update-window-configuration)) 1407 (strokes-update-window-configuration))
1415 (t ; turn off strokes 1408 (t ; turn off strokes
1416 (if (get-buffer strokes-buffer-name) 1409 (if (get-buffer strokes-buffer-name)
1417 (kill-buffer (get-buffer strokes-buffer-name))) 1410 (kill-buffer (get-buffer strokes-buffer-name)))
1418 (remove-hook 'select-frame-hook 1411 (remove-hook 'select-frame-hook
1419 'strokes-update-window-configuration)))) 1412 #'strokes-update-window-configuration))))
1420 1413
1421 1414
1422;;;; strokes-xpm stuff (later may be separate)... 1415;;;; strokes-xpm stuff (later may be separate)...
@@ -1426,74 +1419,75 @@ Encode/decode your strokes with \\[strokes-encode-buffer],
1426 1419
1427(defface strokes-char '((t (:background "lightgray"))) 1420(defface strokes-char '((t (:background "lightgray")))
1428 "Face for strokes characters." 1421 "Face for strokes characters."
1429 :version "21.1" 1422 :version "21.1")
1430 :group 'strokes)
1431 1423
1432(put 'strokes 'char-table-extra-slots 0) 1424(put 'strokes 'char-table-extra-slots 0)
1433(defconst strokes-char-table (make-char-table 'strokes) ; 1425(defconst strokes-char-table
1426 (let ((ct (make-char-table 'strokes))) ;
1427 (aset ct ?0 0)
1428 (aset ct ?1 1)
1429 (aset ct ?2 2)
1430 (aset ct ?3 3)
1431 (aset ct ?4 4)
1432 (aset ct ?5 5)
1433 (aset ct ?6 6)
1434 (aset ct ?7 7)
1435 (aset ct ?8 8)
1436 (aset ct ?9 9)
1437 (aset ct ?a 10)
1438 (aset ct ?b 11)
1439 (aset ct ?c 12)
1440 (aset ct ?d 13)
1441 (aset ct ?e 14)
1442 (aset ct ?f 15)
1443 (aset ct ?g 16)
1444 (aset ct ?h 17)
1445 (aset ct ?i 18)
1446 (aset ct ?j 19)
1447 (aset ct ?k 20)
1448 (aset ct ?l 21)
1449 (aset ct ?m 22)
1450 (aset ct ?n 23)
1451 (aset ct ?o 24)
1452 (aset ct ?p 25)
1453 (aset ct ?q 26)
1454 (aset ct ?r 27)
1455 (aset ct ?s 28)
1456 (aset ct ?t 29)
1457 (aset ct ?u 30)
1458 (aset ct ?v 31)
1459 (aset ct ?w 32)
1460 (aset ct ?x 33)
1461 (aset ct ?y 34)
1462 (aset ct ?z 35)
1463 (aset ct ?A 36)
1464 (aset ct ?B 37)
1465 (aset ct ?C 38)
1466 (aset ct ?D 39)
1467 (aset ct ?E 40)
1468 (aset ct ?F 41)
1469 (aset ct ?G 42)
1470 (aset ct ?H 43)
1471 (aset ct ?I 44)
1472 (aset ct ?J 45)
1473 (aset ct ?K 46)
1474 (aset ct ?L 47)
1475 (aset ct ?M 48)
1476 (aset ct ?N 49)
1477 (aset ct ?O 50)
1478 (aset ct ?P 51)
1479 (aset ct ?Q 52)
1480 (aset ct ?R 53)
1481 (aset ct ?S 54)
1482 (aset ct ?T 55)
1483 (aset ct ?U 56)
1484 (aset ct ?V 57)
1485 (aset ct ?W 58)
1486 (aset ct ?X 59)
1487 (aset ct ?Y 60)
1488 (aset ct ?Z 61)
1489 ct)
1434 "The table which stores values for the character keys.") 1490 "The table which stores values for the character keys.")
1435(aset strokes-char-table ?0 0)
1436(aset strokes-char-table ?1 1)
1437(aset strokes-char-table ?2 2)
1438(aset strokes-char-table ?3 3)
1439(aset strokes-char-table ?4 4)
1440(aset strokes-char-table ?5 5)
1441(aset strokes-char-table ?6 6)
1442(aset strokes-char-table ?7 7)
1443(aset strokes-char-table ?8 8)
1444(aset strokes-char-table ?9 9)
1445(aset strokes-char-table ?a 10)
1446(aset strokes-char-table ?b 11)
1447(aset strokes-char-table ?c 12)
1448(aset strokes-char-table ?d 13)
1449(aset strokes-char-table ?e 14)
1450(aset strokes-char-table ?f 15)
1451(aset strokes-char-table ?g 16)
1452(aset strokes-char-table ?h 17)
1453(aset strokes-char-table ?i 18)
1454(aset strokes-char-table ?j 19)
1455(aset strokes-char-table ?k 20)
1456(aset strokes-char-table ?l 21)
1457(aset strokes-char-table ?m 22)
1458(aset strokes-char-table ?n 23)
1459(aset strokes-char-table ?o 24)
1460(aset strokes-char-table ?p 25)
1461(aset strokes-char-table ?q 26)
1462(aset strokes-char-table ?r 27)
1463(aset strokes-char-table ?s 28)
1464(aset strokes-char-table ?t 29)
1465(aset strokes-char-table ?u 30)
1466(aset strokes-char-table ?v 31)
1467(aset strokes-char-table ?w 32)
1468(aset strokes-char-table ?x 33)
1469(aset strokes-char-table ?y 34)
1470(aset strokes-char-table ?z 35)
1471(aset strokes-char-table ?A 36)
1472(aset strokes-char-table ?B 37)
1473(aset strokes-char-table ?C 38)
1474(aset strokes-char-table ?D 39)
1475(aset strokes-char-table ?E 40)
1476(aset strokes-char-table ?F 41)
1477(aset strokes-char-table ?G 42)
1478(aset strokes-char-table ?H 43)
1479(aset strokes-char-table ?I 44)
1480(aset strokes-char-table ?J 45)
1481(aset strokes-char-table ?K 46)
1482(aset strokes-char-table ?L 47)
1483(aset strokes-char-table ?M 48)
1484(aset strokes-char-table ?N 49)
1485(aset strokes-char-table ?O 50)
1486(aset strokes-char-table ?P 51)
1487(aset strokes-char-table ?Q 52)
1488(aset strokes-char-table ?R 53)
1489(aset strokes-char-table ?S 54)
1490(aset strokes-char-table ?T 55)
1491(aset strokes-char-table ?U 56)
1492(aset strokes-char-table ?V 57)
1493(aset strokes-char-table ?W 58)
1494(aset strokes-char-table ?X 59)
1495(aset strokes-char-table ?Y 60)
1496(aset strokes-char-table ?Z 61)
1497 1491
1498(defconst strokes-base64-chars 1492(defconst strokes-base64-chars
1499 ;; I wanted to make this a vector of individual like (vector ?0 1493 ;; I wanted to make this a vector of individual like (vector ?0
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index dc45a7306d8..fbb9d2174fd 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -106,13 +106,6 @@
106;; If you add a new drawing mode, send it to me, and I would gladly 106;; If you add a new drawing mode, send it to me, and I would gladly
107;; include in the next release! 107;; include in the next release!
108 108
109;;; Installation:
110
111;; To use artist, put this in your .emacs:
112;;
113;; (autoload 'artist-mode "artist" "Enter artist-mode" t)
114
115
116;;; Requirements: 109;;; Requirements:
117 110
118;; Artist requires the `rect' package (which comes with Emacs) to be 111;; Artist requires the `rect' package (which comes with Emacs) to be
@@ -1760,13 +1753,6 @@ info-variant-part."
1760 "Call function FN with ARGS, if FN is not nil." 1753 "Call function FN with ARGS, if FN is not nil."
1761 `(if ,fn (funcall ,fn ,@args))) 1754 `(if ,fn (funcall ,fn ,@args)))
1762 1755
1763(defun artist-uniq (l)
1764 "Remove consecutive duplicates in list L. Comparison is done with `equal'."
1765 (cond ((null l) nil)
1766 ((null (cdr l)) l) ; only one element in list
1767 ((equal (car l) (car (cdr l))) (artist-uniq (cdr l))) ; first 2 equal
1768 (t (cons (car l) (artist-uniq (cdr l)))))) ; first 2 are different
1769
1770(defun artist-string-split (str r) 1756(defun artist-string-split (str r)
1771 "Split string STR at occurrences of regexp R, returning a list of strings." 1757 "Split string STR at occurrences of regexp R, returning a list of strings."
1772 (let ((res nil) 1758 (let ((res nil)
@@ -2768,7 +2754,7 @@ to append to the end of the list, when doing free-hand drawing)."
2768Also, the `artist-key-poly-point-list' is reversed." 2754Also, the `artist-key-poly-point-list' is reversed."
2769 2755
2770 (setq artist-key-poly-point-list 2756 (setq artist-key-poly-point-list
2771 (artist-uniq artist-key-poly-point-list)) 2757 (seq-uniq artist-key-poly-point-list))
2772 2758
2773 (if (>= (length artist-key-poly-point-list) 2) 2759 (if (>= (length artist-key-poly-point-list) 2)
2774 2760
@@ -5379,10 +5365,7 @@ The event, EV, is the mouse event."
5379 (concat "Hello Tomas,\n\n" 5365 (concat "Hello Tomas,\n\n"
5380 "I have a nice bug report on Artist for you! Here it is:"))))) 5366 "I have a nice bug report on Artist for you! Here it is:")))))
5381 5367
5382 5368(define-obsolete-function-alias 'artist-uniq #'seq-uniq "28.1")
5383;;
5384;; Now provide this minor mode
5385;;
5386 5369
5387(provide 'artist) 5370(provide 'artist)
5388 5371
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index cb5027a9763..61514d6761b 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -412,12 +412,12 @@ and `fill-nobreak-invisible'."
412 ;; Register `kinsoku' for scripts HAN, KANA, BOPOMOFO, and CJK-MISC. 412 ;; Register `kinsoku' for scripts HAN, KANA, BOPOMOFO, and CJK-MISC.
413 ;; Also tell that they don't use space between words. 413 ;; Also tell that they don't use space between words.
414 (map-char-table 414 (map-char-table
415 #'(lambda (key val) 415 (lambda (key val)
416 (when (memq val '(han kana bopomofo cjk-misc)) 416 (when (memq val '(han kana bopomofo cjk-misc))
417 (set-char-table-range fill-find-break-point-function-table 417 (set-char-table-range fill-find-break-point-function-table
418 key 'kinsoku) 418 key 'kinsoku)
419 (set-char-table-range fill-nospace-between-words-table 419 (set-char-table-range fill-nospace-between-words-table
420 key t))) 420 key t)))
421 char-script-table) 421 char-script-table)
422 ;; Do the same thing also for full width characters and half 422 ;; Do the same thing also for full width characters and half
423 ;; width kana variants. 423 ;; width kana variants.
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index cee578fc4b8..eb521134dc4 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1207,9 +1207,9 @@ If LANG is omitted, get the extra word characters for the default language."
1207 (split-string 1207 (split-string
1208 (ispell--call-enchant-lsmod "-list-dicts") " ([^)]+)\n" t)) 1208 (ispell--call-enchant-lsmod "-list-dicts") " ([^)]+)\n" t))
1209 (found 1209 (found
1210 (mapcar #'(lambda (lang) 1210 (mapcar (lambda (lang)
1211 `(,lang "[[:alpha:]]" "[^[:alpha:]]" 1211 `(,lang "[[:alpha:]]" "[^[:alpha:]]"
1212 ,(ispell--get-extra-word-characters lang) t nil nil utf-8)) 1212 ,(ispell--get-extra-word-characters lang) t nil nil utf-8))
1213 dictionaries))) 1213 dictionaries)))
1214 ;; Merge into FOUND any elements from the standard ispell-dictionary-base-alist 1214 ;; Merge into FOUND any elements from the standard ispell-dictionary-base-alist
1215 ;; which have no element in FOUND at all. 1215 ;; which have no element in FOUND at all.
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index a65772da1a4..0d6bfb5d860 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -888,50 +888,46 @@ DOWNCASE t: Downcase words before using them."
888 (string :tag "")) 888 (string :tag ""))
889 (option (boolean :tag "Downcase words ")))) 889 (option (boolean :tag "Downcase words "))))
890 890
891(if (featurep 'xemacs) 891(defcustom reftex-label-regexps
892 ;; XEmacs 21.5 doesn't have explicitly numbered matching groups, 892 `(;; Normal \\label{foo} labels
893 ;; so this list mustn't get any more items. 893 "\\\\label{\\(?1:[^}]*\\)}"
894 (defconst reftex-label-regexps '("\\\\label{\\([^}]*\\)}")) 894 ;; keyvals [..., label = {foo}, ...] forms used by ctable,
895 (defcustom reftex-label-regexps 895 ;; listings, breqn, ...
896 `(;; Normal \\label{foo} labels 896 ,(concat
897 "\\\\label{\\(?1:[^}]*\\)}" 897 ;; Make sure we search only for optional arguments of
898 ;; keyvals [..., label = {foo}, ...] forms used by ctable, 898 ;; environments/macros and don't match any other [. ctable
899 ;; listings, breqn, ... 899 ;; provides a macro called \ctable, beamer/breqn/listings have
900 ,(concat 900 ;; environments. Start with a backslash and a group for names
901 ;; Make sure we search only for optional arguments of 901 "\\\\\\(?:"
902 ;; environments/macros and don't match any other [. ctable 902 ;; begin, optional spaces and opening brace
903 ;; provides a macro called \ctable, beamer/breqn/listings have 903 "begin[[:space:]]*{"
904 ;; environments. Start with a backslash and a group for names 904 ;; Build a regexp for env names
905 "\\\\\\(?:" 905 (regexp-opt '("lstlisting" "dmath" "dseries" "dgroup"
906 ;; begin, optional spaces and opening brace 906 "darray" "frame"))
907 "begin[[:space:]]*{" 907 ;; closing brace, optional spaces
908 ;; Build a regexp for env names 908 "}[[:space:]]*"
909 (regexp-opt '("lstlisting" "dmath" "dseries" "dgroup" 909 ;; Now for macros
910 "darray" "frame")) 910 "\\|"
911 ;; closing brace, optional spaces 911 ;; Build a regexp for macro names; currently only \ctable
912 "}[[:space:]]*" 912 (regexp-opt '("ctable"))
913 ;; Now for macros 913 ;; Close the group for names
914 "\\|" 914 "\\)"
915 ;; Build a regexp for macro names; currently only \ctable 915 ;; Match the opening [ and the following chars
916 (regexp-opt '("ctable")) 916 "\\[[^][]*"
917 ;; Close the group for names 917 ;; Allow nested levels of chars enclosed in braces
918 "\\)" 918 "\\(?:{[^}{]*"
919 ;; Match the opening [ and the following chars 919 "\\(?:{[^}{]*"
920 "\\[[^][]*" 920 "\\(?:{[^}{]*}[^}{]*\\)*"
921 ;; Allow nested levels of chars enclosed in braces 921 "}[^}{]*\\)*"
922 "\\(?:{[^}{]*" 922 "}[^][]*\\)*"
923 "\\(?:{[^}{]*" 923 ;; Match the label key
924 "\\(?:{[^}{]*}[^}{]*\\)*" 924 "\\<label[[:space:]]*=[[:space:]]*"
925 "}[^}{]*\\)*" 925 ;; Match the label value; braces around the value are
926 "}[^][]*\\)*" 926 ;; optional.
927 ;; Match the label key 927 "{?\\(?1:[^] ,}\r\n\t%]+\\)"
928 "\\<label[[:space:]]*=[[:space:]]*" 928 ;; We are done. Just search until the next closing bracket
929 ;; Match the label value; braces around the value are 929 "[^]]*\\]"))
930 ;; optional. 930 "List of regexps matching \\label definitions.
931 "{?\\(?1:[^] ,}\r\n\t%]+\\)"
932 ;; We are done. Just search until the next closing bracket
933 "[^]]*\\]"))
934 "List of regexps matching \\label definitions.
935The default value matches usual \\label{...} definitions and 931The default value matches usual \\label{...} definitions and
936keyval style [..., label = {...}, ...] label definitions. The 932keyval style [..., label = {...}, ...] label definitions. The
937regexp for keyval style explicitly looks for environments 933regexp for keyval style explicitly looks for environments
@@ -946,13 +942,13 @@ you have to define it using \\(?1:...\\) when adding new regexps.
946When changed from Lisp, make sure to call 942When changed from Lisp, make sure to call
947`reftex-compile-variables' afterwards to make the change 943`reftex-compile-variables' afterwards to make the change
948effective." 944effective."
949 :version "28.1" 945 :version "28.1"
950 :set (lambda (symbol value) 946 :set (lambda (symbol value)
951 (set symbol value) 947 (set symbol value)
952 (when (fboundp 'reftex-compile-variables) 948 (when (fboundp 'reftex-compile-variables)
953 (reftex-compile-variables))) 949 (reftex-compile-variables)))
954 :group 'reftex-defining-label-environments 950 :group 'reftex-defining-label-environments
955 :type '(repeat (regexp :tag "Regular Expression")))) 951 :type '(repeat (regexp :tag "Regular Expression")))
956 952
957(defcustom reftex-label-ignored-macros-and-environments nil 953(defcustom reftex-label-ignored-macros-and-environments nil
958 "List of macros and environments to be ignored when searching for labels. 954 "List of macros and environments to be ignored when searching for labels.
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index 3affb462011..cd76bf80f19 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -178,10 +178,6 @@
178 178
179;;; Code: 179;;; Code:
180 180
181(defconst remember-version "2.0"
182 "This version of remember.")
183(make-obsolete-variable 'remember-version nil "28.1")
184
185(defgroup remember nil 181(defgroup remember nil
186 "A mode to remember information." 182 "A mode to remember information."
187 :group 'data) 183 :group 'data)
@@ -671,6 +667,11 @@ is non-nil, bury it and return nil; otherwise return t."
671 nil) 667 nil)
672 t)) 668 t))
673 669
670;; Obsolete
671
672(defconst remember-version "2.0" "This version of remember.")
673(make-obsolete-variable 'remember-version 'emacs-version "28.1")
674
674(provide 'remember) 675(provide 'remember)
675 676
676;;; remember.el ends here 677;;; remember.el ends here
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index ce156370d57..56cca840047 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -554,30 +554,30 @@ After interpretation of ARGS the results are concatenated as for
554`:seq'." 554`:seq'."
555 (apply #'concat 555 (apply #'concat
556 (mapcar 556 (mapcar
557 #'(lambda (re) 557 (lambda (re)
558 (cond 558 (cond
559 ((stringp re) 559 ((stringp re)
560 re) 560 re)
561 ((symbolp re) 561 ((symbolp re)
562 (cadr (assoc re rst-re-alist))) 562 (cadr (assoc re rst-re-alist)))
563 ((characterp re) 563 ((characterp re)
564 (regexp-quote (char-to-string re))) 564 (regexp-quote (char-to-string re)))
565 ((listp re) 565 ((listp re)
566 (let ((nested 566 (let ((nested
567 (mapcar #'rst-re (cdr re)))) 567 (mapcar #'rst-re (cdr re))))
568 (cond 568 (cond
569 ((eq (car re) :seq) 569 ((eq (car re) :seq)
570 (mapconcat #'identity nested "")) 570 (mapconcat #'identity nested ""))
571 ((eq (car re) :shy) 571 ((eq (car re) :shy)
572 (concat "\\(?:" (mapconcat #'identity nested "") "\\)")) 572 (concat "\\(?:" (mapconcat #'identity nested "") "\\)"))
573 ((eq (car re) :grp) 573 ((eq (car re) :grp)
574 (concat "\\(" (mapconcat #'identity nested "") "\\)")) 574 (concat "\\(" (mapconcat #'identity nested "") "\\)"))
575 ((eq (car re) :alt) 575 ((eq (car re) :alt)
576 (concat "\\(?:" (mapconcat #'identity nested "\\|") "\\)")) 576 (concat "\\(?:" (mapconcat #'identity nested "\\|") "\\)"))
577 (t 577 (t
578 (error "Unknown list car: %s" (car re)))))) 578 (error "Unknown list car: %s" (car re))))))
579 (t 579 (t
580 (error "Unknown object type for building regex: %s" re)))) 580 (error "Unknown object type for building regex: %s" re))))
581 args))) 581 args)))
582 582
583;; FIXME: Remove circular dependency between `rst-re' and `rst-re-alist'. 583;; FIXME: Remove circular dependency between `rst-re' and `rst-re-alist'.
@@ -709,8 +709,8 @@ Return CHAR if so or signal an error otherwise."
709 ;; testcover: ok. 709 ;; testcover: ok.
710 "Return position of SELF in ADOS or nil." 710 "Return position of SELF in ADOS or nil."
711 (cl-check-type self rst-Ado) 711 (cl-check-type self rst-Ado)
712 (cl-position-if #'(lambda (e) 712 (cl-position-if (lambda (e)
713 (rst-Ado-equal self e)) 713 (rst-Ado-equal self e))
714 ados)) 714 ados))
715 715
716 716
@@ -814,8 +814,8 @@ Return ADO if so or signal an error otherwise."
814 "Return sublist of HDRS whose car's adornment equals that of SELF or nil." 814 "Return sublist of HDRS whose car's adornment equals that of SELF or nil."
815 (cl-check-type self rst-Hdr) 815 (cl-check-type self rst-Hdr)
816 (let ((ado (rst-Hdr-ado self))) 816 (let ((ado (rst-Hdr-ado self)))
817 (cl-member-if #'(lambda (hdr) 817 (cl-member-if (lambda (hdr)
818 (rst-Ado-equal ado (rst-Hdr-ado hdr))) 818 (rst-Ado-equal ado (rst-Hdr-ado hdr)))
819 hdrs))) 819 hdrs)))
820 820
821(defun rst-Hdr-ado-map (selves) 821(defun rst-Hdr-ado-map (selves)
@@ -1277,8 +1277,8 @@ This inherits from Text mode.")
1277 1277
1278;; Abbrevs. 1278;; Abbrevs.
1279(define-abbrev-table 'rst-mode-abbrev-table 1279(define-abbrev-table 'rst-mode-abbrev-table
1280 (mapcar #'(lambda (x) 1280 (mapcar (lambda (x)
1281 (append x '(nil 0 system))) 1281 (append x '(nil 0 system)))
1282 '(("contents" ".. contents::\n..\n ") 1282 '(("contents" ".. contents::\n..\n ")
1283 ("con" ".. contents::\n..\n ") 1283 ("con" ".. contents::\n..\n ")
1284 ("cont" "[...]") 1284 ("cont" "[...]")
@@ -1501,9 +1501,9 @@ file."
1501 :type `(repeat 1501 :type `(repeat
1502 (group :tag "Adornment specification" 1502 (group :tag "Adornment specification"
1503 (choice :tag "Adornment character" 1503 (choice :tag "Adornment character"
1504 ,@(mapcar #'(lambda (char) 1504 ,@(mapcar (lambda (char)
1505 (list 'const 1505 (list 'const
1506 :tag (char-to-string char) char)) 1506 :tag (char-to-string char) char))
1507 rst-adornment-chars)) 1507 rst-adornment-chars))
1508 (radio :tag "Adornment type" 1508 (radio :tag "Adornment type"
1509 (const :tag "Overline and underline" over-and-under) 1509 (const :tag "Overline and underline" over-and-under)
@@ -1540,8 +1540,8 @@ search starts after this entry. Return nil if no new preferred
1540 ;; Start searching after the level of the previous adornment. 1540 ;; Start searching after the level of the previous adornment.
1541 (cdr (rst-Hdr-member-ado prev (rst-Hdr-preferred-adornments)))) 1541 (cdr (rst-Hdr-member-ado prev (rst-Hdr-preferred-adornments))))
1542 (rst-Hdr-preferred-adornments)))) 1542 (rst-Hdr-preferred-adornments))))
1543 (cl-find-if #'(lambda (cand) 1543 (cl-find-if (lambda (cand)
1544 (not (rst-Hdr-member-ado cand seen))) 1544 (not (rst-Hdr-member-ado cand seen)))
1545 candidates))) 1545 candidates)))
1546 1546
1547(defun rst-update-section (hdr) 1547(defun rst-update-section (hdr)
@@ -1620,55 +1620,55 @@ returned."
1620 (ttl-blw ; Title found below starting here. 1620 (ttl-blw ; Title found below starting here.
1621 (rst-forward-line-looking-at 1621 (rst-forward-line-looking-at
1622 +1 'ttl-beg-1 1622 +1 'ttl-beg-1
1623 #'(lambda (mtcd) 1623 (lambda (mtcd)
1624 (when mtcd 1624 (when mtcd
1625 (setq txt-blw (match-string-no-properties 1)) 1625 (setq txt-blw (match-string-no-properties 1))
1626 (point))))) 1626 (point)))))
1627 txt-abv 1627 txt-abv
1628 (ttl-abv ; Title found above starting here. 1628 (ttl-abv ; Title found above starting here.
1629 (rst-forward-line-looking-at 1629 (rst-forward-line-looking-at
1630 -1 'ttl-beg-1 1630 -1 'ttl-beg-1
1631 #'(lambda (mtcd) 1631 (lambda (mtcd)
1632 (when mtcd 1632 (when mtcd
1633 (setq txt-abv (match-string-no-properties 1)) 1633 (setq txt-abv (match-string-no-properties 1))
1634 (point))))) 1634 (point)))))
1635 (und-fnd ; Matching underline found starting here. 1635 (und-fnd ; Matching underline found starting here.
1636 (and ttl-blw 1636 (and ttl-blw
1637 (rst-forward-line-looking-at 1637 (rst-forward-line-looking-at
1638 +2 (list ado-re 'lin-end) 1638 +2 (list ado-re 'lin-end)
1639 #'(lambda (mtcd) 1639 (lambda (mtcd)
1640 (when mtcd 1640 (when mtcd
1641 (point)))))) 1641 (point))))))
1642 (ovr-fnd ; Matching overline found starting here. 1642 (ovr-fnd ; Matching overline found starting here.
1643 (and ttl-abv 1643 (and ttl-abv
1644 (rst-forward-line-looking-at 1644 (rst-forward-line-looking-at
1645 -2 (list ado-re 'lin-end) 1645 -2 (list ado-re 'lin-end)
1646 #'(lambda (mtcd) 1646 (lambda (mtcd)
1647 (when mtcd 1647 (when mtcd
1648 (point)))))) 1648 (point))))))
1649 (und-wng ; Wrong underline found starting here. 1649 (und-wng ; Wrong underline found starting here.
1650 (and ttl-blw 1650 (and ttl-blw
1651 (not und-fnd) 1651 (not und-fnd)
1652 (rst-forward-line-looking-at 1652 (rst-forward-line-looking-at
1653 +2 'ado-beg-2-1 1653 +2 'ado-beg-2-1
1654 #'(lambda (mtcd) 1654 (lambda (mtcd)
1655 (when mtcd 1655 (when mtcd
1656 (point)))))) 1656 (point))))))
1657 (ovr-wng ; Wrong overline found starting here. 1657 (ovr-wng ; Wrong overline found starting here.
1658 (and ttl-abv (not ovr-fnd) 1658 (and ttl-abv (not ovr-fnd)
1659 (rst-forward-line-looking-at 1659 (rst-forward-line-looking-at
1660 -2 'ado-beg-2-1 1660 -2 'ado-beg-2-1
1661 #'(lambda (mtcd) 1661 (lambda (mtcd)
1662 (when (and 1662 (when (and
1663 mtcd 1663 mtcd
1664 ;; An adornment above may be a legal 1664 ;; An adornment above may be a legal
1665 ;; adornment for the line above - consider it 1665 ;; adornment for the line above - consider it
1666 ;; a wrong overline only when it is equally 1666 ;; a wrong overline only when it is equally
1667 ;; long. 1667 ;; long.
1668 (equal 1668 (equal
1669 (length (match-string-no-properties 1)) 1669 (length (match-string-no-properties 1))
1670 (length adornment))) 1670 (length adornment)))
1671 (point))))))) 1671 (point)))))))
1672 (cond 1672 (cond
1673 ((and nxt-emp prv-emp) 1673 ((and nxt-emp prv-emp)
1674 ;; A transition. 1674 ;; A transition.
@@ -1708,11 +1708,11 @@ a section header or nil if no title line is found."
1708 (rst-forward-line-strict 0)) 1708 (rst-forward-line-strict 0))
1709 (let* (cnd-beg ; Beginning of a title candidate. 1709 (let* (cnd-beg ; Beginning of a title candidate.
1710 cnd-txt ; Text of a title candidate. 1710 cnd-txt ; Text of a title candidate.
1711 (cnd-fun #'(lambda (mtcd) ; Function setting title candidate data. 1711 (cnd-fun (lambda (mtcd) ; Function setting title candidate data.
1712 (when mtcd 1712 (when mtcd
1713 (setq cnd-beg (match-beginning 0)) 1713 (setq cnd-beg (match-beginning 0))
1714 (setq cnd-txt (match-string-no-properties 1)) 1714 (setq cnd-txt (match-string-no-properties 1))
1715 t))) 1715 t)))
1716 ttl) 1716 ttl)
1717 (cond 1717 (cond
1718 ((looking-at (rst-re 'ado-beg-2-1)) 1718 ((looking-at (rst-re 'ado-beg-2-1))
@@ -1728,10 +1728,10 @@ a section header or nil if no title line is found."
1728 ;; Title line found - check for a following underline. 1728 ;; Title line found - check for a following underline.
1729 (setq ttl (rst-forward-line-looking-at 1729 (setq ttl (rst-forward-line-looking-at
1730 1 'ado-beg-2-1 1730 1 'ado-beg-2-1
1731 #'(lambda (mtcd) 1731 (lambda (mtcd)
1732 (when mtcd 1732 (when mtcd
1733 (rst-classify-adornment 1733 (rst-classify-adornment
1734 (match-string-no-properties 0) (match-end 0)))))) 1734 (match-string-no-properties 0) (match-end 0))))))
1735 ;; Title candidate found if no valid adornment found. 1735 ;; Title candidate found if no valid adornment found.
1736 (funcall cnd-fun (not ttl)))) 1736 (funcall cnd-fun (not ttl))))
1737 (cond 1737 (cond
@@ -1827,15 +1827,15 @@ given."
1827 (ignore-ttl 1827 (ignore-ttl
1828 (if ignore-position 1828 (if ignore-position
1829 (cl-find-if 1829 (cl-find-if
1830 #'(lambda (ttl) 1830 (lambda (ttl)
1831 (equal (rst-Ttl-contains ttl ignore-position) 0)) 1831 (equal (rst-Ttl-contains ttl ignore-position) 0))
1832 all-ttls))) 1832 all-ttls)))
1833 (really-ignore 1833 (really-ignore
1834 (if ignore-ttl 1834 (if ignore-ttl
1835 (<= (cl-count-if 1835 (<= (cl-count-if
1836 #'(lambda (ttl) 1836 (lambda (ttl)
1837 (rst-Ado-equal (rst-Ttl-ado ignore-ttl) 1837 (rst-Ado-equal (rst-Ttl-ado ignore-ttl)
1838 (rst-Ttl-ado ttl))) 1838 (rst-Ttl-ado ttl)))
1839 all-ttls) 1839 all-ttls)
1840 1))) 1840 1)))
1841 (real-ttls (delq (if really-ignore ignore-ttl) all-ttls))) 1841 (real-ttls (delq (if really-ignore ignore-ttl) all-ttls)))
@@ -1859,14 +1859,14 @@ given."
1859Return a list of (`rst-Ttl' . LEVEL) with ascending line number." 1859Return a list of (`rst-Ttl' . LEVEL) with ascending line number."
1860 (let ((hier (rst-Hdr-ado-map (rst-hdr-hierarchy)))) 1860 (let ((hier (rst-Hdr-ado-map (rst-hdr-hierarchy))))
1861 (mapcar 1861 (mapcar
1862 #'(lambda (ttl) 1862 (lambda (ttl)
1863 (cons ttl (rst-Ado-position (rst-Ttl-ado ttl) hier))) 1863 (cons ttl (rst-Ado-position (rst-Ttl-ado ttl) hier)))
1864 (rst-all-ttls)))) 1864 (rst-all-ttls))))
1865 1865
1866(defun rst-get-previous-hdr () 1866(defun rst-get-previous-hdr ()
1867 "Return the `rst-Hdr' before point or nil if none." 1867 "Return the `rst-Hdr' before point or nil if none."
1868 (let ((prev (cl-find-if #'(lambda (ttl) 1868 (let ((prev (cl-find-if (lambda (ttl)
1869 (< (rst-Ttl-contains ttl (point)) 0)) 1869 (< (rst-Ttl-contains ttl (point)) 0))
1870 (rst-all-ttls) 1870 (rst-all-ttls)
1871 :from-end t))) 1871 :from-end t)))
1872 (and prev (rst-Ttl-hdr prev)))) 1872 (and prev (rst-Ttl-hdr prev))))
@@ -2169,19 +2169,19 @@ hierarchy is similar to that used by `rst-adjust-section'."
2169 (let* ((beg (region-beginning)) 2169 (let* ((beg (region-beginning))
2170 (end (region-end)) 2170 (end (region-end))
2171 (ttls-reg (cl-remove-if-not 2171 (ttls-reg (cl-remove-if-not
2172 #'(lambda (ttl) 2172 (lambda (ttl)
2173 (and 2173 (and
2174 (>= (rst-Ttl-contains ttl beg) 0) 2174 (>= (rst-Ttl-contains ttl beg) 0)
2175 (< (rst-Ttl-contains ttl end) 0))) 2175 (< (rst-Ttl-contains ttl end) 0)))
2176 (rst-all-ttls)))) 2176 (rst-all-ttls))))
2177 (save-excursion 2177 (save-excursion
2178 ;; Apply modifications. 2178 ;; Apply modifications.
2179 (rst-destructuring-dolist 2179 (rst-destructuring-dolist
2180 ((marker &rest hdr 2180 ((marker &rest hdr
2181 &aux (hier (rst-hdr-hierarchy))) 2181 &aux (hier (rst-hdr-hierarchy)))
2182 (mapcar #'(lambda (ttl) 2182 (mapcar (lambda (ttl)
2183 (cons (copy-marker (rst-Ttl-get-title-beginning ttl)) 2183 (cons (copy-marker (rst-Ttl-get-title-beginning ttl))
2184 (rst-Ttl-hdr ttl))) 2184 (rst-Ttl-hdr ttl)))
2185 ttls-reg)) 2185 ttls-reg))
2186 (set-marker 2186 (set-marker
2187 (goto-char marker) nil) 2187 (goto-char marker) nil)
@@ -2391,9 +2391,9 @@ also arranged by `rst-insert-list-new-tag'."
2391 "List of favorite bullets." 2391 "List of favorite bullets."
2392 :group 'rst 2392 :group 'rst
2393 :type `(repeat 2393 :type `(repeat
2394 (choice ,@(mapcar #'(lambda (char) 2394 (choice ,@(mapcar (lambda (char)
2395 (list 'const 2395 (list 'const
2396 :tag (char-to-string char) char)) 2396 :tag (char-to-string char) char))
2397 rst-bullets))) 2397 rst-bullets)))
2398 :package-version '(rst . "1.1.0")) 2398 :package-version '(rst . "1.1.0"))
2399 2399
@@ -2517,13 +2517,13 @@ ordered by POINT."
2517 (looking-at (rst-re rst-re-beg)) ; Start found 2517 (looking-at (rst-re rst-re-beg)) ; Start found
2518 (not (rst-forward-line-looking-at 2518 (not (rst-forward-line-looking-at
2519 -1 'lin-end 2519 -1 'lin-end
2520 #'(lambda (mtcd) ; Previous line exists and is... 2520 (lambda (mtcd) ; Previous line exists and is...
2521 (and 2521 (and
2522 (not mtcd) ; non-empty, 2522 (not mtcd) ; non-empty,
2523 (<= (current-indentation) clm) ; less indented 2523 (<= (current-indentation) clm) ; less indented
2524 (not (and (= (current-indentation) clm) 2524 (not (and (= (current-indentation) clm)
2525 ; not a beg at same level. 2525 ; not a beg at same level.
2526 (looking-at (rst-re rst-re-beg))))))))) 2526 (looking-at (rst-re rst-re-beg)))))))))
2527 (back-to-indentation) 2527 (back-to-indentation)
2528 (push (cons (point) clm) r))) 2528 (push (cons (point) clm) r)))
2529 (1value ; At least one line is moved in this loop. 2529 (1value ; At least one line is moved in this loop.
@@ -2553,8 +2553,8 @@ modified."
2553 ((bullet _clm &rest pnts) 2553 ((bullet _clm &rest pnts)
2554 ;; Zip preferred bullets and sorted columns associating a bullet 2554 ;; Zip preferred bullets and sorted columns associating a bullet
2555 ;; with a column and all the points this column is found. 2555 ;; with a column and all the points this column is found.
2556 (cl-mapcar #'(lambda (bullet clm2pnt) 2556 (cl-mapcar (lambda (bullet clm2pnt)
2557 (cons bullet clm2pnt)) 2557 (cons bullet clm2pnt))
2558 rst-preferred-bullets 2558 rst-preferred-bullets
2559 (sort clm2pnts #'car-less-than-car))) 2559 (sort clm2pnts #'car-less-than-car)))
2560 ;; Replace the bullets by the preferred ones. 2560 ;; Replace the bullets by the preferred ones.
@@ -2614,8 +2614,8 @@ section headers at all."
2614 (when (>= point (rst-Stn-get-title-beginning stn)) 2614 (when (>= point (rst-Stn-get-title-beginning stn))
2615 ;; Point may be in this section or a child. 2615 ;; Point may be in this section or a child.
2616 (let ((in-child (cl-find-if 2616 (let ((in-child (cl-find-if
2617 #'(lambda (child) 2617 (lambda (child)
2618 (>= point (rst-Stn-get-title-beginning child))) 2618 (>= point (rst-Stn-get-title-beginning child)))
2619 (rst-Stn-children stn) 2619 (rst-Stn-children stn)
2620 :from-end t))) 2620 :from-end t)))
2621 (if in-child 2621 (if in-child
@@ -2829,18 +2829,18 @@ file-write hook to always make it up-to-date automatically."
2829 (and beg 2829 (and beg
2830 (rst-forward-line-looking-at 2830 (rst-forward-line-looking-at
2831 1 'lin-end 2831 1 'lin-end
2832 #'(lambda (mtcd) 2832 (lambda (mtcd)
2833 (unless mtcd 2833 (unless mtcd
2834 (rst-apply-indented-blocks 2834 (rst-apply-indented-blocks
2835 (point) (point-max) (current-indentation) 2835 (point) (point-max) (current-indentation)
2836 #'(lambda (count _in-first _in-sub in-super in-empty 2836 (lambda (count _in-first _in-sub in-super in-empty
2837 _relind) 2837 _relind)
2838 (cond 2838 (cond
2839 ((or (> count 1) in-super)) 2839 ((or (> count 1) in-super))
2840 ((not in-empty) 2840 ((not in-empty)
2841 (setq fnd (line-end-position)) 2841 (setq fnd (line-end-position))
2842 nil))))) 2842 nil)))))
2843 t))) 2843 t)))
2844 (when fnd 2844 (when fnd
2845 (delete-region beg fnd)) 2845 (delete-region beg fnd))
2846 (goto-char beg) 2846 (goto-char beg)
@@ -3024,14 +3024,14 @@ direction."
3024 (contained nil) ; Title contains point (or is after point otherwise). 3024 (contained nil) ; Title contains point (or is after point otherwise).
3025 (found (or (cl-position-if 3025 (found (or (cl-position-if
3026 ;; Find a title containing or after point. 3026 ;; Find a title containing or after point.
3027 #'(lambda (ttl) 3027 (lambda (ttl)
3028 (let ((cmp (rst-Ttl-contains ttl pnt))) 3028 (let ((cmp (rst-Ttl-contains ttl pnt)))
3029 (cond 3029 (cond
3030 ((= cmp 0) ; Title contains point. 3030 ((= cmp 0) ; Title contains point.
3031 (setq contained t) 3031 (setq contained t)
3032 t) 3032 t)
3033 ((> cmp 0) ; Title after point. 3033 ((> cmp 0) ; Title after point.
3034 t)))) 3034 t))))
3035 ttls) 3035 ttls)
3036 ;; Point after all titles. 3036 ;; Point after all titles.
3037 count)) 3037 count))
@@ -3290,8 +3290,8 @@ remove all indentation (CNT = 0). A tab is taken from the text
3290above. If no suitable tab is found `rst-indent-width' is used." 3290above. If no suitable tab is found `rst-indent-width' is used."
3291 (interactive "r\np") 3291 (interactive "r\np")
3292 (let ((tabs (sort (rst-compute-tabs beg) 3292 (let ((tabs (sort (rst-compute-tabs beg)
3293 #'(lambda (x y) 3293 (lambda (x y)
3294 (<= x y)))) 3294 (<= x y))))
3295 (leftmostcol (rst-find-leftmost-column beg end))) 3295 (leftmostcol (rst-find-leftmost-column beg end)))
3296 (when (or (> leftmostcol 0) (> cnt 0)) 3296 (when (or (> leftmostcol 0) (> cnt 0))
3297 ;; Apply the indent. 3297 ;; Apply the indent.
@@ -3306,8 +3306,8 @@ above. If no suitable tab is found `rst-indent-width' is used."
3306 (dir (cl-signum cnt)) ; Direction to take. 3306 (dir (cl-signum cnt)) ; Direction to take.
3307 (abs (abs cnt)) ; Absolute number of steps to take. 3307 (abs (abs cnt)) ; Absolute number of steps to take.
3308 ;; Get the position of the first tab beyond leftmostcol. 3308 ;; Get the position of the first tab beyond leftmostcol.
3309 (fnd (cl-position-if #'(lambda (elt) 3309 (fnd (cl-position-if (lambda (elt)
3310 (funcall cmp elt leftmostcol)) 3310 (funcall cmp elt leftmostcol))
3311 tabs)) 3311 tabs))
3312 ;; Virtual position of tab. 3312 ;; Virtual position of tab.
3313 (pos (+ (or fnd len) (1- abs))) 3313 (pos (+ (or fnd len) (1- abs)))
@@ -3492,20 +3492,20 @@ do all lines instead of just paragraphs."
3492 (indent "")) 3492 (indent ""))
3493 (rst-apply-indented-blocks 3493 (rst-apply-indented-blocks
3494 beg end (rst-find-leftmost-column beg end) 3494 beg end (rst-find-leftmost-column beg end)
3495 #'(lambda (count in-first in-sub in-super in-empty _relind) 3495 (lambda (count in-first in-sub in-super in-empty _relind)
3496 (cond 3496 (cond
3497 (in-empty) 3497 (in-empty)
3498 (in-super) 3498 (in-super)
3499 ((zerop count)) 3499 ((zerop count))
3500 (in-sub 3500 (in-sub
3501 (insert indent)) 3501 (insert indent))
3502 ((or in-first all) 3502 ((or in-first all)
3503 (let ((tag (format "%d. " (cl-incf enum)))) 3503 (let ((tag (format "%d. " (cl-incf enum))))
3504 (setq indent (make-string (length tag) ? )) 3504 (setq indent (make-string (length tag) ? ))
3505 (insert tag))) 3505 (insert tag)))
3506 (t 3506 (t
3507 (insert indent))) 3507 (insert indent)))
3508 nil)))) 3508 nil))))
3509 3509
3510;; FIXME: Does not deal with deeper indentation - although 3510;; FIXME: Does not deal with deeper indentation - although
3511;; `rst-apply-indented-blocks' could. 3511;; `rst-apply-indented-blocks' could.
@@ -3520,18 +3520,18 @@ do all lines instead of just paragraphs."
3520 (indent (make-string (length bul) ? ))) 3520 (indent (make-string (length bul) ? )))
3521 (rst-apply-indented-blocks 3521 (rst-apply-indented-blocks
3522 beg end (rst-find-leftmost-column beg end) 3522 beg end (rst-find-leftmost-column beg end)
3523 #'(lambda (count in-first in-sub in-super in-empty _relind) 3523 (lambda (count in-first in-sub in-super in-empty _relind)
3524 (cond 3524 (cond
3525 (in-empty) 3525 (in-empty)
3526 (in-super) 3526 (in-super)
3527 ((zerop count)) 3527 ((zerop count))
3528 (in-sub 3528 (in-sub
3529 (insert indent)) 3529 (insert indent))
3530 ((or in-first all) 3530 ((or in-first all)
3531 (insert bul)) 3531 (insert bul))
3532 (t 3532 (t
3533 (insert indent))) 3533 (insert indent)))
3534 nil)))) 3534 nil))))
3535 3535
3536;; FIXME: Does not deal with a varying number of digits appropriately. 3536;; FIXME: Does not deal with a varying number of digits appropriately.
3537;; FIXME: Does not deal with multiple levels independently. 3537;; FIXME: Does not deal with multiple levels independently.
@@ -3561,11 +3561,11 @@ Region is from BEG to END. With WITH-EMPTY prefix empty lines too."
3561 (let ((ind (rst-find-leftmost-column beg end))) 3561 (let ((ind (rst-find-leftmost-column beg end)))
3562 (rst-apply-indented-blocks 3562 (rst-apply-indented-blocks
3563 beg end ind 3563 beg end ind
3564 #'(lambda (_count _in-first _in-sub in-super in-empty _relind) 3564 (lambda (_count _in-first _in-sub in-super in-empty _relind)
3565 (when (and (not in-super) (or with-empty (not in-empty))) 3565 (when (and (not in-super) (or with-empty (not in-empty)))
3566 (move-to-column ind t) 3566 (move-to-column ind t)
3567 (insert "| ")) 3567 (insert "| "))
3568 nil)))) 3568 nil))))
3569 3569
3570 3570
3571;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 3571;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -4085,16 +4085,16 @@ end of the buffer) return nil and do not move point."
4085 (setq fnd (rst-apply-indented-blocks 4085 (setq fnd (rst-apply-indented-blocks
4086 (line-beginning-position 2) ; Skip the current line 4086 (line-beginning-position 2) ; Skip the current line
4087 (or limit (point-max)) (or column (current-column)) 4087 (or limit (point-max)) (or column (current-column))
4088 #'(lambda (_count _in-first _in-sub in-super in-empty _relind) 4088 (lambda (_count _in-first _in-sub in-super in-empty _relind)
4089 (cond 4089 (cond
4090 (in-empty 4090 (in-empty
4091 (setq candidate (or candidate (line-beginning-position))) 4091 (setq candidate (or candidate (line-beginning-position)))
4092 nil) 4092 nil)
4093 (in-super 4093 (in-super
4094 (or candidate (line-beginning-position))) 4094 (or candidate (line-beginning-position)))
4095 (t ; Non-empty, same or more indented line. 4095 (t ; Non-empty, same or more indented line.
4096 (setq candidate nil) 4096 (setq candidate nil)
4097 nil))))) 4097 nil)))))
4098 (when fnd 4098 (when fnd
4099 (goto-char fnd)))) 4099 (goto-char fnd))))
4100 4100
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index 27f4f88cb89..60388df2554 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -358,10 +358,10 @@ i.e. 1970-1-1) are loaded as expiring one year from now instead."
358Default is 1 hour. Note that if you change this variable outside of 358Default is 1 hour. Note that if you change this variable outside of
359the `customize' interface after `url-do-setup' has been run, you need 359the `customize' interface after `url-do-setup' has been run, you need
360to run the `url-cookie-setup-save-timer' function manually." 360to run the `url-cookie-setup-save-timer' function manually."
361 :set #'(lambda (var val) 361 :set (lambda (var val)
362 (set-default var val) 362 (set-default var val)
363 (if (bound-and-true-p url-setup-done) 363 (if (bound-and-true-p url-setup-done)
364 (url-cookie-setup-save-timer))) 364 (url-cookie-setup-save-timer)))
365 :type 'integer 365 :type 'integer
366 :group 'url-cookie) 366 :group 'url-cookie)
367 367
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index edb1c1de9fc..192b1ac4f41 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -43,22 +43,11 @@
43(defvar url-http-response-status) 43(defvar url-http-response-status)
44(defvar url-http-end-of-headers) 44(defvar url-http-end-of-headers)
45 45
46(defun url-intersection (l1 l2)
47 "Return a list of the elements occurring in both of the lists L1 and L2."
48 (if (null l2)
49 l2
50 (let (result)
51 (while l1
52 (if (member (car l1) l2)
53 (setq result (cons (pop l1) result))
54 (pop l1)))
55 (nreverse result))))
56
57;;;###autoload 46;;;###autoload
58(defun url-dav-supported-p (url) 47(defun url-dav-supported-p (url)
59 "Return WebDAV protocol version supported by URL. 48 "Return WebDAV protocol version supported by URL.
60Returns nil if WebDAV is not supported." 49Returns nil if WebDAV is not supported."
61 (url-intersection url-dav-supported-protocols 50 (seq-intersection url-dav-supported-protocols
62 (plist-get (url-http-options url) 'dav))) 51 (plist-get (url-http-options url) 'dav)))
63 52
64(defun url-dav-node-text (node) 53(defun url-dav-node-text (node)
@@ -910,7 +899,9 @@ Returns nil if URL contains no name starting with FILE."
910 t))) 899 t)))
911 900
912 901
913;;; Miscellaneous stuff. 902;;; Obsolete.
903
904(define-obsolete-function-alias 'url-intersection #'seq-intersection "28.1")
914 905
915(provide 'url-dav) 906(provide 'url-dav)
916 907
diff --git a/lisp/url/url-history.el b/lisp/url/url-history.el
index 10238a46607..5dd1f099136 100644
--- a/lisp/url/url-history.el
+++ b/lisp/url/url-history.el
@@ -38,10 +38,10 @@
38If non-nil, the URL package will keep track of all the URLs visited. 38If non-nil, the URL package will keep track of all the URLs visited.
39If set to t, then the list is saved to disk at the end of each Emacs 39If set to t, then the list is saved to disk at the end of each Emacs
40session." 40session."
41 :set #'(lambda (var val) 41 :set (lambda (var val)
42 (set-default var val) 42 (set-default var val)
43 (and (bound-and-true-p url-setup-done) 43 (and (bound-and-true-p url-setup-done)
44 (url-history-setup-save-timer))) 44 (url-history-setup-save-timer)))
45 :type '(choice (const :tag "off" nil) 45 :type '(choice (const :tag "off" nil)
46 (const :tag "on" t) 46 (const :tag "on" t)
47 (other :tag "within session" session)) 47 (other :tag "within session" session))
@@ -59,10 +59,10 @@ is parsed at startup and used to provide URL completion."
59Default is 1 hour. Note that if you change this variable outside of 59Default is 1 hour. Note that if you change this variable outside of
60the `customize' interface after `url-do-setup' has been run, you need 60the `customize' interface after `url-do-setup' has been run, you need
61to run the `url-history-setup-save-timer' function manually." 61to run the `url-history-setup-save-timer' function manually."
62 :set #'(lambda (var val) 62 :set (lambda (var val)
63 (set-default var val) 63 (set-default var val)
64 (if (bound-and-true-p url-setup-done) 64 (if (bound-and-true-p url-setup-done)
65 (url-history-setup-save-timer))) 65 (url-history-setup-save-timer)))
66 :type 'integer 66 :type 'integer
67 :group 'url-history) 67 :group 'url-history)
68 68
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index 72884c07cc9..c6901d99200 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -104,8 +104,8 @@
104 (or (search-forward (concat "\n" mail-header-separator "\n") nil t) 104 (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
105 (goto-char (point-max))) 105 (goto-char (point-max)))
106 (insert (mapconcat 106 (insert (mapconcat
107 #'(lambda (string) 107 (lambda (string)
108 (replace-regexp-in-string "\r\n" "\n" string)) 108 (replace-regexp-in-string "\r\n" "\n" string))
109 (cdar args) "\n"))) 109 (cdar args) "\n")))
110 (url-mail-goto-field (caar args)) 110 (url-mail-goto-field (caar args))
111 ;; (setq func (intern-soft (concat "mail-" (caar args)))) 111 ;; (setq func (intern-soft (concat "mail-" (caar args))))
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index 8c836f8f64d..2aa2e7912f5 100644
--- a/lisp/url/url-vars.el
+++ b/lisp/url/url-vars.el
@@ -22,10 +22,6 @@
22 22
23;;; Code: 23;;; Code:
24 24
25(defconst url-version "Emacs"
26 "Version number of URL package.")
27(make-obsolete-variable 'url-version nil "28.1")
28
29(defgroup url nil 25(defgroup url nil
30 "Uniform Resource Locator tool." 26 "Uniform Resource Locator tool."
31 :version "22.1" 27 :version "22.1"
@@ -427,6 +423,11 @@ Should be one of:
427This should be set, e.g. by mail user agents rendering HTML to avoid 423This should be set, e.g. by mail user agents rendering HTML to avoid
428`bugs' which call home.") 424`bugs' which call home.")
429 425
426;; Obsolete
427
428(defconst url-version "Emacs" "Version number of URL package.")
429(make-obsolete-variable 'url-version 'emacs-version "28.1")
430
430(provide 'url-vars) 431(provide 'url-vars)
431 432
432;;; url-vars.el ends here 433;;; url-vars.el ends here
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 49b2890a160..8e88b60a0bd 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -620,7 +620,7 @@ behavior."
620 (setq common (ediff-intersection common lis3 #'string=))) 620 (setq common (ediff-intersection common lis3 #'string=)))
621 621
622 ;; copying is needed because sort sorts via side effects 622 ;; copying is needed because sort sorts via side effects
623 (setq common (sort (ediff-copy-list common) 'string-lessp)) 623 (setq common (sort (copy-sequence common) #'string-lessp))
624 624
625 ;; compute difference list 625 ;; compute difference list
626 (setq difflist (ediff-set-difference 626 (setq difflist (ediff-set-difference
@@ -631,7 +631,7 @@ behavior."
631 #'string=) 631 #'string=)
632 difflist (delete "." difflist) 632 difflist (delete "." difflist)
633 ;; copying is needed because sort sorts via side effects 633 ;; copying is needed because sort sorts via side effects
634 difflist (sort (ediff-copy-list (delete ".." difflist)) 634 difflist (sort (copy-sequence (delete ".." difflist))
635 #'string-lessp)) 635 #'string-lessp))
636 636
637 (setq difflist (mapcar (lambda (elt) (cons elt 1)) difflist)) 637 (setq difflist (mapcar (lambda (elt) (cons elt 1)) difflist))
@@ -729,7 +729,7 @@ behavior."
729 ) 729 )
730 730
731 ;; copying is needed because sort sorts via side effects 731 ;; copying is needed because sort sorts via side effects
732 (setq common (sort (ediff-copy-list common) 'string-lessp)) 732 (setq common (sort (copy-sequence common) #'string-lessp))
733 733
734 ;; return result 734 ;; return result
735 (cons 735 (cons
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index fc6dcf68a43..1c784908702 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -4188,12 +4188,7 @@ Mail anyway? (y or n) ")
4188 (cdr result))) 4188 (cdr result)))
4189 4189
4190(define-obsolete-function-alias 'ediff-add-to-history #'add-to-history "27.1") 4190(define-obsolete-function-alias 'ediff-add-to-history #'add-to-history "27.1")
4191 4191(define-obsolete-function-alias 'ediff-copy-list #'copy-sequence "28.1")
4192(defalias 'ediff-copy-list 'copy-sequence)
4193
4194
4195;; don't report error if version control package wasn't found
4196;;(ediff-load-version-control 'silent)
4197 4192
4198(run-hooks 'ediff-load-hook) 4193(run-hooks 'ediff-load-hook)
4199 4194
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index fda8605c679..e37c09df7c2 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -27,14 +27,6 @@
27;; system. 27;; system.
28;; 28;;
29 29
30;;; Installation:
31
32;; To install: put this file on the load-path and add Git to the list
33;; of supported backends in `vc-handled-backends'; the following line,
34;; placed in your init file, will accomplish this:
35;;
36;; (add-to-list 'vc-handled-backends 'Git)
37
38;;; Todo: 30;;; Todo:
39;; - check if more functions could use vc-git-command instead 31;; - check if more functions could use vc-git-command instead
40;; of start-process. 32;; of start-process.
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 2bc6ae3524b..a054a7c3176 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -30,8 +30,6 @@
30 30
31;;; Bugs: 31;;; Bugs:
32 32
33;;; Installation:
34
35;;; Todo: 33;;; Todo:
36 34
37;; 1) Implement the rest of the vc interface. See the comment at the 35;; 1) Implement the rest of the vc interface. See the comment at the
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index 595a25381ab..e219dc2d1a5 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -1,4 +1,4 @@
1;;; vcursor.el --- manipulate an alternative ("virtual") cursor 1;;; vcursor.el --- manipulate an alternative ("virtual") cursor -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1994, 1996, 1998, 2001-2021 Free Software Foundation, 3;; Copyright (C) 1994, 1996, 1998, 2001-2021 Free Software Foundation,
4;; Inc. 4;; Inc.
@@ -27,24 +27,24 @@
27;; Latest changes 27;; Latest changes
28;; ============== 28;; ==============
29;; 29;;
30;; - *IMPORTANT* vcursor-key-bindings is now nil by default, to avoid 30;; - *IMPORTANT* `vcursor-key-bindings' is now nil by default, to avoid
31;; side-effects when the package is loaded. This means no keys are 31;; side-effects when the package is loaded. This means no keys are
32;; bound by default. Use customize to change it to t to restore 32;; bound by default. Use customize to change it to t to restore
33;; the old behavior. (If you do it by hand in .emacs, it 33;; the old behavior. (If you do it by hand in .emacs, it
34;; must come before vcursor is loaded.) 34;; must come before vcursor is loaded.)
35;; - You can alter the main variables and the vcursor face via 35;; - You can alter the main variables and the vcursor face via
36;; M-x customize: go to the Editing group and find Vcursor. 36;; M-x customize: go to the Editing group and find Vcursor.
37;; - vcursor-auto-disable can now be 'copy (actually any value not nil 37;; - `vcursor-auto-disable' can now be 'copy (actually any value not nil
38;; or t), which means that copying from the vcursor will be turned 38;; or t), which means that copying from the vcursor will be turned
39;; off after any operation not involving the vcursor, but the 39;; off after any operation not involving the vcursor, but the
40;; vcursor itself will be left alone. 40;; vcursor itself will be left alone.
41;; - works on dumb terminals 41;; - works on dumb terminals
42;; - new keymap vcursor-map for binding to a prefix key 42;; - new keymap vcursor-map for binding to a prefix key
43;; - vcursor-compare-windows substantially improved 43;; - `vcursor-compare-windows' substantially improved
44;; - vcursor-execute-{key,command} much better about using the 44;; - `vcursor-execute-{key,command}' much better about using the
45;; right keymaps and arranging for the correct windows to be used 45;; right keymaps and arranging for the correct windows to be used
46;; - vcursor-window-funcall can call functions interactively 46;; - `vcursor-window-funcall' can call functions interactively
47;; - vcursor-interpret-input for special effects 47;; - `vcursor-interpret-input' for special effects
48;; 48;;
49;; Introduction 49;; Introduction
50;; ============ 50;; ============
@@ -326,21 +326,18 @@
326(defface vcursor 326(defface vcursor
327 '((((class color)) (:foreground "blue" :background "cyan" :underline t)) 327 '((((class color)) (:foreground "blue" :background "cyan" :underline t))
328 (t (:inverse-video t :underline t))) 328 (t (:inverse-video t :underline t)))
329 "Face for the virtual cursor." 329 "Face for the virtual cursor.")
330 :group 'vcursor)
331 330
332(defcustom vcursor-auto-disable nil 331(defcustom vcursor-auto-disable nil
333 "If non-nil, disable the virtual cursor after use. 332 "If non-nil, disable the virtual cursor after use.
334Any non-vcursor command will force `vcursor-disable' to be called. 333Any non-vcursor command will force `vcursor-disable' to be called.
335If non-nil but not t, just make sure copying is toggled off, but don't 334If non-nil but not t, just make sure copying is toggled off, but don't
336disable the vcursor." 335disable the vcursor."
337 :type '(choice (const t) (const nil) (const copy)) 336 :type '(choice (const t) (const nil) (const copy)))
338 :group 'vcursor)
339 337
340(defcustom vcursor-modifiers (list 'control 'shift) 338(defcustom vcursor-modifiers (list 'control 'shift)
341 "A list of modifiers that are used to define vcursor key bindings." 339 "A list of modifiers that are used to define vcursor key bindings."
342 :type '(repeat symbol) 340 :type '(repeat symbol))
343 :group 'vcursor)
344 341
345;; Needed for defcustom, must be up here 342;; Needed for defcustom, must be up here
346(defun vcursor-cs-binding (base &optional meta) 343(defun vcursor-cs-binding (base &optional meta)
@@ -349,112 +346,114 @@ disable the vcursor."
349 (cons 'meta key) 346 (cons 'meta key)
350 key)))) 347 key))))
351 348
349;; (defvar vcursor)
350
352(defun vcursor-bind-keys (var value) 351(defun vcursor-bind-keys (var value)
353 "Alter the value of the variable VAR to VALUE, binding keys as required. 352 "Alter the value of the variable VAR to VALUE, binding keys as required.
354VAR is usually `vcursor-key-bindings'. Normally this function is called 353VAR is usually `vcursor-key-bindings'. Normally this function is called
355on loading vcursor and from the customize package." 354on loading vcursor and from the customize package."
356 (set var value) 355 (set var value)
357 (cond 356 (cond
358 ((not value));; don't set any key bindings 357 ((not value)) ;; Don't set any key bindings.
359 ((or (eq value 'oemacs) 358 ((or (eq value 'oemacs)
360 (and (eq value t) (fboundp 'oemacs-version))) 359 (and (eq value t) (fboundp 'oemacs-version)))
361 (global-set-key [C-f1] 'vcursor-toggle-copy) 360 (global-set-key [C-f1] #'vcursor-toggle-copy)
362 (global-set-key [C-f2] 'vcursor-copy) 361 (global-set-key [C-f2] #'vcursor-copy)
363 (global-set-key [C-f3] 'vcursor-copy-word) 362 (global-set-key [C-f3] #'vcursor-copy-word)
364 (global-set-key [C-f4] 'vcursor-copy-line) 363 (global-set-key [C-f4] #'vcursor-copy-line)
365 364
366 (global-set-key [S-f1] 'vcursor-disable) 365 (global-set-key [S-f1] #'vcursor-disable)
367 (global-set-key [S-f2] 'vcursor-other-window) 366 (global-set-key [S-f2] #'vcursor-other-window)
368 (global-set-key [S-f3] 'vcursor-goto) 367 (global-set-key [S-f3] #'vcursor-goto)
369 (global-set-key [S-f4] 'vcursor-swap-point) 368 (global-set-key [S-f4] #'vcursor-swap-point)
370 369
371 (global-set-key [C-f5] 'vcursor-backward-char) 370 (global-set-key [C-f5] #'vcursor-backward-char)
372 (global-set-key [C-f6] 'vcursor-previous-line) 371 (global-set-key [C-f6] #'vcursor-previous-line)
373 (global-set-key [C-f7] 'vcursor-next-line) 372 (global-set-key [C-f7] #'vcursor-next-line)
374 (global-set-key [C-f8] 'vcursor-forward-char) 373 (global-set-key [C-f8] #'vcursor-forward-char)
375 374
376 (global-set-key [M-f5] 'vcursor-beginning-of-line) 375 (global-set-key [M-f5] #'vcursor-beginning-of-line)
377 (global-set-key [M-f6] 'vcursor-backward-word) 376 (global-set-key [M-f6] #'vcursor-backward-word)
378 (global-set-key [M-f6] 'vcursor-forward-word) 377 (global-set-key [M-f6] #'vcursor-forward-word)
379 (global-set-key [M-f8] 'vcursor-end-of-line) 378 (global-set-key [M-f8] #'vcursor-end-of-line)
380 379
381 (global-set-key [S-f5] 'vcursor-beginning-of-buffer) 380 (global-set-key [S-f5] #'vcursor-beginning-of-buffer)
382 (global-set-key [S-f6] 'vcursor-scroll-down) 381 (global-set-key [S-f6] #'vcursor-scroll-down)
383 (global-set-key [S-f7] 'vcursor-scroll-up) 382 (global-set-key [S-f7] #'vcursor-scroll-up)
384 (global-set-key [S-f8] 'vcursor-end-of-buffer) 383 (global-set-key [S-f8] #'vcursor-end-of-buffer)
385 384
386 (global-set-key [C-f9] 'vcursor-isearch-forward) 385 (global-set-key [C-f9] #'vcursor-isearch-forward)
387 386
388 (global-set-key [S-f9] 'vcursor-execute-key) 387 (global-set-key [S-f9] #'vcursor-execute-key)
389 (global-set-key [S-f10] 'vcursor-execute-command) 388 (global-set-key [S-f10] #'vcursor-execute-command)
390 389
391;;; Partial dictionary of Oemacs key sequences for you to roll your own, 390 ;; Partial dictionary of Oemacs key sequences for you to roll your own,
392;;; e.g C-S-up: (global-set-key "\M-[\C-f\M-\C-m" 'vcursor-previous-line) 391 ;; e.g C-S-up: (global-set-key "\M-[\C-f\M-\C-m" 'vcursor-previous-line)
393;;; Sequence: Sends: 392 ;; Sequence: Sends:
394;;; "\M-[\C-f\M-\C-m" C-S-up 393 ;; "\M-[\C-f\M-\C-m" C-S-up
395;;; "\M-[\C-f\M-\C-q" C-S-down 394 ;; "\M-[\C-f\M-\C-q" C-S-down
396;;; "\M-[\C-fs" C-S-left 395 ;; "\M-[\C-fs" C-S-left
397;;; "\M-[\C-ft" C-S-right 396 ;; "\M-[\C-ft" C-S-right
398;;; 397 ;;
399;;; "\M-[\C-fw" C-S-home 398 ;; "\M-[\C-fw" C-S-home
400;;; "\M-[\C-b\C-o" S-tab 399 ;; "\M-[\C-b\C-o" S-tab
401;;; "\M-[\C-f\M-\C-r" C-S-insert 400 ;; "\M-[\C-f\M-\C-r" C-S-insert
402;;; "\M-[\C-fu" C-S-end 401 ;; "\M-[\C-fu" C-S-end
403;;; "\M-[\C-f\M-\C-s" C-S-delete 402 ;; "\M-[\C-f\M-\C-s" C-S-delete
404;;; "\M-[\C-f\M-\C-d" C-S-prior 403 ;; "\M-[\C-f\M-\C-d" C-S-prior
405;;; "\M-[\C-fv" C-S-next 404 ;; "\M-[\C-fv" C-S-next
406;;; 405 ;;
407;;; "\M-[\C-f^" C-S-f1 406 ;; "\M-[\C-f^" C-S-f1
408;;; "\M-[\C-f_" C-S-f2 407 ;; "\M-[\C-f_" C-S-f2
409;;; "\M-[\C-f`" C-S-f3 408 ;; "\M-[\C-f`" C-S-f3
410;;; "\M-[\C-fa" C-S-f4 409 ;; "\M-[\C-fa" C-S-f4
411;;; "\M-[\C-fb" C-S-f5 410 ;; "\M-[\C-fb" C-S-f5
412;;; "\M-[\C-fc" C-S-f6 411 ;; "\M-[\C-fc" C-S-f6
413;;; "\M-[\C-fd" C-S-f7 412 ;; "\M-[\C-fd" C-S-f7
414;;; "\M-[\C-fe" C-S-f8 413 ;; "\M-[\C-fe" C-S-f8
415;;; "\M-[\C-ff" C-S-f9 414 ;; "\M-[\C-ff" C-S-f9
416;;; "\M-[\C-fg" C-S-f10 415 ;; "\M-[\C-fg" C-S-f10
417 ) 416 )
418 (t 417 (t
419 (global-set-key (vcursor-cs-binding "up") 'vcursor-previous-line) 418 (global-set-key (vcursor-cs-binding "up") #'vcursor-previous-line)
420 (global-set-key (vcursor-cs-binding "down") 'vcursor-next-line) 419 (global-set-key (vcursor-cs-binding "down") #'vcursor-next-line)
421 (global-set-key (vcursor-cs-binding "left") 'vcursor-backward-char) 420 (global-set-key (vcursor-cs-binding "left") #'vcursor-backward-char)
422 (global-set-key (vcursor-cs-binding "right") 'vcursor-forward-char) 421 (global-set-key (vcursor-cs-binding "right") #'vcursor-forward-char)
423 422
424 (global-set-key (vcursor-cs-binding "return") 'vcursor-disable) 423 (global-set-key (vcursor-cs-binding "return") #'vcursor-disable)
425 (global-set-key (vcursor-cs-binding "insert") 'vcursor-copy) 424 (global-set-key (vcursor-cs-binding "insert") #'vcursor-copy)
426 (global-set-key (vcursor-cs-binding "delete") 'vcursor-copy-word) 425 (global-set-key (vcursor-cs-binding "delete") #'vcursor-copy-word)
427 (global-set-key (vcursor-cs-binding "remove") 'vcursor-copy-word) 426 (global-set-key (vcursor-cs-binding "remove") #'vcursor-copy-word)
428 (global-set-key (vcursor-cs-binding "tab") 'vcursor-toggle-copy) 427 (global-set-key (vcursor-cs-binding "tab") #'vcursor-toggle-copy)
429 (global-set-key (vcursor-cs-binding "backtab") 'vcursor-toggle-copy) 428 (global-set-key (vcursor-cs-binding "backtab") #'vcursor-toggle-copy)
430 (global-set-key (vcursor-cs-binding "home") 'vcursor-beginning-of-buffer) 429 (global-set-key (vcursor-cs-binding "home") #'vcursor-beginning-of-buffer)
431 (global-set-key (vcursor-cs-binding "up" t) 'vcursor-beginning-of-buffer) 430 (global-set-key (vcursor-cs-binding "up" t) #'vcursor-beginning-of-buffer)
432 (global-set-key (vcursor-cs-binding "end") 'vcursor-end-of-buffer) 431 (global-set-key (vcursor-cs-binding "end") #'vcursor-end-of-buffer)
433 (global-set-key (vcursor-cs-binding "down" t) 'vcursor-end-of-buffer) 432 (global-set-key (vcursor-cs-binding "down" t) #'vcursor-end-of-buffer)
434 (global-set-key (vcursor-cs-binding "prior") 'vcursor-scroll-down) 433 (global-set-key (vcursor-cs-binding "prior") #'vcursor-scroll-down)
435 (global-set-key (vcursor-cs-binding "next") 'vcursor-scroll-up) 434 (global-set-key (vcursor-cs-binding "next") #'vcursor-scroll-up)
436 435
437 (global-set-key (vcursor-cs-binding "f6") 'vcursor-other-window) 436 (global-set-key (vcursor-cs-binding "f6") #'vcursor-other-window)
438 (global-set-key (vcursor-cs-binding "f7") 'vcursor-goto) 437 (global-set-key (vcursor-cs-binding "f7") #'vcursor-goto)
439 438
440 (global-set-key (vcursor-cs-binding "select") 439 (global-set-key (vcursor-cs-binding "select")
441 'vcursor-swap-point) ; DEC keyboards 440 #'vcursor-swap-point) ; DEC keyboards
442 (global-set-key (vcursor-cs-binding "tab" t) 'vcursor-swap-point) 441 (global-set-key (vcursor-cs-binding "tab" t) #'vcursor-swap-point)
443 442
444 (global-set-key (vcursor-cs-binding "find") 443 (global-set-key (vcursor-cs-binding "find")
445 'vcursor-isearch-forward) ; DEC keyboards 444 #'vcursor-isearch-forward) ; DEC keyboards
446 (global-set-key (vcursor-cs-binding "f8") 'vcursor-isearch-forward) 445 (global-set-key (vcursor-cs-binding "f8") #'vcursor-isearch-forward)
447 446
448 (global-set-key (vcursor-cs-binding "left" t) 'vcursor-beginning-of-line) 447 (global-set-key (vcursor-cs-binding "left" t) #'vcursor-beginning-of-line)
449 (global-set-key (vcursor-cs-binding "right" t) 'vcursor-end-of-line) 448 (global-set-key (vcursor-cs-binding "right" t) #'vcursor-end-of-line)
450 449
451 (global-set-key (vcursor-cs-binding "prior" t) 'vcursor-backward-word) 450 (global-set-key (vcursor-cs-binding "prior" t) #'vcursor-backward-word)
452 (global-set-key (vcursor-cs-binding "next" t) 'vcursor-forward-word) 451 (global-set-key (vcursor-cs-binding "next" t) #'vcursor-forward-word)
453 452
454 (global-set-key (vcursor-cs-binding "return" t) 'vcursor-copy-line) 453 (global-set-key (vcursor-cs-binding "return" t) #'vcursor-copy-line)
455 454
456 (global-set-key (vcursor-cs-binding "f9") 'vcursor-execute-key) 455 (global-set-key (vcursor-cs-binding "f9") #'vcursor-execute-key)
457 (global-set-key (vcursor-cs-binding "f10") 'vcursor-execute-command) 456 (global-set-key (vcursor-cs-binding "f10") #'vcursor-execute-command)
458 ))) 457 )))
459 458
460(defcustom vcursor-key-bindings nil 459(defcustom vcursor-key-bindings nil
@@ -465,8 +464,7 @@ define any key bindings.
465 464
466Default is nil." 465Default is nil."
467 :type '(choice (const t) (const nil) (const xterm) (const oemacs)) 466 :type '(choice (const t) (const nil) (const xterm) (const oemacs))
468 :group 'vcursor 467 :set #'vcursor-bind-keys
469 :set 'vcursor-bind-keys
470 :version "20.3") 468 :version "20.3")
471 469
472(defcustom vcursor-interpret-input nil 470(defcustom vcursor-interpret-input nil
@@ -475,13 +473,11 @@ This will cause text insertion to be much slower. Note that no special
475interpretation of strings is done: \"\C-x\" is a string of four 473interpretation of strings is done: \"\C-x\" is a string of four
476characters. The default is simply to copy strings." 474characters. The default is simply to copy strings."
477 :type 'boolean 475 :type 'boolean
478 :group 'vcursor
479 :version "20.3") 476 :version "20.3")
480 477
481(defcustom vcursor-string "**>" 478(defcustom vcursor-string "**>"
482 "String used to show the vcursor position on dumb terminals." 479 "String used to show the vcursor position on dumb terminals."
483 :type 'string 480 :type 'string
484 :group 'vcursor
485 :version "20.3") 481 :version "20.3")
486 482
487(defvar vcursor-overlay nil 483(defvar vcursor-overlay nil
@@ -501,42 +497,41 @@ scrolling set this. It is used by the `vcursor-auto-disable' code.")
501 497
502(defcustom vcursor-copy-flag nil 498(defcustom vcursor-copy-flag nil
503 "Non-nil means moving vcursor should copy characters moved over to point." 499 "Non-nil means moving vcursor should copy characters moved over to point."
504 :type 'boolean 500 :type 'boolean)
505 :group 'vcursor)
506 501
507(defvar vcursor-temp-goal-column nil 502(defvar vcursor-temp-goal-column nil
508 "Keeps track of temporary goal columns for the virtual cursor.") 503 "Keeps track of temporary goal columns for the virtual cursor.")
509 504
510(defvar vcursor-map 505(defvar vcursor-map
511 (let ((map (make-sparse-keymap))) 506 (let ((map (make-sparse-keymap)))
512 (define-key map "t" 'vcursor-use-vcursor-map) 507 (define-key map "t" #'vcursor-use-vcursor-map)
513 508
514 (define-key map "\C-p" 'vcursor-previous-line) 509 (define-key map "\C-p" #'vcursor-previous-line)
515 (define-key map "\C-n" 'vcursor-next-line) 510 (define-key map "\C-n" #'vcursor-next-line)
516 (define-key map "\C-b" 'vcursor-backward-char) 511 (define-key map "\C-b" #'vcursor-backward-char)
517 (define-key map "\C-f" 'vcursor-forward-char) 512 (define-key map "\C-f" #'vcursor-forward-char)
518 513
519 (define-key map "\r" 'vcursor-disable) 514 (define-key map "\r" #'vcursor-disable)
520 (define-key map " " 'vcursor-copy) 515 (define-key map " " #'vcursor-copy)
521 (define-key map "\C-y" 'vcursor-copy-word) 516 (define-key map "\C-y" #'vcursor-copy-word)
522 (define-key map "\C-i" 'vcursor-toggle-copy) 517 (define-key map "\C-i" #'vcursor-toggle-copy)
523 (define-key map "<" 'vcursor-beginning-of-buffer) 518 (define-key map "<" #'vcursor-beginning-of-buffer)
524 (define-key map ">" 'vcursor-end-of-buffer) 519 (define-key map ">" #'vcursor-end-of-buffer)
525 (define-key map "\M-v" 'vcursor-scroll-down) 520 (define-key map "\M-v" #'vcursor-scroll-down)
526 (define-key map "\C-v" 'vcursor-scroll-up) 521 (define-key map "\C-v" #'vcursor-scroll-up)
527 (define-key map "o" 'vcursor-other-window) 522 (define-key map "o" #'vcursor-other-window)
528 (define-key map "g" 'vcursor-goto) 523 (define-key map "g" #'vcursor-goto)
529 (define-key map "x" 'vcursor-swap-point) 524 (define-key map "x" #'vcursor-swap-point)
530 (define-key map "\C-s" 'vcursor-isearch-forward) 525 (define-key map "\C-s" #'vcursor-isearch-forward)
531 (define-key map "\C-r" 'vcursor-isearch-backward) 526 (define-key map "\C-r" #'vcursor-isearch-backward)
532 (define-key map "\C-a" 'vcursor-beginning-of-line) 527 (define-key map "\C-a" #'vcursor-beginning-of-line)
533 (define-key map "\C-e" 'vcursor-end-of-line) 528 (define-key map "\C-e" #'vcursor-end-of-line)
534 (define-key map "\M-w" 'vcursor-forward-word) 529 (define-key map "\M-w" #'vcursor-forward-word)
535 (define-key map "\M-b" 'vcursor-backward-word) 530 (define-key map "\M-b" #'vcursor-backward-word)
536 (define-key map "\M-l" 'vcursor-copy-line) 531 (define-key map "\M-l" #'vcursor-copy-line)
537 (define-key map "c" 'vcursor-compare-windows) 532 (define-key map "c" #'vcursor-compare-windows)
538 (define-key map "k" 'vcursor-execute-key) 533 (define-key map "k" #'vcursor-execute-key)
539 (define-key map "\M-x" 'vcursor-execute-command) 534 (define-key map "\M-x" #'vcursor-execute-command)
540 map) 535 map)
541 "Keymap for vcursor command.") 536 "Keymap for vcursor command.")
542;; This seems unused, but it was done as part of define-prefix-command, 537;; This seems unused, but it was done as part of define-prefix-command,
@@ -611,7 +606,8 @@ Set `vcursor-window' to the returned value as a side effect."
611 (cond 606 (cond
612 (winok) ; choice 2 607 (winok) ; choice 2
613 ((and vcursor-window ; choice 3 608 ((and vcursor-window ; choice 3
614 (not (eq thiswin vcursor-window))) vcursor-window) 609 (not (eq thiswin vcursor-window)))
610 vcursor-window)
615 (winbuf) ; choice 4 611 (winbuf) ; choice 4
616 (new-win (display-buffer (current-buffer) t)) ; choice 5 612 (new-win (display-buffer (current-buffer) t)) ; choice 5
617 (t nil))))))) ; default (choice 6) 613 (t nil))))))) ; default (choice 6)
@@ -719,16 +715,14 @@ not be visible otherwise, display it in another window."
719The vcursor will always appear in an unselected window." 715The vcursor will always appear in an unselected window."
720 716
721 (interactive "P") 717 (interactive "P")
722 (vcursor-window-funcall 'scroll-up n) 718 (vcursor-window-funcall #'scroll-up n))
723)
724 719
725(defun vcursor-scroll-down (&optional n) 720(defun vcursor-scroll-down (&optional n)
726 "Scroll down the vcursor window ARG lines or near full screen if none. 721 "Scroll down the vcursor window ARG lines or near full screen if none.
727The vcursor will always appear in an unselected window." 722The vcursor will always appear in an unselected window."
728 723
729 (interactive "P") 724 (interactive "P")
730 (vcursor-window-funcall 'scroll-down n) 725 (vcursor-window-funcall #'scroll-down n))
731 )
732 726
733(defun vcursor-isearch-forward (&optional rep norecurs) 727(defun vcursor-isearch-forward (&optional rep norecurs)
734 "Perform forward incremental search in the virtual cursor window. 728 "Perform forward incremental search in the virtual cursor window.
@@ -736,7 +730,7 @@ The virtual cursor is moved to the resulting point; the ordinary
736cursor stays where it was." 730cursor stays where it was."
737 731
738 (interactive "P") 732 (interactive "P")
739 (vcursor-window-funcall 'isearch-forward rep norecurs) 733 (vcursor-window-funcall #'isearch-forward rep norecurs)
740 ) 734 )
741 735
742(defun vcursor-isearch-backward (&optional rep norecurs) 736(defun vcursor-isearch-backward (&optional rep norecurs)
@@ -745,7 +739,7 @@ The virtual cursor is moved to the resulting point; the ordinary
745cursor stays where it was." 739cursor stays where it was."
746 740
747 (interactive "P") 741 (interactive "P")
748 (vcursor-window-funcall 'isearch-backward rep norecurs) 742 (vcursor-window-funcall #'isearch-backward rep norecurs)
749 ) 743 )
750 744
751(defun vcursor-window-funcall (func &rest args) 745(defun vcursor-window-funcall (func &rest args)
@@ -891,7 +885,7 @@ A prefix argument, if any, means ignore changes in whitespace.
891The variable `compare-windows-whitespace' controls how whitespace is skipped. 885The variable `compare-windows-whitespace' controls how whitespace is skipped.
892If `compare-ignore-case' is non-nil, changes in case are also ignored." 886If `compare-ignore-case' is non-nil, changes in case are also ignored."
893 (interactive "P") 887 (interactive "P")
894 ;; (vcursor-window-funcall 'compare-windows arg) 888 ;; (vcursor-window-funcall #'compare-windows arg)
895 (require 'compare-w) 889 (require 'compare-w)
896 (let* (p1 p2 maxp1 maxp2 b1 b2 w2 890 (let* (p1 p2 maxp1 maxp2 b1 b2 w2
897 success 891 success
@@ -1005,32 +999,32 @@ If `compare-ignore-case' is non-nil, changes in case are also ignored."
1005(defun vcursor-forward-char (arg) 999(defun vcursor-forward-char (arg)
1006 "Move the virtual cursor forward ARG characters." 1000 "Move the virtual cursor forward ARG characters."
1007 (interactive "p") 1001 (interactive "p")
1008 (vcursor-relative-move 'forward-char arg) 1002 (vcursor-relative-move #'forward-char arg)
1009 ) 1003 )
1010 1004
1011(defun vcursor-backward-char (arg) 1005(defun vcursor-backward-char (arg)
1012 "Move the virtual cursor backward ARG characters." 1006 "Move the virtual cursor backward ARG characters."
1013 (interactive "p") 1007 (interactive "p")
1014 (vcursor-relative-move 'backward-char arg) 1008 (vcursor-relative-move #'backward-char arg)
1015 ) 1009 )
1016 1010
1017(defun vcursor-forward-word (arg) 1011(defun vcursor-forward-word (arg)
1018 "Move the virtual cursor forward ARG words." 1012 "Move the virtual cursor forward ARG words."
1019 (interactive "p") 1013 (interactive "p")
1020 (vcursor-relative-move 'forward-word arg) 1014 (vcursor-relative-move #'forward-word arg)
1021 ) 1015 )
1022 1016
1023(defun vcursor-backward-word (arg) 1017(defun vcursor-backward-word (arg)
1024 "Move the virtual cursor backward ARG words." 1018 "Move the virtual cursor backward ARG words."
1025 (interactive "p") 1019 (interactive "p")
1026 (vcursor-relative-move 'backward-word arg) 1020 (vcursor-relative-move #'backward-word arg)
1027 ) 1021 )
1028 1022
1029(defun vcursor-beginning-of-line (arg) 1023(defun vcursor-beginning-of-line (arg)
1030 "Move the virtual cursor to beginning of its current line. 1024 "Move the virtual cursor to beginning of its current line.
1031ARG is as for `beginning-of-line'." 1025ARG is as for `beginning-of-line'."
1032 (interactive "P") 1026 (interactive "P")
1033 (vcursor-relative-move 'beginning-of-line 1027 (vcursor-relative-move #'beginning-of-line
1034 (if arg (prefix-numeric-value arg))) 1028 (if arg (prefix-numeric-value arg)))
1035 ) 1029 )
1036 1030
@@ -1038,7 +1032,7 @@ ARG is as for `beginning-of-line'."
1038 "Move the virtual cursor to end of its current line. 1032 "Move the virtual cursor to end of its current line.
1039ARG is as for `end-of-line'." 1033ARG is as for `end-of-line'."
1040 (interactive "P") 1034 (interactive "P")
1041 (vcursor-relative-move 'end-of-line 1035 (vcursor-relative-move #'end-of-line
1042 (if arg (prefix-numeric-value arg))) 1036 (if arg (prefix-numeric-value arg)))
1043 ) 1037 )
1044 1038
@@ -1110,7 +1104,7 @@ is called interactively, so prefix argument etc. are usable."
1110(defun vcursor-copy-word (arg) 1104(defun vcursor-copy-word (arg)
1111 "Copy ARG words from the virtual cursor position to point." 1105 "Copy ARG words from the virtual cursor position to point."
1112 (interactive "p") 1106 (interactive "p")
1113 (vcursor-copy (vcursor-get-char-count 'forward-word arg)) 1107 (vcursor-copy (vcursor-get-char-count #'forward-word arg))
1114 ) 1108 )
1115 1109
1116(defun vcursor-copy-line (arg) 1110(defun vcursor-copy-line (arg)
@@ -1123,7 +1117,7 @@ line is treated like ordinary characters."
1123 1117
1124 (interactive "P") 1118 (interactive "P")
1125 (let* ((num (prefix-numeric-value arg)) 1119 (let* ((num (prefix-numeric-value arg))
1126 (count (vcursor-get-char-count 'end-of-line num))) 1120 (count (vcursor-get-char-count #'end-of-line num)))
1127 (vcursor-copy (if (or (= count 0) arg) (1+ count) count))) 1121 (vcursor-copy (if (or (= count 0) arg) (1+ count) count)))
1128 ) 1122 )
1129 1123
@@ -1136,7 +1130,7 @@ line is treated like ordinary characters."
1136 (setq vcursor-last-command nil) 1130 (setq vcursor-last-command nil)
1137 ) 1131 )
1138 1132
1139(add-hook 'post-command-hook 'vcursor-post-command) 1133(add-hook 'post-command-hook #'vcursor-post-command)
1140 1134
1141(provide 'vcursor) 1135(provide 'vcursor)
1142 1136
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index e71290c7ef9..49baab69199 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -750,7 +750,7 @@ automatically."
750 :type 'boolean) 750 :type 'boolean)
751 751
752(defcustom widget-image-conversion 752(defcustom widget-image-conversion
753 '((xpm ".xpm") (gif ".gif") (png ".png") (jpeg ".jpg" ".jpeg") 753 '((svg ".svg") (xpm ".xpm") (gif ".gif") (png ".png") (jpeg ".jpg" ".jpeg")
754 (xbm ".xbm")) 754 (xbm ".xbm"))
755 "Conversion alist from image formats to file name suffixes." 755 "Conversion alist from image formats to file name suffixes."
756 :group 'widgets 756 :group 'widgets
@@ -1878,20 +1878,9 @@ as the argument to `documentation-property'."
1878 (let ((value (widget-get widget :value))) 1878 (let ((value (widget-get widget :value)))
1879 (and (listp value) 1879 (and (listp value)
1880 (<= (length value) (length vals)) 1880 (<= (length value) (length vals))
1881 (let ((head (widget-sublist vals 0 (length value)))) 1881 (let ((head (seq-subseq vals 0 (length value))))
1882 (and (equal head value) 1882 (and (equal head value)
1883 (cons head (widget-sublist vals (length value)))))))) 1883 (cons head (seq-subseq vals (length value))))))))
1884
1885(defun widget-sublist (list start &optional end)
1886 "Return the sublist of LIST from START to END.
1887If END is omitted, it defaults to the length of LIST."
1888 (if (> start 0) (setq list (nthcdr start list)))
1889 (if end
1890 (unless (<= end start)
1891 (setq list (copy-sequence list))
1892 (setcdr (nthcdr (- end start 1) list) nil)
1893 list)
1894 (copy-sequence list)))
1895 1884
1896(defun widget-item-action (widget &optional event) 1885(defun widget-item-action (widget &optional event)
1897 ;; Just notify itself. 1886 ;; Just notify itself.
@@ -2575,9 +2564,9 @@ Return an alist of (TYPE MATCH)."
2575 :button-suffix "" 2564 :button-suffix ""
2576 :button-prefix "" 2565 :button-prefix ""
2577 :on "(*)" 2566 :on "(*)"
2578 :on-glyph "radio1" 2567 :on-glyph "radio-checked"
2579 :off "( )" 2568 :off "( )"
2580 :off-glyph "radio0") 2569 :off-glyph "radio")
2581 2570
2582(defun widget-radio-button-notify (widget _child &optional event) 2571(defun widget-radio-button-notify (widget _child &optional event)
2583 ;; Tell daddy. 2572 ;; Tell daddy.
@@ -4117,7 +4106,9 @@ is inline."
4117 (setq help-echo (funcall help-echo widget))) 4106 (setq help-echo (funcall help-echo widget)))
4118 (if help-echo (message "%s" (eval help-echo))))) 4107 (if help-echo (message "%s" (eval help-echo)))))
4119 4108
4120;;; The End: 4109;;; Obsolete.
4110
4111(define-obsolete-function-alias 'widget-sublist #'seq-subseq "28.1")
4121 4112
4122(provide 'wid-edit) 4113(provide 'wid-edit)
4123 4114
diff --git a/lisp/woman.el b/lisp/woman.el
index 505fdb4c9e1..d9aa573d27b 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -390,9 +390,6 @@
390 390
391(eval-when-compile (require 'cl-lib)) 391(eval-when-compile (require 'cl-lib))
392 392
393(defvar woman-version "0.551 (beta)" "WoMan version information.")
394(make-obsolete-variable 'woman-version nil "28.1")
395
396(require 'man) 393(require 'man)
397(define-button-type 'WoMan-xref-man-page 394(define-button-type 'WoMan-xref-man-page
398 :supertype 'Man-abstract-xref-man-page 395 :supertype 'Man-abstract-xref-man-page
@@ -4580,6 +4577,11 @@ logging the message."
4580 (bookmark-default-handler 4577 (bookmark-default-handler
4581 `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark))))) 4578 `("" (buffer . ,buf) . ,(bookmark-get-bookmark-record bookmark)))))
4582 4579
4580;; Obsolete.
4581
4582(defvar woman-version "0.551 (beta)" "WoMan version information.")
4583(make-obsolete-variable 'woman-version 'emacs-version "28.1")
4584
4583(provide 'woman) 4585(provide 'woman)
4584 4586
4585;;; woman.el ends here 4587;;; woman.el ends here
diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in
index fb0ae0e1c21..ce77789db89 100644
--- a/lwlib/Makefile.in
+++ b/lwlib/Makefile.in
@@ -93,9 +93,9 @@ globals_h = ../src/globals.h
93$(globals_h): 93$(globals_h):
94 $(MAKE) -C ../src globals.h 94 $(MAKE) -C ../src globals.h
95 95
96.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean 96.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean extraclean
97 97
98clean mostlyclean: 98clean mostlyclean extraclean:
99 rm -f ./*.o liblw.a \#* $(DEPDIR)/* 99 rm -f ./*.o liblw.a \#* $(DEPDIR)/*
100 100
101distclean: clean 101distclean: clean
diff --git a/src/dispextern.h b/src/dispextern.h
index f4e872644db..a2ebd04f235 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3066,6 +3066,11 @@ struct image
3066 is created. */ 3066 is created. */
3067 unsigned long face_foreground, face_background; 3067 unsigned long face_foreground, face_background;
3068 3068
3069 /* Details of the font, only really relevant for types like SVG that
3070 allow us to draw text. */
3071 int face_font_size;
3072 char *face_font_family;
3073
3069 /* True if this image has a `transparent' background -- that is, is 3074 /* True if this image has a `transparent' background -- that is, is
3070 uses an image mask. The accessor macro for this is 3075 uses an image mask. The accessor macro for this is
3071 `IMAGE_BACKGROUND_TRANSPARENT'. */ 3076 `IMAGE_BACKGROUND_TRANSPARENT'. */
diff --git a/src/frame.c b/src/frame.c
index 66ae4943ba2..bbdc3b55992 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -3744,6 +3744,17 @@ window state change flag is reset. */)
3744 return (FRAME_WINDOW_STATE_CHANGE (f) = !NILP (arg)) ? Qt : Qnil; 3744 return (FRAME_WINDOW_STATE_CHANGE (f) = !NILP (arg)) ? Qt : Qnil;
3745} 3745}
3746 3746
3747DEFUN ("frame-scale-factor", Fframe_scale_factor, Sframe_scale_factor,
3748 0, 1, 0,
3749 doc: /* Return FRAMEs scale factor.
3750The scale factor is the amount by which a logical pixel size must be
3751multiplied to find the real number of pixels. */)
3752 (Lisp_Object frame)
3753{
3754 struct frame *f = decode_live_frame (frame);
3755
3756 return (make_float (f ? FRAME_SCALE_FACTOR (f) : 1));
3757}
3747 3758
3748/*********************************************************************** 3759/***********************************************************************
3749 Frame Parameters 3760 Frame Parameters
@@ -6457,6 +6468,7 @@ iconify the top level frame instead. */);
6457 defsubr (&Sframe_pointer_visible_p); 6468 defsubr (&Sframe_pointer_visible_p);
6458 defsubr (&Sframe_window_state_change); 6469 defsubr (&Sframe_window_state_change);
6459 defsubr (&Sset_frame_window_state_change); 6470 defsubr (&Sset_frame_window_state_change);
6471 defsubr (&Sframe_scale_factor);
6460 6472
6461#ifdef HAVE_WINDOW_SYSTEM 6473#ifdef HAVE_WINDOW_SYSTEM
6462 defsubr (&Sx_get_resource); 6474 defsubr (&Sx_get_resource);
diff --git a/src/frame.h b/src/frame.h
index 9ddcb4c6810..0fd95e4dd3c 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -907,6 +907,13 @@ default_pixels_per_inch_y (void)
907 (WINDOWP (f->minibuffer_window) \ 907 (WINDOWP (f->minibuffer_window) \
908 && XFRAME (XWINDOW (f->minibuffer_window)->frame) == f) 908 && XFRAME (XWINDOW (f->minibuffer_window)->frame) == f)
909 909
910/* Scale factor of frame F. */
911#if defined HAVE_NS
912# define FRAME_SCALE_FACTOR(f) (FRAME_NS_P (f) ? ns_frame_scale_factor (f) : 1)
913#else
914# define FRAME_SCALE_FACTOR(f) 1
915#endif
916
910/* Pixel width of frame F. */ 917/* Pixel width of frame F. */
911#define FRAME_PIXEL_WIDTH(f) ((f)->pixel_width) 918#define FRAME_PIXEL_WIDTH(f) ((f)->pixel_width)
912 919
diff --git a/src/image.c b/src/image.c
index 576956d4dbb..18126a804f3 100644
--- a/src/image.c
+++ b/src/image.c
@@ -135,14 +135,6 @@ typedef struct ns_bitmap_record Bitmap_Record;
135# define COLOR_TABLE_SUPPORT 1 135# define COLOR_TABLE_SUPPORT 1
136#endif 136#endif
137 137
138#ifdef HAVE_RSVG
139#if defined HAVE_NS
140# define FRAME_SCALE_FACTOR(f) ns_frame_scale_factor (f)
141#else
142# define FRAME_SCALE_FACTOR(f) 1;
143#endif
144#endif
145
146static void image_disable_image (struct frame *, struct image *); 138static void image_disable_image (struct frame *, struct image *);
147static void image_edge_detection (struct frame *, struct image *, Lisp_Object, 139static void image_edge_detection (struct frame *, struct image *, Lisp_Object,
148 Lisp_Object); 140 Lisp_Object);
@@ -1207,6 +1199,7 @@ free_image (struct frame *f, struct image *img)
1207 1199
1208 /* Free resources, then free IMG. */ 1200 /* Free resources, then free IMG. */
1209 img->type->free_img (f, img); 1201 img->type->free_img (f, img);
1202 xfree (img->face_font_family);
1210 xfree (img); 1203 xfree (img);
1211 } 1204 }
1212} 1205}
@@ -1605,7 +1598,7 @@ make_image_cache (void)
1605static struct image * 1598static struct image *
1606search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash, 1599search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash,
1607 unsigned long foreground, unsigned long background, 1600 unsigned long foreground, unsigned long background,
1608 bool ignore_colors) 1601 int font_size, char *font_family, bool ignore_colors)
1609{ 1602{
1610 struct image *img; 1603 struct image *img;
1611 struct image_cache *c = FRAME_IMAGE_CACHE (f); 1604 struct image_cache *c = FRAME_IMAGE_CACHE (f);
@@ -1629,7 +1622,10 @@ search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash,
1629 if (img->hash == hash 1622 if (img->hash == hash
1630 && !NILP (Fequal (img->spec, spec)) 1623 && !NILP (Fequal (img->spec, spec))
1631 && (ignore_colors || (img->face_foreground == foreground 1624 && (ignore_colors || (img->face_foreground == foreground
1632 && img->face_background == background))) 1625 && img->face_background == background
1626 && img->face_font_size == font_size
1627 && (font_family
1628 &&!strcmp (font_family, img->face_font_family)))))
1633 break; 1629 break;
1634 return img; 1630 return img;
1635} 1631}
@@ -1647,7 +1643,7 @@ uncache_image (struct frame *f, Lisp_Object spec)
1647 can have multiple copies of an image with the same spec. We want 1643 can have multiple copies of an image with the same spec. We want
1648 to remove them all to ensure the user doesn't see an old version 1644 to remove them all to ensure the user doesn't see an old version
1649 of the image when the face changes. */ 1645 of the image when the face changes. */
1650 while ((img = search_image_cache (f, spec, hash, 0, 0, true))) 1646 while ((img = search_image_cache (f, spec, hash, 0, 0, 0, NULL, true)))
1651 { 1647 {
1652 free_image (f, img); 1648 free_image (f, img);
1653 /* As display glyphs may still be referring to the image ID, we 1649 /* As display glyphs may still be referring to the image ID, we
@@ -2419,6 +2415,8 @@ lookup_image (struct frame *f, Lisp_Object spec, int face_id)
2419 struct face *face = FACE_FROM_ID (f, face_id); 2415 struct face *face = FACE_FROM_ID (f, face_id);
2420 unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f); 2416 unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f);
2421 unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f); 2417 unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f);
2418 int font_size = face->font->pixel_size;
2419 char *font_family = SSDATA (face->lface[LFACE_FAMILY_INDEX]);
2422 2420
2423 /* F must be a window-system frame, and SPEC must be a valid image 2421 /* F must be a window-system frame, and SPEC must be a valid image
2424 specification. */ 2422 specification. */
@@ -2427,7 +2425,8 @@ lookup_image (struct frame *f, Lisp_Object spec, int face_id)
2427 2425
2428 /* Look up SPEC in the hash table of the image cache. */ 2426 /* Look up SPEC in the hash table of the image cache. */
2429 hash = sxhash (spec); 2427 hash = sxhash (spec);
2430 img = search_image_cache (f, spec, hash, foreground, background, false); 2428 img = search_image_cache (f, spec, hash, foreground, background,
2429 font_size, font_family, false);
2431 if (img && img->load_failed_p) 2430 if (img && img->load_failed_p)
2432 { 2431 {
2433 free_image (f, img); 2432 free_image (f, img);
@@ -2442,6 +2441,9 @@ lookup_image (struct frame *f, Lisp_Object spec, int face_id)
2442 cache_image (f, img); 2441 cache_image (f, img);
2443 img->face_foreground = foreground; 2442 img->face_foreground = foreground;
2444 img->face_background = background; 2443 img->face_background = background;
2444 img->face_font_size = font_size;
2445 img->face_font_family = xmalloc (strlen (font_family) + 1);
2446 strcpy (img->face_font_family, font_family);
2445 img->load_failed_p = ! img->type->load_img (f, img); 2447 img->load_failed_p = ! img->type->load_img (f, img);
2446 2448
2447 /* If we can't load the image, and we don't have a width and 2449 /* If we can't load the image, and we don't have a width and
@@ -9540,6 +9542,7 @@ enum svg_keyword_index
9540 SVG_DATA, 9542 SVG_DATA,
9541 SVG_FILE, 9543 SVG_FILE,
9542 SVG_BASE_URI, 9544 SVG_BASE_URI,
9545 SVG_CSS,
9543 SVG_ASCENT, 9546 SVG_ASCENT,
9544 SVG_MARGIN, 9547 SVG_MARGIN,
9545 SVG_RELIEF, 9548 SVG_RELIEF,
@@ -9560,6 +9563,7 @@ static const struct image_keyword svg_format[SVG_LAST] =
9560 {":data", IMAGE_STRING_VALUE, 0}, 9563 {":data", IMAGE_STRING_VALUE, 0},
9561 {":file", IMAGE_STRING_VALUE, 0}, 9564 {":file", IMAGE_STRING_VALUE, 0},
9562 {":base-uri", IMAGE_STRING_VALUE, 0}, 9565 {":base-uri", IMAGE_STRING_VALUE, 0},
9566 {":css", IMAGE_STRING_VALUE, 0},
9563 {":ascent", IMAGE_ASCENT_VALUE, 0}, 9567 {":ascent", IMAGE_ASCENT_VALUE, 0},
9564 {":margin", IMAGE_NON_NEGATIVE_INTEGER_VALUE_OR_PAIR, 0}, 9568 {":margin", IMAGE_NON_NEGATIVE_INTEGER_VALUE_OR_PAIR, 0},
9565 {":relief", IMAGE_INTEGER_VALUE, 0}, 9569 {":relief", IMAGE_INTEGER_VALUE, 0},
@@ -9643,6 +9647,11 @@ DEF_DLL_FN (gboolean, rsvg_handle_get_geometry_for_layer,
9643 (RsvgHandle *, const char *, const RsvgRectangle *, 9647 (RsvgHandle *, const char *, const RsvgRectangle *,
9644 RsvgRectangle *, RsvgRectangle *, GError **)); 9648 RsvgRectangle *, RsvgRectangle *, GError **));
9645# endif 9649# endif
9650
9651# if LIBRSVG_CHECK_VERSION (2, 48, 0)
9652DEF_DLL_FN (gboolean, rsvg_handle_set_stylesheet,
9653 (RsvgHandle *, const guint8 *, gsize, GError **));
9654# endif
9646DEF_DLL_FN (void, rsvg_handle_get_dimensions, 9655DEF_DLL_FN (void, rsvg_handle_get_dimensions,
9647 (RsvgHandle *, RsvgDimensionData *)); 9656 (RsvgHandle *, RsvgDimensionData *));
9648DEF_DLL_FN (GdkPixbuf *, rsvg_handle_get_pixbuf, (RsvgHandle *)); 9657DEF_DLL_FN (GdkPixbuf *, rsvg_handle_get_pixbuf, (RsvgHandle *));
@@ -9696,6 +9705,9 @@ init_svg_functions (void)
9696 LOAD_DLL_FN (library, rsvg_handle_get_intrinsic_dimensions); 9705 LOAD_DLL_FN (library, rsvg_handle_get_intrinsic_dimensions);
9697 LOAD_DLL_FN (library, rsvg_handle_get_geometry_for_layer); 9706 LOAD_DLL_FN (library, rsvg_handle_get_geometry_for_layer);
9698#endif 9707#endif
9708#if LIBRSVG_CHECK_VERSION (2, 48, 0)
9709 LOAD_DLL_FN (library, rsvg_handle_set_stylesheet);
9710#endif
9699 LOAD_DLL_FN (library, rsvg_handle_get_dimensions); 9711 LOAD_DLL_FN (library, rsvg_handle_get_dimensions);
9700 LOAD_DLL_FN (library, rsvg_handle_get_pixbuf); 9712 LOAD_DLL_FN (library, rsvg_handle_get_pixbuf);
9701 9713
@@ -9736,6 +9748,9 @@ init_svg_functions (void)
9736# undef rsvg_handle_get_geometry_for_layer 9748# undef rsvg_handle_get_geometry_for_layer
9737# endif 9749# endif
9738# undef rsvg_handle_get_dimensions 9750# undef rsvg_handle_get_dimensions
9751# if LIBRSVG_CHECK_VERSION (2, 48, 0)
9752# undef rsvg_handle_set_stylesheet
9753# endif
9739# undef rsvg_handle_get_pixbuf 9754# undef rsvg_handle_get_pixbuf
9740# if LIBRSVG_CHECK_VERSION (2, 32, 0) 9755# if LIBRSVG_CHECK_VERSION (2, 32, 0)
9741# undef g_file_new_for_path 9756# undef g_file_new_for_path
@@ -9769,6 +9784,9 @@ init_svg_functions (void)
9769 fn_rsvg_handle_get_geometry_for_layer 9784 fn_rsvg_handle_get_geometry_for_layer
9770# endif 9785# endif
9771# define rsvg_handle_get_dimensions fn_rsvg_handle_get_dimensions 9786# define rsvg_handle_get_dimensions fn_rsvg_handle_get_dimensions
9787# if LIBRSVG_CHECK_VERSION (2, 48, 0)
9788# define rsvg_handle_set_stylesheet fn_rsvg_handle_set_stylesheet
9789# endif
9772# define rsvg_handle_get_pixbuf fn_rsvg_handle_get_pixbuf 9790# define rsvg_handle_get_pixbuf fn_rsvg_handle_get_pixbuf
9773# if LIBRSVG_CHECK_VERSION (2, 32, 0) 9791# if LIBRSVG_CHECK_VERSION (2, 32, 0)
9774# define g_file_new_for_path fn_g_file_new_for_path 9792# define g_file_new_for_path fn_g_file_new_for_path
@@ -9846,7 +9864,7 @@ svg_load (struct frame *f, struct image *img)
9846 9864
9847#if LIBRSVG_CHECK_VERSION (2, 46, 0) 9865#if LIBRSVG_CHECK_VERSION (2, 46, 0)
9848static double 9866static double
9849svg_css_length_to_pixels (RsvgLength length, double dpi) 9867svg_css_length_to_pixels (RsvgLength length, double dpi, int font_size)
9850{ 9868{
9851 double value = length.length; 9869 double value = length.length;
9852 9870
@@ -9874,9 +9892,16 @@ svg_css_length_to_pixels (RsvgLength length, double dpi)
9874 case RSVG_UNIT_IN: 9892 case RSVG_UNIT_IN:
9875 value *= dpi; 9893 value *= dpi;
9876 break; 9894 break;
9895#if LIBRSVG_CHECK_VERSION (2, 48, 0)
9896 /* We don't know exactly what font size is used on older librsvg
9897 versions. */
9898 case RSVG_UNIT_EM:
9899 value *= font_size;
9900 break;
9901#endif
9877 default: 9902 default:
9878 /* Probably one of em, ex, or %. We can't know what the pixel 9903 /* Probably ex or %. We can't know what the pixel value is
9879 value is without more information. */ 9904 without more information. */
9880 value = 0; 9905 value = 0;
9881 } 9906 }
9882 9907
@@ -9906,6 +9931,10 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9906 char *wrapped_contents = NULL; 9931 char *wrapped_contents = NULL;
9907 ptrdiff_t wrapped_size; 9932 ptrdiff_t wrapped_size;
9908 9933
9934#if LIBRSVG_CHECK_VERSION (2, 48, 0)
9935 char *css = NULL;
9936#endif
9937
9909#if ! GLIB_CHECK_VERSION (2, 36, 0) 9938#if ! GLIB_CHECK_VERSION (2, 36, 0)
9910 /* g_type_init is a glib function that must be called prior to 9939 /* g_type_init is a glib function that must be called prior to
9911 using gnome type library functions (obsolete since 2.36.0). */ 9940 using gnome type library functions (obsolete since 2.36.0). */
@@ -9931,6 +9960,26 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9931 9960
9932 rsvg_handle_set_dpi_x_y (rsvg_handle, FRAME_DISPLAY_INFO (f)->resx, 9961 rsvg_handle_set_dpi_x_y (rsvg_handle, FRAME_DISPLAY_INFO (f)->resx,
9933 FRAME_DISPLAY_INFO (f)->resy); 9962 FRAME_DISPLAY_INFO (f)->resy);
9963
9964#if LIBRSVG_CHECK_VERSION (2, 48, 0)
9965 Lisp_Object lcss = image_spec_value (img->spec, QCcss, NULL);
9966 if (!STRINGP (lcss))
9967 {
9968 /* Generate the CSS for the SVG image. */
9969 const char *css_spec = "svg{font-family:\"%s\";font-size:%4dpx}";
9970 int css_len = strlen (css_spec) + strlen (img->face_font_family);
9971 css = xmalloc (css_len);
9972 snprintf (css, css_len, css_spec, img->face_font_family, img->face_font_size);
9973 rsvg_handle_set_stylesheet (rsvg_handle, (guint8 *)css, strlen (css), NULL);
9974 }
9975 else
9976 {
9977 css = xmalloc (SBYTES (lcss) + 1);
9978 strncpy (css, SSDATA (lcss), SBYTES (lcss));
9979 *(css + SBYTES (lcss) + 1) = 0;
9980 }
9981#endif
9982
9934#else 9983#else
9935 /* Make a handle to a new rsvg object. */ 9984 /* Make a handle to a new rsvg object. */
9936 rsvg_handle = rsvg_handle_new (); 9985 rsvg_handle = rsvg_handle_new ();
@@ -9973,20 +10022,20 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9973 if (has_width && has_height) 10022 if (has_width && has_height)
9974 { 10023 {
9975 /* Success! We can use these values directly. */ 10024 /* Success! We can use these values directly. */
9976 viewbox_width = svg_css_length_to_pixels (iwidth, dpi); 10025 viewbox_width = svg_css_length_to_pixels (iwidth, dpi, img->face_font_size);
9977 viewbox_height = svg_css_length_to_pixels (iheight, dpi); 10026 viewbox_height = svg_css_length_to_pixels (iheight, dpi, img->face_font_size);
9978 } 10027 }
9979 else if (has_width && has_viewbox) 10028 else if (has_width && has_viewbox)
9980 { 10029 {
9981 viewbox_width = svg_css_length_to_pixels (iwidth, dpi); 10030 viewbox_width = svg_css_length_to_pixels (iwidth, dpi, img->face_font_size);
9982 viewbox_height = svg_css_length_to_pixels (iwidth, dpi) 10031 viewbox_height = svg_css_length_to_pixels (iwidth, dpi, img->face_font_size)
9983 * viewbox.width / viewbox.height; 10032 * viewbox.height / viewbox.width;
9984 } 10033 }
9985 else if (has_height && has_viewbox) 10034 else if (has_height && has_viewbox)
9986 { 10035 {
9987 viewbox_height = svg_css_length_to_pixels (iheight, dpi); 10036 viewbox_height = svg_css_length_to_pixels (iheight, dpi, img->face_font_size);
9988 viewbox_width = svg_css_length_to_pixels (iheight, dpi) 10037 viewbox_width = svg_css_length_to_pixels (iheight, dpi, img->face_font_size)
9989 * viewbox.height / viewbox.width; 10038 * viewbox.width / viewbox.height;
9990 } 10039 }
9991 else if (has_viewbox) 10040 else if (has_viewbox)
9992 { 10041 {
@@ -10107,6 +10156,10 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
10107 10156
10108 rsvg_handle_set_dpi_x_y (rsvg_handle, FRAME_DISPLAY_INFO (f)->resx, 10157 rsvg_handle_set_dpi_x_y (rsvg_handle, FRAME_DISPLAY_INFO (f)->resx,
10109 FRAME_DISPLAY_INFO (f)->resy); 10158 FRAME_DISPLAY_INFO (f)->resy);
10159
10160#if LIBRSVG_CHECK_VERSION (2, 48, 0)
10161 rsvg_handle_set_stylesheet (rsvg_handle, (guint8 *)css, strlen (css), NULL);
10162#endif
10110#else 10163#else
10111 /* Make a handle to a new rsvg object. */ 10164 /* Make a handle to a new rsvg object. */
10112 rsvg_handle = rsvg_handle_new (); 10165 rsvg_handle = rsvg_handle_new ();
@@ -10140,6 +10193,11 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
10140 g_object_unref (rsvg_handle); 10193 g_object_unref (rsvg_handle);
10141 xfree (wrapped_contents); 10194 xfree (wrapped_contents);
10142 10195
10196#if LIBRSVG_CHECK_VERSION (2, 48, 0)
10197 if (!STRINGP (lcss))
10198 xfree (css);
10199#endif
10200
10143 /* Extract some meta data from the svg handle. */ 10201 /* Extract some meta data from the svg handle. */
10144 width = gdk_pixbuf_get_width (pixbuf); 10202 width = gdk_pixbuf_get_width (pixbuf);
10145 height = gdk_pixbuf_get_height (pixbuf); 10203 height = gdk_pixbuf_get_height (pixbuf);
@@ -10210,6 +10268,10 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
10210 g_object_unref (rsvg_handle); 10268 g_object_unref (rsvg_handle);
10211 if (wrapped_contents) 10269 if (wrapped_contents)
10212 xfree (wrapped_contents); 10270 xfree (wrapped_contents);
10271#if LIBRSVG_CHECK_VERSION (2, 48, 0)
10272 if (css && !STRINGP (lcss))
10273 xfree (css);
10274#endif
10213 /* FIXME: Use error->message so the user knows what is the actual 10275 /* FIXME: Use error->message so the user knows what is the actual
10214 problem with the image. */ 10276 problem with the image. */
10215 image_error ("Error parsing SVG image `%s'", img->spec); 10277 image_error ("Error parsing SVG image `%s'", img->spec);
@@ -10801,6 +10863,7 @@ non-numeric, there is no explicit limit on the size of images. */);
10801#if defined (HAVE_RSVG) 10863#if defined (HAVE_RSVG)
10802 DEFSYM (Qsvg, "svg"); 10864 DEFSYM (Qsvg, "svg");
10803 DEFSYM (QCbase_uri, ":base-uri"); 10865 DEFSYM (QCbase_uri, ":base-uri");
10866 DEFSYM (QCcss, ":css");
10804 add_image_type (Qsvg); 10867 add_image_type (Qsvg);
10805#ifdef HAVE_NTGUI 10868#ifdef HAVE_NTGUI
10806 /* Other libraries used directly by svg code. */ 10869 /* Other libraries used directly by svg code. */
diff --git a/src/nsterm.m b/src/nsterm.m
index bf175bbd188..a6501100ca9 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -9790,7 +9790,7 @@ nswindow_orderedIndex_sort (id w1, id w2, void *c)
9790 IOSurfaceRef surface = NULL; 9790 IOSurfaceRef surface = NULL;
9791 9791
9792 NSTRACE ("[EmacsSurface getContextWithSize:]"); 9792 NSTRACE ("[EmacsSurface getContextWithSize:]");
9793 NSTRACE_MSG (@"IOSurface count: %lu", [cache count] + (lastSurface ? 1 : 0)); 9793 NSTRACE_MSG ("IOSurface count: %lu", [cache count] + (lastSurface ? 1 : 0));
9794 9794
9795 for (id object in cache) 9795 for (id object in cache)
9796 { 9796 {
diff --git a/src/pdumper.c b/src/pdumper.c
index 9a3b6dce00b..e266b35ca67 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -5681,9 +5681,6 @@ Value is nil if this session was not started using a dump file.*/)
5681 Fcons (Qdump_file_name, dump_fn)); 5681 Fcons (Qdump_file_name, dump_fn));
5682} 5682}
5683 5683
5684#endif /* HAVE_PDUMPER */
5685
5686
5687static void 5684static void
5688thaw_hash_tables (void) 5685thaw_hash_tables (void)
5689{ 5686{
@@ -5692,10 +5689,15 @@ thaw_hash_tables (void)
5692 hash_table_thaw (AREF (hash_tables, i)); 5689 hash_table_thaw (AREF (hash_tables, i));
5693} 5690}
5694 5691
5692#endif /* HAVE_PDUMPER */
5693
5694
5695void 5695void
5696init_pdumper_once (void) 5696init_pdumper_once (void)
5697{ 5697{
5698#ifdef HAVE_PDUMPER
5698 pdumper_do_now_and_after_load (thaw_hash_tables); 5699 pdumper_do_now_and_after_load (thaw_hash_tables);
5700#endif
5699} 5701}
5700 5702
5701void 5703void
diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba
index 30a58971340..19c83a8016f 100644
--- a/test/infra/Dockerfile.emba
+++ b/test/infra/Dockerfile.emba
@@ -68,5 +68,5 @@ COPY . /checkout
68WORKDIR /checkout 68WORKDIR /checkout
69RUN ./autogen.sh autoconf 69RUN ./autogen.sh autoconf
70RUN ./configure --with-ns 70RUN ./configure --with-ns
71RUN make -j4 bootstrap 71RUN make bootstrap
72RUN make -j4 72RUN make -j4
diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
index 44b3d8b672f..235c02f8e8b 100644
--- a/test/lisp/electric-tests.el
+++ b/test/lisp/electric-tests.el
@@ -47,7 +47,7 @@
47 47
48(defmacro save-electric-modes (&rest body) 48(defmacro save-electric-modes (&rest body)
49 (declare (indent defun) (debug t)) 49 (declare (indent defun) (debug t))
50 `(call-with-saved-electric-modes #'(lambda () ,@body))) 50 `(call-with-saved-electric-modes (lambda () ,@body)))
51 51
52(defun electric-pair-test-for (fixture where char expected-string 52(defun electric-pair-test-for (fixture where char expected-string
53 expected-point mode bindings 53 expected-point mode bindings
@@ -359,7 +359,7 @@ baz\"\""
359# \" 359# \"
360# 360#
361baz\"\"" 361baz\"\""
362 :fixture-fn #'(lambda () (goto-char (point-min)) (search-forward "bar"))) 362 :fixture-fn (lambda () (goto-char (point-min)) (search-forward "bar")))
363 363
364(define-electric-pair-test inhibit-in-mismatched-string-inside-c-comments 364(define-electric-pair-test inhibit-in-mismatched-string-inside-c-comments
365 "foo\"\"/* 365 "foo\"\"/*
@@ -378,7 +378,7 @@ baz\"\""
378 \" \" 378 \" \"
379 \" 379 \"
380*/baz\"\"" 380*/baz\"\""
381 :fixture-fn #'(lambda () (goto-char (point-min)) (search-forward "bar"))) 381 :fixture-fn (lambda () (goto-char (point-min)) (search-forward "bar")))
382 382
383 383
384;;; More quotes, but now don't bind `electric-pair-text-syntax-table' 384;;; More quotes, but now don't bind `electric-pair-text-syntax-table'
@@ -520,8 +520,8 @@ baz\"\""
520(define-electric-pair-test js-mode-braces 520(define-electric-pair-test js-mode-braces
521 "" "{" :expected-string "{}" :expected-point 2 521 "" "{" :expected-string "{}" :expected-point 2
522 :modes '(js-mode) 522 :modes '(js-mode)
523 :fixture-fn #'(lambda () 523 :fixture-fn (lambda ()
524 (electric-pair-mode 1))) 524 (electric-pair-mode 1)))
525 525
526 526
527(define-electric-pair-test js-mode-braces-with-layout 527(define-electric-pair-test js-mode-braces-with-layout
@@ -529,29 +529,29 @@ baz\"\""
529 :modes '(js-mode) 529 :modes '(js-mode)
530 :test-in-comments nil 530 :test-in-comments nil
531 :test-in-strings nil 531 :test-in-strings nil
532 :fixture-fn #'(lambda () 532 :fixture-fn (lambda ()
533 (electric-layout-mode 1) 533 (electric-layout-mode 1)
534 (electric-pair-mode 1))) 534 (electric-pair-mode 1)))
535 535
536(define-electric-pair-test js-mode-braces-with-layout-and-indent 536(define-electric-pair-test js-mode-braces-with-layout-and-indent
537 "" "{" :expected-string "{\n \n}" :expected-point 7 537 "" "{" :expected-string "{\n \n}" :expected-point 7
538 :modes '(js-mode) 538 :modes '(js-mode)
539 :test-in-comments nil 539 :test-in-comments nil
540 :test-in-strings nil 540 :test-in-strings nil
541 :fixture-fn #'(lambda () 541 :fixture-fn (lambda ()
542 (electric-pair-mode 1) 542 (electric-pair-mode 1)
543 (electric-indent-mode 1) 543 (electric-indent-mode 1)
544 (electric-layout-mode 1))) 544 (electric-layout-mode 1)))
545 545
546(define-electric-pair-test js-mode-braces-with-layout-and-indent 546(define-electric-pair-test js-mode-braces-with-layout-and-indent
547 "" "{" :expected-string "{\n \n}" :expected-point 7 547 "" "{" :expected-string "{\n \n}" :expected-point 7
548 :modes '(js-mode) 548 :modes '(js-mode)
549 :test-in-comments nil 549 :test-in-comments nil
550 :test-in-strings nil 550 :test-in-strings nil
551 :fixture-fn #'(lambda () 551 :fixture-fn (lambda ()
552 (electric-pair-mode 1) 552 (electric-pair-mode 1)
553 (electric-indent-mode 1) 553 (electric-indent-mode 1)
554 (electric-layout-mode 1))) 554 (electric-layout-mode 1)))
555 555
556 556
557;;; Backspacing 557;;; Backspacing
@@ -606,55 +606,55 @@ baz\"\""
606;;; 606;;;
607(define-electric-pair-test autowrapping-1 607(define-electric-pair-test autowrapping-1
608 "foo" "(" :expected-string "(foo)" :expected-point 2 608 "foo" "(" :expected-string "(foo)" :expected-point 2
609 :fixture-fn #'(lambda () 609 :fixture-fn (lambda ()
610 (electric-pair-mode 1) 610 (electric-pair-mode 1)
611 (mark-sexp 1))) 611 (mark-sexp 1)))
612 612
613(define-electric-pair-test autowrapping-2 613(define-electric-pair-test autowrapping-2
614 "foo" ")" :expected-string "(foo)" :expected-point 6 614 "foo" ")" :expected-string "(foo)" :expected-point 6
615 :fixture-fn #'(lambda () 615 :fixture-fn (lambda ()
616 (electric-pair-mode 1) 616 (electric-pair-mode 1)
617 (mark-sexp 1))) 617 (mark-sexp 1)))
618 618
619(define-electric-pair-test autowrapping-3 619(define-electric-pair-test autowrapping-3
620 "foo" ")" :expected-string "(foo)" :expected-point 6 620 "foo" ")" :expected-string "(foo)" :expected-point 6
621 :fixture-fn #'(lambda () 621 :fixture-fn (lambda ()
622 (electric-pair-mode 1) 622 (electric-pair-mode 1)
623 (goto-char (point-max)) 623 (goto-char (point-max))
624 (skip-chars-backward "\"") 624 (skip-chars-backward "\"")
625 (mark-sexp -1))) 625 (mark-sexp -1)))
626 626
627(define-electric-pair-test autowrapping-4 627(define-electric-pair-test autowrapping-4
628 "foo" "(" :expected-string "(foo)" :expected-point 2 628 "foo" "(" :expected-string "(foo)" :expected-point 2
629 :fixture-fn #'(lambda () 629 :fixture-fn (lambda ()
630 (electric-pair-mode 1) 630 (electric-pair-mode 1)
631 (goto-char (point-max)) 631 (goto-char (point-max))
632 (skip-chars-backward "\"") 632 (skip-chars-backward "\"")
633 (mark-sexp -1))) 633 (mark-sexp -1)))
634 634
635(define-electric-pair-test autowrapping-5 635(define-electric-pair-test autowrapping-5
636 "foo" "\"" :expected-string "\"foo\"" :expected-point 2 636 "foo" "\"" :expected-string "\"foo\"" :expected-point 2
637 :fixture-fn #'(lambda () 637 :fixture-fn (lambda ()
638 (electric-pair-mode 1) 638 (electric-pair-mode 1)
639 (mark-sexp 1))) 639 (mark-sexp 1)))
640 640
641(define-electric-pair-test autowrapping-6 641(define-electric-pair-test autowrapping-6
642 "foo" "\"" :expected-string "\"foo\"" :expected-point 6 642 "foo" "\"" :expected-string "\"foo\"" :expected-point 6
643 :fixture-fn #'(lambda () 643 :fixture-fn (lambda ()
644 (electric-pair-mode 1) 644 (electric-pair-mode 1)
645 (goto-char (point-max)) 645 (goto-char (point-max))
646 (skip-chars-backward "\"") 646 (skip-chars-backward "\"")
647 (mark-sexp -1))) 647 (mark-sexp -1)))
648 648
649(define-electric-pair-test autowrapping-7 649(define-electric-pair-test autowrapping-7
650 "foo" "\"" :expected-string "``foo''" :expected-point 8 650 "foo" "\"" :expected-string "``foo''" :expected-point 8
651 :modes '(tex-mode) 651 :modes '(tex-mode)
652 :test-in-comments nil 652 :test-in-comments nil
653 :fixture-fn #'(lambda () 653 :fixture-fn (lambda ()
654 (electric-pair-mode 1) 654 (electric-pair-mode 1)
655 (goto-char (point-max)) 655 (goto-char (point-max))
656 (skip-chars-backward "\"") 656 (skip-chars-backward "\"")
657 (mark-sexp -1))) 657 (mark-sexp -1)))
658 658
659 659
660;;; Electric quotes 660;;; Electric quotes
diff --git a/test/lisp/epg-config-tests.el b/test/lisp/epg-config-tests.el
new file mode 100644
index 00000000000..fba61e573c3
--- /dev/null
+++ b/test/lisp/epg-config-tests.el
@@ -0,0 +1,47 @@
1;;; epg-config-tests.el --- Test suite for epg.el -*- lexical-binding: t -*-
2
3;; Copyright (C) 2021 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
19
20;;; Commentary:
21
22;;; Code:
23
24(require 'ert)
25(require 'epg-config)
26
27(ert-deftest epg-config-test-epg-find-configuration ()
28 (skip-unless (executable-find "gpg2"))
29 (should (assq 'version (epg-find-configuration 'OpenPGP))))
30
31(ert-deftest epg-config-test-epg-find-configuration/unknown-protocol ()
32 (should-error (epg-find-configuration 'does-not-exist)))
33
34(ert-deftest epg-config-test-epg-check-configuration ()
35 (should (epg-check-configuration '((version . "1.0")) "0.9"))
36 (should (epg-check-configuration '((version . "1.0")) "1.0"))
37 (should-error (epg-check-configuration '((version . "1.0")) "1.1"))
38 (should-error (epg-check-configuration '((version . "1.0")) 'foo))
39 (should-error (epg-check-configuration '((version . "1.0")) "foo")))
40
41(ert-deftest epg-config-test-epg-required-version-p ()
42 (skip-unless (executable-find "gpg2"))
43 (should (epg-required-version-p 'OpenPGP "1.0")))
44
45(provide 'epg-config-tests)
46
47;;; epg-config-tests.el ends here
diff --git a/test/lisp/filenotify-tests.el b/test/lisp/filenotify-tests.el
index 4a2f1f9a676..13350b24422 100644
--- a/test/lisp/filenotify-tests.el
+++ b/test/lisp/filenotify-tests.el
@@ -117,8 +117,9 @@ There are different timeouts for local and remote file notification libraries."
117(defun file-notify--test-timeout () 117(defun file-notify--test-timeout ()
118 "Timeout to wait for arriving a bunch of events, in seconds." 118 "Timeout to wait for arriving a bunch of events, in seconds."
119 (cond 119 (cond
120 ((file-remote-p temporary-file-directory) 20)
120 ((eq system-type 'cygwin) 10) 121 ((eq system-type 'cygwin) 10)
121 ((file-remote-p temporary-file-directory) 6) 122 ((getenv "EMACS_EMBA_CI") 10)
122 ((string-equal (file-notify--test-library) "w32notify") 4) 123 ((string-equal (file-notify--test-library) "w32notify") 4)
123 (t 3))) 124 (t 3)))
124 125
diff --git a/test/lisp/progmodes/executable-tests.el b/test/lisp/progmodes/executable-tests.el
new file mode 100644
index 00000000000..4f0fa699f72
--- /dev/null
+++ b/test/lisp/progmodes/executable-tests.el
@@ -0,0 +1,51 @@
1;;; executable-tests.el --- Tests for executable.el -*- lexical-binding:t -*-
2
3;; Copyright (C) 2021 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
19
20;;; Commentary:
21
22;;; Code:
23
24(require 'ert)
25(require 'executable)
26
27(ert-deftest executable-tests-set-magic ()
28 (with-temp-buffer
29 (insert "#!/foo/bar")
30 (executable-set-magic "/bin/bash" nil t t)
31 (should (equal (buffer-string) "#!/bin/bash"))))
32
33(ert-deftest executable-tests-set-magic/with-argument ()
34 (with-temp-buffer
35 (insert "#!/foo/bar")
36 (executable-set-magic "/bin/bash" "--norc" t t)
37 (should (equal (buffer-string) "#!/bin/bash --norc"))))
38
39(ert-deftest executable-tests-set-magic/executable-insert-nil ()
40 (let ((executable-insert nil))
41 (with-temp-buffer
42 (insert "#!/foo/bar")
43 (executable-set-magic "/bin/bash" nil t nil)
44 (should (equal (buffer-string) "#!/foo/bar"))))
45 (let ((executable-insert nil))
46 (with-temp-buffer
47 (insert "#!/foo/bar")
48 (executable-set-magic "/bin/bash" nil t t)
49 (should (equal (buffer-string) "#!/bin/bash")))))
50
51;;; executable-tests.el ends here
diff --git a/test/lisp/progmodes/xref-tests.el b/test/lisp/progmodes/xref-tests.el
index 9982c32d41d..c25bbd94775 100644
--- a/test/lisp/progmodes/xref-tests.el
+++ b/test/lisp/progmodes/xref-tests.el
@@ -143,7 +143,7 @@
143 (let* ((data-parent-dir 143 (let* ((data-parent-dir
144 (file-name-directory (directory-file-name xref-tests--data-dir))) 144 (file-name-directory (directory-file-name xref-tests--data-dir)))
145 (project-find-functions 145 (project-find-functions
146 #'(lambda (_) (cons 'transient data-parent-dir))) 146 (lambda (_) (cons 'transient data-parent-dir)))
147 (xref-file-name-display 'project-relative) 147 (xref-file-name-display 'project-relative)
148 ;; Some older BSD find versions can produce '//' in the output. 148 ;; Some older BSD find versions can produce '//' in the output.
149 (expected (list 149 (expected (list
diff --git a/test/src/thread-tests.el b/test/src/thread-tests.el
index f14d2426ef0..0e1ca76fd9c 100644
--- a/test/src/thread-tests.el
+++ b/test/src/thread-tests.el
@@ -315,8 +315,8 @@
315 "Test signaling a thread as soon as it is started by the OS." 315 "Test signaling a thread as soon as it is started by the OS."
316 (skip-unless (featurep 'threads)) 316 (skip-unless (featurep 'threads))
317 (let ((thread 317 (let ((thread
318 (make-thread #'(lambda () 318 (make-thread (lambda ()
319 (while t (thread-yield)))))) 319 (while t (thread-yield))))))
320 (thread-signal thread 'error nil) 320 (thread-signal thread 'error nil)
321 (sit-for 1) 321 (sit-for 1)
322 (should-not (thread-live-p thread)) 322 (should-not (thread-live-p thread))
@@ -331,7 +331,7 @@
331 (let (buffer-read-only) 331 (let (buffer-read-only)
332 (erase-buffer)) 332 (erase-buffer))
333 (let ((thread 333 (let ((thread
334 (make-thread #'(lambda () (thread-signal main-thread 'error nil))))) 334 (make-thread (lambda () (thread-signal main-thread 'error nil)))))
335 (while (thread-live-p thread) 335 (while (thread-live-p thread)
336 (thread-yield)) 336 (thread-yield))
337 (read-event nil nil 0.1) 337 (read-event nil nil 0.1)