summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2020-09-13 14:54:26 -0700
committerSean Whitton <spwhitton@spwhitton.name>2020-09-13 14:54:26 -0700
commit892df359a8c7f64dfb4ee0aaec304ed0cc36f22b (patch)
treec2949b787b8c30f4b8d0f76067c2b2e478c72f6d
parenta6ec9a789e5bb02d2cc10f5b6548c7b3bdeaa094 (diff)
parent8086a82f24a5d3cb9cad9ce98d93ffa38b1188fb (diff)
downloademacs-892df359a8c7f64dfb4ee0aaec304ed0cc36f22b.tar.gz
Merge branch 'athena/unstable' into athena/buster-backports
-rw-r--r--.gitlab-ci.yml45
-rw-r--r--admin/CPP-DEFINES2
-rw-r--r--admin/admin.el50
-rwxr-xr-xadmin/merge-gnulib2
-rw-r--r--admin/notes/bug-triage10
-rw-r--r--admin/notes/bugtracker13
-rw-r--r--admin/release-process20
-rwxr-xr-xbuild-aux/config.guess28
-rwxr-xr-xbuild-aux/config.sub4
-rw-r--r--configure.ac40
-rw-r--r--debian/changelog6
-rw-r--r--doc/emacs/dired.texi23
-rw-r--r--doc/emacs/display.texi23
-rw-r--r--doc/emacs/emacs.texi11
-rw-r--r--doc/emacs/fixit.texi11
-rw-r--r--doc/emacs/maintaining.texi14
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi2
-rw-r--r--doc/lispref/backups.texi78
-rw-r--r--doc/lispref/customize.texi15
-rw-r--r--doc/lispref/functions.texi27
-rw-r--r--doc/lispref/help.texi3
-rw-r--r--doc/lispref/minibuf.texi31
-rw-r--r--doc/lispref/modes.texi23
-rw-r--r--doc/lispref/positions.texi3
-rw-r--r--doc/lispref/text.texi5
-rw-r--r--doc/lispref/variables.texi7
-rw-r--r--doc/misc/auth.texi5
-rw-r--r--doc/misc/cc-mode.texi2
-rw-r--r--doc/misc/dbus.texi52
-rw-r--r--doc/misc/eudc.texi14
-rw-r--r--doc/misc/gnus.texi288
-rw-r--r--doc/misc/message.texi7
-rw-r--r--doc/misc/smtpmail.texi10
-rw-r--r--doc/misc/tramp.texi16
-rw-r--r--etc/NEWS208
-rw-r--r--etc/NEWS.272
-rw-r--r--etc/PROBLEMS6
-rw-r--r--etc/compilation.txt1
-rw-r--r--etc/themes/manoj-dark-theme.el8
-rw-r--r--etc/themes/modus-operandi-theme.el4266
-rw-r--r--etc/themes/modus-vivendi-theme.el4266
-rw-r--r--etc/w32-feature.el87
-rw-r--r--leim/SKK-DIC/SKK-JISYO.L4
-rw-r--r--lib/careadlinkat.c108
-rw-r--r--lib/cdefs.h6
-rw-r--r--lib/diffseq.h128
-rw-r--r--lib/gnulib.mk.in26
-rw-r--r--lib/intprops.h15
-rw-r--r--lib/sig2str.c17
-rw-r--r--lib/sigdescr_np.c376
-rw-r--r--lib/stdalign.in.h6
-rw-r--r--lib/string.in.h54
-rw-r--r--lib/verify.h8
-rw-r--r--lisp/abbrev.el3
-rw-r--r--lisp/allout.el15
-rw-r--r--lisp/auth-source.el4
-rw-r--r--lisp/bookmark.el2
-rw-r--r--lisp/calc/calc-bin.el4
-rw-r--r--lisp/calc/calc-store.el10
-rw-r--r--lisp/calc/calcalg3.el24
-rw-r--r--lisp/calendar/icalendar.el56
-rw-r--r--lisp/calendar/time-date.el6
-rw-r--r--lisp/calendar/timeclock.el6
-rw-r--r--lisp/calendar/todo-mode.el79
-rw-r--r--lisp/cedet/data-debug.el2
-rw-r--r--lisp/comint.el8
-rw-r--r--lisp/completion.el6
-rw-r--r--lisp/cus-edit.el18
-rw-r--r--lisp/cus-start.el5
-rw-r--r--lisp/cus-theme.el17
-rw-r--r--lisp/custom.el24
-rw-r--r--lisp/dired-aux.el37
-rw-r--r--lisp/dired-x.el17
-rw-r--r--lisp/dired.el91
-rw-r--r--lisp/doc-view.el45
-rw-r--r--lisp/dom.el44
-rw-r--r--lisp/emacs-lisp/advice.el14
-rw-r--r--lisp/emacs-lisp/bytecomp.el52
-rw-r--r--lisp/emacs-lisp/cl-lib.el7
-rw-r--r--lisp/emacs-lisp/debug.el7
-rw-r--r--lisp/emacs-lisp/disass.el5
-rw-r--r--lisp/emacs-lisp/easy-mmode.el5
-rw-r--r--lisp/emacs-lisp/edebug.el2
-rw-r--r--lisp/emacs-lisp/eieio-base.el259
-rw-r--r--lisp/emacs-lisp/eldoc.el21
-rw-r--r--lisp/emacs-lisp/ert.el8
-rw-r--r--lisp/emacs-lisp/find-func.el10
-rw-r--r--lisp/emacs-lisp/gv.el18
-rw-r--r--lisp/emacs-lisp/lisp-mode.el4
-rw-r--r--lisp/emacs-lisp/nadvice.el8
-rw-r--r--lisp/emacs-lisp/package.el5
-rw-r--r--lisp/emacs-lisp/re-builder.el2
-rw-r--r--lisp/emacs-lisp/seq.el2
-rw-r--r--lisp/emacs-lisp/shadow.el3
-rw-r--r--lisp/emacs-lisp/smie.el7
-rw-r--r--lisp/emacs-lisp/trace.el17
-rw-r--r--lisp/emacs-lisp/warnings.el42
-rw-r--r--lisp/emulation/edt-mapper.el3
-rw-r--r--lisp/epa-file.el6
-rw-r--r--lisp/epa.el137
-rw-r--r--lisp/erc/erc-dcc.el4
-rw-r--r--lisp/eshell/em-hist.el2
-rw-r--r--lisp/eshell/esh-mode.el76
-rw-r--r--lisp/facemenu.el2
-rw-r--r--lisp/faces.el5
-rw-r--r--lisp/ffap.el4
-rw-r--r--lisp/filecache.el3
-rw-r--r--lisp/fileloop.el8
-rw-r--r--lisp/files-x.el19
-rw-r--r--lisp/files.el87
-rw-r--r--lisp/format.el8
-rw-r--r--lisp/frame.el6
-rw-r--r--lisp/gnus/gnus-agent.el2
-rw-r--r--lisp/gnus/gnus-cache.el2
-rw-r--r--lisp/gnus/gnus-cloud.el7
-rw-r--r--lisp/gnus/gnus-dbus.el70
-rw-r--r--lisp/gnus/gnus-group.el70
-rw-r--r--lisp/gnus/gnus-icalendar.el75
-rw-r--r--lisp/gnus/gnus-int.el9
-rw-r--r--lisp/gnus/gnus-msg.el122
-rw-r--r--lisp/gnus/gnus-registry.el13
-rw-r--r--lisp/gnus/gnus-srvr.el4
-rw-r--r--lisp/gnus/gnus-start.el5
-rw-r--r--lisp/gnus/gnus-sum.el308
-rw-r--r--lisp/gnus/gnus.el22
-rw-r--r--lisp/gnus/mm-decode.el5
-rw-r--r--lisp/gnus/mml.el2
-rw-r--r--lisp/gnus/nndiary.el2
-rw-r--r--lisp/gnus/nndoc.el1
-rw-r--r--lisp/gnus/nnfolder.el2
-rw-r--r--lisp/gnus/nnheader.el343
-rw-r--r--lisp/gnus/nnimap.el15
-rw-r--r--lisp/gnus/nnir.el857
-rw-r--r--lisp/gnus/nnmaildir.el2
-rw-r--r--lisp/gnus/nnml.el2
-rw-r--r--lisp/gnus/nnselect.el864
-rw-r--r--lisp/gnus/nnspool.el2
-rw-r--r--lisp/help-at-pt.el9
-rw-r--r--lisp/help-fns.el17
-rw-r--r--lisp/help.el12
-rw-r--r--lisp/hi-lock.el8
-rw-r--r--lisp/ibuf-ext.el26
-rw-r--r--lisp/icomplete.el23
-rw-r--r--lisp/image-mode.el13
-rw-r--r--lisp/image/image-converter.el24
-rw-r--r--lisp/imenu.el33
-rw-r--r--lisp/indent.el11
-rw-r--r--lisp/info-look.el11
-rw-r--r--lisp/info.el31
-rw-r--r--lisp/international/ccl.el8
-rw-r--r--lisp/international/kinsoku.el2
-rw-r--r--lisp/international/mule-cmds.el29
-rw-r--r--lisp/international/mule.el17
-rw-r--r--lisp/international/ogonek.el8
-rw-r--r--lisp/isearch.el2
-rw-r--r--lisp/jsonrpc.el7
-rw-r--r--lisp/language/cyrillic.el7
-rw-r--r--lisp/ldefs-boot.el3086
-rw-r--r--lisp/locate.el4
-rw-r--r--lisp/mail/mailabbrev.el5
-rw-r--r--lisp/mail/mailalias.el6
-rw-r--r--lisp/mail/mspools.el108
-rw-r--r--lisp/mail/qp.el4
-rw-r--r--lisp/mail/rmail.el22
-rw-r--r--lisp/mail/sendmail.el2
-rw-r--r--lisp/mail/smtpmail.el6
-rw-r--r--lisp/man.el7
-rw-r--r--lisp/minibuf-eldef.el22
-rw-r--r--lisp/minibuffer.el35
-rw-r--r--lisp/mouse.el3
-rw-r--r--lisp/mwheel.el72
-rw-r--r--lisp/net/browse-url.el2
-rw-r--r--lisp/net/dbus.el214
-rw-r--r--lisp/net/eudcb-macos-contacts.el3
-rw-r--r--lisp/net/eww.el39
-rw-r--r--lisp/net/rcirc.el2
-rw-r--r--lisp/net/shr.el25
-rw-r--r--lisp/net/tramp-cmds.el19
-rw-r--r--lisp/net/tramp-sh.el4
-rw-r--r--lisp/net/tramp.el200
-rw-r--r--lisp/pcmpl-gnu.el2
-rw-r--r--lisp/pcmpl-linux.el12
-rw-r--r--lisp/pcmpl-unix.el16
-rw-r--r--lisp/play/gamegrid.el7
-rw-r--r--lisp/play/life.el88
-rw-r--r--lisp/play/pong.el20
-rw-r--r--lisp/play/snake.el4
-rw-r--r--lisp/play/tetris.el2
-rw-r--r--lisp/progmodes/antlr-mode.el4
-rw-r--r--lisp/progmodes/cc-cmds.el13
-rw-r--r--lisp/progmodes/cc-mode.el6
-rw-r--r--lisp/progmodes/compile.el26
-rw-r--r--lisp/progmodes/cperl-mode.el71
-rw-r--r--lisp/progmodes/elisp-mode.el2
-rw-r--r--lisp/progmodes/flymake-cc.el8
-rw-r--r--lisp/progmodes/flymake.el2
-rw-r--r--lisp/progmodes/grep.el8
-rw-r--r--lisp/progmodes/idlwave.el10
-rw-r--r--lisp/progmodes/inf-lisp.el5
-rw-r--r--lisp/progmodes/make-mode.el2
-rw-r--r--lisp/progmodes/octave.el16
-rw-r--r--lisp/progmodes/project.el22
-rw-r--r--lisp/progmodes/python.el4
-rw-r--r--lisp/progmodes/ruby-mode.el16
-rw-r--r--lisp/progmodes/sh-script.el3
-rw-r--r--lisp/progmodes/tcl.el5
-rw-r--r--lisp/progmodes/vera-mode.el69
-rw-r--r--lisp/progmodes/vhdl-mode.el4
-rw-r--r--lisp/progmodes/xref.el19
-rw-r--r--lisp/progmodes/xscheme.el2
-rw-r--r--lisp/ps-print.el2
-rw-r--r--lisp/rect.el9
-rw-r--r--lisp/replace.el15
-rw-r--r--lisp/ses.el12
-rw-r--r--lisp/simple.el79
-rw-r--r--lisp/speedbar.el5
-rw-r--r--lisp/startup.el12
-rw-r--r--lisp/subr.el22
-rw-r--r--lisp/svg.el2
-rw-r--r--lisp/term.el63
-rw-r--r--lisp/textmodes/css-mode.el9
-rw-r--r--lisp/textmodes/flyspell.el49
-rw-r--r--lisp/textmodes/ispell.el93
-rw-r--r--lisp/textmodes/refer.el6
-rw-r--r--lisp/textmodes/reftex-ref.el4
-rw-r--r--lisp/textmodes/sgml-mode.el9
-rw-r--r--lisp/textmodes/table.el31
-rw-r--r--lisp/time.el29
-rw-r--r--lisp/vc/add-log.el2
-rw-r--r--lisp/vc/diff-mode.el7
-rw-r--r--lisp/vc/ediff-diff.el4
-rw-r--r--lisp/vc/ediff-mult.el8
-rw-r--r--lisp/vc/ediff-util.el29
-rw-r--r--lisp/vc/ediff.el101
-rw-r--r--lisp/vc/emerge.el5
-rw-r--r--lisp/vc/vc-annotate.el2
-rw-r--r--lisp/vc/vc-dir.el6
-rw-r--r--lisp/vc/vc-dispatcher.el3
-rw-r--r--lisp/vc/vc.el11
-rw-r--r--lisp/w32-fns.el3
-rw-r--r--lisp/wdired.el12
-rw-r--r--lisp/wid-edit.el18
-rw-r--r--lisp/woman.el13
-rw-r--r--m4/gnulib-comp.m49
-rw-r--r--m4/include_next.m418
-rw-r--r--m4/inttypes.m44
-rw-r--r--m4/sigdescr_np.m417
-rw-r--r--m4/std-gnu11.m44
-rw-r--r--m4/stdint.m418
-rw-r--r--m4/string_h.m489
-rw-r--r--m4/time_rz.m414
-rw-r--r--src/alloc.c247
-rw-r--r--src/callproc.c6
-rw-r--r--src/ccl.c2
-rw-r--r--src/character.c6
-rw-r--r--src/coding.c10
-rw-r--r--src/dbusbind.c18
-rw-r--r--src/dispextern.h6
-rw-r--r--src/editfns.c124
-rw-r--r--src/eval.c5
-rw-r--r--src/fileio.c16
-rw-r--r--src/font.c4
-rw-r--r--src/fringe.c6
-rw-r--r--src/ftfont.c4
-rw-r--r--src/gnutls.c9
-rw-r--r--src/gtkutil.c2
-rw-r--r--src/image.c222
-rw-r--r--src/keyboard.c8
-rw-r--r--src/keymap.c2
-rw-r--r--src/lisp.h18
-rw-r--r--src/minibuf.c2
-rw-r--r--src/nsfns.m139
-rw-r--r--src/nsmenu.m2
-rw-r--r--src/nsterm.h6
-rw-r--r--src/nsterm.m25
-rw-r--r--src/process.c5
-rw-r--r--src/regex-emacs.c61
-rw-r--r--src/syntax.c10
-rw-r--r--src/sysdep.c161
-rw-r--r--src/thread.c8
-rw-r--r--src/window.c6
-rw-r--r--src/xdisp.c229
-rw-r--r--src/xgselect.c42
-rw-r--r--src/xgselect.h2
-rw-r--r--test/data/themes/faces-test-dark-theme.el8
-rw-r--r--test/data/themes/faces-test-light-theme.el8
-rw-r--r--test/lib-src/emacsclient-tests.el2
-rw-r--r--test/lisp/calendar/icalendar-tests.el130
-rw-r--r--test/lisp/calendar/time-date-tests.el20
-rw-r--r--test/lisp/calendar/todo-mode-resources/todo-test-1.todo10
-rw-r--r--test/lisp/calendar/todo-mode-tests.el99
-rw-r--r--test/lisp/char-fold-tests.el8
-rw-r--r--test/lisp/custom-tests.el8
-rw-r--r--test/lisp/electric-tests.el8
-rw-r--r--test/lisp/emacs-lisp/bytecomp-tests.el16
-rw-r--r--test/lisp/emacs-lisp/hierarchy-tests.el4
-rw-r--r--test/lisp/emacs-lisp/rmc-tests.el8
-rw-r--r--test/lisp/emacs-lisp/rx-tests.el13
-rw-r--r--test/lisp/emacs-lisp/subr-x-tests.el8
-rw-r--r--test/lisp/emacs-lisp/text-property-search-tests.el8
-rw-r--r--test/lisp/emacs-lisp/unsafep-tests.el (renamed from lisp/emacs-lisp/tcover-unsafep.el)76
-rw-r--r--test/lisp/emacs-lisp/warnings-tests.el60
-rw-r--r--test/lisp/eshell/eshell-tests.el4
-rw-r--r--test/lisp/faces-tests.el8
-rw-r--r--test/lisp/gnus/gnus-icalendar-tests.el236
-rw-r--r--test/lisp/gnus/gnus-util-tests.el2
-rw-r--r--test/lisp/gnus/mml-sec-tests.el8
-rw-r--r--test/lisp/hi-lock-tests.el8
-rw-r--r--test/lisp/international/ccl-tests.el14
-rw-r--r--test/lisp/isearch-tests.el8
-rw-r--r--test/lisp/json-tests.el8
-rw-r--r--test/lisp/jsonrpc-tests.el8
-rw-r--r--test/lisp/mail/footnote-tests.el8
-rw-r--r--test/lisp/mail/rmailmm-tests.el (renamed from test/manual/rmailmm.el)60
-rw-r--r--test/lisp/minibuffer-tests.el8
-rw-r--r--test/lisp/mwheel-tests.el46
-rw-r--r--test/lisp/net/tramp-tests.el227
-rw-r--r--test/lisp/pcmpl-linux-resources/fs/ext4/.keep0
-rw-r--r--test/lisp/pcmpl-linux-resources/mtab11
-rw-r--r--test/lisp/pcmpl-linux-tests.el51
-rw-r--r--test/lisp/play/life-tests.el80
-rw-r--r--test/lisp/progmodes/compile-tests.el4
-rw-r--r--test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl52
-rw-r--r--test/lisp/progmodes/cperl-mode-tests.el129
-rw-r--r--test/lisp/progmodes/js-tests.el2
-rw-r--r--test/lisp/progmodes/subword-tests.el8
-rw-r--r--test/lisp/simple-tests.el8
-rw-r--r--test/lisp/sort-tests.el8
-rw-r--r--test/lisp/textmodes/bibtex-tests.el2
-rw-r--r--test/lisp/textmodes/conf-mode-tests.el6
-rw-r--r--test/lisp/textmodes/css-mode-tests.el8
-rw-r--r--test/lisp/url/url-handlers-test.el8
-rw-r--r--test/lisp/wdired-tests.el6
-rw-r--r--test/manual/cedet/cedet-utests.el12
-rw-r--r--test/manual/cedet/semantic-tests.el4
-rw-r--r--test/manual/image-size-tests.el6
-rw-r--r--test/manual/image-transforms-tests.el50
-rw-r--r--test/manual/scroll-tests.el6
-rw-r--r--test/src/charset-tests.el8
-rw-r--r--test/src/chartab-tests.el8
-rw-r--r--test/src/cmds-tests.el8
-rw-r--r--test/src/doc-tests.el8
-rw-r--r--test/src/editfns-tests.el12
-rw-r--r--test/src/fileio-tests.el5
-rw-r--r--test/src/fns-tests.el6
-rw-r--r--test/src/lread-tests.el6
-rw-r--r--test/src/print-tests.el6
-rw-r--r--test/src/process-tests.el8
-rw-r--r--test/src/timefns-tests.el8
349 files changed, 17554 insertions, 5733 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9a62137c168..f4e08d59dd0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,6 +40,33 @@ stages:
test-all:
# This tests also file monitor libraries inotify and inotifywatch.
stage: test
+ only:
+ changes:
+ - "Makefile.in"
+ - .gitlab-ci.yml
+ - aclocal.m4
+ - autogen.sh
+ - configure.ac
+ - lib/*.{h,c}
+ - lisp/*.el
+ - lisp/**/*.el
+ - src/*.{h,c}
+ - test/lisp/*.el
+ - test/lisp/**/*.el
+ - test/src/*.el
+ except:
+ changes:
+ # gfilemonitor, kqueue
+ - src/gfilenotify.c
+ - src/kqueue.c
+ # MS Windows
+ - lisp/w32*.el
+ - lisp/term/w32*.el
+ - src/w32*.{h,c}
+ # GNUstep
+ - lisp/term/ns-win.el
+ - src/ns*.{h,m}
+ - src/macfont.{h,m}
script:
- DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y -qq -o=Dpkg::Use-Pty=0 inotify-tools
- ./autogen.sh autoconf
@@ -65,3 +92,21 @@ test-filenotify-gio:
- ./configure --without-makeinfo --with-file-notification=gfile
- make bootstrap
- make -C test autorevert-tests filenotify-tests
+
+test-gnustep:
+ stage: test
+ # This tests the GNUstep build process
+ only:
+ changes:
+ - .gitlab-ci.yml
+ - configure.ac
+ - src/ns*.{h,m}
+ - src/macfont.{h,m}
+ - lisp/term/ns-win.el
+ - nextstep/**/*
+ script:
+ - DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y -qq -o=Dpkg::Use-Pty=0 gnustep-devel
+ - ./autogen.sh autoconf
+ - ./configure --without-makeinfo --with-ns
+ - make bootstrap
+ - make install
diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES
index ce9a44436d8..a40b4302723 100644
--- a/admin/CPP-DEFINES
+++ b/admin/CPP-DEFINES
@@ -124,9 +124,7 @@ HAVE_DECL_STRTOIMAX
HAVE_DECL_STRTOLL
HAVE_DECL_STRTOULL
HAVE_DECL_STRTOUMAX
-HAVE_DECL_SYS_SIGLIST
HAVE_DECL_TZNAME
-HAVE_DECL___SYS_SIGLIST
HAVE_DIALOGS
HAVE_DIFFTIME
HAVE_DUP2
diff --git a/admin/admin.el b/admin/admin.el
index 923f0100820..22d29673fb5 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -151,7 +151,7 @@ Root must be the root of an Emacs source tree."
(display-warning 'admin
"NEWS file contains empty sections - remove them?"))
(goto-char (point-min))
- (if (re-search-forward "^\\(\\+\\+\\+ *\\|--- *\\)$" nil t)
+ (if (re-search-forward "^\\(\\+\\+\\+ *$\\|--- *$\\|Temporary note:\\)" nil t)
(display-warning 'admin
"NEWS file still contains temporary markup.
Documentation changes might not have been completed!"))))
@@ -921,6 +921,54 @@ changes (in a non-trivial way). This function does not check for that."
'help-echo "Mouse-2: visit this definition"
:type 'cusver-xref)))))))
+
+;; Reminder message for open release-blocking bugs. This requires the
+;; GNU ELPA package `debbugs'.
+
+(defun reminder-for-release-blocking-bugs (version)
+ "Submit a reminder message for release-blocking bugs of Emacs VERSION."
+ (interactive
+ (list (progn
+ (require 'debbugs-gnu)
+ (completing-read
+ "Emacs release: "
+ (mapcar #'identity debbugs-gnu-emacs-blocking-reports)
+ nil t debbugs-gnu-emacs-current-release))))
+
+ (require 'debbugs-gnu)
+ (require 'reporter)
+
+ (when-let ((id (alist-get version debbugs-gnu-emacs-blocking-reports
+ nil nil #'string-equal))
+ (status-id (debbugs-get-status id))
+ (blockedby-ids (debbugs-get-attribute (car status-id) 'blockedby))
+ (blockedby-status
+ (apply #'debbugs-get-status (sort blockedby-ids #'<))))
+
+ (reporter-submit-bug-report
+ "<emacs-devel@gnu.org>" ; to-address
+ nil nil nil
+ (lambda () ; posthook
+ (goto-char (point-min))
+ (mail-position-on-field "subject")
+ (insert (format "Reminder: release-blocking bugs for Emacs %s (%s)"
+ version (format-time-string "%F" nil "UTC0")))
+ (mail-text)
+ (delete-region (point) (point-max))
+ (insert "
+The following bugs are regarded as release-blocking for Emacs " version ".
+People are encouraged to work on them with priority.\n\n")
+ (dolist (_ blockedby-status)
+ (unless (equal (debbugs-get-attribute _ 'pending) "done")
+ (insert (format "bug#%d %s\n"
+ (debbugs-get-attribute _ 'id)
+ (debbugs-get-attribute _ 'subject)))))
+ (insert "
+If you use the debbugs package from GNU ELPA, you can apply the
+following form to see all bugs which block a given release:
+
+ (debbugs-gnu-emacs-release-blocking-reports \"" version "\")\n")))))
+
(provide 'admin)
;;; admin.el ends here
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 3f32536a629..164300e1db6 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -40,7 +40,7 @@ GNULIB_MODULES='
manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime nstrftime
pathmax pipe2 pselect pthread_sigmask
qcopy-acl readlink readlinkat regex
- sig2str socklen stat-time std-gnu11 stdalign stddef stdio
+ sig2str sigdescr_np socklen stat-time std-gnu11 stdalign stddef stdio
stpcpy strnlen strtoimax symlink sys_stat sys_time
tempname time time_r time_rz timegm timer-time timespec-add timespec-sub
update-copyright unlocked-io utimensat
diff --git a/admin/notes/bug-triage b/admin/notes/bug-triage
index 87fb471c708..3d9a275c9d2 100644
--- a/admin/notes/bug-triage
+++ b/admin/notes/bug-triage
@@ -11,7 +11,11 @@ interface via org-mode.
The goal of this triage is to prune down the list of old bugs, closing
the ones that are not reproducible on the current release.
- 1. To start, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
+ 0. To start, check the most relevant bugs blocking a release by
+ calling debbugs-gnu-emacs-release-blocking-reports. If you want
+ to check this for another Emacs version but the next-to-be-released-one,
+ use the "C-u" prefix.
+ 1. After that, enter debbugs mode (either debbugs-gnu, debbugs-org, or via the
web browser), and accept the default list option of bugs that have severity
serious, important, or normal.
2. For each bug, we want to primarily make sure it is still
@@ -20,7 +24,7 @@ the ones that are not reproducible on the current release.
suggested checklist to follow for handling these bugs, along with
example replies. Closing, tagging, etc., are done
with debbugs control messages, which in debbugs-gnu is initiated
- with a "C".
+ with a "C" or "E".
[ ] Read the mail thread for the bug. Find out if anyone has
been able to reproduce this on the current release. If
someone has been able to, then your work is finished for this
@@ -87,7 +91,7 @@ necessary information for others to act on.
For each new bug, ask the following questions:
1. Is the bug report written in a way to be easy to reproduce (starts from
- emacs -Q, etc.)? If not, ask the reporter to try and reproduce it on an
+ "emacs -Q", etc.)? If not, ask the reporter to try and reproduce it on an
emacs without customization.
2. Is the bug report written against the latest emacs? If not, try to
reproduce on the latest version, and if it can't be reproduced, ask the
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index ac54f8de029..9eb65e1f864 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -33,7 +33,7 @@ By mailing commands to control@debbugs.gnu.org. Place commands at the
start of the message body, one per line.
severity 123 serious|important|normal|minor|wishlist
-tags 123 moreinfo|unreproducible|wontfix|patch
+tags 123 moreinfo|unreproducible|wontfix|patch|notabug
* More detailed information
@@ -185,7 +185,7 @@ Basically, reply only to the numbered bug address (and any individual
people's addresses). Do not send mail direct to bug-gnu-emacs or
emacs-pretest-bug unless you are reporting a new bug.
-** To close bug #123 (for example), send mail
+** To close bug#123 (for example), send mail
To: 123-done@debbugs.gnu.org
@@ -260,7 +260,7 @@ reopen 123
*** Bugs can be tagged in various ways (eg wontfix, patch, etc).
The available tags are:
-patch wontfix moreinfo unreproducible fixed notabug security confirmed
+patch wontfix moreinfo unreproducible fixed notabug help security confirmed easy
See https://debbugs.gnu.org/Developer#tags
The list of tags can be prefixed with +, - or =, meaning to add (the
default), remove, or reset the tags. E.g.:
@@ -290,10 +290,9 @@ limited, predefined set of normal tags are available (see above).
2) A usertag is associated with a specific user. This is normally
an email address (with an "@" sign and least 4 characters after the "@"),
-but on debbugs.gnu.org, the definition is less strict - anything with
-5 or more alphanumeric characters will work. For personal tags,
+but on debbugs.gnu.org, it can also be a package name. For personal tags,
using an email address is still recommended. Please only use the
-"emacs" user, or other short users, for "official" tags.
+"emacs" user for "official" tags.
You set usertags in the same way as tags, by talking to the control server.
One difference is that you can also specify the associated user.
@@ -307,7 +306,7 @@ a) In a control message:
user emacs # or email@example.com
usertags 1234 any-tag-you-like
-This will add a usertag "any-tag-you-like" to bug 1234. The tag will
+This will add a usertag "any-tag-you-like" to bug#1234. The tag will
be associated with the user "emacs". If you omit the first line,
the tag will be associated with your email address.
diff --git a/admin/release-process b/admin/release-process
index b8587e62047..73879b13f08 100644
--- a/admin/release-process
+++ b/admin/release-process
@@ -41,17 +41,17 @@ released in the next release cycle. From time to time, the master
branches merges bugfix commits from the "emacs-NN" branch.
See admin/gitmerge.el.
-* RELEASE-CRITICAL BUGS
+* RELEASE-BLOCKING BUGS
Emacs uses the "blocking" feature of Debbugs for bugs that need to be
addressed in the next release.
-Currently, bug#39200 is the tracking bug for release of 27.1 and
+Currently, bug#43018 is the tracking bug for release of 27.2 and
bug#39202 is the tracking bug for release 28.1. Say bug#123 needs
-to be fixed for Emacs 27.1. Send a message to control@debbugs.gnu.org
+to be fixed for Emacs 27.2. Send a message to control@debbugs.gnu.org
that says:
- block 39200 by 123
+ block 43018 by 123
Change "block" to "unblock" to remove a bug from the list. Closed
bugs are not listed as blockers, so you do not need to explicitly
@@ -59,9 +59,17 @@ unblock one that has been closed. You may need to force an update of
the tracking bug with ctrl-f5/shift-reload to see the latest version.
If you use the debbugs package from GNU ELPA, you can apply the
-following form to see all bugs which block a given release:
+following command to see all bugs which block a given release:
- (debbugs-gnu-emacs-release-blocking-reports "27.1")
+ (debbugs-gnu-emacs-release-blocking-reports "27.2")
+
+The following command from admin/admin.el sends a reminder message
+about release-blocking bugs to the <emacs-devel@gnu.org> mailing list:
+
+ (reminder-for-release-blocking-bugs "27.2")
+
+It is recommended to send this reminder message once a month. Once the
+pretest has started, a reminder message once a week is appropriate.
* TO BE DONE SHORTLY BEFORE RELEASE
diff --git a/build-aux/config.guess b/build-aux/config.guess
index e94095c5fbe..9aff91cfd03 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -2,7 +2,7 @@
# Attempt to guess a canonical system name.
# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2020-07-12'
+timestamp='2020-08-17'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -404,7 +404,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
@@ -544,10 +544,10 @@ EOF
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
then
echo m88k-dg-dgux"$UNAME_RELEASE"
else
@@ -580,7 +580,7 @@ EOF
echo i386-ibm-aix
exit ;;
ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
+ if test -x /usr/bin/oslevel ; then
IBM_REV=`/usr/bin/oslevel`
else
IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
@@ -620,7 +620,7 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/lslpp ] ; then
+ if test -x /usr/bin/lslpp ; then
IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
@@ -655,7 +655,7 @@ EOF
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
+ if test -x /usr/bin/getconf; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
case "$sc_cpu_version" in
@@ -669,7 +669,7 @@ EOF
esac ;;
esac
fi
- if [ "$HP_ARCH" = "" ]; then
+ if test "$HP_ARCH" = ""; then
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
@@ -708,7 +708,7 @@ EOF
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ "$HP_ARCH" = hppa2.0w ]
+ if test "$HP_ARCH" = hppa2.0w
then
set_cc_for_build
@@ -782,7 +782,7 @@ EOF
echo hppa1.0-hp-osf
exit ;;
i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
+ if test -x /usr/sbin/sysversion ; then
echo "$UNAME_MACHINE"-unknown-osf1mk
else
echo "$UNAME_MACHINE"-unknown-osf1
@@ -1097,7 +1097,7 @@ EOF
x86_64:Linux:*:*)
set_cc_for_build
LIBCABI=$LIBC
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_X32 >/dev/null
@@ -1294,7 +1294,7 @@ EOF
echo mips-sony-newsos6
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
+ if test -d /usr/nec; then
echo mips-nec-sysv"$UNAME_RELEASE"
else
echo mips-unknown-sysv"$UNAME_RELEASE"
@@ -1359,7 +1359,7 @@ EOF
else
set_cc_for_build
fi
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 3d9a8dc3d5a..0753e308458 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -2,7 +2,7 @@
# Configuration validation subroutine script.
# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2020-07-10'
+timestamp='2020-08-17'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -1278,7 +1278,7 @@ esac
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x$basic_os != x ]
+if test x$basic_os != x
then
# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
diff --git a/configure.ac b/configure.ac
index ace1085284e..0bcff587e8a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -463,6 +463,7 @@ OPTION_DEFAULT_ON([m17n-flt],[don't use m17n-flt for text shaping])
OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif/Xaw3d/GTK toolkit scroll bars])
OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
OPTION_DEFAULT_ON([xim],[at runtime, default X11 XIM to off])
+OPTION_DEFAULT_ON([xdbe],[don't use X11 double buffering support])
AC_ARG_WITH([ns],[AS_HELP_STRING([--with-ns],
[use Nextstep (macOS Cocoa or GNUstep) windowing system.
On by default on macOS.])],[],[with_ns=maybe])
@@ -1772,13 +1773,6 @@ dnl On Solaris 8 there's a compilation warning for term.h because
dnl it doesn't define 'bool'.
AC_CHECK_HEADERS(term.h, , , -)
AC_HEADER_TIME
-AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>
- ]])
-if test $ac_cv_have_decl_sys_siglist != yes; then
- # For Tru64, at least:
- AC_CHECK_DECLS([__sys_siglist], [], [], [[#include <signal.h>
- ]])
-fi
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS_ONCE(sys/socket.h)
@@ -1906,7 +1900,7 @@ tmp_CPPFLAGS="$CPPFLAGS"
tmp_CFLAGS="$CFLAGS"
CPPFLAGS="$CPPFLAGS -x objective-c"
CFLAGS="$CFLAGS -x objective-c"
-GNU_OBJC_CFLAGS=
+GNU_OBJC_CFLAGS=""
LIBS_GNUSTEP=
if test "${with_ns}" != no; then
# macfont.o requires macuvs.h which is absent after 'make extraclean',
@@ -1922,7 +1916,7 @@ if test "${with_ns}" != no; then
elif flags=$( (gnustep-config --objc-flags) 2>/dev/null); then
NS_IMPL_GNUSTEP=yes
NS_GNUSTEP_CONFIG=yes
- GNU_OBJC_CFLAGS=$flags
+ GNU_OBJC_CFLAGS="$flags"
LIBS_GNUSTEP=$(gnustep-config --gui-libs) || exit
elif test -f $GNUSTEP_CONFIG_FILE; then
NS_IMPL_GNUSTEP=yes
@@ -1967,7 +1961,7 @@ fail;
dnl _NATIVE_OBJC_EXCEPTIONS is used by the GNUstep headers.
AC_DEFINE(_NATIVE_OBJC_EXCEPTIONS, 1,
[Define if GNUstep uses ObjC exceptions.])
- GNU_OBJC_CFLAGS="-fobjc-exceptions"
+ GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fobjc-exceptions"
fi
fi
if test $NS_IMPL_GNUSTEP = yes; then
@@ -2072,6 +2066,20 @@ if test "${HAVE_NS}" = yes; then
AC_DEFINE(NATIVE_OBJC_INSTANCETYPE, 1,
[Define if ObjC compiler supports instancetype natively.])
fi
+
+ AC_CACHE_CHECK(
+ [if the Objective C compiler defaults to C99],
+ [emacs_cv_objc_c99],
+ [AC_LANG_PUSH([Objective C])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([], [[for (int i = 0;;);]])],
+ emacs_cv_objc_c99=yes,
+ emacs_cv_objc_c99=no)
+ AC_LANG_POP([Objective C])])
+
+ if test x$emacs_cv_objc_c99 = xno ; then
+ GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -std=c99"
+ fi
fi
HAVE_W32=no
@@ -4030,11 +4038,13 @@ AC_SUBST(XFIXES_LIBS)
### Use Xdbe (-lXdbe) if available
HAVE_XDBE=no
if test "${HAVE_X11}" = "yes"; then
- AC_CHECK_HEADER(X11/extensions/Xdbe.h,
- [AC_CHECK_LIB(Xext, XdbeAllocateBackBufferName, HAVE_XDBE=yes)],
- [],
- [#include <X11/Xlib.h>
- ])
+ if test "${with_xdbe}" != "no"; then
+ AC_CHECK_HEADER(X11/extensions/Xdbe.h,
+ [AC_CHECK_LIB(Xext, XdbeAllocateBackBufferName, HAVE_XDBE=yes)],
+ [],
+ [#include <X11/Xlib.h>
+ ])
+ fi
if test $HAVE_XDBE = yes; then
XDBE_LIBS=-lXext
fi
diff --git a/debian/changelog b/debian/changelog
index 99983a9dd5f..bd52eab8a40 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+emacs-snapshot (28~git20200906.1) unstable; urgency=medium
+
+ * Package git snapshot.
+
+ -- Sean Whitton <spwhitton@spwhitton.name> Sun, 13 Sep 2020 14:36:27 -0700
+
emacs-snapshot (28~git20200820.1~bpo10+1~athena1) buster-backports; urgency=medium
* Rebuild for athena's apt repository.
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index de449e31c37..19aaca962da 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -79,6 +79,29 @@ The former lists all the files with extension @samp{.el} in directory
@samp{foo}. The latter lists the files with extension @samp{.el}
in all the subdirectories of @samp{foo}.
+@cindex globstar, in Dired
+On Posix systems, when the system shell supports @dfn{globstar}, a
+recursive globbing feature, and that support is enabled, you can use
+recursive globbing in Dired:
+
+@example
+C-x d ~/foo/**/*.el @key{RET}
+@end example
+
+This command produces a directory listing with all the files with
+extension @samp{.el}, descending recursively in all the subdirectories
+of @samp{foo}. Note that there are small differences in the
+implementation of globstar between different shells. Check your shell
+manual to know the expected behavior.
+
+@vindex dired-maybe-use-globstar
+@vindex dired-enable-globstar-in-shell
+If the shell supports globstar, but that support is disabled by
+default, you can still let Dired use this feature by customizing
+@code{dired-maybe-use-globstar} to a non-@code{nil} value; then Dired
+will enable globstar for those shells for which it knows how (see
+@code{dired-enable-globstar-in-shell} for the list of those shells).
+
The usual history and completion commands can be used in the minibuffer;
in particular, @kbd{M-n} puts the name of the visited file (if any) in
the minibuffer (@pxref{Minibuffer History}).
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 75ef520d62a..e7b8745a044 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1808,6 +1808,29 @@ logical lines, so having a fringe indicator for each wrapped line
would be visually distracting. You can change this by customizing the
variable @code{visual-line-fringe-indicators}.
+@vindex word-wrap-by-category
+@findex modify-category-entry
+@findex char-category-set
+@findex category-set-mnemonics
+ By default, Emacs only breaks lines after whitespace characters.
+That produces incorrect results when CJK and Latin text are mixed
+together (because CJK characters don't use whitespace to separate
+words). You can customize the option @code{word-wrap-by-category} to
+allow Emacs to break lines after any character with ``|'' category
+(@pxref{Categories,,, elisp, the Emacs Lisp Reference Manual}), which
+provides better support for CJK characters. Also, if this variable is
+set using Customize, Emacs automatically loads @file{kinsoku.el}.
+When @file{kinsoku.el} is loaded, Emacs respects kinsoku rules when
+breaking lines. That means characters with the ``>'' category don't
+appear at the beginning of a line (e.g., U+FF0C FULLWIDTH COMMA), and
+characters with the ``<'' category don't appear at the end of a line
+(e.g., U+300A LEFT DOUBLE ANGLE BRACKET). You can view the category
+set of a character using the commands @code{char-category-set} and
+@code{category-set-mnemonics}, or by typing @kbd{C-u C-x =} with point
+on the character and looking at the ``category'' section in the
+report. You can add categories to a character using the command
+@code{modify-category-entry}.
+
@node Display Custom
@section Customization of Display
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 5b6b7b7e93e..6aed7bd92a5 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -1285,11 +1285,12 @@ programmer, but if you are not interested in customizing, you can
ignore the customization hints.
This is primarily a reference manual, but can also be used as a
-primer. If you are new to Emacs, we recommend you start with
-the integrated, learn-by-doing tutorial, before reading the manual. To
-run the tutorial, start Emacs and type @kbd{C-h t}. The tutorial
-describes commands, tells you when to try them, and explains the
-results. The tutorial is available in several languages.
+primer. If you are new to Emacs, we recommend you start with the
+integrated, learn-by-doing tutorial, before reading the manual. To
+run the tutorial, start Emacs and type @kbd{C-h t} (which is ``control
+h and then t''). The tutorial describes commands, tells you when to
+try them, and explains the results. The tutorial is available in
+several languages.
On first reading, just skim chapters 1 and 2, which describe the
notational conventions of the manual and the general appearance of the
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index 6633848716e..db77ae4ec26 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -277,6 +277,10 @@ Check and correct spelling in the region.
@item M-x ispell-message
Check and correct spelling in a draft mail message, excluding cited
material.
+@item M-x ispell-comments-and-strings
+Check and correct spelling of comments and strings in the buffer or region.
+@item M-x ispell-comment-or-string-at-point
+Check the comment or string at point.
@item M-x ispell-change-dictionary @key{RET} @var{dict} @key{RET}
Restart the spell-checker process, using @var{dict} as the dictionary.
@item M-x ispell-kill-ispell
@@ -304,6 +308,8 @@ region; @pxref{Disabled Transient Mark}.)
@findex ispell
@findex ispell-buffer
@findex ispell-region
+@findex ispell-comments-and-strings
+@findex ispell-comment-or-string-at-point
@cindex spell-checking the active region
Similarly, the command @kbd{M-x ispell} performs spell-checking in
the region if one is active, or in the entire buffer otherwise. The
@@ -312,7 +318,10 @@ explicitly perform spell-checking on the entire buffer or the region
respectively. To check spelling in an email message you are writing,
use @w{@kbd{M-x ispell-message}}; that command checks the whole buffer,
except for material that is indented or appears to be cited from other
-messages. @xref{Sending Mail}.
+messages. @xref{Sending Mail}. When dealing with source code, you
+can use @kbd{M-x ispell-comments-and-strings} or @w{@kbd{M-x
+ispell-comment-or-string-at-point}} to check only comments or string
+literals.
When one of these commands encounters what appears to be an
incorrect word, it asks you what to do. It usually displays a list of
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 9f550b49874..a9b0da5aff6 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1693,6 +1693,12 @@ Start Eshell in the current project's root directory
@item C-x p c
Run compilation in the current project's root directory
(@code{project-compile}).
+@item C-x p !
+Run shell command in the current project's root directory
+(@code{project-shell-command}).
+@item C-x p &
+Run shell command asynchronously in the current project's root
+directory (@code{project-async-shell-command}).
@end table
Emacs provides commands for handling project files conveniently.
@@ -1770,6 +1776,14 @@ directory. @xref{Top,Eshell,Eshell, eshell, Eshell: The Emacs Shell}.
The command @kbd{C-x p c} (@code{project-compile}) runs compilation
(@pxref{Compilation}) in the current project's root directory.
+@findex project-shell-command
+ The command @kbd{C-x p !} (@code{project-shell-command}) runs
+@code{shell-command} in the current project's root directory.
+
+@findex project-async-shell-command
+ The command @kbd{C-x p &} (@code{project-async-shell-command}) runs
+@code{async-shell-command} in the current project's root directory.
+
@node Project Buffer Commands
@subsection Project Commands That Operate on Buffers
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index f6dd77a3d96..9aefe1da17a 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -3997,7 +3997,7 @@ looks like this:
@smallexample
@group
(if (equal characteristic "fierce")
- (message "It is a tiger!")))
+ (message "It is a tiger!"))
@end group
@end smallexample
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index 4ed1a10fcf6..379279575ca 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -414,10 +414,16 @@ version that the caller should consider deleting now.
@end smallexample
@end defun
-@c Emacs 19 feature
+@defun file-backup-file-names filename
+This function returns a list of all the backup file names for
+@var{filename}, or @code{nil} if there are none. The files are sorted
+by modification time, descending, so that the most recent files are
+first.
+@end defun
+
@defun file-newest-backup filename
-This function returns the name of the most recent backup file for
-@var{filename}, or @code{nil} if that file has no backup files.
+This function returns the first element of the list returned by
+@code{file-backup-file-names}.
Some file comparison commands use this function so that they can
automatically compare a file with its most recent backup.
@@ -460,6 +466,32 @@ Auto Save mode is enabled if @code{buffer-auto-save-file-name} is
non-@code{nil} and @code{buffer-saved-size} (see below) is non-zero.
@end deffn
+@defvar auto-save-file-name-transforms
+This variable lists transforms to apply to buffer's file name before
+making the auto-save file name.
+
+Each transform is a list of the form @w{@code{(@var{regexp}
+@var{replacement} [@var{uniquify}])}}. @var{regexp} is a regular
+expression to match against the file name; if it matches,
+@code{replace-match} is used to replace the matching part with
+@var{replacement}. If the optional element @var{uniquify} is non-nil,
+the auto-save file name is constructed by concatenating the directory
+part of the transformed file name with the buffer's file name in which
+all directory separators were changed to @samp{!} to prevent clashes.
+(This will not work correctly if your filesystem truncates the
+resulting name.)
+
+All the transforms in the list are tried, in the order they are listed.
+When one transform applies, its result is final;
+no further transforms are tried.
+
+The default value is set up to put the auto-save files of remote files
+into the temporary directory (@pxref{Unique File Names}).
+
+On MS-DOS filesystems without long names this variable is always
+ignored.
+@end defvar
+
@defun auto-save-file-name-p filename
This function returns a non-@code{nil} value if @var{filename} is a
string that could be the name of an auto-save file. It assumes
@@ -481,21 +513,6 @@ name. The argument @var{filename} should not contain a directory part.
@result{} nil
@end group
@end example
-
-The standard definition of this function is as follows:
-
-@example
-@group
-(defun auto-save-file-name-p (filename)
- "Return non-nil if FILENAME can be yielded by..."
- (string-match "^#.*#$" filename))
-@end group
-@end example
-
-This function exists so that you can customize it if you wish to
-change the naming convention for auto-save files. If you redefine it,
-be sure to redefine the function @code{make-auto-save-file-name}
-correspondingly.
@end defun
@defun make-auto-save-file-name
@@ -511,31 +528,6 @@ function should check that variable first.
@result{} "/xcssun/users/rms/lewis/#backups.texi#"
@end group
@end example
-
-Here is a simplified version of the standard definition of this
-function:
-
-@example
-@group
-(defun make-auto-save-file-name ()
- "Return file name to use for auto-saves \
-of current buffer.."
- (if buffer-file-name
-@end group
-@group
- (concat
- (file-name-directory buffer-file-name)
- "#"
- (file-name-nondirectory buffer-file-name)
- "#")
- (expand-file-name
- (concat "#%" (buffer-name) "#"))))
-@end group
-@end example
-
-This exists as a separate function so that you can redefine it to
-customize the naming convention for auto-save files. Be sure to
-change @code{auto-save-file-name-p} in a corresponding way.
@end defun
@defopt auto-save-visited-file-name
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 2a72276bc56..c35444f5817 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -358,6 +358,10 @@ This is meaningful only for certain types, currently including
@code{hook}, @code{plist} and @code{alist}. See the definition of the
individual types for a description of how to use @code{:options}.
+Re-evaluating a @code{defcustom} form with a different @code{:options}
+value does not clear the values added by previous evaluations, or
+added by calls to @code{custom-add-frequent-value} (see below).
+
@item :set @var{setfunction}
@kindex set@r{, @code{defcustom} keyword}
Specify @var{setfunction} as the way to change the value of this
@@ -485,6 +489,10 @@ list of reasonable values.
The precise effect of adding a value depends on the customization type
of @var{symbol}.
+
+Since evaluating a @code{defcustom} form does not clear values added
+previously, Lisp programs can use this function to add values for user
+options not yet defined.
@end defun
Internally, @code{defcustom} uses the symbol property
@@ -1189,6 +1197,13 @@ current value is valid for the widget. Otherwise, it should return
the widget containing the invalid data, and set that widget's
@code{:error} property to a string explaining the error.
+@item :type-error @var{string}
+@kindex type-error@r{, customization keyword}
+@var{string} should be a string that describes why a value doesn't
+match the type, as determined by the @code{:match} function. When the
+@code{:match} function returns @code{nil}, the widget's @code{:error}
+property will be set to @var{string}.
+
@ignore
@item :indent @var{columns}
Indent this item by @var{columns} columns. The indentation is used for
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 2898cb4d2b4..26b212d05eb 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -2163,15 +2163,24 @@ the backquote (@pxref{Backquote}), but quotes code and accepts only
@end defmac
@defmac inline-letevals (bindings@dots{}) body@dots{}
-This is similar to @code{let} (@pxref{Local Variables}): it sets up
-local variables as specified by @var{bindings}, and then evaluates
-@var{body} with those bindings in effect. Each element of
-@var{bindings} should be either a symbol or a list of the form
-@w{@code{(@var{var} @var{expr})}}; the result is to evaluate
-@var{expr} and bind @var{var} to the result. The tail of
-@var{bindings} can be either @code{nil} or a symbol which should hold
-a list of arguments, in which case each argument is evaluated, and the
-symbol is bound to the resulting list.
+This provides a convenient way to ensure that the arguments to an
+inlined function are evaluated exactly once, as well as to create
+local variables.
+
+It's similar to @code{let} (@pxref{Local Variables}): It sets up local
+variables as specified by @var{bindings}, and then evaluates
+@var{body} with those bindings in effect.
+
+Each element of @var{bindings} should be either a symbol or a list of
+the form @w{@code{(@var{var} @var{expr})}}; the result is to evaluate
+@var{expr} and bind @var{var} to the result. However, when an element
+of @var{bindings} is just a symbol @var{var}, the result of evaluating
+@var{var} is re-bound to @var{var} (which is quite different from the
+way @code{let} works).
+
+The tail of @var{bindings} can be either @code{nil} or a symbol which
+should hold a list of arguments, in which case each argument is
+evaluated, and the symbol is bound to the resulting list.
@end defmac
@defmac inline-const-p expression
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index 9b3c4fcb23d..d4505d5c3ff 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -220,7 +220,8 @@ in the *Help* buffer."
@group
;; @r{Display the data.}
- (help-setup-xref (list 'describe-symbols pattern) (interactive-p))
+ (help-setup-xref (list 'describe-symbols pattern)
+ (called-interactively-p 'interactive))
(with-help-window (help-buffer)
(mapcar describe-func (sort sym-list 'string<)))))
@end group
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 2488fb37529..cca06c70a51 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -411,6 +411,37 @@ following bindings, in addition to those of @code{minibuffer-local-map}:
@end table
@end defvar
+@vindex minibuffer-default-prompt-format
+@defun format-prompt prompt default &rest format-args
+Format @var{prompt} with default value @var{default} according to the
+@code{minibuffer-default-prompt-format} variable.
+
+@code{minibuffer-default-prompt-format} is a format string (defaulting
+to @samp{" (default %s)"} that says how the ``default'' bit in prompts
+like @samp{"Local filename (default somefile): "} are to be formatted.
+
+To allow the users to customize how this is displayed, code that
+prompts the user for a value (and has a default) should look something
+along the lines of this code snippet:
+
+@lisp
+(read-file-name
+ (format-prompt "Local filename" file)
+ nil file)
+@end lisp
+
+If @var{format-args} is @code{nil}, @var{prompt} is used as a literal
+string. If @var{format-args} is non-@code{nil}, @var{prompt} is used
+as a format control string, and @var{prompt} and @var{format-args} are
+passed to @code{format} (@pxref{Formatting Strings}).
+
+@code{minibuffer-default-prompt-format} can be @samp{""}, in which
+case no default values are displayed.
+
+If @var{default} is @code{nil}, there is no default value, and
+therefore no ``default value'' string is included in the result value.
+@end defun
+
@node Object from Minibuffer
@section Reading Lisp Objects with the Minibuffer
@cindex minibuffer input, reading lisp objects
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 33a07c9fb4d..fa5f18e2023 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -2039,7 +2039,7 @@ be useful for Shell mode (in reality, Shell mode does not set
"%n"
")%]--"
@group
- '(which-func-mode ("" which-func-format "--"))
+ '(which-function-mode ("" which-func-format "--"))
'(line-number-mode "L%l--")
'(column-number-mode "C%c--")
'(-3 "%p")))
@@ -2047,8 +2047,8 @@ be useful for Shell mode (in reality, Shell mode does not set
@end example
@noindent
-(The variables @code{line-number-mode}, @code{column-number-mode}
-and @code{which-func-mode} enable particular minor modes; as usual,
+(The variables @code{line-number-mode}, @code{column-number-mode} and
+@code{which-function-mode} enable particular minor modes; as usual,
these variable names are also the minor mode command names.)
@node Mode Line Variables
@@ -2190,7 +2190,7 @@ enabled separately in each buffer.
@defvar global-mode-string
This variable holds a mode line construct that, by default, appears in
-the mode line just after the @code{which-func-mode} minor mode if set,
+the mode line just after the @code{which-function-mode} minor mode if set,
else after @code{mode-line-modes}. The command @code{display-time} sets
@code{global-mode-string} to refer to the variable
@code{display-time-string}, which holds a string containing the time and
@@ -2219,7 +2219,7 @@ specifies addition of text properties.
" "
@group
mode-line-modes
- (which-func-mode ("" which-func-format "--"))
+ (which-function-mode ("" which-func-format "--"))
(global-mode-string ("--" global-mode-string))
"-%-")
@end group
@@ -2327,6 +2327,10 @@ read-only buffer. @xref{Buffer Modification}.
@item %&
@samp{*} if the buffer is modified, and @samp{-} otherwise.
+@item %@@
+@samp{@@} if the buffer's @code{default-directory} (@pxref{File Name
+Expansion}) is on a remote machine, and @samp{-} otherwise.
+
@item %[
An indication of the depth of recursive editing levels (not counting
minibuffer levels): one @samp{[} for each editing level.
@@ -2344,16 +2348,13 @@ The character @samp{%}---this is how to include a literal @samp{%} in a
string in which @code{%}-constructs are allowed.
@end table
-The following two @code{%}-constructs are still supported, but they are
-obsolete, since you can get the same results with the variables
-@code{mode-name} and @code{global-mode-string}.
+The following @code{%}-construct is still supported, but it is
+obsolete, since you can get the same result using the variable
+@code{mode-name}.
@table @code
@item %m
The value of @code{mode-name}.
-
-@item %M
-The value of @code{global-mode-string}.
@end table
@node Properties in Mode
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 91419702ca1..751adcff5a8 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -332,6 +332,8 @@ if provided; otherwise @var{n} defaults to @code{nil}.
@node Text Lines
@subsection Motion by Text Lines
@cindex lines
+@cindex logical lines, moving by
+@cindex physical lines, moving by
Text lines are portions of the buffer delimited by newline characters,
which are regarded as part of the previous line. The first text line
@@ -518,6 +520,7 @@ beginning or end of a line.
@node Screen Lines
@subsection Motion by Screen Lines
@cindex screen lines, moving by
+@cindex visual lines, moving by
The line functions in the previous section count text lines, delimited
only by newline characters. By contrast, these functions count screen
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 0c3813ff1d0..3a4cf6b5723 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -5154,6 +5154,11 @@ Utility functions:
@item dom-pp @var{dom} &optional @var{remove-empty}
Pretty-print @var{dom} at point. If @var{remove-empty}, don't print
textual nodes that just contain white-space.
+
+@item dom-print @var{dom} &optional @var{pretty} @var{xml}
+Print @var{dom} at point. If @var{xml} is non-@code{nil}, print as
+@acronym{XML}; otherwise, print as @acronym{HTML}. If @var{pretty} is
+non-@code{nil}, indent the @acronym{HTML}/@acronym{XML} logically.
@end table
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index abcd4bbd0f7..94c8c88796f 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -2585,8 +2585,11 @@ implemented this way:
(macroexp-let2* nil ((start from) (end to))
(funcall do `(substring ,getter ,start ,end)
(lambda (v)
- (funcall setter `(cl--set-substring
- ,getter ,start ,end ,v))))))))
+ (macroexp-let2 nil v v
+ `(progn
+ ,(funcall setter `(cl--set-substring
+ ,getter ,start ,end ,v))
+ ,v))))))))
@end example
@end defmac
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 61dc62e7711..f8fcb642901 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -227,6 +227,11 @@ machine YOURMACHINE login YOU password SMTPPASSWORD port 433
machine YOURMACHINE login YOU password GENERALPASSWORD
@end example
+If you wish to specify a particular SMTP authentication method to use
+with a machine, you can use the @code{smtp-auth} keyword.
+@xref{Authentication,, Authentication, smtpmail, Emacs SMTP Library},
+for available methods.
+
For url-auth authentication (HTTP/HTTPS), you need to put this in your
netrc file:
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 10bbf8ff09f..adc233d99dd 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -1024,9 +1024,7 @@ These key sequences are not bound in AWK Mode, which doesn't have
preprocessor statements.
@item @kbd{M-x c-backward-into-nomenclature}
-@itemx @kbd{M-x c-forward-into-nomenclature}
@findex c-backward-into-nomenclature
-@findex c-forward-into-nomenclature
@findex backward-into-nomenclature @r{(c-)}
@findex forward-into-nomenclature @r{(c-)}
A popular programming style, especially for object-oriented languages
diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi
index 167d2bd5ac1..a68cb26a3e5 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -1462,7 +1462,15 @@ cons cell, @var{handler} can return this object directly, instead of
returning a list containing the object.
If @var{handler} returns a reply message with an empty argument list,
-@var{handler} must return the symbol @code{:ignore}.
+@var{handler} must return the symbol @code{:ignore} in order
+to distinguish it from @code{nil} (the boolean false).
+
+If @var{handler} detects an error, it shall return the list
+@code{(:error @var{error-name} @var{error-message)}}.
+@var{error-name} is a namespaced string which characterizes the error
+type, and @var{error-message} is a free text string. Alternatively,
+any Emacs signal @code{dbus-error} in @var{handler} raises a D-Bus
+error message with the error name @samp{org.freedesktop.DBus.Error.Failed}.
When @var{dont-register-service} is non-@code{nil}, the known name
@var{service} is not registered. This means that other D-Bus clients
@@ -1512,17 +1520,20 @@ could use the command line tool @code{dbus-send} in a shell:
boolean true
@end example
-You can indicate an error by raising the Emacs signal
-@code{dbus-error}. The handler above could be changed like this:
+You can indicate an error by returning an @code{:error} list reply, or
+by raising the Emacs signal @code{dbus-error}. The handler above
+could be changed like this:
@lisp
(defun my-dbus-method-handler (&rest args)
- (unless (and (= (length args) 1) (stringp (car args)))
- (signal 'dbus-error (list (format "Wrong argument list: %S" args))))
- (condition-case err
- (find-file (car args))
- (error (signal 'dbus-error (cdr err))))
- t)
+ (if (not (and (= (length args) 1) (stringp (car args))))
+ (list :error
+ "org.freedesktop.TextEditor.Error.InvalidArgs"
+ (format "Wrong argument list: %S" args))
+ (condition-case err
+ (find-file (car args))
+ (error (signal 'dbus-error (cdr err))))
+ t))
@end lisp
The test then runs
@@ -1534,9 +1545,20 @@ The test then runs
"org.freedesktop.TextEditor.OpenFile" \
string:"/etc/hosts" string:"/etc/passwd"
-@print{} Error org.freedesktop.DBus.Error.Failed:
+@print{} Error org.freedesktop.TextEditor.Error.InvalidArgs:
Wrong argument list: ("/etc/hosts" "/etc/passwd")
@end example
+
+@example
+# dbus-send --session --print-reply \
+ --dest="org.freedesktop.TextEditor" \
+ "/org/freedesktop/TextEditor" \
+ "org.freedesktop.TextEditor.OpenFile" \
+ string:"/etc/crypttab"
+
+@print{} Error org.freedesktop.DBus.Error.Failed:
+ D-Bus error: "File is not readable", "/etc/crypttab"
+@end example
@end defun
@defun dbus-register-property bus service path interface property access value &optional emits-signal dont-register-service
@@ -1556,14 +1578,16 @@ discussion of @var{dont-register-service} below).
@var{property} is the name of the property of @var{interface}.
@var{access} indicates, whether the property can be changed by other
-services via D-Bus. It must be either the symbol @code{:read} or
-@code{:readwrite}. @var{value} is the initial value of the property,
-it can be of any valid type (@xref{dbus-call-method}, for details).
+services via D-Bus. It must be either the symbol @code{:read},
+@code{:write} or @code{:readwrite}. @var{value} is the initial value
+of the property, it can be of any valid type (@xref{dbus-call-method},
+for details).
If @var{property} already exists on @var{path}, it will be
overwritten. For properties with access type @code{:read} this is the
only way to change their values. Properties with access type
-@code{:readwrite} can be changed by @code{dbus-set-property}.
+@code{:write} or @code{:readwrite} can be changed by
+@code{dbus-set-property}.
The interface @samp{org.freedesktop.DBus.Properties} is added to
@var{path}, including a default handler for the @samp{Get},
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index 4ead6032b74..69a8512f175 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -166,15 +166,11 @@ your own local BBDB (@pxref{Creating BBDB Records})
@node macOS Contacts
@section macOS Contacts
-macOS Contacts is the rolodex-like application that ships with the
-macOS operating system@footnote{Apple have changed the names of their
-operating system and some applications over time. macOS used to be
-called Mac OS X in the past, and the Contacts application was
-previously called Address Book.}.
-
-EUDC considers macOS Contacts as a directory server back end just like
-LDAP, though the macOS Contacts application always resides locally on
-your machine.
+This EUDC back end considers macOS Contacts as a directory server just
+like LDAP, though the macOS Contacts application always runs locally
+on your machine. The Contacts application was previously called
+Address Book; the EUDC macOS Contacts back end also works on those
+older versions.
@node Installation
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 332926a6859..789b1dea52a 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -641,7 +641,7 @@ Select Methods
* Getting Mail:: Reading your personal mail with Gnus.
* Browsing the Web:: Getting messages from a plethora of Web sources.
* Other Sources:: Reading directories, files.
-* Combined Groups:: Combining groups into one group.
+* Virtual Groups:: Combining articles from multiple sources.
* Email Based Diary:: Using mails to manage diary events in Gnus.
* Gnus Unplugged:: Reading news and mail offline.
@@ -716,9 +716,10 @@ Document Groups
* Document Server Internals:: How to add your own document types.
-Combined Groups
+Virtual Groups
-* Virtual Groups:: Combining articles from many groups.
+* Selection Groups:: Articles selected from many places.
+* Combined Groups:: Combining multiple groups.
Email Based Diary
@@ -828,6 +829,7 @@ Various
* Spam Package:: A package for filtering and processing spam.
* The Gnus Registry:: A package for tracking messages by Message-ID.
* The Gnus Cloud:: A package for synchronizing Gnus marks.
+* D-Bus Integration:: Closing Gnus servers on system sleep.
* Other modes:: Interaction with other modes.
* Various Various:: Things that are really various.
@@ -4966,6 +4968,15 @@ The address (from the @code{From} header). This works the same way as
the @code{a} spec.
@item L
Number of lines in the article.
+@item Z
+Retrieval Score Value (RSV) of the article; nil if not in an nnselect
+group.
+@item G
+Originating group name of the article; nil if not in an nnselect
+group.
+@item g
+Short form of the originating group name of the article; nil if not in
+an nnselect group.
@item c
Number of characters in the article. This specifier is not supported
in some methods (like nnfolder).
@@ -10406,12 +10417,20 @@ article (@code{gnus-summary-refer-references}).
@findex gnus-summary-refer-thread
@kindex A T @r{(Summary)}
Display the full thread where the current article appears
-(@code{gnus-summary-refer-thread}). This command has to fetch all the
-headers in the current group to work, so it usually takes a while. If
-you do it often, you may consider setting @code{gnus-fetch-old-headers}
-to @code{invisible} (@pxref{Filling In Threads}). This won't have any
-visible effects normally, but it'll make this command work a whole lot
-faster. Of course, it'll make group entry somewhat slow.
+(@code{gnus-summary-refer-thread}). By default this command looks for
+articles only in the current group. Some backends (currently only
+@code{nnimap}) know how to find articles in the thread directly. In
+other cases each header in the current group must be fetched and
+examined, so it usually takes a while. If you do it often, you may
+consider setting @code{gnus-fetch-old-headers} to @code{invisible}
+(@pxref{Filling In Threads}). This won't have any visible effects
+normally, but it'll make this command work a whole lot faster. Of
+course, it'll make group entry somewhat slow.
+
+@vindex gnus-refer-thread-use-search
+If @code{gnus-refer-thread-use-search} is non-nil then those backends
+that know how to find threads directly will search not just in the
+current group but all groups on the same server.
@vindex gnus-refer-thread-limit
The @code{gnus-refer-thread-limit} variable says how many old (i.e.,
@@ -10420,6 +10439,16 @@ fetch when doing this command. The default is 200. If @code{t}, all
the available headers will be fetched. This variable can be overridden
by giving the @kbd{A T} command a numerical prefix.
+@vindex gnus-refer-thread-limit-to-thread
+In most cases @code{gnus-refer-thread} adds any articles it finds to
+the current summary buffer. (When @code{gnus-refer-thread-use-search}
+is true and the initial referral starts from a summary buffer for a
+non-virtual group this may not be possible. In this case a new
+summary buffer is created holding a virtual group with the result of
+the thread search.) If @code{gnus-refer-thread-limit-to-thread} is
+non-nil then the summary buffer will be limited to articles in the
+thread.
+
@item M-^ (Summary)
@findex gnus-summary-refer-article
@kindex M-^ @r{(Summary)}
@@ -13261,7 +13290,7 @@ The different methods all have their peculiarities, of course.
* Getting Mail:: Reading your personal mail with Gnus.
* Browsing the Web:: Getting messages from a plethora of Web sources.
* Other Sources:: Reading directories, files.
-* Combined Groups:: Combining groups into one group.
+* Virtual Groups:: Combining articles and groups together.
* Email Based Diary:: Using mails to manage diary events in Gnus.
* Gnus Unplugged:: Reading news and mail offline.
@end menu
@@ -17833,19 +17862,131 @@ methods, but want to only use secondary ones:
@end lisp
-@node Combined Groups
-@section Combined Groups
+@node Virtual Groups
+@section Virtual Groups
-Gnus allows combining a mixture of all the other group types into bigger
-groups.
+Gnus allows combining articles from many sources, and combinations of
+whole groups together into virtual groups.
@menu
-* Virtual Groups:: Combining articles from many groups.
+* Selection Groups:: Combining articles from many groups.
+* Combined Groups:: Combining multiple groups.
@end menu
-@node Virtual Groups
-@subsection Virtual Groups
+@node Selection Groups
+@subsection Select Groups
+@cindex nnselect
+@cindex select groups
+@cindex selecting articles
+
+
+Gnus provides the @dfn{nnselect} method for creating virtual groups
+composed of collections of messages, even when these messages come
+from groups that span multiple servers and backends. For the most
+part these virtual groups behave like any other group: messages may be
+threaded, marked, moved, deleted, copied, etc.; groups may be
+ephemeral or persistent; groups may be created via
+@code{gnus-group-make-group} or browsed as foreign via
+@code{gnus-group-browse-foreign-server}.
+
+The key to using an nnselect group is specifying the messages to
+include. Each nnselect group has a group parameter
+@code{nnselect-specs} which is an alist with two elements: a function
+@code{nnselect-function}; and arguments @code{nnselect-args} to be
+passed to the function, if any.
+
+The function @code{nnselect-function} must return a vector. Each
+element of this vector is in turn a 3-element vector corresponding to
+one message. The 3 elements are: the fully-qualified group name; the
+message number; and a "score" that can be used for additional sorting.
+The values for the score are arbitrary, and are not used directly by
+the nnselect method---they may, for example, all be set to 100.
+
+Here is an example:
+
+@lisp
+(nnselect-specs
+ (nnselect-function . identity)
+ (nnselect-args
+ . [["nnimap+work:mail" 595 100]
+ ["nnimap+home:sent" 223 100]
+ ["nntp+news.gmane.org:gmane.emacs.gnus.general" 23666 100]]))
+@end lisp
+
+The function is the identity and the argument is just the list of
+messages to include in the virtual group.
+
+Or we may wish to create a group from the results of a search query:
+
+@lisp
+(nnselect-specs
+ (nnselect-function . nnir-run-query)
+ (nnselect-args
+ (nnir-query-spec
+ (query . "FLAGGED")
+ (criteria . ""))
+ (nnir-group-spec
+ ("nnimap:home")
+ ("nnimap:work"))))
+@end lisp
+
+This creates a group including all flagged messages from all groups on
+two IMAP servers, "home" and "work".
+
+And one last example. Here is a function that runs a search query to
+find all message that have been received recently from certain groups:
+
+@lisp
+(defun my-recent-email (args)
+ (let ((query-spec
+ (list
+ (cons 'query
+ (format-time-string "SENTSINCE %d-%b-%Y"
+ (time-subtract (current-time)
+ (days-to-time (car args)))))
+ (cons 'criteria "")))
+ (group-spec (cadr args)))
+ (nnir-run-query (cons 'nnir-specs
+ (list (cons 'nnir-query-spec query-spec)
+ (cons 'nnir-group-spec group-spec))))))
+@end lisp
+
+Then the following @code{nnselect-specs}:
+
+@lisp
+(nnselect-specs
+ (nnselect-function . my-recent-email)
+ (nnselect-args . (7 (("nnimap:home") ("nnimap:work")))))
+@end lisp
+
+will provide a group composed of all messages on the home and work
+servers received in the last 7 days.
+
+Refreshing the selection of an nnselect group by running the
+@code{nnselect-function} may take a long time to complete.
+Consequently nnselect groups are not refreshed by default when
+@code{gnus-group-get-new-news} is invoked. In those cases where
+running the function is not too time-consuming, a non-@code{nil} group
+parameter of @code{nnselect-rescan} will allow automatic refreshing.
+A refresh can always be invoked manually through
+@code{gnus-group-get-new-news-this-group}.
+
+The nnir interface (@pxref{nnir}) includes engines for searching a
+variety of backends. While the details of each search engine vary,
+the result of an nnir search is always a vector of the sort used by
+the nnselect method, and the results of nnir queries are usually
+viewed using an nnselect group. Indeed the standard search function
+@code{gnus-group-read-ephemeral-search-group} just creates an
+ephemeral nnselect group with the appropriate nnir query as the
+@code{nnselect-specs}. nnir originally included both the search
+engines and the glue to connect search results to gnus. Over time
+this glue evolved into the nnselect method. The two had a mostly
+amicable parting so that nnselect could pursue its dream of becoming a
+fully functioning backend, but occasional conflicts may still linger.
+
+@node Combined Groups
+@subsection Combined Groups
@cindex nnvirtual
@cindex virtual groups
@cindex merging groups
@@ -21237,14 +21378,25 @@ four days, Gnus will decay the scores four times, for instance.
@chapter Searching
@cindex searching
-FIXME: Add a brief overview of Gnus search capabilities. A brief
-comparison of nnir, nnmairix, contrib/gnus-namazu would be nice
-as well.
-
-This chapter describes tools for searching groups and servers for
-articles matching a query and then retrieving those articles. Gnus
-provides a simpler mechanism for searching through articles in a summary buffer
-to find those matching a pattern. @xref{Searching for Articles}.
+FIXME: A brief comparison of nnir, nnmairix, contrib/gnus-namazu would
+be nice.
+
+Gnus has various ways of finding articles that match certain criteria
+(from a particular author, on a certain subject, etc.). The simplest
+method is to enter a group and then either "limit" the summary buffer
+to the desired articles using the limiting commands (@xref{Limiting}),
+or searching through messages in the summary buffer (@xref{Searching
+for Articles}).
+
+Limiting commands and summary buffer searching work on subsets of the
+articles already fetched from the servers, and these commands won't
+query the server for additional articles. While simple, these methods
+are therefore inadequate if the desired articles span multiple groups,
+or if the group is so large that fetching all articles is impractical.
+Many backends (such as imap, notmuch, namazu, etc.) provide their own
+facilities to search for articles directly on the server and Gnus can
+take advantage of these methods. This chapter describes tools for
+searching groups and servers for articles matching a query.
@menu
* nnir:: Searching with various engines.
@@ -21274,7 +21426,7 @@ through mail and news repositories. Different backends (like
interface.
The @code{nnimap} search engine should work with no configuration.
-Other engines require a local index that needs to be created and
+Other engines may require a local index that needs to be created and
maintained outside of Gnus.
@@ -21282,23 +21434,19 @@ maintained outside of Gnus.
@subsection Basic Usage
In the group buffer typing @kbd{G G} will search the group on the
-current line by calling @code{gnus-group-make-nnir-group}. This prompts
-for a query string, creates an ephemeral @code{nnir} group containing
+current line by calling @code{gnus-group-make-search-group}. This prompts
+for a query string, creates an ephemeral @code{nnselect} group containing
the articles that match this query, and takes you to a summary buffer
showing these articles. Articles may then be read, moved and deleted
using the usual commands.
-The @code{nnir} group made in this way is an @code{ephemeral} group,
-and some changes are not permanent: aside from reading, moving, and
-deleting, you can't act on the original article. But there is an
-alternative: you can @emph{warp} (i.e., jump) to the original group
-for the article on the current line with @kbd{A W}, aka
-@code{gnus-warp-to-article}. Even better, the function
-@code{gnus-summary-refer-thread}, bound by default in summary buffers
-to @kbd{A T}, will first warp to the original group before it works
-its magic and includes all the articles in the thread. From here you
-can read, move and delete articles, but also copy them, alter article
-marks, whatever. Go nuts.
+The @code{nnselect} group made in this way is an @code{ephemeral}
+group, and will disappear upon exit from the group. However changes
+made in the group are permanently reflected in the real groups from
+which the articles are drawn. It is occasionally convenient to view
+articles found through searching in their original group. You can
+@emph{warp} (i.e., jump) to the original group for the article on the
+current line with @kbd{A W}, aka @code{gnus-warp-to-article}.
You say you want to search more than just the group on the current line?
No problem: just process-mark the groups you want to search. You want
@@ -21306,14 +21454,14 @@ even more? Calling for an nnir search with the cursor on a topic heading
will search all the groups under that heading.
Still not enough? OK, in the server buffer
-@code{gnus-group-make-nnir-group} (now bound to @kbd{G}) will search all
-groups from the server on the current line. Too much? Want to ignore
-certain groups when searching, like spam groups? Just customize
-@code{nnir-ignored-newsgroups}.
+@code{gnus-group-make-search-group} (now bound to @kbd{G}) will search
+all groups from the server on the current line. Too much? Want to
+ignore certain groups when searching, like spam groups? Just
+customize @code{nnir-ignored-newsgroups}.
One more thing: individual search engines may have special search
features. You can access these special features by giving a prefix-arg
-to @code{gnus-group-make-nnir-group}. If you are searching multiple
+to @code{gnus-group-make-search-group}. If you are searching multiple
groups with different search engines you will be prompted for the
special search features for each engine separately.
@@ -21370,8 +21518,7 @@ variable is set to use the @code{imap} engine for all servers using the
your servers with an @code{nnimap} backend you could change this to
@lisp
-'((nnimap . namazu)
- (nntp . gmane))
+'((nnimap . namazu))
@end lisp
@node The imap Engine
@@ -21574,7 +21721,7 @@ This engine is obsolete.
@item nnir-method-default-engines
Alist of pairs of server backends and search engines. The default
-associations are
+association is
@example
(nnimap . imap)
@end example
@@ -21583,32 +21730,6 @@ associations are
A regexp to match newsgroups in the active file that should be skipped
when searching all groups on a server.
-@item nnir-summary-line-format
-The format specification to be used for lines in an nnir summary buffer.
-All the items from @code{gnus-summary-line-format} are available, along with
-three items unique to nnir summary buffers:
-
-@example
-%Z Search retrieval score value (integer)
-%G Article original full group name (string)
-%g Article original short group name (string)
-@end example
-
-If @code{nil} (the default) this will use @code{gnus-summary-line-format}.
-
-@item nnir-retrieve-headers-override-function
-If non-@code{nil}, a function that retrieves article headers rather than using
-the gnus built-in function. This function takes an article list and
-group as arguments and populates the @code{nntp-server-buffer} with the
-retrieved headers. It should then return either 'nov or 'headers
-indicating the retrieved header format. Failure to retrieve headers
-should return @code{nil}.
-
-If this variable is @code{nil}, or if the provided function returns
-@code{nil} for a search result, @code{gnus-retrieve-headers} will be
-called instead."
-
-
@end table
@@ -22333,6 +22454,7 @@ to you, using @kbd{G b u} and updating the group will usually fix this.
* Spam Package:: A package for filtering and processing spam.
* The Gnus Registry:: A package for tracking messages by Message-ID.
* The Gnus Cloud:: A package for synchronizing Gnus marks.
+* D-Bus Integration:: Closing Gnus servers on system sleep.
* Other modes:: Interaction with other modes.
* Various Various:: Things that are really various.
@end menu
@@ -26404,6 +26526,26 @@ CloudSynchronizationDataPack(TM)s. It's easiest to set this from the
Server buffer (@pxref{Gnus Cloud Setup}).
@end defvar
+@node D-Bus Integration
+@section D-Bus Integration
+@cindex dbus
+@cindex D-Bus
+@cindex gnus-dbus
+@cindex system sleep
+@cindex closing servers automatically
+@cindex hung connections
+
+When using laptops or other systems that have a sleep or hibernate
+functionality, it's possible for long-running server connections to
+become ``hung'', requiring the user to manually close and re-open the
+connections after the system resumes. On systems compiled with D-Bus
+support (check the value of @code{(featurep 'dbusbind)}), Gnus can
+register a D-Bus signal to automatically close all server connections
+before the system goes to sleep. To enable this, set
+@code{gnus-dbus-close-on-sleep} to a non-nil value.
+
+For more information about D-Bus and Emacs, @pxref{Top,,, dbus, D-Bus integration in Emacs}.
+
@node Other modes
@section Interaction with other modes
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 55b166eb8b0..b192822fac6 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -2296,8 +2296,11 @@ String to mark the end of some inserted text.
String to be inserted at the end of the message buffer. If @code{t}
(which is the default), the @code{message-signature-file} file will be
inserted instead. If a function, the result from the function will be
-used instead. If a form, the result from the form will be used instead.
-If this variable is @code{nil}, no signature will be inserted at all.
+used instead. If a form, the result from the form will be used
+instead. If this variable is @code{nil}, no signature will be
+inserted at all, but you can still insert your
+@code{message-signature-file} by hand when desired, using the
+@kbd{C-c C-w} (@code{message-insert-signature}) command.
@item message-signature-file
@vindex message-signature-file
diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi
index f29a5a82e86..f4367b35377 100644
--- a/doc/misc/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -267,10 +267,12 @@ file, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
The process by which the SMTP library authenticates you to the server
is known as ``Simple Authentication and Security Layer'' (SASL).
There are various SASL mechanisms, and this library supports three of
-them: CRAM-MD5, PLAIN, and LOGIN@. It tries each of them, in that order,
-until one succeeds. The first uses a form of encryption to obscure
-your password, while the other two do not.
-
+them: CRAM-MD5, PLAIN, and LOGIN, where the first uses a form of
+encryption to obscure your password, while the other two do not. It
+tries each of them, in that order, until one succeeds. You can
+override this by assigning a specific authentication mechanism to a
+server by including a key @code{smtp-auth} with the value of your
+preferred mechanism in the appropriate @file{~/.authinfo} entry.
@node Encryption
@chapter Encryption
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index c1a66d02512..bdf3b403d80 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -239,7 +239,7 @@ included in the file name portion, @value{tramp} sends the login name
followed by a newline.
@item
-The remote host may then prompt for a password or pass phrase (for
+The remote host may then prompt for a password or passphrase (for
@command{rsh} or for @command{telnet}). @value{tramp} displays the
password prompt in the minibuffer. @value{tramp} then sends whatever
is entered to the remote host, followed by a newline.
@@ -3563,9 +3563,8 @@ which must be set to a non-@code{nil} value. Example:
Using direct asynchronous processes in @value{tramp} is not possible,
if the remote host is connected via multiple hops
-(@pxref{Multi-hops}), or the @code{make-process} /
-@code{start-file-process} call uses a stderr stream. In this case,
-@value{tramp} falls back to its classical implementation.
+(@pxref{Multi-hops}). In this case, @value{tramp} falls back to its
+classical implementation.
Furthermore, this approach has the following limitations:
@@ -3575,8 +3574,10 @@ It works only for connection methods defined in @file{tramp-sh.el} and
@file{tramp-adb.el}.
@item
-It does not support interactive user authentication, like password
-handling.
+It does not support interactive user authentication. With
+@option{ssh}-based methods, this can be avoided by using a password
+agent like @command{ssh-agent}, using public key authentication, or
+using @code{ControlMaster} options.
@item
It cannot be killed via @code{interrupt-process}.
@@ -3585,6 +3586,9 @@ It cannot be killed via @code{interrupt-process}.
It does not report the remote terminal name via @code{process-tty-name}.
@item
+It does not set process property @code{remote-pid}.
+
+@item
It does not use @code{tramp-remote-path} and
@code{tramp-remote-process-environment}.
diff --git a/etc/NEWS b/etc/NEWS
index 53391f91f73..f0644c8ea94 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -42,6 +42,11 @@ default. We strongly recommend building with HarBuzz support. 'x' is
still a valid backend.
---
+** Building without double buffering support.
+'configure --with-xdbe=no' can now be used to disable double buffering
+at build time.
+
+---
** 'configure' now warns about building with libXft support.
libXft is unmaintained, and causes a number of problems with modern
fonts including but not limited to crashes; support for it may be
@@ -93,8 +98,15 @@ specify 'cursor-type' to be '(box . SIZE)', the cursor becomes a hollow
box if the point is on an image larger than 'SIZE' pixels in any
dimension.
++++
+** New user option 'word-wrap-by-category'.
+When word-wrap is enabled, and this option is non-nil, that allows
+Emacs to break lines after more characters than just whitespace
+characters. In particular, this significantly improves word-wrapping
+for CJK text mixed with Latin text.
+
---
-*** Improved language transliteration in Malayalam input methods.
+** Improved language transliteration in Malayalam input methods.
Added a new Mozhi scheme. The inapplicable ITRANS scheme is now
deprecated. Errors in the Inscript method were corrected.
@@ -102,6 +114,13 @@ deprecated. Errors in the Inscript method were corrected.
** Rudimentary support for the 'st' terminal emulator.
Emacs now supports 256 color display on the 'st' terminal emulator.
+---
+** Mouse wheel scrolling now works on more parts of frame's display.
+When using 'mwheel-mode', the mouse wheel will now scroll also when
+the mouse cursor is on the scroll bars, fringes, margins, header line,
+and mode line. ('mwheel-mode' is enabled by default on most graphical
+displays.)
+
* Editing Changes in Emacs 28.1
@@ -148,6 +167,19 @@ same for a button.
* Changes in Specialized Modes and Packages in Emacs 28.1
+---
+** Specific warnings can now be disabled from the warning buffer.
+When a warning is displayed to the user, the resulting buffer now has
+buttons which allow making permanent changes to the treatment of that
+warning. Automatic showing of the warning can be disabled (although
+it is still logged to the *Messages* buffer), or the warning can be
+disabled entirely.
+
+** mspool.el
+
+---
+*** Autoload the main entry point 'mspool-show'.
+
** Windows
*** The key prefix 'C-x 4 1' displays next command buffer in the same window.
@@ -221,6 +253,23 @@ time zones will use a form like "+0100" instead of "CET".
** Dired
+---
+*** Broken and circular links are shown with the 'dired-broken-symlink' face.
+
+*** '=' ('dired-diff') will now put all backup files into the 'M-n' history.
+When using '=' on a file with backup files, the default file to use
+for diffing is the newest backup file. You can now use 'M-n' to quickly
+select a different backup file instead.
+
++++
+*** New user option 'dired-maybe-use-globstar'.
+If set, enables globstar (recursive globbing) in shells that support
+this feature, but turn it off by default. This allows producing
+directory listings with files matching a wildcard in all the
+subdirectories of a given directory. The new variable
+'dired-enable-globstar-in-shell' lists which shells can have globstar
+enabled, and how to enable it.
+
+++
*** New user option 'dired-copy-dereference'.
If set to non-nil, Dired will dereference symbolic links when copying.
@@ -260,7 +309,7 @@ invoke 'C-u C-x v s' ('vc-create-tag').
*** 'vc-hg' now uses 'hg summary' to populate extra 'vc-dir' headers.
---
-*** New variable 'vc-git-revision-complete-only-branches'.
+*** New user option 'vc-git-revision-complete-only-branches'.
If non-nil, only branches and remotes are considered when doing
completion over Git branch names. The default is nil, which causes
tags to be considered as well.
@@ -268,6 +317,28 @@ tags to be considered as well.
** Gnus
+++
+*** New backend 'nnselect'.
+The newly added 'nnselect' backend allows creating groups from an
+arbitrary list of articles that may come from multiple groups and
+servers. These groups generally behave like any other group: they may
+be ephemeral or persistent, and allow article marking, moving,
+deletion, etc. 'nnselect' groups may be created like any other group,
+but there is also a convenience function for the common case of
+obtaining the list of articles as a result of a search:
+'gnus-group-make-search-group' ('G g') that will prompt for an 'nnir'
+search query and create a dedicated group for that search. As part of
+this addition, the user option 'nnir-summary-line-format' has been
+removed; its functionality is now available directly in the
+'gnus-summary-line-format' specs '%G' and '%g'. The user option
+'gnus-refer-thread-use-nnir' has been renamed to
+'gnus-refer-thread-use-search'.
+
++++
+*** New user option 'gnus-dbus-close-on-sleep'.
+On systems with D-Bus support, it is now possible to register a signal
+to close all Gnus servers before the system sleeps.
+
++++
*** The key binding of 'gnus-summary-search-article-forward' has changed.
This command was previously on 'M-s' and shadowed the global 'M-s'
search prefix. The command has now been moved to 'M-s M-s'. (For
@@ -338,6 +409,13 @@ In Message mode buffers, the 'C-c C-p' ('message-insert-screenshot')
command has been added. It depends on using an external program to
take the actual screenshot, and defaults to "ImageMagick import".
+** Smtpmail
+
++++
+*** Allow direct selection of smtp authentication mechanism.
+A server entry retrieved by auth-source can request a desired smtp
+authentication mechanism by setting a value for the key 'smtp-auth'.
+
** Help
+++
@@ -348,6 +426,15 @@ take the actual screenshot, and defaults to "ImageMagick import".
The menu-bar Help menu now has a "Show Recent Inputs" item under the
"Describe" sub-menu.
+** Ispell
+
++++
+*** 'ispell-comments-and-strings' now accepts START and END arguments,
+defaulting to active region when used interactively.
+
++++
+*** New command 'ispell-comment-or-string-at-point' is provided.
+
---
** The old non-SMIE indentation of 'sh-mode' has been removed.
@@ -507,6 +594,9 @@ case-insensitive matching of messages when the old behavior is
required, but the recommended solution is to use a correctly matching
regexp instead.
+---
+*** Messages from Visual Studio that mention column numbers are now recognized.
+
** Hi Lock mode
---
@@ -657,6 +747,30 @@ sorted there. The commands have also been extended to work when the
"parent" buffer is an archive mode (i.e., zip file or the like) or tar
mode buffer.
+---
+*** 'image-converter' is now restricted to formats in 'auto-mode-alist'.
+When using external image converters, the external program is queried
+for what formats it supports. This list may contain formats that are
+problematic in some contexts (like PDFs), so this list is now filtered
+based on 'auto-mode-alist'. Only file names that map to 'image-mode'
+are now supported.
+
+---
+*** The background and foreground of images now default to face colors.
+When an image doesn't specify a foreground or background color, Emacs
+now uses colors from the face used to draw the surrounding text
+instead of the frame's default colors.
+
+To load images with the default frame colors use the ':foreground' and
+':background' image attributes, for example:
+
+ (create-image "filename" nil nil
+ :foreground (face-attribute 'default :foreground)
+ :background (face-attribute 'default :background))
+
+This change only affects image types that support foreground and
+background colors or transparency, such as xbm, pbm, svg, png and gif.
+
** EWW
+++
@@ -705,6 +819,11 @@ This command lets you "switch" to another project and run a project
command chosen from a dispatch menu.
+++
+*** New commands 'project-shell-command' and 'project-async-shell-command'.
+These commands run 'shell-command' and 'async-shell-command' in a
+project's root directory, respectively.
+
++++
*** New user option 'project-list-file'.
** json.el
@@ -817,11 +936,24 @@ based on the current window size. In previous versions of Emacs, this
was always done (and that could lead to odd displays when resizing the
window after starting). This variable defaults to nil.
-
** Miscellaneous
+++
-*** New global mode 'global-goto-address-mode'
+*** The user can now customize how "default" values are prompted for.
+The new utility function 'format-prompt' has been added which uses the
+new 'minibuffer-default-prompt-format' user option to format "default"
+prompts. This means that prompts that look like "Enter a number
+(default 10)" can be customized to look like, for instance, "Enter a
+number [10]", or not have the default displayed at all, like "Enter a
+number". (This requires that all callers are altered to use
+'format-prompt', though.)
+
+---
+*** New 'diff-mode' font locking face 'diff-error'.
+This face is used for error messages from diff.
+
++++
+*** New global mode 'global-goto-address-mode'.
This will enable 'goto-address-mode' in all buffers.
---
@@ -872,7 +1004,6 @@ never be narrower than 19 characters.
When the bookmark.el library is loaded, a customize choice is added
to 'tab-bar-new-tab-choice' for new tabs to show the bookmark list.
-
** xwidget-webkit mode
*** New xwidget functions.
@@ -930,6 +1061,14 @@ The following user options have been renamed:
The old names are now obsolete.
+** D-Bus
+
++++
+*** Registered properties can have the new access type ':write'.
+
++++
+*** In case of problems, handlers can emit proper D-Bus error messages now.
+
* New Modes and Packages in Emacs 28.1
@@ -944,6 +1083,11 @@ mode, as are other data files produced by Emacs.
It's a library to create, query, navigate and display hierarchy structures.
+** New themes 'modus-vivendi' and 'modus-operandi'.
+These themes are designed for colour-contrast accessibility. You can
+load the new themes using 'M-x customize-themes' or 'load-theme' from
+your init file.
+
* Incompatible Editing Changes in Emacs 28.1
@@ -1010,33 +1154,39 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
---
** Some functions and variables obsolete since Emacs 23 have been removed:
-
-'GOLD-map', 'bookmark-jump-noselect',
+'GOLD-map', 'advertised-xscheme-send-previous-expression',
+'allout-init', 'bookmark-jump-noselect',
'bookmark-read-annotation-text-func', 'buffer-menu-mode-hook',
-'char-coding-system-table', 'char-valid-p', 'charset-bytes',
-'charset-id', 'charset-list' (function), 'complete-in-turn',
-'completion-common-substring', 'crm-minibuffer-complete',
-'crm-minibuffer-complete-and-exit', 'crm-minibuffer-completion-help',
-'custom-mode', 'custom-mode-hook', 'detect-coding-with-priority',
-'dirtrack-debug' (function), 'dirtrack-debug-toggle',
-'dynamic-completion-table',
+'c-forward-into-nomenclature', 'char-coding-system-table',
+'char-valid-p', 'charset-bytes', 'charset-id', 'charset-list',
+'choose-completion-delete-max-match', 'complete-in-turn',
+'completion-base-size', 'completion-common-substring',
+'crm-minibuffer-complete', 'crm-minibuffer-complete-and-exit',
+'crm-minibuffer-completion-help', 'custom-mode', 'custom-mode-hook',
+'detect-coding-with-priority', 'dirtrack-debug',
+'dirtrack-debug-toggle', 'dynamic-completion-table',
'easy-menu-precalculate-equivalent-keybindings',
'epa-display-verify-result', 'epg-passphrase-callback-function',
-'eshell-report-bug', 'ffap-bug', 'ffap-submit-bug', 'forward-point',
-'generic-char-p', 'global-highlight-changes', 'hi-lock-face-history',
+'eshell-report-bug', 'eval-next-after-load', 'exchange-dot-and-mark',
+'ffap-bug', 'ffap-submit-bug', 'ffap-version',
+'file-cache-choose-completion', 'forward-point', 'generic-char-p',
+'global-highlight-changes', 'hi-lock-face-history',
'hi-lock-regexp-history', 'highlight-changes-active-string',
'highlight-changes-initial-state', 'highlight-changes-passive-string',
+'image-mode-maybe', 'imenu-example--name-and-position',
'ispell-aspell-supports-utf8', 'lisp-mode-auto-fill',
'locate-file-completion', 'make-coding-system',
-'minibuffer-local-must-match-filename-map', 'mouse-major-mode-menu',
-'mouse-popup-menubar', 'mouse-popup-menubar-stuff',
-'newsticker-groups-filename', 'non-iso-charset-alist',
-'nonascii-insert-offset', 'nonascii-translation-table',
-'password-read-and-add', 'pre-abbrev-expand-hook',
-'process-filter-multibyte-p', 'remember-buffer' (function),
-'rmail-message-filter', 'set-coding-priority',
-'set-process-filter-multibyte', 'shell-dirtrack-toggle',
-'t-mouse-mode', 'tooltip-hook', 'tpu-have-ispell',
+'minibuffer-local-must-match-filename-map', 'mouse-choose-completion',
+'mouse-major-mode-menu', 'mouse-popup-menubar',
+'mouse-popup-menubar-stuff', 'newsticker-groups-filename',
+'non-iso-charset-alist', 'nonascii-insert-offset',
+'nonascii-translation-table', 'password-read-and-add',
+'pre-abbrev-expand-hook', 'princ-list', 'print-help-return-message',
+'process-filter-multibyte-p', 'read-file-name-predicate',
+'remember-buffer', 'rmail-highlight-face', 'rmail-message-filter',
+'set-coding-priority', 'set-process-filter-multibyte',
+'shadows-compare-text-p', 'shell-dirtrack-toggle', 't-mouse-mode',
+'term-dynamic-simple-complete', 'tooltip-hook', 'tpu-have-ispell',
'url-generate-unique-filename', 'url-temporary-directory',
'vc-arch-command', 'vc-default-working-revision' (variable),
'vc-mtn-command', 'vc-revert-buffer', 'vc-workfile-version',
@@ -1046,6 +1196,11 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
* Lisp Changes in Emacs 28.1
+++
+*** New function 'file-backup-file-names'.
+This function returns the list of file names of all the backup files
+of its file argument.
+
++++
** The 'count-lines' function now takes an optional parameter to
ignore invisible lines.
@@ -1096,6 +1251,9 @@ equivalent period in seconds.
+++
** The new function 'dom-remove-attribute' has been added.
++++
+** The new function 'dom-print' has been added.
+
---
** 'make-network-process', 'make-serial-process' ':coding' behavior change.
Previously, passing ':coding nil' to either of these functions would
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index 31b69025173..5ef54309893 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -24,7 +24,6 @@ applies, and please also update docstrings as needed.
* Installation Changes in Emacs 27.1
----
** Emacs now uses GMP, the GNU Multiple Precision library.
By default, if 'configure' does not find a suitable libgmp, it
arranges for the included mini-gmp library to be built and used.
@@ -58,7 +57,6 @@ that building with Cairo enabled results in using Pango instead of
libXft for font support, and that Pango 1.44 has removed support for
bitmapped fonts.
-+++
** Emacs now uses a "portable dumper" instead of unexec.
This improves compatibility with memory allocation on modern systems,
and in particular better supports the Address Space Layout
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index f68a183c5d7..67537f6e33b 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1602,6 +1602,12 @@ even if you should be able to paste, and similar).
You can get back menus on each frame by starting emacs like this:
% env UBUNTU_MENUPROXY= emacs
+*** Mouse click coordinates not recognized correctly on multiple monitors.
+
+This happens on the proprietary X server ASTEC-X when the number of
+monitors is changed after the server has started. A workaround is to
+restart the X server after the monitor configuration has been changed.
+
* Runtime problems on character terminals
** The meta key does not work on xterm.
diff --git a/etc/compilation.txt b/etc/compilation.txt
index 8f7e2906787..11aefc6bc6f 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -381,6 +381,7 @@ made it more strict about the error message that follows.
keyboard handler.c(537) : warning C4005: 'min' : macro redefinition
d:\tmp\test.c(23) : error C2143: syntax error : missing ';' before 'if'
d:\tmp\test.c(1145) : see declaration of 'nsRefPtr'
+c:\tmp\test.cpp(101,11): error C4101: 'bias0123': unreferenced local variable [c:\tmp\project.vcxproj]
1>test_main.cpp(29): error C2144: syntax error : 'int' should be preceded by ';'
1>test_main.cpp(29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index 5c76d6a1e98..ac395f993c9 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -5,18 +5,20 @@
;; Author: Manoj Srivastava <srivasta@ieee.org>
;; Keywords: lisp, faces
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/etc/themes/modus-operandi-theme.el b/etc/themes/modus-operandi-theme.el
new file mode 100644
index 00000000000..c1090eedefd
--- /dev/null
+++ b/etc/themes/modus-operandi-theme.el
@@ -0,0 +1,4266 @@
+;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- lexical-binding:t -*-
+
+;; Copyright (c) 2019-2020 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; URL: https://gitlab.com/protesilaos/modus-themes
+;; Version: 0.12.0
+;; Package-Requires: ((emacs "26.1"))
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; This theme is designed for colour-contrast accessibility.
+;;
+;; 1. Provide a consistent minimum contrast ratio between background and
+;; foreground values of 7:1 or higher. This meets the highest such
+;; accessibility criterion per the guidelines of the Worldwide Web
+;; Consortium's Working Group on Accessibility (WCAG AAA standard).
+;;
+;; 2. Offer as close to full face coverage as possible. The list is
+;; already quite long (see further below), with more additions to follow
+;; as part of the ongoing development process.
+;;
+;; The theme provides the following customisation options, all of which
+;; are disabled by default:
+;;
+;; modus-operandi-theme-slanted-constructs (boolean)
+;; modus-operandi-theme-bold-constructs (boolean)
+;; modus-operandi-theme-variable-pitch-headings (boolean)
+;; modus-operandi-theme-rainbow-headings (boolean)
+;; modus-operandi-theme-section-headings (boolean)
+;; modus-operandi-theme-scale-headings (boolean)
+;; modus-operandi-theme-fringes (choice)
+;; modus-operandi-theme-org-blocks (choice)
+;; modus-operandi-theme-prompts (choice)
+;; modus-operandi-theme-3d-modeline (boolean)
+;; modus-operandi-theme-subtle-diffs (boolean)
+;; modus-operandi-theme-faint-syntax (boolean)
+;; modus-operandi-theme-intense-hl-line (boolean)
+;; modus-operandi-theme-intense-paren-match (boolean)
+;; modus-operandi-theme-completions (choice)
+;; modus-operandi-theme-override-colors-alist (alist)
+;;
+;; The default scale is as follows (it can be customised as well):
+;;
+;; modus-operandi-theme-scale-1 1.05
+;; modus-operandi-theme-scale-2 1.1
+;; modus-operandi-theme-scale-3 1.15
+;; modus-operandi-theme-scale-4 1.2
+;; modus-operandi-theme-scale-5 1.3
+;;
+;; What follows is the list of explicitly supported packages or face
+;; groups (there are implicitly supported packages as well, which
+;; inherit from font-lock or some basic group). You are encouraged to
+;; notify me of any missing package or change you would like to see.
+;;
+;; ace-window
+;; ag
+;; alert
+;; all-the-icons
+;; annotate
+;; anzu
+;; apropos
+;; apt-sources-list
+;; artbollocks-mode
+;; auctex and TeX
+;; auto-dim-other-buffers
+;; avy
+;; bm
+;; bongo
+;; boon
+;; breakpoint (provided by built-in gdb-mi.el)
+;; buffer-expose
+;; calendar and diary
+;; calfw
+;; centaur-tabs
+;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+;; cider
+;; circe
+;; color-rg
+;; column-enforce-mode
+;; company-mode
+;; company-posframe
+;; compilation-mode
+;; completions
+;; counsel
+;; counsel-css
+;; counsel-notmuch
+;; counsel-org-capture-string
+;; cov
+;; csv-mode
+;; ctrlf
+;; custom (M-x customize)
+;; dap-mode
+;; dashboard (emacs-dashboard)
+;; deadgrep
+;; debbugs
+;; define-word
+;; deft
+;; dictionary
+;; diff-hl
+;; diff-mode
+;; dim-autoload
+;; dired
+;; dired-async
+;; dired-git
+;; dired-git-info
+;; dired-narrow
+;; dired-subtree
+;; diredfl
+;; disk-usage
+;; doom-modeline
+;; dynamic-ruler
+;; easy-jekyll
+;; easy-kill
+;; ebdb
+;; ediff
+;; eglot
+;; el-search
+;; eldoc-box
+;; elfeed
+;; elfeed-score
+;; emms
+;; enhanced-ruby-mode
+;; epa
+;; equake
+;; erc
+;; eros
+;; ert
+;; eshell
+;; eshell-fringe-status
+;; eshell-git-prompt
+;; eshell-prompt-extras (epe)
+;; evil (evil-mode)
+;; evil-goggles
+;; evil-visual-mark-mode
+;; eww
+;; eyebrowse
+;; fancy-dabbrev
+;; flycheck
+;; flycheck-indicator
+;; flycheck-posframe
+;; flymake
+;; flyspell
+;; flyspell-correct
+;; flx
+;; freeze-it
+;; frog-menu
+;; focus
+;; fold-this
+;; font-lock (generic syntax highlighting)
+;; forge
+;; fountain (fountain-mode)
+;; geiser
+;; git-commit
+;; git-gutter (and variants)
+;; git-lens
+;; git-rebase
+;; git-timemachine
+;; git-walktree
+;; gnus
+;; golden-ratio-scroll-screen
+;; helm
+;; helm-ls-git
+;; helm-switch-shell
+;; helm-xref
+;; helpful
+;; highlight-blocks
+;; highlight-defined
+;; highlight-escape-sequences (`hes-mode')
+;; highlight-indentation
+;; highlight-numbers
+;; highlight-symbol
+;; highlight-tail
+;; highlight-thing
+;; hl-defined
+;; hl-fill-column
+;; hl-line-mode
+;; hl-todo
+;; hydra
+;; hyperlist
+;; ibuffer
+;; icomplete
+;; ido-mode
+;; iedit
+;; iflipb
+;; imenu-list
+;; indium
+;; info
+;; info-colors
+;; interaction-log
+;; ioccur
+;; isearch, occur, etc.
+;; ivy
+;; ivy-posframe
+;; jira (org-jira)
+;; journalctl-mode
+;; js2-mode
+;; julia
+;; jupyter
+;; kaocha-runner
+;; keycast
+;; line numbers (`display-line-numbers-mode' and global variant)
+;; lsp-mode
+;; lsp-ui
+;; magit
+;; magit-imerge
+;; man
+;; markdown-mode
+;; markup-faces (`adoc-mode')
+;; mentor
+;; messages
+;; minibuffer-line
+;; minimap
+;; modeline
+;; mood-line
+;; mu4e
+;; mu4e-conversation
+;; multiple-cursors
+;; neotree
+;; no-emoji
+;; notmuch
+;; num3-mode
+;; nxml-mode
+;; orderless
+;; org
+;; org-journal
+;; org-noter
+;; org-pomodoro
+;; org-recur
+;; org-roam
+;; org-superstar
+;; org-table-sticky-header
+;; org-treescope
+;; origami
+;; outline-mode
+;; outline-minor-faces
+;; package (M-x list-packages)
+;; page-break-lines
+;; paradox
+;; paren-face
+;; parrot
+;; pass
+;; persp-mode
+;; perspective
+;; phi-grep
+;; phi-search
+;; pkgbuild-mode
+;; pomidor
+;; powerline
+;; powerline-evil
+;; proced
+;; prodigy
+;; rainbow-blocks
+;; rainbow-identifiers
+;; rainbow-delimiters
+;; rcirc
+;; regexp-builder (also known as `re-builder')
+;; rg
+;; ripgrep
+;; rmail
+;; ruler-mode
+;; sallet
+;; selectrum
+;; semantic
+;; sesman
+;; shell-script-mode
+;; show-paren-mode
+;; side-notes
+;; skewer-mode
+;; smart-mode-line
+;; smartparens
+;; smerge
+;; spaceline
+;; speedbar
+;; spell-fu
+;; stripes
+;; suggest
+;; switch-window
+;; swiper
+;; swoop
+;; sx
+;; symbol-overlay
+;; tab-bar-mode
+;; tab-line-mode
+;; syslog-mode
+;; table (built-in table.el)
+;; telephone-line
+;; term
+;; tomatinho
+;; transient (pop-up windows like Magit's)
+;; trashed
+;; treemacs
+;; tty-menu
+;; tuareg
+;; undo-tree
+;; vc (built-in mode line status for version control)
+;; vc-annotate (C-x v g)
+;; vdiff
+;; vimish-fold
+;; visible-mark
+;; visual-regexp
+;; volatile-highlights
+;; vterm
+;; wcheck-mode
+;; web-mode
+;; wgrep
+;; which-function-mode
+;; which-key
+;; whitespace-mode
+;; window-divider-mode
+;; winum
+;; writegood-mode
+;; woman
+;; xah-elisp-mode
+;; xref
+;; xterm-color (and ansi-colors)
+;; yaml-mode
+;; yasnippet
+;; ztree
+
+;;; Code:
+
+
+
+(deftheme modus-operandi
+ "Light theme that conforms with the highest accessibility
+ standard for colour contrast between background and
+ foreground elements (WCAG AAA).")
+
+;;; Custom faces
+
+;; These faces will be inherited by actual constructs. They are meant
+;; for those cases where a face needs to distinguish its output from
+;; the rest of the text, such as `isearch' and `occur'… We define
+;; these separately in order to combine each colour with its
+;; appropriate foreground value. This is to ensure a consistent
+;; contrast ratio of >= 7:1.
+(defgroup modus-theme ()
+ "Theme that ensures WCAG AAA accessibility (contrast ratio
+between foreground and background is >= 7:1)."
+ :group 'faces
+ :prefix "modus-theme-"
+ :link '(url-link :tag "GitLab" "https://gitlab.com/protesilaos/modus-themes")
+ :tag "Modus Operandi")
+
+(defface modus-theme-subtle-red nil nil)
+(defface modus-theme-subtle-green nil nil)
+(defface modus-theme-subtle-yellow nil nil)
+(defface modus-theme-subtle-blue nil nil)
+(defface modus-theme-subtle-magenta nil nil)
+(defface modus-theme-subtle-cyan nil nil)
+(defface modus-theme-subtle-neutral nil nil)
+(defface modus-theme-intense-red nil nil)
+(defface modus-theme-intense-green nil nil)
+(defface modus-theme-intense-yellow nil nil)
+(defface modus-theme-intense-blue nil nil)
+(defface modus-theme-intense-magenta nil nil)
+(defface modus-theme-intense-cyan nil nil)
+(defface modus-theme-intense-neutral nil nil)
+(defface modus-theme-refine-red nil nil)
+(defface modus-theme-refine-green nil nil)
+(defface modus-theme-refine-yellow nil nil)
+(defface modus-theme-refine-blue nil nil)
+(defface modus-theme-refine-magenta nil nil)
+(defface modus-theme-refine-cyan nil nil)
+(defface modus-theme-active-red nil nil)
+(defface modus-theme-active-green nil nil)
+(defface modus-theme-active-yellow nil nil)
+(defface modus-theme-active-blue nil nil)
+(defface modus-theme-active-magenta nil nil)
+(defface modus-theme-active-cyan nil nil)
+(defface modus-theme-fringe-red nil nil)
+(defface modus-theme-fringe-green nil nil)
+(defface modus-theme-fringe-yellow nil nil)
+(defface modus-theme-fringe-blue nil nil)
+(defface modus-theme-fringe-magenta nil nil)
+(defface modus-theme-fringe-cyan nil nil)
+(defface modus-theme-nuanced-red nil nil)
+(defface modus-theme-nuanced-green nil nil)
+(defface modus-theme-nuanced-yellow nil nil)
+(defface modus-theme-nuanced-blue nil nil)
+(defface modus-theme-nuanced-magenta nil nil)
+(defface modus-theme-nuanced-cyan nil nil)
+(defface modus-theme-special-cold nil nil)
+(defface modus-theme-special-mild nil nil)
+(defface modus-theme-special-warm nil nil)
+(defface modus-theme-special-calm nil nil)
+(defface modus-theme-diff-added nil nil)
+(defface modus-theme-diff-changed nil nil)
+(defface modus-theme-diff-removed nil nil)
+(defface modus-theme-diff-refine-added nil nil)
+(defface modus-theme-diff-refine-changed nil nil)
+(defface modus-theme-diff-refine-removed nil nil)
+(defface modus-theme-diff-focus-added nil nil)
+(defface modus-theme-diff-focus-changed nil nil)
+(defface modus-theme-diff-focus-removed nil nil)
+(defface modus-theme-diff-heading nil nil)
+(defface modus-theme-header nil nil) ; Name is tentative
+(defface modus-theme-mark-alt nil nil)
+(defface modus-theme-mark-del nil nil)
+(defface modus-theme-mark-sel nil nil)
+(defface modus-theme-mark-symbol nil nil)
+(defface modus-theme-hl-line nil nil)
+
+;;; Customisation options
+
+;; User-facing customisation options. They are all deactivated by
+;; default (users must opt in).
+(defcustom modus-operandi-theme-slanted-constructs nil
+ "Use slanted text in more code constructs (italics or oblique)."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-bold-constructs nil
+ "Use bold text in more code constructs."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-proportional-fonts
+ 'modus-operandi-theme-variable-pitch-headings "`modus-operandi-theme' 0.11.0")
+
+(defcustom modus-operandi-theme-proportional-fonts nil
+ "Use proportional fonts (variable-pitch) in headings."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-variable-pitch-headings nil
+ "Use proportional fonts (variable-pitch) in headings."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-rainbow-headings nil
+ "Use more saturated colours for headings."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-section-headings nil
+ "Use a background and an overline in headings."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-scale-headings nil
+ "Use font scaling for headings."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-scale-1 1.05
+ "Font size that is slightly larger than the base value.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-operandi-theme-scale-2 1.1
+ "Font size slightly larger than `modus-operandi-theme-scale-1'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-operandi-theme-scale-3 1.15
+ "Font size slightly larger than `modus-operandi-theme-scale-2'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-operandi-theme-scale-4 1.2
+ "Font size slightly larger than `modus-operandi-theme-scale-3'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-operandi-theme-scale-5 1.3
+ "Font size slightly larger than `modus-operandi-theme-scale-4'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-visible-fringes
+ 'modus-operandi-theme-fringes "`modus-operandi-theme' 0.12.0")
+
+(defcustom modus-operandi-theme-visible-fringes nil
+ "Use a visible style for fringes."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-fringes nil
+ "Define the visibility of fringes.
+
+Nil means the fringes have no background colour. Option `subtle'
+will apply a greyscale value that is visible yet close to the
+main buffer background colour. Option `intense' will use a more
+pronounced greyscale value."
+ :type '(choice
+ (const :tag "No visible fringes (default)" nil)
+ (const :tag "Subtle greyscale background" subtle)
+ (const :tag "Intense greyscale background" intense)))
+
+(define-obsolete-variable-alias 'modus-operandi-theme-distinct-org-blocks
+ 'modus-operandi-theme-org-blocks "`modus-operandi-theme' 0.11.0")
+
+(defcustom modus-operandi-theme-distinct-org-blocks nil
+ "Use a distinct neutral background for `org-mode' blocks."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-rainbow-org-src-blocks
+ 'modus-operandi-theme-org-blocks "`modus-operandi-theme' 0.11.0")
+
+(defcustom modus-operandi-theme-rainbow-org-src-blocks nil
+ "Use colour-coded backgrounds for `org-mode' source blocks.
+The colour in use depends on the language (send feedback to
+include more languages)."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-org-blocks nil
+ "Use a subtle grey or colour-coded background for Org blocks.
+
+Nil means that the block will have no background of its own and
+will use the default that applies to the rest of the buffer.
+
+Option `greyscale' will apply a subtle neutral grey background to
+the block's contents. It also affects the begin and end lines of
+the block: their background will be extended to the edge of the
+window for Emacs version >= 27 where the ':extend' keyword is
+recognised by `set-face-attribute'.
+
+Option `rainbow' will use an accented background for the contents
+of the block. The exact colour will depend on the programming
+language and is controlled by the `org-src-block-faces'
+variable (refer to the theme's source code for the current
+association list)."
+ :type '(choice
+ (const :tag "No Org block background (default)" nil)
+ (const :tag "Subtle grey block background" greyscale)
+ (const :tag "Colour-coded background per programming language" rainbow)))
+
+(defcustom modus-operandi-theme-3d-modeline nil
+ "Use a three-dimensional style for the active mode line."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-subtle-diffs nil
+ "Use fewer/dim backgrounds in `diff-mode', `ediff',`magit'."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-intense-standard-completions
+ 'modus-operandi-theme-completions "`modus-operandi-theme' 0.12.0")
+
+(defcustom modus-operandi-theme-intense-standard-completions nil
+ "Use prominent backgrounds for Icomplete, Ido, or similar."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-completions nil
+ "Apply special styles to the UI of completion frameworks.
+This concerns Icomplete, Ivy, Helm, Selectrum, Ido, as well as
+any other tool meant to enhance their experience. The effect
+will vary depending on the completion framework.
+
+Nil means to remain faithful to the metaphors that each UI
+establishes. For example, Icomplete and Ido only use foreground
+colours to style their matches, whereas Ivy or Helm rely on an
+aesthetic that combines coloured backgrounds with appropriate
+text colour.
+
+Option `moderate' will apply a combination of background and
+foreground that is fairly subtle. For Icomplete and the like,
+this constitutes a departure from their standard style. While
+Ivy, Helm, and the others, will use less pronounced colours for
+applicable contexts.
+
+Option `opinionated' will apply colour combinations that
+refashion the completion UI. So Icomplete et al will now use
+styles that resemble the defaults of Ivy and co., while the
+latter group will revert to an even more nuanced aesthetic."
+ :type '(choice
+ (const :tag "Respect the framework's established aesthetic (default)" nil)
+ (const :tag "Subtle backgrounds for various elements" moderate)
+ (const :tag "Radical alternative to the framework's looks" opinionated)))
+
+(defcustom modus-operandi-theme-prompts nil
+ "Use subtle or intense styles for minibuffer and REPL prompts.
+
+Nil means to only use an accented foreground colour.
+
+Options `subtle' and `intense' will change both the background
+and the foreground values. The latter has a more pronounced
+effect than the former."
+ :type '(choice
+ (const :tag "No prompt background (default)" nil)
+ (const :tag "Subtle accented background for the prompt" subtle)
+ (const :tag "Intense background and foreground for the prompt" intense)))
+
+(defcustom modus-operandi-theme-intense-hl-line nil
+ "Use more prominent background for `hl-line-mode'."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-intense-paren-match nil
+ "Use more prominent colour for parenthesis matching."
+ :type 'boolean)
+
+(defcustom modus-operandi-theme-faint-syntax nil
+ "Use less saturated colours for code syntax highlighting."
+ :type 'boolean)
+
+;;; Internal functions
+
+;; Helper functions that are meant to ease the implementation of the
+;; above customisation options.
+(defun modus-operandi-theme-bold-weight ()
+ "Conditional use of a heavier text weight."
+ (when modus-operandi-theme-bold-constructs
+ (list :inherit 'bold)))
+
+(defun modus-operandi-theme-fringe (subtlebg intensebg)
+ "Conditional use of background colours for fringes.
+SUBTLEBG should be a subtle greyscale value. INTENSEBG must be a
+more pronounced greyscale colour."
+ (pcase modus-operandi-theme-fringes
+ ('intense (list :background intensebg))
+ ('subtle (list :background subtlebg))
+ (_ (list :background nil))))
+
+(defun modus-operandi-theme-prompt (mainfg subtlebg subtlefg intensebg intensefg)
+ "Conditional use of background colours for prompts.
+MAINFG is the prompt's standard foreground. SUBTLEBG should be a
+subtle accented background that works with SUBTLEFG. INTENSEBG
+must be a more pronounced accented colour that should be
+combinable with INTENSEFG."
+ (pcase modus-operandi-theme-prompts
+ ('intense (list :background intensebg :foreground intensefg))
+ ('subtle (list :background subtlebg :foreground subtlefg))
+ (_ (list :background nil :foreground mainfg))))
+
+(defun modus-operandi-theme-paren (normalbg intensebg)
+ "Conditional use of intense colours for matching parentheses.
+NORMALBG should the special palette colour 'bg-paren-match' or
+something similar. INTENSEBG must be easier to discern next to
+other backgrounds, such as the special palette colour
+'bg-paren-match-intense'."
+ (if modus-operandi-theme-intense-paren-match
+ (list :background intensebg)
+ (list :background normalbg)))
+
+(defun modus-operandi-theme-syntax-foreground (normal faint)
+ "Apply foreground value to code syntax.
+NORMAL is the more saturated colour, which should be the default.
+FAINT is the less saturated colour."
+ (if modus-operandi-theme-faint-syntax
+ (list :foreground faint)
+ (list :foreground normal)))
+
+(defun modus-operandi-theme-heading-foreground (subtle rainbow)
+ "Apply foreground value to headings.
+SUBTLE is the default aesthetic. RAINBOW is the saturated one."
+ (if modus-operandi-theme-rainbow-headings
+ (list :foreground rainbow)
+ (list :foreground subtle)))
+
+(defun modus-operandi-theme-heading-block (bg fg)
+ "Conditionally extend heading styles.
+Apply BG to background and FG to overline."
+ (if modus-operandi-theme-section-headings
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg :overline fg))
+ (list :background nil :overline nil)))
+
+(defun modus-operandi-theme-org-todo-block (bgbox fgbox fg)
+ "Conditionally extend the styles of Org keywords.
+BGBOX applies to the background. FGBOX applies to the foreground
+and the border. FG is used when no block style is in effect."
+ (if modus-operandi-theme-section-headings
+ (list :background bgbox :foreground fgbox :box (list :color fgbox))
+ (list :foreground fg)))
+
+(defun modus-operandi-theme-org-block (bgblk)
+ "Conditionally set the background of Org blocks.
+BGBLK applies to a distinct neutral background. Else blocks have
+no background of their own (the default), so they look the same
+as the rest of the buffer.
+
+`modus-operandi-theme-org-blocks' also accepts a `rainbow' option
+which is applied conditionally to `org-src-block-faces' (see the
+theme's source code)."
+ (if (eq modus-operandi-theme-org-blocks 'greyscale)
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bgblk))
+ (list :background nil)))
+
+(defun modus-operandi-theme-org-block-delim (bgaccent fgaccent bg fg)
+ "Conditionally set the styles of Org block delimiters.
+BG, FG, BGACCENT, FGACCENT apply a background and foreground
+colour respectively.
+
+The former pair is a greyscale combination that should be more
+distinct than the background of the block. It is applied to the
+default styles or when `modus-operandi-theme-org-blocks' is set
+to `greyscale'.
+
+The latter pair should be more subtle than the background of the
+block, as it is used when `modus-operandi-theme-org-blocks' is
+set to `rainbow'."
+ (pcase modus-operandi-theme-org-blocks
+ ('greyscale (append (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg :foreground fg)))
+ ('rainbow (list :background bgaccent :foreground fgaccent))
+ (_ (list :background bg :foreground fg))))
+
+(defun modus-operandi-theme-modeline-box (col3d col &optional btn int)
+ "Control the box properties of the mode line.
+COL3D is the border that is intended for the three-dimensional
+modeline. COL applies to the two-dimensional modeline. Optional
+BTN provides the 3d button style. Optional INT defines a border
+width."
+ (let* ((style (if btn 'released-button nil))
+ (int (if int int 1)))
+ (if modus-operandi-theme-3d-modeline
+ (list :line-width int :color col3d :style style)
+ (list :line-width 1 :color col :style nil))))
+
+(defun modus-operandi-theme-modeline-props (bg3d fg3d &optional bg fg)
+ "Control the background and foreground of the mode line.
+BG is the modeline's background. FG is the modeline's
+foreground. BG3D and FG3D apply to the three-dimensional
+modeline style."
+ (if modus-operandi-theme-3d-modeline
+ (list :background bg3d :foreground fg3d)
+ (list :background bg :foreground fg)))
+
+(defun modus-operandi-theme-diffs (subtle-bg subtle-fg intense-bg intense-fg)
+ "Colour combinations for `modus-operandi-theme-subtle-diffs'.
+
+SUBTLE-BG should be similar or the same as the main background.
+SUBTLE-FG should be an appropriate accent value. INTENSE-BG
+should be one of the dedicated backgrounds for diffs. INTENSE-FG
+should be one of the dedicated foregrounds for diffs"
+ (if modus-operandi-theme-subtle-diffs
+ (list :background subtle-bg :foreground subtle-fg)
+ (list :background intense-bg :foreground intense-fg)))
+
+(defun modus-operandi-theme-standard-completions (mainfg subtlebg intensebg intensefg)
+ "Combinations for `modus-operandi-theme-completions'.
+These are intended for Icomplete, Ido, and related.
+
+MAINFG is an accented foreground value. SUBTLEBG is an accented
+background value that can be combined with MAINFG. INTENSEBG and
+INTENSEFG are accented colours that are designed to be used in
+tandem."
+ (pcase modus-operandi-theme-completions
+ ('opinionated (list :background intensebg :foreground intensefg))
+ ('moderate (list :background subtlebg :foreground mainfg))
+ (_ (list :foreground mainfg))))
+
+(defun modus-operandi-theme-extra-completions (subtleface intenseface altface &optional altfg bold)
+ "Combinations for `modus-operandi-theme-completions'.
+These are intended for Helm, Ivy, Selectrum, etc.
+
+SUBTLEFACE and INTENSEFACE are custom theme faces that combine a
+background and foreground value. The difference between the two
+is a matter of degree.
+
+ALTFACE is a combination of colours that represents a departure
+from the UI's default aesthetics. Optional ALTFG is meant to be
+used in tandem with it.
+
+Optional BOLD will apply a heavier weight to the text."
+ (pcase modus-operandi-theme-completions
+ ('opinionated (list :inherit (list altface bold)
+ :foreground (if altfg altfg 'unspecified)))
+ ('moderate (list :inherit (list subtleface bold)))
+ (_ (list :inherit (list intenseface bold)))))
+
+(defun modus-operandi-theme-scale (amount)
+ "Scale heading by AMOUNT.
+
+AMOUNT is a customisation option."
+ (when modus-operandi-theme-scale-headings
+ (list :height amount)))
+
+;;; Colour palette
+
+;; Define colour palette. Each colour must have a >= 7:1 contrast
+;; ratio relative to the foreground/background colour it is rendered
+;; against.
+;;
+;; The design of the colour palette as a macro that maps it to faces is
+;; adapted from zenbern-theme.el, last seen at commit 7dd7968:
+;; https://github.com/bbatsov/zenburn-emacs
+(eval-and-compile
+ (defconst modus-operandi-theme-default-colors-alist
+ '(;; base values
+ ("bg-main" . "#ffffff") ("fg-main" . "#000000")
+ ("bg-alt" . "#f0f0f0") ("fg-alt" . "#505050")
+ ("bg-dim" . "#f8f8f8") ("fg-dim" . "#282828")
+ ;; specifically for on/off states (e.g. `mode-line')
+ ;;
+ ;; must be combined with themselves
+ ("bg-active" . "#e0e0e0") ("fg-active" . "#191919")
+ ("bg-inactive" . "#efedef") ("fg-inactive" . "#424242")
+ ;; special base values, used only for cases where the above
+ ;; fg-* or bg-* cannot or should not be used (to avoid confusion)
+ ;; must be combined with: {fg,bg}-{main,alt,dim}
+ ("bg-special-cold" . "#dde3f4") ("fg-special-cold" . "#093060")
+ ("bg-special-mild" . "#c4ede0") ("fg-special-mild" . "#184034")
+ ("bg-special-warm" . "#f0e0d4") ("fg-special-warm" . "#5d3026")
+ ("bg-special-calm" . "#f8ddea") ("fg-special-calm" . "#61284f")
+ ;; styles for the main constructs
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red" . "#a60000") ("green" . "#005e00")
+ ("yellow" . "#813e00") ("blue" . "#0030a6")
+ ("magenta" . "#721045") ("cyan" . "#00538b")
+ ;; styles for common, but still specialised constructs
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-alt" . "#972500") ("green-alt" . "#315b00")
+ ("yellow-alt" . "#70480f") ("blue-alt" . "#223fbf")
+ ("magenta-alt" . "#8f0075") ("cyan-alt" . "#30517f")
+ ;; same purpose as above, just slight differences
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-alt-other" . "#a0132f") ("green-alt-other" . "#145c33")
+ ("yellow-alt-other" . "#863927") ("blue-alt-other" . "#0000bb")
+ ("magenta-alt-other" . "#5317ac") ("cyan-alt-other" . "#005a5f")
+ ;; styles for desaturated foreground text, intended for use with
+ ;; the `modus-operandi-theme-faint-syntax' option
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-faint" . "#7f1010") ("green-faint" . "#104410")
+ ("yellow-faint" . "#5f4400") ("blue-faint" . "#002f88")
+ ("magenta-faint" . "#752f50") ("cyan-faint" . "#12506f")
+
+ ("red-alt-faint" . "#702f00") ("green-alt-faint" . "#30440f")
+ ("yellow-alt-faint" . "#5d5000") ("blue-alt-faint" . "#003f78")
+ ("magenta-alt-faint" . "#702565") ("cyan-alt-faint" . "#354f6f")
+
+ ("red-alt-other-faint" . "#7f002f") ("green-alt-other-faint" . "#0f443f")
+ ("yellow-alt-other-faint" . "#5e3a20") ("blue-alt-other-faint" . "#1f2f6f")
+ ("magenta-alt-other-faint" . "#5f3f7f") ("cyan-alt-other-faint" . "#2e584f")
+ ;; styles for elements that should be very subtle, yet accented
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim' or any of
+ ;; the "nuanced" backgrounds
+ ("red-nuanced" . "#5f0000") ("green-nuanced" . "#004000")
+ ("yellow-nuanced" . "#3f3000") ("blue-nuanced" . "#201f55")
+ ("magenta-nuanced" . "#541f4f") ("cyan-nuanced" . "#0f3360")
+ ;; styles for slightly accented background
+ ;;
+ ;; must be combined with any of the above foreground values
+ ("red-nuanced-bg" . "#fff1f0") ("green-nuanced-bg" . "#ecf7ed")
+ ("yellow-nuanced-bg" . "#fff3da") ("blue-nuanced-bg" . "#f3f3ff")
+ ("magenta-nuanced-bg" . "#fdf0ff") ("cyan-nuanced-bg" . "#ebf6fa")
+ ;; styles for elements that should draw attention to themselves
+ ;;
+ ;; must be combined with: `bg-main'
+ ("red-intense" . "#b60000") ("green-intense" . "#006800")
+ ("yellow-intense" . "#904200") ("blue-intense" . "#1111ee")
+ ("magenta-intense" . "#7000e0") ("cyan-intense" . "#205b93")
+ ;; styles for background elements that should be visible yet
+ ;; subtle
+ ;;
+ ;; must be combined with: `fg-dim'
+ ("red-subtle-bg" . "#f2b0a2") ("green-subtle-bg" . "#aecf90")
+ ("yellow-subtle-bg" . "#e4c340") ("blue-subtle-bg" . "#b5d0ff")
+ ("magenta-subtle-bg" . "#f0d3ff") ("cyan-subtle-bg" . "#c0efff")
+ ;; styles for background elements that should be visible and
+ ;; distinguishable
+ ;;
+ ;; must be combined with: `fg-main'
+ ("red-intense-bg" . "#ff8892") ("green-intense-bg" . "#5ada88")
+ ("yellow-intense-bg" . "#f5df23") ("blue-intense-bg" . "#6aaeff")
+ ("magenta-intense-bg" . "#d5baff") ("cyan-intense-bg" . "#42cbd4")
+ ;; styles for refined contexts where both the foreground and the
+ ;; background need to have the same/similar hue
+ ;;
+ ;; must be combined with themselves OR the foregrounds can be
+ ;; combined with any of the base backgrounds
+ ("red-refine-bg" . "#ffcccc") ("red-refine-fg" . "#780000")
+ ("green-refine-bg" . "#aceaac") ("green-refine-fg" . "#004c00")
+ ("yellow-refine-bg" . "#fff29a") ("yellow-refine-fg" . "#604000")
+ ("blue-refine-bg" . "#8ac7ff") ("blue-refine-fg" . "#002288")
+ ("magenta-refine-bg" . "#ffccff") ("magenta-refine-fg" . "#770077")
+ ("cyan-refine-bg" . "#8eecf4") ("cyan-refine-fg" . "#004850")
+ ;; styles that are meant exclusively for the mode line
+ ;;
+ ;; must be combined with: `bg-active', `bg-inactive'
+ ("red-active" . "#930000") ("green-active" . "#005300")
+ ("yellow-active" . "#703700") ("blue-active" . "#0033c0")
+ ("magenta-active" . "#6320a0") ("cyan-active" . "#004882")
+ ;; styles that are meant exclusively for the fringes
+ ;;
+ ;; must have a minimum contrast ratio of 1.5:1 with `bg-inactive'
+ ;; and be combined with `fg-main' or `fg-dim'
+ ("red-fringe-bg" . "#ff9a9a") ("green-fringe-bg" . "#86cf86")
+ ("yellow-fringe-bg" . "#e0c050") ("blue-fringe-bg" . "#82afff")
+ ("magenta-fringe-bg" . "#f0a3ff") ("cyan-fringe-bg" . "#00d6e0")
+ ;; styles reserved for specific faces
+ ;;
+ ;; `bg-hl-line' is between `bg-dim' and `bg-alt', so it should
+ ;; work with all accents that cover those two, plus `bg-main'
+ ;;
+ ;; `bg-header' is between `bg-active' and `bg-inactive', so it
+ ;; can be combined with any of the "active" values, plus the
+ ;; "special" and base foreground colours
+ ;;
+ ;; `bg-paren-match', `bg-paren-match-intense', `bg-region' and
+ ;; `bg-tab-active' must be combined with `fg-main', while
+ ;; `bg-tab-inactive' should be combined with `fg-dim'
+ ;;
+ ;; `bg-tab-bar' is only intended for the bar that holds the tabs and
+ ;; can only be combined with `fg-main'
+ ;;
+ ;; `fg-tab-active' is meant to be combined with `bg-tab-active',
+ ;; though only for styling special elements, such as underlining
+ ;; the current tab
+ ;;
+ ;; `fg-escape-char-construct' and `fg-escape-char-backslash' can
+ ;; be combined `bg-main', `bg-dim', `bg-alt'
+ ;;
+ ;; `fg-lang-error', `fg-lang-warning', `fg-lang-note' can be
+ ;; combined with `bg-main', `bg-dim', `bg-alt'
+ ;;
+ ;; `fg-mark-sel', `fg-mark-del', `fg-mark-alt' can be combined
+ ;; with `bg-main', `bg-dim', `bg-alt', `bg-hl-line'
+ ;;
+ ;; `fg-unfocused' must be combined with `fg-main'
+ ;;
+ ;; the window divider colours apply to faces with just an fg value
+ ;;
+ ;; all pairs are combinable with themselves
+ ("bg-hl-line" . "#f2eff3")
+ ("bg-paren-match" . "#e0af82")
+ ("bg-paren-match-intense" . "#70af9f")
+ ("bg-region" . "#bcbcbc")
+
+ ("bg-tab-bar" . "#d5d5d5")
+ ("bg-tab-active" . "#f6f6f6")
+ ("bg-tab-inactive" . "#bdbdbd")
+ ("fg-tab-active" . "#30169e")
+
+ ("fg-escape-char-construct" . "#8b1030")
+ ("fg-escape-char-backslash" . "#654d0f")
+
+ ("fg-lang-error" . "#9f004f")
+ ("fg-lang-warning" . "#604f0f")
+ ("fg-lang-note" . "#4040ae")
+
+ ("fg-window-divider-inner" . "#888888")
+ ("fg-window-divider-outer" . "#585858")
+
+ ("fg-unfocused" . "#56576d")
+
+ ("bg-header" . "#e5e5e5") ("fg-header" . "#2a2a2a")
+
+ ("bg-whitespace" . "#fff8fc") ("fg-whitespace" . "#645060")
+
+ ("bg-diff-heading" . "#b7c2dd") ("fg-diff-heading" . "#043355")
+ ("bg-diff-added" . "#d4fad4") ("fg-diff-added" . "#004500")
+ ("bg-diff-changed" . "#fcefcf") ("fg-diff-changed" . "#524200")
+ ("bg-diff-removed" . "#ffe8ef") ("fg-diff-removed" . "#691616")
+
+ ("bg-diff-refine-added" . "#94cf94") ("fg-diff-refine-added" . "#002a00")
+ ("bg-diff-refine-changed" . "#cccf8f") ("fg-diff-refine-changed" . "#302010")
+ ("bg-diff-refine-removed" . "#daa2b0") ("fg-diff-refine-removed" . "#400000")
+
+ ("bg-diff-focus-added" . "#bbeabb") ("fg-diff-focus-added" . "#002c00")
+ ("bg-diff-focus-changed" . "#ecdfbf") ("fg-diff-focus-changed" . "#392900")
+ ("bg-diff-focus-removed" . "#efcbcf") ("fg-diff-focus-removed" . "#4a0000")
+
+ ("bg-diff-neutral-0" . "#979797") ("fg-diff-neutral-0" . "#040404")
+ ("bg-diff-neutral-1" . "#b0b0b0") ("fg-diff-neutral-1" . "#252525")
+ ("bg-diff-neutral-2" . "#cccccc") ("fg-diff-neutral-2" . "#3a3a3a")
+
+ ("bg-mark-sel" . "#a0f0cf") ("fg-mark-sel" . "#005040")
+ ("bg-mark-del" . "#ffccbb") ("fg-mark-del" . "#840040")
+ ("bg-mark-alt" . "#f5d88f") ("fg-mark-alt" . "#782900"))
+ "The entire palette of `modus-operandi-theme'.
+Each element has the form (NAME . HEX).")
+
+ (defcustom modus-operandi-theme-override-colors-alist '()
+ "Association list of palette colour overrides.
+Values can be mapped to variables, using the same syntax as the
+one present in `modus-operandi-theme-default-colors-alist'.
+
+This is only meant for do-it-yourself usage, with the
+understanding that the user is responsible for the resulting
+contrast ratio between new and existing colours."
+ :type '(alist
+ :key-type (string :tag "Name")
+ :value-type (string :tag " Hex")))
+
+ (defmacro modus-operandi-theme-with-color-variables (&rest body)
+ "`let' bind all colours around BODY.
+Also bind `class' to ((class color) (min-colors 89))."
+ (declare (indent 0))
+ `(let ((class '((class color) (min-colors 89)))
+ ,@(mapcar (lambda (cons)
+ (list (intern (car cons)) (cdr cons)))
+ (append modus-operandi-theme-default-colors-alist
+ modus-operandi-theme-override-colors-alist))
+ ;; simple conditional styles that evaluate user-facing
+ ;; customisation options
+ (modus-theme-slant
+ (if modus-operandi-theme-slanted-constructs 'italic 'normal))
+ (modus-theme-variable-pitch
+ (if modus-operandi-theme-variable-pitch-headings 'variable-pitch 'default)))
+ ,@body)))
+
+
+
+;;; Faces
+
+(modus-operandi-theme-with-color-variables
+ (custom-theme-set-faces
+ 'modus-operandi
+;;;; custom faces
+ ;; these bespoke faces are inherited by other constructs below
+;;;;; subtle coloured backgrounds
+ `(modus-theme-subtle-red ((,class :background ,red-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-green ((,class :background ,green-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-yellow ((,class :background ,yellow-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-blue ((,class :background ,blue-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-magenta ((,class :background ,magenta-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-cyan ((,class :background ,cyan-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-neutral ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; intense coloured backgrounds
+ `(modus-theme-intense-red ((,class :background ,red-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-green ((,class :background ,green-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-yellow ((,class :background ,yellow-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-blue ((,class :background ,blue-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-magenta ((,class :background ,magenta-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-cyan ((,class :background ,cyan-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-neutral ((,class :background ,bg-active :foreground ,fg-main)))
+;;;;; refined background and foreground combinations
+ ;; general purpose styles that use an accented foreground against an
+ ;; accented background
+ `(modus-theme-refine-red ((,class :background ,red-refine-bg :foreground ,red-refine-fg)))
+ `(modus-theme-refine-green ((,class :background ,green-refine-bg :foreground ,green-refine-fg)))
+ `(modus-theme-refine-yellow ((,class :background ,yellow-refine-bg :foreground ,yellow-refine-fg)))
+ `(modus-theme-refine-blue ((,class :background ,blue-refine-bg :foreground ,blue-refine-fg)))
+ `(modus-theme-refine-magenta ((,class :background ,magenta-refine-bg :foreground ,magenta-refine-fg)))
+ `(modus-theme-refine-cyan ((,class :background ,cyan-refine-bg :foreground ,cyan-refine-fg)))
+;;;;; "active" combinations, mostly for use on the mode line
+ `(modus-theme-active-red ((,class :background ,red-active :foreground ,bg-active)))
+ `(modus-theme-active-green ((,class :background ,green-active :foreground ,bg-active)))
+ `(modus-theme-active-yellow ((,class :background ,yellow-active :foreground ,bg-active)))
+ `(modus-theme-active-blue ((,class :background ,blue-active :foreground ,bg-active)))
+ `(modus-theme-active-magenta ((,class :background ,magenta-active :foreground ,bg-active)))
+ `(modus-theme-active-cyan ((,class :background ,cyan-active :foreground ,bg-active)))
+;;;;; nuanced backgrounds
+ ;; useful for adding an accented background that is suitable for all
+ ;; main foreground colours (intended for use in Org source blocks)
+ `(modus-theme-nuanced-red ((,class :background ,red-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-green ((,class :background ,green-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-yellow ((,class :background ,yellow-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-blue ((,class :background ,blue-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-magenta ((,class :background ,magenta-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-cyan ((,class :background ,cyan-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+;;;;; fringe-specific combinations
+ `(modus-theme-fringe-red ((,class :background ,red-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-green ((,class :background ,green-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-yellow ((,class :background ,yellow-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-blue ((,class :background ,blue-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-magenta ((,class :background ,magenta-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-cyan ((,class :background ,cyan-fringe-bg :foreground ,fg-dim)))
+;;;;; special base values
+ ;; these are closer to the grayscale than the accents defined above
+ ;; and should only be used when the next closest alternative would be
+ ;; a greyscale value than an accented one
+ `(modus-theme-special-cold ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(modus-theme-special-mild ((,class :background ,bg-special-mild :foreground ,fg-special-mild)))
+ `(modus-theme-special-warm ((,class :background ,bg-special-warm :foreground ,fg-special-warm)))
+ `(modus-theme-special-calm ((,class :background ,bg-special-calm :foreground ,fg-special-calm)))
+;;;;; diff-specific combinations
+ ;; intended for `diff-mode' or equivalent
+ `(modus-theme-diff-added ((,class :background ,bg-diff-added :foreground ,fg-diff-added)))
+ `(modus-theme-diff-changed ((,class :background ,bg-diff-changed :foreground ,fg-diff-changed)))
+ `(modus-theme-diff-removed ((,class :background ,bg-diff-removed :foreground ,fg-diff-removed)))
+ `(modus-theme-diff-refine-added ((,class :background ,bg-diff-refine-added :foreground ,fg-diff-refine-added)))
+ `(modus-theme-diff-refine-changed ((,class :background ,bg-diff-refine-changed :foreground ,fg-diff-refine-changed)))
+ `(modus-theme-diff-refine-removed ((,class :background ,bg-diff-refine-removed :foreground ,fg-diff-refine-removed)))
+ `(modus-theme-diff-focus-added ((,class :background ,bg-diff-focus-added :foreground ,fg-diff-focus-added)))
+ `(modus-theme-diff-focus-changed ((,class :background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+ `(modus-theme-diff-focus-removed ((,class :background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+ `(modus-theme-diff-heading ((,class :background ,bg-diff-heading :foreground ,fg-diff-heading)))
+;;;;; mark indicators
+ ;; colour combinations intended for Dired, Ibuffer, or equivalent
+ `(modus-theme-header ((,class :inherit bold :foreground ,fg-main)))
+ `(modus-theme-mark-alt ((,class :inherit bold :background ,bg-mark-alt :foreground ,fg-mark-alt)))
+ `(modus-theme-mark-del ((,class :inherit bold :background ,bg-mark-del :foreground ,fg-mark-del)))
+ `(modus-theme-mark-sel ((,class :inherit bold :background ,bg-mark-sel :foreground ,fg-mark-sel)))
+ `(modus-theme-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; other custom faces
+ `(modus-theme-hl-line ((,class :background ,(if modus-operandi-theme-intense-hl-line
+ bg-active bg-hl-line)
+ (and (>= emacs-major-version 27) '(:extend t)))))
+;;;; standard faces
+;;;;; absolute essentials
+ `(default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(cursor ((,class :background ,fg-main)))
+ `(fringe ((,class ,@(modus-operandi-theme-fringe bg-inactive bg-active)
+ :foreground ,fg-main)))
+ `(vertical-border ((,class :foreground ,fg-window-divider-inner)))
+;;;;; basic and/or ungrouped styles
+ ;; Modify the `bold' face to change the weight of all "bold" elements
+ ;; defined by the theme. You need a typeface that supports a
+ ;; multitude of heavier weights than the regular one and then you
+ ;; must specify the exact name of the one you wish to apply. Example
+ ;; for your init.el:
+ ;;
+ ;; (set-face-attribute 'bold nil :weight 'semibold)
+ `(bold ((,class :weight bold)))
+ `(comint-highlight-input ((,class :inherit bold)))
+ `(comint-highlight-prompt ((,class ,@(modus-operandi-theme-bold-weight)
+ ,@(modus-operandi-theme-prompt cyan
+ blue-nuanced-bg
+ blue-alt
+ blue-refine-bg
+ fg-main))))
+ `(error ((,class :inherit bold :foreground ,red)))
+ `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
+ `(file-name-shadow ((,class :foreground ,fg-unfocused)))
+ `(header-line ((,class :background ,bg-header :foreground ,fg-header)))
+ `(header-line-highlight ((,class :inherit modus-theme-active-blue)))
+ `(homoglyph ((,class :foreground ,fg-escape-char-construct)))
+ `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other)))
+ `(italic ((,class :slant italic)))
+ `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
+ `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline t)))
+ `(minibuffer-prompt ((,class ,@(modus-operandi-theme-prompt cyan-alt-other
+ cyan-nuanced-bg
+ cyan
+ cyan-refine-bg
+ fg-main))))
+ `(mm-command-output ((,class :foreground ,red-alt-other)))
+ `(mm-uu-extract ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(next-error ((,class :inherit modus-theme-subtle-red)))
+ `(rectangle-preview ((,class :inherit modus-theme-special-mild)))
+ `(region ((,class :background ,bg-region :foreground ,fg-main)))
+ `(secondary-selection ((,class :inherit modus-theme-special-cold)))
+ `(shadow ((,class :foreground ,fg-alt)))
+ `(success ((,class :inherit bold :foreground ,green)))
+ `(trailing-whitespace ((,class :background ,red-intense-bg)))
+ `(warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; buttons, links, widgets
+ `(button ((,class :foreground ,blue-alt-other :underline t)))
+ `(link ((,class :foreground ,blue-alt-other :underline t)))
+ `(link-visited ((,class :foreground ,magenta-alt-other :underline t)))
+ `(tooltip ((,class :background ,bg-special-cold :foreground ,fg-main)))
+ `(widget-button ((,class :inherit button)))
+ `(widget-button-pressed ((,class :inherit button :foreground ,magenta)))
+ `(widget-documentation ((,class :foreground ,green)))
+ `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
+ `(widget-inactive ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(widget-single-line-field ((,class :inherit widget-field)))
+;;;;; ag
+ `(ag-hit-face ((,class :foreground ,fg-special-cold)))
+ `(ag-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; alert
+ `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
+ `(alert-low-face ((,class :foreground ,fg-special-mild)))
+ `(alert-moderate-face ((,class :inherit bold :foreground ,yellow)))
+ `(alert-trivial-face ((,class :foreground ,fg-special-calm)))
+ `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense)))
+;;;;; all-the-icons
+ `(all-the-icons-blue ((,class :foreground ,blue)))
+ `(all-the-icons-blue-alt ((,class :foreground ,blue-alt)))
+ `(all-the-icons-cyan ((,class :foreground ,cyan)))
+ `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt)))
+ `(all-the-icons-dblue ((,class :foreground ,blue-alt-other)))
+ `(all-the-icons-dcyan ((,class :foreground ,cyan-alt-other)))
+ `(all-the-icons-dgreen ((,class :foreground ,green-alt-other)))
+ `(all-the-icons-dired-dir-face ((,class :foreground ,blue)))
+ `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-other)))
+ `(all-the-icons-dorange ((,class :foreground ,red-alt-other)))
+ `(all-the-icons-dpink ((,class :foreground ,magenta)))
+ `(all-the-icons-dpurple ((,class :foreground ,magenta-alt)))
+ `(all-the-icons-dred ((,class :foreground ,red)))
+ `(all-the-icons-dsilver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-dyellow ((,class :foreground ,yellow)))
+ `(all-the-icons-green ((,class :foreground ,green)))
+ `(all-the-icons-lblue ((,class :foreground ,blue-refine-fg)))
+ `(all-the-icons-lcyan ((,class :foreground ,cyan-refine-fg)))
+ `(all-the-icons-lgreen ((,class :foreground ,green-refine-fg)))
+ `(all-the-icons-lmaroon ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lorange ((,class :foreground ,red-refine-fg)))
+ `(all-the-icons-lpink ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lpurple ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lred ((,class :foreground ,red-refine-fg)))
+ `(all-the-icons-lsilver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-lyellow ((,class :foreground ,yellow-refine-fg)))
+ `(all-the-icons-maroon ((,class :foreground ,magenta)))
+ `(all-the-icons-orange ((,class :foreground ,red-alt)))
+ `(all-the-icons-pink ((,class :foreground ,magenta)))
+ `(all-the-icons-purple ((,class :foreground ,magenta-alt)))
+ `(all-the-icons-purple-alt ((,class :foreground ,magenta-alt-other)))
+ `(all-the-icons-red ((,class :foreground ,red)))
+ `(all-the-icons-red-alt ((,class :foreground ,red-alt)))
+ `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-yellow ((,class :foreground ,yellow)))
+;;;;; annotate
+ `(annotate-annotation ((,class :inherit modus-theme-subtle-blue)))
+ `(annotate-annotation-secondary ((,class :inherit modus-theme-subtle-green)))
+ `(annotate-highlight ((,class :background ,blue-nuanced-bg :underline ,blue-intense)))
+ `(annotate-highlight-secondary ((,class :background ,green-nuanced-bg :underline ,green-intense)))
+;;;;; anzu
+ `(anzu-match-1 ((,class :inherit modus-theme-subtle-cyan)))
+ `(anzu-match-2 ((,class :inherit modus-theme-subtle-green)))
+ `(anzu-match-3 ((,class :inherit modus-theme-subtle-yellow)))
+ `(anzu-mode-line ((,class :inherit bold :foreground ,green-active)))
+ `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
+ `(anzu-replace-highlight ((,class :inherit modus-theme-refine-yellow :underline t)))
+ `(anzu-replace-to ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; apropos
+ `(apropos-function-button ((,class :foreground ,magenta-alt-other :underline t)))
+ `(apropos-keybinding ((,class :inherit bold :foreground ,cyan)))
+ `(apropos-misc-button ((,class :foreground ,cyan-alt-other :underline t)))
+ `(apropos-property ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt)))
+ `(apropos-symbol ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,blue-nuanced :underline t)))
+ `(apropos-user-option-button ((,class :foreground ,green-alt-other :underline t)))
+ `(apropos-variable-button ((,class :foreground ,blue :underline t)))
+;;;;; apt-sources-list
+ `(apt-sources-list-components ((,class :foreground ,cyan)))
+ `(apt-sources-list-options ((,class :foreground ,yellow)))
+ `(apt-sources-list-suite ((,class :foreground ,green)))
+ `(apt-sources-list-type ((,class :foreground ,magenta)))
+ `(apt-sources-list-uri ((,class :foreground ,blue)))
+;;;;; artbollocks-mode
+ `(artbollocks-face ((,class :foreground ,cyan-nuanced :underline ,fg-lang-note)))
+ `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt :foreground ,red-alt :underline t)))
+ `(artbollocks-passive-voice-face ((,class :foreground ,yellow-nuanced :underline ,fg-lang-warning)))
+ `(artbollocks-weasel-words-face ((,class :foreground ,red-nuanced :underline ,fg-lang-error)))
+;;;;; auctex and Tex
+ `(font-latex-bold-face ((,class :inherit bold :foreground ,fg-special-calm)))
+ `(font-latex-doctex-documentation-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(font-latex-doctex-preprocessor-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red-alt-other)))
+ `(font-latex-italic-face ((,class :foreground ,fg-special-calm :slant italic)))
+ `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
+ `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
+ `(font-latex-sectioning-0-face ((,class :inherit ,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-1-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-2-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-3-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-4-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-5-face ((,class :inherit ,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+ `(font-latex-sedate-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(font-latex-slide-title-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,cyan-nuanced
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(font-latex-string-face ((,class :foreground ,blue-alt)))
+ `(font-latex-subscript-face ((,class :height 0.95)))
+ `(font-latex-superscript-face ((,class :height 0.95)))
+ `(font-latex-verbatim-face ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(font-latex-warning-face ((,class :foreground ,yellow-alt-other)))
+ `(tex-match ((,class :foreground ,blue-alt-other)))
+ `(tex-verbatim ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(texinfo-heading ((,class :foreground ,magenta)))
+ `(TeX-error-description-error ((,class :inherit bold :foreground ,red)))
+ `(TeX-error-description-help ((,class :foreground ,blue)))
+ `(TeX-error-description-tex-said ((,class :foreground ,blue)))
+ `(TeX-error-description-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; auto-dim-other-buffers
+ `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
+;;;;; avy
+ `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(avy-goto-char-timer-face ((,class :inherit (modus-theme-intense-yellow bold))))
+ `(avy-lead-face ((,class :inherit (modus-theme-intense-magenta bold))))
+ `(avy-lead-face-0 ((,class :inherit (modus-theme-intense-blue bold))))
+ `(avy-lead-face-1 ((,class :inherit (modus-theme-intense-red bold))))
+ `(avy-lead-face-2 ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; aw (ace-window)
+ `(aw-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(aw-key-face ((,class :inherit bold :foreground ,blue-intense)))
+ `(aw-leading-char-face ((,class :inherit bold :height 1.5 :background ,bg-main :foreground ,red-intense)))
+ `(aw-minibuffer-leading-char-face ((,class :foreground ,magenta-active)))
+ `(aw-mode-line-face ((,class :inherit bold)))
+;;;;; bm
+ `(bm-face ((,class :inherit modus-theme-subtle-yellow
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(bm-fringe-face ((,class :inherit modus-theme-fringe-yellow)))
+ `(bm-fringe-persistent-face ((,class :inherit modus-theme-fringe-blue)))
+ `(bm-persistent-face ((,class :inherit modus-theme-intense-blue
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+;;;;; bongo
+ `(bongo-album-title ((,class :foreground ,cyan-active)))
+ `(bongo-artist ((,class :foreground ,magenta-active)))
+ `(bongo-currently-playing-track ((,class :inherit bold)))
+ `(bongo-elapsed-track-part ((,class :inherit modus-theme-subtle-magenta :underline t)))
+ `(bongo-filled-seek-bar ((,class :background ,blue-subtle-bg :foreground ,fg-main)))
+ `(bongo-marked-track ((,class :foreground ,fg-mark-alt)))
+ `(bongo-marked-track-line ((,class :background ,bg-mark-alt)))
+ `(bongo-played-track ((,class :foreground ,fg-unfocused :strike-through t)))
+ `(bongo-track-length ((,class :foreground ,blue-alt-other)))
+ `(bongo-track-title ((,class :foreground ,blue-active)))
+ `(bongo-unfilled-seek-bar ((,class :background ,blue-nuanced-bg :foreground ,fg-main)))
+;;;;; boon
+ `(boon-modeline-cmd ((,class :inherit modus-theme-active-blue)))
+ `(boon-modeline-ins ((,class :inherit modus-theme-active-red)))
+ `(boon-modeline-off ((,class :inherit modus-theme-active-yellow)))
+ `(boon-modeline-spc ((,class :inherit modus-theme-active-green)))
+;;;;; breakpoint (built-in gdb-mi.el)
+ `(breakpoint-disabled ((,class :foreground ,fg-alt)))
+ `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
+;;;;; buffer-expose
+ `(buffer-expose-ace-char-face ((,class :inherit bold :foreground ,red-active)))
+ `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
+ `(buffer-expose-selected-face ((,class :inherit modus-theme-special-mild)))
+;;;;; calendar and diary
+ `(calendar-month-header ((,class :inherit bold :foreground ,fg-main)))
+ `(calendar-today ((,class :underline t)))
+ `(calendar-weekday-header ((,class :foreground ,fg-dim)))
+ `(calendar-weekend-header ((,class :foreground ,fg-alt)))
+ `(diary ((,class :foreground ,cyan-alt-other)))
+ `(diary-anniversary ((,class :foreground ,red-alt-other)))
+ `(diary-time ((,class :foreground ,blue-alt)))
+ `(holiday ((,class :foreground ,magenta-alt)))
+;;;;; calfw
+ `(cfw:face-annotation ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(cfw:face-day-title ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(cfw:face-default-content ((,class :foreground ,green-alt)))
+ `(cfw:face-default-day ((,class :inherit (cfw:face-day-title bold))))
+ `(cfw:face-disable ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(cfw:face-grid ((,class :foreground ,fg-inactive)))
+ `(cfw:face-header ((,class :inherit bold ::foreground ,fg-main)))
+ `(cfw:face-holiday ((,class :inherit bold :background ,bg-alt :foreground ,magenta)))
+ `(cfw:face-periods ((,class :foreground ,cyan-alt-other)))
+ `(cfw:face-saturday ((,class :inherit bold :background ,bg-alt :foreground ,magenta-alt)))
+ `(cfw:face-select ((,class :inherit modus-theme-intense-blue)))
+ `(cfw:face-sunday ((,class :inherit bold :background ,bg-alt :foreground ,magenta-alt-other)))
+ `(cfw:face-title ((,class :inherit ,modus-theme-variable-pitch
+ :foreground ,fg-special-warm
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(cfw:face-today ((,class :inherit bold :foreground ,blue)))
+ `(cfw:face-today-title ((,class :inherit modus-theme-special-mild :box t)))
+ `(cfw:face-toolbar ((,class :background ,bg-active :foreground ,bg-active)))
+ `(cfw:face-toolbar-button-off ((,class :background ,bg-alt :foreground ,cyan)))
+ `(cfw:face-toolbar-button-on ((,class :inherit bold :background ,bg-main :foreground ,blue-intense)))
+;;;;; centaur-tabs
+ `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-active)))
+ `(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground ,red-active :underline t)))
+ `(centaur-tabs-close-selected ((,class :inherit centaur-tabs-selected)))
+ `(centaur-tabs-close-unselected ((,class :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-modified-marker-selected ((,class :inherit centaur-tabs-selected)))
+ `(centaur-tabs-modified-marker-unselected ((,class :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-default ((,class :background ,bg-main :foreground ,bg-main)))
+ `(centaur-tabs-selected ((,class :inherit bold :background ,bg-tab-active :foreground ,fg-main)))
+ `(centaur-tabs-selected-modified ((,class :background ,bg-tab-active :foreground ,fg-main :slant italic)))
+ `(centaur-tabs-unselected ((,class :background ,bg-tab-inactive :foreground ,fg-dim)))
+ `(centaur-tabs-unselected-modified ((,class :background ,bg-tab-inactive :foreground ,fg-dim :slant italic)))
+;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+ `(change-log-acknowledgment ((,class :foreground ,fg-alt)))
+ `(change-log-conditionals ((,class :foreground ,magenta-alt)))
+ `(change-log-date ((,class :foreground ,cyan-alt-other)))
+ `(change-log-email ((,class :foreground ,cyan)))
+ `(change-log-file ((,class :foreground ,blue)))
+ `(change-log-function ((,class :foreground ,green-alt-other)))
+ `(change-log-list ((,class :foreground ,magenta-alt-other)))
+ `(change-log-name ((,class :foreground ,cyan)))
+ `(log-edit-header ((,class :inherit bold :foreground ,green-alt-other)))
+ `(log-edit-summary ((,class :foreground ,magenta-alt-other)))
+ `(log-edit-unknown-header ((,class :foreground ,fg-alt)))
+ `(log-view-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(log-view-message ((,class :foreground ,fg-alt)))
+;;;;; cider
+ `(cider-debug-code-overlay-face ((,class :background ,bg-alt)))
+ `(cider-debug-prompt-face ((,class :foreground ,magenta-alt :underline t)))
+ `(cider-deprecated-face ((,class :inherit modus-theme-refine-yellow)))
+ `(cider-docview-emphasis-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(cider-docview-literal-face ((,class :foreground ,blue-alt)))
+ `(cider-docview-strong-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(cider-docview-table-border-face ((,class :foreground ,fg-alt)))
+ `(cider-enlightened-face ((,class :box (:line-width -1 :color ,yellow-alt :style nil) :background ,bg-dim)))
+ `(cider-enlightened-local-face ((,class :inherit bold :foreground ,yellow-alt-other)))
+ `(cider-error-highlight-face ((,class :foreground ,red :underline t)))
+ `(cider-fragile-button-face ((,class :box (:line-width 3 :color ,fg-alt :style released-button) :foreground ,yellow)))
+ `(cider-fringe-good-face ((,class :foreground ,green-active)))
+ `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style nil) :background ,bg-dim)))
+ `(cider-reader-conditional-face ((,class :foreground ,fg-special-warm :slant italic)))
+ `(cider-repl-input-face ((,class :inherit bold)))
+ `(cider-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+ `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
+ `(cider-repl-stdout-face ((,class :foreground ,blue)))
+ `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue :style nil) :background ,bg-dim)))
+ `(cider-stacktrace-error-class-face ((,class :inherit bold :foreground ,red)))
+ `(cider-stacktrace-error-message-face ((,class :foreground ,red-alt-other :slant italic)))
+ `(cider-stacktrace-face ((,class :foreground ,fg-main)))
+ `(cider-stacktrace-filter-active-face ((,class :foreground ,cyan-alt :underline t)))
+ `(cider-stacktrace-filter-inactive-face ((,class :foreground ,cyan-alt)))
+ `(cider-stacktrace-fn-face ((,class :inherit bold :foreground ,fg-main)))
+ `(cider-stacktrace-ns-face ((,class :foreground ,fg-alt :slant italic)))
+ `(cider-stacktrace-promoted-button-face ((,class :box (:line-width 3 :color ,fg-alt :style released-button) :foreground ,red)))
+ `(cider-stacktrace-suppressed-button-face ((,class :box (:line-width 3 :color ,fg-alt :style pressed-button)
+ :background ,bg-alt :foreground ,fg-alt)))
+ `(cider-test-error-face ((,class :inherit modus-theme-subtle-red)))
+ `(cider-test-failure-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(cider-test-success-face ((,class :inherit modus-theme-intense-green)))
+ `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) :background ,bg-dim)))
+ `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
+;;;;; circe (and lui)
+ `(circe-fool-face ((,class :foreground ,fg-alt)))
+ `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
+ `(circe-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(circe-server-face ((,class :foreground ,fg-unfocused)))
+ `(lui-button-face ((,class :foreground ,blue :underline t)))
+ `(lui-highlight-face ((,class :foreground ,magenta-alt)))
+ `(lui-time-stamp-face ((,class :foreground ,blue-nuanced)))
+;;;;; color-rg
+ `(color-rg-font-lock-column-number ((,class :foreground ,magenta-alt-other)))
+ `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
+ `(color-rg-font-lock-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(color-rg-font-lock-flash ((,class :inherit modus-theme-intense-blue)))
+ `(color-rg-font-lock-function-location ((,class :inherit modus-theme-special-calm)))
+ `(color-rg-font-lock-header-line-directory ((,class :foreground ,blue-active)))
+ `(color-rg-font-lock-header-line-edit-mode ((,class :foreground ,magenta-active)))
+ `(color-rg-font-lock-header-line-keyword ((,class :foreground ,green-active)))
+ `(color-rg-font-lock-header-line-text ((,class :foreground ,fg-active)))
+ `(color-rg-font-lock-line-number ((,class :foreground ,fg-special-warm)))
+ `(color-rg-font-lock-mark-changed ((,class :inherit bold :foreground ,blue)))
+ `(color-rg-font-lock-mark-deleted ((,class :inherit bold :foreground ,red)))
+ `(color-rg-font-lock-match ((,class :inherit modus-theme-special-calm)))
+ `(color-rg-font-lock-position-splitter ((,class :foreground ,fg-alt)))
+;;;;; column-enforce-mode
+ `(column-enforce-face ((,class :inherit modus-theme-refine-yellow)))
+;;;;; company-mode
+ `(company-echo-common ((,class :foreground ,magenta-alt-other)))
+ `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(company-preview-common ((,class :foreground ,blue-alt)))
+ `(company-preview-search ((,class :inherit modus-theme-special-calm)))
+ `(company-scrollbar-bg ((,class :background ,bg-active)))
+ `(company-scrollbar-fg ((,class :background ,fg-active)))
+ `(company-template-field ((,class :inherit modus-theme-intense-magenta)))
+ `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(company-tooltip-annotation ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(company-tooltip-annotation-selection ((,class :inherit bold :foreground ,fg-main)))
+ `(company-tooltip-common ((,class :inherit bold :foreground ,blue-alt)))
+ `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
+ `(company-tooltip-mouse ((,class :inherit modus-theme-intense-blue)))
+ `(company-tooltip-search ((,class :inherit (modus-theme-refine-cyan bold))))
+ `(company-tooltip-search-selection ((,class :inherit (modus-theme-intense-green bold) :underline t)))
+ `(company-tooltip-selection ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; company-posframe
+ `(company-posframe-active-backend-name ((,class :inherit bold :background ,bg-active :foreground ,blue-active)))
+ `(company-posframe-inactive-backend-name ((,class :background ,bg-active :foreground ,fg-active)))
+ `(company-posframe-metadata ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; compilation feedback
+ `(compilation-column-number ((,class :foreground ,magenta-alt-other)))
+ `(compilation-error ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red)))
+ `(compilation-info ((,class :foreground ,fg-special-cold)))
+ `(compilation-line-number ((,class :foreground ,fg-special-warm)))
+ `(compilation-mode-line-exit ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,blue-active)))
+ `(compilation-mode-line-fail ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red-active)))
+ `(compilation-mode-line-run ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-active)))
+ `(compilation-warning ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,yellow)))
+;;;;; completions
+ `(completions-annotations ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(completions-common-part ((,class ,@(modus-operandi-theme-standard-completions
+ cyan-alt-other cyan-nuanced-bg
+ yellow-refine-bg yellow-refine-fg))))
+ `(completions-first-difference ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ blue-alt-other blue-nuanced-bg
+ cyan-subtle-bg fg-dim))))
+;;;;; counsel
+ `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
+ `(counsel-application-name ((,class :foreground ,red-alt-other)))
+ `(counsel-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(counsel-outline-1 ((,class :inherit outline-1)))
+ `(counsel-outline-2 ((,class :inherit outline-2)))
+ `(counsel-outline-3 ((,class :inherit outline-3)))
+ `(counsel-outline-4 ((,class :inherit outline-4)))
+ `(counsel-outline-5 ((,class :inherit outline-5)))
+ `(counsel-outline-6 ((,class :inherit outline-6)))
+ `(counsel-outline-7 ((,class :inherit outline-7)))
+ `(counsel-outline-8 ((,class :inherit outline-8)))
+ `(counsel-outline-default ((,class :inherit bold :foreground ,green-alt-other)))
+ `(counsel-variable-documentation ((,class :foreground ,yellow-alt-other :slant ,modus-theme-slant)))
+;;;;; counsel-css
+ `(counsel-css-selector-depth-face-1 ((,class :foreground ,blue)))
+ `(counsel-css-selector-depth-face-2 ((,class :foreground ,cyan)))
+ `(counsel-css-selector-depth-face-3 ((,class :foreground ,green)))
+ `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
+ `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
+ `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
+;;;;; counsel-notmuch
+ `(counsel-notmuch-count-face ((,class :foreground ,cyan)))
+ `(counsel-notmuch-date-face ((,class :foreground ,blue)))
+ `(counsel-notmuch-people-face ((,class :foreground ,magenta)))
+ `(counsel-notmuch-subject-face ((,class :foreground ,magenta-alt-other)))
+;;;;; counsel-org-capture-string
+ `(counsel-org-capture-string-template-body-face ((,class :foreground ,fg-special-cold)))
+;;;;; cov
+ `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
+ `(cov-coverage-run-face ((,class :foreground ,green-intense)))
+ `(cov-heavy-face ((,class :foreground ,magenta-intense)))
+ `(cov-light-face ((,class :foreground ,blue-intense)))
+ `(cov-med-face ((,class :foreground ,yellow-intense)))
+ `(cov-none-face ((,class :foreground ,cyan-intense)))
+;;;;; csv-mode
+ `(csv-separator-face ((,class :background ,bg-special-cold :foreground ,fg-main)))
+;;;;; ctrlf
+ `(ctrlf-highlight-active ((,class :inherit (modus-theme-intense-green bold))))
+ `(ctrlf-highlight-line ((,class :inherit modus-theme-hl-line)))
+ `(ctrlf-highlight-passive ((,class :inherit modus-theme-refine-cyan)))
+;;;;; custom (M-x customize)
+ `(custom-button ((,class :box (:line-width 2 :color nil :style released-button)
+ :background ,bg-active :foreground ,fg-main)))
+ `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style released-button)
+ :background ,bg-active :foreground ,fg-active)))
+ `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style pressed-button)
+ :background ,bg-active :foreground ,fg-main)))
+ `(custom-changed ((,class :inherit modus-theme-subtle-cyan)))
+ `(custom-comment ((,class :foreground ,fg-alt)))
+ `(custom-comment-tag ((,class :background ,bg-alt :foreground ,yellow-alt-other)))
+ `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
+ `(custom-group-tag ((,class :inherit bold :foreground ,green-intense)))
+ `(custom-group-tag-1 ((,class :inherit modus-theme-special-warm)))
+ `(custom-invalid ((,class :inherit (modus-theme-intense-red bold))))
+ `(custom-modified ((,class :inherit modus-theme-subtle-cyan)))
+ `(custom-rogue ((,class :inherit modus-theme-refine-magenta)))
+ `(custom-set ((,class :foreground ,blue-alt)))
+ `(custom-state ((,class :foreground ,cyan-alt-other)))
+ `(custom-themed ((,class :inherit modus-theme-subtle-blue)))
+ `(custom-variable-tag ((,class :inherit bold :foreground ,cyan)))
+;;;;; dap-mode
+ `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color ,blue-active :style nil)
+ :background ,bg-active :foreground ,fg-main)))
+ `(dap-result-overlay-face ((,class :box (:line-width -1 :color ,bg-active :style nil)
+ :background ,bg-active :foreground ,fg-main)))
+ `(dap-ui-breakpoint-verified-fringe ((,class :inherit bold :foreground ,green-active)))
+ `(dap-ui-compile-errline ((,class :inherit bold :foreground ,red-intense)))
+ `(dap-ui-locals-scope-face ((,class :inherit bold :foreground ,magenta :underline t)))
+ `(dap-ui-locals-variable-face ((,class :inherit bold :foreground ,cyan)))
+ `(dap-ui-locals-variable-leaf-face ((,class :foreground ,cyan-alt-other :slant italic)))
+ `(dap-ui-marker-face ((,class :inherit modus-theme-subtle-blue)))
+ `(dap-ui-sessions-stack-frame-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(dap-ui-sessions-terminated-active-face ((,class :inherit bold :foreground ,fg-alt)))
+ `(dap-ui-sessions-terminated-face ((,class :foreground ,fg-alt)))
+;;;;; dashboard (emacs-dashboard)
+ `(dashboard-banner-logo-title ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(dashboard-footer ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(dashboard-heading ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(dashboard-navigator ((,class :foreground ,cyan-alt-other)))
+ `(dashboard-text-banner ((,class :foreground ,fg-dim)))
+;;;;; deadgrep
+ `(deadgrep-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(deadgrep-match-face ((,class :inherit modus-theme-special-calm)))
+ `(deadgrep-meta-face ((,class :foreground ,fg-alt)))
+ `(deadgrep-regexp-metachar-face ((,class :inherit bold :foreground ,yellow-intense)))
+ `(deadgrep-search-term-face ((,class :inherit bold :foreground ,green-intense)))
+;;;;; debbugs
+ `(debbugs-gnu-archived ((,class :inverse-video t)))
+ `(debbugs-gnu-done ((,class :foreground ,fg-alt)))
+ `(debbugs-gnu-forwarded ((,class :foreground ,fg-special-warm)))
+ `(debbugs-gnu-handled ((,class :foreground ,green)))
+ `(debbugs-gnu-new ((,class :foreground ,red)))
+ `(debbugs-gnu-pending ((,class :foreground ,cyan)))
+ `(debbugs-gnu-stale-1 ((,class :foreground ,yellow-nuanced)))
+ `(debbugs-gnu-stale-2 ((,class :foreground ,yellow)))
+ `(debbugs-gnu-stale-3 ((,class :foreground ,yellow-alt)))
+ `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
+ `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
+ `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
+;;;;; define-word
+ `(define-word-face-1 ((,class :foreground ,yellow)))
+ `(define-word-face-2 ((,class :foreground ,fg-main)))
+;;;;; deft
+ `(deft-filter-string-error-face ((,class :inherit modus-theme-refine-red)))
+ `(deft-filter-string-face ((,class :foreground ,green-intense)))
+ `(deft-header-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(deft-separator-face ((,class :foreground ,fg-alt)))
+ `(deft-summary-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(deft-time-face ((,class :foreground ,fg-special-cold)))
+ `(deft-title-face ((,class :inherit bold :foreground ,fg-main)))
+;;;;; dictionary
+ `(dictionary-button-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(dictionary-reference-face ((,class :foreground ,blue-alt-other :underline t)))
+ `(dictionary-word-definition-face ((,class :foreground ,fg-main)))
+ `(dictionary-word-entry-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+;;;;; diff-hl
+ `(diff-hl-change ((,class :inherit modus-theme-fringe-yellow)))
+ `(diff-hl-delete ((,class :inherit modus-theme-fringe-red)))
+ `(diff-hl-dired-change ((,class :inherit diff-hl-change)))
+ `(diff-hl-dired-delete ((,class :inherit diff-hl-delete)))
+ `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
+ `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
+ `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
+ `(diff-hl-insert ((,class :inherit modus-theme-fringe-green)))
+ `(diff-hl-reverted-hunk-highlight ((,class :inherit (modus-theme-active-magenta bold))))
+;;;;; diff-mode
+ `(diff-added ((,class ,@(modus-operandi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(diff-changed ((,class ,@(modus-operandi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(diff-context ((,class :foreground ,fg-unfocused)))
+ `(diff-file-header ((,class :inherit bold :foreground ,blue)))
+ `(diff-function ((,class :foreground ,fg-special-cold)))
+ `(diff-header ((,class :foreground ,blue-nuanced)))
+ `(diff-hunk-header ((,class ,@(modus-operandi-theme-diffs
+ bg-alt blue-alt
+ bg-diff-heading fg-diff-heading))))
+ `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
+ `(diff-indicator-added ((,class :inherit diff-added)))
+ `(diff-indicator-changed ((,class :inherit diff-changed)))
+ `(diff-indicator-removed ((,class :inherit diff-removed)))
+ `(diff-nonexistent ((,class :inherit (modus-theme-neutral bold))))
+ `(diff-refine-added ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(diff-refine-changed ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-changed fg-diff-changed
+ bg-diff-refine-changed fg-diff-refine-changed))))
+ `(diff-refine-removed ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-removed fg-diff-removed
+ bg-diff-refine-removed fg-diff-refine-removed))))
+ `(diff-removed ((,class ,@(modus-operandi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; dim-autoload
+ `(dim-autoload-cookie-line ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; dired
+ `(dired-directory ((,class :foreground ,blue)))
+ `(dired-flagged ((,class :inherit modus-theme-mark-del)))
+ `(dired-header ((,class :inherit modus-theme-header)))
+ `(dired-ignored ((,class :foreground ,fg-alt)))
+ `(dired-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(dired-marked ((,class :inherit modus-theme-mark-sel)))
+ `(dired-perm-write ((,class :foreground ,fg-special-warm)))
+ `(dired-symlink ((,class :foreground ,cyan-alt :underline t)))
+ `(dired-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; dired-async
+ `(dired-async-failures ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red-active)))
+ `(dired-async-message ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,green-active)))
+ `(dired-async-mode-message ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,cyan-active)))
+;;;;; dired-git
+ `(dired-git-branch-else ((,class :inherit bold :foreground ,magenta-alt)))
+ `(dired-git-branch-master ((,class :inherit bold :foreground ,magenta-alt-other)))
+;;;;; dired-git-info
+ `(dgi-commit-message-face ((,class :foreground ,fg-special-mild)))
+;;;;; dired-narrow
+ `(dired-narrow-blink ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; dired-subtree
+ ;; remove background from dired-subtree, else it breaks
+ ;; dired-{flagged,marked} and any other face that sets a background
+ ;; such as hl-line
+ `(dired-subtree-depth-1-face ((,class :background nil)))
+ `(dired-subtree-depth-2-face ((,class :background nil)))
+ `(dired-subtree-depth-3-face ((,class :background nil)))
+ `(dired-subtree-depth-4-face ((,class :background nil)))
+ `(dired-subtree-depth-5-face ((,class :background nil)))
+ `(dired-subtree-depth-6-face ((,class :background nil)))
+;;;;; diredfl
+ `(diredfl-autofile-name ((,class :inherit modus-theme-special-cold)))
+ `(diredfl-compressed-file-name ((,class :foreground ,green-alt-other)))
+ `(diredfl-compressed-file-suffix ((,class :foreground ,green-alt)))
+ `(diredfl-date-time ((,class :foreground ,fg-special-cold)))
+ `(diredfl-deletion ((,class :inherit modus-theme-mark-del)))
+ `(diredfl-deletion-file-name ((,class :inherit modus-theme-mark-del)))
+ `(diredfl-dir-heading ((,class :inherit modus-theme-header)))
+ `(diredfl-dir-name ((,class :inherit dired-directory)))
+ `(diredfl-dir-priv ((,class :foreground ,blue)))
+ `(diredfl-exec-priv ((,class :foreground ,red-alt-other)))
+ `(diredfl-executable-tag ((,class :foreground ,red-alt)))
+ `(diredfl-file-name ((,class :foreground ,fg-main)))
+ `(diredfl-file-suffix ((,class :foreground ,fg-special-warm)))
+ `(diredfl-flag-mark ((,class :inherit modus-theme-mark-sel)))
+ `(diredfl-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+ `(diredfl-ignored-file-name ((,class :foreground ,fg-inactive)))
+ `(diredfl-link-priv ((,class :foreground ,blue-alt-other)))
+ `(diredfl-no-priv ((,class :foreground ,fg-inactive)))
+ `(diredfl-number ((,class :foreground ,cyan)))
+ `(diredfl-other-priv ((,class :foreground ,yellow)))
+ `(diredfl-rare-priv ((,class :foreground ,magenta-alt-other)))
+ `(diredfl-read-priv ((,class :foreground ,magenta)))
+ `(diredfl-symlink ((,class :foreground ,cyan-alt :underline t)))
+ `(diredfl-tagged-autofile-name ((,class :inherit modus-theme-refine-magenta)))
+ `(diredfl-write-priv ((,class :foreground ,cyan-alt-other)))
+;;;;; disk-usage
+ `(disk-usage-children ((,class :foreground ,yellow)))
+ `(disk-usage-inaccessible ((,class :inherit bold :foreground ,red)))
+ `(disk-usage-percent ((,class :foreground ,green)))
+ `(disk-usage-size ((,class :foreground ,cyan)))
+ `(disk-usage-symlink ((,class :foreground ,blue :underline t)))
+ `(disk-usage-symlink-directory ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; doom-modeline
+ `(doom-modeline-bar ((,class :inherit modus-theme-active-blue)))
+ `(doom-modeline-bar-inactive ((,class :background ,fg-inactive :foreground ,bg-main)))
+ `(doom-modeline-battery-charging ((,class :foreground ,green-active)))
+ `(doom-modeline-battery-critical ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-battery-error ((,class :inherit modus-theme-active-red)))
+ `(doom-modeline-battery-full ((,class :foreground ,blue-active)))
+ `(doom-modeline-battery-normal ((,class :foreground ,fg-active)))
+ `(doom-modeline-battery-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-buffer-file ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-buffer-major-mode ((,class :inherit bold :foreground ,cyan-active)))
+ `(doom-modeline-buffer-minor-mode ((,class :foreground ,fg-inactive)))
+ `(doom-modeline-buffer-modified ((,class :inherit bold :foreground ,magenta-active)))
+ `(doom-modeline-buffer-path ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-debug ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-debug-visual ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-evil-emacs-state ((,class :inherit bold :foreground ,magenta-active)))
+ `(doom-modeline-evil-insert-state ((,class :inherit bold :foreground ,green-active)))
+ `(doom-modeline-evil-motion-state ((,class :inherit bold :foreground ,fg-inactive)))
+ `(doom-modeline-evil-normal-state ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-evil-operator-state ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-evil-replace-state ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-evil-visual-state ((,class :inherit bold :foreground ,cyan-active)))
+ `(doom-modeline-highlight ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-host ((,class :slant italic)))
+ `(doom-modeline-info ((,class :foreground ,green-active)))
+ `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-lsp-success ((,class :inherit bold :foreground ,green-active)))
+ `(doom-modeline-lsp-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-panel ((,class :inherit modus-theme-active-blue)))
+ `(doom-modeline-persp-buffer-not-in-persp ((,class :foreground ,yellow-active :slant italic)))
+ `(doom-modeline-persp-name ((,class :foreground ,fg-active)))
+ `(doom-modeline-project-dir ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-project-parent-dir ((,class :foreground ,blue-active)))
+ `(doom-modeline-project-root-dir ((,class :foreground ,fg-active)))
+ `(doom-modeline-unread-number ((,class :foreground ,fg-active :slant italic)))
+ `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; dynamic-ruler
+ `(dynamic-ruler-negative-face ((,class :inherit modus-theme-intense-neutral)))
+ `(dynamic-ruler-positive-face ((,class :inherit modus-theme-intense-yellow)))
+;;;;; easy-jekyll
+ `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground ,cyan-alt-other)))
+;;;;; easy-kill
+ `(easy-kill-origin ((,class :inherit modus-theme-subtle-red)))
+ `(easy-kill-selection ((,class :inherit modus-theme-subtle-yellow)))
+;;;;; ebdb
+ `(ebdb-address-default ((,class :foreground ,fg-main)))
+ `(ebdb-db-char ((,class :foreground ,fg-special-cold)))
+ `(ebdb-defunct ((,class :foreground ,fg-alt)))
+ `(ebdb-field-hidden ((,class :foreground ,magenta)))
+ `(ebdb-field-url ((,class :foreground ,blue)))
+ `(ebdb-label ((,class :foreground ,cyan-alt-other)))
+ `(ebdb-mail-default ((,class :foreground ,fg-main)))
+ `(ebdb-mail-primary ((,class :foreground ,blue-alt)))
+ `(ebdb-marked ((,class :background ,cyan-intense-bg)))
+ `(ebdb-organization-name ((,class :foreground ,fg-special-calm)))
+ `(ebdb-person-name ((,class :foreground ,magenta-alt-other)))
+ `(ebdb-phone-default ((,class :foreground ,fg-special-warm)))
+ `(ebdb-role-defunct ((,class :foreground ,fg-alt)))
+ `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
+;;;;; ediff
+ `(ediff-current-diff-A ((,class ,@(modus-operandi-theme-diffs
+ bg-alt red
+ bg-diff-removed fg-diff-removed))))
+ `(ediff-current-diff-Ancestor ((,class ,@(modus-operandi-theme-diffs
+ bg-alt fg-special-cold
+ bg-special-cold fg-special-cold))))
+ `(ediff-current-diff-B ((,class ,@(modus-operandi-theme-diffs
+ bg-alt green
+ bg-diff-added fg-diff-added))))
+ `(ediff-current-diff-C ((,class ,@(modus-operandi-theme-diffs
+ bg-alt yellow
+ bg-diff-changed fg-diff-changed))))
+ `(ediff-even-diff-A ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-Ancestor ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-B ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-C ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-fine-diff-A ((,class :background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+ `(ediff-fine-diff-Ancestor ((,class :inherit modus-theme-refine-cyan)))
+ `(ediff-fine-diff-B ((,class :background ,bg-diff-focus-added :foreground ,fg-diff-focus-added)))
+ `(ediff-fine-diff-C ((,class :background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+ `(ediff-odd-diff-A ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-odd-diff-Ancestor ((,class :background ,bg-diff-neutral-0 :foreground ,fg-diff-neutral-0)))
+ `(ediff-odd-diff-B ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-odd-diff-C ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+;;;;; eglot
+ `(eglot-mode-line ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-active)))
+;;;;; el-search
+ `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(el-search-match ((,class :inherit modus-theme-intense-green)))
+ `(el-search-other-match ((,class :inherit modus-theme-special-mild)))
+ `(el-search-occur-match ((,class :inherit modus-theme-special-calm)))
+;;;;; eldoc-box
+ `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(eldoc-box-border ((,class :background ,fg-alt)))
+;;;;; elfeed
+ `(elfeed-log-date-face ((,class :foreground ,cyan-alt)))
+ `(elfeed-log-debug-level-face ((,class :foreground ,magenta)))
+ `(elfeed-log-error-level-face ((,class :foreground ,red)))
+ `(elfeed-log-info-level-face ((,class :foreground ,green)))
+ `(elfeed-log-warn-level-face ((,class :foreground ,yellow)))
+ `(elfeed-search-date-face ((,class :foreground ,cyan)))
+ `(elfeed-search-feed-face ((,class :foreground ,blue)))
+ `(elfeed-search-filter-face ((,class :foreground ,magenta-active)))
+ `(elfeed-search-last-update-face ((,class :foreground ,green-active)))
+ `(elfeed-search-tag-face ((,class :foreground ,cyan-alt-other)))
+ `(elfeed-search-title-face ((,class :foreground ,fg-main)))
+ `(elfeed-search-unread-count-face ((,class :foreground ,blue-active)))
+ `(elfeed-search-unread-title-face ((,class :inherit bold)))
+;;;;; elfeed-score
+ `(elfeed-score-date-face ((,class :foreground ,blue)))
+ `(elfeed-score-debug-level-face ((,class :foreground ,magenta-alt-other)))
+ `(elfeed-score-error-level-face ((,class :foreground ,red)))
+ `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
+ `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+;;;;; emms
+ `(emms-playlist-track-face ((,class :foreground ,blue)))
+ `(emms-playlist-selected-face ((,class :inherit bold :foreground ,magenta)))
+;;;;; enhanced-ruby-mode
+ `(enh-ruby-heredoc-delimiter-face ((,class :foreground ,blue-alt-other)))
+ `(enh-ruby-op-face ((,class :foreground ,fg-main)))
+ `(enh-ruby-regexp-delimiter-face ((,class :foreground ,green)))
+ `(enh-ruby-regexp-face ((,class :foreground ,magenta)))
+ `(enh-ruby-string-delimiter-face ((,class :foreground ,blue-alt)))
+ `(erm-syn-errline ((,class :foreground ,red :underline t)))
+ `(erm-syn-warnline ((,class :foreground ,yellow :underline t)))
+;;;;; epa
+ `(epa-field-body ((,class :foreground ,fg-main)))
+ `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
+ `(epa-mark ((,class :inherit bold :foreground ,magenta)))
+ `(epa-string ((,class :foreground ,blue-alt)))
+ `(epa-validity-disabled ((,class :inherit modus-theme-refine-red)))
+ `(epa-validity-high ((,class :inherit bold :foreground ,green-alt-other)))
+ `(epa-validity-low ((,class :foreground ,fg-alt)))
+ `(epa-validity-medium ((,class :foreground ,green-alt)))
+;;;;; equake
+ `(equake-buffer-face ((,class :background ,bg-main :foreground ,fg-main)))
+ `(equake-shell-type-eshell ((,class :background ,bg-inactive :foreground ,green-active)))
+ `(equake-shell-type-rash ((,class :background ,bg-inactive :foreground ,red-active)))
+ `(equake-shell-type-shell ((,class :background ,bg-inactive :foreground ,cyan-active)))
+ `(equake-shell-type-term ((,class :background ,bg-inactive :foreground ,yellow-active)))
+ `(equake-shell-type-vterm ((,class :background ,bg-inactive :foreground ,magenta-active)))
+ `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
+ `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
+;;;;; erc
+ `(erc-action-face ((,class :inherit bold :foreground ,cyan)))
+ `(erc-bold-face ((,class :inherit bold)))
+ `(erc-button ((,class :inherit button)))
+ `(erc-command-indicator-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
+ `(erc-dangerous-host-face ((,class :inherit modus-theme-intense-red)))
+ `(erc-direct-msg-face ((,class :foreground ,magenta)))
+ `(erc-error-face ((,class :inherit bold :foreground ,red)))
+ `(erc-fool-face ((,class :foreground ,fg-inactive)))
+ `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
+ `(erc-input-face ((,class :foreground ,fg-special-calm)))
+ `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
+ `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
+ `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
+ `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
+ `(erc-nick-msg-face ((,class :inherit bold :foreground ,green)))
+ `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
+ `(erc-notice-face ((,class :foreground ,fg-unfocused)))
+ `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
+ `(erc-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(erc-timestamp-face ((,class :foreground ,blue-nuanced)))
+ `(erc-underline-face ((,class :underline t)))
+;;;;; eros
+ `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
+ :background ,bg-dim :foreground ,fg-dim)))
+;;;;; ert
+ `(ert-test-result-expected ((,class :inherit modus-theme-intense-green)))
+ `(ert-test-result-unexpected ((,class :inherit modus-theme-intense-red)))
+;;;;; eshell
+ `(eshell-ls-archive ((,class :inherit bold :foreground ,cyan-alt)))
+ `(eshell-ls-backup ((,class :foreground ,yellow-alt)))
+ `(eshell-ls-clutter ((,class :foreground ,red-alt)))
+ `(eshell-ls-directory ((,class :inherit bold :foreground ,blue-alt)))
+ `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
+ `(eshell-ls-missing ((,class :inherit modus-theme-intense-red)))
+ `(eshell-ls-product ((,class :foreground ,fg-special-warm)))
+ `(eshell-ls-readonly ((,class :foreground ,fg-special-cold)))
+ `(eshell-ls-special ((,class :inherit bold :foreground ,magenta)))
+ `(eshell-ls-symlink ((,class :foreground ,cyan :underline t)))
+ `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(eshell-prompt ((,class ,@(modus-operandi-theme-bold-weight)
+ ,@(modus-operandi-theme-prompt green-alt-other
+ green-nuanced-bg
+ green-alt
+ green-refine-bg
+ fg-main))))
+;;;;; eshell-fringe-status
+ `(eshell-fringe-status-failure ((,class :foreground ,red)))
+ `(eshell-fringe-status-success ((,class :foreground ,green)))
+;;;;; eshell-git-prompt
+ `(eshell-git-prompt-add-face ((,class :foreground ,fg-alt)))
+ `(eshell-git-prompt-branch-face ((,class :foreground ,fg-alt)))
+ `(eshell-git-prompt-directory-face ((,class :foreground ,cyan)))
+ `(eshell-git-prompt-exit-fail-face ((,class :foreground ,red)))
+ `(eshell-git-prompt-exit-success-face ((,class :foreground ,green)))
+ `(eshell-git-prompt-modified-face ((,class :foreground ,yellow)))
+ `(eshell-git-prompt-powerline-clean-face ((,class :background ,green-refine-bg)))
+ `(eshell-git-prompt-powerline-dir-face ((,class :background ,blue-refine-bg)))
+ `(eshell-git-prompt-powerline-not-clean-face ((,class :background ,magenta-refine-bg)))
+ `(eshell-git-prompt-robyrussell-branch-face ((,class :foreground ,red)))
+ `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground ,yellow)))
+ `(eshell-git-prompt-robyrussell-git-face ((,class :foreground ,blue)))
+;;;;; eshell-prompt-extras (epe)
+ `(epe-dir-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,blue)))
+ `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
+ `(epe-git-face ((,class :foreground ,cyan-alt)))
+ `(epe-pipeline-delimiter-face ((,class :foreground ,green-alt)))
+ `(epe-pipeline-host-face ((,class :foreground ,blue)))
+ `(epe-pipeline-time-face ((,class :foreground ,fg-special-warm)))
+ `(epe-pipeline-user-face ((,class :foreground ,magenta)))
+ `(epe-remote-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(epe-status-face ((,class :foreground ,magenta-alt-other)))
+ `(epe-venv-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; evil-mode
+ `(evil-ex-commands ((,class :foreground ,magenta-alt-other)))
+ `(evil-ex-info ((,class :foreground ,cyan-alt-other)))
+ `(evil-ex-lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+ `(evil-ex-search ((,class :inherit modus-theme-intense-green)))
+ `(evil-ex-substitute-matches ((,class :inherit modus-theme-refine-yellow :underline t)))
+ `(evil-ex-substitute-replacement ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; evil-goggles
+ `(evil-goggles-change-face ((,class :inherit modus-theme-refine-yellow)))
+ `(evil-goggles-commentary-face ((,class :inherit modus-theme-subtle-neutral :slant ,modus-theme-slant)))
+ `(evil-goggles-default-face ((,class :inherit modus-theme-subtle-neutral)))
+ `(evil-goggles-delete-face ((,class :inherit modus-theme-refine-red)))
+ `(evil-goggles-fill-and-move-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-indent-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-join-face ((,class :inherit modus-theme-subtle-green)))
+ `(evil-goggles-nerd-commenter-face ((,class :inherit evil-goggles-commentary-face)))
+ `(evil-goggles-paste-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(evil-goggles-record-macro-face ((,class :inherit modus-theme-special-cold)))
+ `(evil-goggles-replace-with-register-face ((,class :inherit modus-theme-refine-magenta)))
+ `(evil-goggles-set-marker-face ((,class :inherit modus-theme-intense-magenta)))
+ `(evil-goggles-shift-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-surround-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-yank-face ((,class :inherit modus-theme-subtle-blue)))
+;;;;; evil-visual-mark-mode
+ `(evil-visual-mark-face ((,class :inherit modus-theme-intense-magenta)))
+;;;;; eww
+ `(eww-invalid-certificate ((,class :foreground ,red-active)))
+ `(eww-valid-certificate ((,class :foreground ,green-active)))
+ `(eww-form-checkbox ((,class :box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-inactive :foreground ,fg-main)))
+ `(eww-form-file ((,class :box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-active :foreground ,fg-main)))
+ `(eww-form-select ((,class :inherit eww-form-checkbox)))
+ `(eww-form-submit ((,class :inherit eww-form-file)))
+ `(eww-form-text ((,class :box (:line-width 1 :color ,fg-inactive :style none) :background ,bg-active :foreground ,fg-active)))
+ `(eww-form-textarea ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; eyebrowse
+ `(eyebrowse-mode-line-active ((,class :inherit bold :foreground ,blue-active)))
+;;;;; fancy-dabbrev
+ `(fancy-dabbrev-menu-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(fancy-dabbrev-preview-face ((,class :foreground ,fg-alt :underline t)))
+ `(fancy-dabbrev-selection-face ((,class :inherit (modus-theme-intense-cyan bold))))
+;;;;; flycheck
+ `(flycheck-error
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+ `(flycheck-error-list-checker-name ((,class :foreground ,magenta-active)))
+ `(flycheck-error-list-column-number ((,class :foreground ,fg-special-cold)))
+ `(flycheck-error-list-error ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red)))
+ `(flycheck-error-list-filename ((,class :foreground ,blue)))
+ `(flycheck-error-list-highlight ((,class :inherit modus-theme-hl-line)))
+ `(flycheck-error-list-id ((,class :foreground ,magenta-alt-other)))
+ `(flycheck-error-list-id-with-explainer ((,class :inherit flycheck-error-list-id :box t)))
+ `(flycheck-error-list-info ((,class :foreground ,cyan)))
+ `(flycheck-error-list-line-number ((,class :foreground ,fg-special-warm)))
+ `(flycheck-error-list-warning ((,class :foreground ,yellow)))
+ `(flycheck-fringe-error ((,class :inherit modus-theme-fringe-red)))
+ `(flycheck-fringe-info ((,class :inherit modus-theme-fringe-cyan)))
+ `(flycheck-fringe-warning ((,class :inherit modus-theme-fringe-yellow)))
+ `(flycheck-info
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-note :style wave))
+ (,class :foreground ,fg-lang-note :underline t)))
+ `(flycheck-verify-select-checker ((,class :box (:line-width 1 :color nil :style released-button))))
+ `(flycheck-warning
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flycheck-indicator
+ `(flycheck-indicator-disabled ((,class :foreground ,fg-inactive :slant ,modus-theme-slant)))
+ `(flycheck-indicator-error ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red-active)))
+ `(flycheck-indicator-info ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,blue-active)))
+ `(flycheck-indicator-running ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-active)))
+ `(flycheck-indicator-success ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,green-active)))
+ `(flycheck-indicator-warning ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,yellow-active)))
+;;;;; flycheck-posframe
+ `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
+ `(flycheck-posframe-border-face ((,class :foreground ,fg-alt)))
+ `(flycheck-posframe-error-face ((,class :inherit bold :foreground ,red)))
+ `(flycheck-posframe-face ((,class :foreground ,fg-main :slant ,modus-theme-slant)))
+ `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
+ `(flycheck-posframe-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; flymake
+ `(flymake-error
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+ `(flymake-note
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-note :style wave))
+ (,class :foreground ,fg-lang-note :underline t)))
+ `(flymake-warning
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flyspell
+ `(flyspell-duplicate
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+ `(flyspell-incorrect
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+;;;;; flyspell-correct
+ `(flyspell-correct-highlight-face ((,class :inherit modus-theme-refine-green)))
+;;;;; flx
+ `(flx-highlight-face ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+;;;;; freeze-it
+ `(freeze-it-show ((,class :background ,bg-dim :foreground ,fg-special-warm)))
+;;;;; frog-menu
+ `(frog-menu-action-keybinding-face ((,class :foreground ,blue-alt-other)))
+ `(frog-menu-actions-face ((,class :foreground ,magenta)))
+ `(frog-menu-border ((,class :background ,bg-active)))
+ `(frog-menu-candidates-face ((,class :foreground ,fg-main)))
+ `(frog-menu-posframe-background-face ((,class :background ,bg-dim)))
+ `(frog-menu-prompt-face ((,class :foreground ,cyan)))
+;;;;; focus
+ `(focus-unfocused ((,class :foreground ,fg-unfocused)))
+;;;;; fold-this
+ `(fold-this-overlay ((,class :inherit modus-theme-special-mild)))
+;;;;; font-lock
+ `(font-lock-builtin-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(font-lock-comment-delimiter-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(font-lock-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(font-lock-constant-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(font-lock-doc-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ fg-special-cold cyan-alt-other-faint)
+ :slant ,modus-theme-slant)))
+ `(font-lock-function-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(font-lock-keyword-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(font-lock-negation-char-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ yellow yellow-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(font-lock-preprocessor-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+ `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+ `(font-lock-string-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt blue-alt-faint))))
+ `(font-lock-type-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(font-lock-variable-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(font-lock-warning-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ yellow-active yellow-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+;;;;; forge
+ `(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
+ `(forge-post-date ((,class :foreground ,fg-special-cold)))
+ `(forge-topic-closed ((,class :foreground ,fg-alt)))
+ `(forge-topic-merged ((,class :foreground ,fg-alt)))
+ `(forge-topic-open ((,class :foreground ,fg-special-mild)))
+ `(forge-topic-unmerged ((,class :foreground ,magenta :slant ,modus-theme-slant)))
+ `(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
+;;;;; fountain-mode
+ `(fountain-character ((,class :foreground ,blue-alt-other)))
+ `(fountain-comment ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(fountain-dialog ((,class :foreground ,blue-alt)))
+ `(fountain-metadata-key ((,class :foreground ,green-alt-other)))
+ `(fountain-metadata-value ((,class :foreground ,blue)))
+ `(fountain-non-printing ((,class :foreground ,fg-alt)))
+ `(fountain-note ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(fountain-page-break ((,class :inherit bold :foreground ,red-alt)))
+ `(fountain-page-number ((,class :inherit bold :foreground ,red-alt-other)))
+ `(fountain-paren ((,class :foreground ,cyan)))
+ `(fountain-scene-heading ((,class :inherit bold :foreground ,blue-nuanced)))
+ `(fountain-section-heading ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(fountain-section-heading-1 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(fountain-section-heading-2 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-warm
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3))))
+ `(fountain-section-heading-3 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-mild
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2))))
+ `(fountain-section-heading-4 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-calm
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1))))
+ `(fountain-section-heading-5 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-calm)))
+ `(fountain-synopsis ((,class :foreground ,cyan-alt)))
+ `(fountain-trans ((,class :foreground ,yellow-alt-other)))
+;;;;; geiser
+ `(geiser-font-lock-autodoc-current-arg ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(geiser-font-lock-autodoc-identifier ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue blue-faint))))
+ `(geiser-font-lock-doc-button ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt cyan-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-doc-link ((,class :inherit link)))
+ `(geiser-font-lock-error-link ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-image-button ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt green-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-repl-input ((,class :inherit bold)))
+ `(geiser-font-lock-repl-output ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint))))
+ `(geiser-font-lock-repl-prompt ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(geiser-font-lock-xref-header ((,class :inherit bold)))
+ `(geiser-font-lock-xref-link ((,class :inherit link)))
+;;;;; git-commit
+ `(git-commit-comment-action ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-branch-local ((,class :foreground ,blue-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-branch-remote ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-detached ((,class :foreground ,cyan-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-file ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(git-commit-comment-heading ((,class :inherit bold :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(git-commit-keyword ((,class :foreground ,magenta)))
+ `(git-commit-known-pseudo-header ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(git-commit-nonempty-second-line ((,class :inherit modus-theme-refine-yellow)))
+ `(git-commit-overlong-summary ((,class :inherit modus-theme-refine-yellow)))
+ `(git-commit-pseudo-header ((,class :inherit bold :foreground ,fg-alt)))
+ `(git-commit-summary ((,class :foreground ,magenta-alt-other)))
+;;;;; git-rebase
+ `(git-rebase-comment-hash ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(git-rebase-comment-heading ((,class :inherit bold :foreground ,fg-dim :slant ,modus-theme-slant)))
+ `(git-rebase-description ((,class :foreground ,fg-main)))
+ `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
+;;;;; git-gutter
+ `(git-gutter:added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter:deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter:modified ((,class :inherit modus-theme-fringe-yellow)))
+ `(git-gutter:separator ((,class :inherit modus-theme-fringe-cyan)))
+ `(git-gutter:unchanged ((,class :inherit modus-theme-fringe-magenta)))
+;;;;; git-gutter-fr
+ `(git-gutter-fr:added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter-fr:deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter-fr:modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-{gutter,fringe}+
+ `(git-gutter+-added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter+-deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter+-modified ((,class :inherit modus-theme-fringe-yellow)))
+ `(git-gutter+-separator ((,class :inherit modus-theme-fringe-cyan)))
+ `(git-gutter+-unchanged ((,class :inherit modus-theme-fringe-magenta)))
+ `(git-gutter-fr+-added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter-fr+-deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter-fr+-modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-lens
+ `(git-lens-added ((,class :inherit bold :foreground ,green)))
+ `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
+ `(git-lens-header ((,class :inherit bold :height 1.1 :foreground ,cyan)))
+ `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
+ `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
+;;;;; git-timemachine
+ `(git-timemachine-commit ((,class :inherit bold :foreground ,yellow-active)))
+ `(git-timemachine-minibuffer-author-face ((,class :foreground ,fg-special-warm)))
+ `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
+;;;;; git-walktree
+ `(git-walktree-commit-face ((,class :foreground ,yellow)))
+ `(git-walktree-symlink-face ((,class :foreground ,cyan :underline t)))
+ `(git-walktree-tree-face ((,class :foreground ,magenta)))
+;;;;; gnus
+ `(gnus-button ((,class :inherit button)))
+ `(gnus-cite-1 ((,class :foreground ,blue-alt)))
+ `(gnus-cite-10 ((,class :foreground ,magenta-alt-other)))
+ `(gnus-cite-11 ((,class :foreground ,yellow-alt-other)))
+ `(gnus-cite-2 ((,class :foreground ,red-alt)))
+ `(gnus-cite-3 ((,class :foreground ,green-alt)))
+ `(gnus-cite-4 ((,class :foreground ,magenta-alt)))
+ `(gnus-cite-5 ((,class :foreground ,yellow-alt)))
+ `(gnus-cite-6 ((,class :foreground ,cyan-alt)))
+ `(gnus-cite-7 ((,class :foreground ,blue-alt-other)))
+ `(gnus-cite-8 ((,class :foreground ,red-alt-other)))
+ `(gnus-cite-9 ((,class :foreground ,green-alt-other)))
+ `(gnus-cite-attribution ((,class :foreground ,fg-main :slant italic)))
+ `(gnus-emphasis-highlight-words ((,class :inherit modus-theme-refine-yellow)))
+ `(gnus-group-mail-1 ((,class :inherit bold :foreground ,magenta-alt)))
+ `(gnus-group-mail-1-empty ((,class :foreground ,magenta-alt)))
+ `(gnus-group-mail-2 ((,class :inherit bold :foreground ,magenta)))
+ `(gnus-group-mail-2-empty ((,class :foreground ,magenta)))
+ `(gnus-group-mail-3 ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(gnus-group-mail-3-empty ((,class :foreground ,magenta-alt-other)))
+ `(gnus-group-mail-low ((,class :inherit bold :foreground ,magenta-nuanced)))
+ `(gnus-group-mail-low-empty ((,class :foreground ,magenta-nuanced)))
+ `(gnus-group-news-1 ((,class :inherit bold :foreground ,green)))
+ `(gnus-group-news-1-empty ((,class :foreground ,green)))
+ `(gnus-group-news-2 ((,class :inherit bold :foreground ,cyan)))
+ `(gnus-group-news-2-empty ((,class :foreground ,cyan)))
+ `(gnus-group-news-3 ((,class :inherit bold :foreground ,yellow-nuanced)))
+ `(gnus-group-news-3-empty ((,class :foreground ,yellow-nuanced)))
+ `(gnus-group-news-4 ((,class :inherit bold :foreground ,cyan-nuanced)))
+ `(gnus-group-news-4-empty ((,class :foreground ,cyan-nuanced)))
+ `(gnus-group-news-5 ((,class :inherit bold :foreground ,red-nuanced)))
+ `(gnus-group-news-5-empty ((,class :foreground ,red-nuanced)))
+ `(gnus-group-news-6 ((,class :inherit bold :foreground ,fg-alt)))
+ `(gnus-group-news-6-empty ((,class :foreground ,fg-alt)))
+ `(gnus-group-news-low ((,class :inherit bold :foreground ,green-nuanced)))
+ `(gnus-group-news-low-empty ((,class :foreground ,green-nuanced)))
+ `(gnus-header-content ((,class :foreground ,fg-special-calm)))
+ `(gnus-header-from ((,class :inherit bold :foreground ,cyan-alt :underline nil)))
+ `(gnus-header-name ((,class :foreground ,cyan-alt-other)))
+ `(gnus-header-newsgroups ((,class :inherit bold :foreground ,blue-alt)))
+ `(gnus-header-subject ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(gnus-server-agent ((,class :inherit bold :foreground ,cyan)))
+ `(gnus-server-closed ((,class :inherit bold :foreground ,magenta)))
+ `(gnus-server-cloud ((,class :inherit bold :foreground ,cyan-alt)))
+ `(gnus-server-cloud-host ((,class :inherit modus-theme-refine-cyan)))
+ `(gnus-server-denied ((,class :inherit bold :foreground ,red)))
+ `(gnus-server-offline ((,class :inherit bold :foreground ,yellow)))
+ `(gnus-server-opened ((,class :inherit bold :foreground ,green)))
+ `(gnus-signature ((,class :foreground ,fg-special-cold :slant italic)))
+ `(gnus-splash ((,class :foreground ,fg-alt)))
+ `(gnus-summary-cancelled ((,class :inherit modus-theme-mark-alt)))
+ `(gnus-summary-high-ancient ((,class :inherit bold :foreground ,fg-alt)))
+ `(gnus-summary-high-read ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(gnus-summary-high-ticked ((,class :inherit bold :foreground ,red-alt-other)))
+ `(gnus-summary-high-undownloaded ((,class :inherit bold :foreground ,yellow)))
+ `(gnus-summary-high-unread ((,class :inherit bold :foreground ,fg-main)))
+ `(gnus-summary-low-ancient ((,class :foreground ,fg-alt :slant italic)))
+ `(gnus-summary-low-read ((,class :foreground ,fg-special-cold :slant italic)))
+ `(gnus-summary-low-ticked ((,class :foreground ,red-refine-fg :slant italic)))
+ `(gnus-summary-low-undownloaded ((,class :foreground ,yellow-refine-fg :slant italic)))
+ `(gnus-summary-low-unread ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(gnus-summary-normal-ancient ((,class :foreground ,fg-special-calm)))
+ `(gnus-summary-normal-read ((,class :foreground ,fg-special-cold)))
+ `(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
+ `(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
+ `(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
+ `(gnus-summary-selected ((,class :inherit modus-theme-subtle-blue)))
+;;;;; golden-ratio-scroll-screen
+ `(golden-ratio-scroll-highlight-line-face ((,class :background ,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; helm
+ `(helm-M-x-key ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(helm-action ((,class :underline t)))
+ `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
+ `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
+ `(helm-bookmark-file ((,class :foreground ,fg-main)))
+ `(helm-bookmark-file-not-found ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(helm-bookmark-gnus ((,class :foreground ,magenta)))
+ `(helm-bookmark-info ((,class :foreground ,cyan-alt)))
+ `(helm-bookmark-man ((,class :foreground ,yellow-alt)))
+ `(helm-bookmark-w3m ((,class :foreground ,blue-alt)))
+ `(helm-buffer-archive ((,class :inherit bold :foreground ,cyan)))
+ `(helm-buffer-directory ((,class :inherit bold :foreground ,blue)))
+ `(helm-buffer-file ((,class :foreground ,fg-main)))
+ `(helm-buffer-modified ((,class :foreground ,yellow-alt)))
+ `(helm-buffer-not-saved ((,class :foreground ,red-alt)))
+ `(helm-buffer-process ((,class :foreground ,magenta)))
+ `(helm-buffer-saved-out ((,class :inherit bold :background ,bg-alt :foreground ,red)))
+ `(helm-buffer-size ((,class :foreground ,fg-alt)))
+ `(helm-candidate-number ((,class :foreground ,cyan-active)))
+ `(helm-candidate-number-suspended ((,class :foreground ,yellow-active)))
+ `(helm-comint-prompts-buffer-name ((,class :foreground ,green-active)))
+ `(helm-comint-prompts-promptidx ((,class :foreground ,cyan-active)))
+ `(helm-delete-async-message ((,class :inherit bold :foreground ,magenta-active)))
+ `(helm-eob-line ((,class :background ,bg-main :foreground ,fg-main)))
+ `(helm-eshell-prompts-buffer-name ((,class :foreground ,green-active)))
+ `(helm-eshell-prompts-promptidx ((,class :foreground ,cyan-active)))
+ `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
+ `(helm-ff-backup-file ((,class :foreground ,fg-alt)))
+ `(helm-ff-denied ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-intense-red
+ 'modus-theme-nuanced-red
+ red))))
+ `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
+ `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt :foreground ,fg-alt)))
+ `(helm-ff-dotted-symlink-directory ((,class :inherit helm-ff-dotted-directory :underline t)))
+ `(helm-ff-executable ((,class :foreground ,magenta-alt)))
+ `(helm-ff-file ((,class :foreground ,fg-main)))
+ `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
+ `(helm-ff-invalid-symlink ((,class :foreground ,red :underline t)))
+ `(helm-ff-pipe ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-magenta
+ 'modus-theme-subtle-magenta
+ 'modus-theme-nuanced-magenta
+ magenta))))
+ `(helm-ff-prefix ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-yellow
+ 'modus-theme-subtle-yellow
+ 'modus-theme-nuanced-yellow
+ yellow-alt-other))))
+ `(helm-ff-socket ((,class :foreground ,red-alt-other)))
+ `(helm-ff-suid ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-refine-red
+ 'modus-theme-nuanced-yellow
+ red-alt))))
+ `(helm-ff-symlink ((,class :foreground ,cyan :underline t)))
+ `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
+ `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
+ `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-grep-finish ((,class :foreground ,green-active)))
+ `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
+ `(helm-grep-match ((,class :inherit modus-theme-special-calm)))
+ `(helm-header ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-header-line-left-margin ((,class :inherit bold :foreground ,yellow-intense)))
+ `(helm-history-deleted ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-intense-red
+ 'modus-theme-nuanced-red
+ red
+ 'bold))))
+ `(helm-history-remote ((,class :foreground ,red-alt-other)))
+ `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm)))
+ `(helm-lisp-show-completion ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-yellow
+ 'modus-theme-refine-yellow
+ 'modus-theme-nuanced-yellow
+ yellow
+ 'bold))))
+ `(helm-locate-finish ((,class :foreground ,green-active)))
+ `(helm-match ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan
+ 'bold))))
+ `(helm-match-item ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-neutral
+ 'modus-theme-subtle-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other))))
+ `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
+ `(helm-moccur-buffer ((,class :foreground ,cyan-alt-other :underline t)))
+ `(helm-mode-prefix ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt
+ 'bold))))
+ `(helm-non-file-buffer ((,class :foreground ,fg-alt)))
+ `(helm-prefarg ((,class :foreground ,red-active)))
+ `(helm-resume-need-update ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other))))
+ `(helm-selection ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-special-cold
+ nil
+ 'bold))))
+ `(helm-selection-line ((,class :inherit modus-theme-special-cold)))
+ `(helm-separator ((,class :foreground ,fg-special-mild)))
+ `(helm-time-zone-current ((,class :foreground ,green)))
+ `(helm-time-zone-home ((,class :foreground ,magenta)))
+ `(helm-source-header ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(helm-top-columns ((,class :inherit helm-header)))
+ `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
+ `(helm-visible-mark ((,class :inherit modus-theme-subtle-cyan)))
+;;;;; helm-ls-git
+ `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
+ `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
+ `(helm-ls-git-conflict-face ((,class :inherit bold :foreground ,red-intense)))
+ `(helm-ls-git-deleted-and-staged-face ((,class :foreground ,red-nuanced)))
+ `(helm-ls-git-deleted-not-staged-face ((,class :foreground ,red)))
+ `(helm-ls-git-modified-and-staged-face ((,class :foreground ,yellow-nuanced)))
+ `(helm-ls-git-modified-not-staged-face ((,class :foreground ,yellow)))
+ `(helm-ls-git-renamed-modified-face ((,class :foreground ,magenta)))
+ `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
+;;;;; helm-switch-shell
+ `(helm-switch-shell-new-shell-face ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+;;;;; helm-xref
+ `(helm-xref-file-name ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-xref-file-name ((,class :foreground ,fg-special-warm)))
+;;;;; helpful
+ `(helpful-heading ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+;;;;; highlight region or ad-hoc regexp
+ `(hi-black-b ((,class :background ,fg-main :foreground ,bg-main)))
+ `(hi-blue ((,class :background ,bg-alt :foreground ,blue :underline t)))
+ `(hi-blue-b ((,class :inherit modus-theme-intense-blue)))
+ `(hi-green ((,class :background ,bg-alt :foreground ,green :underline t)))
+ `(hi-green-b ((,class :inherit modus-theme-intense-green)))
+ `(hi-pink ((,class :background ,bg-alt :foreground ,magenta :underline t)))
+ `(hi-red-b ((,class :inherit modus-theme-intense-red)))
+ `(hi-yellow ((,class :background ,bg-alt :foreground ,yellow :underline t)))
+ `(highlight ((,class :inherit modus-theme-subtle-blue)))
+ `(highlight-changes ((,class :foreground ,yellow-alt-other)))
+ `(highlight-changes-delete ((,class :foreground ,red-alt-other :underline t)))
+ `(hl-line ((,class :inherit modus-theme-hl-line)))
+;;;;; highlight-blocks
+ `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(highlight-blocks-depth-3-face ((,class :background ,bg-special-cold :foreground ,fg-main)))
+ `(highlight-blocks-depth-4-face ((,class :background ,bg-special-calm :foreground ,fg-main)))
+ `(highlight-blocks-depth-5-face ((,class :background ,bg-special-warm :foreground ,fg-main)))
+ `(highlight-blocks-depth-6-face ((,class :background ,bg-special-mild :foreground ,fg-main)))
+ `(highlight-blocks-depth-7-face ((,class :background ,bg-inactive :foreground ,fg-main)))
+ `(highlight-blocks-depth-8-face ((,class :background ,bg-active :foreground ,fg-main)))
+ `(highlight-blocks-depth-9-face ((,class :background ,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; highlight-defined
+ `(highlight-defined-builtin-function-name-face ((,class :foreground ,magenta)))
+ `(highlight-defined-face-name-face ((,class :foreground ,fg-main)))
+ `(highlight-defined-function-name-face ((,class :foreground ,magenta)))
+ `(highlight-defined-macro-name-face ((,class :foreground ,magenta-alt)))
+ `(highlight-defined-special-form-name-face ((,class :foreground ,magenta-alt-other)))
+ `(highlight-defined-variable-name-face ((,class :foreground ,cyan)))
+;;;;; highlight-escape-sequences (`hes-mode')
+ `(hes-escape-backslash-face ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+ `(hes-escape-sequence-face ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+;;;;; highlight-indentation
+ `(highlight-indentation-face ((,class :inherit modus-theme-hl-line)))
+ `(highlight-indentation-current-column-face ((,class :background ,bg-active)))
+;;;;; highlight-numbers
+ `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
+;;;;; highlight-symbol
+ `(highlight-symbol-face ((,class :inherit modus-theme-special-mild)))
+;;;;; highlight-thing
+ `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
+;;;;; hl-defined
+ `(hdefd-functions ((,class :foreground ,blue)))
+ `(hdefd-undefined ((,class :foreground ,red-alt)))
+ `(hdefd-variables ((,class :foreground ,cyan-alt)))
+;;;;; hl-fill-column
+ `(hl-fill-column-face ((,class :background ,bg-active :foreground ,fg-active)))
+;;;;; hl-todo
+ `(hl-todo ((,class :inherit bold :foreground ,red-alt-other :slant ,modus-theme-slant)))
+;;;;; hydra
+ `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
+ `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
+ `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt)))
+ `(hydra-face-red ((,class :inherit bold :foreground ,red)))
+ `(hydra-face-teal ((,class :inherit bold :foreground ,cyan)))
+;;;;; hyperlist
+ `(hyperlist-condition ((,class :foreground ,green)))
+ `(hyperlist-hashtag ((,class :foreground ,yellow)))
+ `(hyperlist-operator ((,class :foreground ,blue-alt)))
+ `(hyperlist-paren ((,class :foreground ,cyan-alt-other)))
+ `(hyperlist-quote ((,class :foreground ,cyan-alt)))
+ `(hyperlist-ref ((,class :foreground ,magenta-alt-other)))
+ `(hyperlist-stars ((,class :foreground ,fg-alt)))
+ `(hyperlist-tag ((,class :foreground ,red)))
+ `(hyperlist-toplevel ((,class :inherit bold :foreground ,fg-main)))
+;;;;; icomplete
+ `(icomplete-first-match ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ magenta magenta-nuanced-bg
+ magenta-intense-bg fg-main))))
+;;;;; icomplete-vertical
+ `(icomplete-vertical-separator ((,class :foreground ,fg-alt)))
+;;;;; ido-mode
+ `(ido-first-match ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ magenta magenta-nuanced-bg
+ magenta-subtle-bg fg-main))))
+ `(ido-incomplete-regexp ((,class :inherit error)))
+ `(ido-indicator ((,class :inherit modus-theme-subtle-yellow)))
+ `(ido-only-match ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ magenta-intense red-nuanced-bg
+ magenta-intense-bg fg-main))))
+ `(ido-subdir ((,class :foreground ,blue-alt-other)))
+ `(ido-virtual ((,class :foreground ,yellow-alt-other)))
+;;;;; iedit
+ `(iedit-occurrence ((,class :inherit modus-theme-refine-blue)))
+ `(iedit-read-only-occurrence ((,class :inherit modus-theme-intense-yellow)))
+;;;;; iflipb
+ `(iflipb-current-buffer-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(iflipb-other-buffer-face ((,class :foreground ,fg-alt)))
+;;;;; imenu-list
+ `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
+ `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
+ `(imenu-list-entry-face-2 ((,class :foreground ,cyan-alt-other)))
+ `(imenu-list-entry-face-3 ((,class :foreground ,blue-alt)))
+ `(imenu-list-entry-subalist-face-0 ((,class :inherit bold :foreground ,magenta-alt-other :underline t)))
+ `(imenu-list-entry-subalist-face-1 ((,class :inherit bold :foreground ,magenta :underline t)))
+ `(imenu-list-entry-subalist-face-2 ((,class :inherit bold :foreground ,green-alt-other :underline t)))
+ `(imenu-list-entry-subalist-face-3 ((,class :inherit bold :foreground ,red-alt-other :underline t)))
+;;;;; indium
+ `(indium-breakpoint-face ((,class :foreground ,red-active)))
+ `(indium-frame-url-face ((,class :foreground ,fg-alt :underline t)))
+ `(indium-keyword-face ((,class :foreground ,magenta-alt-other)))
+ `(indium-litable-face ((,class :foreground ,fg-special-warm :slant ,modus-theme-slant)))
+ `(indium-repl-error-face ((,class :inherit bold :foreground ,red)))
+ `(indium-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+ `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
+;;;;; info
+ `(Info-quoted ((,class :foreground ,magenta))) ; the capitalisation is canonical
+ `(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
+ `(info-header-xref ((,class :foreground ,blue-active)))
+ `(info-index-match ((,class :inherit match)))
+ `(info-menu-header ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2))))
+ `(info-menu-star ((,class :foreground ,fg-main)))
+ `(info-node ((,class :inherit bold)))
+ `(info-title-1 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(info-title-2 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-warm
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3))))
+ `(info-title-3 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-cold
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2))))
+ `(info-title-4 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-mild
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1))))
+;;;;; info-colors
+ `(info-colors-lisp-code-block ((,class :inherit fixed-pitch)))
+ `(info-colors-ref-item-command ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-constant ((,class :foreground ,blue-alt-other)))
+ `(info-colors-ref-item-function ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-macro ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(info-colors-ref-item-other ((,class :foreground ,cyan)))
+ `(info-colors-ref-item-special-form ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(info-colors-ref-item-syntax-class ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-type ((,class :foreground ,magenta-alt)))
+ `(info-colors-ref-item-user-option ((,class :foreground ,cyan)))
+ `(info-colors-ref-item-variable ((,class :foreground ,cyan)))
+;;;;; interaction-log
+ `(ilog-buffer-face ((,class :foreground ,magenta-alt-other)))
+ `(ilog-change-face ((,class :foreground ,magenta-alt)))
+ `(ilog-echo-face ((,class :foreground ,yellow-alt-other)))
+ `(ilog-load-face ((,class :foreground ,green)))
+ `(ilog-message-face ((,class :foreground ,fg-alt)))
+ `(ilog-non-change-face ((,class :foreground ,blue)))
+;;;;; ioccur
+ `(ioccur-cursor ((,class :foreground ,fg-main)))
+ `(ioccur-invalid-regexp ((,class :foreground ,red)))
+ `(ioccur-match-face ((,class :inherit modus-theme-special-calm)))
+ `(ioccur-match-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-special-cold)))
+ `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
+ `(ioccur-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-refine-blue)))
+ `(ioccur-regexp-face ((,class :inherit (modus-theme-intense-magenta bold))))
+ `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+;;;;; isearch, occur, and the like
+ `(isearch ((,class :inherit (modus-theme-intense-green bold))))
+ `(isearch-fail ((,class :inherit modus-theme-refine-red)))
+ `(lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+ `(match ((,class :inherit modus-theme-special-calm)))
+ `(query-replace ((,class :inherit (modus-theme-intense-yellow bold))))
+;;;;; ivy
+ `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
+ `(ivy-completions-annotations ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(ivy-confirm-face ((,class :foreground ,cyan)))
+ `(ivy-current-match ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-cyan
+ 'modus-theme-intense-cyan
+ 'modus-theme-special-warm
+ nil
+ 'bold))))
+ `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+ `(ivy-grep-info ((,class :foreground ,cyan-alt)))
+ `(ivy-grep-line-number ((,class :foreground ,fg-special-warm)))
+ `(ivy-highlight-face ((,class :foreground ,magenta)))
+ `(ivy-match-required-face ((,class :inherit error)))
+ `(ivy-minibuffer-match-face-1 ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-neutral
+ 'modus-theme-intense-neutral
+ 'modus-theme-subtle-neutral
+ fg-alt))))
+ `(ivy-minibuffer-match-face-2 ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-green
+ 'modus-theme-refine-green
+ 'modus-theme-nuanced-green
+ green-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-face-3 ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-face-4 ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-highlight ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-intense-blue
+ 'modus-theme-nuanced-blue
+ blue-alt-other
+ 'bold))))
+ `(ivy-modified-buffer ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(ivy-modified-outside-buffer ((,class :foreground ,yellow-alt :slant ,modus-theme-slant)))
+ `(ivy-org ((,class :foreground ,cyan-alt-other)))
+ `(ivy-prompt-match ((,class :inherit ivy-current-match)))
+ `(ivy-remote ((,class :foreground ,magenta)))
+ `(ivy-separator ((,class :foreground ,fg-alt)))
+ `(ivy-subdir ((,class :foreground ,blue-alt-other)))
+ `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
+ `(ivy-yanked-word ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-nuanced-blue
+ blue-alt))))
+;;;;; ivy-posframe
+ `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(ivy-posframe-border ((,class :background ,bg-active)))
+ `(ivy-posframe-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+;;;;; jira (org-jira)
+ `(jiralib-comment-face ((,class :background ,bg-alt)))
+ `(jiralib-comment-header-face ((,class :inherit bold)))
+ `(jiralib-issue-info-face ((,class :inherit modus-theme-special-warm)))
+ `(jiralib-issue-info-header-face ((,class :inherit (modus-theme-special-warm bold))))
+ `(jiralib-issue-summary-face ((,class :inherit bold)))
+ `(jiralib-link-filter-face ((,class :underline t)))
+ `(jiralib-link-issue-face ((,class :underline t)))
+ `(jiralib-link-project-face ((,class :underline t)))
+;;;;; journalctl-mode
+ `(journalctl-error-face ((,class :inherit bold :foreground ,red)))
+ `(journalctl-finished-face ((,class :inherit bold :foreground ,green)))
+ `(journalctl-host-face ((,class :foreground ,blue)))
+ `(journalctl-process-face ((,class :foreground ,cyan-alt-other)))
+ `(journalctl-starting-face ((,class :foreground ,green)))
+ `(journalctl-timestamp-face ((,class :foreground ,fg-special-cold)))
+ `(journalctl-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; js2-mode
+ `(js2-error ((,class :foreground ,red)))
+ `(js2-external-variable ((,class :foreground ,cyan-alt-other)))
+ `(js2-function-call ((,class :foreground ,magenta)))
+ `(js2-function-param ((,class :foreground ,blue)))
+ `(js2-instance-member ((,class :foreground ,magenta-alt-other)))
+ `(js2-jsdoc-html-tag-delimiter ((,class :foreground ,fg-main)))
+ `(js2-jsdoc-html-tag-name ((,class :foreground ,cyan)))
+ `(js2-jsdoc-tag ((,class :foreground ,fg-special-calm)))
+ `(js2-jsdoc-type ((,class :foreground ,fg-special-cold)))
+ `(js2-jsdoc-value ((,class :foreground ,fg-special-warm)))
+ `(js2-object-property ((,class :foreground ,fg-main)))
+ `(js2-object-property-access ((,class :foreground ,fg-main)))
+ `(js2-private-function-call ((,class :foreground ,green-alt-other)))
+ `(js2-private-member ((,class :foreground ,fg-special-mild)))
+ `(js2-warning ((,class :foreground ,yellow-alt :underline t)))
+;;;;; julia
+ `(julia-macro-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta)))
+ `(julia-quoted-symbol-face ((,class :foreground ,blue-alt-other)))
+;;;;; jupyter
+ `(jupyter-eval-overlay ((,class :inherit bold :foreground ,blue)))
+ `(jupyter-repl-input-prompt ((,class :foreground ,cyan-alt-other)))
+ `(jupyter-repl-output-prompt ((,class :foreground ,magenta-alt-other)))
+ `(jupyter-repl-traceback ((,class :inherit modus-theme-intense-red)))
+;;;;; kaocha-runner
+ `(kaocha-runner-error-face ((,class :foreground ,red)))
+ `(kaocha-runner-success-face ((,class :foreground ,green)))
+ `(kaocha-runner-warning-face ((,class :foreground ,yellow)))
+;;;;; keycast
+ `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
+ `(keycast-key ((,class :box ,(modus-operandi-theme-modeline-box blue-alt blue-active t -3)
+ ,@(modus-operandi-theme-modeline-props
+ blue-active bg-main
+ blue-active bg-active))))
+;;;;; line numbers (display-line-numbers-mode and global variant)
+ `(line-number ((,class :background ,bg-dim :foreground ,fg-alt)))
+ `(line-number-current-line ((,class :inherit bold :background ,bg-active :foreground ,fg-active)))
+;;;;; lsp-mode
+ `(lsp-face-highlight-read ((,class :inherit modus-theme-subtle-blue :underline t)))
+ `(lsp-face-highlight-textual ((,class :inherit modus-theme-subtle-blue)))
+ `(lsp-face-highlight-write ((,class :inherit (modus-theme-refine-blue bold))))
+ `(lsp-face-semhl-constant ((,class :foreground ,blue-alt-other)))
+ `(lsp-face-semhl-deprecated
+ ((,(append '((supports :underline (:style wave))) class)
+ :foreground ,yellow :underline (:style wave))
+ (,class :foreground ,yellow :underline t)))
+ `(lsp-face-semhl-enummember ((,class :foreground ,blue-alt-other)))
+ `(lsp-face-semhl-field ((,class :foreground ,cyan-alt)))
+ `(lsp-face-semhl-field-static ((,class :foreground ,cyan-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-function ((,class :foreground ,magenta)))
+ `(lsp-face-semhl-method ((,class :foreground ,magenta)))
+ `(lsp-face-semhl-namespace ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt)))
+ `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
+ `(lsp-face-semhl-static-method ((,class :foreground ,magenta :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-class ((,class :foreground ,magenta-alt)))
+ `(lsp-face-semhl-type-enum ((,class :foreground ,magenta-alt)))
+ `(lsp-face-semhl-type-primitive ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-template ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-typedef ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-variable ((,class :foreground ,cyan)))
+ `(lsp-face-semhl-variable-local ((,class :foreground ,cyan)))
+ `(lsp-face-semhl-variable-parameter ((,class :foreground ,cyan-alt-other)))
+ `(lsp-lens-face ((,class :height 0.8 :foreground ,fg-alt)))
+ `(lsp-lens-mouse-face ((,class :height 0.8 :foreground ,blue-alt-other :underline t)))
+ `(lsp-ui-doc-background ((,class :background ,bg-alt)))
+ `(lsp-ui-doc-header ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-doc-url ((,class :foreground ,blue-alt-other :underline t)))
+ `(lsp-ui-peek-filename ((,class :foreground ,fg-special-warm)))
+ `(lsp-ui-peek-footer ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-peek-header ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-peek-highlight ((,class :inherit modus-theme-subtle-blue)))
+ `(lsp-ui-peek-line-number ((,class :foreground ,fg-alt)))
+ `(lsp-ui-peek-list ((,class :background ,bg-dim)))
+ `(lsp-ui-peek-peek ((,class :background ,bg-alt)))
+ `(lsp-ui-peek-selection ((,class :inherit modus-theme-subtle-cyan)))
+ `(lsp-ui-sideline-code-action ((,class :foreground ,yellow)))
+ `(lsp-ui-sideline-current-symbol ((,class :inherit bold :height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-main)))
+ `(lsp-ui-sideline-symbol ((,class :inherit bold :height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-alt)))
+ `(lsp-ui-sideline-symbol-info ((,class :height 0.99 :slant italic)))
+;;;;; magit
+ `(magit-bisect-bad ((,class :foreground ,red-alt-other)))
+ `(magit-bisect-good ((,class :foreground ,green-alt-other)))
+ `(magit-bisect-skip ((,class :foreground ,yellow-alt-other)))
+ `(magit-blame-date ((,class :foreground ,blue)))
+ `(magit-blame-dimmed ((,class :foreground ,fg-alt)))
+ `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
+ `(magit-blame-heading ((,class :background ,bg-alt)))
+ `(magit-blame-highlight ((,class :inherit modus-theme-nuanced-cyan)))
+ `(magit-blame-margin ((,class :inherit magit-blame-highlight)))
+ `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
+ `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
+ `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
+ `(magit-branch-local ((,class :foreground ,blue-alt)))
+ `(magit-branch-remote ((,class :foreground ,magenta-alt)))
+ `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box t)))
+ `(magit-branch-upstream ((,class :slant italic)))
+ `(magit-cherry-equivalent ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-cherry-unmatched ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-diff-added ((,class ,@(modus-operandi-theme-diffs
+ bg-main green
+ bg-diff-added fg-diff-added))))
+ `(magit-diff-added-highlight ((,class ,@(modus-operandi-theme-diffs
+ bg-dim green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(magit-diff-base ((,class ,@(modus-operandi-theme-diffs
+ bg-main yellow
+ bg-diff-changed fg-diff-changed))))
+ `(magit-diff-base-highlight ((,class ,@(modus-operandi-theme-diffs
+ bg-dim yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(magit-diff-context ((,class :foreground ,fg-unfocused)))
+ `(magit-diff-context-highlight ((,class ,@(modus-operandi-theme-diffs
+ bg-dim fg-dim
+ bg-inactive fg-inactive))))
+ `(magit-diff-file-heading ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(magit-diff-file-heading-highlight ((,class :inherit (modus-theme-special-cold bold))))
+ `(magit-diff-file-heading-selection ((,class :background ,bg-alt :foreground ,cyan)))
+ `(magit-diff-hunk-heading ((,class :inherit bold :background ,bg-active :foreground ,fg-inactive)))
+ `(magit-diff-hunk-heading-highlight ((,class :inherit (modus-theme-diff-heading bold))))
+ `(magit-diff-hunk-heading-selection ((,class :inherit modus-theme-intense-cyan)))
+ `(magit-diff-hunk-region ((,class :inherit bold)))
+ `(magit-diff-lines-boundary ((,class :background ,fg-main)))
+ `(magit-diff-lines-heading ((,class :inherit modus-theme-refine-magenta)))
+ `(magit-diff-removed ((,class ,@(modus-operandi-theme-diffs
+ bg-main red
+ bg-diff-removed fg-diff-removed))))
+ `(magit-diff-removed-highlight ((,class ,@(modus-operandi-theme-diffs
+ bg-dim red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+ `(magit-diffstat-added ((,class :foreground ,green)))
+ `(magit-diffstat-removed ((,class :foreground ,red)))
+ `(magit-dimmed ((,class :foreground ,fg-unfocused)))
+ `(magit-filename ((,class :foreground ,fg-special-cold)))
+ `(magit-hash ((,class :foreground ,fg-alt)))
+ `(magit-head ((,class :inherit magit-branch-local)))
+ `(magit-header-line ((,class :inherit bold :foreground ,magenta-active)))
+ `(magit-header-line-key ((,class :inherit bold :foreground ,red-active)))
+ `(magit-header-line-log-select ((,class :inherit bold :foreground ,fg-main)))
+ `(magit-keyword ((,class :foreground ,magenta)))
+ `(magit-keyword-squash ((,class :inherit bold :foreground ,yellow-alt-other)))
+ `(magit-log-author ((,class :foreground ,cyan)))
+ `(magit-log-date ((,class :foreground ,fg-alt)))
+ `(magit-log-graph ((,class :foreground ,fg-dim)))
+ `(magit-mode-line-process ((,class :inherit bold :foreground ,blue-active)))
+ `(magit-mode-line-process-error ((,class :inherit bold :foreground ,red-active)))
+ `(magit-process-ng ((,class :inherit error)))
+ `(magit-process-ok ((,class :inherit success)))
+ `(magit-reflog-amend ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-reflog-checkout ((,class :background ,bg-main :foreground ,blue-intense)))
+ `(magit-reflog-cherry-pick ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-commit ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-merge ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-other ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-reflog-rebase ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-reflog-remote ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-reflog-reset ((,class :background ,bg-main :foreground ,red-intense)))
+ `(magit-refname ((,class :foreground ,fg-alt)))
+ `(magit-refname-pullreq ((,class :foreground ,fg-alt)))
+ `(magit-refname-stash ((,class :foreground ,fg-alt)))
+ `(magit-refname-wip ((,class :foreground ,fg-alt)))
+ `(magit-section ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
+ `(magit-section-heading-selection ((,class :inherit (modus-theme-refine-cyan bold))))
+ `(magit-section-highlight ((,class :background ,bg-alt)))
+ `(magit-sequence-done ((,class :foreground ,green-alt)))
+ `(magit-sequence-drop ((,class :foreground ,red-alt)))
+ `(magit-sequence-exec ((,class :foreground ,magenta-alt)))
+ `(magit-sequence-head ((,class :foreground ,cyan-alt)))
+ `(magit-sequence-onto ((,class :foreground ,fg-alt)))
+ `(magit-sequence-part ((,class :foreground ,yellow-alt)))
+ `(magit-sequence-pick ((,class :foreground ,blue-alt)))
+ `(magit-sequence-stop ((,class :foreground ,red)))
+ `(magit-signature-bad ((,class :inherit bold :foreground ,red)))
+ `(magit-signature-error ((,class :foreground ,red-alt)))
+ `(magit-signature-expired ((,class :foreground ,yellow)))
+ `(magit-signature-expired-key ((,class :foreground ,yellow)))
+ `(magit-signature-good ((,class :foreground ,green)))
+ `(magit-signature-revoked ((,class :foreground ,magenta)))
+ `(magit-signature-untrusted ((,class :foreground ,cyan)))
+ `(magit-tag ((,class :foreground ,yellow-alt-other)))
+;;;;; magit-imerge
+ `(magit-imerge-overriding-value ((,class :inherit bold :foreground ,red-alt)))
+;;;;; man
+ `(Man-overstrike ((,class :inherit bold :foreground ,magenta)))
+ `(Man-reverse ((,class :inherit modus-theme-subtle-magenta)))
+ `(Man-underline ((,class :foreground ,cyan :underline t)))
+;;;;; markdown-mode
+ `(markdown-blockquote-face ((,class :foreground ,fg-special-warm :slant ,modus-theme-slant)))
+ `(markdown-bold-face ((,class :inherit bold)))
+ `(markdown-code-face ((,class :inherit fixed-pitch)))
+ `(markdown-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(markdown-footnote-marker-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(markdown-footnote-text-face ((,class :foreground ,fg-main :slant ,modus-theme-slant)))
+ `(markdown-gfm-checkbox-face ((,class :foreground ,cyan-alt-other)))
+ `(markdown-header-delimiter-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,fg-dim)))
+ `(markdown-header-face ((,class :inherit bold)))
+ `(markdown-header-rule-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(markdown-html-attr-name-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markdown-html-attr-value-face ((,class :inherit fixed-pitch :foreground ,blue)))
+ `(markdown-html-entity-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markdown-html-tag-delimiter-face ((,class :inherit fixed-pitch :foreground ,fg-special-mild)))
+ `(markdown-html-tag-name-face ((,class :inherit fixed-pitch :foreground ,magenta-alt)))
+ `(markdown-inline-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(markdown-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markdown-language-info-face ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(markdown-language-keyword-face ((,class :inherit fixed-pitch :foreground ,green-alt-other)))
+ `(markdown-line-break-face ((,class :inherit modus-theme-refine-cyan :underline t)))
+ `(markdown-link-face ((,class :inherit link)))
+ `(markdown-link-title-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(markdown-list-face ((,class :foreground ,fg-dim)))
+ `(markdown-markup-face ((,class :foreground ,fg-alt)))
+ `(markdown-math-face ((,class :foreground ,magenta-alt-other)))
+ `(markdown-metadata-key-face ((,class :foreground ,cyan-alt-other)))
+ `(markdown-metadata-value-face ((,class :foreground ,blue-alt)))
+ `(markdown-missing-link-face ((,class :inherit bold :foreground ,yellow)))
+ `(markdown-plain-url-face ((,class :inherit markdown-link-face)))
+ `(markdown-pre-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit fixed-pitch :background ,bg-dim
+ :foreground ,fg-special-mild)))
+ `(markdown-reference-face ((,class :inherit markdown-markup-face)))
+ `(markdown-strike-through-face ((,class :strike-through t)))
+ `(markdown-table-face ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(markdown-url-face ((,class :foreground ,blue)))
+;;;;; markup-faces (`adoc-mode')
+ `(markup-anchor-face ((,class :foreground ,fg-inactive)))
+ `(markup-attribute-face ((,class :foreground ,fg-inactive :slant italic)))
+ `(markup-big-face ((,class :height 1.3 :foreground ,blue-nuanced)))
+ `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced)))
+ `(markup-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(markup-command-face ((,class :foreground ,fg-inactive)))
+ `(markup-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil :style released-button)
+ :inherit modus-theme-refine-magenta)))
+ `(markup-emphasis-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markup-error-face ((,class :inherit bold :foreground ,red)))
+ `(markup-gen-face ((,class :foreground ,magenta-alt)))
+ `(markup-internal-reference-face ((,class :foreground ,fg-inactive :underline t)))
+ `(markup-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markup-list-face ((,class :inherit modus-theme-special-calm)))
+ `(markup-meta-face ((,class :foreground ,fg-inactive)))
+ `(markup-meta-hide-face ((,class :foreground ,fg-alt)))
+ `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markup-preprocessor-face ((,class :foreground ,red-alt-other)))
+ `(markup-replacement-face ((,class :foreground ,yellow-alt-other)))
+ `(markup-secondary-text-face ((,class :height 0.8 :foreground ,magenta-nuanced)))
+ `(markup-small-face ((,class :height 0.8 :foreground ,fg-main)))
+ `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced)))
+ `(markup-subscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+ `(markup-superscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+ `(markup-table-cell-face ((,class :inherit modus-theme-special-cold)))
+ `(markup-table-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(markup-table-row-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced)))
+ `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced)))
+ `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced)))
+ `(markup-title-3-face ((,class :height 1.4 :foreground ,blue-nuanced)))
+ `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced)))
+ `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced :underline t)))
+ `(markup-value-face ((,class :foreground ,fg-inactive)))
+ `(markup-verbatim-face ((,class :inherit modus-theme-special-mild)))
+;;;;; mentor
+ `(mentor-download-message ((,class :foreground ,fg-special-warm)))
+ `(mentor-download-name ((,class :foreground ,fg-special-cold)))
+ `(mentor-download-progress ((,class :foreground ,blue-alt-other)))
+ `(mentor-download-size ((,class :foreground ,magenta-alt-other)))
+ `(mentor-download-speed-down ((,class :foreground ,cyan-alt)))
+ `(mentor-download-speed-up ((,class :foreground ,red-alt)))
+ `(mentor-download-state ((,class :foreground ,yellow-alt)))
+ `(mentor-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+ `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
+;;;;; messages
+ `(message-cited-text-1 ((,class :foreground ,blue-alt)))
+ `(message-cited-text-2 ((,class :foreground ,red-alt)))
+ `(message-cited-text-3 ((,class :foreground ,green-alt)))
+ `(message-cited-text-4 ((,class :foreground ,magenta-alt)))
+ `(message-header-cc ((,class :foreground ,blue-alt)))
+ `(message-header-name ((,class :foreground ,green-alt-other)))
+ `(message-header-newsgroups ((,class :inherit bold :foreground ,blue)))
+ `(message-header-other ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(message-header-subject ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(message-header-to ((,class :inherit bold :foreground ,magenta-alt)))
+ `(message-header-xheader ((,class :foreground ,blue-alt-other)))
+ `(message-mml ((,class :foreground ,green-alt)))
+ `(message-separator ((,class :background ,bg-active :foreground ,fg-special-warm)))
+;;;;; minibuffer-line
+ `(minibuffer-line ((,class :foreground ,fg-main)))
+;;;;; minimap
+ `(minimap-active-region-background ((,class :background ,bg-active)))
+ `(minimap-current-line-face ((,class :background ,cyan-intense-bg :foreground ,fg-main)))
+;;;;; modeline
+ `(mode-line ((,class :box ,(modus-operandi-theme-modeline-box bg-active fg-alt t)
+ ,@(modus-operandi-theme-modeline-props
+ bg-active fg-dim
+ bg-active fg-active))))
+ `(mode-line-buffer-id ((,class :inherit bold)))
+ `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
+ `(mode-line-highlight ((,class :inherit modus-theme-active-blue :box (:line-width -1 :style pressed-button))))
+ `(mode-line-inactive ((,class :box ,(modus-operandi-theme-modeline-box bg-active bg-region)
+ ,@(modus-operandi-theme-modeline-props
+ bg-dim fg-inactive
+ bg-inactive fg-inactive))))
+;;;;; mood-line
+ `(mood-line-modified ((,class :foreground ,magenta-active)))
+ `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
+ `(mood-line-status-info ((,class :foreground ,cyan-active)))
+ `(mood-line-status-neutral ((,class :foreground ,blue-active)))
+ `(mood-line-status-success ((,class :foreground ,green-active)))
+ `(mood-line-status-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
+;;;;; mu4e
+ `(mu4e-attach-number-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(mu4e-cited-1-face ((,class :foreground ,blue-alt)))
+ `(mu4e-cited-2-face ((,class :foreground ,red-alt)))
+ `(mu4e-cited-3-face ((,class :foreground ,green-alt)))
+ `(mu4e-cited-4-face ((,class :foreground ,magenta-alt)))
+ `(mu4e-cited-5-face ((,class :foreground ,yellow-alt)))
+ `(mu4e-cited-6-face ((,class :foreground ,cyan-alt)))
+ `(mu4e-cited-7-face ((,class :foreground ,magenta)))
+ `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
+ `(mu4e-compose-separator-face ((,class :background ,bg-active :foreground ,fg-special-warm)))
+ `(mu4e-contact-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(mu4e-context-face ((,class :foreground ,blue-active)))
+ `(mu4e-draft-face ((,class :foreground ,magenta-alt)))
+ `(mu4e-flagged-face ((,class :foreground ,red-alt)))
+ `(mu4e-footer-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(mu4e-forwarded-face ((,class :foreground ,magenta-alt-other)))
+ `(mu4e-header-face ((,class :foreground ,fg-alt)))
+ `(mu4e-header-highlight-face ((,class :inherit modus-theme-hl-line)))
+ `(mu4e-header-key-face ((,class :foreground ,cyan)))
+ `(mu4e-header-marks-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(mu4e-header-title-face ((,class :foreground ,fg-special-mild)))
+ `(mu4e-header-value-face ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(mu4e-highlight-face ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(mu4e-link-face ((,class :inherit link)))
+ `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
+ `(mu4e-moved-face ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
+ `(mu4e-region-code ((,class :inherit modus-theme-special-calm)))
+ `(mu4e-replied-face ((,class :foreground ,cyan-active)))
+ `(mu4e-special-header-value-face ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(mu4e-system-face ((,class :foreground ,fg-mark-del :slant ,modus-theme-slant)))
+ `(mu4e-title-face ((,class :foreground ,fg-main)))
+ `(mu4e-trashed-face ((,class :foreground ,red)))
+ `(mu4e-unread-face ((,class :inherit bold :foreground ,fg-main)))
+ `(mu4e-url-number-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(mu4e-view-body-face ((,class :foreground ,fg-main)))
+ `(mu4e-warning-face ((,class :inherit warning)))
+;;;;; mu4e-conversation
+ `(mu4e-conversation-header ((,class :inherit modus-theme-special-cold)))
+ `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
+ `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
+ `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
+ `(mu4e-conversation-sender-4 ((,class :foreground ,fg-alt)))
+ `(mu4e-conversation-sender-5 ((,class :foreground ,yellow-refine-fg)))
+ `(mu4e-conversation-sender-6 ((,class :foreground ,cyan-refine-fg)))
+ `(mu4e-conversation-sender-7 ((,class :foreground ,green-refine-fg)))
+ `(mu4e-conversation-sender-8 ((,class :foreground ,blue-refine-fg)))
+ `(mu4e-conversation-sender-me ((,class :foreground ,fg-main)))
+ `(mu4e-conversation-unread ((,class :inherit bold)))
+;;;;; multiple-cursors
+ `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
+ `(mc/cursor-face ((,class :inverse-video t)))
+ `(mc/region-face ((,class :inherit region)))
+;;;;; neotree
+ `(neo-banner-face ((,class :foreground ,magenta)))
+ `(neo-button-face ((,class :inherit button)))
+ `(neo-dir-link-face ((,class :inherit bold :foreground ,blue)))
+ `(neo-expand-btn-face ((,class :foreground ,cyan)))
+ `(neo-file-link-face ((,class :foreground ,fg-main)))
+ `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
+ `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(neo-vc-added-face ((,class :foreground ,green)))
+ `(neo-vc-conflict-face ((,class :inherit bold :foreground ,red)))
+ `(neo-vc-default-face ((,class :foreground ,fg-main)))
+ `(neo-vc-edited-face ((,class :foreground ,yellow)))
+ `(neo-vc-ignored-face ((,class :foreground ,fg-inactive)))
+ `(neo-vc-missing-face ((,class :foreground ,red-alt)))
+ `(neo-vc-needs-merge-face ((,class :foreground ,magenta-alt)))
+ `(neo-vc-needs-update-face ((,class :underline t)))
+ `(neo-vc-removed-face ((,class :strike-through t)))
+ `(neo-vc-unlocked-changes-face ((,class :inherit modus-theme-refine-blue)))
+ `(neo-vc-up-to-date-face ((,class :foreground ,fg-alt)))
+ `(neo-vc-user-face ((,class :foreground ,magenta)))
+;;;;; no-emoji
+ `(no-emoji ((,class :foreground ,cyan)))
+;;;;; notmuch
+ `(notmuch-crypto-decryption ((,class :inherit modus-theme-refine-magenta)))
+ `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
+ `(notmuch-crypto-signature-bad ((,class :inherit modus-theme-intense-red)))
+ `(notmuch-crypto-signature-good ((,class :inherit modus-theme-refine-green)))
+ `(notmuch-crypto-signature-good-key ((,class :inherit modus-theme-refine-yellow)))
+ `(notmuch-crypto-signature-unknown ((,class :inherit modus-theme-refine-red)))
+ `(notmuch-hello-logo-background ((,class :background ,bg-main)))
+ `(notmuch-message-summary-face ((,class :inherit modus-theme-nuanced-cyan)))
+ `(notmuch-search-flagged-face ((,class :foreground ,red-alt)))
+ `(notmuch-search-matching-authors ((,class :foreground ,fg-main)))
+ `(notmuch-search-non-matching-authors ((,class :foreground ,fg-alt)))
+ `(notmuch-search-unread-face ((,class :inherit bold)))
+ `(notmuch-tag-added
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,green :style wave))
+ (,class :foreground ,green :underline t)))
+ `(notmuch-tag-deleted
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,red :style wave))
+ (,class :foreground ,red :underline t)))
+ `(notmuch-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+ `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
+ `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
+ `(notmuch-tree-match-author-face ((,class :foreground ,fg-special-cold)))
+ `(notmuch-tree-match-face ((,class :foreground ,fg-main)))
+ `(notmuch-tree-match-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+ `(notmuch-tree-no-match-face ((,class :foreground ,fg-alt)))
+ `(notmuch-wash-cited-text ((,class :foreground ,cyan)))
+ `(notmuch-wash-toggle-button ((,class :background ,bg-alt :foreground ,fg-alt)))
+;;;;; num3-mode
+ `(num3-face-even ((,class :inherit bold :background ,bg-alt)))
+;;;;; nxml-mode
+ `(nxml-attribute-colon ((,class :foreground ,fg-main)))
+ `(nxml-attribute-local-name ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt cyan-alt-faint))))
+ `(nxml-attribute-prefix ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-attribute-value ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue blue-faint))))
+ `(nxml-cdata-section-CDATA ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-cdata-section-delimiter ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(nxml-char-ref-delimiter ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint))))
+ `(nxml-char-ref-number ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-delimited-data ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(nxml-delimiter ((,class :foreground ,fg-dim)))
+ `(nxml-element-colon ((,class :foreground ,fg-main)))
+ `(nxml-element-local-name ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(nxml-element-prefix ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-entity-ref-delimiter ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint))))
+ `(nxml-entity-ref-name ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-glyph ((,class :inherit modus-theme-intense-neutral)))
+ `(nxml-hash ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt blue-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-heading ((,class :inherit bold)))
+ `(nxml-name ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-namespace-attribute-colon ((,class :foreground ,fg-main)))
+ `(nxml-namespace-attribute-prefix ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(nxml-processing-instruction-target ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-prolog-keyword ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(nxml-ref ((,class ,@(modus-operandi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+;;;;; orderless
+ `(orderless-match-face-0 ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ blue-alt blue-nuanced-bg
+ blue-refine-bg blue-refine-fg))))
+ `(orderless-match-face-1 ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ magenta-alt magenta-nuanced-bg
+ magenta-refine-bg magenta-refine-fg))))
+ `(orderless-match-face-2 ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ green-alt-other green-nuanced-bg
+ green-refine-bg green-refine-fg))))
+ `(orderless-match-face-3 ((,class :inherit bold
+ ,@(modus-operandi-theme-standard-completions
+ yellow-alt-other yellow-nuanced-bg
+ yellow-refine-bg yellow-refine-fg))))
+;;;;; org
+ `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
+ `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
+ `(org-agenda-clocking ((,class :inherit modus-theme-special-cold)))
+ `(org-agenda-column-dateline ((,class :background ,bg-alt)))
+ `(org-agenda-current-time ((,class :inherit modus-theme-subtle-cyan)))
+ `(org-agenda-date ((,class :inherit ,modus-theme-variable-pitch :foreground ,cyan-alt-other
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
+ ,@(modus-operandi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(org-agenda-date-today ((,class :inherit (bold ,modus-theme-variable-pitch)
+ :background ,cyan-intense-bg :foreground ,fg-main
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(org-agenda-date-weekend ((,class :inherit ,modus-theme-variable-pitch :foreground ,cyan
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
+ ,@(modus-operandi-theme-heading-block blue-nuanced-bg cyan-nuanced))))
+ `(org-agenda-diary ((,class :foreground ,fg-main)))
+ `(org-agenda-dimmed-todo-face ((,class :inherit modus-theme-subtle-neutral)))
+ `(org-agenda-done ((,class ,@(modus-operandi-theme-org-todo-block green-nuanced-bg green-nuanced green))))
+ `(org-agenda-filter-category ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-effort ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-regexp ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-tags ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(org-agenda-structure ((,class :inherit ,modus-theme-variable-pitch
+ :foreground ,fg-special-mild
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3))))
+ `(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(org-block ((,class ,@(modus-operandi-theme-org-block bg-dim)
+ :inherit fixed-pitch :foreground ,fg-main)))
+ `(org-block-begin-line ((,class ,@(modus-operandi-theme-org-block-delim
+ bg-dim fg-special-cold
+ bg-alt fg-special-mild)
+ :inherit fixed-pitch)))
+ `(org-block-end-line ((,class :inherit org-block-begin-line)))
+ `(org-checkbox ((,class :box (:line-width 1 :color ,bg-active)
+ :background ,bg-inactive :foreground ,fg-active)))
+ `(org-checkbox-statistics-done ((,class :foreground ,green
+ ,@(modus-operandi-theme-heading-block
+ green-nuanced-bg green-nuanced))))
+ `(org-checkbox-statistics-todo ((,class ,@(modus-operandi-theme-heading-foreground red-alt red)
+ ,@(modus-operandi-theme-heading-block
+ red-nuanced-bg red-nuanced))))
+ `(org-clock-overlay ((,class :inherit modus-theme-special-cold)))
+ `(org-code ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(org-column ((,class :background ,bg-alt)))
+ `(org-column-title ((,class :inherit bold :underline t :background ,bg-alt)))
+ `(org-date ((,class :inherit fixed-pitch :foreground ,cyan-alt-other :underline t)))
+ `(org-date-selected ((,class :inherit bold :foreground ,blue-alt :inverse-video t)))
+ `(org-default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(org-document-info ((,class :foreground ,fg-special-cold)))
+ `(org-document-info-keyword ((,class :inherit fixed-pitch :foreground ,fg-alt)))
+ `(org-document-title ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-cold
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-5))))
+ `(org-done ((,class ,@(modus-operandi-theme-org-todo-block green-nuanced-bg green-nuanced green))))
+ `(org-drawer ((,class :foreground ,cyan-alt)))
+ `(org-ellipsis ((,class :foreground nil))) ; inherits from the heading's colour
+ `(org-footnote ((,class :foreground ,blue-alt :underline t)))
+ `(org-formula ((,class :inherit fixed-pitch :foreground ,red-alt)))
+ `(org-habit-alert-face ((,class :inherit modus-theme-intense-yellow)))
+ `(org-habit-alert-future-face ((,class :inherit modus-theme-refine-yellow)))
+ `(org-habit-clear-face ((,class :inherit modus-theme-intense-magenta)))
+ `(org-habit-clear-future-face ((,class :inherit modus-theme-refine-magenta)))
+ `(org-habit-overdue-face ((,class :inherit modus-theme-intense-red)))
+ `(org-habit-overdue-future-face ((,class :inherit modus-theme-refine-red)))
+ `(org-habit-ready-face ((,class :inherit modus-theme-intense-blue)))
+ `(org-habit-ready-future-face ((,class :inherit modus-theme-refine-blue)))
+ `(org-headline-done ((,class :foreground ,green-nuanced
+ ,@(modus-operandi-theme-heading-block
+ green-nuanced-bg green-nuanced))))
+ `(org-hide ((,class :foreground ,bg-main)))
+ `(org-indent ((,class :inherit (fixed-pitch org-hide))))
+ `(org-latex-and-related ((,class :foreground ,magenta-refine-fg)))
+ `(org-level-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-main magenta-alt-other)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
+ ,@(modus-operandi-theme-heading-block magenta-nuanced-bg magenta-nuanced))))
+ `(org-level-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-warm magenta-alt)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)
+ ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(org-level-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-cold blue)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)
+ ,@(modus-operandi-theme-heading-block blue-nuanced-bg blue-nuanced))))
+ `(org-level-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-mild cyan)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)
+ ,@(modus-operandi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(org-level-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-calm green-alt-other)
+ ,@(modus-operandi-theme-heading-block green-nuanced-bg green-nuanced))))
+ `(org-level-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground yellow-nuanced yellow-alt-other)
+ ,@(modus-operandi-theme-heading-block yellow-nuanced-bg yellow-nuanced))))
+ `(org-level-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground red-nuanced red-alt)
+ ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(org-level-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-dim magenta)
+ ,@(modus-operandi-theme-heading-block bg-alt fg-alt))))
+ `(org-link ((,class :inherit link)))
+ `(org-list-dt ((,class :inherit bold)))
+ `(org-macro ((,class :inherit org-latex-and-related)))
+ `(org-meta-line ((,class :inherit fixed-pitch :background ,cyan-nuanced-bg :foreground ,cyan-nuanced)))
+ `(org-mode-line-clock ((,class :foreground ,fg-main)))
+ `(org-mode-line-clock-overrun ((,class :inherit modus-theme-active-red)))
+ `(org-priority ((,class ,@(modus-operandi-theme-org-todo-block magenta-nuanced-bg magenta-nuanced magenta)
+ ,@(modus-operandi-theme-heading-foreground magenta magenta-alt-other))))
+ `(org-quote ((,class ,@(if modus-operandi-theme-org-blocks
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg-dim))
+ (list :background nil))
+ :foreground ,fg-special-calm :slant ,modus-theme-slant)))
+ `(org-scheduled ((,class :foreground ,fg-special-warm)))
+ `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
+ `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
+ `(org-sexp-date ((,class :inherit org-date)))
+ `(org-special-keyword ((,class ,@(modus-operandi-theme-org-todo-block cyan-nuanced-bg cyan-nuanced cyan-alt))))
+ `(org-table ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(org-tag ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-nuanced)))
+ `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced)))
+ `(org-target ((,class :underline t)))
+ `(org-time-grid ((,class :foreground ,fg-unfocused)))
+ `(org-todo ((,class ,@(modus-operandi-theme-org-todo-block red-nuanced-bg red-nuanced red-alt)
+ ,@(modus-operandi-theme-heading-foreground red-alt red))))
+ `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
+ `(org-upcoming-distant-deadline ((,class :foreground ,red-nuanced)))
+ `(org-verbatim ((,class :inherit fixed-pitch :background ,bg-alt :foreground ,fg-special-calm)))
+ `(org-verse ((,class :inherit org-quote)))
+ `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
+;;;;; org-journal
+ `(org-journal-calendar-entry-face ((,class :foreground ,yellow-alt-other :slant ,modus-theme-slant)))
+ `(org-journal-calendar-scheduled-face ((,class :foreground ,red-alt-other :slant ,modus-theme-slant)))
+ `(org-journal-highlight ((,class :foreground ,magenta-alt)))
+;;;;; org-noter
+ `(org-noter-no-notes-exist-face ((,class :inherit bold :foreground ,red-active)))
+ `(org-noter-notes-exist-face ((,class :inherit bold :foreground ,green-active)))
+;;;;; org-pomodoro
+ `(org-pomodoro-mode-line ((,class :foreground ,red-active)))
+ `(org-pomodoro-mode-line-break ((,class :foreground ,cyan-active)))
+ `(org-pomodoro-mode-line-overtime ((,class :inherit bold :foreground ,red-active)))
+;;;;; org-recur
+ `(org-recur ((,class :foreground ,magenta-active)))
+;;;;; org-roam
+ `(org-roam-link ((,class :foreground ,blue-alt-other :underline t)))
+ `(org-roam-backlink ((,class :foreground ,green-alt-other :underline t)))
+;;;;; org-superstar
+ `(org-superstar-item ((,class :foreground ,fg-main)))
+ `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
+;;;;; org-table-sticky-header
+ `(org-table-sticky-header-face ((,class :inherit modus-theme-intense-neutral)))
+;;;;; org-treescope
+ `(org-treescope-faces--markerinternal-midday ((,class :inherit modus-theme-intense-blue)))
+ `(org-treescope-faces--markerinternal-range ((,class :inherit modus-theme-special-mild)))
+;;;;; origami
+ `(origami-fold-header-face ((,class :background ,bg-dim :foreground ,fg-dim :box t)))
+ `(origami-fold-replacement-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+;;;;; outline-mode
+ `(outline-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-main magenta-alt-other)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
+ ,@(modus-operandi-theme-heading-block magenta-nuanced-bg magenta-nuanced))))
+ `(outline-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-warm magenta-alt)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)
+ ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(outline-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-cold blue)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)
+ ,@(modus-operandi-theme-heading-block blue-nuanced-bg blue-nuanced))))
+ `(outline-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-mild cyan)
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)
+ ,@(modus-operandi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(outline-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-special-calm green-alt-other)
+ ,@(modus-operandi-theme-heading-block green-nuanced-bg green-nuanced))))
+ `(outline-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground yellow-nuanced yellow-alt-other)
+ ,@(modus-operandi-theme-heading-block yellow-nuanced-bg yellow-nuanced))))
+ `(outline-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground red-nuanced red-alt)
+ ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(outline-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-operandi-theme-heading-foreground fg-dim magenta)
+ ,@(modus-operandi-theme-heading-block bg-alt fg-alt))))
+;;;;; outline-minor-faces
+ `(outline-minor-0 ((,class ,@(unless modus-operandi-theme-section-headings
+ (list :background cyan-nuanced-bg)))))
+;;;;; package (M-x list-packages)
+ `(package-description ((,class :foreground ,fg-special-cold)))
+ `(package-help-section-name ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(package-name ((,class :inherit link)))
+ `(package-status-avail-obso ((,class :inherit bold :foreground ,red)))
+ `(package-status-available ((,class :foreground ,fg-special-mild)))
+ `(package-status-built-in ((,class :foreground ,magenta)))
+ `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
+ `(package-status-disabled ((,class :inherit modus-theme-subtle-red)))
+ `(package-status-external ((,class :foreground ,cyan-alt-other)))
+ `(package-status-held ((,class :foreground ,yellow-alt)))
+ `(package-status-incompat ((,class :inherit bold :foreground ,yellow)))
+ `(package-status-installed ((,class :foreground ,fg-special-warm)))
+ `(package-status-new ((,class :inherit bold :foreground ,green)))
+ `(package-status-unsigned ((,class :inherit bold :foreground ,red-alt)))
+;;;;; page-break-lines
+ `(page-break-lines ((,class :inherit default :foreground ,fg-window-divider-outer)))
+;;;;; paradox
+ `(paradox-archive-face ((,class :foreground ,fg-special-mild)))
+ `(paradox-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(paradox-commit-tag-face ((,class :inherit modus-theme-refine-magenta :box t)))
+ `(paradox-description-face ((,class :foreground ,fg-special-cold)))
+ `(paradox-description-face-multiline ((,class :foreground ,fg-special-cold)))
+ `(paradox-download-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,blue-alt-other)))
+ `(paradox-highlight-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,cyan-alt-other)))
+ `(paradox-homepage-button-face ((,class :foreground ,magenta-alt-other :underline t)))
+ `(paradox-mode-line-face ((,class :inherit bold :foreground ,cyan-active)))
+ `(paradox-name-face ((,class :foreground ,blue :underline t)))
+ `(paradox-star-face ((,class :foreground ,magenta)))
+ `(paradox-starred-face ((,class :foreground ,magenta-alt)))
+;;;;; paren-face
+ `(parenthesis ((,class :foreground ,fg-unfocused)))
+;;;;; parrot
+ `(parrot-rotate-rotation-highlight-face ((,class :inherit modus-theme-refine-magenta)))
+;;;;; pass
+ `(pass-mode-directory-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(pass-mode-entry-face ((,class :background ,bg-main :foreground ,fg-main)))
+ `(pass-mode-header-face ((,class :foreground ,fg-special-warm)))
+;;;;; persp-mode
+ `(persp-face-lighter-buffer-not-in-persp ((,class :inherit modus-theme-intense-red)))
+ `(persp-face-lighter-default ((,class :inherit bold :foreground ,blue-active)))
+ `(persp-face-lighter-nil-persp ((,class :inherit bold :foreground ,fg-active)))
+;;;;; perspective
+ `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
+;;;;; phi-grep
+ `(phi-grep-heading-face ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(phi-grep-match-face ((,class :inherit modus-theme-special-calm)))
+ `(phi-grep-modified-face ((,class :inherit modus-theme-refine-yellow)))
+ `(phi-grep-overlay-face ((,class :inherit modus-theme-refine-blue)))
+;;;;; phi-search
+ `(phi-replace-preview-face ((,class :inherit modus-theme-intense-magenta)))
+ `(phi-search-failpart-face ((,class :inherit modus-theme-refine-red)))
+ `(phi-search-match-face ((,class :inherit modus-theme-refine-cyan)))
+ `(phi-search-selection-face ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; pkgbuild-mode
+ `(pkgbuild-error-face ((,class :underline ,fg-lang-error)))
+;;;;; pomidor
+ `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
+ `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
+ `(pomidor-skip-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(pomidor-work-face ((,class :foreground ,green-alt-other)))
+;;;;; powerline
+ `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint :inverse-video t)))
+ `(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground ,blue-nuanced)))
+ `(powerline-active2 ((,class :background ,bg-active :foreground ,fg-active)))
+ `(powerline-inactive0 ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(powerline-inactive1 ((,class :background ,bg-dim :foreground ,fg-inactive)))
+ `(powerline-inactive2 ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; powerline-evil
+ `(powerline-evil-base-face ((,class :background ,fg-main :foreground ,bg-main)))
+ `(powerline-evil-emacs-face ((,class :inherit modus-theme-active-magenta)))
+ `(powerline-evil-insert-face ((,class :inherit modus-theme-active-green)))
+ `(powerline-evil-motion-face ((,class :inherit modus-theme-active-blue)))
+ `(powerline-evil-normal-face ((,class :background ,fg-alt :foreground ,bg-main)))
+ `(powerline-evil-operator-face ((,class :inherit modus-theme-active-yellow)))
+ `(powerline-evil-replace-face ((,class :inherit modus-theme-active-red)))
+ `(powerline-evil-visual-face ((,class :inherit modus-theme-active-cyan)))
+;;;;; proced
+ `(proced-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(proced-marked ((,class :inherit modus-theme-mark-alt)))
+ `(proced-sort-header ((,class :inherit bold :foreground ,fg-special-calm :underline t)))
+;;;;; prodigy
+ `(prodigy-green-face ((,class :foreground ,green)))
+ `(prodigy-red-face ((,class :foreground ,red)))
+ `(prodigy-yellow-face ((,class :foreground ,yellow)))
+;;;;; rainbow-blocks
+ `(rainbow-blocks-depth-1-face ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-blocks-depth-2-face ((,class :foreground ,blue)))
+ `(rainbow-blocks-depth-3-face ((,class :foreground ,magenta-alt)))
+ `(rainbow-blocks-depth-4-face ((,class :foreground ,green)))
+ `(rainbow-blocks-depth-5-face ((,class :foreground ,magenta)))
+ `(rainbow-blocks-depth-6-face ((,class :foreground ,cyan)))
+ `(rainbow-blocks-depth-7-face ((,class :foreground ,yellow)))
+ `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
+ `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
+ `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
+;;;;; rainbow-identifiers
+ `(rainbow-identifiers-identifier-1 ((,class :foreground ,green-alt-other)))
+ `(rainbow-identifiers-identifier-2 ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-identifiers-identifier-3 ((,class :foreground ,cyan-alt-other)))
+ `(rainbow-identifiers-identifier-4 ((,class :foreground ,yellow-alt-other)))
+ `(rainbow-identifiers-identifier-5 ((,class :foreground ,blue-alt-other)))
+ `(rainbow-identifiers-identifier-6 ((,class :foreground ,green-alt)))
+ `(rainbow-identifiers-identifier-7 ((,class :foreground ,magenta-alt)))
+ `(rainbow-identifiers-identifier-8 ((,class :foreground ,cyan-alt)))
+ `(rainbow-identifiers-identifier-9 ((,class :foreground ,yellow-alt)))
+ `(rainbow-identifiers-identifier-10 ((,class :foreground ,green)))
+ `(rainbow-identifiers-identifier-11 ((,class :foreground ,magenta)))
+ `(rainbow-identifiers-identifier-12 ((,class :foreground ,cyan)))
+ `(rainbow-identifiers-identifier-13 ((,class :foreground ,yellow)))
+ `(rainbow-identifiers-identifier-14 ((,class :foreground ,blue-alt)))
+ `(rainbow-identifiers-identifier-15 ((,class :foreground ,red-alt)))
+;;;;; rainbow-delimiters
+ `(rainbow-delimiters-base-face-error ((,class :foreground ,red)))
+ `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
+ `(rainbow-delimiters-depth-1-face ((,class :foreground ,green-alt-other)))
+ `(rainbow-delimiters-depth-2-face ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-delimiters-depth-3-face ((,class :foreground ,cyan-alt-other)))
+ `(rainbow-delimiters-depth-4-face ((,class :foreground ,yellow-alt-other)))
+ `(rainbow-delimiters-depth-5-face ((,class :foreground ,blue-alt-other)))
+ `(rainbow-delimiters-depth-6-face ((,class :foreground ,green-alt)))
+ `(rainbow-delimiters-depth-7-face ((,class :foreground ,magenta-alt)))
+ `(rainbow-delimiters-depth-8-face ((,class :foreground ,cyan-alt)))
+ `(rainbow-delimiters-depth-9-face ((,class :foreground ,yellow-alt)))
+ `(rainbow-delimiters-mismatched-face ((,class :inherit bold :foreground ,red-alt)))
+ `(rainbow-delimiters-unmatched-face ((,class :inherit bold :foreground ,red)))
+;;;;; rcirc
+ `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
+ `(rcirc-dim-nick ((,class :foreground ,fg-alt)))
+ `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
+ `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
+ `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(rcirc-prompt ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(rcirc-server ((,class :foreground ,fg-unfocused)))
+ `(rcirc-timestamp ((,class :foreground ,blue-nuanced)))
+ `(rcirc-url ((,class :foreground ,blue :underline t)))
+;;;;; regexp-builder (re-builder)
+ `(reb-match-0 ((,class :inherit modus-theme-intense-blue)))
+ `(reb-match-1 ((,class :inherit modus-theme-intense-magenta)))
+ `(reb-match-2 ((,class :inherit modus-theme-intense-green)))
+ `(reb-match-3 ((,class :inherit modus-theme-intense-red)))
+ `(reb-regexp-grouping-backslash ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+ `(reb-regexp-grouping-construct ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+;;;;; rg (rg.el)
+ `(rg-column-number-face ((,class :foreground ,magenta-alt-other)))
+ `(rg-context-face ((,class :foreground ,fg-unfocused)))
+ `(rg-error-face ((,class :inherit bold :foreground ,red)))
+ `(rg-file-tag-face ((,class :foreground ,fg-special-cold)))
+ `(rg-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(rg-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(rg-literal-face ((,class :foreground ,blue-alt)))
+ `(rg-match-face ((,class :inherit modus-theme-special-calm)))
+ `(rg-regexp-face ((,class :foreground ,magenta-active)))
+ `(rg-toggle-off-face ((,class :inherit bold :foreground ,fg-inactive)))
+ `(rg-toggle-on-face ((,class :inherit bold :foreground ,cyan-active)))
+ `(rg-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; ripgrep
+ `(ripgrep-context-face ((,class :foreground ,fg-unfocused)))
+ `(ripgrep-error-face ((,class :inherit bold :foreground ,red)))
+ `(ripgrep-hit-face ((,class :foreground ,cyan)))
+ `(ripgrep-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; rmail
+ `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
+ `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
+;;;;; ruler-mode
+ `(ruler-mode-column-number ((,class :inherit (ruler-mode-default bold) :foreground ,fg-main)))
+ `(ruler-mode-comment-column ((,class :inherit ruler-mode-default :foreground ,red-active)))
+ `(ruler-mode-current-column ((,class :inherit ruler-mode-default :foreground ,cyan-active :box t)))
+ `(ruler-mode-default ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(ruler-mode-fill-column ((,class :inherit ruler-mode-default :foreground ,green-active)))
+ `(ruler-mode-fringes ((,class :inherit ruler-mode-default :foreground ,blue-active)))
+ `(ruler-mode-goal-column ((,class :inherit ruler-mode-default :foreground ,magenta-active)))
+ `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground ,bg-main)))
+ `(ruler-mode-pad ((,class :background ,bg-active :foreground ,fg-inactive)))
+ `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground ,yellow-active)))
+;;;;; sallet
+ `(sallet-buffer-compressed ((,class :foreground ,yellow-nuanced :slant italic)))
+ `(sallet-buffer-default-directory ((,class :foreground ,cyan-nuanced)))
+ `(sallet-buffer-directory ((,class :foreground ,blue-nuanced)))
+ `(sallet-buffer-help ((,class :foreground ,fg-special-cold)))
+ `(sallet-buffer-modified ((,class :foreground ,yellow-alt-other :slant italic)))
+ `(sallet-buffer-ordinary ((,class :foreground ,fg-main)))
+ `(sallet-buffer-read-only ((,class :foreground ,yellow-alt)))
+ `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
+ `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
+ `(sallet-flx-match ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other))))
+ `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced)))
+ `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
+ `(sallet-regexp-match ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other))))
+ `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(sallet-substring-match ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-nuanced-blue
+ blue-alt-other))))
+;;;;; selectrum
+ `(selectrum-current-candidate ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta
+ 'bold))))
+ `(selectrum-primary-highlight ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-blue
+ 'modus-theme-intense-blue
+ 'modus-theme-nuanced-blue
+ blue
+ 'bold))))
+ `(selectrum-secondary-highlight ((,class ,@(modus-operandi-theme-extra-completions
+ 'modus-theme-refine-cyan
+ 'modus-theme-intense-cyan
+ 'modus-theme-nuanced-cyan
+ cyan
+ 'bold))))
+;;;;; semantic
+ `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm :underline t)))
+ `(semantic-decoration-on-private-members-face ((,class :inherit modus-theme-refine-cyan)))
+ `(semantic-decoration-on-protected-members-face ((,class :background ,bg-dim)))
+ `(semantic-highlight-edits-face ((,class :background ,bg-alt)))
+ `(semantic-highlight-func-current-tag-face ((,class :background ,bg-alt)))
+ `(semantic-idle-symbol-highlight ((,class :inherit modus-theme-special-mild)))
+ `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
+ `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
+;;;;; sesman
+ `(sesman-browser-button-face ((,class :foreground ,blue-alt-other :underline t)))
+ `(sesman-browser-highligh-face ((,class :inherit modus-theme-subtle-blue)))
+ `(sesman-buffer-face ((,class :foreground ,magenta)))
+ `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
+ `(sesman-project-face ((,class :inherit bold :foreground ,magenta-alt-other)))
+;;;;; shell-script-mode
+ `(sh-heredoc ((,class :foreground ,blue-alt)))
+ `(sh-quoted-exec ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt)))
+;;;;; show-paren-mode
+ `(show-paren-match ((,class ,@(modus-operandi-theme-paren bg-paren-match
+ bg-paren-match-intense)
+ :foreground ,fg-main)))
+ `(show-paren-match-expression ((,class :inherit modus-theme-special-calm)))
+ `(show-paren-mismatch ((,class :inherit modus-theme-intense-red)))
+;;;;; side-notes
+ `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
+;;;;; skewer-mode
+ `(skewer-error-face ((,class :foreground ,red :underline t)))
+;;;;; smart-mode-line
+ `(sml/charging ((,class :foreground ,green-active)))
+ `(sml/discharging ((,class :foreground ,red-active)))
+ `(sml/filename ((,class :inherit bold :foreground ,blue-active)))
+ `(sml/folder ((,class :foreground ,fg-active)))
+ `(sml/git ((,class :inherit bold :foreground ,green-active)))
+ `(sml/global ((,class :foreground ,fg-active)))
+ `(sml/line-number ((,class :inherit sml/global)))
+ `(sml/minor-modes ((,class :inherit sml/global)))
+ `(sml/modes ((,class :inherit bold :foreground ,fg-active)))
+ `(sml/modified ((,class :inherit bold :foreground ,magenta-active)))
+ `(sml/mule-info ((,class :inherit sml/global)))
+ `(sml/name-filling ((,class :foreground ,yellow-active)))
+ `(sml/not-modified ((,class :inherit sml/global)))
+ `(sml/numbers-separator ((,class :inherit sml/global)))
+ `(sml/outside-modified ((,class :inherit modus-theme-intense-red)))
+ `(sml/position-percentage ((,class :inherit sml/global)))
+ `(sml/prefix ((,class :foreground ,green-active)))
+ `(sml/process ((,class :inherit sml/prefix)))
+ `(sml/projectile ((,class :inherit sml/git)))
+ `(sml/read-only ((,class :inherit bold :foreground ,cyan-active)))
+ `(sml/remote ((,class :inherit sml/global)))
+ `(sml/sudo ((,class :inherit modus-theme-subtle-red)))
+ `(sml/time ((,class :inherit sml/global)))
+ `(sml/vc ((,class :inherit sml/git)))
+ `(sml/vc-edited ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; smartparens
+ `(sp-pair-overlay-face ((,class :inherit modus-theme-special-warm)))
+ `(sp-show-pair-enclosing ((,class :inherit modus-theme-special-mild)))
+ `(sp-show-pair-match-face ((,class ,@(modus-operandi-theme-paren bg-paren-match
+ bg-paren-match-intense)
+ :foreground ,fg-main)))
+ `(sp-show-pair-mismatch-face ((,class :inherit modus-theme-intense-red)))
+ `(sp-wrap-overlay-closing-pair ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-overlay-face ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-overlay-opening-pair ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-tag-overlay-face ((,class :inherit sp-pair-overlay-face)))
+;;;;; smerge
+ `(smerge-base ((,class ,@(modus-operandi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(smerge-lower ((,class ,@(modus-operandi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(smerge-markers ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(smerge-refined-added ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(smerge-refined-changed ((,class)))
+ `(smerge-refined-removed ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-removed fg-diff-removed
+ bg-diff-refine-removed fg-diff-refine-removed))))
+ `(smerge-upper ((,class ,@(modus-operandi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; spaceline
+ `(spaceline-evil-emacs ((,class :inherit modus-theme-active-magenta)))
+ `(spaceline-evil-insert ((,class :inherit modus-theme-active-green)))
+ `(spaceline-evil-motion ((,class :inherit modus-theme-active-blue)))
+ `(spaceline-evil-normal ((,class :background ,fg-alt :foreground ,bg-alt)))
+ `(spaceline-evil-replace ((,class :inherit modus-theme-active-red)))
+ `(spaceline-evil-visual ((,class :inherit modus-theme-active-cyan)))
+ `(spaceline-flycheck-error ((,class :foreground ,red-active)))
+ `(spaceline-flycheck-info ((,class :foreground ,cyan-active)))
+ `(spaceline-flycheck-warning ((,class :foreground ,yellow-active)))
+ `(spaceline-highlight-face ((,class :inherit modus-theme-fringe-blue)))
+ `(spaceline-modified ((,class :inherit modus-theme-fringe-magenta)))
+ `(spaceline-python-venv ((,class :foreground ,magenta-active)))
+ `(spaceline-read-only ((,class :inherit modus-theme-fringe-red)))
+ `(spaceline-unmodified ((,class :inherit modus-theme-fringe-cyan)))
+;;;;; speedbar
+ `(speedbar-button-face ((,class :inherit link)))
+ `(speedbar-directory-face ((,class :inherit bold :foreground ,blue)))
+ `(speedbar-file-face ((,class :foreground ,fg-main)))
+ `(speedbar-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+ `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
+ `(speedbar-separator-face ((,class :inherit modus-theme-intense-neutral)))
+ `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
+;;;;; spell-fu
+ `(spell-fu-incorrect-face
+ ((,(append '((supports :underline (:style wave))) class)
+ :foreground ,fg-lang-error :underline (:style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+;;;;; stripes
+ `(stripes ((,class :inherit modus-theme-hl-line)))
+;;;;; success
+ `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
+;;;;; switch-window
+ `(switch-window-background ((,class :background ,bg-dim)))
+ `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
+;;;;; swiper
+ `(swiper-background-match-face-1 ((,class :inherit modus-theme-subtle-neutral)))
+ `(swiper-background-match-face-2 ((,class :inherit modus-theme-subtle-cyan)))
+ `(swiper-background-match-face-3 ((,class :inherit modus-theme-subtle-magenta)))
+ `(swiper-background-match-face-4 ((,class :inherit modus-theme-subtle-green)))
+ `(swiper-line-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-special-cold)))
+ `(swiper-match-face-1 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-2 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-3 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-4 ((,class :inherit swiper-line-face)))
+;;;;; swoop
+ `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3))))
+ `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
+ ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4))))
+ `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
+ `(swoop-face-target-line ((,class :inherit modus-theme-intense-blue
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(swoop-face-target-words ((,class :inherit modus-theme-refine-cyan)))
+;;;;; sx
+ `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
+ `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
+ `(sx-question-list-answers ((,class :foreground ,green)))
+ `(sx-question-list-answers-accepted ((,class :box t :foreground ,green)))
+ `(sx-question-list-bounty ((,class :inherit bold :background ,bg-alt :foreground ,yellow)))
+ `(sx-question-list-date ((,class :foreground ,fg-special-cold)))
+ `(sx-question-list-favorite ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(sx-question-list-parent ((,class :foreground ,fg-main)))
+ `(sx-question-list-read-question ((,class :foreground ,fg-alt)))
+ `(sx-question-list-score ((,class :foreground ,fg-special-mild)))
+ `(sx-question-list-score-upvoted ((,class :inherit (sx-question-list-score bold))))
+ `(sx-question-list-unread-question ((,class :inherit bold :foreground ,fg-main)))
+ `(sx-question-mode-accepted ((,class :inherit bold :height 1.3 :foreground ,green)))
+ `(sx-question-mode-closed ((,class :inherit modus-theme-active-yellow :box (:line-width 2 :color nil))))
+ `(sx-question-mode-closed-reason ((,class :box (:line-width 2 :color nil) :foreground ,fg-main)))
+ `(sx-question-mode-content-face ((,class :background ,bg-dim)))
+ `(sx-question-mode-date ((,class :foreground ,blue)))
+ `(sx-question-mode-header ((,class :inherit bold :foreground ,cyan)))
+ `(sx-question-mode-kbd-tag ((,class :inherit bold :height 0.9 :box (:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main)))
+ `(sx-question-mode-score ((,class :foreground ,fg-dim)))
+ `(sx-question-mode-score-downvoted ((,class :foreground ,yellow)))
+ `(sx-question-mode-score-upvoted ((,class :inherit bold :foreground ,magenta)))
+ `(sx-question-mode-title ((,class :inherit bold :foreground ,fg-main)))
+ `(sx-question-mode-title-comments ((,class :inherit bold :foreground ,fg-alt)))
+ `(sx-tag ((,class :foreground ,magenta-alt)))
+ `(sx-user-name ((,class :foreground ,blue-alt)))
+ `(sx-user-reputation ((,class :foreground ,fg-alt)))
+;;;;; symbol-overlay
+ `(symbol-overlay-default-face ((,class :inherit modus-theme-special-warm)))
+ `(symbol-overlay-face-1 ((,class :inherit modus-theme-intense-blue)))
+ `(symbol-overlay-face-2 ((,class :inherit modus-theme-refine-magenta)))
+ `(symbol-overlay-face-3 ((,class :inherit modus-theme-intense-yellow)))
+ `(symbol-overlay-face-4 ((,class :inherit modus-theme-intense-magenta)))
+ `(symbol-overlay-face-5 ((,class :inherit modus-theme-intense-red)))
+ `(symbol-overlay-face-6 ((,class :inherit modus-theme-refine-red)))
+ `(symbol-overlay-face-7 ((,class :inherit modus-theme-intense-cyan)))
+ `(symbol-overlay-face-8 ((,class :inherit modus-theme-refine-cyan)))
+;;;;; syslog-mode
+ `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(syslog-error ((,class :inherit bold :foreground ,red)))
+ `(syslog-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(syslog-hide ((,class :background ,bg-main :foreground ,fg-main)))
+ `(syslog-hour ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(syslog-info ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline t)))
+ `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
+ `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
+;;;;; table (built-in table.el)
+ `(table-cell ((,class :background ,blue-nuanced-bg)))
+;;;;; telephone-line
+ `(telephone-line-accent-active ((,class :background ,fg-inactive :foreground ,bg-inactive)))
+ `(telephone-line-accent-inactive ((,class :background ,bg-active :foreground ,fg-active)))
+ `(telephone-line-error ((,class :inherit bold :foreground ,red-active)))
+ `(telephone-line-evil ((,class :foreground ,fg-main)))
+ `(telephone-line-evil-emacs ((,class :inherit telephone-line-evil :background ,magenta-intense-bg)))
+ `(telephone-line-evil-insert ((,class :inherit telephone-line-evil :background ,green-intense-bg)))
+ `(telephone-line-evil-motion ((,class :inherit telephone-line-evil :background ,yellow-intense-bg)))
+ `(telephone-line-evil-normal ((,class :inherit telephone-line-evil :background ,bg-alt)))
+ `(telephone-line-evil-operator ((,class :inherit telephone-line-evil :background ,yellow-subtle-bg)))
+ `(telephone-line-evil-replace ((,class :inherit telephone-line-evil :background ,red-intense-bg)))
+ `(telephone-line-evil-visual ((,class :inherit telephone-line-evil :background ,cyan-intense-bg)))
+ `(telephone-line-projectile ((,class :foreground ,cyan-active)))
+ `(telephone-line-unimportant ((,class :foreground ,fg-inactive)))
+ `(telephone-line-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; term
+ `(term ((,class :background ,bg-main :foreground ,fg-main)))
+ `(term-bold ((,class :inherit bold)))
+ `(term-color-blue ((,class :background ,blue :foreground ,blue)))
+ `(term-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+ `(term-color-green ((,class :background ,green :foreground ,green)))
+ `(term-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+ `(term-color-red ((,class :background ,red :foreground ,red)))
+ `(term-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+ `(term-underline ((,class :underline t)))
+;;;;; tomatinho
+ `(tomatinho-ok-face ((,class :foreground ,blue-intense)))
+ `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
+ `(tomatinho-reset-face ((,class :foreground ,fg-alt)))
+;;;;; transient
+ `(transient-active-infix ((,class :inherit modus-theme-special-mild)))
+ `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
+ `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
+ `(transient-blue ((,class :inherit bold :foreground ,blue)))
+ `(transient-disabled-suffix ((,class :inherit modus-theme-intense-red)))
+ `(transient-enabled-suffix ((,class :inherit modus-theme-intense-green)))
+ `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
+ `(transient-inactive-argument ((,class :foreground ,fg-alt)))
+ `(transient-inactive-value ((,class :foreground ,fg-alt)))
+ `(transient-key ((,class :inherit bold :foreground ,blue)))
+ `(transient-mismatched-key ((,class :underline t)))
+ `(transient-nonstandard-key ((,class :underline t)))
+ `(transient-pink ((,class :inherit bold :foreground ,magenta)))
+ `(transient-red ((,class :inherit bold :foreground ,red-intense)))
+ `(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(transient-unreachable ((,class :foreground ,fg-unfocused)))
+ `(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
+ `(transient-value ((,class :foreground ,magenta-alt)))
+;;;;; trashed
+ `(trashed-deleted ((,class :inherit modus-theme-mark-del)))
+ `(trashed-directory ((,class :foreground ,blue)))
+ `(trashed-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(trashed-marked ((,class :inherit modus-theme-mark-alt)))
+ `(trashed-restored ((,class :inherit modus-theme-mark-sel)))
+ `(trashed-symlink ((,class :foreground ,cyan-alt :underline t)))
+;;;;; treemacs
+ `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
+ `(treemacs-directory-face ((,class :inherit dired-directory)))
+ `(treemacs-file-face ((,class :foreground ,fg-main)))
+ `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
+ `(treemacs-git-added-face ((,class :foreground ,green-intense)))
+ `(treemacs-git-conflict-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(treemacs-git-ignored-face ((,class :foreground ,fg-alt)))
+ `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
+ `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
+ `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
+ `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
+ `(treemacs-help-column-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt-other :underline t)))
+ `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
+ `(treemacs-on-failure-pulse-face ((,class :inherit modus-theme-intense-red)))
+ `(treemacs-on-success-pulse-face ((,class :inherit modus-theme-intense-green)))
+ `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other :height 1.2 :underline t)))
+ `(treemacs-root-remote-disconnected-face ((,class :inherit treemacs-root-remote-face :foreground ,yellow)))
+ `(treemacs-root-remote-face ((,class :inherit treemacs-root-face :foreground ,magenta)))
+ `(treemacs-root-remote-unreadable-face ((,class :inherit treemacs-root-unreadable-face)))
+ `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face :strike-through t)))
+ `(treemacs-tags-face ((,class :foreground ,blue-alt)))
+ `(treemacs-tags-face ((,class :foreground ,magenta-alt)))
+;;;;; tty-menu
+ `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt :foreground ,fg-main)))
+ `(tty-menu-selected-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; tuareg
+ `(caml-types-def-face ((,class :inherit modus-theme-subtle-red)))
+ `(caml-types-expr-face ((,class :inherit modus-theme-subtle-green)))
+ `(caml-types-occ-face ((,class :inherit modus-theme-subtle-green)))
+ `(caml-types-scope-face ((,class :inherit modus-theme-subtle-blue)))
+ `(caml-types-typed-face ((,class :inherit modus-theme-subtle-magenta)))
+ `(tuareg-font-double-semicolon-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(tuareg-font-lock-attribute-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(tuareg-font-lock-constructor-face ((,class :foreground ,fg-main)))
+ `(tuareg-font-lock-error-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(tuareg-font-lock-extension-node-face ((,class :background ,bg-alt :foreground ,magenta)))
+ `(tuareg-font-lock-governing-face ((,class :inherit bold :foreground ,fg-main)))
+ `(tuareg-font-lock-infix-extension-node-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(tuareg-font-lock-interactive-directive-face ((,class :foreground ,fg-special-cold)))
+ `(tuareg-font-lock-interactive-error-face ((,class :inherit bold
+ ,@(modus-operandi-theme-syntax-foreground
+ red red-faint))))
+ `(tuareg-font-lock-interactive-output-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(tuareg-font-lock-label-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(tuareg-font-lock-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(tuareg-font-lock-module-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(tuareg-font-lock-multistage-face ((,class :inherit bold :background ,bg-alt
+ ,@(modus-operandi-theme-syntax-foreground
+ blue blue-faint))))
+ `(tuareg-font-lock-operator-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(tuareg-opam-error-face ((,class :inherit bold
+ ,@(modus-operandi-theme-syntax-foreground
+ red red-faint))))
+ `(tuareg-opam-pkg-variable-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint)
+ :slant ,modus-theme-slant)))
+;;;;; undo-tree
+ `(undo-tree-visualizer-active-branch-face ((,class :inherit bold :foreground ,fg-main)))
+ `(undo-tree-visualizer-current-face ((,class :foreground ,blue-intense)))
+ `(undo-tree-visualizer-default-face ((,class :foreground ,fg-alt)))
+ `(undo-tree-visualizer-register-face ((,class :foreground ,magenta-intense)))
+ `(undo-tree-visualizer-unmodified-face ((,class :foreground ,green-intense)))
+;;;;; vc
+ `(vc-conflict-state ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,red-active)))
+ `(vc-edited-state ((,class :foreground ,fg-special-warm)))
+ `(vc-locally-added-state ((,class :foreground ,cyan-active)))
+ `(vc-locked-state ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,magenta-active)))
+ `(vc-missing-state ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,yellow-active)))
+ `(vc-needs-update-state ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,fg-special-mild)))
+ `(vc-removed-state ((,class :foreground ,red-active)))
+ `(vc-state-base ((,class :foreground ,fg-active)))
+ `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
+;;;;; vdiff
+ `(vdiff-addition-face ((,class ,@(modus-operandi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(vdiff-change-face ((,class ,@(modus-operandi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(vdiff-closed-fold-face ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(vdiff-refine-added ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(vdiff-refine-changed ((,class ,@(modus-operandi-theme-diffs
+ bg-diff-changed fg-diff-changed
+ bg-diff-refine-changed fg-diff-refine-changed))))
+ `(vdiff-subtraction-face ((,class ,@(modus-operandi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+ `(vdiff-target-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; vimish-fold
+ `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
+ `(vimish-fold-mouse-face ((,class :inherit modus-theme-intense-blue)))
+ `(vimish-fold-overlay ((,class :background ,bg-alt :foreground ,fg-special-cold)))
+;;;;; visible-mark
+ `(visible-mark-active ((,class :background ,blue-intense-bg)))
+ `(visible-mark-face1 ((,class :background ,cyan-intense-bg)))
+ `(visible-mark-face2 ((,class :background ,yellow-intense-bg)))
+ `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
+ `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
+;;;;; visual-regexp
+ `(vr/group-0 ((,class :inherit modus-theme-intense-blue)))
+ `(vr/group-1 ((,class :inherit modus-theme-intense-magenta)))
+ `(vr/group-2 ((,class :inherit modus-theme-intense-green)))
+ `(vr/match-0 ((,class :inherit modus-theme-refine-yellow)))
+ `(vr/match-1 ((,class :inherit modus-theme-refine-yellow)))
+ `(vr/match-separator-face ((,class :inherit (modus-theme-intense-neutral bold))))
+;;;;; volatile-highlights
+ `(vhl/default-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :background ,bg-alt :foreground ,blue-nuanced)))
+;;;;; vterm
+ `(vterm-color-black ((,class :background "black" :foreground "black")))
+ `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
+ `(vterm-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+ `(vterm-color-default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(vterm-color-green ((,class :background ,green :foreground ,green)))
+ `(vterm-color-inverse-video ((,class :background ,bg-main :inverse-video t)))
+ `(vterm-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+ `(vterm-color-red ((,class :background ,red :foreground ,red)))
+ `(vterm-color-underline ((,class :foreground ,fg-special-warm :underline t)))
+ `(vterm-color-white ((,class :background "white" :foreground "white")))
+ `(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+;;;;; wcheck-mode
+ `(wcheck-default-face ((,class :foreground ,red :underline t)))
+;;;;; web-mode
+ `(web-mode-annotation-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-annotation-html-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-annotation-tag-face ((,class :inherit web-mode-comment-face :underline t)))
+ `(web-mode-block-attr-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue blue-faint))))
+ `(web-mode-block-attr-value-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(web-mode-block-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-block-control-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-block-delimiter-face ((,class :foreground ,fg-main)))
+ `(web-mode-block-face ((,class :background ,bg-dim)))
+ `(web-mode-block-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-bold-face ((,class :inherit bold)))
+ `(web-mode-builtin-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(web-mode-comment-keyword-face ((,class :inherit bold :background ,bg-dim
+ ,@(modus-operandi-theme-syntax-foreground
+ yellow yellow-faint))))
+ `(web-mode-constant-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-css-at-rule-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-css-color-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-css-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-css-function-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-css-priority-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ yellow-alt yellow-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-css-property-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-css-pseudo-class-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(web-mode-css-selector-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-css-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-css-variable-face ((,class :foreground ,fg-special-warm)))
+ `(web-mode-current-column-highlight-face ((,class :background ,bg-alt)))
+ `(web-mode-current-element-highlight-face ((,class :inherit modus-theme-special-mild)))
+ `(web-mode-doctype-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(web-mode-error-face ((,class :inherit modus-theme-intense-red)))
+ `(web-mode-filter-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-folded-face ((,class :underline t)))
+ `(web-mode-function-call-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-function-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-attr-custom-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-html-attr-engine-face ((,class :foreground ,fg-main)))
+ `(web-mode-html-attr-equal-face ((,class :foreground ,fg-main)))
+ `(web-mode-html-attr-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-html-attr-value-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-html-entity-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ yellow-alt-other yellow-alt-other-faint)
+ :slant ,modus-theme-slant)))
+ `(web-mode-html-tag-bracket-face ((,class :foreground ,fg-dim)))
+ `(web-mode-html-tag-custom-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-tag-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-tag-namespaced-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-html-tag-unclosed-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ red red-faint)
+ :underline t)))
+ `(web-mode-inlay-face ((,class :background ,bg-alt)))
+ `(web-mode-italic-face ((,class :slant italic)))
+ `(web-mode-javascript-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-javascript-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-json-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-json-context-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(web-mode-json-key-face ((,class :foreground ,blue-nuanced)))
+ `(web-mode-json-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-jsx-depth-1-face ((,class :background ,blue-intense-bg :foreground ,fg-main)))
+ `(web-mode-jsx-depth-2-face ((,class :background ,blue-subtle-bg :foreground ,fg-main)))
+ `(web-mode-jsx-depth-3-face ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(web-mode-jsx-depth-4-face ((,class :background ,bg-alt :foreground ,blue-refine-fg)))
+ `(web-mode-jsx-depth-5-face ((,class :background ,bg-alt :foreground ,blue-nuanced)))
+ `(web-mode-keyword-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-operandi-theme-bold-weight))))
+ `(web-mode-param-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-part-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-part-face ((,class :inherit web-mode-block-face)))
+ `(web-mode-part-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-preprocessor-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(web-mode-script-face ((,class :inherit web-mode-part-face)))
+ `(web-mode-sql-keyword-face ((,class :inherit bold
+ ,@(modus-operandi-theme-syntax-foreground
+ yellow yellow-faint))))
+ `(web-mode-string-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt blue-alt-faint))))
+ `(web-mode-style-face ((,class :inherit web-mode-part-face)))
+ `(web-mode-symbol-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-type-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(web-mode-underline-face ((,class :underline t)))
+ `(web-mode-variable-name-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-warning-face ((,class :inherit bold :background ,bg-alt
+ ,@(modus-operandi-theme-syntax-foreground
+ yellow-alt-other yellow-alt-other-faint))))
+ `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+;;;;; wgrep
+ `(wgrep-delete-face ((,class :inherit modus-theme-refine-yellow)))
+ `(wgrep-done-face ((,class :inherit modus-theme-refine-blue)))
+ `(wgrep-face ((,class :inherit modus-theme-refine-green)))
+ `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
+ `(wgrep-reject-face ((,class :inherit (modus-theme-intense-red bold))))
+;;;;; which-function-mode
+ `(which-func ((,class :foreground ,magenta-active)))
+;;;;; which-key
+ `(which-key-command-description-face ((,class :foreground ,cyan)))
+ `(which-key-group-description-face ((,class :foreground ,magenta-alt)))
+ `(which-key-highlighted-command-face ((,class :foreground ,cyan-alt :underline t)))
+ `(which-key-key-face ((,class :inherit bold :foreground ,blue-intense)))
+ `(which-key-local-map-description-face ((,class :foreground ,fg-main)))
+ `(which-key-note-face ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(which-key-separator-face ((,class :foreground ,fg-alt)))
+ `(which-key-special-key-face ((,class :inherit bold :foreground ,yellow-intense)))
+;;;;; whitespace-mode
+ `(whitespace-big-indent ((,class :inherit modus-theme-subtle-red)))
+ `(whitespace-empty ((,class :inherit modus-theme-intense-magenta)))
+ `(whitespace-hspace ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-indentation ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-line ((,class :inherit modus-theme-special-warm)))
+ `(whitespace-newline ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-space ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-space-after-tab ((,class :inherit modus-theme-subtle-magenta)))
+ `(whitespace-space-before-tab ((,class :inherit modus-theme-subtle-cyan)))
+ `(whitespace-tab ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-trailing ((,class :inherit modus-theme-intense-red)))
+;;;;; window-divider-mode
+ `(window-divider ((,class :foreground ,fg-window-divider-inner)))
+ `(window-divider-first-pixel ((,class :foreground ,fg-window-divider-outer)))
+ `(window-divider-last-pixel ((,class :foreground ,fg-window-divider-outer)))
+;;;;; winum
+ `(winum-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground ,cyan-active)))
+;;;;; writegood-mode
+ `(writegood-duplicates-face ((,class :background ,bg-alt :foreground ,red-alt :underline t)))
+ `(writegood-passive-voice-face ((,class :foreground ,yellow-nuanced :underline ,fg-lang-warning)))
+ `(writegood-weasels-face ((,class :foreground ,red-nuanced :underline ,fg-lang-error)))
+;;;;; woman
+ `(woman-addition ((,class :foreground ,magenta-alt-other)))
+ `(woman-bold ((,class :inherit bold :foreground ,magenta)))
+ `(woman-italic ((,class :foreground ,cyan :slant italic)))
+ `(woman-unknown ((,class :foreground ,yellow :slant italic)))
+;;;;; xah-elisp-mode
+ `(xah-elisp-at-symbol ((,class :inherit bold
+ ,@(modus-operandi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(xah-elisp-cap-variable ((,class ,@(modus-operandi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(xah-elisp-command-face ((,class ,@(modus-operandi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(xah-elisp-dollar-symbol ((,class ,@(modus-operandi-theme-syntax-foreground
+ green green-faint))))
+;;;;; xref
+ `(xref-file-header ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(xref-line-number ((,class :foreground ,fg-alt)))
+ `(xref-match ((,class :inherit match)))
+;;;;; yaml-mode
+ `(yaml-tab-face ((,class :inherit modus-theme-intense-red)))
+;;;;; yasnippet
+ `(yas-field-highlight-face ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; ztree
+ `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
+ `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground ,fg-special-cold)))
+ `(ztreep-diff-header-small-face ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(ztreep-diff-model-add-face ((,class :foreground ,green)))
+ `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
+ `(ztreep-diff-model-ignored-face ((,class :foreground ,fg-alt :strike-through t)))
+ `(ztreep-diff-model-normal-face ((,class :foreground ,fg-alt)))
+ `(ztreep-expand-sign-face ((,class :foreground ,blue)))
+ `(ztreep-header-face ((,class :inherit bold :height 1.2 :foreground ,fg-special-cold)))
+ `(ztreep-leaf-face ((,class :foreground ,cyan)))
+ `(ztreep-node-count-children-face ((,class :foreground ,fg-special-warm)))
+ `(ztreep-node-face ((,class :foreground ,fg-main))))
+;;;; Emacs 27+
+ ;; EXPERIMENTAL this form is subject to review
+ (when (>= emacs-major-version 27)
+ (custom-theme-set-faces
+ 'modus-operandi
+;;;;; line numbers (`display-line-numbers-mode' and global variant)
+ ;; NOTE that this is specifically for the faces that were
+ ;; introduced in Emacs 27, as the other faces are already
+ ;; supported.
+ `(line-number-major-tick ((,class (:background ,yellow-nuanced-bg :foreground ,yellow-nuanced))))
+ `(line-number-minor-tick ((,class (:background ,cyan-nuanced-bg :foreground ,cyan-nuanced))))
+;;;;; tab-bar-mode
+ `(tab-bar ((,class :background ,bg-tab-bar :foreground ,fg-main)))
+ `(tab-bar-tab ((,class :inherit bold :box (:line-width 2 :color ,bg-tab-active)
+ :background ,bg-tab-active :foreground ,fg-main)))
+ `(tab-bar-tab-inactive ((,class :box (:line-width 2 :color ,bg-tab-inactive)
+ :background ,bg-tab-inactive :foreground ,fg-dim)))
+;;;;; tab-line-mode
+ `(tab-line ((,class :height 0.95 :background ,bg-tab-bar :foreground ,fg-main)))
+ `(tab-line-close-highlight ((,class :foreground ,red)))
+ `(tab-line-highlight ((,class :background ,blue-subtle-bg :foreground ,fg-dim)))
+ `(tab-line-tab ((,class :inherit bold :box (:line-width 2 :color ,bg-tab-active)
+ :background ,bg-tab-active :foreground ,fg-main)))
+ `(tab-line-tab-current ((,class :inherit tab-line-tab)))
+ `(tab-line-tab-inactive ((,class :box (:line-width 2 :color ,bg-tab-inactive)
+ :background ,bg-tab-inactive :foreground ,fg-dim)))))
+;;; variables
+ (custom-theme-set-variables
+ 'modus-operandi
+;;;; ansi-colors
+ `(ansi-color-faces-vector [default bold shadow italic underline success warning error])
+ `(ansi-color-names-vector [,fg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,bg-main])
+;;;; flymake fringe indicators
+ `(flymake-error-bitmap '(flymake-double-exclamation-mark modus-theme-fringe-red))
+ `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
+ `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
+;;;; ibuffer
+ `(ibuffer-deletion-face 'modus-theme-mark-del)
+ `(ibuffer-filter-group-name-face 'modus-theme-mark-symbol)
+ `(ibuffer-marked-face 'modus-theme-mark-sel)
+ `(ibuffer-title-face 'modus-theme-header)
+;;;; highlight-tail
+ `(highlight-tail-colors
+ '((,green-subtle-bg . 0)
+ (,cyan-subtle-bg . 20)))
+;;;; hl-todo
+ `(hl-todo-keyword-faces
+ '(("HOLD" . ,yellow-alt)
+ ("TODO" . ,magenta)
+ ("NEXT" . ,magenta-alt-other)
+ ("THEM" . ,magenta-alt)
+ ("PROG" . ,cyan)
+ ("OKAY" . ,cyan-alt)
+ ("DONT" . ,green-alt)
+ ("FAIL" . ,red)
+ ("BUG" . ,red)
+ ("DONE" . ,green)
+ ("NOTE" . ,yellow-alt-other)
+ ("KLUDGE" . ,yellow)
+ ("HACK" . ,yellow)
+ ("TEMP" . ,red-nuanced)
+ ("FIXME" . ,red-alt-other)
+ ("XXX+" . ,red-alt)
+ ("REVIEW" . ,cyan-alt-other)
+ ("DEPRECATED" . ,blue-nuanced)))
+;;;; vc-annotate (C-x v g)
+ `(vc-annotate-background nil)
+ `(vc-annotate-background-mode nil)
+ `(vc-annotate-color-map
+ '((20 . ,red)
+ (40 . ,magenta)
+ (60 . ,magenta-alt)
+ (80 . ,red-alt)
+ (100 . ,yellow)
+ (120 . ,yellow-alt)
+ (140 . ,fg-special-warm)
+ (160 . ,fg-special-mild)
+ (180 . ,green)
+ (200 . ,green-alt)
+ (220 . ,cyan-alt-other)
+ (240 . ,cyan-alt)
+ (260 . ,cyan)
+ (280 . ,fg-special-cold)
+ (300 . ,blue)
+ (320 . ,blue-alt)
+ (340 . ,blue-alt-other)
+ (360 . ,magenta-alt-other)))
+ `(vc-annotate-very-old-color nil)
+;;;; xterm-color
+ `(xterm-color-names [,fg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,bg-alt])
+ `(xterm-color-names-bright [,fg-alt ,red-alt ,green-alt ,yellow-alt ,blue-alt ,magenta-alt ,cyan-alt ,bg-main]))
+;;; Conditional theme variables
+;;;; org-src-block-faces
+ ;; this is a user option to add a colour-coded background to source
+ ;; blocks for various programming languages
+ (when (eq modus-operandi-theme-org-blocks 'rainbow)
+ (custom-theme-set-variables
+ 'modus-operandi
+ `(org-src-block-faces ; TODO this list should be expanded
+ `(("emacs-lisp" modus-theme-nuanced-magenta)
+ ("elisp" modus-theme-nuanced-magenta)
+ ("clojure" modus-theme-nuanced-magenta)
+ ("clojurescript" modus-theme-nuanced-magenta)
+ ("c" modus-theme-nuanced-blue)
+ ("c++" modus-theme-nuanced-blue)
+ ("sh" modus-theme-nuanced-green)
+ ("shell" modus-theme-nuanced-green)
+ ("html" modus-theme-nuanced-yellow)
+ ("xml" modus-theme-nuanced-yellow)
+ ("css" modus-theme-nuanced-red)
+ ("scss" modus-theme-nuanced-red)
+ ("python" modus-theme-nuanced-green)
+ ("ipython" modus-theme-nuanced-magenta)
+ ("r" modus-theme-nuanced-cyan)
+ ("yaml" modus-theme-nuanced-cyan)
+ ("conf" modus-theme-nuanced-cyan)
+ ("docker" modus-theme-nuanced-cyan)
+ ("json" modus-theme-nuanced-cyan))))))
+
+;;; library provides
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'modus-operandi)
+
+(provide 'modus-operandi-theme)
+
+;;; modus-operandi-theme.el ends here
diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el
new file mode 100644
index 00000000000..fa1b6be8b8e
--- /dev/null
+++ b/etc/themes/modus-vivendi-theme.el
@@ -0,0 +1,4266 @@
+;;; modus-vivendi-theme.el --- Accessible dark theme (WCAG AAA) -*- lexical-binding:t -*-
+
+;; Copyright (c) 2019-2020 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; URL: https://gitlab.com/protesilaos/modus-themes
+;; Version: 0.12.0
+;; Package-Requires: ((emacs "26.1"))
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; This theme is designed for colour-contrast accessibility.
+;;
+;; 1. Provide a consistent minimum contrast ratio between background and
+;; foreground values of 7:1 or higher. This meets the highest such
+;; accessibility criterion per the guidelines of the Worldwide Web
+;; Consortium's Working Group on Accessibility (WCAG AAA standard).
+;;
+;; 2. Offer as close to full face coverage as possible. The list is
+;; already quite long (see further below), with more additions to follow
+;; as part of the ongoing development process.
+;;
+;; The theme provides the following customisation options, all of which
+;; are disabled by default:
+;;
+;; modus-vivendi-theme-slanted-constructs (boolean)
+;; modus-vivendi-theme-bold-constructs (boolean)
+;; modus-vivendi-theme-variable-pitch-headings (boolean)
+;; modus-vivendi-theme-rainbow-headings (boolean)
+;; modus-vivendi-theme-section-headings (boolean)
+;; modus-vivendi-theme-scale-headings (boolean)
+;; modus-vivendi-theme-fringes (choice)
+;; modus-vivendi-theme-org-blocks (choice)
+;; modus-vivendi-theme-prompts (choice)
+;; modus-vivendi-theme-3d-modeline (boolean)
+;; modus-vivendi-theme-subtle-diffs (boolean)
+;; modus-vivendi-theme-faint-syntax (boolean)
+;; modus-vivendi-theme-intense-hl-line (boolean)
+;; modus-vivendi-theme-intense-paren-match (boolean)
+;; modus-vivendi-theme-completions (choice)
+;; modus-vivendi-theme-override-colors-alist (alist)
+;;
+;; The default scale is as follows (it can be customised as well):
+;;
+;; modus-vivendi-theme-scale-1 1.05
+;; modus-vivendi-theme-scale-2 1.1
+;; modus-vivendi-theme-scale-3 1.15
+;; modus-vivendi-theme-scale-4 1.2
+;; modus-vivendi-theme-scale-5 1.3
+;;
+;; What follows is the list of explicitly supported packages or face
+;; groups (there are implicitly supported packages as well, which
+;; inherit from font-lock or some basic group). You are encouraged to
+;; notify me of any missing package or change you would like to see.
+;;
+;; ace-window
+;; ag
+;; alert
+;; all-the-icons
+;; annotate
+;; anzu
+;; apropos
+;; apt-sources-list
+;; artbollocks-mode
+;; auctex and TeX
+;; auto-dim-other-buffers
+;; avy
+;; bm
+;; bongo
+;; boon
+;; breakpoint (provided by built-in gdb-mi.el)
+;; buffer-expose
+;; calendar and diary
+;; calfw
+;; centaur-tabs
+;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+;; cider
+;; circe
+;; color-rg
+;; column-enforce-mode
+;; company-mode
+;; company-posframe
+;; compilation-mode
+;; completions
+;; counsel
+;; counsel-css
+;; counsel-notmuch
+;; counsel-org-capture-string
+;; cov
+;; csv-mode
+;; ctrlf
+;; custom (M-x customize)
+;; dap-mode
+;; dashboard (emacs-dashboard)
+;; deadgrep
+;; debbugs
+;; define-word
+;; deft
+;; dictionary
+;; diff-hl
+;; diff-mode
+;; dim-autoload
+;; dired
+;; dired-async
+;; dired-git
+;; dired-git-info
+;; dired-narrow
+;; dired-subtree
+;; diredfl
+;; disk-usage
+;; doom-modeline
+;; dynamic-ruler
+;; easy-jekyll
+;; easy-kill
+;; ebdb
+;; ediff
+;; eglot
+;; el-search
+;; eldoc-box
+;; elfeed
+;; elfeed-score
+;; emms
+;; enhanced-ruby-mode
+;; epa
+;; equake
+;; erc
+;; eros
+;; ert
+;; eshell
+;; eshell-fringe-status
+;; eshell-git-prompt
+;; eshell-prompt-extras (epe)
+;; evil (evil-mode)
+;; evil-goggles
+;; evil-visual-mark-mode
+;; eww
+;; eyebrowse
+;; fancy-dabbrev
+;; flycheck
+;; flycheck-indicator
+;; flycheck-posframe
+;; flymake
+;; flyspell
+;; flyspell-correct
+;; flx
+;; freeze-it
+;; frog-menu
+;; focus
+;; fold-this
+;; font-lock (generic syntax highlighting)
+;; forge
+;; fountain (fountain-mode)
+;; geiser
+;; git-commit
+;; git-gutter (and variants)
+;; git-lens
+;; git-rebase
+;; git-timemachine
+;; git-walktree
+;; gnus
+;; golden-ratio-scroll-screen
+;; helm
+;; helm-ls-git
+;; helm-switch-shell
+;; helm-xref
+;; helpful
+;; highlight-blocks
+;; highlight-defined
+;; highlight-escape-sequences (`hes-mode')
+;; highlight-indentation
+;; highlight-numbers
+;; highlight-symbol
+;; highlight-tail
+;; highlight-thing
+;; hl-defined
+;; hl-fill-column
+;; hl-line-mode
+;; hl-todo
+;; hydra
+;; hyperlist
+;; ibuffer
+;; icomplete
+;; ido-mode
+;; iedit
+;; iflipb
+;; imenu-list
+;; indium
+;; info
+;; info-colors
+;; interaction-log
+;; ioccur
+;; isearch, occur, etc.
+;; ivy
+;; ivy-posframe
+;; jira (org-jira)
+;; journalctl-mode
+;; js2-mode
+;; julia
+;; jupyter
+;; kaocha-runner
+;; keycast
+;; line numbers (`display-line-numbers-mode' and global variant)
+;; lsp-mode
+;; lsp-ui
+;; magit
+;; magit-imerge
+;; man
+;; markdown-mode
+;; markup-faces (`adoc-mode')
+;; mentor
+;; messages
+;; minibuffer-line
+;; minimap
+;; modeline
+;; mood-line
+;; mu4e
+;; mu4e-conversation
+;; multiple-cursors
+;; neotree
+;; no-emoji
+;; notmuch
+;; num3-mode
+;; nxml-mode
+;; orderless
+;; org
+;; org-journal
+;; org-noter
+;; org-pomodoro
+;; org-recur
+;; org-roam
+;; org-superstar
+;; org-table-sticky-header
+;; org-treescope
+;; origami
+;; outline-mode
+;; outline-minor-faces
+;; package (M-x list-packages)
+;; page-break-lines
+;; paradox
+;; paren-face
+;; parrot
+;; pass
+;; persp-mode
+;; perspective
+;; phi-grep
+;; phi-search
+;; pkgbuild-mode
+;; pomidor
+;; powerline
+;; powerline-evil
+;; proced
+;; prodigy
+;; rainbow-blocks
+;; rainbow-identifiers
+;; rainbow-delimiters
+;; rcirc
+;; regexp-builder (also known as `re-builder')
+;; rg
+;; ripgrep
+;; rmail
+;; ruler-mode
+;; sallet
+;; selectrum
+;; semantic
+;; sesman
+;; shell-script-mode
+;; show-paren-mode
+;; side-notes
+;; skewer-mode
+;; smart-mode-line
+;; smartparens
+;; smerge
+;; spaceline
+;; speedbar
+;; spell-fu
+;; stripes
+;; suggest
+;; switch-window
+;; swiper
+;; swoop
+;; sx
+;; symbol-overlay
+;; tab-bar-mode
+;; tab-line-mode
+;; syslog-mode
+;; table (built-in table.el)
+;; telephone-line
+;; term
+;; tomatinho
+;; transient (pop-up windows like Magit's)
+;; trashed
+;; treemacs
+;; tty-menu
+;; tuareg
+;; undo-tree
+;; vc (built-in mode line status for version control)
+;; vc-annotate (C-x v g)
+;; vdiff
+;; vimish-fold
+;; visible-mark
+;; visual-regexp
+;; volatile-highlights
+;; vterm
+;; wcheck-mode
+;; web-mode
+;; wgrep
+;; which-function-mode
+;; which-key
+;; whitespace-mode
+;; window-divider-mode
+;; winum
+;; writegood-mode
+;; woman
+;; xah-elisp-mode
+;; xref
+;; xterm-color (and ansi-colors)
+;; yaml-mode
+;; yasnippet
+;; ztree
+
+;;; Code:
+
+
+
+(deftheme modus-vivendi
+ "Dark theme that conforms with the highest accessibility
+ standard for colour contrast between background and
+ foreground elements (WCAG AAA).")
+
+;;; Custom faces
+
+;; These faces will be inherited by actual constructs. They are meant
+;; for those cases where a face needs to distinguish its output from
+;; the rest of the text, such as `isearch' and `occur'… We define
+;; these separately in order to combine each colour with its
+;; appropriate foreground value. This is to ensure a consistent
+;; contrast ratio of >= 7:1.
+(defgroup modus-theme ()
+ "Theme that ensures WCAG AAA accessibility (contrast ratio
+between foreground and background is >= 7:1)."
+ :group 'faces
+ :prefix "modus-theme-"
+ :link '(url-link :tag "GitLab" "https://gitlab.com/protesilaos/modus-themes")
+ :tag "Modus Vivendi")
+
+(defface modus-theme-subtle-red nil nil)
+(defface modus-theme-subtle-green nil nil)
+(defface modus-theme-subtle-yellow nil nil)
+(defface modus-theme-subtle-blue nil nil)
+(defface modus-theme-subtle-magenta nil nil)
+(defface modus-theme-subtle-cyan nil nil)
+(defface modus-theme-subtle-neutral nil nil)
+(defface modus-theme-intense-red nil nil)
+(defface modus-theme-intense-green nil nil)
+(defface modus-theme-intense-yellow nil nil)
+(defface modus-theme-intense-blue nil nil)
+(defface modus-theme-intense-magenta nil nil)
+(defface modus-theme-intense-cyan nil nil)
+(defface modus-theme-intense-neutral nil nil)
+(defface modus-theme-refine-red nil nil)
+(defface modus-theme-refine-green nil nil)
+(defface modus-theme-refine-yellow nil nil)
+(defface modus-theme-refine-blue nil nil)
+(defface modus-theme-refine-magenta nil nil)
+(defface modus-theme-refine-cyan nil nil)
+(defface modus-theme-active-red nil nil)
+(defface modus-theme-active-green nil nil)
+(defface modus-theme-active-yellow nil nil)
+(defface modus-theme-active-blue nil nil)
+(defface modus-theme-active-magenta nil nil)
+(defface modus-theme-active-cyan nil nil)
+(defface modus-theme-fringe-red nil nil)
+(defface modus-theme-fringe-green nil nil)
+(defface modus-theme-fringe-yellow nil nil)
+(defface modus-theme-fringe-blue nil nil)
+(defface modus-theme-fringe-magenta nil nil)
+(defface modus-theme-fringe-cyan nil nil)
+(defface modus-theme-nuanced-red nil nil)
+(defface modus-theme-nuanced-green nil nil)
+(defface modus-theme-nuanced-yellow nil nil)
+(defface modus-theme-nuanced-blue nil nil)
+(defface modus-theme-nuanced-magenta nil nil)
+(defface modus-theme-nuanced-cyan nil nil)
+(defface modus-theme-special-cold nil nil)
+(defface modus-theme-special-mild nil nil)
+(defface modus-theme-special-warm nil nil)
+(defface modus-theme-special-calm nil nil)
+(defface modus-theme-diff-added nil nil)
+(defface modus-theme-diff-changed nil nil)
+(defface modus-theme-diff-removed nil nil)
+(defface modus-theme-diff-refine-added nil nil)
+(defface modus-theme-diff-refine-changed nil nil)
+(defface modus-theme-diff-refine-removed nil nil)
+(defface modus-theme-diff-focus-added nil nil)
+(defface modus-theme-diff-focus-changed nil nil)
+(defface modus-theme-diff-focus-removed nil nil)
+(defface modus-theme-diff-heading nil nil)
+(defface modus-theme-header nil nil) ; Name is tentative
+(defface modus-theme-mark-alt nil nil)
+(defface modus-theme-mark-del nil nil)
+(defface modus-theme-mark-sel nil nil)
+(defface modus-theme-mark-symbol nil nil)
+(defface modus-theme-hl-line nil nil)
+
+;;; Customisation options
+
+;; User-facing customisation options. They are all deactivated by
+;; default (users must opt in).
+(defcustom modus-vivendi-theme-slanted-constructs nil
+ "Use slanted text in more code constructs (italics or oblique)."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-bold-constructs nil
+ "Use bold text in more code constructs."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-proportional-fonts
+ 'modus-vivendi-theme-variable-pitch-headings "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-proportional-fonts nil
+ "Use proportional fonts (variable-pitch) in headings."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-variable-pitch-headings nil
+ "Use proportional fonts (variable-pitch) in headings."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-rainbow-headings nil
+ "Use more saturated colours for headings."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-section-headings nil
+ "Use a background and an overline in headings."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-scale-headings nil
+ "Use font scaling for headings."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-scale-1 1.05
+ "Font size that is slightly larger than the base value.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-vivendi-theme-scale-2 1.1
+ "Font size slightly larger than `modus-vivendi-theme-scale-1'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-vivendi-theme-scale-3 1.15
+ "Font size slightly larger than `modus-vivendi-theme-scale-2'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-vivendi-theme-scale-4 1.2
+ "Font size slightly larger than `modus-vivendi-theme-scale-3'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(defcustom modus-vivendi-theme-scale-5 1.3
+ "Font size slightly larger than `modus-vivendi-theme-scale-4'.
+The default is a floating point that is interpreted as a multiple
+of the base font size. However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+ :type 'number)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-visible-fringes
+ 'modus-vivendi-theme-fringes "`modus-vivendi-theme' 0.12.0")
+
+(defcustom modus-vivendi-theme-visible-fringes nil
+ "Use a visible style for fringes."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-fringes nil
+ "Define the visibility of fringes.
+
+Nil means the fringes have no background colour. Option `subtle'
+will apply a greyscale value that is visible yet close to the
+main buffer background colour. Option `intense' will use a more
+pronounced greyscale value."
+ :type '(choice
+ (const :tag "No visible fringes (default)" nil)
+ (const :tag "Subtle greyscale background" subtle)
+ (const :tag "Intense greyscale background" intense)))
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-distinct-org-blocks
+ 'modus-vivendi-theme-org-blocks "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-distinct-org-blocks nil
+ "Use a distinct neutral background for `org-mode' blocks."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-rainbow-org-src-blocks
+ 'modus-vivendi-theme-org-blocks "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-rainbow-org-src-blocks nil
+ "Use colour-coded backgrounds for `org-mode' source blocks.
+The colour in use depends on the language (send feedback to
+include more languages)."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-org-blocks nil
+ "Use a subtle grey or colour-coded background for Org blocks.
+
+Nil means that the block will have no background of its own and
+will use the default that applies to the rest of the buffer.
+
+Option `greyscale' will apply a subtle neutral grey background to
+the block's contents. It also affects the begin and end lines of
+the block: their background will be extended to the edge of the
+window for Emacs version >= 27 where the ':extend' keyword is
+recognised by `set-face-attribute'.
+
+Option `rainbow' will use an accented background for the contents
+of the block. The exact colour will depend on the programming
+language and is controlled by the `org-src-block-faces'
+variable (refer to the theme's source code for the current
+association list)."
+ :type '(choice
+ (const :tag "No Org block background (default)" nil)
+ (const :tag "Subtle grey block background" greyscale)
+ (const :tag "Colour-coded background per programming language" rainbow)))
+
+(defcustom modus-vivendi-theme-3d-modeline nil
+ "Use a three-dimensional style for the active mode line."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-subtle-diffs nil
+ "Use fewer/dim backgrounds in `diff-mode', `ediff',`magit'."
+ :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-intense-standard-completions
+ 'modus-vivendi-theme-completions "`modus-vivendi-theme' 0.12.0")
+
+(defcustom modus-vivendi-theme-intense-standard-completions nil
+ "Use prominent backgrounds for Icomplete, Ido, or similar."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-completions nil
+ "Apply special styles to the UI of completion frameworks.
+This concerns Icomplete, Ivy, Helm, Selectrum, Ido, as well as
+any other tool meant to enhance their experience. The effect
+will vary depending on the completion framework.
+
+Nil means to remain faithful to the metaphors that each UI
+establishes. For example, Icomplete and Ido only use foreground
+colours to style their matches, whereas Ivy or Helm rely on an
+aesthetic that combines coloured backgrounds with appropriate
+text colour.
+
+Option `moderate' will apply a combination of background and
+foreground that is fairly subtle. For Icomplete and the like,
+this constitutes a departure from their standard style. While
+Ivy, Helm, and the others, will use less pronounced colours for
+applicable contexts.
+
+Option `opinionated' will apply colour combinations that
+refashion the completion UI. So Icomplete et al will now use
+styles that resemble the defaults of Ivy and co., while the
+latter group will revert to an even more nuanced aesthetic."
+ :type '(choice
+ (const :tag "Respect the framework's established aesthetic (default)" nil)
+ (const :tag "Subtle backgrounds for various elements" moderate)
+ (const :tag "Radical alternative to the framework's looks" opinionated)))
+
+(defcustom modus-vivendi-theme-prompts nil
+ "Use subtle or intense styles for minibuffer and REPL prompts.
+
+Nil means to only use an accented foreground colour.
+
+Options `subtle' and `intense' will change both the background
+and the foreground values. The latter has a more pronounced
+effect than the former."
+ :type '(choice
+ (const :tag "No prompt background (default)" nil)
+ (const :tag "Subtle accented background for the prompt" subtle)
+ (const :tag "Intense background and foreground for the prompt" intense)))
+
+(defcustom modus-vivendi-theme-intense-hl-line nil
+ "Use more prominent background for `hl-line-mode'."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-intense-paren-match nil
+ "Use more prominent colour for parenthesis matching."
+ :type 'boolean)
+
+(defcustom modus-vivendi-theme-faint-syntax nil
+ "Use less saturated colours for code syntax highlighting."
+ :type 'boolean)
+
+;;; Internal functions
+
+;; Helper functions that are meant to ease the implementation of the
+;; above customisation options.
+(defun modus-vivendi-theme-bold-weight ()
+ "Conditional use of a heavier text weight."
+ (when modus-vivendi-theme-bold-constructs
+ (list :inherit 'bold)))
+
+(defun modus-vivendi-theme-fringe (subtlebg intensebg)
+ "Conditional use of background colours for fringes.
+SUBTLEBG should be a subtle greyscale value. INTENSEBG must be a
+more pronounced greyscale colour."
+ (pcase modus-vivendi-theme-fringes
+ ('intense (list :background intensebg))
+ ('subtle (list :background subtlebg))
+ (_ (list :background nil))))
+
+(defun modus-vivendi-theme-prompt (mainfg subtlebg subtlefg intensebg intensefg)
+ "Conditional use of background colours for prompts.
+MAINFG is the prompt's standard foreground. SUBTLEBG should be a
+subtle accented background that works with SUBTLEFG. INTENSEBG
+must be a more pronounced accented colour that should be
+combinable with INTENSEFG."
+ (pcase modus-vivendi-theme-prompts
+ ('intense (list :background intensebg :foreground intensefg))
+ ('subtle (list :background subtlebg :foreground subtlefg))
+ (_ (list :background nil :foreground mainfg))))
+
+(defun modus-vivendi-theme-paren (normalbg intensebg)
+ "Conditional use of intense colours for matching parentheses.
+NORMALBG should the special palette colour 'bg-paren-match' or
+something similar. INTENSEBG must be easier to discern next to
+other backgrounds, such as the special palette colour
+'bg-paren-match-intense'."
+ (if modus-vivendi-theme-intense-paren-match
+ (list :background intensebg)
+ (list :background normalbg)))
+
+(defun modus-vivendi-theme-syntax-foreground (normal faint)
+ "Apply foreground value to code syntax.
+NORMAL is the more saturated colour, which should be the default.
+FAINT is the less saturated colour."
+ (if modus-vivendi-theme-faint-syntax
+ (list :foreground faint)
+ (list :foreground normal)))
+
+(defun modus-vivendi-theme-heading-foreground (subtle rainbow)
+ "Apply foreground value to headings.
+SUBTLE is the default aesthetic. RAINBOW is the saturated one."
+ (if modus-vivendi-theme-rainbow-headings
+ (list :foreground rainbow)
+ (list :foreground subtle)))
+
+(defun modus-vivendi-theme-heading-block (bg fg)
+ "Conditionally extend heading styles.
+Apply BG to background and FG to overline."
+ (if modus-vivendi-theme-section-headings
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg :overline fg))
+ (list :background nil :overline nil)))
+
+(defun modus-vivendi-theme-org-todo-block (bgbox fgbox fg)
+ "Conditionally extend the styles of Org keywords.
+BGBOX applies to the background. FGBOX applies to the foreground
+and the border. FG is used when no block style is in effect."
+ (if modus-vivendi-theme-section-headings
+ (list :background bgbox :foreground fgbox :box (list :color fgbox))
+ (list :foreground fg)))
+
+(defun modus-vivendi-theme-org-block (bgblk)
+ "Conditionally set the background of Org blocks.
+BGBLK applies to a distinct neutral background. Else blocks have
+no background of their own (the default), so they look the same
+as the rest of the buffer.
+
+`modus-vivendi-theme-org-blocks' also accepts a `rainbow' option
+which is applied conditionally to `org-src-block-faces' (see the
+theme's source code)."
+ (if (eq modus-vivendi-theme-org-blocks 'greyscale)
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bgblk))
+ (list :background nil)))
+
+(defun modus-vivendi-theme-org-block-delim (bgaccent fgaccent bg fg)
+ "Conditionally set the styles of Org block delimiters.
+BG, FG, BGACCENT, FGACCENT apply a background and foreground
+colour respectively.
+
+The former pair is a greyscale combination that should be more
+distinct than the background of the block. It is applied to the
+default styles or when `modus-vivendi-theme-org-blocks' is set
+to `greyscale'.
+
+The latter pair should be more subtle than the background of the
+block, as it is used when `modus-vivendi-theme-org-blocks' is
+set to `rainbow'."
+ (pcase modus-vivendi-theme-org-blocks
+ ('greyscale (append (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg :foreground fg)))
+ ('rainbow (list :background bgaccent :foreground fgaccent))
+ (_ (list :background bg :foreground fg))))
+
+(defun modus-vivendi-theme-modeline-box (col3d col &optional btn int)
+ "Control the box properties of the mode line.
+COL3D is the border that is intended for the three-dimensional
+modeline. COL applies to the two-dimensional modeline. Optional
+BTN provides the 3d button style. Optional INT defines a border
+width."
+ (let* ((style (if btn 'released-button nil))
+ (int (if int int 1)))
+ (if modus-vivendi-theme-3d-modeline
+ (list :line-width int :color col3d :style style)
+ (list :line-width 1 :color col :style nil))))
+
+(defun modus-vivendi-theme-modeline-props (bg3d fg3d &optional bg fg)
+ "Control the background and foreground of the mode line.
+BG is the modeline's background. FG is the modeline's
+foreground. BG3D and FG3D apply to the three-dimensional
+modeline style."
+ (if modus-vivendi-theme-3d-modeline
+ (list :background bg3d :foreground fg3d)
+ (list :background bg :foreground fg)))
+
+(defun modus-vivendi-theme-diffs (subtle-bg subtle-fg intense-bg intense-fg)
+ "Colour combinations for `modus-vivendi-theme-subtle-diffs'.
+
+SUBTLE-BG should be similar or the same as the main background.
+SUBTLE-FG should be an appropriate accent value. INTENSE-BG
+should be one of the dedicated backgrounds for diffs. INTENSE-FG
+should be one of the dedicated foregrounds for diffs"
+ (if modus-vivendi-theme-subtle-diffs
+ (list :background subtle-bg :foreground subtle-fg)
+ (list :background intense-bg :foreground intense-fg)))
+
+(defun modus-vivendi-theme-standard-completions (mainfg subtlebg intensebg intensefg)
+ "Combinations for `modus-vivendi-theme-completions'.
+These are intended for Icomplete, Ido, and related.
+
+MAINFG is an accented foreground value. SUBTLEBG is an accented
+background value that can be combined with MAINFG. INTENSEBG and
+INTENSEFG are accented colours that are designed to be used in
+tandem."
+ (pcase modus-vivendi-theme-completions
+ ('opinionated (list :background intensebg :foreground intensefg))
+ ('moderate (list :background subtlebg :foreground mainfg))
+ (_ (list :foreground mainfg))))
+
+(defun modus-vivendi-theme-extra-completions (subtleface intenseface altface &optional altfg bold)
+ "Combinations for `modus-vivendi-theme-completions'.
+These are intended for Helm, Ivy, Selectrum, etc.
+
+SUBTLEFACE and INTENSEFACE are custom theme faces that combine a
+background and foreground value. The difference between the two
+is a matter of degree.
+
+ALTFACE is a combination of colours that represents a departure
+from the UI's default aesthetics. Optional ALTFG is meant to be
+used in tandem with it.
+
+Optional BOLD will apply a heavier weight to the text."
+ (pcase modus-vivendi-theme-completions
+ ('opinionated (list :inherit (list altface bold)
+ :foreground (if altfg altfg 'unspecified)))
+ ('moderate (list :inherit (list subtleface bold)))
+ (_ (list :inherit (list intenseface bold)))))
+
+(defun modus-vivendi-theme-scale (amount)
+ "Scale heading by AMOUNT.
+
+AMOUNT is a customisation option."
+ (when modus-vivendi-theme-scale-headings
+ (list :height amount)))
+
+;;; Colour palette
+
+;; Define colour palette. Each colour must have a >= 7:1 contrast
+;; ratio relative to the foreground/background colour it is rendered
+;; against.
+;;
+;; The design of the colour palette as a macro that maps it to faces is
+;; adapted from zenbern-theme.el, last seen at commit 7dd7968:
+;; https://github.com/bbatsov/zenburn-emacs
+(eval-and-compile
+ (defconst modus-vivendi-theme-default-colors-alist
+ '(;; base values
+ ("bg-main" . "#000000") ("fg-main" . "#ffffff")
+ ("bg-alt" . "#181a20") ("fg-alt" . "#a8a8a8")
+ ("bg-dim" . "#110b11") ("fg-dim" . "#e0e6f0")
+ ;; specifically for on/off states (e.g. `mode-line')
+ ;;
+ ;; must be combined with themselves
+ ("bg-active" . "#2f2f2f") ("fg-active" . "#f5f5f5")
+ ("bg-inactive" . "#202020") ("fg-inactive" . "#bebebe")
+ ;; special base values, used only for cases where the above
+ ;; fg-* or bg-* cannot or should not be used (to avoid confusion)
+ ;; must be combined with: {fg,bg}-{main,alt,dim}
+ ("bg-special-cold" . "#203448") ("fg-special-cold" . "#c6eaff")
+ ("bg-special-mild" . "#00322e") ("fg-special-mild" . "#bfebe0")
+ ("bg-special-warm" . "#382f27") ("fg-special-warm" . "#f8dec0")
+ ("bg-special-calm" . "#392a48") ("fg-special-calm" . "#fbd6f4")
+ ;; styles for the main constructs
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red" . "#ff8059") ("green" . "#44bc44")
+ ("yellow" . "#eecc00") ("blue" . "#29aeff")
+ ("magenta" . "#feacd0") ("cyan" . "#00d3d0")
+ ;; styles for common, but still specialised constructs
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-alt" . "#f4923b") ("green-alt" . "#80d200")
+ ("yellow-alt" . "#cfdf30") ("blue-alt" . "#72a4ff")
+ ("magenta-alt" . "#f78fe7") ("cyan-alt" . "#4ae8fc")
+ ;; same purpose as above, just slight differences
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-alt-other" . "#ff9977") ("green-alt-other" . "#00cd68")
+ ("yellow-alt-other" . "#f0ce43") ("blue-alt-other" . "#00bdfa")
+ ("magenta-alt-other" . "#b6a0ff") ("cyan-alt-other" . "#6ae4b9")
+ ;; styles for desaturated foreground text, intended for use with
+ ;; the `modus-vivendi-theme-faint-syntax' option
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+ ("red-faint" . "#ffa0a0") ("green-faint" . "#88cf88")
+ ("yellow-faint" . "#d2b580") ("blue-faint" . "#92baff")
+ ("magenta-faint" . "#e0b2d6") ("cyan-faint" . "#a0bfdf")
+
+ ("red-alt-faint" . "#f5aa80") ("green-alt-faint" . "#a8cf88")
+ ("yellow-alt-faint" . "#cabf77") ("blue-alt-faint" . "#a4b0ff")
+ ("magenta-alt-faint" . "#ef9fe4") ("cyan-alt-faint" . "#90c4ed")
+
+ ("red-alt-other-faint" . "#ff9fbf") ("green-alt-other-faint" . "#88cfaf")
+ ("yellow-alt-other-faint" . "#d0ba95") ("blue-alt-other-faint" . "#8fc5ff")
+ ("magenta-alt-other-faint" . "#d0b4ff") ("cyan-alt-other-faint" . "#a4d0bb")
+ ;; styles for elements that should be very subtle, yet accented
+ ;;
+ ;; must be combined with: `bg-main', `bg-alt', `bg-dim' or any of
+ ;; the "nuanced" backgrounds
+ ("red-nuanced" . "#ffcccc") ("green-nuanced" . "#b8e2b8")
+ ("yellow-nuanced" . "#dfdfb0") ("blue-nuanced" . "#bfd9ff")
+ ("magenta-nuanced" . "#e5cfef") ("cyan-nuanced" . "#a8e5e5")
+ ;; styles for slightly accented background
+ ;;
+ ;; must be combined with any of the above foreground values
+ ("red-nuanced-bg" . "#2c0614") ("green-nuanced-bg" . "#001904")
+ ("yellow-nuanced-bg" . "#221000") ("blue-nuanced-bg" . "#0f0e39")
+ ("magenta-nuanced-bg" . "#230631") ("cyan-nuanced-bg" . "#041529")
+ ;; styles for elements that should draw attention to themselves
+ ;;
+ ;; must be combined with: `bg-main'
+ ("red-intense" . "#fb6859") ("green-intense" . "#00fc50")
+ ("yellow-intense" . "#ffdd00") ("blue-intense" . "#00a2ff")
+ ("magenta-intense" . "#ff8bd4") ("cyan-intense" . "#30ffc0")
+ ;; styles for background elements that should be visible yet
+ ;; subtle
+ ;;
+ ;; must be combined with: `fg-dim'
+ ("red-subtle-bg" . "#762422") ("green-subtle-bg" . "#2f4a00")
+ ("yellow-subtle-bg" . "#604200") ("blue-subtle-bg" . "#10387c")
+ ("magenta-subtle-bg" . "#49366e") ("cyan-subtle-bg" . "#00415e")
+ ;; styles for background elements that should be visible and
+ ;; distinguishable
+ ;;
+ ;; must be combined with: `fg-main'
+ ("red-intense-bg" . "#a4202a") ("green-intense-bg" . "#006800")
+ ("yellow-intense-bg" . "#874900") ("blue-intense-bg" . "#2a40b8")
+ ("magenta-intense-bg" . "#7042a2") ("cyan-intense-bg" . "#005f88")
+ ;; styles for refined contexts where both the foreground and the
+ ;; background need to have the same/similar hue
+ ;;
+ ;; must be combined with themselves OR the foregrounds can be
+ ;; combined with any of the base backgrounds
+ ("red-refine-bg" . "#77002a") ("red-refine-fg" . "#ffb9ab")
+ ("green-refine-bg" . "#00422a") ("green-refine-fg" . "#9ff0cf")
+ ("yellow-refine-bg" . "#693200") ("yellow-refine-fg" . "#e2d980")
+ ("blue-refine-bg" . "#242679") ("blue-refine-fg" . "#8ec6ff")
+ ("magenta-refine-bg" . "#71206a") ("magenta-refine-fg" . "#ffcaf0")
+ ("cyan-refine-bg" . "#004065") ("cyan-refine-fg" . "#8ae4f2")
+ ;; styles that are meant exclusively for the mode line
+ ;;
+ ;; must be combined with: `bg-active', `bg-inactive'
+ ("red-active" . "#ffa49e") ("green-active" . "#70e030")
+ ("yellow-active" . "#efdf00") ("blue-active" . "#00ccff")
+ ("magenta-active" . "#d0acff") ("cyan-active" . "#00ddc0")
+ ;; styles that are meant exclusively for the fringes
+ ;;
+ ;; must have a minimum contrast ratio of 1.5:1 with `bg-inactive'
+ ;; and be combined with `fg-main' or `fg-dim'
+ ("red-fringe-bg" . "#8f0040") ("green-fringe-bg" . "#006000")
+ ("yellow-fringe-bg" . "#6f4a00") ("blue-fringe-bg" . "#3a30ab")
+ ("magenta-fringe-bg" . "#692089") ("cyan-fringe-bg" . "#0068a0")
+ ;; styles reserved for specific faces
+ ;;
+ ;; `bg-hl-line' is between `bg-dim' and `bg-alt', so it should
+ ;; work with all accents that cover those two, plus `bg-main'
+ ;;
+ ;; `bg-header' is between `bg-active' and `bg-inactive', so it
+ ;; can be combined with any of the "active" values, plus the
+ ;; "special" and base foreground colours
+ ;;
+ ;; `bg-paren-match', `bg-paren-match-intense', `bg-region' and
+ ;; `bg-tab-active' must be combined with `fg-main', while
+ ;; `bg-tab-inactive' should be combined with `fg-dim'
+ ;;
+ ;; `bg-tab-bar' is only intended for the bar that holds the tabs and
+ ;; can only be combined with `fg-main'
+ ;;
+ ;; `fg-tab-active' is meant to be combined with `bg-tab-active',
+ ;; though only for styling special elements, such as underlining
+ ;; the current tab
+ ;;
+ ;; `fg-escape-char-construct' and `fg-escape-char-backslash' can
+ ;; be combined `bg-main', `bg-dim', `bg-alt'
+ ;;
+ ;; `fg-lang-error', `fg-lang-warning', `fg-lang-note' can be
+ ;; combined with `bg-main', `bg-dim', `bg-alt'
+ ;;
+ ;; `fg-mark-sel', `fg-mark-del', `fg-mark-alt' can be combined
+ ;; with `bg-main', `bg-dim', `bg-alt', `bg-hl-line'
+ ;;
+ ;; `fg-unfocused' must be combined with `fg-main'
+ ;;
+ ;; the window divider colours apply to faces with just an fg value
+ ;;
+ ;; all pairs are combinable with themselves
+ ("bg-hl-line" . "#151823")
+ ("bg-paren-match" . "#5f362f")
+ ("bg-paren-match-intense" . "#255650")
+ ("bg-region" . "#3c3c3c")
+
+ ("bg-tab-bar" . "#2c2c2c")
+ ("bg-tab-active" . "#0e0e0e")
+ ("bg-tab-inactive" . "#3d3d3d")
+ ("fg-tab-active" . "#5ac3cf")
+
+ ("fg-escape-char-construct" . "#e7a59a")
+ ("fg-escape-char-backslash" . "#abab00")
+
+ ("fg-lang-error" . "#ef8690")
+ ("fg-lang-warning" . "#b0aa00")
+ ("fg-lang-note" . "#9d9def")
+
+ ("fg-window-divider-inner" . "#646464")
+ ("fg-window-divider-outer" . "#969696")
+
+ ("fg-unfocused" . "#93959b")
+
+ ("bg-header" . "#212121") ("fg-header" . "#dddddd")
+
+ ("bg-whitespace" . "#170016") ("fg-whitespace" . "#a4959f")
+
+ ("bg-diff-heading" . "#304466") ("fg-diff-heading" . "#dadffe")
+ ("bg-diff-added" . "#0a280a") ("fg-diff-added" . "#94ba94")
+ ("bg-diff-changed" . "#2a2000") ("fg-diff-changed" . "#b0ba9f")
+ ("bg-diff-removed" . "#40160f") ("fg-diff-removed" . "#c6adaa")
+
+ ("bg-diff-refine-added" . "#005a36") ("fg-diff-refine-added" . "#e0f6e0")
+ ("bg-diff-refine-changed" . "#585800") ("fg-diff-refine-changed" . "#ffffcc")
+ ("bg-diff-refine-removed" . "#852828") ("fg-diff-refine-removed" . "#ffd9eb")
+
+ ("bg-diff-focus-added" . "#203d20") ("fg-diff-focus-added" . "#b4ddb4")
+ ("bg-diff-focus-changed" . "#4a3a10") ("fg-diff-focus-changed" . "#d0daaf")
+ ("bg-diff-focus-removed" . "#5e2526") ("fg-diff-focus-removed" . "#eebdba")
+
+ ("bg-diff-neutral-0" . "#575757") ("fg-diff-neutral-0" . "#fcfcfc")
+ ("bg-diff-neutral-1" . "#454545") ("fg-diff-neutral-1" . "#dddddd")
+ ("bg-diff-neutral-2" . "#313131") ("fg-diff-neutral-2" . "#bfbfbf")
+
+ ("bg-mark-sel" . "#002f2f") ("fg-mark-sel" . "#60cfa2")
+ ("bg-mark-del" . "#5a0000") ("fg-mark-del" . "#ff99aa")
+ ("bg-mark-alt" . "#3f2210") ("fg-mark-alt" . "#f0aa20"))
+ "The entire palette of `modus-vivendi-theme'.
+Each element has the form (NAME . HEX).")
+
+ (defcustom modus-vivendi-theme-override-colors-alist '()
+ "Association list of palette colour overrides.
+Values can be mapped to variables, using the same syntax as the
+one present in `modus-vivendi-theme-default-colors-alist'.
+
+This is only meant for do-it-yourself usage, with the
+understanding that the user is responsible for the resulting
+contrast ratio between new and existing colours."
+ :type '(alist
+ :key-type (string :tag "Name")
+ :value-type (string :tag " Hex")))
+
+ (defmacro modus-vivendi-theme-with-color-variables (&rest body)
+ "`let' bind all colours around BODY.
+Also bind `class' to ((class color) (min-colors 89))."
+ (declare (indent 0))
+ `(let ((class '((class color) (min-colors 89)))
+ ,@(mapcar (lambda (cons)
+ (list (intern (car cons)) (cdr cons)))
+ (append modus-vivendi-theme-default-colors-alist
+ modus-vivendi-theme-override-colors-alist))
+ ;; simple conditional styles that evaluate user-facing
+ ;; customisation options
+ (modus-theme-slant
+ (if modus-vivendi-theme-slanted-constructs 'italic 'normal))
+ (modus-theme-variable-pitch
+ (if modus-vivendi-theme-variable-pitch-headings 'variable-pitch 'default)))
+ ,@body)))
+
+
+
+;;; Faces
+
+(modus-vivendi-theme-with-color-variables
+ (custom-theme-set-faces
+ 'modus-vivendi
+;;;; custom faces
+ ;; these bespoke faces are inherited by other constructs below
+;;;;; subtle coloured backgrounds
+ `(modus-theme-subtle-red ((,class :background ,red-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-green ((,class :background ,green-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-yellow ((,class :background ,yellow-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-blue ((,class :background ,blue-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-magenta ((,class :background ,magenta-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-cyan ((,class :background ,cyan-subtle-bg :foreground ,fg-dim)))
+ `(modus-theme-subtle-neutral ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; intense coloured backgrounds
+ `(modus-theme-intense-red ((,class :background ,red-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-green ((,class :background ,green-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-yellow ((,class :background ,yellow-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-blue ((,class :background ,blue-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-magenta ((,class :background ,magenta-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-cyan ((,class :background ,cyan-intense-bg :foreground ,fg-main)))
+ `(modus-theme-intense-neutral ((,class :background ,bg-active :foreground ,fg-main)))
+;;;;; refined background and foreground combinations
+ ;; general purpose styles that use an accented foreground against an
+ ;; accented background
+ `(modus-theme-refine-red ((,class :background ,red-refine-bg :foreground ,red-refine-fg)))
+ `(modus-theme-refine-green ((,class :background ,green-refine-bg :foreground ,green-refine-fg)))
+ `(modus-theme-refine-yellow ((,class :background ,yellow-refine-bg :foreground ,yellow-refine-fg)))
+ `(modus-theme-refine-blue ((,class :background ,blue-refine-bg :foreground ,blue-refine-fg)))
+ `(modus-theme-refine-magenta ((,class :background ,magenta-refine-bg :foreground ,magenta-refine-fg)))
+ `(modus-theme-refine-cyan ((,class :background ,cyan-refine-bg :foreground ,cyan-refine-fg)))
+;;;;; "active" combinations, mostly for use on the mode line
+ `(modus-theme-active-red ((,class :background ,red-active :foreground ,bg-active)))
+ `(modus-theme-active-green ((,class :background ,green-active :foreground ,bg-active)))
+ `(modus-theme-active-yellow ((,class :background ,yellow-active :foreground ,bg-active)))
+ `(modus-theme-active-blue ((,class :background ,blue-active :foreground ,bg-active)))
+ `(modus-theme-active-magenta ((,class :background ,magenta-active :foreground ,bg-active)))
+ `(modus-theme-active-cyan ((,class :background ,cyan-active :foreground ,bg-active)))
+;;;;; nuanced backgrounds
+ ;; useful for adding an accented background that is suitable for all
+ ;; main foreground colours (intended for use in Org source blocks)
+ `(modus-theme-nuanced-red ((,class :background ,red-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-green ((,class :background ,green-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-yellow ((,class :background ,yellow-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-blue ((,class :background ,blue-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-magenta ((,class :background ,magenta-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(modus-theme-nuanced-cyan ((,class :background ,cyan-nuanced-bg
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+;;;;; fringe-specific combinations
+ `(modus-theme-fringe-red ((,class :background ,red-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-green ((,class :background ,green-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-yellow ((,class :background ,yellow-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-blue ((,class :background ,blue-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-magenta ((,class :background ,magenta-fringe-bg :foreground ,fg-dim)))
+ `(modus-theme-fringe-cyan ((,class :background ,cyan-fringe-bg :foreground ,fg-dim)))
+;;;;; special base values
+ ;; these are closer to the grayscale than the accents defined above
+ ;; and should only be used when the next closest alternative would be
+ ;; a greyscale value than an accented one
+ `(modus-theme-special-cold ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(modus-theme-special-mild ((,class :background ,bg-special-mild :foreground ,fg-special-mild)))
+ `(modus-theme-special-warm ((,class :background ,bg-special-warm :foreground ,fg-special-warm)))
+ `(modus-theme-special-calm ((,class :background ,bg-special-calm :foreground ,fg-special-calm)))
+;;;;; diff-specific combinations
+ ;; intended for `diff-mode' or equivalent
+ `(modus-theme-diff-added ((,class :background ,bg-diff-added :foreground ,fg-diff-added)))
+ `(modus-theme-diff-changed ((,class :background ,bg-diff-changed :foreground ,fg-diff-changed)))
+ `(modus-theme-diff-removed ((,class :background ,bg-diff-removed :foreground ,fg-diff-removed)))
+ `(modus-theme-diff-refine-added ((,class :background ,bg-diff-refine-added :foreground ,fg-diff-refine-added)))
+ `(modus-theme-diff-refine-changed ((,class :background ,bg-diff-refine-changed :foreground ,fg-diff-refine-changed)))
+ `(modus-theme-diff-refine-removed ((,class :background ,bg-diff-refine-removed :foreground ,fg-diff-refine-removed)))
+ `(modus-theme-diff-focus-added ((,class :background ,bg-diff-focus-added :foreground ,fg-diff-focus-added)))
+ `(modus-theme-diff-focus-changed ((,class :background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+ `(modus-theme-diff-focus-removed ((,class :background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+ `(modus-theme-diff-heading ((,class :background ,bg-diff-heading :foreground ,fg-diff-heading)))
+;;;;; mark indicators
+ ;; colour combinations intended for Dired, Ibuffer, or equivalent
+ `(modus-theme-header ((,class :inherit bold :foreground ,fg-main)))
+ `(modus-theme-mark-alt ((,class :inherit bold :background ,bg-mark-alt :foreground ,fg-mark-alt)))
+ `(modus-theme-mark-del ((,class :inherit bold :background ,bg-mark-del :foreground ,fg-mark-del)))
+ `(modus-theme-mark-sel ((,class :inherit bold :background ,bg-mark-sel :foreground ,fg-mark-sel)))
+ `(modus-theme-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; other custom faces
+ `(modus-theme-hl-line ((,class :background ,(if modus-vivendi-theme-intense-hl-line
+ bg-active bg-hl-line)
+ (and (>= emacs-major-version 27) '(:extend t)))))
+;;;; standard faces
+;;;;; absolute essentials
+ `(default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(cursor ((,class :background ,fg-main)))
+ `(fringe ((,class ,@(modus-vivendi-theme-fringe bg-inactive bg-active)
+ :foreground ,fg-main)))
+ `(vertical-border ((,class :foreground ,fg-window-divider-inner)))
+;;;;; basic and/or ungrouped styles
+ ;; Modify the `bold' face to change the weight of all "bold" elements
+ ;; defined by the theme. You need a typeface that supports a
+ ;; multitude of heavier weights than the regular one and then you
+ ;; must specify the exact name of the one you wish to apply. Example
+ ;; for your init.el:
+ ;;
+ ;; (set-face-attribute 'bold nil :weight 'semibold)
+ `(bold ((,class :weight bold)))
+ `(comint-highlight-input ((,class :inherit bold)))
+ `(comint-highlight-prompt ((,class ,@(modus-vivendi-theme-bold-weight)
+ ,@(modus-vivendi-theme-prompt cyan
+ blue-nuanced-bg
+ blue-alt
+ blue-refine-bg
+ fg-main))))
+ `(error ((,class :inherit bold :foreground ,red)))
+ `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
+ `(file-name-shadow ((,class :foreground ,fg-unfocused)))
+ `(header-line ((,class :background ,bg-header :foreground ,fg-header)))
+ `(header-line-highlight ((,class :inherit modus-theme-active-blue)))
+ `(homoglyph ((,class :foreground ,fg-escape-char-construct)))
+ `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other)))
+ `(italic ((,class :slant italic)))
+ `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
+ `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline t)))
+ `(minibuffer-prompt ((,class ,@(modus-vivendi-theme-prompt cyan-alt-other
+ cyan-nuanced-bg
+ cyan
+ cyan-refine-bg
+ fg-main))))
+ `(mm-command-output ((,class :foreground ,red-alt-other)))
+ `(mm-uu-extract ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(next-error ((,class :inherit modus-theme-subtle-red)))
+ `(rectangle-preview ((,class :inherit modus-theme-special-mild)))
+ `(region ((,class :background ,bg-region :foreground ,fg-main)))
+ `(secondary-selection ((,class :inherit modus-theme-special-cold)))
+ `(shadow ((,class :foreground ,fg-alt)))
+ `(success ((,class :inherit bold :foreground ,green)))
+ `(trailing-whitespace ((,class :background ,red-intense-bg)))
+ `(warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; buttons, links, widgets
+ `(button ((,class :foreground ,blue-alt-other :underline t)))
+ `(link ((,class :foreground ,blue-alt-other :underline t)))
+ `(link-visited ((,class :foreground ,magenta-alt-other :underline t)))
+ `(tooltip ((,class :background ,bg-special-cold :foreground ,fg-main)))
+ `(widget-button ((,class :inherit button)))
+ `(widget-button-pressed ((,class :inherit button :foreground ,magenta)))
+ `(widget-documentation ((,class :foreground ,green)))
+ `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
+ `(widget-inactive ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(widget-single-line-field ((,class :inherit widget-field)))
+;;;;; ag
+ `(ag-hit-face ((,class :foreground ,fg-special-cold)))
+ `(ag-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; alert
+ `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
+ `(alert-low-face ((,class :foreground ,fg-special-mild)))
+ `(alert-moderate-face ((,class :inherit bold :foreground ,yellow)))
+ `(alert-trivial-face ((,class :foreground ,fg-special-calm)))
+ `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense)))
+;;;;; all-the-icons
+ `(all-the-icons-blue ((,class :foreground ,blue)))
+ `(all-the-icons-blue-alt ((,class :foreground ,blue-alt)))
+ `(all-the-icons-cyan ((,class :foreground ,cyan)))
+ `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt)))
+ `(all-the-icons-dblue ((,class :foreground ,blue-alt-other)))
+ `(all-the-icons-dcyan ((,class :foreground ,cyan-alt-other)))
+ `(all-the-icons-dgreen ((,class :foreground ,green-alt-other)))
+ `(all-the-icons-dired-dir-face ((,class :foreground ,blue)))
+ `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-other)))
+ `(all-the-icons-dorange ((,class :foreground ,red-alt-other)))
+ `(all-the-icons-dpink ((,class :foreground ,magenta)))
+ `(all-the-icons-dpurple ((,class :foreground ,magenta-alt)))
+ `(all-the-icons-dred ((,class :foreground ,red)))
+ `(all-the-icons-dsilver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-dyellow ((,class :foreground ,yellow)))
+ `(all-the-icons-green ((,class :foreground ,green)))
+ `(all-the-icons-lblue ((,class :foreground ,blue-refine-fg)))
+ `(all-the-icons-lcyan ((,class :foreground ,cyan-refine-fg)))
+ `(all-the-icons-lgreen ((,class :foreground ,green-refine-fg)))
+ `(all-the-icons-lmaroon ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lorange ((,class :foreground ,red-refine-fg)))
+ `(all-the-icons-lpink ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lpurple ((,class :foreground ,magenta-refine-fg)))
+ `(all-the-icons-lred ((,class :foreground ,red-refine-fg)))
+ `(all-the-icons-lsilver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-lyellow ((,class :foreground ,yellow-refine-fg)))
+ `(all-the-icons-maroon ((,class :foreground ,magenta)))
+ `(all-the-icons-orange ((,class :foreground ,red-alt)))
+ `(all-the-icons-pink ((,class :foreground ,magenta)))
+ `(all-the-icons-purple ((,class :foreground ,magenta-alt)))
+ `(all-the-icons-purple-alt ((,class :foreground ,magenta-alt-other)))
+ `(all-the-icons-red ((,class :foreground ,red)))
+ `(all-the-icons-red-alt ((,class :foreground ,red-alt)))
+ `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
+ `(all-the-icons-yellow ((,class :foreground ,yellow)))
+;;;;; annotate
+ `(annotate-annotation ((,class :inherit modus-theme-subtle-blue)))
+ `(annotate-annotation-secondary ((,class :inherit modus-theme-subtle-green)))
+ `(annotate-highlight ((,class :background ,blue-nuanced-bg :underline ,blue-intense)))
+ `(annotate-highlight-secondary ((,class :background ,green-nuanced-bg :underline ,green-intense)))
+;;;;; anzu
+ `(anzu-match-1 ((,class :inherit modus-theme-subtle-cyan)))
+ `(anzu-match-2 ((,class :inherit modus-theme-subtle-green)))
+ `(anzu-match-3 ((,class :inherit modus-theme-subtle-yellow)))
+ `(anzu-mode-line ((,class :inherit bold :foreground ,green-active)))
+ `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
+ `(anzu-replace-highlight ((,class :inherit modus-theme-refine-yellow :underline t)))
+ `(anzu-replace-to ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; apropos
+ `(apropos-function-button ((,class :foreground ,magenta-alt-other :underline t)))
+ `(apropos-keybinding ((,class :inherit bold :foreground ,cyan)))
+ `(apropos-misc-button ((,class :foreground ,cyan-alt-other :underline t)))
+ `(apropos-property ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt)))
+ `(apropos-symbol ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,blue-nuanced :underline t)))
+ `(apropos-user-option-button ((,class :foreground ,green-alt-other :underline t)))
+ `(apropos-variable-button ((,class :foreground ,blue :underline t)))
+;;;;; apt-sources-list
+ `(apt-sources-list-components ((,class :foreground ,cyan)))
+ `(apt-sources-list-options ((,class :foreground ,yellow)))
+ `(apt-sources-list-suite ((,class :foreground ,green)))
+ `(apt-sources-list-type ((,class :foreground ,magenta)))
+ `(apt-sources-list-uri ((,class :foreground ,blue)))
+;;;;; artbollocks-mode
+ `(artbollocks-face ((,class :foreground ,cyan-nuanced :underline ,fg-lang-note)))
+ `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt :foreground ,red-alt :underline t)))
+ `(artbollocks-passive-voice-face ((,class :foreground ,yellow-nuanced :underline ,fg-lang-warning)))
+ `(artbollocks-weasel-words-face ((,class :foreground ,red-nuanced :underline ,fg-lang-error)))
+;;;;; auctex and Tex
+ `(font-latex-bold-face ((,class :inherit bold :foreground ,fg-special-calm)))
+ `(font-latex-doctex-documentation-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(font-latex-doctex-preprocessor-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red-alt-other)))
+ `(font-latex-italic-face ((,class :foreground ,fg-special-calm :slant italic)))
+ `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
+ `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
+ `(font-latex-sectioning-0-face ((,class :inherit ,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-1-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-2-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-3-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-4-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+ `(font-latex-sectioning-5-face ((,class :inherit ,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+ `(font-latex-sedate-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(font-latex-slide-title-face ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,cyan-nuanced
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(font-latex-string-face ((,class :foreground ,blue-alt)))
+ `(font-latex-subscript-face ((,class :height 0.95)))
+ `(font-latex-superscript-face ((,class :height 0.95)))
+ `(font-latex-verbatim-face ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(font-latex-warning-face ((,class :foreground ,yellow-alt-other)))
+ `(tex-match ((,class :foreground ,blue-alt-other)))
+ `(tex-verbatim ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(texinfo-heading ((,class :foreground ,magenta)))
+ `(TeX-error-description-error ((,class :inherit bold :foreground ,red)))
+ `(TeX-error-description-help ((,class :foreground ,blue)))
+ `(TeX-error-description-tex-said ((,class :foreground ,blue)))
+ `(TeX-error-description-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; auto-dim-other-buffers
+ `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
+;;;;; avy
+ `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(avy-goto-char-timer-face ((,class :inherit (modus-theme-intense-yellow bold))))
+ `(avy-lead-face ((,class :inherit (modus-theme-intense-magenta bold))))
+ `(avy-lead-face-0 ((,class :inherit (modus-theme-intense-blue bold))))
+ `(avy-lead-face-1 ((,class :inherit (modus-theme-intense-red bold))))
+ `(avy-lead-face-2 ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; aw (ace-window)
+ `(aw-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(aw-key-face ((,class :inherit bold :foreground ,blue-intense)))
+ `(aw-leading-char-face ((,class :inherit bold :height 1.5 :background ,bg-main :foreground ,red-intense)))
+ `(aw-minibuffer-leading-char-face ((,class :foreground ,magenta-active)))
+ `(aw-mode-line-face ((,class :inherit bold)))
+;;;;; bm
+ `(bm-face ((,class :inherit modus-theme-subtle-yellow
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(bm-fringe-face ((,class :inherit modus-theme-fringe-yellow)))
+ `(bm-fringe-persistent-face ((,class :inherit modus-theme-fringe-blue)))
+ `(bm-persistent-face ((,class :inherit modus-theme-intense-blue
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+;;;;; bongo
+ `(bongo-album-title ((,class :foreground ,cyan-active)))
+ `(bongo-artist ((,class :foreground ,magenta-active)))
+ `(bongo-currently-playing-track ((,class :inherit bold)))
+ `(bongo-elapsed-track-part ((,class :inherit modus-theme-subtle-magenta :underline t)))
+ `(bongo-filled-seek-bar ((,class :background ,blue-subtle-bg :foreground ,fg-main)))
+ `(bongo-marked-track ((,class :foreground ,fg-mark-alt)))
+ `(bongo-marked-track-line ((,class :background ,bg-mark-alt)))
+ `(bongo-played-track ((,class :foreground ,fg-unfocused :strike-through t)))
+ `(bongo-track-length ((,class :foreground ,blue-alt-other)))
+ `(bongo-track-title ((,class :foreground ,blue-active)))
+ `(bongo-unfilled-seek-bar ((,class :background ,blue-nuanced-bg :foreground ,fg-main)))
+;;;;; boon
+ `(boon-modeline-cmd ((,class :inherit modus-theme-active-blue)))
+ `(boon-modeline-ins ((,class :inherit modus-theme-active-red)))
+ `(boon-modeline-off ((,class :inherit modus-theme-active-yellow)))
+ `(boon-modeline-spc ((,class :inherit modus-theme-active-green)))
+;;;;; breakpoint (built-in gdb-mi.el)
+ `(breakpoint-disabled ((,class :foreground ,fg-alt)))
+ `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
+;;;;; buffer-expose
+ `(buffer-expose-ace-char-face ((,class :inherit bold :foreground ,red-active)))
+ `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
+ `(buffer-expose-selected-face ((,class :inherit modus-theme-special-mild)))
+;;;;; calendar and diary
+ `(calendar-month-header ((,class :inherit bold :foreground ,fg-main)))
+ `(calendar-today ((,class :underline t)))
+ `(calendar-weekday-header ((,class :foreground ,fg-dim)))
+ `(calendar-weekend-header ((,class :foreground ,fg-alt)))
+ `(diary ((,class :foreground ,cyan-alt-other)))
+ `(diary-anniversary ((,class :foreground ,red-alt-other)))
+ `(diary-time ((,class :foreground ,blue-alt)))
+ `(holiday ((,class :foreground ,magenta-alt)))
+;;;;; calfw
+ `(cfw:face-annotation ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(cfw:face-day-title ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(cfw:face-default-content ((,class :foreground ,green-alt)))
+ `(cfw:face-default-day ((,class :inherit (cfw:face-day-title bold))))
+ `(cfw:face-disable ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(cfw:face-grid ((,class :foreground ,fg-inactive)))
+ `(cfw:face-header ((,class :inherit bold ::foreground ,fg-main)))
+ `(cfw:face-holiday ((,class :inherit bold :background ,bg-alt :foreground ,magenta)))
+ `(cfw:face-periods ((,class :foreground ,cyan-alt-other)))
+ `(cfw:face-saturday ((,class :inherit bold :background ,bg-alt :foreground ,magenta-alt)))
+ `(cfw:face-select ((,class :inherit modus-theme-intense-blue)))
+ `(cfw:face-sunday ((,class :inherit bold :background ,bg-alt :foreground ,magenta-alt-other)))
+ `(cfw:face-title ((,class :inherit ,modus-theme-variable-pitch
+ :foreground ,fg-special-warm
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(cfw:face-today ((,class :inherit bold :foreground ,blue)))
+ `(cfw:face-today-title ((,class :inherit modus-theme-special-mild :box t)))
+ `(cfw:face-toolbar ((,class :background ,bg-active :foreground ,bg-active)))
+ `(cfw:face-toolbar-button-off ((,class :background ,bg-alt :foreground ,cyan)))
+ `(cfw:face-toolbar-button-on ((,class :inherit bold :background ,bg-main :foreground ,blue-intense)))
+;;;;; centaur-tabs
+ `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-active)))
+ `(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground ,red-active :underline t)))
+ `(centaur-tabs-close-selected ((,class :inherit centaur-tabs-selected)))
+ `(centaur-tabs-close-unselected ((,class :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-modified-marker-selected ((,class :inherit centaur-tabs-selected)))
+ `(centaur-tabs-modified-marker-unselected ((,class :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-default ((,class :background ,bg-main :foreground ,bg-main)))
+ `(centaur-tabs-selected ((,class :inherit bold :background ,bg-tab-active :foreground ,fg-main)))
+ `(centaur-tabs-selected-modified ((,class :background ,bg-tab-active :foreground ,fg-main :slant italic)))
+ `(centaur-tabs-unselected ((,class :background ,bg-tab-inactive :foreground ,fg-dim)))
+ `(centaur-tabs-unselected-modified ((,class :background ,bg-tab-inactive :foreground ,fg-dim :slant italic)))
+;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+ `(change-log-acknowledgment ((,class :foreground ,fg-alt)))
+ `(change-log-conditionals ((,class :foreground ,magenta-alt)))
+ `(change-log-date ((,class :foreground ,cyan-alt-other)))
+ `(change-log-email ((,class :foreground ,cyan)))
+ `(change-log-file ((,class :foreground ,blue)))
+ `(change-log-function ((,class :foreground ,green-alt-other)))
+ `(change-log-list ((,class :foreground ,magenta-alt-other)))
+ `(change-log-name ((,class :foreground ,cyan)))
+ `(log-edit-header ((,class :inherit bold :foreground ,green-alt-other)))
+ `(log-edit-summary ((,class :foreground ,magenta-alt-other)))
+ `(log-edit-unknown-header ((,class :foreground ,fg-alt)))
+ `(log-view-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(log-view-message ((,class :foreground ,fg-alt)))
+;;;;; cider
+ `(cider-debug-code-overlay-face ((,class :background ,bg-alt)))
+ `(cider-debug-prompt-face ((,class :foreground ,magenta-alt :underline t)))
+ `(cider-deprecated-face ((,class :inherit modus-theme-refine-yellow)))
+ `(cider-docview-emphasis-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(cider-docview-literal-face ((,class :foreground ,blue-alt)))
+ `(cider-docview-strong-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(cider-docview-table-border-face ((,class :foreground ,fg-alt)))
+ `(cider-enlightened-face ((,class :box (:line-width -1 :color ,yellow-alt :style nil) :background ,bg-dim)))
+ `(cider-enlightened-local-face ((,class :inherit bold :foreground ,yellow-alt-other)))
+ `(cider-error-highlight-face ((,class :foreground ,red :underline t)))
+ `(cider-fragile-button-face ((,class :box (:line-width 3 :color ,fg-alt :style released-button) :foreground ,yellow)))
+ `(cider-fringe-good-face ((,class :foreground ,green-active)))
+ `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style nil) :background ,bg-dim)))
+ `(cider-reader-conditional-face ((,class :foreground ,fg-special-warm :slant italic)))
+ `(cider-repl-input-face ((,class :inherit bold)))
+ `(cider-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+ `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
+ `(cider-repl-stdout-face ((,class :foreground ,blue)))
+ `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue :style nil) :background ,bg-dim)))
+ `(cider-stacktrace-error-class-face ((,class :inherit bold :foreground ,red)))
+ `(cider-stacktrace-error-message-face ((,class :foreground ,red-alt-other :slant italic)))
+ `(cider-stacktrace-face ((,class :foreground ,fg-main)))
+ `(cider-stacktrace-filter-active-face ((,class :foreground ,cyan-alt :underline t)))
+ `(cider-stacktrace-filter-inactive-face ((,class :foreground ,cyan-alt)))
+ `(cider-stacktrace-fn-face ((,class :inherit bold :foreground ,fg-main)))
+ `(cider-stacktrace-ns-face ((,class :foreground ,fg-alt :slant italic)))
+ `(cider-stacktrace-promoted-button-face ((,class :box (:line-width 3 :color ,fg-alt :style released-button) :foreground ,red)))
+ `(cider-stacktrace-suppressed-button-face ((,class :box (:line-width 3 :color ,fg-alt :style pressed-button)
+ :background ,bg-alt :foreground ,fg-alt)))
+ `(cider-test-error-face ((,class :inherit modus-theme-subtle-red)))
+ `(cider-test-failure-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(cider-test-success-face ((,class :inherit modus-theme-intense-green)))
+ `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) :background ,bg-dim)))
+ `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
+;;;;; circe (and lui)
+ `(circe-fool-face ((,class :foreground ,fg-alt)))
+ `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
+ `(circe-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(circe-server-face ((,class :foreground ,fg-unfocused)))
+ `(lui-button-face ((,class :foreground ,blue :underline t)))
+ `(lui-highlight-face ((,class :foreground ,magenta-alt)))
+ `(lui-time-stamp-face ((,class :foreground ,blue-nuanced)))
+;;;;; color-rg
+ `(color-rg-font-lock-column-number ((,class :foreground ,magenta-alt-other)))
+ `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
+ `(color-rg-font-lock-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(color-rg-font-lock-flash ((,class :inherit modus-theme-intense-blue)))
+ `(color-rg-font-lock-function-location ((,class :inherit modus-theme-special-calm)))
+ `(color-rg-font-lock-header-line-directory ((,class :foreground ,blue-active)))
+ `(color-rg-font-lock-header-line-edit-mode ((,class :foreground ,magenta-active)))
+ `(color-rg-font-lock-header-line-keyword ((,class :foreground ,green-active)))
+ `(color-rg-font-lock-header-line-text ((,class :foreground ,fg-active)))
+ `(color-rg-font-lock-line-number ((,class :foreground ,fg-special-warm)))
+ `(color-rg-font-lock-mark-changed ((,class :inherit bold :foreground ,blue)))
+ `(color-rg-font-lock-mark-deleted ((,class :inherit bold :foreground ,red)))
+ `(color-rg-font-lock-match ((,class :inherit modus-theme-special-calm)))
+ `(color-rg-font-lock-position-splitter ((,class :foreground ,fg-alt)))
+;;;;; column-enforce-mode
+ `(column-enforce-face ((,class :inherit modus-theme-refine-yellow)))
+;;;;; company-mode
+ `(company-echo-common ((,class :foreground ,magenta-alt-other)))
+ `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(company-preview-common ((,class :foreground ,blue-alt)))
+ `(company-preview-search ((,class :inherit modus-theme-special-calm)))
+ `(company-scrollbar-bg ((,class :background ,bg-active)))
+ `(company-scrollbar-fg ((,class :background ,fg-active)))
+ `(company-template-field ((,class :inherit modus-theme-intense-magenta)))
+ `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(company-tooltip-annotation ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(company-tooltip-annotation-selection ((,class :inherit bold :foreground ,fg-main)))
+ `(company-tooltip-common ((,class :inherit bold :foreground ,blue-alt)))
+ `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
+ `(company-tooltip-mouse ((,class :inherit modus-theme-intense-blue)))
+ `(company-tooltip-search ((,class :inherit (modus-theme-refine-cyan bold))))
+ `(company-tooltip-search-selection ((,class :inherit (modus-theme-intense-green bold) :underline t)))
+ `(company-tooltip-selection ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; company-posframe
+ `(company-posframe-active-backend-name ((,class :inherit bold :background ,bg-active :foreground ,blue-active)))
+ `(company-posframe-inactive-backend-name ((,class :background ,bg-active :foreground ,fg-active)))
+ `(company-posframe-metadata ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; compilation feedback
+ `(compilation-column-number ((,class :foreground ,magenta-alt-other)))
+ `(compilation-error ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red)))
+ `(compilation-info ((,class :foreground ,fg-special-cold)))
+ `(compilation-line-number ((,class :foreground ,fg-special-warm)))
+ `(compilation-mode-line-exit ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,blue-active)))
+ `(compilation-mode-line-fail ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red-active)))
+ `(compilation-mode-line-run ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-active)))
+ `(compilation-warning ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,yellow)))
+;;;;; completions
+ `(completions-annotations ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(completions-common-part ((,class ,@(modus-vivendi-theme-standard-completions
+ cyan-alt-other cyan-nuanced-bg
+ yellow-refine-bg yellow-refine-fg))))
+ `(completions-first-difference ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ blue-alt-other blue-nuanced-bg
+ cyan-subtle-bg fg-dim))))
+;;;;; counsel
+ `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
+ `(counsel-application-name ((,class :foreground ,red-alt-other)))
+ `(counsel-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(counsel-outline-1 ((,class :inherit outline-1)))
+ `(counsel-outline-2 ((,class :inherit outline-2)))
+ `(counsel-outline-3 ((,class :inherit outline-3)))
+ `(counsel-outline-4 ((,class :inherit outline-4)))
+ `(counsel-outline-5 ((,class :inherit outline-5)))
+ `(counsel-outline-6 ((,class :inherit outline-6)))
+ `(counsel-outline-7 ((,class :inherit outline-7)))
+ `(counsel-outline-8 ((,class :inherit outline-8)))
+ `(counsel-outline-default ((,class :inherit bold :foreground ,green-alt-other)))
+ `(counsel-variable-documentation ((,class :foreground ,yellow-alt-other :slant ,modus-theme-slant)))
+;;;;; counsel-css
+ `(counsel-css-selector-depth-face-1 ((,class :foreground ,blue)))
+ `(counsel-css-selector-depth-face-2 ((,class :foreground ,cyan)))
+ `(counsel-css-selector-depth-face-3 ((,class :foreground ,green)))
+ `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
+ `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
+ `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
+;;;;; counsel-notmuch
+ `(counsel-notmuch-count-face ((,class :foreground ,cyan)))
+ `(counsel-notmuch-date-face ((,class :foreground ,blue)))
+ `(counsel-notmuch-people-face ((,class :foreground ,magenta)))
+ `(counsel-notmuch-subject-face ((,class :foreground ,magenta-alt-other)))
+;;;;; counsel-org-capture-string
+ `(counsel-org-capture-string-template-body-face ((,class :foreground ,fg-special-cold)))
+;;;;; cov
+ `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
+ `(cov-coverage-run-face ((,class :foreground ,green-intense)))
+ `(cov-heavy-face ((,class :foreground ,magenta-intense)))
+ `(cov-light-face ((,class :foreground ,blue-intense)))
+ `(cov-med-face ((,class :foreground ,yellow-intense)))
+ `(cov-none-face ((,class :foreground ,cyan-intense)))
+;;;;; csv-mode
+ `(csv-separator-face ((,class :background ,bg-special-cold :foreground ,fg-main)))
+;;;;; ctrlf
+ `(ctrlf-highlight-active ((,class :inherit (modus-theme-intense-green bold))))
+ `(ctrlf-highlight-line ((,class :inherit modus-theme-hl-line)))
+ `(ctrlf-highlight-passive ((,class :inherit modus-theme-refine-cyan)))
+;;;;; custom (M-x customize)
+ `(custom-button ((,class :box (:line-width 2 :color nil :style released-button)
+ :background ,bg-active :foreground ,fg-main)))
+ `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style released-button)
+ :background ,bg-active :foreground ,fg-active)))
+ `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style pressed-button)
+ :background ,bg-active :foreground ,fg-main)))
+ `(custom-changed ((,class :inherit modus-theme-subtle-cyan)))
+ `(custom-comment ((,class :foreground ,fg-alt)))
+ `(custom-comment-tag ((,class :background ,bg-alt :foreground ,yellow-alt-other)))
+ `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
+ `(custom-group-tag ((,class :inherit bold :foreground ,green-intense)))
+ `(custom-group-tag-1 ((,class :inherit modus-theme-special-warm)))
+ `(custom-invalid ((,class :inherit (modus-theme-intense-red bold))))
+ `(custom-modified ((,class :inherit modus-theme-subtle-cyan)))
+ `(custom-rogue ((,class :inherit modus-theme-refine-magenta)))
+ `(custom-set ((,class :foreground ,blue-alt)))
+ `(custom-state ((,class :foreground ,cyan-alt-other)))
+ `(custom-themed ((,class :inherit modus-theme-subtle-blue)))
+ `(custom-variable-tag ((,class :inherit bold :foreground ,cyan)))
+;;;;; dap-mode
+ `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color ,blue-active :style nil)
+ :background ,bg-active :foreground ,fg-main)))
+ `(dap-result-overlay-face ((,class :box (:line-width -1 :color ,bg-active :style nil)
+ :background ,bg-active :foreground ,fg-main)))
+ `(dap-ui-breakpoint-verified-fringe ((,class :inherit bold :foreground ,green-active)))
+ `(dap-ui-compile-errline ((,class :inherit bold :foreground ,red-intense)))
+ `(dap-ui-locals-scope-face ((,class :inherit bold :foreground ,magenta :underline t)))
+ `(dap-ui-locals-variable-face ((,class :inherit bold :foreground ,cyan)))
+ `(dap-ui-locals-variable-leaf-face ((,class :foreground ,cyan-alt-other :slant italic)))
+ `(dap-ui-marker-face ((,class :inherit modus-theme-subtle-blue)))
+ `(dap-ui-sessions-stack-frame-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(dap-ui-sessions-terminated-active-face ((,class :inherit bold :foreground ,fg-alt)))
+ `(dap-ui-sessions-terminated-face ((,class :foreground ,fg-alt)))
+;;;;; dashboard (emacs-dashboard)
+ `(dashboard-banner-logo-title ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(dashboard-footer ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(dashboard-heading ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(dashboard-navigator ((,class :foreground ,cyan-alt-other)))
+ `(dashboard-text-banner ((,class :foreground ,fg-dim)))
+;;;;; deadgrep
+ `(deadgrep-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(deadgrep-match-face ((,class :inherit modus-theme-special-calm)))
+ `(deadgrep-meta-face ((,class :foreground ,fg-alt)))
+ `(deadgrep-regexp-metachar-face ((,class :inherit bold :foreground ,yellow-intense)))
+ `(deadgrep-search-term-face ((,class :inherit bold :foreground ,green-intense)))
+;;;;; debbugs
+ `(debbugs-gnu-archived ((,class :inverse-video t)))
+ `(debbugs-gnu-done ((,class :foreground ,fg-alt)))
+ `(debbugs-gnu-forwarded ((,class :foreground ,fg-special-warm)))
+ `(debbugs-gnu-handled ((,class :foreground ,green)))
+ `(debbugs-gnu-new ((,class :foreground ,red)))
+ `(debbugs-gnu-pending ((,class :foreground ,cyan)))
+ `(debbugs-gnu-stale-1 ((,class :foreground ,yellow-nuanced)))
+ `(debbugs-gnu-stale-2 ((,class :foreground ,yellow)))
+ `(debbugs-gnu-stale-3 ((,class :foreground ,yellow-alt)))
+ `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
+ `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
+ `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
+;;;;; define-word
+ `(define-word-face-1 ((,class :foreground ,yellow)))
+ `(define-word-face-2 ((,class :foreground ,fg-main)))
+;;;;; deft
+ `(deft-filter-string-error-face ((,class :inherit modus-theme-refine-red)))
+ `(deft-filter-string-face ((,class :foreground ,green-intense)))
+ `(deft-header-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(deft-separator-face ((,class :foreground ,fg-alt)))
+ `(deft-summary-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(deft-time-face ((,class :foreground ,fg-special-cold)))
+ `(deft-title-face ((,class :inherit bold :foreground ,fg-main)))
+;;;;; dictionary
+ `(dictionary-button-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(dictionary-reference-face ((,class :foreground ,blue-alt-other :underline t)))
+ `(dictionary-word-definition-face ((,class :foreground ,fg-main)))
+ `(dictionary-word-entry-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+;;;;; diff-hl
+ `(diff-hl-change ((,class :inherit modus-theme-fringe-yellow)))
+ `(diff-hl-delete ((,class :inherit modus-theme-fringe-red)))
+ `(diff-hl-dired-change ((,class :inherit diff-hl-change)))
+ `(diff-hl-dired-delete ((,class :inherit diff-hl-delete)))
+ `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
+ `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
+ `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
+ `(diff-hl-insert ((,class :inherit modus-theme-fringe-green)))
+ `(diff-hl-reverted-hunk-highlight ((,class :inherit (modus-theme-active-magenta bold))))
+;;;;; diff-mode
+ `(diff-added ((,class ,@(modus-vivendi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(diff-changed ((,class ,@(modus-vivendi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(diff-context ((,class :foreground ,fg-unfocused)))
+ `(diff-file-header ((,class :inherit bold :foreground ,blue)))
+ `(diff-function ((,class :foreground ,fg-special-cold)))
+ `(diff-header ((,class :foreground ,blue-nuanced)))
+ `(diff-hunk-header ((,class ,@(modus-vivendi-theme-diffs
+ bg-alt blue-alt
+ bg-diff-heading fg-diff-heading))))
+ `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
+ `(diff-indicator-added ((,class :inherit diff-added)))
+ `(diff-indicator-changed ((,class :inherit diff-changed)))
+ `(diff-indicator-removed ((,class :inherit diff-removed)))
+ `(diff-nonexistent ((,class :inherit (modus-theme-neutral bold))))
+ `(diff-refine-added ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(diff-refine-changed ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-changed fg-diff-changed
+ bg-diff-refine-changed fg-diff-refine-changed))))
+ `(diff-refine-removed ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-removed fg-diff-removed
+ bg-diff-refine-removed fg-diff-refine-removed))))
+ `(diff-removed ((,class ,@(modus-vivendi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; dim-autoload
+ `(dim-autoload-cookie-line ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; dired
+ `(dired-directory ((,class :foreground ,blue)))
+ `(dired-flagged ((,class :inherit modus-theme-mark-del)))
+ `(dired-header ((,class :inherit modus-theme-header)))
+ `(dired-ignored ((,class :foreground ,fg-alt)))
+ `(dired-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(dired-marked ((,class :inherit modus-theme-mark-sel)))
+ `(dired-perm-write ((,class :foreground ,fg-special-warm)))
+ `(dired-symlink ((,class :foreground ,cyan-alt :underline t)))
+ `(dired-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; dired-async
+ `(dired-async-failures ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red-active)))
+ `(dired-async-message ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,green-active)))
+ `(dired-async-mode-message ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,cyan-active)))
+;;;;; dired-git
+ `(dired-git-branch-else ((,class :inherit bold :foreground ,magenta-alt)))
+ `(dired-git-branch-master ((,class :inherit bold :foreground ,magenta-alt-other)))
+;;;;; dired-git-info
+ `(dgi-commit-message-face ((,class :foreground ,fg-special-mild)))
+;;;;; dired-narrow
+ `(dired-narrow-blink ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; dired-subtree
+ ;; remove background from dired-subtree, else it breaks
+ ;; dired-{flagged,marked} and any other face that sets a background
+ ;; such as hl-line
+ `(dired-subtree-depth-1-face ((,class :background nil)))
+ `(dired-subtree-depth-2-face ((,class :background nil)))
+ `(dired-subtree-depth-3-face ((,class :background nil)))
+ `(dired-subtree-depth-4-face ((,class :background nil)))
+ `(dired-subtree-depth-5-face ((,class :background nil)))
+ `(dired-subtree-depth-6-face ((,class :background nil)))
+;;;;; diredfl
+ `(diredfl-autofile-name ((,class :inherit modus-theme-special-cold)))
+ `(diredfl-compressed-file-name ((,class :foreground ,green-alt-other)))
+ `(diredfl-compressed-file-suffix ((,class :foreground ,green-alt)))
+ `(diredfl-date-time ((,class :foreground ,fg-special-cold)))
+ `(diredfl-deletion ((,class :inherit modus-theme-mark-del)))
+ `(diredfl-deletion-file-name ((,class :inherit modus-theme-mark-del)))
+ `(diredfl-dir-heading ((,class :inherit modus-theme-header)))
+ `(diredfl-dir-name ((,class :inherit dired-directory)))
+ `(diredfl-dir-priv ((,class :foreground ,blue)))
+ `(diredfl-exec-priv ((,class :foreground ,red-alt-other)))
+ `(diredfl-executable-tag ((,class :foreground ,red-alt)))
+ `(diredfl-file-name ((,class :foreground ,fg-main)))
+ `(diredfl-file-suffix ((,class :foreground ,fg-special-warm)))
+ `(diredfl-flag-mark ((,class :inherit modus-theme-mark-sel)))
+ `(diredfl-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+ `(diredfl-ignored-file-name ((,class :foreground ,fg-inactive)))
+ `(diredfl-link-priv ((,class :foreground ,blue-alt-other)))
+ `(diredfl-no-priv ((,class :foreground ,fg-inactive)))
+ `(diredfl-number ((,class :foreground ,cyan)))
+ `(diredfl-other-priv ((,class :foreground ,yellow)))
+ `(diredfl-rare-priv ((,class :foreground ,magenta-alt-other)))
+ `(diredfl-read-priv ((,class :foreground ,magenta)))
+ `(diredfl-symlink ((,class :foreground ,cyan-alt :underline t)))
+ `(diredfl-tagged-autofile-name ((,class :inherit modus-theme-refine-magenta)))
+ `(diredfl-write-priv ((,class :foreground ,cyan-alt-other)))
+;;;;; disk-usage
+ `(disk-usage-children ((,class :foreground ,yellow)))
+ `(disk-usage-inaccessible ((,class :inherit bold :foreground ,red)))
+ `(disk-usage-percent ((,class :foreground ,green)))
+ `(disk-usage-size ((,class :foreground ,cyan)))
+ `(disk-usage-symlink ((,class :foreground ,blue :underline t)))
+ `(disk-usage-symlink-directory ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; doom-modeline
+ `(doom-modeline-bar ((,class :inherit modus-theme-active-blue)))
+ `(doom-modeline-bar-inactive ((,class :background ,fg-inactive :foreground ,bg-main)))
+ `(doom-modeline-battery-charging ((,class :foreground ,green-active)))
+ `(doom-modeline-battery-critical ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-battery-error ((,class :inherit modus-theme-active-red)))
+ `(doom-modeline-battery-full ((,class :foreground ,blue-active)))
+ `(doom-modeline-battery-normal ((,class :foreground ,fg-active)))
+ `(doom-modeline-battery-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-buffer-file ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-buffer-major-mode ((,class :inherit bold :foreground ,cyan-active)))
+ `(doom-modeline-buffer-minor-mode ((,class :foreground ,fg-inactive)))
+ `(doom-modeline-buffer-modified ((,class :inherit bold :foreground ,magenta-active)))
+ `(doom-modeline-buffer-path ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-debug ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-debug-visual ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-evil-emacs-state ((,class :inherit bold :foreground ,magenta-active)))
+ `(doom-modeline-evil-insert-state ((,class :inherit bold :foreground ,green-active)))
+ `(doom-modeline-evil-motion-state ((,class :inherit bold :foreground ,fg-inactive)))
+ `(doom-modeline-evil-normal-state ((,class :inherit bold :foreground ,fg-active)))
+ `(doom-modeline-evil-operator-state ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-evil-replace-state ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-evil-visual-state ((,class :inherit bold :foreground ,cyan-active)))
+ `(doom-modeline-highlight ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-host ((,class :slant italic)))
+ `(doom-modeline-info ((,class :foreground ,green-active)))
+ `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-lsp-success ((,class :inherit bold :foreground ,green-active)))
+ `(doom-modeline-lsp-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(doom-modeline-panel ((,class :inherit modus-theme-active-blue)))
+ `(doom-modeline-persp-buffer-not-in-persp ((,class :foreground ,yellow-active :slant italic)))
+ `(doom-modeline-persp-name ((,class :foreground ,fg-active)))
+ `(doom-modeline-project-dir ((,class :inherit bold :foreground ,blue-active)))
+ `(doom-modeline-project-parent-dir ((,class :foreground ,blue-active)))
+ `(doom-modeline-project-root-dir ((,class :foreground ,fg-active)))
+ `(doom-modeline-unread-number ((,class :foreground ,fg-active :slant italic)))
+ `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
+ `(doom-modeline-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; dynamic-ruler
+ `(dynamic-ruler-negative-face ((,class :inherit modus-theme-intense-neutral)))
+ `(dynamic-ruler-positive-face ((,class :inherit modus-theme-intense-yellow)))
+;;;;; easy-jekyll
+ `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground ,cyan-alt-other)))
+;;;;; easy-kill
+ `(easy-kill-origin ((,class :inherit modus-theme-subtle-red)))
+ `(easy-kill-selection ((,class :inherit modus-theme-subtle-yellow)))
+;;;;; ebdb
+ `(ebdb-address-default ((,class :foreground ,fg-main)))
+ `(ebdb-db-char ((,class :foreground ,fg-special-cold)))
+ `(ebdb-defunct ((,class :foreground ,fg-alt)))
+ `(ebdb-field-hidden ((,class :foreground ,magenta)))
+ `(ebdb-field-url ((,class :foreground ,blue)))
+ `(ebdb-label ((,class :foreground ,cyan-alt-other)))
+ `(ebdb-mail-default ((,class :foreground ,fg-main)))
+ `(ebdb-mail-primary ((,class :foreground ,blue-alt)))
+ `(ebdb-marked ((,class :background ,cyan-intense-bg)))
+ `(ebdb-organization-name ((,class :foreground ,fg-special-calm)))
+ `(ebdb-person-name ((,class :foreground ,magenta-alt-other)))
+ `(ebdb-phone-default ((,class :foreground ,fg-special-warm)))
+ `(ebdb-role-defunct ((,class :foreground ,fg-alt)))
+ `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
+;;;;; ediff
+ `(ediff-current-diff-A ((,class ,@(modus-vivendi-theme-diffs
+ bg-alt red
+ bg-diff-removed fg-diff-removed))))
+ `(ediff-current-diff-Ancestor ((,class ,@(modus-vivendi-theme-diffs
+ bg-alt fg-special-cold
+ bg-special-cold fg-special-cold))))
+ `(ediff-current-diff-B ((,class ,@(modus-vivendi-theme-diffs
+ bg-alt green
+ bg-diff-added fg-diff-added))))
+ `(ediff-current-diff-C ((,class ,@(modus-vivendi-theme-diffs
+ bg-alt yellow
+ bg-diff-changed fg-diff-changed))))
+ `(ediff-even-diff-A ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-Ancestor ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-B ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(ediff-even-diff-C ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-fine-diff-A ((,class :background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+ `(ediff-fine-diff-Ancestor ((,class :inherit modus-theme-refine-cyan)))
+ `(ediff-fine-diff-B ((,class :background ,bg-diff-focus-added :foreground ,fg-diff-focus-added)))
+ `(ediff-fine-diff-C ((,class :background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+ `(ediff-odd-diff-A ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-odd-diff-Ancestor ((,class :background ,bg-diff-neutral-0 :foreground ,fg-diff-neutral-0)))
+ `(ediff-odd-diff-B ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(ediff-odd-diff-C ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+;;;;; eglot
+ `(eglot-mode-line ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-active)))
+;;;;; el-search
+ `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(el-search-match ((,class :inherit modus-theme-intense-green)))
+ `(el-search-other-match ((,class :inherit modus-theme-special-mild)))
+ `(el-search-occur-match ((,class :inherit modus-theme-special-calm)))
+;;;;; eldoc-box
+ `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(eldoc-box-border ((,class :background ,fg-alt)))
+;;;;; elfeed
+ `(elfeed-log-date-face ((,class :foreground ,cyan-alt)))
+ `(elfeed-log-debug-level-face ((,class :foreground ,magenta)))
+ `(elfeed-log-error-level-face ((,class :foreground ,red)))
+ `(elfeed-log-info-level-face ((,class :foreground ,green)))
+ `(elfeed-log-warn-level-face ((,class :foreground ,yellow)))
+ `(elfeed-search-date-face ((,class :foreground ,cyan)))
+ `(elfeed-search-feed-face ((,class :foreground ,blue)))
+ `(elfeed-search-filter-face ((,class :foreground ,magenta-active)))
+ `(elfeed-search-last-update-face ((,class :foreground ,green-active)))
+ `(elfeed-search-tag-face ((,class :foreground ,cyan-alt-other)))
+ `(elfeed-search-title-face ((,class :foreground ,fg-main)))
+ `(elfeed-search-unread-count-face ((,class :foreground ,blue-active)))
+ `(elfeed-search-unread-title-face ((,class :inherit bold)))
+;;;;; elfeed-score
+ `(elfeed-score-date-face ((,class :foreground ,blue)))
+ `(elfeed-score-debug-level-face ((,class :foreground ,magenta-alt-other)))
+ `(elfeed-score-error-level-face ((,class :foreground ,red)))
+ `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
+ `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+;;;;; emms
+ `(emms-playlist-track-face ((,class :foreground ,blue)))
+ `(emms-playlist-selected-face ((,class :inherit bold :foreground ,magenta)))
+;;;;; enhanced-ruby-mode
+ `(enh-ruby-heredoc-delimiter-face ((,class :foreground ,blue-alt-other)))
+ `(enh-ruby-op-face ((,class :foreground ,fg-main)))
+ `(enh-ruby-regexp-delimiter-face ((,class :foreground ,green)))
+ `(enh-ruby-regexp-face ((,class :foreground ,magenta)))
+ `(enh-ruby-string-delimiter-face ((,class :foreground ,blue-alt)))
+ `(erm-syn-errline ((,class :foreground ,red :underline t)))
+ `(erm-syn-warnline ((,class :foreground ,yellow :underline t)))
+;;;;; epa
+ `(epa-field-body ((,class :foreground ,fg-main)))
+ `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
+ `(epa-mark ((,class :inherit bold :foreground ,magenta)))
+ `(epa-string ((,class :foreground ,blue-alt)))
+ `(epa-validity-disabled ((,class :inherit modus-theme-refine-red)))
+ `(epa-validity-high ((,class :inherit bold :foreground ,green-alt-other)))
+ `(epa-validity-low ((,class :foreground ,fg-alt)))
+ `(epa-validity-medium ((,class :foreground ,green-alt)))
+;;;;; equake
+ `(equake-buffer-face ((,class :background ,bg-main :foreground ,fg-main)))
+ `(equake-shell-type-eshell ((,class :background ,bg-inactive :foreground ,green-active)))
+ `(equake-shell-type-rash ((,class :background ,bg-inactive :foreground ,red-active)))
+ `(equake-shell-type-shell ((,class :background ,bg-inactive :foreground ,cyan-active)))
+ `(equake-shell-type-term ((,class :background ,bg-inactive :foreground ,yellow-active)))
+ `(equake-shell-type-vterm ((,class :background ,bg-inactive :foreground ,magenta-active)))
+ `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
+ `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
+;;;;; erc
+ `(erc-action-face ((,class :inherit bold :foreground ,cyan)))
+ `(erc-bold-face ((,class :inherit bold)))
+ `(erc-button ((,class :inherit button)))
+ `(erc-command-indicator-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
+ `(erc-dangerous-host-face ((,class :inherit modus-theme-intense-red)))
+ `(erc-direct-msg-face ((,class :foreground ,magenta)))
+ `(erc-error-face ((,class :inherit bold :foreground ,red)))
+ `(erc-fool-face ((,class :foreground ,fg-inactive)))
+ `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
+ `(erc-input-face ((,class :foreground ,fg-special-calm)))
+ `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
+ `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
+ `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
+ `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
+ `(erc-nick-msg-face ((,class :inherit bold :foreground ,green)))
+ `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
+ `(erc-notice-face ((,class :foreground ,fg-unfocused)))
+ `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
+ `(erc-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(erc-timestamp-face ((,class :foreground ,blue-nuanced)))
+ `(erc-underline-face ((,class :underline t)))
+;;;;; eros
+ `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
+ :background ,bg-dim :foreground ,fg-dim)))
+;;;;; ert
+ `(ert-test-result-expected ((,class :inherit modus-theme-intense-green)))
+ `(ert-test-result-unexpected ((,class :inherit modus-theme-intense-red)))
+;;;;; eshell
+ `(eshell-ls-archive ((,class :inherit bold :foreground ,cyan-alt)))
+ `(eshell-ls-backup ((,class :foreground ,yellow-alt)))
+ `(eshell-ls-clutter ((,class :foreground ,red-alt)))
+ `(eshell-ls-directory ((,class :inherit bold :foreground ,blue-alt)))
+ `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
+ `(eshell-ls-missing ((,class :inherit modus-theme-intense-red)))
+ `(eshell-ls-product ((,class :foreground ,fg-special-warm)))
+ `(eshell-ls-readonly ((,class :foreground ,fg-special-cold)))
+ `(eshell-ls-special ((,class :inherit bold :foreground ,magenta)))
+ `(eshell-ls-symlink ((,class :foreground ,cyan :underline t)))
+ `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(eshell-prompt ((,class ,@(modus-vivendi-theme-bold-weight)
+ ,@(modus-vivendi-theme-prompt green-alt-other
+ green-nuanced-bg
+ green-alt
+ green-refine-bg
+ fg-main))))
+;;;;; eshell-fringe-status
+ `(eshell-fringe-status-failure ((,class :foreground ,red)))
+ `(eshell-fringe-status-success ((,class :foreground ,green)))
+;;;;; eshell-git-prompt
+ `(eshell-git-prompt-add-face ((,class :foreground ,fg-alt)))
+ `(eshell-git-prompt-branch-face ((,class :foreground ,fg-alt)))
+ `(eshell-git-prompt-directory-face ((,class :foreground ,cyan)))
+ `(eshell-git-prompt-exit-fail-face ((,class :foreground ,red)))
+ `(eshell-git-prompt-exit-success-face ((,class :foreground ,green)))
+ `(eshell-git-prompt-modified-face ((,class :foreground ,yellow)))
+ `(eshell-git-prompt-powerline-clean-face ((,class :background ,green-refine-bg)))
+ `(eshell-git-prompt-powerline-dir-face ((,class :background ,blue-refine-bg)))
+ `(eshell-git-prompt-powerline-not-clean-face ((,class :background ,magenta-refine-bg)))
+ `(eshell-git-prompt-robyrussell-branch-face ((,class :foreground ,red)))
+ `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground ,yellow)))
+ `(eshell-git-prompt-robyrussell-git-face ((,class :foreground ,blue)))
+;;;;; eshell-prompt-extras (epe)
+ `(epe-dir-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,blue)))
+ `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
+ `(epe-git-face ((,class :foreground ,cyan-alt)))
+ `(epe-pipeline-delimiter-face ((,class :foreground ,green-alt)))
+ `(epe-pipeline-host-face ((,class :foreground ,blue)))
+ `(epe-pipeline-time-face ((,class :foreground ,fg-special-warm)))
+ `(epe-pipeline-user-face ((,class :foreground ,magenta)))
+ `(epe-remote-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(epe-status-face ((,class :foreground ,magenta-alt-other)))
+ `(epe-venv-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; evil-mode
+ `(evil-ex-commands ((,class :foreground ,magenta-alt-other)))
+ `(evil-ex-info ((,class :foreground ,cyan-alt-other)))
+ `(evil-ex-lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+ `(evil-ex-search ((,class :inherit modus-theme-intense-green)))
+ `(evil-ex-substitute-matches ((,class :inherit modus-theme-refine-yellow :underline t)))
+ `(evil-ex-substitute-replacement ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; evil-goggles
+ `(evil-goggles-change-face ((,class :inherit modus-theme-refine-yellow)))
+ `(evil-goggles-commentary-face ((,class :inherit modus-theme-subtle-neutral :slant ,modus-theme-slant)))
+ `(evil-goggles-default-face ((,class :inherit modus-theme-subtle-neutral)))
+ `(evil-goggles-delete-face ((,class :inherit modus-theme-refine-red)))
+ `(evil-goggles-fill-and-move-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-indent-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-join-face ((,class :inherit modus-theme-subtle-green)))
+ `(evil-goggles-nerd-commenter-face ((,class :inherit evil-goggles-commentary-face)))
+ `(evil-goggles-paste-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(evil-goggles-record-macro-face ((,class :inherit modus-theme-special-cold)))
+ `(evil-goggles-replace-with-register-face ((,class :inherit modus-theme-refine-magenta)))
+ `(evil-goggles-set-marker-face ((,class :inherit modus-theme-intense-magenta)))
+ `(evil-goggles-shift-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-surround-face ((,class :inherit evil-goggles-default-face)))
+ `(evil-goggles-yank-face ((,class :inherit modus-theme-subtle-blue)))
+;;;;; evil-visual-mark-mode
+ `(evil-visual-mark-face ((,class :inherit modus-theme-intense-magenta)))
+;;;;; eww
+ `(eww-invalid-certificate ((,class :foreground ,red-active)))
+ `(eww-valid-certificate ((,class :foreground ,green-active)))
+ `(eww-form-checkbox ((,class :box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-inactive :foreground ,fg-main)))
+ `(eww-form-file ((,class :box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-active :foreground ,fg-main)))
+ `(eww-form-select ((,class :inherit eww-form-checkbox)))
+ `(eww-form-submit ((,class :inherit eww-form-file)))
+ `(eww-form-text ((,class :box (:line-width 1 :color ,fg-inactive :style none) :background ,bg-active :foreground ,fg-active)))
+ `(eww-form-textarea ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; eyebrowse
+ `(eyebrowse-mode-line-active ((,class :inherit bold :foreground ,blue-active)))
+;;;;; fancy-dabbrev
+ `(fancy-dabbrev-menu-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(fancy-dabbrev-preview-face ((,class :foreground ,fg-alt :underline t)))
+ `(fancy-dabbrev-selection-face ((,class :inherit (modus-theme-intense-cyan bold))))
+;;;;; flycheck
+ `(flycheck-error
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+ `(flycheck-error-list-checker-name ((,class :foreground ,magenta-active)))
+ `(flycheck-error-list-column-number ((,class :foreground ,fg-special-cold)))
+ `(flycheck-error-list-error ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red)))
+ `(flycheck-error-list-filename ((,class :foreground ,blue)))
+ `(flycheck-error-list-highlight ((,class :inherit modus-theme-hl-line)))
+ `(flycheck-error-list-id ((,class :foreground ,magenta-alt-other)))
+ `(flycheck-error-list-id-with-explainer ((,class :inherit flycheck-error-list-id :box t)))
+ `(flycheck-error-list-info ((,class :foreground ,cyan)))
+ `(flycheck-error-list-line-number ((,class :foreground ,fg-special-warm)))
+ `(flycheck-error-list-warning ((,class :foreground ,yellow)))
+ `(flycheck-fringe-error ((,class :inherit modus-theme-fringe-red)))
+ `(flycheck-fringe-info ((,class :inherit modus-theme-fringe-cyan)))
+ `(flycheck-fringe-warning ((,class :inherit modus-theme-fringe-yellow)))
+ `(flycheck-info
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-note :style wave))
+ (,class :foreground ,fg-lang-note :underline t)))
+ `(flycheck-verify-select-checker ((,class :box (:line-width 1 :color nil :style released-button))))
+ `(flycheck-warning
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flycheck-indicator
+ `(flycheck-indicator-disabled ((,class :foreground ,fg-inactive :slant ,modus-theme-slant)))
+ `(flycheck-indicator-error ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red-active)))
+ `(flycheck-indicator-info ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,blue-active)))
+ `(flycheck-indicator-running ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-active)))
+ `(flycheck-indicator-success ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,green-active)))
+ `(flycheck-indicator-warning ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,yellow-active)))
+;;;;; flycheck-posframe
+ `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
+ `(flycheck-posframe-border-face ((,class :foreground ,fg-alt)))
+ `(flycheck-posframe-error-face ((,class :inherit bold :foreground ,red)))
+ `(flycheck-posframe-face ((,class :foreground ,fg-main :slant ,modus-theme-slant)))
+ `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
+ `(flycheck-posframe-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; flymake
+ `(flymake-error
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+ `(flymake-note
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-note :style wave))
+ (,class :foreground ,fg-lang-note :underline t)))
+ `(flymake-warning
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flyspell
+ `(flyspell-duplicate
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-warning :style wave))
+ (,class :foreground ,fg-lang-warning :underline t)))
+ `(flyspell-incorrect
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,fg-lang-error :style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+;;;;; flyspell-correct
+ `(flyspell-correct-highlight-face ((,class :inherit modus-theme-refine-green)))
+;;;;; flx
+ `(flx-highlight-face ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+;;;;; freeze-it
+ `(freeze-it-show ((,class :background ,bg-dim :foreground ,fg-special-warm)))
+;;;;; frog-menu
+ `(frog-menu-action-keybinding-face ((,class :foreground ,blue-alt-other)))
+ `(frog-menu-actions-face ((,class :foreground ,magenta)))
+ `(frog-menu-border ((,class :background ,bg-active)))
+ `(frog-menu-candidates-face ((,class :foreground ,fg-main)))
+ `(frog-menu-posframe-background-face ((,class :background ,bg-dim)))
+ `(frog-menu-prompt-face ((,class :foreground ,cyan)))
+;;;;; focus
+ `(focus-unfocused ((,class :foreground ,fg-unfocused)))
+;;;;; fold-this
+ `(fold-this-overlay ((,class :inherit modus-theme-special-mild)))
+;;;;; font-lock
+ `(font-lock-builtin-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(font-lock-comment-delimiter-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(font-lock-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(font-lock-constant-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(font-lock-doc-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ fg-special-cold cyan-alt-other-faint)
+ :slant ,modus-theme-slant)))
+ `(font-lock-function-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(font-lock-keyword-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(font-lock-negation-char-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ yellow yellow-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(font-lock-preprocessor-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+ `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+ `(font-lock-string-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt blue-alt-faint))))
+ `(font-lock-type-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(font-lock-variable-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(font-lock-warning-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ yellow-active yellow-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+;;;;; forge
+ `(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
+ `(forge-post-date ((,class :foreground ,fg-special-cold)))
+ `(forge-topic-closed ((,class :foreground ,fg-alt)))
+ `(forge-topic-merged ((,class :foreground ,fg-alt)))
+ `(forge-topic-open ((,class :foreground ,fg-special-mild)))
+ `(forge-topic-unmerged ((,class :foreground ,magenta :slant ,modus-theme-slant)))
+ `(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
+;;;;; fountain-mode
+ `(fountain-character ((,class :foreground ,blue-alt-other)))
+ `(fountain-comment ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(fountain-dialog ((,class :foreground ,blue-alt)))
+ `(fountain-metadata-key ((,class :foreground ,green-alt-other)))
+ `(fountain-metadata-value ((,class :foreground ,blue)))
+ `(fountain-non-printing ((,class :foreground ,fg-alt)))
+ `(fountain-note ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(fountain-page-break ((,class :inherit bold :foreground ,red-alt)))
+ `(fountain-page-number ((,class :inherit bold :foreground ,red-alt-other)))
+ `(fountain-paren ((,class :foreground ,cyan)))
+ `(fountain-scene-heading ((,class :inherit bold :foreground ,blue-nuanced)))
+ `(fountain-section-heading ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(fountain-section-heading-1 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(fountain-section-heading-2 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-warm
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3))))
+ `(fountain-section-heading-3 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-mild
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-2))))
+ `(fountain-section-heading-4 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-calm
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-1))))
+ `(fountain-section-heading-5 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-calm)))
+ `(fountain-synopsis ((,class :foreground ,cyan-alt)))
+ `(fountain-trans ((,class :foreground ,yellow-alt-other)))
+;;;;; geiser
+ `(geiser-font-lock-autodoc-current-arg ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(geiser-font-lock-autodoc-identifier ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue blue-faint))))
+ `(geiser-font-lock-doc-button ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt cyan-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-doc-link ((,class :inherit link)))
+ `(geiser-font-lock-error-link ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-image-button ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt green-alt-faint)
+ :underline t)))
+ `(geiser-font-lock-repl-input ((,class :inherit bold)))
+ `(geiser-font-lock-repl-output ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint))))
+ `(geiser-font-lock-repl-prompt ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(geiser-font-lock-xref-header ((,class :inherit bold)))
+ `(geiser-font-lock-xref-link ((,class :inherit link)))
+;;;;; git-commit
+ `(git-commit-comment-action ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-branch-local ((,class :foreground ,blue-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-branch-remote ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-detached ((,class :foreground ,cyan-alt :slant ,modus-theme-slant)))
+ `(git-commit-comment-file ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(git-commit-comment-heading ((,class :inherit bold :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(git-commit-keyword ((,class :foreground ,magenta)))
+ `(git-commit-known-pseudo-header ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(git-commit-nonempty-second-line ((,class :inherit modus-theme-refine-yellow)))
+ `(git-commit-overlong-summary ((,class :inherit modus-theme-refine-yellow)))
+ `(git-commit-pseudo-header ((,class :inherit bold :foreground ,fg-alt)))
+ `(git-commit-summary ((,class :foreground ,magenta-alt-other)))
+;;;;; git-gutter
+ `(git-gutter:added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter:deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter:modified ((,class :inherit modus-theme-fringe-yellow)))
+ `(git-gutter:separator ((,class :inherit modus-theme-fringe-cyan)))
+ `(git-gutter:unchanged ((,class :inherit modus-theme-fringe-magenta)))
+;;;;; git-gutter-fr
+ `(git-gutter-fr:added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter-fr:deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter-fr:modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-{gutter,fringe}+
+ `(git-gutter+-added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter+-deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter+-modified ((,class :inherit modus-theme-fringe-yellow)))
+ `(git-gutter+-separator ((,class :inherit modus-theme-fringe-cyan)))
+ `(git-gutter+-unchanged ((,class :inherit modus-theme-fringe-magenta)))
+ `(git-gutter-fr+-added ((,class :inherit modus-theme-fringe-green)))
+ `(git-gutter-fr+-deleted ((,class :inherit modus-theme-fringe-red)))
+ `(git-gutter-fr+-modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-lens
+ `(git-lens-added ((,class :inherit bold :foreground ,green)))
+ `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
+ `(git-lens-header ((,class :inherit bold :height 1.1 :foreground ,cyan)))
+ `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
+ `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
+;;;;; git-rebase
+ `(git-rebase-comment-hash ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(git-rebase-comment-heading ((,class :inherit bold :foreground ,fg-dim :slant ,modus-theme-slant)))
+ `(git-rebase-description ((,class :foreground ,fg-main)))
+ `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
+;;;;; git-timemachine
+ `(git-timemachine-commit ((,class :inherit bold :foreground ,yellow-active)))
+ `(git-timemachine-minibuffer-author-face ((,class :foreground ,fg-special-warm)))
+ `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
+;;;;; git-walktree
+ `(git-walktree-commit-face ((,class :foreground ,yellow)))
+ `(git-walktree-symlink-face ((,class :foreground ,cyan :underline t)))
+ `(git-walktree-tree-face ((,class :foreground ,magenta)))
+;;;;; gnus
+ `(gnus-button ((,class :inherit button)))
+ `(gnus-cite-1 ((,class :foreground ,blue-alt)))
+ `(gnus-cite-10 ((,class :foreground ,magenta-alt-other)))
+ `(gnus-cite-11 ((,class :foreground ,yellow-alt-other)))
+ `(gnus-cite-2 ((,class :foreground ,red-alt)))
+ `(gnus-cite-3 ((,class :foreground ,green-alt)))
+ `(gnus-cite-4 ((,class :foreground ,magenta-alt)))
+ `(gnus-cite-5 ((,class :foreground ,yellow-alt)))
+ `(gnus-cite-6 ((,class :foreground ,cyan-alt)))
+ `(gnus-cite-7 ((,class :foreground ,blue-alt-other)))
+ `(gnus-cite-8 ((,class :foreground ,red-alt-other)))
+ `(gnus-cite-9 ((,class :foreground ,green-alt-other)))
+ `(gnus-cite-attribution ((,class :foreground ,fg-main :slant italic)))
+ `(gnus-emphasis-highlight-words ((,class :inherit modus-theme-refine-yellow)))
+ `(gnus-group-mail-1 ((,class :inherit bold :foreground ,magenta-alt)))
+ `(gnus-group-mail-1-empty ((,class :foreground ,magenta-alt)))
+ `(gnus-group-mail-2 ((,class :inherit bold :foreground ,magenta)))
+ `(gnus-group-mail-2-empty ((,class :foreground ,magenta)))
+ `(gnus-group-mail-3 ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(gnus-group-mail-3-empty ((,class :foreground ,magenta-alt-other)))
+ `(gnus-group-mail-low ((,class :inherit bold :foreground ,magenta-nuanced)))
+ `(gnus-group-mail-low-empty ((,class :foreground ,magenta-nuanced)))
+ `(gnus-group-news-1 ((,class :inherit bold :foreground ,green)))
+ `(gnus-group-news-1-empty ((,class :foreground ,green)))
+ `(gnus-group-news-2 ((,class :inherit bold :foreground ,cyan)))
+ `(gnus-group-news-2-empty ((,class :foreground ,cyan)))
+ `(gnus-group-news-3 ((,class :inherit bold :foreground ,yellow-nuanced)))
+ `(gnus-group-news-3-empty ((,class :foreground ,yellow-nuanced)))
+ `(gnus-group-news-4 ((,class :inherit bold :foreground ,cyan-nuanced)))
+ `(gnus-group-news-4-empty ((,class :foreground ,cyan-nuanced)))
+ `(gnus-group-news-5 ((,class :inherit bold :foreground ,red-nuanced)))
+ `(gnus-group-news-5-empty ((,class :foreground ,red-nuanced)))
+ `(gnus-group-news-6 ((,class :inherit bold :foreground ,fg-alt)))
+ `(gnus-group-news-6-empty ((,class :foreground ,fg-alt)))
+ `(gnus-group-news-low ((,class :inherit bold :foreground ,green-nuanced)))
+ `(gnus-group-news-low-empty ((,class :foreground ,green-nuanced)))
+ `(gnus-header-content ((,class :foreground ,fg-special-calm)))
+ `(gnus-header-from ((,class :inherit bold :foreground ,cyan-alt :underline nil)))
+ `(gnus-header-name ((,class :foreground ,cyan-alt-other)))
+ `(gnus-header-newsgroups ((,class :inherit bold :foreground ,blue-alt)))
+ `(gnus-header-subject ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(gnus-server-agent ((,class :inherit bold :foreground ,cyan)))
+ `(gnus-server-closed ((,class :inherit bold :foreground ,magenta)))
+ `(gnus-server-cloud ((,class :inherit bold :foreground ,cyan-alt)))
+ `(gnus-server-cloud-host ((,class :inherit modus-theme-refine-cyan)))
+ `(gnus-server-denied ((,class :inherit bold :foreground ,red)))
+ `(gnus-server-offline ((,class :inherit bold :foreground ,yellow)))
+ `(gnus-server-opened ((,class :inherit bold :foreground ,green)))
+ `(gnus-signature ((,class :foreground ,fg-special-cold :slant italic)))
+ `(gnus-splash ((,class :foreground ,fg-alt)))
+ `(gnus-summary-cancelled ((,class :inherit modus-theme-mark-alt)))
+ `(gnus-summary-high-ancient ((,class :inherit bold :foreground ,fg-alt)))
+ `(gnus-summary-high-read ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(gnus-summary-high-ticked ((,class :inherit bold :foreground ,red-alt-other)))
+ `(gnus-summary-high-undownloaded ((,class :inherit bold :foreground ,yellow)))
+ `(gnus-summary-high-unread ((,class :inherit bold :foreground ,fg-main)))
+ `(gnus-summary-low-ancient ((,class :foreground ,fg-alt :slant italic)))
+ `(gnus-summary-low-read ((,class :foreground ,fg-special-cold :slant italic)))
+ `(gnus-summary-low-ticked ((,class :foreground ,red-refine-fg :slant italic)))
+ `(gnus-summary-low-undownloaded ((,class :foreground ,yellow-refine-fg :slant italic)))
+ `(gnus-summary-low-unread ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(gnus-summary-normal-ancient ((,class :foreground ,fg-special-calm)))
+ `(gnus-summary-normal-read ((,class :foreground ,fg-special-cold)))
+ `(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
+ `(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
+ `(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
+ `(gnus-summary-selected ((,class :inherit modus-theme-subtle-blue)))
+;;;;; golden-ratio-scroll-screen
+ `(golden-ratio-scroll-highlight-line-face ((,class :background ,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; helm
+ `(helm-M-x-key ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(helm-action ((,class :underline t)))
+ `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
+ `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
+ `(helm-bookmark-file ((,class :foreground ,fg-main)))
+ `(helm-bookmark-file-not-found ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(helm-bookmark-gnus ((,class :foreground ,magenta)))
+ `(helm-bookmark-info ((,class :foreground ,cyan-alt)))
+ `(helm-bookmark-man ((,class :foreground ,yellow-alt)))
+ `(helm-bookmark-w3m ((,class :foreground ,blue-alt)))
+ `(helm-buffer-archive ((,class :inherit bold :foreground ,cyan)))
+ `(helm-buffer-directory ((,class :inherit bold :foreground ,blue)))
+ `(helm-buffer-file ((,class :foreground ,fg-main)))
+ `(helm-buffer-modified ((,class :foreground ,yellow-alt)))
+ `(helm-buffer-not-saved ((,class :foreground ,red-alt)))
+ `(helm-buffer-process ((,class :foreground ,magenta)))
+ `(helm-buffer-saved-out ((,class :inherit bold :background ,bg-alt :foreground ,red)))
+ `(helm-buffer-size ((,class :foreground ,fg-alt)))
+ `(helm-candidate-number ((,class :foreground ,cyan-active)))
+ `(helm-candidate-number-suspended ((,class :foreground ,yellow-active)))
+ `(helm-comint-prompts-buffer-name ((,class :foreground ,green-active)))
+ `(helm-comint-prompts-promptidx ((,class :foreground ,cyan-active)))
+ `(helm-delete-async-message ((,class :inherit bold :foreground ,magenta-active)))
+ `(helm-eob-line ((,class :background ,bg-main :foreground ,fg-main)))
+ `(helm-eshell-prompts-buffer-name ((,class :foreground ,green-active)))
+ `(helm-eshell-prompts-promptidx ((,class :foreground ,cyan-active)))
+ `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
+ `(helm-ff-backup-file ((,class :foreground ,fg-alt)))
+ `(helm-ff-denied ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-intense-red
+ 'modus-theme-nuanced-red
+ red))))
+ `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
+ `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt :foreground ,fg-alt)))
+ `(helm-ff-dotted-symlink-directory ((,class :inherit helm-ff-dotted-directory :underline t)))
+ `(helm-ff-executable ((,class :foreground ,magenta-alt)))
+ `(helm-ff-file ((,class :foreground ,fg-main)))
+ `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
+ `(helm-ff-invalid-symlink ((,class :foreground ,red :underline t)))
+ `(helm-ff-pipe ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-magenta
+ 'modus-theme-subtle-magenta
+ 'modus-theme-nuanced-magenta
+ magenta))))
+ `(helm-ff-prefix ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-yellow
+ 'modus-theme-subtle-yellow
+ 'modus-theme-nuanced-yellow
+ yellow-alt-other))))
+ `(helm-ff-socket ((,class :foreground ,red-alt-other)))
+ `(helm-ff-suid ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-refine-red
+ 'modus-theme-nuanced-yellow
+ red-alt))))
+ `(helm-ff-symlink ((,class :foreground ,cyan :underline t)))
+ `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
+ `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
+ `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-grep-finish ((,class :foreground ,green-active)))
+ `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
+ `(helm-grep-match ((,class :inherit modus-theme-special-calm)))
+ `(helm-header ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-header-line-left-margin ((,class :inherit bold :foreground ,yellow-intense)))
+ `(helm-history-deleted ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-red
+ 'modus-theme-intense-red
+ 'modus-theme-nuanced-red
+ red
+ 'bold))))
+ `(helm-history-remote ((,class :foreground ,red-alt-other)))
+ `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm)))
+ `(helm-lisp-show-completion ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-yellow
+ 'modus-theme-refine-yellow
+ 'modus-theme-nuanced-yellow
+ yellow
+ 'bold))))
+ `(helm-locate-finish ((,class :foreground ,green-active)))
+ `(helm-match ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan
+ 'bold))))
+ `(helm-match-item ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-neutral
+ 'modus-theme-subtle-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other))))
+ `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
+ `(helm-moccur-buffer ((,class :foreground ,cyan-alt-other :underline t)))
+ `(helm-mode-prefix ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt
+ 'bold))))
+ `(helm-non-file-buffer ((,class :foreground ,fg-alt)))
+ `(helm-prefarg ((,class :foreground ,red-active)))
+ `(helm-resume-need-update ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other))))
+ `(helm-selection ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-special-cold
+ nil
+ 'bold))))
+ `(helm-selection-line ((,class :inherit modus-theme-special-cold)))
+ `(helm-separator ((,class :foreground ,fg-special-mild)))
+ `(helm-time-zone-current ((,class :foreground ,green)))
+ `(helm-time-zone-home ((,class :foreground ,magenta)))
+ `(helm-source-header ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(helm-top-columns ((,class :inherit helm-header)))
+ `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
+ `(helm-visible-mark ((,class :inherit modus-theme-subtle-cyan)))
+;;;;; helm-ls-git
+ `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
+ `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
+ `(helm-ls-git-conflict-face ((,class :inherit bold :foreground ,red-intense)))
+ `(helm-ls-git-deleted-and-staged-face ((,class :foreground ,red-nuanced)))
+ `(helm-ls-git-deleted-not-staged-face ((,class :foreground ,red)))
+ `(helm-ls-git-modified-and-staged-face ((,class :foreground ,yellow-nuanced)))
+ `(helm-ls-git-modified-not-staged-face ((,class :foreground ,yellow)))
+ `(helm-ls-git-renamed-modified-face ((,class :foreground ,magenta)))
+ `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
+;;;;; helm-switch-shell
+ `(helm-switch-shell-new-shell-face ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+;;;;; helm-xref
+ `(helm-xref-file-name ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(helm-xref-file-name ((,class :foreground ,fg-special-warm)))
+;;;;; helpful
+ `(helpful-heading ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+;;;;; highlight region or ad-hoc regexp
+ `(hi-black-b ((,class :background ,fg-main :foreground ,bg-main)))
+ `(hi-blue ((,class :background ,bg-alt :foreground ,blue :underline t)))
+ `(hi-blue-b ((,class :inherit modus-theme-intense-blue)))
+ `(hi-green ((,class :background ,bg-alt :foreground ,green :underline t)))
+ `(hi-green-b ((,class :inherit modus-theme-intense-green)))
+ `(hi-pink ((,class :background ,bg-alt :foreground ,magenta :underline t)))
+ `(hi-red-b ((,class :inherit modus-theme-intense-red)))
+ `(hi-yellow ((,class :background ,bg-alt :foreground ,yellow :underline t)))
+ `(highlight ((,class :inherit modus-theme-subtle-blue)))
+ `(highlight-changes ((,class :foreground ,yellow-alt-other)))
+ `(highlight-changes-delete ((,class :foreground ,red-alt-other :underline t)))
+ `(hl-line ((,class :inherit modus-theme-hl-line)))
+;;;;; highlight-blocks
+ `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground ,fg-main)))
+ `(highlight-blocks-depth-3-face ((,class :background ,bg-special-cold :foreground ,fg-main)))
+ `(highlight-blocks-depth-4-face ((,class :background ,bg-special-calm :foreground ,fg-main)))
+ `(highlight-blocks-depth-5-face ((,class :background ,bg-special-warm :foreground ,fg-main)))
+ `(highlight-blocks-depth-6-face ((,class :background ,bg-special-mild :foreground ,fg-main)))
+ `(highlight-blocks-depth-7-face ((,class :background ,bg-inactive :foreground ,fg-main)))
+ `(highlight-blocks-depth-8-face ((,class :background ,bg-active :foreground ,fg-main)))
+ `(highlight-blocks-depth-9-face ((,class :background ,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; highlight-defined
+ `(highlight-defined-builtin-function-name-face ((,class :foreground ,magenta)))
+ `(highlight-defined-face-name-face ((,class :foreground ,fg-main)))
+ `(highlight-defined-function-name-face ((,class :foreground ,magenta)))
+ `(highlight-defined-macro-name-face ((,class :foreground ,magenta-alt)))
+ `(highlight-defined-special-form-name-face ((,class :foreground ,magenta-alt-other)))
+ `(highlight-defined-variable-name-face ((,class :foreground ,cyan)))
+;;;;; highlight-escape-sequences (`hes-mode')
+ `(hes-escape-backslash-face ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+ `(hes-escape-sequence-face ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+;;;;; highlight-indentation
+ `(highlight-indentation-face ((,class :inherit modus-theme-hl-line)))
+ `(highlight-indentation-current-column-face ((,class :background ,bg-active)))
+;;;;; highlight-numbers
+ `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
+;;;;; highlight-symbol
+ `(highlight-symbol-face ((,class :inherit modus-theme-special-mild)))
+;;;;; highlight-thing
+ `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
+;;;;; hl-defined
+ `(hdefd-functions ((,class :foreground ,blue)))
+ `(hdefd-undefined ((,class :foreground ,red-alt)))
+ `(hdefd-variables ((,class :foreground ,cyan-alt)))
+;;;;; hl-fill-column
+ `(hl-fill-column-face ((,class :background ,bg-active :foreground ,fg-active)))
+;;;;; hl-todo
+ `(hl-todo ((,class :inherit bold :foreground ,red-alt-other :slant ,modus-theme-slant)))
+;;;;; hydra
+ `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
+ `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
+ `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt)))
+ `(hydra-face-red ((,class :inherit bold :foreground ,red)))
+ `(hydra-face-teal ((,class :inherit bold :foreground ,cyan)))
+;;;;; hyperlist
+ `(hyperlist-condition ((,class :foreground ,green)))
+ `(hyperlist-hashtag ((,class :foreground ,yellow)))
+ `(hyperlist-operator ((,class :foreground ,blue-alt)))
+ `(hyperlist-paren ((,class :foreground ,cyan-alt-other)))
+ `(hyperlist-quote ((,class :foreground ,cyan-alt)))
+ `(hyperlist-ref ((,class :foreground ,magenta-alt-other)))
+ `(hyperlist-stars ((,class :foreground ,fg-alt)))
+ `(hyperlist-tag ((,class :foreground ,red)))
+ `(hyperlist-toplevel ((,class :inherit bold :foreground ,fg-main)))
+;;;;; icomplete
+ `(icomplete-first-match ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ magenta magenta-nuanced-bg
+ magenta-intense-bg fg-main))))
+;;;;; icomplete-vertical
+ `(icomplete-vertical-separator ((,class :foreground ,fg-alt)))
+;;;;; ido-mode
+ `(ido-first-match ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ magenta magenta-nuanced-bg
+ magenta-subtle-bg fg-main))))
+ `(ido-incomplete-regexp ((,class :inherit error)))
+ `(ido-indicator ((,class :inherit modus-theme-subtle-yellow)))
+ `(ido-only-match ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ magenta-intense red-nuanced-bg
+ magenta-intense-bg fg-main))))
+ `(ido-subdir ((,class :foreground ,blue-alt-other)))
+ `(ido-virtual ((,class :foreground ,yellow-alt-other)))
+;;;;; iedit
+ `(iedit-occurrence ((,class :inherit modus-theme-refine-blue)))
+ `(iedit-read-only-occurrence ((,class :inherit modus-theme-intense-yellow)))
+;;;;; iflipb
+ `(iflipb-current-buffer-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(iflipb-other-buffer-face ((,class :foreground ,fg-alt)))
+;;;;; imenu-list
+ `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
+ `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
+ `(imenu-list-entry-face-2 ((,class :foreground ,cyan-alt-other)))
+ `(imenu-list-entry-face-3 ((,class :foreground ,blue-alt)))
+ `(imenu-list-entry-subalist-face-0 ((,class :inherit bold :foreground ,magenta-alt-other :underline t)))
+ `(imenu-list-entry-subalist-face-1 ((,class :inherit bold :foreground ,magenta :underline t)))
+ `(imenu-list-entry-subalist-face-2 ((,class :inherit bold :foreground ,green-alt-other :underline t)))
+ `(imenu-list-entry-subalist-face-3 ((,class :inherit bold :foreground ,red-alt-other :underline t)))
+;;;;; indium
+ `(indium-breakpoint-face ((,class :foreground ,red-active)))
+ `(indium-frame-url-face ((,class :foreground ,fg-alt :underline t)))
+ `(indium-keyword-face ((,class :foreground ,magenta-alt-other)))
+ `(indium-litable-face ((,class :foreground ,fg-special-warm :slant ,modus-theme-slant)))
+ `(indium-repl-error-face ((,class :inherit bold :foreground ,red)))
+ `(indium-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+ `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
+;;;;; info
+ `(Info-quoted ((,class :foreground ,magenta))) ; the capitalisation is canonical
+ `(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
+ `(info-header-xref ((,class :foreground ,blue-active)))
+ `(info-index-match ((,class :inherit match)))
+ `(info-menu-header ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-2))))
+ `(info-menu-star ((,class :foreground ,fg-main)))
+ `(info-node ((,class :inherit bold)))
+ `(info-title-1 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(info-title-2 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-warm
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3))))
+ `(info-title-3 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-cold
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-2))))
+ `(info-title-4 ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-mild
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-1))))
+;;;;; info-colors
+ `(info-colors-lisp-code-block ((,class :inherit fixed-pitch)))
+ `(info-colors-ref-item-command ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-constant ((,class :foreground ,blue-alt-other)))
+ `(info-colors-ref-item-function ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-macro ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(info-colors-ref-item-other ((,class :foreground ,cyan)))
+ `(info-colors-ref-item-special-form ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt-other)))
+ `(info-colors-ref-item-syntax-class ((,class :foreground ,magenta)))
+ `(info-colors-ref-item-type ((,class :foreground ,magenta-alt)))
+ `(info-colors-ref-item-user-option ((,class :foreground ,cyan)))
+ `(info-colors-ref-item-variable ((,class :foreground ,cyan)))
+;;;;; interaction-log
+ `(ilog-buffer-face ((,class :foreground ,magenta-alt-other)))
+ `(ilog-change-face ((,class :foreground ,magenta-alt)))
+ `(ilog-echo-face ((,class :foreground ,yellow-alt-other)))
+ `(ilog-load-face ((,class :foreground ,green)))
+ `(ilog-message-face ((,class :foreground ,fg-alt)))
+ `(ilog-non-change-face ((,class :foreground ,blue)))
+;;;;; ioccur
+ `(ioccur-cursor ((,class :foreground ,fg-main)))
+ `(ioccur-invalid-regexp ((,class :foreground ,red)))
+ `(ioccur-match-face ((,class :inherit modus-theme-special-calm)))
+ `(ioccur-match-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-special-cold)))
+ `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
+ `(ioccur-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-refine-blue)))
+ `(ioccur-regexp-face ((,class :inherit (modus-theme-intense-magenta bold))))
+ `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+;;;;; isearch, occur, and the like
+ `(isearch ((,class :inherit (modus-theme-intense-green bold))))
+ `(isearch-fail ((,class :inherit modus-theme-refine-red)))
+ `(lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+ `(match ((,class :inherit modus-theme-special-calm)))
+ `(query-replace ((,class :inherit (modus-theme-intense-yellow bold))))
+;;;;; ivy
+ `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
+ `(ivy-completions-annotations ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(ivy-confirm-face ((,class :foreground ,cyan)))
+ `(ivy-current-match ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-cyan
+ 'modus-theme-intense-cyan
+ 'modus-theme-special-warm
+ nil
+ 'bold))))
+ `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+ `(ivy-grep-info ((,class :foreground ,cyan-alt)))
+ `(ivy-grep-line-number ((,class :foreground ,fg-special-warm)))
+ `(ivy-highlight-face ((,class :foreground ,magenta)))
+ `(ivy-match-required-face ((,class :inherit error)))
+ `(ivy-minibuffer-match-face-1 ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-neutral
+ 'modus-theme-intense-neutral
+ 'modus-theme-subtle-neutral
+ fg-alt))))
+ `(ivy-minibuffer-match-face-2 ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-green
+ 'modus-theme-refine-green
+ 'modus-theme-nuanced-green
+ green-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-face-3 ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-face-4 ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other
+ 'bold))))
+ `(ivy-minibuffer-match-highlight ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-intense-blue
+ 'modus-theme-nuanced-blue
+ blue-alt-other
+ 'bold))))
+ `(ivy-modified-buffer ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(ivy-modified-outside-buffer ((,class :foreground ,yellow-alt :slant ,modus-theme-slant)))
+ `(ivy-org ((,class :foreground ,cyan-alt-other)))
+ `(ivy-prompt-match ((,class :inherit ivy-current-match)))
+ `(ivy-remote ((,class :foreground ,magenta)))
+ `(ivy-separator ((,class :foreground ,fg-alt)))
+ `(ivy-subdir ((,class :foreground ,blue-alt-other)))
+ `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
+ `(ivy-yanked-word ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-nuanced-blue
+ blue-alt))))
+;;;;; ivy-posframe
+ `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(ivy-posframe-border ((,class :background ,bg-active)))
+ `(ivy-posframe-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+;;;;; jira (org-jira)
+ `(jiralib-comment-face ((,class :background ,bg-alt)))
+ `(jiralib-comment-header-face ((,class :inherit bold)))
+ `(jiralib-issue-info-face ((,class :inherit modus-theme-special-warm)))
+ `(jiralib-issue-info-header-face ((,class :inherit (modus-theme-special-warm bold))))
+ `(jiralib-issue-summary-face ((,class :inherit bold)))
+ `(jiralib-link-filter-face ((,class :underline t)))
+ `(jiralib-link-issue-face ((,class :underline t)))
+ `(jiralib-link-project-face ((,class :underline t)))
+;;;;; journalctl-mode
+ `(journalctl-error-face ((,class :inherit bold :foreground ,red)))
+ `(journalctl-finished-face ((,class :inherit bold :foreground ,green)))
+ `(journalctl-host-face ((,class :foreground ,blue)))
+ `(journalctl-process-face ((,class :foreground ,cyan-alt-other)))
+ `(journalctl-starting-face ((,class :foreground ,green)))
+ `(journalctl-timestamp-face ((,class :foreground ,fg-special-cold)))
+ `(journalctl-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; js2-mode
+ `(js2-error ((,class :foreground ,red)))
+ `(js2-external-variable ((,class :foreground ,cyan-alt-other)))
+ `(js2-function-call ((,class :foreground ,magenta)))
+ `(js2-function-param ((,class :foreground ,blue)))
+ `(js2-instance-member ((,class :foreground ,magenta-alt-other)))
+ `(js2-jsdoc-html-tag-delimiter ((,class :foreground ,fg-main)))
+ `(js2-jsdoc-html-tag-name ((,class :foreground ,cyan)))
+ `(js2-jsdoc-tag ((,class :foreground ,fg-special-calm)))
+ `(js2-jsdoc-type ((,class :foreground ,fg-special-cold)))
+ `(js2-jsdoc-value ((,class :foreground ,fg-special-warm)))
+ `(js2-object-property ((,class :foreground ,fg-main)))
+ `(js2-object-property-access ((,class :foreground ,fg-main)))
+ `(js2-private-function-call ((,class :foreground ,green-alt-other)))
+ `(js2-private-member ((,class :foreground ,fg-special-mild)))
+ `(js2-warning ((,class :foreground ,yellow-alt :underline t)))
+;;;;; julia
+ `(julia-macro-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta)))
+ `(julia-quoted-symbol-face ((,class :foreground ,blue-alt-other)))
+;;;;; jupyter
+ `(jupyter-eval-overlay ((,class :inherit bold :foreground ,blue)))
+ `(jupyter-repl-input-prompt ((,class :foreground ,cyan-alt-other)))
+ `(jupyter-repl-output-prompt ((,class :foreground ,magenta-alt-other)))
+ `(jupyter-repl-traceback ((,class :inherit modus-theme-intense-red)))
+;;;;; kaocha-runner
+ `(kaocha-runner-error-face ((,class :foreground ,red)))
+ `(kaocha-runner-success-face ((,class :foreground ,green)))
+ `(kaocha-runner-warning-face ((,class :foreground ,yellow)))
+;;;;; keycast
+ `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
+ `(keycast-key ((,class :box ,(modus-vivendi-theme-modeline-box blue-alt blue-active t -3)
+ ,@(modus-vivendi-theme-modeline-props
+ blue-active bg-main
+ blue-active bg-active))))
+;;;;; line numbers (display-line-numbers-mode and global variant)
+ `(line-number ((,class :background ,bg-dim :foreground ,fg-alt)))
+ `(line-number-current-line ((,class :inherit bold :background ,bg-active :foreground ,fg-active)))
+;;;;; lsp-mode
+ `(lsp-face-highlight-read ((,class :inherit modus-theme-subtle-blue :underline t)))
+ `(lsp-face-highlight-textual ((,class :inherit modus-theme-subtle-blue)))
+ `(lsp-face-highlight-write ((,class :inherit (modus-theme-refine-blue bold))))
+ `(lsp-face-semhl-constant ((,class :foreground ,blue-alt-other)))
+ `(lsp-face-semhl-deprecated
+ ((,(append '((supports :underline (:style wave))) class)
+ :foreground ,yellow :underline (:style wave))
+ (,class :foreground ,yellow :underline t)))
+ `(lsp-face-semhl-enummember ((,class :foreground ,blue-alt-other)))
+ `(lsp-face-semhl-field ((,class :foreground ,cyan-alt)))
+ `(lsp-face-semhl-field-static ((,class :foreground ,cyan-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-function ((,class :foreground ,magenta)))
+ `(lsp-face-semhl-method ((,class :foreground ,magenta)))
+ `(lsp-face-semhl-namespace ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt)))
+ `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
+ `(lsp-face-semhl-static-method ((,class :foreground ,magenta :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-class ((,class :foreground ,magenta-alt)))
+ `(lsp-face-semhl-type-enum ((,class :foreground ,magenta-alt)))
+ `(lsp-face-semhl-type-primitive ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-template ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-type-typedef ((,class :foreground ,magenta-alt :slant ,modus-theme-slant)))
+ `(lsp-face-semhl-variable ((,class :foreground ,cyan)))
+ `(lsp-face-semhl-variable-local ((,class :foreground ,cyan)))
+ `(lsp-face-semhl-variable-parameter ((,class :foreground ,cyan-alt-other)))
+ `(lsp-lens-face ((,class :height 0.8 :foreground ,fg-alt)))
+ `(lsp-lens-mouse-face ((,class :height 0.8 :foreground ,blue-alt-other :underline t)))
+ `(lsp-ui-doc-background ((,class :background ,bg-alt)))
+ `(lsp-ui-doc-header ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-doc-url ((,class :foreground ,blue-alt-other :underline t)))
+ `(lsp-ui-peek-filename ((,class :foreground ,fg-special-warm)))
+ `(lsp-ui-peek-footer ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-peek-header ((,class :background ,bg-header :foreground ,fg-header)))
+ `(lsp-ui-peek-highlight ((,class :inherit modus-theme-subtle-blue)))
+ `(lsp-ui-peek-line-number ((,class :foreground ,fg-alt)))
+ `(lsp-ui-peek-list ((,class :background ,bg-dim)))
+ `(lsp-ui-peek-peek ((,class :background ,bg-alt)))
+ `(lsp-ui-peek-selection ((,class :inherit modus-theme-subtle-cyan)))
+ `(lsp-ui-sideline-code-action ((,class :foreground ,yellow)))
+ `(lsp-ui-sideline-current-symbol ((,class :inherit bold :height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-main)))
+ `(lsp-ui-sideline-symbol ((,class :inherit bold :height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-alt)))
+ `(lsp-ui-sideline-symbol-info ((,class :height 0.99 :slant italic)))
+;;;;; magit
+ `(magit-bisect-bad ((,class :foreground ,red-alt-other)))
+ `(magit-bisect-good ((,class :foreground ,green-alt-other)))
+ `(magit-bisect-skip ((,class :foreground ,yellow-alt-other)))
+ `(magit-blame-date ((,class :foreground ,blue)))
+ `(magit-blame-dimmed ((,class :foreground ,fg-alt)))
+ `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
+ `(magit-blame-heading ((,class :background ,bg-alt)))
+ `(magit-blame-highlight ((,class :inherit modus-theme-nuanced-cyan)))
+ `(magit-blame-margin ((,class :inherit magit-blame-highlight)))
+ `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
+ `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
+ `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
+ `(magit-branch-local ((,class :foreground ,blue-alt)))
+ `(magit-branch-remote ((,class :foreground ,magenta-alt)))
+ `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box t)))
+ `(magit-branch-upstream ((,class :slant italic)))
+ `(magit-cherry-equivalent ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-cherry-unmatched ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-diff-added ((,class ,@(modus-vivendi-theme-diffs
+ bg-main green
+ bg-diff-added fg-diff-added))))
+ `(magit-diff-added-highlight ((,class ,@(modus-vivendi-theme-diffs
+ bg-dim green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(magit-diff-base ((,class ,@(modus-vivendi-theme-diffs
+ bg-main yellow
+ bg-diff-changed fg-diff-changed))))
+ `(magit-diff-base-highlight ((,class ,@(modus-vivendi-theme-diffs
+ bg-dim yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(magit-diff-context ((,class :foreground ,fg-unfocused)))
+ `(magit-diff-context-highlight ((,class ,@(modus-vivendi-theme-diffs
+ bg-dim fg-dim
+ bg-inactive fg-inactive))))
+ `(magit-diff-file-heading ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(magit-diff-file-heading-highlight ((,class :inherit (modus-theme-special-cold bold))))
+ `(magit-diff-file-heading-selection ((,class :background ,bg-alt :foreground ,cyan)))
+ `(magit-diff-hunk-heading ((,class :inherit bold :background ,bg-active :foreground ,fg-inactive)))
+ `(magit-diff-hunk-heading-highlight ((,class :inherit (modus-theme-diff-heading bold))))
+ `(magit-diff-hunk-heading-selection ((,class :inherit modus-theme-intense-cyan)))
+ `(magit-diff-hunk-region ((,class :inherit bold)))
+ `(magit-diff-lines-boundary ((,class :background ,fg-main)))
+ `(magit-diff-lines-heading ((,class :inherit modus-theme-refine-magenta)))
+ `(magit-diff-removed ((,class ,@(modus-vivendi-theme-diffs
+ bg-main red
+ bg-diff-removed fg-diff-removed))))
+ `(magit-diff-removed-highlight ((,class ,@(modus-vivendi-theme-diffs
+ bg-dim red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+ `(magit-diffstat-added ((,class :foreground ,green)))
+ `(magit-diffstat-removed ((,class :foreground ,red)))
+ `(magit-dimmed ((,class :foreground ,fg-unfocused)))
+ `(magit-filename ((,class :foreground ,fg-special-cold)))
+ `(magit-hash ((,class :foreground ,fg-alt)))
+ `(magit-head ((,class :inherit magit-branch-local)))
+ `(magit-header-line ((,class :inherit bold :foreground ,magenta-active)))
+ `(magit-header-line-key ((,class :inherit bold :foreground ,red-active)))
+ `(magit-header-line-log-select ((,class :inherit bold :foreground ,fg-main)))
+ `(magit-keyword ((,class :foreground ,magenta)))
+ `(magit-keyword-squash ((,class :inherit bold :foreground ,yellow-alt-other)))
+ `(magit-log-author ((,class :foreground ,cyan)))
+ `(magit-log-date ((,class :foreground ,fg-alt)))
+ `(magit-log-graph ((,class :foreground ,fg-dim)))
+ `(magit-mode-line-process ((,class :inherit bold :foreground ,blue-active)))
+ `(magit-mode-line-process-error ((,class :inherit bold :foreground ,red-active)))
+ `(magit-process-ng ((,class :inherit error)))
+ `(magit-process-ok ((,class :inherit success)))
+ `(magit-reflog-amend ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-reflog-checkout ((,class :background ,bg-main :foreground ,blue-intense)))
+ `(magit-reflog-cherry-pick ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-commit ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-merge ((,class :background ,bg-main :foreground ,green-intense)))
+ `(magit-reflog-other ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-reflog-rebase ((,class :background ,bg-main :foreground ,magenta-intense)))
+ `(magit-reflog-remote ((,class :background ,bg-main :foreground ,cyan-intense)))
+ `(magit-reflog-reset ((,class :background ,bg-main :foreground ,red-intense)))
+ `(magit-refname ((,class :foreground ,fg-alt)))
+ `(magit-refname-pullreq ((,class :foreground ,fg-alt)))
+ `(magit-refname-stash ((,class :foreground ,fg-alt)))
+ `(magit-refname-wip ((,class :foreground ,fg-alt)))
+ `(magit-section ((,class :background ,bg-dim :foreground ,fg-main)))
+ `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
+ `(magit-section-heading-selection ((,class :inherit (modus-theme-refine-cyan bold))))
+ `(magit-section-highlight ((,class :background ,bg-alt)))
+ `(magit-sequence-done ((,class :foreground ,green-alt)))
+ `(magit-sequence-drop ((,class :foreground ,red-alt)))
+ `(magit-sequence-exec ((,class :foreground ,magenta-alt)))
+ `(magit-sequence-head ((,class :foreground ,cyan-alt)))
+ `(magit-sequence-onto ((,class :foreground ,fg-alt)))
+ `(magit-sequence-part ((,class :foreground ,yellow-alt)))
+ `(magit-sequence-pick ((,class :foreground ,blue-alt)))
+ `(magit-sequence-stop ((,class :foreground ,red)))
+ `(magit-signature-bad ((,class :inherit bold :foreground ,red)))
+ `(magit-signature-error ((,class :foreground ,red-alt)))
+ `(magit-signature-expired ((,class :foreground ,yellow)))
+ `(magit-signature-expired-key ((,class :foreground ,yellow)))
+ `(magit-signature-good ((,class :foreground ,green)))
+ `(magit-signature-revoked ((,class :foreground ,magenta)))
+ `(magit-signature-untrusted ((,class :foreground ,cyan)))
+ `(magit-tag ((,class :foreground ,yellow-alt-other)))
+;;;;; magit-imerge
+ `(magit-imerge-overriding-value ((,class :inherit bold :foreground ,red-alt)))
+;;;;; man
+ `(Man-overstrike ((,class :inherit bold :foreground ,magenta)))
+ `(Man-reverse ((,class :inherit modus-theme-subtle-magenta)))
+ `(Man-underline ((,class :foreground ,cyan :underline t)))
+;;;;; markdown-mode
+ `(markdown-blockquote-face ((,class :foreground ,fg-special-warm :slant ,modus-theme-slant)))
+ `(markdown-bold-face ((,class :inherit bold)))
+ `(markdown-code-face ((,class :inherit fixed-pitch)))
+ `(markdown-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(markdown-footnote-marker-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(markdown-footnote-text-face ((,class :foreground ,fg-main :slant ,modus-theme-slant)))
+ `(markdown-gfm-checkbox-face ((,class :foreground ,cyan-alt-other)))
+ `(markdown-header-delimiter-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,fg-dim)))
+ `(markdown-header-face ((,class :inherit bold)))
+ `(markdown-header-rule-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(markdown-html-attr-name-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markdown-html-attr-value-face ((,class :inherit fixed-pitch :foreground ,blue)))
+ `(markdown-html-entity-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markdown-html-tag-delimiter-face ((,class :inherit fixed-pitch :foreground ,fg-special-mild)))
+ `(markdown-html-tag-name-face ((,class :inherit fixed-pitch :foreground ,magenta-alt)))
+ `(markdown-inline-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(markdown-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markdown-language-info-face ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(markdown-language-keyword-face ((,class :inherit fixed-pitch :foreground ,green-alt-other)))
+ `(markdown-line-break-face ((,class :inherit modus-theme-refine-cyan :underline t)))
+ `(markdown-link-face ((,class :inherit link)))
+ `(markdown-link-title-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(markdown-list-face ((,class :foreground ,fg-dim)))
+ `(markdown-markup-face ((,class :foreground ,fg-alt)))
+ `(markdown-math-face ((,class :foreground ,magenta-alt-other)))
+ `(markdown-metadata-key-face ((,class :foreground ,cyan-alt-other)))
+ `(markdown-metadata-value-face ((,class :foreground ,blue-alt)))
+ `(markdown-missing-link-face ((,class :inherit bold :foreground ,yellow)))
+ `(markdown-plain-url-face ((,class :inherit markdown-link-face)))
+ `(markdown-pre-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit fixed-pitch :background ,bg-dim
+ :foreground ,fg-special-mild)))
+ `(markdown-reference-face ((,class :inherit markdown-markup-face)))
+ `(markdown-strike-through-face ((,class :strike-through t)))
+ `(markdown-table-face ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(markdown-url-face ((,class :foreground ,blue)))
+;;;;; markup-faces (`adoc-mode')
+ `(markup-anchor-face ((,class :foreground ,fg-inactive)))
+ `(markup-attribute-face ((,class :foreground ,fg-inactive :slant italic)))
+ `(markup-big-face ((,class :height 1.3 :foreground ,blue-nuanced)))
+ `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced)))
+ `(markup-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(markup-command-face ((,class :foreground ,fg-inactive)))
+ `(markup-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil :style released-button)
+ :inherit modus-theme-refine-magenta)))
+ `(markup-emphasis-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markup-error-face ((,class :inherit bold :foreground ,red)))
+ `(markup-gen-face ((,class :foreground ,magenta-alt)))
+ `(markup-internal-reference-face ((,class :foreground ,fg-inactive :underline t)))
+ `(markup-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+ `(markup-list-face ((,class :inherit modus-theme-special-calm)))
+ `(markup-meta-face ((,class :foreground ,fg-inactive)))
+ `(markup-meta-hide-face ((,class :foreground ,fg-alt)))
+ `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+ `(markup-preprocessor-face ((,class :foreground ,red-alt-other)))
+ `(markup-replacement-face ((,class :foreground ,yellow-alt-other)))
+ `(markup-secondary-text-face ((,class :height 0.8 :foreground ,magenta-nuanced)))
+ `(markup-small-face ((,class :height 0.8 :foreground ,fg-main)))
+ `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced)))
+ `(markup-subscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+ `(markup-superscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+ `(markup-table-cell-face ((,class :inherit modus-theme-special-cold)))
+ `(markup-table-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(markup-table-row-face ((,class :inherit modus-theme-subtle-cyan)))
+ `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced)))
+ `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced)))
+ `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced)))
+ `(markup-title-3-face ((,class :height 1.4 :foreground ,blue-nuanced)))
+ `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced)))
+ `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced :underline t)))
+ `(markup-value-face ((,class :foreground ,fg-inactive)))
+ `(markup-verbatim-face ((,class :inherit modus-theme-special-mild)))
+;;;;; mentor
+ `(mentor-download-message ((,class :foreground ,fg-special-warm)))
+ `(mentor-download-name ((,class :foreground ,fg-special-cold)))
+ `(mentor-download-progress ((,class :foreground ,blue-alt-other)))
+ `(mentor-download-size ((,class :foreground ,magenta-alt-other)))
+ `(mentor-download-speed-down ((,class :foreground ,cyan-alt)))
+ `(mentor-download-speed-up ((,class :foreground ,red-alt)))
+ `(mentor-download-state ((,class :foreground ,yellow-alt)))
+ `(mentor-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+ `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
+;;;;; messages
+ `(message-cited-text-1 ((,class :foreground ,blue-alt)))
+ `(message-cited-text-2 ((,class :foreground ,red-alt)))
+ `(message-cited-text-3 ((,class :foreground ,green-alt)))
+ `(message-cited-text-4 ((,class :foreground ,magenta-alt)))
+ `(message-header-cc ((,class :foreground ,blue-alt)))
+ `(message-header-name ((,class :foreground ,green-alt-other)))
+ `(message-header-newsgroups ((,class :inherit bold :foreground ,blue)))
+ `(message-header-other ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(message-header-subject ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(message-header-to ((,class :inherit bold :foreground ,magenta-alt)))
+ `(message-header-xheader ((,class :foreground ,blue-alt-other)))
+ `(message-mml ((,class :foreground ,green-alt)))
+ `(message-separator ((,class :background ,bg-active :foreground ,fg-special-warm)))
+;;;;; minibuffer-line
+ `(minibuffer-line ((,class :foreground ,fg-main)))
+;;;;; minimap
+ `(minimap-active-region-background ((,class :background ,bg-active)))
+ `(minimap-current-line-face ((,class :background ,cyan-intense-bg :foreground ,fg-main)))
+;;;;; modeline
+ `(mode-line ((,class :box ,(modus-vivendi-theme-modeline-box bg-active fg-alt t)
+ ,@(modus-vivendi-theme-modeline-props
+ bg-active fg-dim
+ bg-active fg-active))))
+ `(mode-line-buffer-id ((,class :inherit bold)))
+ `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
+ `(mode-line-highlight ((,class :inherit modus-theme-active-blue :box (:line-width -1 :style pressed-button))))
+ `(mode-line-inactive ((,class :box ,(modus-vivendi-theme-modeline-box bg-active bg-region)
+ ,@(modus-vivendi-theme-modeline-props
+ bg-dim fg-inactive
+ bg-inactive fg-inactive))))
+;;;;; mood-line
+ `(mood-line-modified ((,class :foreground ,magenta-active)))
+ `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
+ `(mood-line-status-info ((,class :foreground ,cyan-active)))
+ `(mood-line-status-neutral ((,class :foreground ,blue-active)))
+ `(mood-line-status-success ((,class :foreground ,green-active)))
+ `(mood-line-status-warning ((,class :inherit bold :foreground ,yellow-active)))
+ `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
+;;;;; mu4e
+ `(mu4e-attach-number-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(mu4e-cited-1-face ((,class :foreground ,blue-alt)))
+ `(mu4e-cited-2-face ((,class :foreground ,red-alt)))
+ `(mu4e-cited-3-face ((,class :foreground ,green-alt)))
+ `(mu4e-cited-4-face ((,class :foreground ,magenta-alt)))
+ `(mu4e-cited-5-face ((,class :foreground ,yellow-alt)))
+ `(mu4e-cited-6-face ((,class :foreground ,cyan-alt)))
+ `(mu4e-cited-7-face ((,class :foreground ,magenta)))
+ `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
+ `(mu4e-compose-separator-face ((,class :background ,bg-active :foreground ,fg-special-warm)))
+ `(mu4e-contact-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(mu4e-context-face ((,class :foreground ,blue-active)))
+ `(mu4e-draft-face ((,class :foreground ,magenta-alt)))
+ `(mu4e-flagged-face ((,class :foreground ,red-alt)))
+ `(mu4e-footer-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(mu4e-forwarded-face ((,class :foreground ,magenta-alt-other)))
+ `(mu4e-header-face ((,class :foreground ,fg-alt)))
+ `(mu4e-header-highlight-face ((,class :inherit modus-theme-hl-line)))
+ `(mu4e-header-key-face ((,class :foreground ,cyan)))
+ `(mu4e-header-marks-face ((,class :inherit bold :foreground ,magenta-alt)))
+ `(mu4e-header-title-face ((,class :foreground ,fg-special-mild)))
+ `(mu4e-header-value-face ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(mu4e-highlight-face ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(mu4e-link-face ((,class :inherit link)))
+ `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
+ `(mu4e-moved-face ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+ `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
+ `(mu4e-region-code ((,class :inherit modus-theme-special-calm)))
+ `(mu4e-replied-face ((,class :foreground ,cyan-active)))
+ `(mu4e-special-header-value-face ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(mu4e-system-face ((,class :foreground ,fg-mark-del :slant ,modus-theme-slant)))
+ `(mu4e-title-face ((,class :foreground ,fg-main)))
+ `(mu4e-trashed-face ((,class :foreground ,red)))
+ `(mu4e-unread-face ((,class :inherit bold :foreground ,fg-main)))
+ `(mu4e-url-number-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(mu4e-view-body-face ((,class :foreground ,fg-main)))
+ `(mu4e-warning-face ((,class :inherit warning)))
+;;;;; mu4e-conversation
+ `(mu4e-conversation-header ((,class :inherit modus-theme-special-cold)))
+ `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
+ `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
+ `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
+ `(mu4e-conversation-sender-4 ((,class :foreground ,fg-alt)))
+ `(mu4e-conversation-sender-5 ((,class :foreground ,yellow-refine-fg)))
+ `(mu4e-conversation-sender-6 ((,class :foreground ,cyan-refine-fg)))
+ `(mu4e-conversation-sender-7 ((,class :foreground ,green-refine-fg)))
+ `(mu4e-conversation-sender-8 ((,class :foreground ,blue-refine-fg)))
+ `(mu4e-conversation-sender-me ((,class :foreground ,fg-main)))
+ `(mu4e-conversation-unread ((,class :inherit bold)))
+;;;;; multiple-cursors
+ `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
+ `(mc/cursor-face ((,class :inverse-video t)))
+ `(mc/region-face ((,class :inherit region)))
+;;;;; neotree
+ `(neo-banner-face ((,class :foreground ,magenta)))
+ `(neo-button-face ((,class :inherit button)))
+ `(neo-dir-link-face ((,class :inherit bold :foreground ,blue)))
+ `(neo-expand-btn-face ((,class :foreground ,cyan)))
+ `(neo-file-link-face ((,class :foreground ,fg-main)))
+ `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
+ `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
+ `(neo-vc-added-face ((,class :foreground ,green)))
+ `(neo-vc-conflict-face ((,class :inherit bold :foreground ,red)))
+ `(neo-vc-default-face ((,class :foreground ,fg-main)))
+ `(neo-vc-edited-face ((,class :foreground ,yellow)))
+ `(neo-vc-ignored-face ((,class :foreground ,fg-inactive)))
+ `(neo-vc-missing-face ((,class :foreground ,red-alt)))
+ `(neo-vc-needs-merge-face ((,class :foreground ,magenta-alt)))
+ `(neo-vc-needs-update-face ((,class :underline t)))
+ `(neo-vc-removed-face ((,class :strike-through t)))
+ `(neo-vc-unlocked-changes-face ((,class :inherit modus-theme-refine-blue)))
+ `(neo-vc-up-to-date-face ((,class :foreground ,fg-alt)))
+ `(neo-vc-user-face ((,class :foreground ,magenta)))
+;;;;; no-emoji
+ `(no-emoji ((,class :foreground ,cyan)))
+;;;;; notmuch
+ `(notmuch-crypto-decryption ((,class :inherit modus-theme-refine-magenta)))
+ `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
+ `(notmuch-crypto-signature-bad ((,class :inherit modus-theme-intense-red)))
+ `(notmuch-crypto-signature-good ((,class :inherit modus-theme-refine-green)))
+ `(notmuch-crypto-signature-good-key ((,class :inherit modus-theme-refine-yellow)))
+ `(notmuch-crypto-signature-unknown ((,class :inherit modus-theme-refine-red)))
+ `(notmuch-hello-logo-background ((,class :background ,bg-main)))
+ `(notmuch-message-summary-face ((,class :inherit modus-theme-nuanced-cyan)))
+ `(notmuch-search-flagged-face ((,class :foreground ,red-alt)))
+ `(notmuch-search-matching-authors ((,class :foreground ,fg-main)))
+ `(notmuch-search-non-matching-authors ((,class :foreground ,fg-alt)))
+ `(notmuch-search-unread-face ((,class :inherit bold)))
+ `(notmuch-tag-added
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,green :style wave))
+ (,class :foreground ,green :underline t)))
+ `(notmuch-tag-deleted
+ ((,(append '((supports :underline (:style wave))) class)
+ :underline (:color ,red :style wave))
+ (,class :foreground ,red :underline t)))
+ `(notmuch-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+ `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
+ `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
+ `(notmuch-tree-match-author-face ((,class :foreground ,fg-special-cold)))
+ `(notmuch-tree-match-face ((,class :foreground ,fg-main)))
+ `(notmuch-tree-match-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+ `(notmuch-tree-no-match-face ((,class :foreground ,fg-alt)))
+ `(notmuch-wash-cited-text ((,class :foreground ,cyan)))
+ `(notmuch-wash-toggle-button ((,class :background ,bg-alt :foreground ,fg-alt)))
+;;;;; num3-mode
+ `(num3-face-even ((,class :inherit bold :background ,bg-alt)))
+;;;;; nxml-mode
+ `(nxml-attribute-colon ((,class :foreground ,fg-main)))
+ `(nxml-attribute-local-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt cyan-alt-faint))))
+ `(nxml-attribute-prefix ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-attribute-value ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue blue-faint))))
+ `(nxml-cdata-section-CDATA ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-cdata-section-delimiter ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(nxml-char-ref-delimiter ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint))))
+ `(nxml-char-ref-number ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-delimited-data ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(nxml-delimiter ((,class :foreground ,fg-dim)))
+ `(nxml-element-colon ((,class :foreground ,fg-main)))
+ `(nxml-element-local-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(nxml-element-prefix ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-entity-ref-delimiter ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint))))
+ `(nxml-entity-ref-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-glyph ((,class :inherit modus-theme-intense-neutral)))
+ `(nxml-hash ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt blue-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-heading ((,class :inherit bold)))
+ `(nxml-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-namespace-attribute-colon ((,class :foreground ,fg-main)))
+ `(nxml-namespace-attribute-prefix ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(nxml-processing-instruction-target ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-prolog-keyword ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(nxml-ref ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green-alt-other green-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+;;;;; orderless
+ `(orderless-match-face-0 ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ blue-alt blue-nuanced-bg
+ blue-refine-bg blue-refine-fg))))
+ `(orderless-match-face-1 ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ magenta-alt magenta-nuanced-bg
+ magenta-refine-bg magenta-refine-fg))))
+ `(orderless-match-face-2 ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ green-alt-other green-nuanced-bg
+ green-refine-bg green-refine-fg))))
+ `(orderless-match-face-3 ((,class :inherit bold
+ ,@(modus-vivendi-theme-standard-completions
+ yellow-alt-other yellow-nuanced-bg
+ yellow-refine-bg yellow-refine-fg))))
+;;;;; org
+ `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
+ `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
+ `(org-agenda-clocking ((,class :inherit modus-theme-special-cold)))
+ `(org-agenda-column-dateline ((,class :background ,bg-alt)))
+ `(org-agenda-current-time ((,class :inherit modus-theme-subtle-cyan)))
+ `(org-agenda-date ((,class :inherit ,modus-theme-variable-pitch :foreground ,cyan-alt-other
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4)
+ ,@(modus-vivendi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(org-agenda-date-today ((,class :inherit (bold ,modus-theme-variable-pitch)
+ :background ,cyan-intense-bg :foreground ,fg-main
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(org-agenda-date-weekend ((,class :inherit ,modus-theme-variable-pitch :foreground ,cyan
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4)
+ ,@(modus-vivendi-theme-heading-block blue-nuanced-bg cyan-nuanced))))
+ `(org-agenda-diary ((,class :foreground ,fg-main)))
+ `(org-agenda-dimmed-todo-face ((,class :inherit modus-theme-subtle-neutral)))
+ `(org-agenda-done ((,class ,@(modus-vivendi-theme-org-todo-block green-nuanced-bg green-nuanced green))))
+ `(org-agenda-filter-category ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-effort ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-regexp ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-filter-tags ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground ,fg-dim)))
+ `(org-agenda-structure ((,class :inherit ,modus-theme-variable-pitch
+ :foreground ,fg-special-mild
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3))))
+ `(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(org-block ((,class ,@(modus-vivendi-theme-org-block bg-dim)
+ :inherit fixed-pitch :foreground ,fg-main)))
+ `(org-block-begin-line ((,class ,@(modus-vivendi-theme-org-block-delim
+ bg-dim fg-special-cold
+ bg-alt fg-special-mild)
+ :inherit fixed-pitch)))
+ `(org-block-end-line ((,class :inherit org-block-begin-line)))
+ `(org-checkbox ((,class :box (:line-width 1 :color ,bg-active)
+ :background ,bg-inactive :foreground ,fg-active)))
+ `(org-checkbox-statistics-done ((,class :foreground ,green
+ ,@(modus-vivendi-theme-heading-block
+ green-nuanced-bg green-nuanced))))
+ `(org-checkbox-statistics-todo ((,class ,@(modus-vivendi-theme-heading-foreground red-alt red)
+ ,@(modus-vivendi-theme-heading-block
+ red-nuanced-bg red-nuanced))))
+ `(org-clock-overlay ((,class :inherit modus-theme-special-cold)))
+ `(org-code ((,class :inherit fixed-pitch :foreground ,magenta)))
+ `(org-column ((,class :background ,bg-alt)))
+ `(org-column-title ((,class :inherit bold :underline t :background ,bg-alt)))
+ `(org-date ((,class :inherit fixed-pitch :foreground ,cyan-alt-other :underline t)))
+ `(org-date-selected ((,class :inherit bold :foreground ,blue-alt :inverse-video t)))
+ `(org-default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(org-document-info ((,class :foreground ,fg-special-cold)))
+ `(org-document-info-keyword ((,class :inherit fixed-pitch :foreground ,fg-alt)))
+ `(org-document-title ((,class :inherit (bold ,modus-theme-variable-pitch) :foreground ,fg-special-cold
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-5))))
+ `(org-done ((,class ,@(modus-vivendi-theme-org-todo-block green-nuanced-bg green-nuanced green))))
+ `(org-drawer ((,class :foreground ,cyan-alt)))
+ `(org-ellipsis ((,class :foreground nil))) ; inherits from the heading's colour
+ `(org-footnote ((,class :foreground ,blue-alt :underline t)))
+ `(org-formula ((,class :inherit fixed-pitch :foreground ,red-alt)))
+ `(org-habit-alert-face ((,class :inherit modus-theme-intense-yellow)))
+ `(org-habit-alert-future-face ((,class :inherit modus-theme-refine-yellow)))
+ `(org-habit-clear-face ((,class :inherit modus-theme-intense-magenta)))
+ `(org-habit-clear-future-face ((,class :inherit modus-theme-refine-magenta)))
+ `(org-habit-overdue-face ((,class :inherit modus-theme-intense-red)))
+ `(org-habit-overdue-future-face ((,class :inherit modus-theme-refine-red)))
+ `(org-habit-ready-face ((,class :inherit modus-theme-intense-blue)))
+ `(org-habit-ready-future-face ((,class :inherit modus-theme-refine-blue)))
+ `(org-headline-done ((,class :foreground ,green-nuanced
+ ,@(modus-vivendi-theme-heading-block
+ green-nuanced-bg green-nuanced))))
+ `(org-hide ((,class :foreground ,bg-main)))
+ `(org-indent ((,class :inherit (fixed-pitch org-hide))))
+ `(org-latex-and-related ((,class :foreground ,magenta-refine-fg)))
+ `(org-level-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-main magenta-alt-other)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4)
+ ,@(modus-vivendi-theme-heading-block magenta-nuanced-bg magenta-nuanced))))
+ `(org-level-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-warm magenta-alt)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3)
+ ,@(modus-vivendi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(org-level-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-cold blue)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-2)
+ ,@(modus-vivendi-theme-heading-block blue-nuanced-bg blue-nuanced))))
+ `(org-level-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-mild cyan)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-1)
+ ,@(modus-vivendi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(org-level-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-calm green-alt-other)
+ ,@(modus-vivendi-theme-heading-block green-nuanced-bg green-nuanced))))
+ `(org-level-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground yellow-nuanced yellow-alt-other)
+ ,@(modus-vivendi-theme-heading-block yellow-nuanced-bg yellow-nuanced))))
+ `(org-level-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground red-nuanced red-alt)
+ ,@(modus-vivendi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(org-level-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-dim magenta)
+ ,@(modus-vivendi-theme-heading-block bg-alt fg-alt))))
+ `(org-link ((,class :inherit link)))
+ `(org-list-dt ((,class :inherit bold)))
+ `(org-macro ((,class :inherit org-latex-and-related)))
+ `(org-meta-line ((,class :inherit fixed-pitch :background ,cyan-nuanced-bg :foreground ,cyan-nuanced)))
+ `(org-mode-line-clock ((,class :foreground ,fg-main)))
+ `(org-mode-line-clock-overrun ((,class :inherit modus-theme-active-red)))
+ `(org-priority ((,class ,@(modus-vivendi-theme-org-todo-block magenta-nuanced-bg magenta-nuanced magenta)
+ ,@(modus-vivendi-theme-heading-foreground magenta magenta-alt-other))))
+ `(org-quote ((,class ,@(if modus-vivendi-theme-org-blocks
+ (append
+ (and (>= emacs-major-version 27) '(:extend t))
+ (list :background bg-dim))
+ (list :background nil))
+ :foreground ,fg-special-calm :slant ,modus-theme-slant)))
+ `(org-scheduled ((,class :foreground ,fg-special-warm)))
+ `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
+ `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
+ `(org-sexp-date ((,class :inherit org-date)))
+ `(org-special-keyword ((,class ,@(modus-vivendi-theme-org-todo-block cyan-nuanced-bg cyan-nuanced cyan-alt))))
+ `(org-table ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+ `(org-tag ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-nuanced)))
+ `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced)))
+ `(org-target ((,class :underline t)))
+ `(org-time-grid ((,class :foreground ,fg-unfocused)))
+ `(org-todo ((,class ,@(modus-vivendi-theme-org-todo-block red-nuanced-bg red-nuanced red-alt)
+ ,@(modus-vivendi-theme-heading-foreground red-alt red))))
+ `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
+ `(org-upcoming-distant-deadline ((,class :foreground ,red-nuanced)))
+ `(org-verbatim ((,class :inherit fixed-pitch :background ,bg-alt :foreground ,fg-special-calm)))
+ `(org-verse ((,class :inherit org-quote)))
+ `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
+;;;;; org-journal
+ `(org-journal-calendar-entry-face ((,class :foreground ,yellow-alt-other :slant ,modus-theme-slant)))
+ `(org-journal-calendar-scheduled-face ((,class :foreground ,red-alt-other :slant ,modus-theme-slant)))
+ `(org-journal-highlight ((,class :foreground ,magenta-alt)))
+;;;;; org-noter
+ `(org-noter-no-notes-exist-face ((,class :inherit bold :foreground ,red-active)))
+ `(org-noter-notes-exist-face ((,class :inherit bold :foreground ,green-active)))
+;;;;; org-pomodoro
+ `(org-pomodoro-mode-line ((,class :foreground ,red-active)))
+ `(org-pomodoro-mode-line-break ((,class :foreground ,cyan-active)))
+ `(org-pomodoro-mode-line-overtime ((,class :inherit bold :foreground ,red-active)))
+;;;;; org-recur
+ `(org-recur ((,class :foreground ,magenta-active)))
+;;;;; org-roam
+ `(org-roam-link ((,class :foreground ,blue-alt-other :underline t)))
+ `(org-roam-backlink ((,class :foreground ,green-alt-other :underline t)))
+;;;;; org-superstar
+ `(org-superstar-item ((,class :foreground ,fg-main)))
+ `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
+;;;;; org-table-sticky-header
+ `(org-table-sticky-header-face ((,class :inherit modus-theme-intense-neutral)))
+;;;;; org-treescope
+ `(org-treescope-faces--markerinternal-midday ((,class :inherit modus-theme-intense-blue)))
+ `(org-treescope-faces--markerinternal-range ((,class :inherit modus-theme-special-mild)))
+;;;;; origami
+ `(origami-fold-header-face ((,class :background ,bg-dim :foreground ,fg-dim :box t)))
+ `(origami-fold-replacement-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+;;;;; outline-mode
+ `(outline-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-main magenta-alt-other)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4)
+ ,@(modus-vivendi-theme-heading-block magenta-nuanced-bg magenta-nuanced))))
+ `(outline-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-warm magenta-alt)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3)
+ ,@(modus-vivendi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(outline-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-cold blue)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-2)
+ ,@(modus-vivendi-theme-heading-block blue-nuanced-bg blue-nuanced))))
+ `(outline-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-mild cyan)
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-1)
+ ,@(modus-vivendi-theme-heading-block cyan-nuanced-bg cyan-nuanced))))
+ `(outline-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-special-calm green-alt-other)
+ ,@(modus-vivendi-theme-heading-block green-nuanced-bg green-nuanced))))
+ `(outline-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground yellow-nuanced yellow-alt-other)
+ ,@(modus-vivendi-theme-heading-block yellow-nuanced-bg yellow-nuanced))))
+ `(outline-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground red-nuanced red-alt)
+ ,@(modus-vivendi-theme-heading-block red-nuanced-bg red-nuanced))))
+ `(outline-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+ ,@(modus-vivendi-theme-heading-foreground fg-dim magenta)
+ ,@(modus-vivendi-theme-heading-block bg-alt fg-alt))))
+;;;;; outline-minor-faces
+ `(outline-minor-0 ((,class ,@(unless modus-vivendi-theme-section-headings
+ (list :background cyan-nuanced-bg)))))
+;;;;; package (M-x list-packages)
+ `(package-description ((,class :foreground ,fg-special-cold)))
+ `(package-help-section-name ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(package-name ((,class :inherit link)))
+ `(package-status-avail-obso ((,class :inherit bold :foreground ,red)))
+ `(package-status-available ((,class :foreground ,fg-special-mild)))
+ `(package-status-built-in ((,class :foreground ,magenta)))
+ `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
+ `(package-status-disabled ((,class :inherit modus-theme-subtle-red)))
+ `(package-status-external ((,class :foreground ,cyan-alt-other)))
+ `(package-status-held ((,class :foreground ,yellow-alt)))
+ `(package-status-incompat ((,class :inherit bold :foreground ,yellow)))
+ `(package-status-installed ((,class :foreground ,fg-special-warm)))
+ `(package-status-new ((,class :inherit bold :foreground ,green)))
+ `(package-status-unsigned ((,class :inherit bold :foreground ,red-alt)))
+;;;;; page-break-lines
+ `(page-break-lines ((,class :inherit default :foreground ,fg-window-divider-outer)))
+;;;;; paradox
+ `(paradox-archive-face ((,class :foreground ,fg-special-mild)))
+ `(paradox-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(paradox-commit-tag-face ((,class :inherit modus-theme-refine-magenta :box t)))
+ `(paradox-description-face ((,class :foreground ,fg-special-cold)))
+ `(paradox-description-face-multiline ((,class :foreground ,fg-special-cold)))
+ `(paradox-download-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,blue-alt-other)))
+ `(paradox-highlight-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,cyan-alt-other)))
+ `(paradox-homepage-button-face ((,class :foreground ,magenta-alt-other :underline t)))
+ `(paradox-mode-line-face ((,class :inherit bold :foreground ,cyan-active)))
+ `(paradox-name-face ((,class :foreground ,blue :underline t)))
+ `(paradox-star-face ((,class :foreground ,magenta)))
+ `(paradox-starred-face ((,class :foreground ,magenta-alt)))
+;;;;; paren-face
+ `(parenthesis ((,class :foreground ,fg-unfocused)))
+;;;;; parrot
+ `(parrot-rotate-rotation-highlight-face ((,class :inherit modus-theme-refine-magenta)))
+;;;;; pass
+ `(pass-mode-directory-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(pass-mode-entry-face ((,class :background ,bg-main :foreground ,fg-main)))
+ `(pass-mode-header-face ((,class :foreground ,fg-special-warm)))
+;;;;; persp-mode
+ `(persp-face-lighter-buffer-not-in-persp ((,class :inherit modus-theme-intense-red)))
+ `(persp-face-lighter-default ((,class :inherit bold :foreground ,blue-active)))
+ `(persp-face-lighter-nil-persp ((,class :inherit bold :foreground ,fg-active)))
+;;;;; perspective
+ `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
+;;;;; phi-grep
+ `(phi-grep-heading-face ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(phi-grep-match-face ((,class :inherit modus-theme-special-calm)))
+ `(phi-grep-modified-face ((,class :inherit modus-theme-refine-yellow)))
+ `(phi-grep-overlay-face ((,class :inherit modus-theme-refine-blue)))
+;;;;; phi-search
+ `(phi-replace-preview-face ((,class :inherit modus-theme-intense-magenta)))
+ `(phi-search-failpart-face ((,class :inherit modus-theme-refine-red)))
+ `(phi-search-match-face ((,class :inherit modus-theme-refine-cyan)))
+ `(phi-search-selection-face ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; pkgbuild-mode
+ `(pkgbuild-error-face ((,class :underline ,fg-lang-error)))
+;;;;; pomidor
+ `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
+ `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
+ `(pomidor-skip-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(pomidor-work-face ((,class :foreground ,green-alt-other)))
+;;;;; powerline
+ `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint :inverse-video t)))
+ `(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground ,blue-nuanced)))
+ `(powerline-active2 ((,class :background ,bg-active :foreground ,fg-active)))
+ `(powerline-inactive0 ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(powerline-inactive1 ((,class :background ,bg-dim :foreground ,fg-inactive)))
+ `(powerline-inactive2 ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+;;;;; powerline-evil
+ `(powerline-evil-base-face ((,class :background ,fg-main :foreground ,bg-main)))
+ `(powerline-evil-emacs-face ((,class :inherit modus-theme-active-magenta)))
+ `(powerline-evil-insert-face ((,class :inherit modus-theme-active-green)))
+ `(powerline-evil-motion-face ((,class :inherit modus-theme-active-blue)))
+ `(powerline-evil-normal-face ((,class :background ,fg-alt :foreground ,bg-main)))
+ `(powerline-evil-operator-face ((,class :inherit modus-theme-active-yellow)))
+ `(powerline-evil-replace-face ((,class :inherit modus-theme-active-red)))
+ `(powerline-evil-visual-face ((,class :inherit modus-theme-active-cyan)))
+;;;;; proced
+ `(proced-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(proced-marked ((,class :inherit modus-theme-mark-alt)))
+ `(proced-sort-header ((,class :inherit bold :foreground ,fg-special-calm :underline t)))
+;;;;; prodigy
+ `(prodigy-green-face ((,class :foreground ,green)))
+ `(prodigy-red-face ((,class :foreground ,red)))
+ `(prodigy-yellow-face ((,class :foreground ,yellow)))
+;;;;; rainbow-blocks
+ `(rainbow-blocks-depth-1-face ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-blocks-depth-2-face ((,class :foreground ,blue)))
+ `(rainbow-blocks-depth-3-face ((,class :foreground ,magenta-alt)))
+ `(rainbow-blocks-depth-4-face ((,class :foreground ,green)))
+ `(rainbow-blocks-depth-5-face ((,class :foreground ,magenta)))
+ `(rainbow-blocks-depth-6-face ((,class :foreground ,cyan)))
+ `(rainbow-blocks-depth-7-face ((,class :foreground ,yellow)))
+ `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
+ `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
+ `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
+;;;;; rainbow-identifiers
+ `(rainbow-identifiers-identifier-1 ((,class :foreground ,green-alt-other)))
+ `(rainbow-identifiers-identifier-2 ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-identifiers-identifier-3 ((,class :foreground ,cyan-alt-other)))
+ `(rainbow-identifiers-identifier-4 ((,class :foreground ,yellow-alt-other)))
+ `(rainbow-identifiers-identifier-5 ((,class :foreground ,blue-alt-other)))
+ `(rainbow-identifiers-identifier-6 ((,class :foreground ,green-alt)))
+ `(rainbow-identifiers-identifier-7 ((,class :foreground ,magenta-alt)))
+ `(rainbow-identifiers-identifier-8 ((,class :foreground ,cyan-alt)))
+ `(rainbow-identifiers-identifier-9 ((,class :foreground ,yellow-alt)))
+ `(rainbow-identifiers-identifier-10 ((,class :foreground ,green)))
+ `(rainbow-identifiers-identifier-11 ((,class :foreground ,magenta)))
+ `(rainbow-identifiers-identifier-12 ((,class :foreground ,cyan)))
+ `(rainbow-identifiers-identifier-13 ((,class :foreground ,yellow)))
+ `(rainbow-identifiers-identifier-14 ((,class :foreground ,blue-alt)))
+ `(rainbow-identifiers-identifier-15 ((,class :foreground ,red-alt)))
+;;;;; rainbow-delimiters
+ `(rainbow-delimiters-base-face-error ((,class :foreground ,red)))
+ `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
+ `(rainbow-delimiters-depth-1-face ((,class :foreground ,green-alt-other)))
+ `(rainbow-delimiters-depth-2-face ((,class :foreground ,magenta-alt-other)))
+ `(rainbow-delimiters-depth-3-face ((,class :foreground ,cyan-alt-other)))
+ `(rainbow-delimiters-depth-4-face ((,class :foreground ,yellow-alt-other)))
+ `(rainbow-delimiters-depth-5-face ((,class :foreground ,blue-alt-other)))
+ `(rainbow-delimiters-depth-6-face ((,class :foreground ,green-alt)))
+ `(rainbow-delimiters-depth-7-face ((,class :foreground ,magenta-alt)))
+ `(rainbow-delimiters-depth-8-face ((,class :foreground ,cyan-alt)))
+ `(rainbow-delimiters-depth-9-face ((,class :foreground ,yellow-alt)))
+ `(rainbow-delimiters-mismatched-face ((,class :inherit bold :foreground ,red-alt)))
+ `(rainbow-delimiters-unmatched-face ((,class :inherit bold :foreground ,red)))
+;;;;; rcirc
+ `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
+ `(rcirc-dim-nick ((,class :foreground ,fg-alt)))
+ `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
+ `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
+ `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(rcirc-prompt ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(rcirc-server ((,class :foreground ,fg-unfocused)))
+ `(rcirc-timestamp ((,class :foreground ,blue-nuanced)))
+ `(rcirc-url ((,class :foreground ,blue :underline t)))
+;;;;; regexp-builder (re-builder)
+ `(reb-match-0 ((,class :inherit modus-theme-intense-blue)))
+ `(reb-match-1 ((,class :inherit modus-theme-intense-magenta)))
+ `(reb-match-2 ((,class :inherit modus-theme-intense-green)))
+ `(reb-match-3 ((,class :inherit modus-theme-intense-red)))
+ `(reb-regexp-grouping-backslash ((,class :inherit bold :foreground ,fg-escape-char-backslash)))
+ `(reb-regexp-grouping-construct ((,class :inherit bold :foreground ,fg-escape-char-construct)))
+;;;;; rg (rg.el)
+ `(rg-column-number-face ((,class :foreground ,magenta-alt-other)))
+ `(rg-context-face ((,class :foreground ,fg-unfocused)))
+ `(rg-error-face ((,class :inherit bold :foreground ,red)))
+ `(rg-file-tag-face ((,class :foreground ,fg-special-cold)))
+ `(rg-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(rg-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(rg-literal-face ((,class :foreground ,blue-alt)))
+ `(rg-match-face ((,class :inherit modus-theme-special-calm)))
+ `(rg-regexp-face ((,class :foreground ,magenta-active)))
+ `(rg-toggle-off-face ((,class :inherit bold :foreground ,fg-inactive)))
+ `(rg-toggle-on-face ((,class :inherit bold :foreground ,cyan-active)))
+ `(rg-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; ripgrep
+ `(ripgrep-context-face ((,class :foreground ,fg-unfocused)))
+ `(ripgrep-error-face ((,class :inherit bold :foreground ,red)))
+ `(ripgrep-hit-face ((,class :foreground ,cyan)))
+ `(ripgrep-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; rmail
+ `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
+ `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
+;;;;; ruler-mode
+ `(ruler-mode-column-number ((,class :inherit (ruler-mode-default bold) :foreground ,fg-main)))
+ `(ruler-mode-comment-column ((,class :inherit ruler-mode-default :foreground ,red-active)))
+ `(ruler-mode-current-column ((,class :inherit ruler-mode-default :foreground ,cyan-active :box t)))
+ `(ruler-mode-default ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(ruler-mode-fill-column ((,class :inherit ruler-mode-default :foreground ,green-active)))
+ `(ruler-mode-fringes ((,class :inherit ruler-mode-default :foreground ,blue-active)))
+ `(ruler-mode-goal-column ((,class :inherit ruler-mode-default :foreground ,magenta-active)))
+ `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground ,bg-main)))
+ `(ruler-mode-pad ((,class :background ,bg-active :foreground ,fg-inactive)))
+ `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground ,yellow-active)))
+;;;;; sallet
+ `(sallet-buffer-compressed ((,class :foreground ,yellow-nuanced :slant italic)))
+ `(sallet-buffer-default-directory ((,class :foreground ,cyan-nuanced)))
+ `(sallet-buffer-directory ((,class :foreground ,blue-nuanced)))
+ `(sallet-buffer-help ((,class :foreground ,fg-special-cold)))
+ `(sallet-buffer-modified ((,class :foreground ,yellow-alt-other :slant italic)))
+ `(sallet-buffer-ordinary ((,class :foreground ,fg-main)))
+ `(sallet-buffer-read-only ((,class :foreground ,yellow-alt)))
+ `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
+ `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
+ `(sallet-flx-match ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-cyan
+ 'modus-theme-refine-cyan
+ 'modus-theme-nuanced-cyan
+ cyan-alt-other))))
+ `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced)))
+ `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
+ `(sallet-regexp-match ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-magenta
+ 'modus-theme-refine-magenta
+ 'modus-theme-nuanced-magenta
+ magenta-alt-other))))
+ `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(sallet-substring-match ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-subtle-blue
+ 'modus-theme-refine-blue
+ 'modus-theme-nuanced-blue
+ blue-alt-other))))
+;;;;; selectrum
+ `(selectrum-current-candidate ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-magenta
+ 'modus-theme-intense-magenta
+ 'modus-theme-nuanced-magenta
+ magenta
+ 'bold))))
+ `(selectrum-primary-highlight ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-blue
+ 'modus-theme-intense-blue
+ 'modus-theme-nuanced-blue
+ blue
+ 'bold))))
+ `(selectrum-secondary-highlight ((,class ,@(modus-vivendi-theme-extra-completions
+ 'modus-theme-refine-cyan
+ 'modus-theme-intense-cyan
+ 'modus-theme-nuanced-cyan
+ cyan
+ 'bold))))
+;;;;; semantic
+ `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm :underline t)))
+ `(semantic-decoration-on-private-members-face ((,class :inherit modus-theme-refine-cyan)))
+ `(semantic-decoration-on-protected-members-face ((,class :background ,bg-dim)))
+ `(semantic-highlight-edits-face ((,class :background ,bg-alt)))
+ `(semantic-highlight-func-current-tag-face ((,class :background ,bg-alt)))
+ `(semantic-idle-symbol-highlight ((,class :inherit modus-theme-special-mild)))
+ `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
+ `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
+;;;;; sesman
+ `(sesman-browser-button-face ((,class :foreground ,blue-alt-other :underline t)))
+ `(sesman-browser-highligh-face ((,class :inherit modus-theme-subtle-blue)))
+ `(sesman-buffer-face ((,class :foreground ,magenta)))
+ `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
+ `(sesman-project-face ((,class :inherit bold :foreground ,magenta-alt-other)))
+;;;;; shell-script-mode
+ `(sh-heredoc ((,class :foreground ,blue-alt)))
+ `(sh-quoted-exec ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt)))
+;;;;; show-paren-mode
+ `(show-paren-match ((,class ,@(modus-vivendi-theme-paren bg-paren-match
+ bg-paren-match-intense)
+ :foreground ,fg-main)))
+ `(show-paren-match-expression ((,class :inherit modus-theme-special-calm)))
+ `(show-paren-mismatch ((,class :inherit modus-theme-intense-red)))
+;;;;; side-notes
+ `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
+;;;;; skewer-mode
+ `(skewer-error-face ((,class :foreground ,red :underline t)))
+;;;;; smart-mode-line
+ `(sml/charging ((,class :foreground ,green-active)))
+ `(sml/discharging ((,class :foreground ,red-active)))
+ `(sml/filename ((,class :inherit bold :foreground ,blue-active)))
+ `(sml/folder ((,class :foreground ,fg-active)))
+ `(sml/git ((,class :inherit bold :foreground ,green-active)))
+ `(sml/global ((,class :foreground ,fg-active)))
+ `(sml/line-number ((,class :inherit sml/global)))
+ `(sml/minor-modes ((,class :inherit sml/global)))
+ `(sml/modes ((,class :inherit bold :foreground ,fg-active)))
+ `(sml/modified ((,class :inherit bold :foreground ,magenta-active)))
+ `(sml/mule-info ((,class :inherit sml/global)))
+ `(sml/name-filling ((,class :foreground ,yellow-active)))
+ `(sml/not-modified ((,class :inherit sml/global)))
+ `(sml/numbers-separator ((,class :inherit sml/global)))
+ `(sml/outside-modified ((,class :inherit modus-theme-intense-red)))
+ `(sml/position-percentage ((,class :inherit sml/global)))
+ `(sml/prefix ((,class :foreground ,green-active)))
+ `(sml/process ((,class :inherit sml/prefix)))
+ `(sml/projectile ((,class :inherit sml/git)))
+ `(sml/read-only ((,class :inherit bold :foreground ,cyan-active)))
+ `(sml/remote ((,class :inherit sml/global)))
+ `(sml/sudo ((,class :inherit modus-theme-subtle-red)))
+ `(sml/time ((,class :inherit sml/global)))
+ `(sml/vc ((,class :inherit sml/git)))
+ `(sml/vc-edited ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; smartparens
+ `(sp-pair-overlay-face ((,class :inherit modus-theme-special-warm)))
+ `(sp-show-pair-enclosing ((,class :inherit modus-theme-special-mild)))
+ `(sp-show-pair-match-face ((,class ,@(modus-vivendi-theme-paren bg-paren-match
+ bg-paren-match-intense)
+ :foreground ,fg-main)))
+ `(sp-show-pair-mismatch-face ((,class :inherit modus-theme-intense-red)))
+ `(sp-wrap-overlay-closing-pair ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-overlay-face ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-overlay-opening-pair ((,class :inherit sp-pair-overlay-face)))
+ `(sp-wrap-tag-overlay-face ((,class :inherit sp-pair-overlay-face)))
+;;;;; smerge
+ `(smerge-base ((,class ,@(modus-vivendi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(smerge-lower ((,class ,@(modus-vivendi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(smerge-markers ((,class :background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2)))
+ `(smerge-refined-added ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(smerge-refined-changed ((,class)))
+ `(smerge-refined-removed ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-removed fg-diff-removed
+ bg-diff-refine-removed fg-diff-refine-removed))))
+ `(smerge-upper ((,class ,@(modus-vivendi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; spaceline
+ `(spaceline-evil-emacs ((,class :inherit modus-theme-active-magenta)))
+ `(spaceline-evil-insert ((,class :inherit modus-theme-active-green)))
+ `(spaceline-evil-motion ((,class :inherit modus-theme-active-blue)))
+ `(spaceline-evil-normal ((,class :background ,fg-alt :foreground ,bg-alt)))
+ `(spaceline-evil-replace ((,class :inherit modus-theme-active-red)))
+ `(spaceline-evil-visual ((,class :inherit modus-theme-active-cyan)))
+ `(spaceline-flycheck-error ((,class :foreground ,red-active)))
+ `(spaceline-flycheck-info ((,class :foreground ,cyan-active)))
+ `(spaceline-flycheck-warning ((,class :foreground ,yellow-active)))
+ `(spaceline-highlight-face ((,class :inherit modus-theme-fringe-blue)))
+ `(spaceline-modified ((,class :inherit modus-theme-fringe-magenta)))
+ `(spaceline-python-venv ((,class :foreground ,magenta-active)))
+ `(spaceline-read-only ((,class :inherit modus-theme-fringe-red)))
+ `(spaceline-unmodified ((,class :inherit modus-theme-fringe-cyan)))
+;;;;; speedbar
+ `(speedbar-button-face ((,class :inherit link)))
+ `(speedbar-directory-face ((,class :inherit bold :foreground ,blue)))
+ `(speedbar-file-face ((,class :foreground ,fg-main)))
+ `(speedbar-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+ `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
+ `(speedbar-separator-face ((,class :inherit modus-theme-intense-neutral)))
+ `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
+;;;;; spell-fu
+ `(spell-fu-incorrect-face
+ ((,(append '((supports :underline (:style wave))) class)
+ :foreground ,fg-lang-error :underline (:style wave))
+ (,class :foreground ,fg-lang-error :underline t)))
+;;;;; stripes
+ `(stripes ((,class :inherit modus-theme-hl-line)))
+;;;;; success
+ `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
+;;;;; switch-window
+ `(switch-window-background ((,class :background ,bg-dim)))
+ `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
+;;;;; swiper
+ `(swiper-background-match-face-1 ((,class :inherit modus-theme-subtle-neutral)))
+ `(swiper-background-match-face-2 ((,class :inherit modus-theme-subtle-cyan)))
+ `(swiper-background-match-face-3 ((,class :inherit modus-theme-subtle-magenta)))
+ `(swiper-background-match-face-4 ((,class :inherit modus-theme-subtle-green)))
+ `(swiper-line-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :inherit modus-theme-special-cold)))
+ `(swiper-match-face-1 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-2 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-3 ((,class :inherit swiper-line-face)))
+ `(swiper-match-face-4 ((,class :inherit swiper-line-face)))
+;;;;; swoop
+ `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-3))))
+ `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
+ ,@(modus-vivendi-theme-scale modus-vivendi-theme-scale-4))))
+ `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
+ `(swoop-face-target-line ((,class :inherit modus-theme-intense-blue
+ ,@(and (>= emacs-major-version 27) '(:extend t)))))
+ `(swoop-face-target-words ((,class :inherit modus-theme-refine-cyan)))
+;;;;; sx
+ `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
+ `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
+ `(sx-question-list-answers ((,class :foreground ,green)))
+ `(sx-question-list-answers-accepted ((,class :box t :foreground ,green)))
+ `(sx-question-list-bounty ((,class :inherit bold :background ,bg-alt :foreground ,yellow)))
+ `(sx-question-list-date ((,class :foreground ,fg-special-cold)))
+ `(sx-question-list-favorite ((,class :inherit bold :foreground ,fg-special-warm)))
+ `(sx-question-list-parent ((,class :foreground ,fg-main)))
+ `(sx-question-list-read-question ((,class :foreground ,fg-alt)))
+ `(sx-question-list-score ((,class :foreground ,fg-special-mild)))
+ `(sx-question-list-score-upvoted ((,class :inherit (sx-question-list-score bold))))
+ `(sx-question-list-unread-question ((,class :inherit bold :foreground ,fg-main)))
+ `(sx-question-mode-accepted ((,class :inherit bold :height 1.3 :foreground ,green)))
+ `(sx-question-mode-closed ((,class :inherit modus-theme-active-yellow :box (:line-width 2 :color nil))))
+ `(sx-question-mode-closed-reason ((,class :box (:line-width 2 :color nil) :foreground ,fg-main)))
+ `(sx-question-mode-content-face ((,class :background ,bg-dim)))
+ `(sx-question-mode-date ((,class :foreground ,blue)))
+ `(sx-question-mode-header ((,class :inherit bold :foreground ,cyan)))
+ `(sx-question-mode-kbd-tag ((,class :inherit bold :height 0.9 :box (:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main)))
+ `(sx-question-mode-score ((,class :foreground ,fg-dim)))
+ `(sx-question-mode-score-downvoted ((,class :foreground ,yellow)))
+ `(sx-question-mode-score-upvoted ((,class :inherit bold :foreground ,magenta)))
+ `(sx-question-mode-title ((,class :inherit bold :foreground ,fg-main)))
+ `(sx-question-mode-title-comments ((,class :inherit bold :foreground ,fg-alt)))
+ `(sx-tag ((,class :foreground ,magenta-alt)))
+ `(sx-user-name ((,class :foreground ,blue-alt)))
+ `(sx-user-reputation ((,class :foreground ,fg-alt)))
+;;;;; symbol-overlay
+ `(symbol-overlay-default-face ((,class :inherit modus-theme-special-warm)))
+ `(symbol-overlay-face-1 ((,class :inherit modus-theme-intense-blue)))
+ `(symbol-overlay-face-2 ((,class :inherit modus-theme-refine-magenta)))
+ `(symbol-overlay-face-3 ((,class :inherit modus-theme-intense-yellow)))
+ `(symbol-overlay-face-4 ((,class :inherit modus-theme-intense-magenta)))
+ `(symbol-overlay-face-5 ((,class :inherit modus-theme-intense-red)))
+ `(symbol-overlay-face-6 ((,class :inherit modus-theme-refine-red)))
+ `(symbol-overlay-face-7 ((,class :inherit modus-theme-intense-cyan)))
+ `(symbol-overlay-face-8 ((,class :inherit modus-theme-refine-cyan)))
+;;;;; syslog-mode
+ `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(syslog-error ((,class :inherit bold :foreground ,red)))
+ `(syslog-file ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(syslog-hide ((,class :background ,bg-main :foreground ,fg-main)))
+ `(syslog-hour ((,class :inherit bold :foreground ,magenta-alt-other)))
+ `(syslog-info ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline t)))
+ `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
+ `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
+;;;;; table (built-in table.el)
+ `(table-cell ((,class :background ,blue-nuanced-bg)))
+;;;;; telephone-line
+ `(telephone-line-accent-active ((,class :background ,fg-inactive :foreground ,bg-inactive)))
+ `(telephone-line-accent-inactive ((,class :background ,bg-active :foreground ,fg-active)))
+ `(telephone-line-error ((,class :inherit bold :foreground ,red-active)))
+ `(telephone-line-evil ((,class :foreground ,fg-main)))
+ `(telephone-line-evil-emacs ((,class :inherit telephone-line-evil :background ,magenta-intense-bg)))
+ `(telephone-line-evil-insert ((,class :inherit telephone-line-evil :background ,green-intense-bg)))
+ `(telephone-line-evil-motion ((,class :inherit telephone-line-evil :background ,yellow-intense-bg)))
+ `(telephone-line-evil-normal ((,class :inherit telephone-line-evil :background ,bg-alt)))
+ `(telephone-line-evil-operator ((,class :inherit telephone-line-evil :background ,yellow-subtle-bg)))
+ `(telephone-line-evil-replace ((,class :inherit telephone-line-evil :background ,red-intense-bg)))
+ `(telephone-line-evil-visual ((,class :inherit telephone-line-evil :background ,cyan-intense-bg)))
+ `(telephone-line-projectile ((,class :foreground ,cyan-active)))
+ `(telephone-line-unimportant ((,class :foreground ,fg-inactive)))
+ `(telephone-line-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; term
+ `(term ((,class :background ,bg-main :foreground ,fg-main)))
+ `(term-bold ((,class :inherit bold)))
+ `(term-color-blue ((,class :background ,blue :foreground ,blue)))
+ `(term-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+ `(term-color-green ((,class :background ,green :foreground ,green)))
+ `(term-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+ `(term-color-red ((,class :background ,red :foreground ,red)))
+ `(term-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+ `(term-underline ((,class :underline t)))
+;;;;; tomatinho
+ `(tomatinho-ok-face ((,class :foreground ,blue-intense)))
+ `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
+ `(tomatinho-reset-face ((,class :foreground ,fg-alt)))
+;;;;; transient
+ `(transient-active-infix ((,class :inherit modus-theme-special-mild)))
+ `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
+ `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
+ `(transient-blue ((,class :inherit bold :foreground ,blue)))
+ `(transient-disabled-suffix ((,class :inherit modus-theme-intense-red)))
+ `(transient-enabled-suffix ((,class :inherit modus-theme-intense-green)))
+ `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
+ `(transient-inactive-argument ((,class :foreground ,fg-alt)))
+ `(transient-inactive-value ((,class :foreground ,fg-alt)))
+ `(transient-key ((,class :inherit bold :foreground ,blue)))
+ `(transient-mismatched-key ((,class :underline t)))
+ `(transient-nonstandard-key ((,class :underline t)))
+ `(transient-pink ((,class :inherit bold :foreground ,magenta)))
+ `(transient-red ((,class :inherit bold :foreground ,red-intense)))
+ `(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
+ `(transient-unreachable ((,class :foreground ,fg-unfocused)))
+ `(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
+ `(transient-value ((,class :foreground ,magenta-alt)))
+;;;;; trashed
+ `(trashed-deleted ((,class :inherit modus-theme-mark-del)))
+ `(trashed-directory ((,class :foreground ,blue)))
+ `(trashed-mark ((,class :inherit modus-theme-mark-symbol)))
+ `(trashed-marked ((,class :inherit modus-theme-mark-alt)))
+ `(trashed-restored ((,class :inherit modus-theme-mark-sel)))
+ `(trashed-symlink ((,class :foreground ,cyan-alt :underline t)))
+;;;;; treemacs
+ `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
+ `(treemacs-directory-face ((,class :inherit dired-directory)))
+ `(treemacs-file-face ((,class :foreground ,fg-main)))
+ `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
+ `(treemacs-git-added-face ((,class :foreground ,green-intense)))
+ `(treemacs-git-conflict-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(treemacs-git-ignored-face ((,class :foreground ,fg-alt)))
+ `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
+ `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
+ `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
+ `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
+ `(treemacs-help-column-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt-other :underline t)))
+ `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
+ `(treemacs-on-failure-pulse-face ((,class :inherit modus-theme-intense-red)))
+ `(treemacs-on-success-pulse-face ((,class :inherit modus-theme-intense-green)))
+ `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other :height 1.2 :underline t)))
+ `(treemacs-root-remote-disconnected-face ((,class :inherit treemacs-root-remote-face :foreground ,yellow)))
+ `(treemacs-root-remote-face ((,class :inherit treemacs-root-face :foreground ,magenta)))
+ `(treemacs-root-remote-unreadable-face ((,class :inherit treemacs-root-unreadable-face)))
+ `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face :strike-through t)))
+ `(treemacs-tags-face ((,class :foreground ,blue-alt)))
+ `(treemacs-tags-face ((,class :foreground ,magenta-alt)))
+;;;;; tty-menu
+ `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+ `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt :foreground ,fg-main)))
+ `(tty-menu-selected-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; tuareg
+ `(caml-types-def-face ((,class :inherit modus-theme-subtle-red)))
+ `(caml-types-expr-face ((,class :inherit modus-theme-subtle-green)))
+ `(caml-types-occ-face ((,class :inherit modus-theme-subtle-green)))
+ `(caml-types-scope-face ((,class :inherit modus-theme-subtle-blue)))
+ `(caml-types-typed-face ((,class :inherit modus-theme-subtle-magenta)))
+ `(tuareg-font-double-semicolon-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(tuareg-font-lock-attribute-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(tuareg-font-lock-constructor-face ((,class :foreground ,fg-main)))
+ `(tuareg-font-lock-error-face ((,class :inherit (modus-theme-intense-red bold))))
+ `(tuareg-font-lock-extension-node-face ((,class :background ,bg-alt :foreground ,magenta)))
+ `(tuareg-font-lock-governing-face ((,class :inherit bold :foreground ,fg-main)))
+ `(tuareg-font-lock-infix-extension-node-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(tuareg-font-lock-interactive-directive-face ((,class :foreground ,fg-special-cold)))
+ `(tuareg-font-lock-interactive-error-face ((,class :inherit bold
+ ,@(modus-vivendi-theme-syntax-foreground
+ red red-faint))))
+ `(tuareg-font-lock-interactive-output-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(tuareg-font-lock-label-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(tuareg-font-lock-line-number-face ((,class :foreground ,fg-special-warm)))
+ `(tuareg-font-lock-module-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(tuareg-font-lock-multistage-face ((,class :inherit bold :background ,bg-alt
+ ,@(modus-vivendi-theme-syntax-foreground
+ blue blue-faint))))
+ `(tuareg-font-lock-operator-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(tuareg-opam-error-face ((,class :inherit bold
+ ,@(modus-vivendi-theme-syntax-foreground
+ red red-faint))))
+ `(tuareg-opam-pkg-variable-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint)
+ :slant ,modus-theme-slant)))
+;;;;; undo-tree
+ `(undo-tree-visualizer-active-branch-face ((,class :inherit bold :foreground ,fg-main)))
+ `(undo-tree-visualizer-current-face ((,class :foreground ,blue-intense)))
+ `(undo-tree-visualizer-default-face ((,class :foreground ,fg-alt)))
+ `(undo-tree-visualizer-register-face ((,class :foreground ,magenta-intense)))
+ `(undo-tree-visualizer-unmodified-face ((,class :foreground ,green-intense)))
+;;;;; vc
+ `(vc-conflict-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,red-active)))
+ `(vc-edited-state ((,class :foreground ,fg-special-warm)))
+ `(vc-locally-added-state ((,class :foreground ,cyan-active)))
+ `(vc-locked-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-active)))
+ `(vc-missing-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,yellow-active)))
+ `(vc-needs-update-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,fg-special-mild)))
+ `(vc-removed-state ((,class :foreground ,red-active)))
+ `(vc-state-base ((,class :foreground ,fg-active)))
+ `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
+;;;;; vdiff
+ `(vdiff-addition-face ((,class ,@(modus-vivendi-theme-diffs
+ bg-main green
+ bg-diff-focus-added fg-diff-focus-added))))
+ `(vdiff-change-face ((,class ,@(modus-vivendi-theme-diffs
+ bg-main yellow
+ bg-diff-focus-changed fg-diff-focus-changed))))
+ `(vdiff-closed-fold-face ((,class :background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1)))
+ `(vdiff-refine-added ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-added fg-diff-added
+ bg-diff-refine-added fg-diff-refine-added))))
+ `(vdiff-refine-changed ((,class ,@(modus-vivendi-theme-diffs
+ bg-diff-changed fg-diff-changed
+ bg-diff-refine-changed fg-diff-refine-changed))))
+ `(vdiff-subtraction-face ((,class ,@(modus-vivendi-theme-diffs
+ bg-main red
+ bg-diff-focus-removed fg-diff-focus-removed))))
+ `(vdiff-target-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; vimish-fold
+ `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
+ `(vimish-fold-mouse-face ((,class :inherit modus-theme-intense-blue)))
+ `(vimish-fold-overlay ((,class :background ,bg-alt :foreground ,fg-special-cold)))
+;;;;; visible-mark
+ `(visible-mark-active ((,class :background ,blue-intense-bg)))
+ `(visible-mark-face1 ((,class :background ,cyan-intense-bg)))
+ `(visible-mark-face2 ((,class :background ,yellow-intense-bg)))
+ `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
+ `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
+;;;;; visual-regexp
+ `(vr/group-0 ((,class :inherit modus-theme-intense-blue)))
+ `(vr/group-1 ((,class :inherit modus-theme-intense-magenta)))
+ `(vr/group-2 ((,class :inherit modus-theme-intense-green)))
+ `(vr/match-0 ((,class :inherit modus-theme-refine-yellow)))
+ `(vr/match-1 ((,class :inherit modus-theme-refine-yellow)))
+ `(vr/match-separator-face ((,class :inherit (modus-theme-intense-neutral bold))))
+;;;;; volatile-highlights
+ `(vhl/default-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+ :background ,bg-alt :foreground ,blue-nuanced)))
+;;;;; vterm
+ `(vterm-color-black ((,class :background "black" :foreground "black")))
+ `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
+ `(vterm-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+ `(vterm-color-default ((,class :background ,bg-main :foreground ,fg-main)))
+ `(vterm-color-green ((,class :background ,green :foreground ,green)))
+ `(vterm-color-inverse-video ((,class :background ,bg-main :inverse-video t)))
+ `(vterm-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+ `(vterm-color-red ((,class :background ,red :foreground ,red)))
+ `(vterm-color-underline ((,class :foreground ,fg-special-warm :underline t)))
+ `(vterm-color-white ((,class :background "white" :foreground "white")))
+ `(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+;;;;; wcheck-mode
+ `(wcheck-default-face ((,class :foreground ,red :underline t)))
+;;;;; web-mode
+ `(web-mode-annotation-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-annotation-html-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-annotation-tag-face ((,class :inherit web-mode-comment-face :underline t)))
+ `(web-mode-block-attr-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue blue-faint))))
+ `(web-mode-block-attr-value-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(web-mode-block-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-block-control-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-block-delimiter-face ((,class :foreground ,fg-main)))
+ `(web-mode-block-face ((,class :background ,bg-dim)))
+ `(web-mode-block-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-bold-face ((,class :inherit bold)))
+ `(web-mode-builtin-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-comment-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+ `(web-mode-comment-keyword-face ((,class :inherit bold :background ,bg-dim
+ ,@(modus-vivendi-theme-syntax-foreground
+ yellow yellow-faint))))
+ `(web-mode-constant-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-css-at-rule-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-css-color-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-css-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-css-function-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-css-priority-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ yellow-alt yellow-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-css-property-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-css-pseudo-class-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(web-mode-css-selector-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-css-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-css-variable-face ((,class :foreground ,fg-special-warm)))
+ `(web-mode-current-column-highlight-face ((,class :background ,bg-alt)))
+ `(web-mode-current-element-highlight-face ((,class :inherit modus-theme-special-mild)))
+ `(web-mode-doctype-face ((,class :foreground ,fg-special-cold :slant ,modus-theme-slant)))
+ `(web-mode-error-face ((,class :inherit modus-theme-intense-red)))
+ `(web-mode-filter-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-folded-face ((,class :underline t)))
+ `(web-mode-function-call-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-function-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-attr-custom-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-html-attr-engine-face ((,class :foreground ,fg-main)))
+ `(web-mode-html-attr-equal-face ((,class :foreground ,fg-main)))
+ `(web-mode-html-attr-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-html-attr-value-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-html-entity-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ yellow-alt-other yellow-alt-other-faint)
+ :slant ,modus-theme-slant)))
+ `(web-mode-html-tag-bracket-face ((,class :foreground ,fg-dim)))
+ `(web-mode-html-tag-custom-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-tag-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-html-tag-namespaced-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-html-tag-unclosed-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red red-faint)
+ :underline t)))
+ `(web-mode-inlay-face ((,class :background ,bg-alt)))
+ `(web-mode-italic-face ((,class :slant italic)))
+ `(web-mode-javascript-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-javascript-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-json-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-json-context-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(web-mode-json-key-face ((,class :foreground ,blue-nuanced)))
+ `(web-mode-json-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-jsx-depth-1-face ((,class :background ,blue-intense-bg :foreground ,fg-main)))
+ `(web-mode-jsx-depth-2-face ((,class :background ,blue-subtle-bg :foreground ,fg-main)))
+ `(web-mode-jsx-depth-3-face ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
+ `(web-mode-jsx-depth-4-face ((,class :background ,bg-alt :foreground ,blue-refine-fg)))
+ `(web-mode-jsx-depth-5-face ((,class :background ,bg-alt :foreground ,blue-nuanced)))
+ `(web-mode-keyword-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt-other magenta-alt-other-faint)
+ ,@(modus-vivendi-theme-bold-weight))))
+ `(web-mode-param-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta magenta-faint))))
+ `(web-mode-part-comment-face ((,class :inherit web-mode-comment-face)))
+ `(web-mode-part-face ((,class :inherit web-mode-block-face)))
+ `(web-mode-part-string-face ((,class :inherit web-mode-string-face)))
+ `(web-mode-preprocessor-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(web-mode-script-face ((,class :inherit web-mode-part-face)))
+ `(web-mode-sql-keyword-face ((,class :inherit bold
+ ,@(modus-vivendi-theme-syntax-foreground
+ yellow yellow-faint))))
+ `(web-mode-string-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt blue-alt-faint))))
+ `(web-mode-style-face ((,class :inherit web-mode-part-face)))
+ `(web-mode-symbol-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ blue-alt-other blue-alt-other-faint))))
+ `(web-mode-type-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ magenta-alt magenta-alt-faint))))
+ `(web-mode-underline-face ((,class :underline t)))
+ `(web-mode-variable-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan cyan-faint))))
+ `(web-mode-warning-face ((,class :inherit bold :background ,bg-alt
+ ,@(modus-vivendi-theme-syntax-foreground
+ yellow-alt-other yellow-alt-other-faint))))
+ `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+;;;;; wgrep
+ `(wgrep-delete-face ((,class :inherit modus-theme-refine-yellow)))
+ `(wgrep-done-face ((,class :inherit modus-theme-refine-blue)))
+ `(wgrep-face ((,class :inherit modus-theme-refine-green)))
+ `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
+ `(wgrep-reject-face ((,class :inherit (modus-theme-intense-red bold))))
+;;;;; which-function-mode
+ `(which-func ((,class :foreground ,magenta-active)))
+;;;;; which-key
+ `(which-key-command-description-face ((,class :foreground ,cyan)))
+ `(which-key-group-description-face ((,class :foreground ,magenta-alt)))
+ `(which-key-highlighted-command-face ((,class :foreground ,cyan-alt :underline t)))
+ `(which-key-key-face ((,class :inherit bold :foreground ,blue-intense)))
+ `(which-key-local-map-description-face ((,class :foreground ,fg-main)))
+ `(which-key-note-face ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+ `(which-key-separator-face ((,class :foreground ,fg-alt)))
+ `(which-key-special-key-face ((,class :inherit bold :foreground ,yellow-intense)))
+;;;;; whitespace-mode
+ `(whitespace-big-indent ((,class :inherit modus-theme-subtle-red)))
+ `(whitespace-empty ((,class :inherit modus-theme-intense-magenta)))
+ `(whitespace-hspace ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-indentation ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-line ((,class :inherit modus-theme-special-warm)))
+ `(whitespace-newline ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-space ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-space-after-tab ((,class :inherit modus-theme-subtle-magenta)))
+ `(whitespace-space-before-tab ((,class :inherit modus-theme-subtle-cyan)))
+ `(whitespace-tab ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
+ `(whitespace-trailing ((,class :inherit modus-theme-intense-red)))
+;;;;; window-divider-mode
+ `(window-divider ((,class :foreground ,fg-window-divider-inner)))
+ `(window-divider-first-pixel ((,class :foreground ,fg-window-divider-outer)))
+ `(window-divider-last-pixel ((,class :foreground ,fg-window-divider-outer)))
+;;;;; winum
+ `(winum-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground ,cyan-active)))
+;;;;; writegood-mode
+ `(writegood-duplicates-face ((,class :background ,bg-alt :foreground ,red-alt :underline t)))
+ `(writegood-passive-voice-face ((,class :foreground ,yellow-nuanced :underline ,fg-lang-warning)))
+ `(writegood-weasels-face ((,class :foreground ,red-nuanced :underline ,fg-lang-error)))
+;;;;; woman
+ `(woman-addition ((,class :foreground ,magenta-alt-other)))
+ `(woman-bold ((,class :inherit bold :foreground ,magenta)))
+ `(woman-italic ((,class :foreground ,cyan :slant italic)))
+ `(woman-unknown ((,class :foreground ,yellow :slant italic)))
+;;;;; xah-elisp-mode
+ `(xah-elisp-at-symbol ((,class :inherit bold
+ ,@(modus-vivendi-theme-syntax-foreground
+ red-alt red-alt-faint))))
+ `(xah-elisp-cap-variable ((,class ,@(modus-vivendi-theme-syntax-foreground
+ red-alt-other red-alt-other-faint))))
+ `(xah-elisp-command-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+ cyan-alt-other cyan-alt-other-faint))))
+ `(xah-elisp-dollar-symbol ((,class ,@(modus-vivendi-theme-syntax-foreground
+ green green-faint))))
+;;;;; xref
+ `(xref-file-header ((,class :inherit bold :foreground ,fg-special-cold)))
+ `(xref-line-number ((,class :foreground ,fg-alt)))
+ `(xref-match ((,class :inherit match)))
+;;;;; yaml-mode
+ `(yaml-tab-face ((,class :inherit modus-theme-intense-red)))
+;;;;; yasnippet
+ `(yas-field-highlight-face ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; ztree
+ `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
+ `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground ,fg-special-cold)))
+ `(ztreep-diff-header-small-face ((,class :inherit bold :foreground ,fg-special-mild)))
+ `(ztreep-diff-model-add-face ((,class :foreground ,green)))
+ `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
+ `(ztreep-diff-model-ignored-face ((,class :foreground ,fg-alt :strike-through t)))
+ `(ztreep-diff-model-normal-face ((,class :foreground ,fg-alt)))
+ `(ztreep-expand-sign-face ((,class :foreground ,blue)))
+ `(ztreep-header-face ((,class :inherit bold :height 1.2 :foreground ,fg-special-cold)))
+ `(ztreep-leaf-face ((,class :foreground ,cyan)))
+ `(ztreep-node-count-children-face ((,class :foreground ,fg-special-warm)))
+ `(ztreep-node-face ((,class :foreground ,fg-main))))
+;;;; Emacs 27+
+ ;; EXPERIMENTAL this form is subject to review
+ (when (>= emacs-major-version 27)
+ (custom-theme-set-faces
+ 'modus-vivendi
+;;;;; line numbers (`display-line-numbers-mode' and global variant)
+ ;; NOTE that this is specifically for the faces that were
+ ;; introduced in Emacs 27, as the other faces are already
+ ;; supported.
+ `(line-number-major-tick ((,class (:background ,yellow-nuanced-bg :foreground ,yellow-nuanced))))
+ `(line-number-minor-tick ((,class (:background ,cyan-nuanced-bg :foreground ,cyan-nuanced))))
+;;;;; tab-bar-mode
+ `(tab-bar ((,class :background ,bg-tab-bar :foreground ,fg-main)))
+ `(tab-bar-tab ((,class :inherit bold :box (:line-width 2 :color ,bg-tab-active)
+ :background ,bg-tab-active :foreground ,fg-main)))
+ `(tab-bar-tab-inactive ((,class :box (:line-width 2 :color ,bg-tab-inactive)
+ :background ,bg-tab-inactive :foreground ,fg-dim)))
+;;;;; tab-line-mode
+ `(tab-line ((,class :height 0.95 :background ,bg-tab-bar :foreground ,fg-main)))
+ `(tab-line-close-highlight ((,class :foreground ,red)))
+ `(tab-line-highlight ((,class :background ,blue-subtle-bg :foreground ,fg-dim)))
+ `(tab-line-tab ((,class :inherit bold :box (:line-width 2 :color ,bg-tab-active)
+ :background ,bg-tab-active :foreground ,fg-main)))
+ `(tab-line-tab-current ((,class :inherit tab-line-tab)))
+ `(tab-line-tab-inactive ((,class :box (:line-width 2 :color ,bg-tab-inactive)
+ :background ,bg-tab-inactive :foreground ,fg-dim)))))
+;;; variables
+ (custom-theme-set-variables
+ 'modus-vivendi
+;;;; ansi-colors
+ `(ansi-color-faces-vector [default bold shadow italic underline success warning error])
+ `(ansi-color-names-vector [,bg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,fg-main])
+;;;; flymake fringe indicators
+ `(flymake-error-bitmap '(flymake-double-exclamation-mark modus-theme-fringe-red))
+ `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
+ `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
+;;;; ibuffer
+ `(ibuffer-deletion-face 'modus-theme-mark-del)
+ `(ibuffer-filter-group-name-face 'modus-theme-mark-symbol)
+ `(ibuffer-marked-face 'modus-theme-mark-sel)
+ `(ibuffer-title-face 'modus-theme-header)
+;;;; highlight-tail
+ `(highlight-tail-colors
+ '((,green-subtle-bg . 0)
+ (,cyan-subtle-bg . 20)))
+;;;; hl-todo
+ `(hl-todo-keyword-faces
+ '(("HOLD" . ,yellow-alt)
+ ("TODO" . ,magenta)
+ ("NEXT" . ,magenta-alt-other)
+ ("THEM" . ,magenta-alt)
+ ("PROG" . ,cyan)
+ ("OKAY" . ,cyan-alt)
+ ("DONT" . ,green-alt)
+ ("FAIL" . ,red)
+ ("BUG" . ,red)
+ ("DONE" . ,green)
+ ("NOTE" . ,yellow-alt-other)
+ ("KLUDGE" . ,yellow)
+ ("HACK" . ,yellow)
+ ("TEMP" . ,red-nuanced)
+ ("FIXME" . ,red-alt-other)
+ ("XXX+" . ,red-alt)
+ ("REVIEW" . ,cyan-alt-other)
+ ("DEPRECATED" . ,blue-nuanced)))
+;;;; vc-annotate (C-x v g)
+ `(vc-annotate-background nil)
+ `(vc-annotate-background-mode nil)
+ `(vc-annotate-color-map
+ '((20 . ,red)
+ (40 . ,magenta)
+ (60 . ,magenta-alt)
+ (80 . ,red-alt)
+ (100 . ,yellow)
+ (120 . ,yellow-alt)
+ (140 . ,fg-special-warm)
+ (160 . ,fg-special-mild)
+ (180 . ,green)
+ (200 . ,green-alt)
+ (220 . ,cyan-alt-other)
+ (240 . ,cyan-alt)
+ (260 . ,cyan)
+ (280 . ,fg-special-cold)
+ (300 . ,blue)
+ (320 . ,blue-alt)
+ (340 . ,blue-alt-other)
+ (360 . ,magenta-alt-other)))
+ `(vc-annotate-very-old-color nil)
+;;;; xterm-color
+ `(xterm-color-names [,bg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,fg-alt])
+ `(xterm-color-names-bright [,bg-alt ,red-alt ,green-alt ,yellow-alt ,blue-alt ,magenta-alt ,cyan-alt ,fg-main]))
+;;; Conditional theme variables
+;;;; org-src-block-faces
+ ;; this is a user option to add a colour-coded background to source
+ ;; blocks for various programming languages
+ (when (eq modus-vivendi-theme-org-blocks 'rainbow)
+ (custom-theme-set-variables
+ 'modus-vivendi
+ `(org-src-block-faces ; TODO this list should be expanded
+ `(("emacs-lisp" modus-theme-nuanced-magenta)
+ ("elisp" modus-theme-nuanced-magenta)
+ ("clojure" modus-theme-nuanced-magenta)
+ ("clojurescript" modus-theme-nuanced-magenta)
+ ("c" modus-theme-nuanced-blue)
+ ("c++" modus-theme-nuanced-blue)
+ ("sh" modus-theme-nuanced-green)
+ ("shell" modus-theme-nuanced-green)
+ ("html" modus-theme-nuanced-yellow)
+ ("xml" modus-theme-nuanced-yellow)
+ ("css" modus-theme-nuanced-red)
+ ("scss" modus-theme-nuanced-red)
+ ("python" modus-theme-nuanced-green)
+ ("ipython" modus-theme-nuanced-magenta)
+ ("r" modus-theme-nuanced-cyan)
+ ("yaml" modus-theme-nuanced-cyan)
+ ("conf" modus-theme-nuanced-cyan)
+ ("docker" modus-theme-nuanced-cyan)
+ ("json" modus-theme-nuanced-cyan))))))
+
+;;; library provides
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'modus-vivendi)
+
+(provide 'modus-vivendi-theme)
+
+;;; modus-vivendi-theme.el ends here
diff --git a/etc/w32-feature.el b/etc/w32-feature.el
new file mode 100644
index 00000000000..3c0f74175cf
--- /dev/null
+++ b/etc/w32-feature.el
@@ -0,0 +1,87 @@
+;;; w32-feature.el --- Check Availability of Emacs Features -*- lexical-binding: t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Phillip Lord <phillip.lord@russet.org.uk>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides tests for various features of Emacs. It is
+;; designed to check whether bundled binary distributions of Emacs on
+;; windows are fully functional.
+
+;;; Code:
+(require 'ert)
+
+(ert-deftest feature-optimization ()
+ (should
+ (string-match-p "CFLAGS=-O2" system-configuration-options)))
+
+(ert-deftest feature-harfbuzz ()
+ (should
+ (eq
+ 'harfbuzz
+ (car (frame-parameter nil 'font-backend)))))
+
+(ert-deftest feature-gnutls ()
+ (should (gnutls-available-p)))
+
+(ert-deftest feature-zlib ()
+ (should (zlib-available-p)))
+
+(ert-deftest feature-thread ()
+ (should (fboundp 'make-thread)))
+
+(ert-deftest feature-json ()
+ (should
+ (fboundp 'json-serialize)))
+
+(ert-deftest feature-gmp ()
+ (should
+ (string-match-p "GMP" system-configuration-features)))
+
+(ert-deftest feature-module ()
+ (should (fboundp 'module-load)))
+
+(ert-deftest feature-libxml ()
+ (should (libxml-available-p)))
+
+(ert-deftest feature-lcms2 ()
+ (should (lcms2-available-p)))
+
+(ert-deftest feature-xpm ()
+ (should (image-type-available-p 'xpm)))
+
+(ert-deftest feature-gif ()
+ (should (image-type-available-p 'gif)))
+
+(ert-deftest feature-png ()
+ (should (image-type-available-p 'png)))
+
+(ert-deftest feature-xpm ()
+ (should (image-type-available-p 'xpm)))
+
+(ert-deftest feature-jpeg ()
+ (should (image-type-available-p 'jpeg)))
+
+(ert-deftest feature-tiff ()
+ (should (image-type-available-p 'tiff)))
+
+(ert-deftest feature-svg ()
+ (should (image-type-available-p 'svg)))
+;;; feature.el ends here
diff --git a/leim/SKK-DIC/SKK-JISYO.L b/leim/SKK-DIC/SKK-JISYO.L
index 6b024e3dc4b..9098868caea 100644
--- a/leim/SKK-DIC/SKK-JISYO.L
+++ b/leim/SKK-DIC/SKK-JISYO.L
@@ -22978,6 +22978,7 @@ covering /¥«¥Ð¡¼¥ê¥ó¥°/
coverstory /¥«¥Ð¡¼¥¹¥È¡¼¥ê¡¼/
coverup /¥«¥Ð¡¼¥¢¥Ã¥×/
coverversion /¥«¥Ð¡¼¥Ð¡¼¥¸¥ç¥ó/
+covid-19 /¿··¿¥³¥í¥Ê¥¦¥¤¥ë¥¹´¶À÷¾É;Coronavirus disease 2019/
cow /¥«¥¦/
cowbell /¥«¥¦¥Ù¥ë/
cowboy /¥«¥¦¥Ü¡¼¥¤/
@@ -38107,6 +38108,9 @@ sardine /¥µ¡¼¥Ç¥£¥ó/
sari /¥µ¥ê¡¼/¥µ¥ê/
sarin /¥µ¥ê¥ó/
sarod /¥µ¥í¡¼¥É/¥µ¥í¥Ã¥É/
+sars /severe acute respiratory syndrome/½Å¾ÉµÞÀ­¸ÆµÛ´ï¾É¸õ·²/
+sars-cov /severe acute respiratory syndrome coronavirus/SARS¥³¥í¥Ê¥¦¥¤¥ë¥¹
+sars-cov-2 /severe acute respiratory syndrome coronavirus 2/2019¿··¿¥³¥í¥Ê¥¦¥¤¥ë¥¹
sartre /¥µ¥ë¥È¥ë/
saruman /¥µ¥ë¥Þ¥ó/
sasa /¥µ¥µ/
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
index 1aa04363dac..e43aa42d5c4 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -38,66 +38,41 @@
#include "allocator.h"
-/* Assuming the current directory is FD, get the symbolic link value
- of FILENAME as a null-terminated string and put it into a buffer.
- If FD is AT_FDCWD, FILENAME is interpreted relative to the current
- working directory, as in openat.
-
- If the link is small enough to fit into BUFFER put it there.
- BUFFER's size is BUFFER_SIZE, and BUFFER can be null
- if BUFFER_SIZE is zero.
-
- If the link is not small, put it into a dynamically allocated
- buffer managed by ALLOC. It is the caller's responsibility to free
- the returned value if it is nonnull and is not BUFFER. A null
- ALLOC stands for the standard allocator.
-
- The PREADLINKAT function specifies how to read links. It operates
- like POSIX readlinkat()
- <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
- but can assume that its first argument is the same as FD.
-
- If successful, return the buffer address; otherwise return NULL and
- set errno. */
-
-char *
-careadlinkat (int fd, char const *filename,
+enum { STACK_BUF_SIZE = 1024 };
+
+/* Act like careadlinkat (see below), with an additional argument
+ STACK_BUF that can be used as temporary storage.
+
+ If GCC_LINT is defined, do not inline this function with GCC 10.1
+ and later, to avoid creating a pointer to the stack that GCC
+ -Wreturn-local-addr incorrectly complains about. See:
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644
+ Although the noinline attribute can hurt performance a bit, no better way
+ to pacify GCC is known; even an explicit #pragma does not pacify GCC.
+ When the GCC bug is fixed this workaround should be limited to the
+ broken GCC versions. */
+#if (defined GCC_LINT || defined lint) && _GL_GNUC_PREREQ (10, 1)
+__attribute__ ((__noinline__))
+#endif
+static char *
+readlink_stk (int fd, char const *filename,
char *buffer, size_t buffer_size,
struct allocator const *alloc,
- ssize_t (*preadlinkat) (int, char const *, char *, size_t))
+ ssize_t (*preadlinkat) (int, char const *, char *, size_t),
+ char stack_buf[STACK_BUF_SIZE])
{
char *buf;
size_t buf_size;
size_t buf_size_max =
SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
- char stack_buf[1024];
-
-#if (defined GCC_LINT || defined lint) && _GL_GNUC_PREREQ (10, 1)
- /* Pacify preadlinkat without creating a pointer to the stack
- that a broken gcc -Wreturn-local-addr would cry wolf about. See:
- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95044
- This workaround differs from the mainline code, but
- no other way to pacify GCC 10.1.0 is known; even an explicit
- #pragma does not pacify GCC. When the GCC bug is fixed this
- workaround should be limited to the broken GCC versions. */
-# define WORK_AROUND_GCC_BUG_95044
-#endif
if (! alloc)
alloc = &stdlib_allocator;
if (!buffer)
{
-#ifdef WORK_AROUND_GCC_BUG_95044
- buffer = alloc->allocate (sizeof stack_buf);
-#else
- /* Allocate the initial buffer on the stack. This way, in the
- common case of a symlink of small size, we get away with a
- single small malloc() instead of a big malloc() followed by a
- shrinking realloc(). */
buffer = stack_buf;
-#endif
- buffer_size = sizeof stack_buf;
+ buffer_size = STACK_BUF_SIZE;
}
buf = buffer;
@@ -172,3 +147,44 @@ careadlinkat (int fd, char const *filename,
errno = ENOMEM;
return NULL;
}
+
+
+/* Assuming the current directory is FD, get the symbolic link value
+ of FILENAME as a null-terminated string and put it into a buffer.
+ If FD is AT_FDCWD, FILENAME is interpreted relative to the current
+ working directory, as in openat.
+
+ If the link is small enough to fit into BUFFER put it there.
+ BUFFER's size is BUFFER_SIZE, and BUFFER can be null
+ if BUFFER_SIZE is zero.
+
+ If the link is not small, put it into a dynamically allocated
+ buffer managed by ALLOC. It is the caller's responsibility to free
+ the returned value if it is nonnull and is not BUFFER. A null
+ ALLOC stands for the standard allocator.
+
+ The PREADLINKAT function specifies how to read links. It operates
+ like POSIX readlinkat()
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
+ but can assume that its first argument is the same as FD.
+
+ If successful, return the buffer address; otherwise return NULL and
+ set errno. */
+
+char *
+careadlinkat (int fd, char const *filename,
+ char *buffer, size_t buffer_size,
+ struct allocator const *alloc,
+ ssize_t (*preadlinkat) (int, char const *, char *, size_t))
+{
+ /* Allocate the initial buffer on the stack. This way, in the
+ common case of a symlink of small size, we get away with a
+ single small malloc instead of a big malloc followed by a
+ shrinking realloc.
+
+ If GCC -Wreturn-local-addr warns about this buffer, the warning
+ is bogus; see readlink_stk. */
+ char stack_buf[STACK_BUF_SIZE];
+ return readlink_stk (fd, filename, buffer, buffer_size, alloc,
+ preadlinkat, stack_buf);
+}
diff --git a/lib/cdefs.h b/lib/cdefs.h
index b1870fd0a93..ff7c628a264 100644
--- a/lib/cdefs.h
+++ b/lib/cdefs.h
@@ -148,7 +148,11 @@
# define __warnattr(msg) __attribute__((__warning__ (msg)))
# define __errordecl(name, msg) \
extern void name (void) __attribute__((__error__ (msg)))
-#elif __glibc_clang_has_attribute (__diagnose_if__) && 0 /* fails on Fedora 31 with Clang 9. */
+#elif __glibc_clang_has_attribute (__diagnose_if__) && 0
+/* These definitions are not enabled, because they produce bogus warnings
+ in the glibc Fortify functions. These functions are written in a style
+ that works with GCC. In order to work with clang, these functions would
+ need to be modified. */
# define __warndecl(name, msg) \
extern void name (void) __attribute__((__diagnose_if__ (1, msg, "warning")))
# define __warnattr(msg) __attribute__((__diagnose_if__ (1, msg, "warning")))
diff --git a/lib/diffseq.h b/lib/diffseq.h
index c89363ac9ee..26e10bdd043 100644
--- a/lib/diffseq.h
+++ b/lib/diffseq.h
@@ -51,10 +51,14 @@
EXTRA_CONTEXT_FIELDS Declarations of fields for 'struct context'.
NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff].
NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff].
+ NOTE_ORDERED (Optional) A boolean expression saying that
+ NOTE_DELETE and NOTE_INSERT calls must be
+ issued in offset order.
EARLY_ABORT(ctxt) (Optional) A boolean expression that triggers an
early abort of the computation.
USE_HEURISTIC (Optional) Define if you want to support the
heuristic for large vectors.
+
It is also possible to use this file with abstract arrays. In this case,
xvec and yvec are not represented in memory. They only exist conceptually.
In this case, the list of defines above is amended as follows:
@@ -63,6 +67,7 @@
XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff)
A three-argument macro: References xvec[xoff] and
yvec[yoff] and tests these elements for equality.
+
Before including this file, you also need to include:
#include <limits.h>
#include <stdbool.h>
@@ -78,6 +83,10 @@
# define EARLY_ABORT(ctxt) false
#endif
+#ifndef NOTE_ORDERED
+# define NOTE_ORDERED false
+#endif
+
/* Use this to suppress gcc's "...may be used before initialized" warnings.
Beware: The Code argument must not contain commas. */
#ifndef IF_LINT
@@ -88,15 +97,6 @@
# endif
#endif
-/* As above, but when Code must contain one comma. */
-#ifndef IF_LINT2
-# if defined GCC_LINT || defined lint
-# define IF_LINT2(Code1, Code2) Code1, Code2
-# else
-# define IF_LINT2(Code1, Code2) /* empty */
-# endif
-#endif
-
/*
* Context of comparison operation.
*/
@@ -468,49 +468,89 @@ compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim,
#define XREF_YREF_EQUAL(x,y) XVECREF_YVECREF_EQUAL (ctxt, x, y)
#endif
- /* Slide down the bottom initial diagonal. */
- while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff))
+ while (true)
{
- xoff++;
- yoff++;
- }
+ /* Slide down the bottom initial diagonal. */
+ while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff))
+ {
+ xoff++;
+ yoff++;
+ }
- /* Slide up the top initial diagonal. */
- while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1))
- {
- xlim--;
- ylim--;
- }
+ /* Slide up the top initial diagonal. */
+ while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1))
+ {
+ xlim--;
+ ylim--;
+ }
- /* Handle simple cases. */
- if (xoff == xlim)
- while (yoff < ylim)
- {
- NOTE_INSERT (ctxt, yoff);
- if (EARLY_ABORT (ctxt))
- return true;
- yoff++;
- }
- else if (yoff == ylim)
- while (xoff < xlim)
- {
- NOTE_DELETE (ctxt, xoff);
- if (EARLY_ABORT (ctxt))
- return true;
- xoff++;
- }
- else
- {
- struct partition part IF_LINT2 (= { .xmid = 0, .ymid = 0 });
+ /* Handle simple cases. */
+ if (xoff == xlim)
+ {
+ while (yoff < ylim)
+ {
+ NOTE_INSERT (ctxt, yoff);
+ if (EARLY_ABORT (ctxt))
+ return true;
+ yoff++;
+ }
+ break;
+ }
+ if (yoff == ylim)
+ {
+ while (xoff < xlim)
+ {
+ NOTE_DELETE (ctxt, xoff);
+ if (EARLY_ABORT (ctxt))
+ return true;
+ xoff++;
+ }
+ break;
+ }
+
+ struct partition part;
/* Find a point of correspondence in the middle of the vectors. */
diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt);
/* Use the partitions to split this problem into subproblems. */
- if (compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal, ctxt))
- return true;
- if (compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal, ctxt))
- return true;
+ OFFSET xoff1, xlim1, yoff1, ylim1, xoff2, xlim2, yoff2, ylim2;
+ bool find_minimal1, find_minimal2;
+ if (!NOTE_ORDERED
+ && ((xlim + ylim) - (part.xmid + part.ymid)
+ < (part.xmid + part.ymid) - (xoff + yoff)))
+ {
+ /* The second problem is smaller and the caller doesn't
+ care about order, so do the second problem first to
+ lessen recursion. */
+ xoff1 = part.xmid; xlim1 = xlim;
+ yoff1 = part.ymid; ylim1 = ylim;
+ find_minimal1 = part.hi_minimal;
+
+ xoff2 = xoff; xlim2 = part.xmid;
+ yoff2 = yoff; ylim2 = part.ymid;
+ find_minimal2 = part.lo_minimal;
+ }
+ else
+ {
+ xoff1 = xoff; xlim1 = part.xmid;
+ yoff1 = yoff; ylim1 = part.ymid;
+ find_minimal1 = part.lo_minimal;
+
+ xoff2 = part.xmid; xlim2 = xlim;
+ yoff2 = part.ymid; ylim2 = ylim;
+ find_minimal2 = part.hi_minimal;
+ }
+
+ /* Recurse to do one subproblem. */
+ bool early = compareseq (xoff1, xlim1, yoff1, ylim1, find_minimal1, ctxt);
+ if (early)
+ return early;
+
+ /* Iterate to do the other subproblem. */
+ xoff = xoff2; xlim = xlim2;
+ yoff = yoff2; ylim = ylim2;
+ find_minimal = find_minimal2;
}
return false;
diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in
index 7b4fc74219f..9953198fb31 100644
--- a/lib/gnulib.mk.in
+++ b/lib/gnulib.mk.in
@@ -136,6 +136,7 @@
# readlinkat \
# regex \
# sig2str \
+# sigdescr_np \
# socklen \
# stat-time \
# std-gnu11 \
@@ -424,7 +425,9 @@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
GNULIB_SELECT = @GNULIB_SELECT@
GNULIB_SETENV = @GNULIB_SETENV@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
GNULIB_SLEEP = @GNULIB_SLEEP@
@@ -439,6 +442,7 @@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
GNULIB_STRDUP = @GNULIB_STRDUP@
GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
GNULIB_STRFTIME = @GNULIB_STRFTIME@
GNULIB_STRNCAT = @GNULIB_STRNCAT@
@@ -644,7 +648,9 @@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
HAVE_SETENV = @HAVE_SETENV@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
@@ -657,6 +663,7 @@ HAVE_STPCPY = @HAVE_STPCPY@
HAVE_STPNCPY = @HAVE_STPNCPY@
HAVE_STRCASESTR = @HAVE_STRCASESTR@
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
@@ -960,6 +967,7 @@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
REPLACE_STRDUP = @REPLACE_STRDUP@
REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
REPLACE_STRFTIME = @REPLACE_STRFTIME@
REPLACE_STRNCAT = @REPLACE_STRNCAT@
@@ -2310,6 +2318,17 @@ EXTRA_libgnu_a_SOURCES += sig2str.c
endif
## end gnulib module sig2str
+## begin gnulib module sigdescr_np
+ifeq (,$(OMIT_GNULIB_MODULE_sigdescr_np))
+
+
+EXTRA_DIST += sigdescr_np.c
+
+EXTRA_libgnu_a_SOURCES += sigdescr_np.c
+
+endif
+## end gnulib module sigdescr_np
+
## begin gnulib module signal-h
ifeq (,$(OMIT_GNULIB_MODULE_signal-h))
@@ -2843,6 +2862,9 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
-e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
-e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GNULIB_STRERRORNAME_NP)/g' \
+ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \
+ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \
-e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
-e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
< $(srcdir)/string.in.h | \
@@ -2865,6 +2887,9 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
-e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
-e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \
+ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \
+ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \
-e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
-e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
-e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
@@ -2880,6 +2905,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
-e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
-e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \
-e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
diff --git a/lib/intprops.h b/lib/intprops.h
index f2f70b3e733..b27f2eea056 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -48,7 +48,7 @@
/* Minimum and maximum values for integer types and expressions. */
/* The width in bits of the integer type or expression T.
- Do not evaluate T.
+ Do not evaluate T. T must not be a bit-field expression.
Padding bits are not supported; this is checked at compile-time below. */
#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
@@ -70,7 +70,7 @@
? _GL_SIGNED_INT_MAXIMUM (e) \
: _GL_INT_NEGATE_CONVERT (e, 1))
#define _GL_SIGNED_INT_MAXIMUM(e) \
- (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
+ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1)
/* Work around OpenVMS incompatibility with C99. */
#if !defined LLONG_MAX && defined __INT64_MAX
@@ -95,8 +95,9 @@
#endif
/* Return 1 if the integer type or expression T might be signed. Return 0
- if it is definitely unsigned. This macro does not evaluate its argument,
- and expands to an integer constant expression. */
+ if it is definitely unsigned. T must not be a bit-field expression.
+ This macro does not evaluate its argument, and expands to an
+ integer constant expression. */
#if _GL_HAVE___TYPEOF__
# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
#else
@@ -109,6 +110,8 @@
#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
/* Bound on length of the string representing an integer type or expression T.
+ T must not be a bit-field expression.
+
Subtract 1 for the sign bit if T is signed, and then add 1 more for
a minus sign if needed.
@@ -120,7 +123,7 @@
+ _GL_SIGNED_TYPE_OR_EXPR (t))
/* Bound on buffer size needed to represent an integer type or expression T,
- including the terminating null. */
+ including the terminating null. T must not be a bit-field expression. */
#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
@@ -566,7 +569,7 @@
? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
? (a) < (tmax) / (b) \
: ((INT_NEGATE_OVERFLOW (b) \
- ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \
+ ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \
: (tmax) / -(b)) \
<= -1 - (a))) \
: INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \
diff --git a/lib/sig2str.c b/lib/sig2str.c
index 905daea2f20..cf7c3bb5c38 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -189,6 +189,11 @@ static struct numname { int num; char const name[8]; } numname_table[] =
NUMNAME (STKFLT),
#endif
+ /* AIX 7. */
+#ifdef SIGCPUFAIL
+ NUMNAME (CPUFAIL),
+#endif
+
/* AIX 5L. */
#ifdef SIGDANGER
NUMNAME (DANGER),
@@ -229,7 +234,12 @@ static struct numname { int num; char const name[8]; } numname_table[] =
NUMNAME (WINDOW), /* Older name for SIGWINCH. */
#endif
- /* BeOS */
+ /* OpenBSD. */
+#ifdef SIGTHR
+ NUMNAME (THR),
+#endif
+
+ /* BeOS, Haiku */
#ifdef SIGKILLTHR
NUMNAME (KILLTHR),
#endif
@@ -239,6 +249,11 @@ static struct numname { int num; char const name[8]; } numname_table[] =
NUMNAME (DIL),
#endif
+ /* native Windows */
+#ifdef SIGBREAK
+ NUMNAME (BREAK),
+#endif
+
/* Korn shell and Bash, of uncertain vintage. */
{ 0, "EXIT" }
};
diff --git a/lib/sigdescr_np.c b/lib/sigdescr_np.c
new file mode 100644
index 00000000000..fc9cd3c2369
--- /dev/null
+++ b/lib/sigdescr_np.c
@@ -0,0 +1,376 @@
+/* English descriptions of signals.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2020. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+#include <signal.h>
+
+const char *
+sigdescr_np (int sig)
+{
+ /* Note: Some platforms (glibc, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Haiku,
+ Android) have an array 'sys_siglist'. (On AIX, you need to declare it
+ yourself, and it has fewer than NSIG elements.) Its contents varies
+ depending on the OS.
+ On other OSes, you can invoke strsignal (sig) in the C locale.
+ In the code below, we show the differences.
+ You can see how cryptic some of these strings are. We try to pick more
+ understandable wordings. */
+
+ switch (sig)
+ {
+ /* Signals specified by ISO C. */
+ case SIGABRT:
+ /* glibc: "Aborted". *BSD: "Abort trap". Solaris: "Abort". */
+ return "Aborted";
+ case SIGFPE:
+ /* glibc, *BSD: "Floating point exception". Solaris: "Arithmetic exception".
+ The latter is more correct, because of integer division by 0 or -1. */
+ return "Arithmetic exception";
+ case SIGILL:
+ return "Illegal instruction";
+ case SIGINT:
+ return "Interrupt";
+ case SIGSEGV:
+ return "Segmentation fault";
+ case SIGTERM:
+ return "Terminated";
+
+ /* Signals specified by POSIX.
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html> */
+ #if defined SIGALRM
+ case SIGALRM:
+ return "Alarm clock";
+ #endif
+ #if defined SIGBUS
+ case SIGBUS:
+ return "Bus error";
+ #endif
+ #if defined SIGCHLD
+ case SIGCHLD:
+ /* glibc, *BSD: "Child exited". Solaris: "Child status changed". */
+ return "Child stopped or exited";
+ #endif
+ #if defined SIGCONT
+ case SIGCONT:
+ return "Continued";
+ #endif
+ #if defined SIGHUP
+ case SIGHUP:
+ return "Hangup";
+ #endif
+ #if defined SIGKILL
+ case SIGKILL:
+ return "Killed";
+ #endif
+ #if defined SIGPIPE
+ case SIGPIPE:
+ return "Broken pipe";
+ #endif
+ #if defined SIGQUIT
+ case SIGQUIT:
+ return "Quit";
+ #endif
+ #if defined SIGSTOP
+ case SIGSTOP:
+ /* glibc, Solaris: "Stopped (signal)". *BSD: "Suspended (signal)". */
+ return "Stopped (signal)";
+ #endif
+ #if defined SIGTSTP
+ case SIGTSTP:
+ /* glibc: "Stopped". *BSD: "Suspended". Solaris: "Stopped (user)". */
+ return "Stopped";
+ #endif
+ #if defined SIGTTIN
+ case SIGTTIN:
+ return "Stopped (tty input)";
+ #endif
+ #if defined SIGTTOU
+ case SIGTTOU:
+ return "Stopped (tty output)";
+ #endif
+ #if defined SIGUSR1
+ case SIGUSR1:
+ /* glibc, *BSD: "User defined signal 1". Solaris: "User signal 1". */
+ return "User defined signal 1";
+ #endif
+ #if defined SIGUSR2
+ case SIGUSR2:
+ /* glibc, *BSD: "User defined signal 2". Solaris: "User signal 2". */
+ return "User defined signal 2";
+ #endif
+ #if defined SIGPOLL
+ case SIGPOLL:
+ /* glibc: "I/O possible". Solaris: "Pollable event". */
+ return "I/O possible";
+ #endif
+ #if defined SIGPROF
+ case SIGPROF:
+ return "Profiling timer expired";
+ #endif
+ #if defined SIGSYS
+ case SIGSYS:
+ return "Bad system call";
+ #endif
+ #if defined SIGTRAP
+ case SIGTRAP:
+ /* glibc, Solaris: "Trace/breakpoint trap". *BSD: "Trace/BPT trap". */
+ return "Trace/breakpoint trap";
+ #endif
+ #if defined SIGURG
+ case SIGURG:
+ /* glibc, *BSD: "Urgent I/O condition". Solaris: "Urgent socket condition". */
+ return "Urgent I/O condition";
+ #endif
+ #if defined SIGVTALRM
+ case SIGVTALRM:
+ return "Virtual timer expired";
+ #endif
+ #if defined SIGXCPU
+ case SIGXCPU:
+ /* glibc, *BSD: "CPU time limit exceeded". Solaris: "Cpu limit exceeded". */
+ return "CPU time limit exceeded";
+ #endif
+ #if defined SIGXFSZ
+ case SIGXFSZ:
+ return "File size limit exceeded";
+ #endif
+
+ /* Other signals on other systems. */
+ /* native Windows */
+ #if defined SIGBREAK
+ case SIGBREAK:
+ return "Ctrl-Break";
+ #endif
+ /* IRIX */
+ #if defined SIGCKPT
+ case SIGCKPT:
+ return "Checkpoint"; /* See man 1 cpr, man 3C atcheckpoint */
+ #endif
+ /* Linux, IRIX, Cygwin */
+ #if defined SIGCLD && SIGCLD != SIGCHLD
+ case SIGCLD:
+ return "Child stopped or exited";
+ #endif
+ /* AIX */
+ #if defined SIGCPUFAIL
+ case SIGCPUFAIL:
+ /* AIX: "CPU failure predicted". */
+ return "CPU going down"; /* See man bindprocessor */
+ #endif
+ /* AIX */
+ #if defined SIGDANGER
+ case SIGDANGER:
+ /* AIX: "Paging space low". */
+ return "Swap space nearly exhausted";
+ #endif
+ /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */
+ #if defined SIGEMT
+ case SIGEMT:
+ /* glibc/Hurd, *BSD: "EMT trap". Solaris: "Emulation trap". */
+ return "Instruction emulation needed";
+ #endif
+ /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */
+ #if defined SIGINFO
+ case SIGINFO:
+ return "Information request";
+ #endif
+ /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin */
+ #if defined SIGIO && SIGIO != SIGPOLL
+ case SIGIO:
+ return "I/O possible";
+ #endif
+ /* Linux, IRIX, Cygwin, mingw */
+ #if defined SIGIOT && SIGIOT != SIGABRT
+ case SIGIOT:
+ return "IOT instruction"; /* a PDP-11 instruction */
+ #endif
+ /* AIX */
+ #if defined SIGKAP
+ case SIGKAP:
+ /* Process must issue a KSKAPACK ioctl, or will be killed in 30 seconds. */
+ /* AIX: "Monitor mode granted". */
+ return "Keep Alive Poll";
+ #endif
+ /* Haiku */
+ #if defined SIGKILLTHR
+ case SIGKILLTHR:
+ return "Kill thread";
+ #endif
+ /* Minix */
+ #if defined SIGKMEM
+ case SIGKMEM:
+ return "Kernel memory request";
+ #endif
+ /* Minix */
+ #if defined SIGKMESS
+ case SIGKMESS:
+ return "Kernel message";
+ #endif
+ /* Minix */
+ #if defined SIGKSIG
+ case SIGKSIG:
+ return "Kernel signal";
+ #endif
+ /* Minix */
+ #if defined SIGKSIGSM
+ case SIGKSIGSM:
+ return "Kernel signal for signal manager";
+ #endif
+ /* FreeBSD */
+ #if defined SIGLIBRT
+ case SIGLIBRT:
+ return "Real-time library interrupt";
+ #endif
+ /* Cygwin */
+ #if defined SIGLOST && SIGLOST != SIGABRT && SIGLOST != SIGPWR
+ case SIGLOST:
+ /* Solaris: "Resource lost". */
+ return "File lock lost";
+ #endif
+ /* AIX */
+ #if defined SIGMIGRATE
+ case SIGMIGRATE:
+ return "Process migration";
+ #endif
+ /* AIX */
+ #if defined SIGMSG
+ case SIGMSG:
+ /* AIX: "Input device data". */
+ return "Message in the ring";
+ #endif
+ /* ACM */
+ #if defined SIGPLAN
+ case SIGPLAN:
+ return "Programming language anomaly";
+ #endif
+ /* AIX */
+ #if defined SIGPRE
+ case SIGPRE:
+ return "Programmed exception";
+ #endif
+ /* IRIX */
+ #if defined SIGPTINTR
+ case SIGPTINTR:
+ return "Pthread interrupt";
+ #endif
+ /* IRIX */
+ #if defined SIGPTRESCHED
+ case SIGPTRESCHED:
+ return "Pthread rescheduling";
+ #endif
+ /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */
+ #if defined SIGPWR
+ case SIGPWR:
+ /* glibc: "Power failure". NetBSD: "Power fail/restart". */
+ return "Power failure";
+ #endif
+ /* AIX */
+ #if defined SIGRECONFIG
+ case SIGRECONFIG:
+ return "Dynamic logical partitioning changed";
+ #endif
+ /* AIX */
+ #if defined SIGRECOVERY
+ case SIGRECOVERY:
+ return "Kernel recovery";
+ #endif
+ /* IRIX */
+ #if defined SIGRESTART
+ case SIGRESTART:
+ return "Checkpoint restart"; /* See man 1 cpr, man 3C atrestart */
+ #endif
+ /* AIX */
+ #if defined SIGRETRACT
+ case SIGRETRACT:
+ /* AIX: "Monitor mode retracted". */
+ return "Retracting Keep Alive Poll";
+ #endif
+ /* AIX */
+ #if defined SIGSAK
+ case SIGSAK:
+ /* AIX: "Secure attention". */
+ return "Secure Attention Key";
+ #endif
+ /* ACM */
+ #if defined SIGSAM
+ case SIGSAM:
+ return "Symbolic computation failed";
+ #endif
+ /* Minix */
+ #if defined SIGSNDELAY
+ case SIGSNDELAY:
+ return "Done sending message";
+ #endif
+ /* AIX */
+ #if defined SIGSOUND
+ case SIGSOUND:
+ /* AIX: "Sound completed". */
+ return "Sound configuration changed";
+ #endif
+ /* Linux */
+ #if defined SIGSTKFLT
+ case SIGSTKFLT:
+ return "Stack fault";
+ #endif
+ /* AIX */
+ #if defined SIGSYSERROR
+ case SIGSYSERROR:
+ return "Kernel error";
+ #endif
+ /* AIX */
+ #if defined SIGTALRM
+ case SIGTALRM:
+ return "Thread alarm clock";
+ #endif
+ /* FreeBSD, OpenBSD */
+ #if defined SIGTHR
+ case SIGTHR:
+ /* OpenBSD: "Thread AST". */
+ return "Thread library interrupt";
+ #endif
+ /* IRIX */
+ #if defined SIGUME
+ case SIGUME:
+ return "Uncorrectable memory error";
+ #endif
+ /* AIX */
+ #if defined SIGVIRT
+ case SIGVIRT:
+ return "Virtual time alarm clock";
+ #endif
+ /* AIX */
+ #if defined SIGWAITING
+ case SIGWAITING:
+ /* AIX: "No runnable lwp". */
+ return "Thread waiting";
+ #endif
+ /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, Haiku */
+ #if defined SIGWINCH
+ case SIGWINCH:
+ /* glibc: "Window changed". *BSD: "Window size changed" or "Window size changes". */
+ return "Window size changed";
+ #endif
+
+ default:
+ return NULL;
+ }
+}
diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h
index e4809b401f7..b5b63e53f12 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -54,10 +54,12 @@
#undef _Alignof
/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023
- <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
+ clang versions < 8.0.0 have the same bug. */
#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
|| (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
- && !defined __clang__))
+ && !defined __clang__) \
+ || (defined __clang__ && __clang_major__ < 8))
# ifdef __cplusplus
# if 201103 <= __cplusplus
# define _Alignof(type) alignof (type)
diff --git a/lib/string.in.h b/lib/string.in.h
index 7d83668f6ec..9724addef43 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1045,6 +1045,60 @@ _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
# endif
#endif
+/* Return the name of the system error code ERRNUM. */
+#if @GNULIB_STRERRORNAME_NP@
+# if @REPLACE_STRERRORNAME_NP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strerrorname_np
+# define strerrorname_np rpl_strerrorname_np
+# endif
+_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum));
+_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum));
+# else
+# if !@HAVE_STRERRORNAME_NP@
+_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum));
+# endif
+_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum));
+# endif
+_GL_CXXALIASWARN (strerrorname_np);
+#elif defined GNULIB_POSIXCHECK
+# undef strerrorname_np
+# if HAVE_RAW_DECL_STRERRORNAME_NP
+_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - "
+ "use gnulib module strerrorname_np for portability");
+# endif
+#endif
+
+/* Return an abbreviation string for the signal number SIG. */
+#if @GNULIB_SIGABBREV_NP@
+# if ! @HAVE_SIGABBREV_NP@
+_GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig));
+# endif
+_GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig));
+_GL_CXXALIASWARN (sigabbrev_np);
+#elif defined GNULIB_POSIXCHECK
+# undef sigabbrev_np
+# if HAVE_RAW_DECL_SIGABBREV_NP
+_GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - "
+ "use gnulib module sigabbrev_np for portability");
+# endif
+#endif
+
+/* Return an English description string for the signal number SIG. */
+#if @GNULIB_SIGDESCR_NP@
+# if ! @HAVE_SIGDESCR_NP@
+_GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig));
+# endif
+_GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig));
+_GL_CXXALIASWARN (sigdescr_np);
+#elif defined GNULIB_POSIXCHECK
+# undef sigdescr_np
+# if HAVE_RAW_DECL_SIGDESCR_NP
+_GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - "
+ "use gnulib module sigdescr_np for portability");
+# endif
+#endif
+
#if @GNULIB_STRSIGNAL@
# if @REPLACE_STRSIGNAL@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/lib/verify.h b/lib/verify.h
index d485a0283a9..fa1ed717d0e 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -307,10 +307,10 @@ template <int w>
diagnostics, performance can suffer if R uses hard-to-optimize
features such as function calls not inlined by the compiler.
- Avoid Clang’s __builtin_assume, as clang 9.0.1 -Wassume can
- generate a bogus diagnostic "the argument to '__builtin_assume' has
- side effects that will be discarded" even when the argument has no
- side effects. */
+ Avoid Clang's __builtin_assume, as it breaks GNU Emacs master
+ as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see
+ <https://bugs.gnu.org/43152#71>. It's not known whether this breakage
+ is a Clang bug or an Emacs bug; play it safe for now. */
#if _GL_HAS_BUILTIN_UNREACHABLE
# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 468b0d995b3..be6f9ee3437 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -209,8 +209,7 @@ it defaults to the value of `abbrev-file-name'.
Optional second argument QUIETLY non-nil means don't display a message."
(interactive
(list
- (read-file-name (format "Read abbrev file (default %s): "
- abbrev-file-name)
+ (read-file-name (format-prompt "Read abbrev file" abbrev-file-name)
nil abbrev-file-name t)))
(load (or file abbrev-file-name) nil quietly)
(setq abbrevs-changed nil))
diff --git a/lisp/allout.el b/lisp/allout.el
index 05d9153a31d..955b7000cbf 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -62,8 +62,7 @@
;; The outline menubar additions provide quick reference to many of the
;; features. See the docstring of the variables `allout-layout' and
;; `allout-auto-activation' for details on automatic activation of
-;; `allout-mode' as a minor mode. (`allout-init' is deprecated in favor of
-;; a purely customization-based method.)
+;; `allout-mode' as a minor mode.
;;
;; Note -- the lines beginning with `;;;_' are outline topic headers.
;; Customize `allout-auto-activation' to enable, then revisit this
@@ -1627,18 +1626,6 @@ non-nil in a lasting way.")
"If t, `allout-mode's last deactivation was deliberate.
So `allout-post-command-business' should not reactivate it...")
(make-variable-buffer-local 'allout-explicitly-deactivated)
-;;;_ > allout-init (mode)
-(defun allout-init (mode)
- "DEPRECATED - configure allout activation by customizing
-`allout-auto-activation'. This function remains around, limited
-from what it did before, for backwards compatibility.
-
-MODE is the activation mode - see `allout-auto-activation' for
-valid values."
- (declare (obsolete allout-auto-activation "23.3"))
- (customize-set-variable 'allout-auto-activation (format "%s" mode))
- (format "%s" mode))
-
;;;_ > allout-setup-menubar ()
(defun allout-setup-menubar ()
"Populate the current buffer's menubar with `allout-mode' stuff."
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index 7a0e09b9e8e..50795ce7946 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -2073,7 +2073,9 @@ entries for git.gnus.org:
(setcar
(cdr secret)
(let ((v (car (cdr secret))))
- (lambda () v))))
+ (if (functionp v)
+ (lambda () (funcall v plist))
+ (lambda () v)))))
plist))
items))
;; ensure each item has each key in `returned-keys'
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 8a3bcf8e59d..dcb03adadd8 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -803,7 +803,7 @@ still there, in order, if the topmost one is ever deleted."
(let ((str
(or name
(read-from-minibuffer
- (format "%s (default %s): " prompt default)
+ (format-prompt prompt default)
nil
bookmark-minibuffer-read-name-map
nil nil defaults))))
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index e9083b84c61..33fd1af6ffb 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -126,8 +126,8 @@
(defun calc-word-size (n)
(interactive "P")
(calc-wrapper
- (or n (setq n (read-string (format "Binary word size: (default %d) "
- calc-word-size))))
+ (or n (setq n (read-string (format-prompt "Binary word size"
+ calc-word-size))))
(setq n (if (stringp n)
(if (equal n "")
calc-word-size
diff --git a/lisp/calc/calc-store.el b/lisp/calc/calc-store.el
index 5282b834021..79e6cf5c00c 100644
--- a/lisp/calc/calc-store.el
+++ b/lisp/calc/calc-store.el
@@ -428,11 +428,11 @@
(defun calc-edit-variable (&optional var)
(interactive)
(calc-wrapper
- (or var (setq var (calc-read-var-name
- (if calc-last-edited-variable
- (format "Edit (default %s): "
- (calc-var-name calc-last-edited-variable))
- "Edit: "))))
+ (unless var
+ (setq var (calc-read-var-name
+ (format-prompt "Edit" (and calc-last-edited-variable
+ (calc-var-name
+ calc-last-edited-variable))))))
(or var (setq var calc-last-edited-variable))
(if var
(let* ((value (calc-var-value var)))
diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el
index 67183fb754a..75e691a28ff 100644
--- a/lisp/calc/calcalg3.el
+++ b/lisp/calc/calcalg3.el
@@ -470,17 +470,19 @@
(setq defv (calc-invent-independent-variables nv)))
(or defc
(setq defc (calc-invent-parameter-variables nc defv)))
- (let ((vars (read-string (format "Fitting variables (default %s; %s): "
- (mapconcat 'symbol-name
- (mapcar (function (lambda (v)
- (nth 1 v)))
- defv)
- ",")
- (mapconcat 'symbol-name
- (mapcar (function (lambda (v)
- (nth 1 v)))
- defc)
- ","))))
+ (let ((vars (read-string (format-prompt
+ "Fitting variables"
+ (format "%s; %s)"
+ (mapconcat 'symbol-name
+ (mapcar (function (lambda (v)
+ (nth 1 v)))
+ defv)
+ ",")
+ (mapconcat 'symbol-name
+ (mapcar (function (lambda (v)
+ (nth 1 v)))
+ defc)
+ ",")))))
(coefs nil))
(setq vars (if (string-match "\\[" vars)
(math-read-expr vars)
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index d76c1105031..dab277487e2 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -515,9 +515,10 @@ The strings are suitable for assembling into a TZ variable."
(let* ((offsetto (car (cddr (assq 'TZOFFSETTO alist))))
(offsetfrom (car (cddr (assq 'TZOFFSETFROM alist))))
(rrule-value (car (cddr (assq 'RRULE alist))))
+ (rdate-p (and (assq 'RDATE alist) t))
(dtstart (car (cddr (assq 'DTSTART alist))))
- (no-dst (equal offsetto offsetfrom)))
- ;; FIXME: for now we only handle RRULE and not RDATE here.
+ (no-dst (or rdate-p (equal offsetto offsetfrom))))
+ ;; FIXME: the presence of an RDATE is assumed to denote the first day of the year
(when (and offsetto dtstart (or rrule-value no-dst))
(let* ((rrule (icalendar--split-value rrule-value))
(freq (cadr (assq 'FREQ rrule)))
@@ -561,12 +562,13 @@ The strings are suitable for assembling into a TZ variable."
(defun icalendar--parse-vtimezone (alist)
"Turn a VTIMEZONE ALIST into a cons (ID . TZ-STRING).
+Consider only the most recent date specification.
Return nil if timezone cannot be parsed."
(let* ((tz-id (icalendar--convert-string-for-import
(icalendar--get-event-property alist 'TZID)))
- (daylight (cadr (cdar (icalendar--get-children alist 'DAYLIGHT))))
+ (daylight (cadr (cdar (icalendar--get-most-recent-observance alist 'DAYLIGHT))))
(day (and daylight (icalendar--convert-tz-offset daylight t)))
- (standard (cadr (cdar (icalendar--get-children alist 'STANDARD))))
+ (standard (cadr (cdar (icalendar--get-most-recent-observance alist 'STANDARD))))
(std (and standard (icalendar--convert-tz-offset standard nil))))
(if (and tz-id std)
(cons tz-id
@@ -575,6 +577,28 @@ Return nil if timezone cannot be parsed."
"," (cdr day) "," (cdr std))
(car std))))))
+(defun icalendar--get-most-recent-observance (alist sub-comp)
+ "Return the latest observance for SUB-COMP DAYLIGHT or STANDARD.
+ALIST is a VTIMEZONE potentially containing historical records."
+;FIXME?: "most recent" should be relative to a given date
+ (let ((components (icalendar--get-children alist sub-comp)))
+ (list
+ (car
+ (sort components
+ #'(lambda (a b)
+ (let* ((get-recent (lambda (n)
+ (car
+ (sort
+ (delq nil
+ (mapcar (lambda (p)
+ (and (memq (car p) '(DTSTART RDATE))
+ (car (cddr p))))
+ n))
+ 'string-greaterp))))
+ (a-recent (funcall get-recent (car (cddr a))))
+ (b-recent (funcall get-recent (car (cddr b)))))
+ (string-greaterp a-recent b-recent))))))))
+
(defun icalendar--convert-all-timezones (icalendar)
"Convert all timezones in the ICALENDAR into an alist.
Each element of the alist is a cons (ID . TZ-STRING),
@@ -594,15 +618,18 @@ ZONE-MAP is a timezone alist as returned by `icalendar--convert-all-timezones'."
(cdr (assoc id zone-map)))))
(defun icalendar--decode-isodatetime (isodatetimestring &optional day-shift
- zone)
+ source-zone
+ result-zone)
"Return ISODATETIMESTRING in format like `decode-time'.
Converts from ISO-8601 to Emacs representation. If
ISODATETIMESTRING specifies UTC time (trailing letter Z) the
decoded time is given in the local time zone! If optional
parameter DAY-SHIFT is non-nil the result is shifted by DAY-SHIFT
days.
-ZONE, if provided, is the timezone, in any format understood by `encode-time'.
-
+SOURCE-ZONE, if provided, is the timezone for decoding the time,
+in any format understood by `encode-time'.
+RESULT-ZONE, if provided, is the timezone for encoding the result
+in any format understood by `decode-time'.
FIXME: multiple comma-separated values should be allowed!"
(icalendar--dmsg isodatetimestring)
(if isodatetimestring
@@ -624,7 +651,10 @@ FIXME: multiple comma-separated values should be allowed!"
(when (and (> (length isodatetimestring) 15)
;; UTC specifier present
(char-equal ?Z (aref isodatetimestring 15)))
- (setq zone t))
+ (setq source-zone t
+ ;; decode to local time unless result-zone is explicitly given,
+ ;; i.e. do not decode to UTC, i.e. do not (setq result-zone t)
+ ))
;; shift if necessary
(if day-shift
(let ((mdy (calendar-gregorian-from-absolute
@@ -637,9 +667,9 @@ FIXME: multiple comma-separated values should be allowed!"
;; create the decoded date-time
;; FIXME!?!
(let ((decoded-time (list second minute hour day month year
- nil -1 zone)))
+ nil -1 source-zone)))
(condition-case nil
- (decode-time (encode-time decoded-time))
+ (decode-time (encode-time decoded-time) result-zone)
(error
(message "Cannot decode \"%s\"" isodatetimestring)
;; Hope for the best....
@@ -685,9 +715,9 @@ FIXME: multiple comma-separated values should be allowed!"
(setq days (1- days))))
((match-beginning 4) ;days and time
(if (match-beginning 5)
- (setq days (* 7 (read (substring isodurationstring
- (match-beginning 6)
- (match-end 6))))))
+ (setq days (read (substring isodurationstring
+ (match-beginning 6)
+ (match-end 6)))))
(if (match-beginning 7)
(setq hours (read (substring isodurationstring
(match-beginning 8)
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index 125f9acc705..638d8c1f884 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -401,10 +401,10 @@ changes in daylight saving time are not taken into account."
(when (decoded-time-year delta)
(cl-incf (decoded-time-year time) (decoded-time-year delta)))
- ;; Months are pretty simple.
+ ;; Months are pretty simple, but start at 1 (for January).
(when (decoded-time-month delta)
- (let ((new (+ (decoded-time-month time) (decoded-time-month delta))))
- (setf (decoded-time-month time) (mod new 12))
+ (let ((new (+ (1- (decoded-time-month time)) (decoded-time-month delta))))
+ (setf (decoded-time-month time) (1+ (mod new 12)))
(cl-incf (decoded-time-year time) (/ new 12))))
;; Adjust for month length (as described in the doc string).
diff --git a/lisp/calendar/timeclock.el b/lisp/calendar/timeclock.el
index d12feaae8c3..2ee1d34bf15 100644
--- a/lisp/calendar/timeclock.el
+++ b/lisp/calendar/timeclock.el
@@ -597,9 +597,9 @@ arguments of `completing-read'."
(defun timeclock-ask-for-project ()
"Ask the user for the project they are clocking into."
(completing-read
- (format "Clock into which project (default %s): "
- (or timeclock-last-project
- (car timeclock-project-list)))
+ (format-prompt "Clock into which project"
+ (or timeclock-last-project
+ (car timeclock-project-list)))
timeclock-project-list
nil nil nil nil
(or timeclock-last-project
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index a49f428a3c8..0e4446f77de 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1937,11 +1937,13 @@ their associated keys and their effects."
(find-file-noselect file 'nowarn)
(set-window-buffer (selected-window)
(set-buffer (find-buffer-visiting file)))
- ;; If this command was invoked outside of a Todo mode buffer,
- ;; the call to todo-current-category above returned nil. If
- ;; we just entered Todo mode now, then cat was set to the
- ;; file's first category, but if todo-mode was already
- ;; enabled, cat did not get set, so we have to do that.
+ ;; If FILE is not in Todo mode, set it now, which also sets
+ ;; CAT to the file's first category.
+ (unless (derived-mode-p 'todo-mode) (todo-mode))
+ ;; But if FILE was already in todo-mode and the item insertion
+ ;; command was invoked outside of a Todo mode buffer, the
+ ;; above calls to todo-current-category returned nil, so we
+ ;; have to explicitly set CAT to the current category.
(unless cat
(setq cat (todo-current-category)))
(setq todo-current-todo-file file)
@@ -2169,7 +2171,9 @@ the item at point."
(if comment-delete
(when (todo-y-or-n-p "Delete comment? ")
(delete-region (match-beginning 0) (match-end 0)))
- (replace-match (read-string prompt (cons (match-string 1) 1))
+ (replace-match (save-match-data
+ (read-string prompt
+ (cons (match-string 1) 1)))
nil nil nil 1))
(if comment-delete
(user-error "There is no comment to delete")
@@ -2348,25 +2352,35 @@ made in the number or names of categories."
((or (string= omonth "*") (= mm 13))
(user-error "Cannot increment *"))
(t
- (let ((mminc (+ mm inc (if (< inc 0) 12 0))))
- ;; Increment or decrement month by INC
- ;; modulo 12.
- (setq mm (% mminc 12))
- ;; If result is 0, make month December.
- (setq mm (if (= mm 0) 12 (abs mm)))
+ (let* ((mmo mm)
+ ;; Change by 12 or more months?
+ (bigincp (>= (abs inc) 12))
+ ;; Month number is in range 1..12.
+ (mminc (+ mm (% inc 12)))
+ (mm (% (+ mminc 12) 12))
+ ;; 12n mod 12 = 0, so 0 is December.
+ (mm (if (= mm 0) 12 mm))
+ ;; Does change in month cross year?
+ (mmcmp (cond ((< inc 0) (> mm mmo))
+ ((> inc 0) (< mm mmo))))
+ (yyadjust (if bigincp
+ (+ (abs (/ inc 12))
+ (if mmcmp 1 0))
+ 1)))
;; Adjust year if necessary.
- (setq year (or (and (cond ((> mminc 12)
- (+ yy (/ mminc 12)))
- ((< mminc 1)
- (- yy (/ mminc 12) 1))
- (t yy))
- (number-to-string yy))
- oyear)))
- ;; Return the changed numerical month as
- ;; a string or the corresponding month name.
- (if omonth
- (number-to-string mm)
- (aref tma-array (1- mm))))))
+ (setq yy (cond ((and (< inc 0)
+ (or mmcmp bigincp))
+ (- yy yyadjust))
+ ((and (> inc 0)
+ (or mmcmp bigincp))
+ (+ yy yyadjust))
+ (t yy)))
+ (setq year (number-to-string yy))
+ ;; Return the changed numerical month as
+ ;; a string or the corresponding month name.
+ (if omonth
+ (number-to-string mm)
+ (aref tma-array (1- mm)))))))
;; Since the number corresponding to the arbitrary
;; month name "*" is out of the range of
;; calendar-last-day-of-month, set it to 1
@@ -5923,8 +5937,15 @@ categories from `todo-category-completions-files'."
(todo-absolute-file-name
(let ((files (mapcar #'todo-short-file-name catfil)))
(completing-read (format str cat) files)))))))
- ;; Default to the current file.
- (unless file0 (setq file0 todo-current-todo-file))
+ ;; When called without arg FILE, use fallback todo file.
+ (unless file0 (setq file0 (or todo-current-todo-file
+ ;; If we're outside of todo-mode
+ ;; but there is a current todo
+ ;; file, use it.
+ todo-global-current-todo-file
+ ;; Else, use the default todo file.
+ (todo-absolute-file-name
+ todo-default-todo-file))))
;; First validate only a name passed interactively from
;; todo-add-category, which must be of a nonexistent category.
(unless (and (assoc cat categories) (not add))
@@ -6419,8 +6440,7 @@ Filtered Items mode following todo (not done) items."
("i" todo-insert-item)
("k" todo-delete-item)
("m" todo-move-item)
- ("u" todo-item-undone)
- ([remap newline] newline-and-indent))
+ ("u" todo-item-undone))
"List of key bindings for Todo mode only.")
(defvar todo-key-bindings-t+a+f
@@ -6486,7 +6506,6 @@ Filtered Items mode following todo (not done) items."
(defvar todo-edit-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-x\C-q" 'todo-edit-quit)
- (define-key map [remap newline] 'newline-and-indent)
map)
"Todo Edit mode keymap.")
@@ -6645,7 +6664,6 @@ Added to `window-configuration-change-hook' in Todo mode."
(setq-local font-lock-defaults '(todo-font-lock-keywords t))
(setq-local revert-buffer-function #'todo-revert-buffer)
(setq-local tab-width todo-indent-to-here)
- (setq-local indent-line-function #'todo-indent)
(when todo-wrap-lines
(visual-line-mode)
(setq wrap-prefix (make-string todo-indent-to-here 32))))
@@ -6720,6 +6738,7 @@ Added to `window-configuration-change-hook' in Todo mode."
\\{todo-edit-mode-map}"
(todo-modes-set-1)
+ (setq-local indent-line-function #'todo-indent)
(if (> (buffer-size) (- (point-max) (point-min)))
;; Editing one item in an indirect buffer, so buffer-file-name is nil.
(setq-local todo-current-todo-file todo-global-current-todo-file)
diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el
index 604fc40926c..44cce389cb3 100644
--- a/lisp/cedet/data-debug.el
+++ b/lisp/cedet/data-debug.el
@@ -38,7 +38,7 @@
;; "Calculate something complicated at point, and return it."
;; (interactive) ;; function not normally interactive
;; (let ((stuff (do-stuff)))
-;; (when (interactive-p)
+;; (when (called-interactively-p 'interactive)
;; (data-debug-show-stuff stuff "myStuff"))
;; stuff))
diff --git a/lisp/comint.el b/lisp/comint.el
index 092902d865e..b4ea232767c 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2423,11 +2423,13 @@ Security bug: your string can still be temporarily recovered with
(defun comint-watch-for-password-prompt (string)
"Prompt in the minibuffer for password and send without echoing.
Looks for a match to `comint-password-prompt-regexp' in order
-to detect the need to (prompt and) send a password.
+to detect the need to (prompt and) send a password. Ignores any
+carriage returns (\\r) in STRING.
This function could be in the list `comint-output-filter-functions'."
(when (let ((case-fold-search t))
- (string-match comint-password-prompt-regexp string))
+ (string-match comint-password-prompt-regexp
+ (replace-regexp-in-string "\r" "" string)))
(when (string-match "^[ \n\r\t\v\f\b\a]+" string)
(setq string (replace-match "" t t string)))
(let ((comint--prompt-recursion-depth (1+ comint--prompt-recursion-depth)))
@@ -3450,7 +3452,7 @@ the completions."
(eq (window-buffer (posn-window (event-start first)))
(get-buffer "*Completions*"))
(memq (key-binding key)
- '(mouse-choose-completion choose-completion))))
+ '(choose-completion))))
;; If the user does choose-completion with the mouse,
;; execute the command, then delete the completion window.
(progn
diff --git a/lisp/completion.el b/lisp/completion.el
index b2864746fc7..ed13455b711 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -1276,11 +1276,7 @@ String must be longer than `completion-prefix-min-length'."
(defun interactive-completion-string-reader (prompt)
(let* ((default (symbol-under-or-before-point))
- (new-prompt
- (if default
- (format "%s (default %s): " prompt default)
- (format "%s: " prompt)))
- (read (completing-read new-prompt cmpl-obarray)))
+ (read (completing-read (format-prompt prompt default) cmpl-obarray)))
(if (zerop (length read)) (setq read (or default "")))
(list read)))
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 23ceb3a857a..cb1a78d8e20 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -485,10 +485,8 @@ Return a list suitable for use in `interactive'."
(default (and (symbolp v) (custom-variable-p v) (symbol-name v)))
(enable-recursive-minibuffers t)
val)
- (setq val (completing-read
- (if default (format "Customize variable (default %s): " default)
- "Customize variable: ")
- obarray 'custom-variable-p t nil nil default))
+ (setq val (completing-read (format-prompt "Customize variable" default)
+ obarray 'custom-variable-p t nil nil default))
(list (if (equal val "")
(if (symbolp v) v nil)
(intern val)))))
@@ -561,7 +559,7 @@ value unless you are sure you know what it does."
(unless no-suffix
(goto-char (point-max))
(insert "..."))
- (buffer-string)))))
+ (propertize (buffer-string) 'custom-data symbol)))))
(defcustom custom-unlispify-tag-names t
"Display tag names as words instead of symbols if non-nil."
@@ -1084,9 +1082,7 @@ for the MODE to customize."
(if (and group (not current-prefix-arg))
major-mode
(intern
- (completing-read (if group
- (format "Mode (default %s): " major-mode)
- "Mode: ")
+ (completing-read (format-prompt "Mode" (and group major-mode))
obarray
'custom-group-of-mode
t nil nil (if group (symbol-name major-mode))))))))
@@ -1219,8 +1215,8 @@ that were added or redefined since that version."
(interactive
(list
(read-from-minibuffer
- (format "Customize options changed, since version (default %s): "
- customize-changed-options-previous-release))))
+ (format-prompt "Customize options changed, since version"
+ customize-changed-options-previous-release))))
(if (equal since-version "")
(setq since-version nil)
(unless (condition-case nil
@@ -2685,7 +2681,7 @@ try matching its doc string against `custom-guess-doc-alist'."
:sample-face (if obsolete
'custom-variable-obsolete
'custom-variable-tag)
- tag)
+ :tag tag)
buttons)
(push (widget-create-child-and-convert
widget type
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 6632687da47..f5b70e082a5 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -98,6 +98,11 @@
(ctl-arrow display boolean)
(truncate-lines display boolean)
(word-wrap display boolean)
+ (word-wrap-by-category
+ display boolean "28.1"
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (when value (require 'kinsoku))))
(selective-display-ellipses display boolean)
(indicate-empty-lines fringe boolean)
(indicate-buffer-boundaries
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index b0decfe7b72..dc463e05f92 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -419,14 +419,13 @@ It includes all variables in list VARS."
(widget-value child)
;; Child is null if the widget is closed (hidden).
(car (widget-get widget :shown-value)))))
- (when (boundp symbol)
- (unless (bolp)
- (princ "\n"))
- (princ " '(")
- (prin1 symbol)
- (princ " ")
- (prin1 (custom-quote value))
- (princ ")")))))
+ (unless (bolp)
+ (princ "\n"))
+ (princ " '(")
+ (prin1 symbol)
+ (princ " ")
+ (prin1 (custom-quote value))
+ (princ ")"))))
(if (bolp)
(princ " "))
(princ ")")
@@ -454,7 +453,7 @@ It includes all faces in list FACES."
;; Child is null if the widget is closed (hidden).
((widget-get widget :shown-value))
(t (custom-face-get-current-spec symbol)))))
- (when (and (facep symbol) value)
+ (when value
(princ (if (bolp) " '(" "\n '("))
(prin1 symbol)
(princ " ")
diff --git a/lisp/custom.el b/lisp/custom.el
index db7f6a056d4..cc445fe765b 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -758,6 +758,9 @@ Return non-nil if the `customized-value' property actually changed."
(progn (put symbol 'customized-value (list (custom-quote value)))
(custom-push-theme 'theme-value symbol 'user 'set
(custom-quote value)))
+ (custom-push-theme 'theme-value symbol 'user
+ (if (get symbol 'saved-value) 'set 'reset)
+ (custom-quote value))
(put symbol 'customized-value nil))
;; Changed?
(not (equal customized (get symbol 'customized-value)))))
@@ -904,7 +907,15 @@ See `custom-known-themes' for a list of known themes."
(boundp symbol))
(let ((sv (get symbol 'standard-value))
(val (symbol-value symbol)))
- (unless (and sv (equal (eval (car sv)) val))
+ (unless (or
+ ;; We only do this trick if the current value
+ ;; is different from the standard value.
+ (and sv (equal (eval (car sv)) val))
+ ;; And we don't do it if we would end up recording
+ ;; the same value for the user theme. This way we avoid
+ ;; having ((user VALUE) (changed VALUE)). That would be
+ ;; useless, because we don't disable the user theme.
+ (and (eq theme 'user) (equal (custom-quote val) value)))
(setq old `((changed ,(custom-quote val))))))))
(put symbol prop (cons (list theme value) old)))
(put theme 'theme-settings
@@ -1365,13 +1376,14 @@ function runs. To disable other themes, use `disable-theme'."
obarray (lambda (sym) (get sym 'theme-settings)) t))))
(unless (custom-theme-p theme)
(error "Undefined Custom theme %s" theme))
- (let ((settings (get theme 'theme-settings)))
+ (let ((settings (get theme 'theme-settings)) ; '(prop symbol theme value)
+ ;; We are enabling the theme, so don't inhibit enabling it. (Bug#34027)
+ (custom--inhibit-theme-enable nil))
;; Loop through theme settings, recalculating vars/faces.
(dolist (s settings)
(let* ((prop (car s))
- (symbol (cadr s))
- (spec-list (get symbol prop)))
- (put symbol prop (cons (cddr s) (assq-delete-all theme spec-list)))
+ (symbol (cadr s)))
+ (custom-push-theme prop symbol theme 'set (nth 3 s))
(cond
((eq prop 'theme-face)
(custom-theme-recalc-face symbol))
@@ -1440,7 +1452,7 @@ See `custom-enabled-themes' for a list of enabled themes."
(let* ((prop (car s))
(symbol (cadr s))
(val (assq-delete-all theme (get symbol prop))))
- (put symbol prop val)
+ (custom-push-theme prop symbol theme 'reset)
(cond
((eq prop 'theme-value)
(custom-theme-recalc-variable symbol))
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index c197ed04fe2..3ee877ee8de 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -134,16 +134,27 @@ the string of command switches used as the third argument of `diff'."
(file-name-directory default)
(dired-current-directory))
(dired-dwim-target-directory)))
- (defaults (dired-dwim-target-defaults (list current) target-dir)))
+ (defaults (append
+ (if (backup-file-name-p current)
+ ;; This is a backup file -- put the other
+ ;; main file, and the other backup files into
+ ;; the `M-n' list.
+ (delete (expand-file-name current)
+ (cons (expand-file-name
+ (file-name-sans-versions current))
+ (file-backup-file-names
+ (file-name-sans-versions current))))
+ ;; Non-backup file -- use the backup files as
+ ;; `M-n' candidates.
+ (file-backup-file-names current))
+ (dired-dwim-target-defaults (list current) target-dir))))
(list
(minibuffer-with-setup-hook
(lambda ()
(set (make-local-variable 'minibuffer-default-add-function) nil)
(setq minibuffer-default defaults))
- (read-file-name
- (format "Diff %s with%s: " current
- (if default (format " (default %s)" default) ""))
- target-dir default t))
+ (read-file-name (format-prompt "Diff %s with" default current)
+ target-dir default t))
(if current-prefix-arg
(read-string "Options for diff: "
(if (stringp diff-switches)
@@ -1536,17 +1547,13 @@ files matching `dired-omit-regexp'."
;;;###autoload
(defun dired-remove-file (file)
+ "Remove entry FILE on each dired buffer.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
(dired-fun-in-all-buffers
(file-name-directory file) (file-name-nondirectory file)
#'dired-remove-entry file))
-(defun dired-remove-entry (file)
- (save-excursion
- (and (dired-goto-file file)
- (let (buffer-read-only)
- (delete-region (progn (beginning-of-line) (point))
- (line-beginning-position 2))))))
-
;;;###autoload
(defun dired-relist-file (file)
"Create or update the line for FILE in all Dired buffers it would belong in."
@@ -1663,6 +1670,9 @@ rename them using `vc-rename-file'."
;;;###autoload
(defun dired-rename-file (file newname ok-if-already-exists)
+ "Rename FILE to NEWNAME.
+Signal a `file-already-exists' error if a file NEWNAME already exists
+unless OK-IF-ALREADY-EXISTS is non-nil."
(dired-handle-overwrite newname)
(dired-maybe-create-dirs (file-name-directory newname))
(if (and dired-vc-rename-file
@@ -1677,7 +1687,8 @@ rename them using `vc-rename-file'."
(set-visited-file-name newname nil t)))
(dired-remove-file file)
;; See if it's an inserted subdir, and rename that, too.
- (dired-rename-subdir file newname))
+ (when (file-directory-p file)
+ (dired-rename-subdir file newname)))
(defun dired-rename-subdir (from-dir to-dir)
(setq from-dir (file-name-as-directory from-dir)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 873d586ca1b..80a266f7dcd 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -137,6 +137,7 @@ folding to be used on case-insensitive filesystems only."
(file-name-case-insensitive-p dir)
dired-omit-case-fold))
+;;;###autoload
(define-minor-mode dired-omit-mode
"Toggle omission of uninteresting files in Dired (Dired-Omit mode).
@@ -326,21 +327,19 @@ See also the functions:
(when file
(file-name-extension file))))
(suffix
- (read-string (format "%s extension%s: "
- (if (equal current-prefix-arg '(4))
- "UNmarking"
- "Marking")
- (if default
- (format " (default %s)" default)
- "")) nil nil default))
+ (read-string (format-prompt
+ "%s extension" default
+ (if (equal current-prefix-arg '(4))
+ "UNmarking"
+ "Marking"))
+ nil nil default))
(marker
(pcase current-prefix-arg
('(4) ?\s)
('(16)
(let* ((dflt (char-to-string dired-marker-char))
(input (read-string
- (format
- "Marker character to use (default %s): " dflt)
+ (format-prompt "Marker character to use" dflt)
nil nil dflt)))
(aref input 0)))
(_ dired-marker-char))))
diff --git a/lisp/dired.el b/lisp/dired.el
index 77bb6cfa9ca..e4bc4decf84 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -77,6 +77,27 @@ If nil, `dired-listing-switches' is used."
:type '(choice (const :tag "Use dired-listing-switches" nil)
(string :tag "Switches")))
+(defcustom dired-maybe-use-globstar nil
+ "If non-nil, enable globstar if the shell supports it.
+Some shells enable this feature by default (e.g. zsh or fish).
+
+See `dired-enable-globstar-in-shell' for a list of shells
+that support globstar and disable it by default.
+
+Note that the implementations of globstar have small differences
+between shells. You must check your shell documentation to see
+what to expect."
+ :type 'boolean
+ :group 'dired
+ :version "28.1")
+
+(defconst dired-enable-globstar-in-shell
+ '(("ksh" . "set -G")
+ ("bash" . "shopt -s globstar"))
+ "Alist of (SHELL . COMMAND), where COMMAND enables globstar in SHELL.
+If `dired-maybe-use-globstar' is non-nil, then `dired-insert-directory'
+checks this alist to enable globstar in the shell subprocess.")
+
(defcustom dired-chown-program
(purecopy (cond ((executable-find "chown") "chown")
((file-executable-p "/usr/sbin/chown") "/usr/sbin/chown")
@@ -513,6 +534,14 @@ Subexpression 2 must end right before the \\n.")
(defvar dired-symlink-face 'dired-symlink
"Face name used for symbolic links.")
+(defface dired-broken-symlink
+ '((((class color))
+ :foreground "yellow1" :background "red1" :weight bold)
+ (t :weight bold :slant italic :underline t))
+ "Face used for broken symbolic links."
+ :group 'dired-faces
+ :version "28.1")
+
(defface dired-special
'((t (:inherit font-lock-variable-name-face)))
"Face used for sockets, pipes, block devices and char devices."
@@ -576,6 +605,20 @@ Subexpression 2 must end right before the \\n.")
(list dired-re-dir
'(".+" (dired-move-to-filename) nil (0 dired-directory-face)))
;;
+ ;; Broken Symbolic link.
+ (list dired-re-sym
+ (list (lambda (end)
+ (let* ((file (dired-file-name-at-point))
+ (truename (ignore-errors (file-truename file))))
+ ;; either not existent target or circular link
+ (and (not (and truename (file-exists-p truename)))
+ (search-forward-regexp "\\(.+\\) \\(->\\) ?\\(.+\\)" end t))))
+ '(dired-move-to-filename)
+ nil
+ '(1 'dired-broken-symlink)
+ '(2 dired-symlink-face)
+ '(3 'dired-broken-symlink)))
+ ;;
;; Symbolic link to a directory.
(list dired-re-sym
(list (lambda (end)
@@ -1470,6 +1513,13 @@ see `dired-use-ls-dired' for more details.")
(executable-find explicit-shell-file-name))
(executable-find "sh")))
(switch (if remotep "-c" shell-command-switch)))
+ ;; Enable globstar
+ (when-let ((globstar dired-maybe-use-globstar)
+ (enable-it
+ (assoc-default
+ (file-truename sh) dired-enable-globstar-in-shell
+ (lambda (reg shell) (string-match reg shell)))))
+ (setq script (format "%s; %s" enable-it script)))
(unless
(zerop
(process-file sh nil (current-buffer) nil switch script))
@@ -2216,8 +2266,15 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
'(menu-item "Shell Command..." dired-do-shell-command
:help "Run a shell command on current or marked files"))
(define-key map [menu-bar operate delete]
- '(menu-item "Delete" dired-do-delete
- :help "Delete current file or all marked files"))
+ `(menu-item "Delete"
+ ,(let ((menu (make-sparse-keymap "Delete")))
+ (define-key menu [delete-flagged]
+ '(menu-item "Delete Flagged Files" dired-do-flagged-delete
+ :help "Delete all files flagged for deletion (D)"))
+ (define-key menu [delete-marked]
+ '(menu-item "Delete Marked (Not Flagged) Files" dired-do-delete
+ :help "Delete current file or all marked files (excluding flagged files)"))
+ menu)))
(define-key map [menu-bar operate rename]
'(menu-item "Rename to..." dired-do-rename
:help "Rename current file or move marked files"))
@@ -2851,12 +2908,12 @@ You can then feed the file name(s) to other commands with \\[yank]."
;; Keeping Dired buffers in sync with the filesystem and with each other
(defun dired-buffers-for-dir (dir &optional file)
-;; Return a list of buffers for DIR (top level or in-situ subdir).
-;; If FILE is non-nil, include only those whose wildcard pattern (if any)
-;; matches FILE.
-;; The list is in reverse order of buffer creation, most recent last.
-;; As a side effect, killed dired buffers for DIR are removed from
-;; dired-buffers.
+ "Return a list of buffers for DIR (top level or in-situ subdir).
+If FILE is non-nil, include only those whose wildcard pattern (if any)
+matches FILE.
+The list is in reverse order of buffer creation, most recent last.
+As a side effect, killed dired buffers for DIR are removed from
+dired-buffers."
(setq dir (file-name-as-directory dir))
(let (result buf)
(dolist (elt dired-buffers)
@@ -3405,18 +3462,28 @@ Return list of buffers where FUN succeeded (i.e., returned non-nil)."
(let (success-list)
(dolist (buf (dired-buffers-for-dir (expand-file-name directory) file))
(with-current-buffer buf
- (if (apply fun args)
- (push buf success-list))))
+ (when (apply fun args)
+ (push (buffer-name buf) success-list))))
;; FIXME: AFAICT, this return value is not used by any of the callers!
success-list))
;; Delete the entry for FILE from
-(defun dired-delete-entry (file)
+(defun dired-remove-entry (file)
+ "Remove entry FILE in the current dired buffer.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
(save-excursion
(and (dired-goto-file file)
(let ((inhibit-read-only t))
(delete-region (progn (beginning-of-line) (point))
- (save-excursion (forward-line 1) (point))))))
+ (line-beginning-position 2))))))
+
+(defun dired-delete-entry (file)
+ "Remove entry FILE in the current dired buffer.
+Like `dired-remove-entry' followed by `dired-clean-up-after-deletion'.
+Note this doesn't delete FILE in the file system.
+See `dired-delete-file' in case you wish that."
+ (dired-remove-entry file)
(dired-clean-up-after-deletion file))
(defvar dired-clean-up-buffers-too)
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 77c06a8eaf9..60f6d6350c9 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -1320,26 +1320,31 @@ dragging it to its bottom-right corner. See also
(defun doc-view-get-bounding-box ()
"Get the BoundingBox information of the current page."
- (let* ((page (doc-view-current-page))
- (doc (let ((cache-doc (doc-view-current-cache-doc-pdf)))
- (if (file-exists-p cache-doc)
- cache-doc
- doc-view--buffer-file-name)))
- (o (shell-command-to-string
- (concat doc-view-ghostscript-program
- " -dSAFER -dBATCH -dNOPAUSE -q -sDEVICE=bbox "
- (format "-dFirstPage=%s -dLastPage=%s %s"
- page page doc)))))
- (save-match-data
- (when (string-match (concat "%%BoundingBox: "
- "\\([[:digit:]]+\\) \\([[:digit:]]+\\) "
- "\\([[:digit:]]+\\) \\([[:digit:]]+\\)")
- o)
- (mapcar #'string-to-number
- (list (match-string 1 o)
- (match-string 2 o)
- (match-string 3 o)
- (match-string 4 o)))))))
+ (let ((page (doc-view-current-page))
+ (doc (let ((cache-doc (doc-view-current-cache-doc-pdf)))
+ (if (file-exists-p cache-doc)
+ cache-doc
+ doc-view--buffer-file-name))))
+ (with-temp-buffer
+ (when (eq 0 (ignore-errors
+ (process-file doc-view-ghostscript-program nil t
+ nil "-dSAFER" "-dBATCH" "-dNOPAUSE" "-q"
+ "-sDEVICE=bbox"
+ (format "-dFirstPage=%s" page)
+ (format "-dLastPage=%s" page)
+ doc)))
+ (goto-char (point-min))
+ (save-match-data
+ (when (re-search-forward
+ (concat "%%BoundingBox: "
+ "\\([[:digit:]]+\\) \\([[:digit:]]+\\) "
+ "\\([[:digit:]]+\\) \\([[:digit:]]+\\)")
+ nil t)
+ (mapcar #'string-to-number
+ (list (match-string 1)
+ (match-string 2)
+ (match-string 3)
+ (match-string 4)))))))))
(defvar doc-view-paper-sizes
'((a4 595 842)
diff --git a/lisp/dom.el b/lisp/dom.el
index 7ff9e07b729..bf4a56ab9f5 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -269,6 +269,50 @@ white-space."
(insert ")")
(insert "\n" (make-string (1+ column) ? ))))))))
+(defun dom-print (dom &optional pretty xml)
+ "Print DOM at point as HTML/XML.
+If PRETTY, indent the HTML/XML logically.
+If XML, generate XML instead of HTML."
+ (let ((column (current-column)))
+ (insert (format "<%s" (dom-tag dom)))
+ (let ((attr (dom-attributes dom)))
+ (dolist (elem attr)
+ ;; In HTML, these are boolean attributes that should not have
+ ;; an = value.
+ (if (and (memq (car elem)
+ '(async autofocus autoplay checked
+ contenteditable controls default
+ defer disabled formNoValidate frameborder
+ hidden ismap itemscope loop
+ multiple muted nomodule novalidate open
+ readonly required reversed
+ scoped selected typemustmatch))
+ (cdr elem)
+ (not xml))
+ (insert (format " %s" (car elem)))
+ (insert (format " %s=%S" (car elem) (cdr elem))))))
+ (let* ((children (dom-children dom))
+ (non-text nil))
+ (if (null children)
+ (insert " />")
+ (insert ">")
+ (dolist (child children)
+ (if (stringp child)
+ (insert child)
+ (setq non-text t)
+ (when pretty
+ (insert "\n" (make-string (+ column 2) ? )))
+ (dom-print child pretty xml)))
+ ;; If we inserted non-text child nodes, or a text node that
+ ;; ends with a newline, then we indent the end tag.
+ (when (and pretty
+ (or (bolp)
+ non-text))
+ (unless (bolp)
+ (insert "\n"))
+ (insert (make-string column ? )))
+ (insert (format "</%s>" (dom-tag dom)))))))
+
(provide 'dom)
;;; dom.el ends here
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index deac45892ea..0ebd2741d2e 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -1856,7 +1856,7 @@ function at point for which PREDICATE returns non-nil)."
"There are no qualifying advised functions")))
(let* ((function
(completing-read
- (format "%s (default %s): " (or prompt "Function") default)
+ (format-prompt (or prompt "Function") default)
ad-advised-functions
(if predicate
(lambda (function)
@@ -1884,7 +1884,7 @@ class of FUNCTION)."
(cl-return class)))
(error "ad-read-advice-class: `%s' has no advices" function)))
(let ((class (completing-read
- (format "%s (default %s): " (or prompt "Class") default)
+ (format-prompt (or prompt "Class") default)
ad-advice-class-completion-table nil t)))
(if (equal class "")
default
@@ -1902,8 +1902,8 @@ An optional PROMPT is used to prompt for the name."
(error "ad-read-advice-name: `%s' has no %s advice"
function class)
(car (car name-completion-table))))
- (prompt (format "%s (default %s): " (or prompt "Name") default))
- (name (completing-read prompt name-completion-table nil t)))
+ (name (completing-read (format-prompt (or prompt "Name") default)
+ name-completion-table nil t)))
(if (equal name "")
(intern default)
(intern name))))
@@ -1923,9 +1923,9 @@ be used to prompt for the function."
(defun ad-read-regexp (&optional prompt)
"Read a regular expression from the minibuffer."
(let ((regexp (read-from-minibuffer
- (concat (or prompt "Regular expression")
- (if (equal ad-last-regexp "") ": "
- (format " (default %s): " ad-last-regexp))))))
+ (format-prompt (or prompt "Regular expression")
+ (and (not (equal ad-last-regexp ""))
+ ad-last-regexp)))))
(setq ad-last-regexp
(if (equal regexp "") ad-last-regexp regexp))))
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 7ae8749ab40..966990bac96 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4132,40 +4132,44 @@ Return (TAIL VAR TEST CASES), where:
(switch-var nil)
(switch-test 'eq))
(while (pcase (car clauses)
- (`((,fn ,expr1 ,expr2) . ,body)
+ (`((,(and fn (or 'eq 'eql 'equal)) ,expr1 ,expr2) . ,body)
(let* ((vars (byte-compile--cond-vars expr1 expr2))
(var (car vars))
(value (cdr vars)))
(and var (or (eq var switch-var) (not switch-var))
- (cond
- ((memq fn '(eq eql equal))
+ (progn
(setq switch-var var)
(setq switch-test
(byte-compile--common-test switch-test fn))
(unless (member value keys)
(push value keys)
(push (cons (list value) (or body '(t))) cases))
- t)
- ((and (memq fn '(memq memql member))
- (listp value)
- ;; Require a non-empty body, since the member
- ;; function value depends on the switch
- ;; argument.
- body)
- (setq switch-var var)
- (setq switch-test
- (byte-compile--common-test
- switch-test (cdr (assq fn '((memq . eq)
- (memql . eql)
- (member . equal))))))
- (let ((vals nil))
- (dolist (elem value)
- (unless (funcall fn elem keys)
- (push elem vals)))
- (when vals
- (setq keys (append vals keys))
- (push (cons (nreverse vals) body) cases)))
- t))))))
+ t))))
+ (`((,(and fn (or 'memq 'memql 'member)) ,var ,expr) . ,body)
+ (and (symbolp var)
+ (or (eq var switch-var) (not switch-var))
+ (macroexp-const-p expr)
+ ;; Require a non-empty body, since the member
+ ;; function value depends on the switch argument.
+ body
+ (let ((value (eval expr)))
+ (and (proper-list-p value)
+ (progn
+ (setq switch-var var)
+ (setq switch-test
+ (byte-compile--common-test
+ switch-test
+ (cdr (assq fn '((memq . eq)
+ (memql . eql)
+ (member . equal))))))
+ (let ((vals nil))
+ (dolist (elem value)
+ (unless (funcall fn elem keys)
+ (push elem vals)))
+ (when vals
+ (setq keys (append vals keys))
+ (push (cons (nreverse vals) body) cases)))
+ t))))))
(setq clauses (cdr clauses)))
;; Assume that a single switch is cheaper than two or more discrete
;; compare clauses. This could be tuned, possibly taking into
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index 7a26d9a90fd..7a4d3c9c3e3 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -619,8 +619,11 @@ If ALIST is non-nil, the new pairs are prepended to it."
(macroexp-let2* nil ((start from) (end to))
(funcall do `(substring ,getter ,start ,end)
(lambda (v)
- (funcall setter `(cl--set-substring
- ,getter ,start ,end ,v))))))))
+ (macroexp-let2 nil v v
+ `(progn
+ ,(funcall setter `(cl--set-substring
+ ,getter ,start ,end ,v))
+ ,v))))))))
;;; Miscellaneous.
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index ed28997292f..1bdb2a3d8ca 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -653,9 +653,7 @@ Redefining FUNCTION also cancels it."
(when (special-form-p fn)
(setq fn nil))
(setq val (completing-read
- (if fn
- (format "Debug on entry to function (default %s): " fn)
- "Debug on entry to function: ")
+ (format-prompt "Debug on entry to function" fn)
obarray
#'(lambda (symbol)
(and (fboundp symbol)
@@ -758,8 +756,7 @@ another symbol also cancels it."
(let* ((var-at-point (variable-at-point))
(var (and (symbolp var-at-point) var-at-point))
(val (completing-read
- (concat "Debug when setting variable"
- (if var (format " (default %s): " var) ": "))
+ (format-prompt "Debug when setting variable" var)
obarray #'boundp
t nil nil (and var (symbol-name var)))))
(list (if (equal val "") var (intern val)))))
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index 51b7db24f3c..c2faac8085b 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -57,10 +57,9 @@ If OBJECT is not already compiled, we compile it, but do not
redefine OBJECT if it is a symbol."
(interactive
(let* ((fn (function-called-at-point))
- (prompt (if fn (format "Disassemble function (default %s): " fn)
- "Disassemble function: "))
(def (and fn (symbol-name fn))))
- (list (intern (completing-read prompt obarray 'fboundp t nil nil def))
+ (list (intern (completing-read (format-prompt "Disassemble function" fn)
+ obarray 'fboundp t nil nil def))
nil 0 t)))
(if (and (consp object) (not (functionp object)))
(setq object `(lambda () ,object)))
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 59e2e2e08ff..24c9e79f2c1 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -87,7 +87,10 @@ replacing its case-insensitive matches with the literal string in LIGHTER."
If called interactively, enable %s if ARG is positive, and
disable it if ARG is zero or negative. If called from Lisp,
also enable the mode if ARG is omitted or nil, and toggle it
-if ARG is `toggle'; disable the mode otherwise.")
+if ARG is `toggle'; disable the mode otherwise.
+
+The mode's hook is called both when the mode is enabled and when
+it is disabled.")
(defun easy-mmode--mode-docstring (doc mode-pretty-name keymap-sym)
(let ((doc (or doc (format "Toggle %s on or off.
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index d9bbf6129c6..7ff6d68c3ec 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1229,7 +1229,7 @@ purpose by adding an entry to this alist, and setting
"Wrap the FORMS of a definition body."
(if edebug-def-interactive
`(let ((,(edebug-interactive-p-name)
- (interactive-p)))
+ (called-interactively-p 'interactive)))
,(edebug-make-enter-wrapper forms))
(edebug-make-enter-wrapper forms)))
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index 2cb1f614ce3..39ad30afc5a 100644
--- a/lisp/emacs-lisp/eieio-base.el
+++ b/lisp/emacs-lisp/eieio-base.el
@@ -252,119 +252,87 @@ being pedantic."
(error
"Invalid object: %s is not an object of class %s nor a subclass"
(car ret) class))
- (setq ret (eieio-persistent-convert-list-to-object ret))
+ (setq ret (eieio-persistent-make-instance (car ret) (cdr ret)))
(oset ret file filename))
(kill-buffer " *tmp eieio read*"))
ret))
-(defun eieio-persistent-convert-list-to-object (inputlist)
- "Convert the INPUTLIST, representing object creation to an object.
-While it is possible to just `eval' the INPUTLIST, this code instead
-validates the existing list, and explicitly creates objects instead of
-calling eval. This avoids the possibility of accidentally running
-malicious code.
-
-Note: This function recurses when a slot of :type of some object is
-identified, and needing more object creation."
- (let* ((objclass (nth 0 inputlist))
- ;; Earlier versions of `object-write' added a string name for
- ;; the object, now obsolete.
- (slots (nthcdr
- (if (stringp (nth 1 inputlist)) 2 1)
- inputlist))
- (createslots nil)
- (class
- (progn
- ;; If OBJCLASS is an eieio autoload object, then we need to
- ;; load it.
- (eieio--full-class-object objclass))))
-
- (while slots
- (let ((initarg (car slots))
- (value (car (cdr slots))))
-
- ;; Make sure that the value proposed for SLOT is valid.
- ;; In addition, strip out quotes, list functions, and update
- ;; object constructors as needed.
- (setq value (eieio-persistent-validate/fix-slot-value
- class (eieio--initarg-to-attribute class initarg) value))
-
- (push initarg createslots)
- (push value createslots)
- )
-
- (setq slots (cdr (cdr slots))))
-
- (apply #'make-instance objclass (nreverse createslots))
-
- ;;(eval inputlist)
- ))
-
-(defun eieio-persistent-validate/fix-slot-value (class slot proposed-value)
- "Validate that in CLASS, the SLOT with PROPOSED-VALUE is good, then fix.
-A limited number of functions, such as quote, list, and valid object
-constructor functions are considered valid.
-Second, any text properties will be stripped from strings."
+(cl-defgeneric eieio-persistent-make-instance (objclass inputlist)
+ "Convert INPUTLIST, representing slot values, to an instance of OBJCLASS.
+Clean slot values, and possibly recursively create additional
+objects found there."
+ (:method
+ ((objclass (subclass eieio-default-superclass)) inputlist)
+
+ (let ((slots (if (stringp (car inputlist))
+ ;; Earlier versions of `object-write' added a
+ ;; string name for the object, now obsolete.
+ (cdr inputlist)
+ inputlist))
+ (createslots nil))
+ ;; If OBJCLASS is an eieio autoload object, then we need to
+ ;; load it (we don't need the return value).
+ (eieio--full-class-object objclass)
+ (while slots
+ (let ((initarg (car slots))
+ (value (car (cdr slots))))
+
+ ;; Strip out quotes, list functions, and update object
+ ;; constructors as needed.
+ (setq value (eieio-persistent-fix-value value))
+
+ (push initarg createslots)
+ (push value createslots))
+
+ (setq slots (cdr (cdr slots))))
+
+ (apply #'make-instance objclass (nreverse createslots)))))
+
+(defun eieio-persistent-fix-value (proposed-value)
+ "Fix PROPOSED-VALUE.
+Remove leading quotes from lists, and the symbol `list' from the
+head of lists. Explicitly construct any objects found, and strip
+any text properties from string values.
+
+This function will descend into the contents of lists, hash
+tables, and vectors."
(cond ((consp proposed-value)
;; Lists with something in them need special treatment.
- (let* ((slot-idx (- (eieio--slot-name-index class slot)
- (eval-when-compile eieio--object-num-slots)))
- (type (cl--slot-descriptor-type (aref (eieio--class-slots class)
- slot-idx)))
- (classtype (eieio-persistent-slot-type-is-class-p type)))
-
- (cond ((eq (car proposed-value) 'quote)
- (car (cdr proposed-value)))
-
- ;; An empty list sometimes shows up as (list), which is dumb, but
- ;; we need to support it for backward compat.
- ((and (eq (car proposed-value) 'list)
- (= (length proposed-value) 1))
- nil)
-
- ;; List of object constructors.
- ((and (eq (car proposed-value) 'list)
- ;; 2nd item is a list.
- (consp (car (cdr proposed-value)))
- ;; 1st elt of 2nd item is a class name.
- (class-p (car (car (cdr proposed-value))))
- )
-
- ;; Check the value against the input class type.
- ;; If something goes wrong, issue a smart warning
- ;; about how a :type is needed for this to work.
- (unless (and
- ;; Do we have a type?
- (consp classtype) (class-p (car classtype)))
- (error "In save file, list of object constructors found, but no :type specified for slot %S of type %S"
- slot classtype))
-
- ;; We have a predicate, but it doesn't satisfy the predicate?
- (dolist (PV (cdr proposed-value))
- (unless (child-of-class-p (car PV) (car classtype))
- (error "Invalid object: slot member %s does not match class %s"
- (car PV) (car classtype))))
-
- ;; We have a list of objects here. Lets load them
- ;; in.
- (let ((objlist nil))
- (dolist (subobj (cdr proposed-value))
- (push (eieio-persistent-convert-list-to-object subobj)
- objlist))
- ;; return the list of objects ... reversed.
- (nreverse objlist)))
- ;; We have a slot with a single object that can be
- ;; saved here. Recurse and evaluate that
- ;; sub-object.
- ((and classtype
- (seq-some
- (lambda (elt)
- (child-of-class-p (car proposed-value) elt))
- (if (listp classtype) classtype (list classtype))))
- (eieio-persistent-convert-list-to-object
- proposed-value))
- (t
- proposed-value))))
+ (cond ((eq (car proposed-value) 'quote)
+ (while (eq (car-safe proposed-value) 'quote)
+ (setq proposed-value (car (cdr proposed-value))))
+ proposed-value)
+
+ ;; An empty list sometimes shows up as (list), which is dumb, but
+ ;; we need to support it for backward compar.
+ ((and (eq (car proposed-value) 'list)
+ (= (length proposed-value) 1))
+ nil)
+
+ ;; List of object constructors.
+ ((and (eq (car proposed-value) 'list)
+ ;; 2nd item is a list.
+ (consp (car (cdr proposed-value)))
+ ;; 1st elt of 2nd item is a class name.
+ (class-p (car (car (cdr proposed-value)))))
+
+ ;; We have a list of objects here. Lets load them
+ ;; in.
+ (let ((objlist nil))
+ (dolist (subobj (cdr proposed-value))
+ (push (eieio-persistent-make-instance
+ (car subobj) (cdr subobj))
+ objlist))
+ ;; return the list of objects ... reversed.
+ (nreverse objlist)))
+ ;; We have a slot with a single object that can be
+ ;; saved here. Recurse and evaluate that
+ ;; sub-object.
+ ((class-p (car proposed-value))
+ (eieio-persistent-make-instance
+ (car proposed-value) (cdr proposed-value)))
+ (t
+ proposed-value)))
;; For hash-tables and vectors, the top-level `read' will not
;; "look inside" member values, so we need to do that
;; explicitly. Because `eieio-override-prin1' is recursive in
@@ -375,10 +343,9 @@ Second, any text properties will be stripped from strings."
(lambda (key value)
(setf (gethash key proposed-value)
(if (class-p (car-safe value))
- (eieio-persistent-convert-list-to-object
- value)
- (eieio-persistent-validate/fix-slot-value
- class slot value))))
+ (eieio-persistent-make-instance
+ (car value) (cdr value))
+ (eieio-persistent-fix-value value))))
proposed-value)
proposed-value)
@@ -387,72 +354,18 @@ Second, any text properties will be stripped from strings."
(let ((val (aref proposed-value i)))
(aset proposed-value i
(if (class-p (car-safe val))
- (eieio-persistent-convert-list-to-object
- val)
- (eieio-persistent-validate/fix-slot-value
- class slot val)))))
+ (eieio-persistent-make-instance
+ (car val) (cdr val))
+ (eieio-persistent-fix-value val)))))
proposed-value)
- ((stringp proposed-value)
- ;; Else, check for strings, remove properties.
- (substring-no-properties proposed-value))
-
- (t
- ;; Else, just return whatever the constant was.
- proposed-value))
- )
-
-(defun eieio-persistent-slot-type-is-class-p (type)
- "Return the class referred to in TYPE.
-If no class is referenced there, then return nil."
- (cond ((class-p type)
- ;; If the type is a class, then return it.
- type)
- ((and (eq 'list-of (car-safe type)) (class-p (cadr type)))
- ;; If it is the type of a list of a class, then return that class and
- ;; the type.
- (cons (cadr type) type))
-
- ((and (symbolp type) (get type 'cl-deftype-handler))
- ;; Macro-expand the type according to cl-deftype definitions.
- (eieio-persistent-slot-type-is-class-p
- (funcall (get type 'cl-deftype-handler))))
-
- ;; FIXME: foo-child should not be a valid type!
- ((and (symbolp type) (string-match "-child\\'" (symbol-name type))
- (class-p (intern-soft (substring (symbol-name type) 0
- (match-beginning 0)))))
- (unless eieio-backward-compatibility
- (error "Use of bogus %S type instead of %S"
- type (intern-soft (substring (symbol-name type) 0
- (match-beginning 0)))))
- ;; If it is the predicate ending with -child, then return
- ;; that class. Unfortunately, in EIEIO, typep of just the
- ;; class is the same as if we used -child, so no further work needed.
- (intern-soft (substring (symbol-name type) 0
- (match-beginning 0))))
- ;; FIXME: foo-list should not be a valid type!
- ((and (symbolp type) (string-match "-list\\'" (symbol-name type))
- (class-p (intern-soft (substring (symbol-name type) 0
- (match-beginning 0)))))
- (unless eieio-backward-compatibility
- (error "Use of bogus %S type instead of (list-of %S)"
- type (intern-soft (substring (symbol-name type) 0
- (match-beginning 0)))))
- ;; If it is the predicate ending with -list, then return
- ;; that class and the predicate to use.
- (cons (intern-soft (substring (symbol-name type) 0
- (match-beginning 0)))
- type))
-
- ((eq (car-safe type) 'or)
- ;; If type is a list, and is an `or', return all valid class
- ;; types within the `or' statement.
- (seq-filter #'eieio-persistent-slot-type-is-class-p (cdr type)))
+ ((stringp proposed-value)
+ ;; Else, check for strings, remove properties.
+ (substring-no-properties proposed-value))
(t
- ;; No match, not a class.
- nil)))
+ ;; Else, just return whatever the constant was.
+ proposed-value)))
(cl-defmethod object-write ((this eieio-persistent) &optional comment)
"Write persistent object THIS out to the current stream.
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 4825b5c5e6c..772c907c284 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -5,7 +5,7 @@
;; Author: Noah Friedman <friedman@splode.com>
;; Keywords: extensions
;; Created: 1995-10-06
-;; Version: 1.8.0
+;; Version: 1.10.0
;; Package-Requires: ((emacs "26.3"))
;; This is a GNU ELPA :core package. Avoid functionality that is not
@@ -573,7 +573,8 @@ Meant as a value for `eldoc-documentation-strategy'."
(let* ((callback (eldoc--make-callback :enthusiast))
(str (funcall f callback)))
(if (stringp str) (funcall callback str))
- nil))))
+ nil)))
+ t)
;; JT@2020-07-10: ElDoc is pre-loaded, so in Emacs < 28 we can't
;; make the "old" `eldoc-documentation-function' point to the new
@@ -739,14 +740,14 @@ should endeavour to display the docstrings eventually produced."
(when (and string (cl-loop for (p) in docs-registered
never (< p pos)))
(setq docs-registered '())
- (register-doc pos string plist)
- (when (and (timerp eldoc--enthusiasm-curbing-timer)
- (memq eldoc--enthusiasm-curbing-timer
- timer-list))
- (cancel-timer eldoc--enthusiasm-curbing-timer))
- (setq eldoc--enthusiasm-curbing-timer
- (run-at-time (unless (zerop pos) 0.3)
- nil #'display-doc)))
+ (register-doc pos string plist))
+ (when (and (timerp eldoc--enthusiasm-curbing-timer)
+ (memq eldoc--enthusiasm-curbing-timer
+ timer-list))
+ (cancel-timer eldoc--enthusiasm-curbing-timer))
+ (setq eldoc--enthusiasm-curbing-timer
+ (run-at-time (unless (zerop pos) 0.3)
+ nil #'display-doc))
t))
(:patient
(cl-incf want)
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 241eece05b6..3c347c0b199 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -1635,9 +1635,7 @@ Signals an error if no test name was read."
nil)))
(ert-test (setq default (ert-test-name default))))
(when add-default-to-prompt
- (setq prompt (if (null default)
- (format "%s: " prompt)
- (format "%s (default %s): " prompt default))))
+ (setq prompt (format-prompt prompt default)))
(let ((input (completing-read prompt obarray #'ert-test-boundp
t nil history default nil)))
;; completing-read returns an empty string if default was nil and
@@ -2023,9 +2021,7 @@ and how to display message."
(car ert--selector-history)
"t")))
(read
- (completing-read (if (null default)
- "Run tests: "
- (format "Run tests (default %s): " default))
+ (completing-read (format-prompt "Run tests" default)
obarray #'ert-test-boundp nil nil
'ert--selector-history default nil)))
nil))
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index 56b3e32a3e3..9e252d8c529 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -315,9 +315,7 @@ if non-nil)."
(thing-at-point 'symbol))))
(when (and def (not (test-completion def table)))
(setq def nil))
- (completing-read (if def
- (format "Library name (default %s): " def)
- "Library name: ")
+ (completing-read (format-prompt "Library name" def)
table nil nil nil nil def)))
;;;###autoload
@@ -485,12 +483,10 @@ otherwise uses `variable-at-point'."
(prompt-type (cdr (assq type '((nil . "function")
(defvar . "variable")
(defface . "face")))))
- (prompt (concat "Find " prompt-type
- (and symb (format " (default %s)" symb))
- ": "))
(enable-recursive-minibuffers t))
(list (intern (completing-read
- prompt obarray predicate
+ (format-prompt "Find %s" symb prompt-type)
+ obarray predicate
t nil nil (and symb (symbol-name symb)))))))
(defun find-function-do-it (symbol type switch-fn)
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 513bd328899..78d86b9fc31 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -527,9 +527,12 @@ This macro only makes sense when used in a place."
(gv-letplace (dgetter dsetter) d
(funcall do
`(cons ,agetter ,dgetter)
- (lambda (v) `(progn
- ,(funcall asetter `(car ,v))
- ,(funcall dsetter `(cdr ,v)))))))))
+ (lambda (v)
+ (macroexp-let2 nil v v
+ `(progn
+ ,(funcall asetter `(car ,v))
+ ,(funcall dsetter `(cdr ,v))
+ ,v))))))))
(put 'logand 'gv-expander
(lambda (do place &rest masks)
@@ -539,9 +542,12 @@ This macro only makes sense when used in a place."
(funcall
do `(logand ,getter ,mask)
(lambda (v)
- (funcall setter
- `(logior (logand ,v ,mask)
- (logand ,getter (lognot ,mask))))))))))
+ (macroexp-let2 nil v v
+ `(progn
+ ,(funcall setter
+ `(logior (logand ,v ,mask)
+ (logand ,getter (lognot ,mask))))
+ ,v))))))))
;;; References
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 584ed8c6f90..352210f859d 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -506,9 +506,7 @@ This will generate compile-time constants from BINDINGS."
(1 font-lock-constant-face prepend))
;; Uninterned symbols, e.g., (defpackage #:my-package ...)
;; must come before keywords below to have effect
- (,(concat "\\(#:\\)\\(" lisp-mode-symbol-regexp "\\)")
- (1 font-lock-comment-delimiter-face)
- (2 font-lock-doc-face))
+ (,(concat "#:" lisp-mode-symbol-regexp "") 0 font-lock-builtin-face)
;; Constant values.
(,(concat "\\_<:" lisp-mode-symbol-regexp "\\_>")
(0 font-lock-builtin-face))
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index 85a15c96be5..b779aa27888 100644
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -5,18 +5,20 @@
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords: extensions, lisp, tools
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index aa9d88e0ff1..031b85710db 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2339,10 +2339,7 @@ will be deleted."
(setq guess nil))
(setq packages (mapcar #'symbol-name packages))
(let ((val
- (completing-read (if guess
- (format "Describe package (default %s): "
- guess)
- "Describe package: ")
+ (completing-read (format-prompt "Describe package" guess)
packages nil t nil nil (when guess
(symbol-name guess)))))
(list (and (> (length val) 0) (intern val)))))))
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index 0e1618e010a..0672f607523 100644
--- a/lisp/emacs-lisp/re-builder.el
+++ b/lisp/emacs-lisp/re-builder.el
@@ -489,7 +489,7 @@ Optional argument SYNTAX must be specified if called non-interactively."
(interactive
(list (intern
(completing-read
- (format "Select syntax (default %s): " reb-re-syntax)
+ (format-prompt "Select syntax" reb-re-syntax)
'(read string sregex rx)
nil t nil nil (symbol-name reb-re-syntax)
'reb-change-syntax-hist))))
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 1cc68e19edd..d60f974aee1 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -4,7 +4,7 @@
;; Author: Nicolas Petton <nicolas@petton.fr>
;; Keywords: sequences
-;; Version: 2.21
+;; Version: 2.22
;; Package: seq
;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index 4ff129e367a..dd614dd792c 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -55,9 +55,6 @@
:prefix "load-path-shadows-"
:group 'lisp)
-(define-obsolete-variable-alias 'shadows-compare-text-p
- 'load-path-shadows-compare-text "23.3")
-
(defcustom load-path-shadows-compare-text nil
"If non-nil, then shadowing files are reported only if their text differs.
This is slower, but filters out some innocuous shadowing."
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 38a7b8b54c9..1b700afd12d 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -2120,10 +2120,9 @@ position corresponding to each rule."
(throw 'found (list kind token
(or (nth 3 rewrite) res)))))))))
(default-new (smie-config--guess-value sig))
- (newstr (read-string (format "Adjust rule (%S %S -> %S) to%s: "
- (nth 0 sig) (nth 1 sig) (nth 2 sig)
- (if (not default-new) ""
- (format " (default %S)" default-new)))
+ (newstr (read-string (format-prompt
+ "Adjust rule (%S %S -> %S) to" default-new
+ (nth 0 sig) (nth 1 sig) (nth 2 sig))
nil nil (format "%S" default-new)))
(new (car (read-from-string newstr))))
(let ((old (rassoc sig smie-config--buffer-local)))
diff --git a/lisp/emacs-lisp/trace.el b/lisp/emacs-lisp/trace.el
index 4ebb7ff711d..627305689c7 100644
--- a/lisp/emacs-lisp/trace.el
+++ b/lisp/emacs-lisp/trace.el
@@ -265,20 +265,13 @@ be printed along with the arguments in the trace."
If `current-prefix-arg' is non-nil, also read a buffer and a \"context\"
\(Lisp expression). Return (FUNCTION BUFFER FUNCTION-CONTEXT)."
(cons
- (let ((default (function-called-at-point))
- (beg (string-match ":[ \t]*\\'" prompt)))
- (intern (completing-read (if default
- (format
- "%s (default %s)%s"
- (substring prompt 0 beg)
- default
- (if beg (substring prompt beg) ": "))
- prompt)
+ (let ((default (function-called-at-point)))
+ (intern (completing-read (format-prompt prompt default)
obarray 'fboundp t nil nil
(if default (symbol-name default)))))
(when current-prefix-arg
(list
- (read-buffer "Output to buffer: " trace-buffer)
+ (read-buffer (format-prompt "Output to buffer" trace-buffer))
(let ((exp
(let ((minibuffer-completing-symbol t))
(read-from-minibuffer "Context expression: "
@@ -308,7 +301,7 @@ functions that switch buffers, or do any other display-oriented
stuff - use `trace-function-background' instead.
To stop tracing a function, use `untrace-function' or `untrace-all'."
- (interactive (trace--read-args "Trace function: "))
+ (interactive (trace--read-args "Trace function"))
(trace-function-internal function buffer nil context))
;;;###autoload
@@ -316,7 +309,7 @@ To stop tracing a function, use `untrace-function' or `untrace-all'."
"Trace calls to function FUNCTION, quietly.
This is like `trace-function-foreground', but without popping up
the output buffer or changing the window configuration."
- (interactive (trace--read-args "Trace function in background: "))
+ (interactive (trace--read-args "Trace function in background"))
(trace-function-internal function buffer t context))
;;;###autoload
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index cd960618a0a..3a568cb834c 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -1,4 +1,4 @@
-;;; warnings.el --- log and display warnings
+;;; warnings.el --- log and display warnings -*- lexical-binding:t -*-
;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
@@ -68,25 +68,25 @@ Each element looks like (ALIAS . LEVEL) and defines ALIAS as
equivalent to LEVEL. LEVEL must be defined in `warning-levels';
it may not itself be an alias.")
-(defvaralias 'display-warning-minimum-level 'warning-minimum-level)
+(define-obsolete-variable-alias 'display-warning-minimum-level
+ 'warning-minimum-level "28.1")
(defcustom warning-minimum-level :warning
"Minimum severity level for displaying the warning buffer.
If a warning's severity level is lower than this,
the warning is logged in the warnings buffer, but the buffer
is not immediately displayed. See also `warning-minimum-log-level'."
- :group 'warnings
:type '(choice (const :emergency) (const :error)
(const :warning) (const :debug))
:version "22.1")
-(defvaralias 'log-warning-minimum-level 'warning-minimum-log-level)
+(define-obsolete-variable-alias 'log-warning-minimum-level
+ 'warning-minimum-log-level "28.1")
(defcustom warning-minimum-log-level :warning
"Minimum severity level for logging a warning.
If a warning severity level is lower than this,
the warning is completely ignored.
Value must be lower or equal than `warning-minimum-level',
because warnings not logged aren't displayed either."
- :group 'warnings
:type '(choice (const :emergency) (const :error)
(const :warning) (const :debug))
:version "22.1")
@@ -100,7 +100,6 @@ Thus, (foo bar) as an element matches (foo bar)
or (foo bar ANYTHING...) as TYPE.
If TYPE is a symbol FOO, that is equivalent to the list (FOO),
so only the element (FOO) will match it."
- :group 'warnings
:type '(repeat (repeat symbol))
:version "22.1")
@@ -115,7 +114,6 @@ or (foo bar ANYTHING...) as TYPE.
If TYPE is a symbol FOO, that is equivalent to the list (FOO),
so only the element (FOO) will match it.
See also `warning-suppress-log-types'."
- :group 'warnings
:type '(repeat (repeat symbol))
:version "22.1")
@@ -202,6 +200,21 @@ SUPPRESS-LIST is the list of kinds of warnings to suppress."
;; we return t.
some-match))
+(define-button-type 'warning-suppress-warning
+ 'action #'warning-suppress-action
+ 'help-echo "mouse-2, RET: Don't display this warning automatically")
+(defun warning-suppress-action (button)
+ (customize-save-variable 'warning-suppress-types
+ (cons (list (button-get button 'warning-type))
+ warning-suppress-types)))
+(define-button-type 'warning-suppress-log-warning
+ 'action #'warning-suppress-log-action
+ 'help-echo "mouse-2, RET: Don't log this warning")
+(defun warning-suppress-log-action (button)
+ (customize-save-variable 'warning-suppress-log-types
+ (cons (list (button-get button 'warning-type))
+ warning-suppress-types)))
+
;;;###autoload
(defun display-warning (type message &optional level buffer-name)
"Display a warning message, MESSAGE.
@@ -229,7 +242,12 @@ See the `warnings' custom group for user customization features.
See also `warning-series', `warning-prefix-function',
`warning-fill-prefix', and `warning-fill-column' for additional
-programming features."
+programming features.
+
+This will also display buttons allowing the user to permanently
+disable automatic display of the warning or disable the warning
+entirely by setting `warning-suppress-types' or
+`warning-suppress-log-types' on their behalf."
(if (not (or after-init-time noninteractive (daemonp)))
;; Ensure warnings that happen early in the startup sequence
;; are visible when startup completes (bug#20792).
@@ -274,6 +292,14 @@ programming features."
(insert (format (nth 1 level-info)
(format warning-type-format typename))
message)
+ (insert " ")
+ (insert-button "Disable showing"
+ 'type 'warning-suppress-warning
+ 'warning-type type)
+ (insert " ")
+ (insert-button "Disable logging"
+ 'type 'warning-suppress-log-warning
+ 'warning-type type)
(funcall newline)
(when (and warning-fill-prefix (not (string-match "\n" message)))
(let ((fill-prefix warning-fill-prefix)
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index 2fffcbb154a..5dd81fab3b6 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -510,7 +510,8 @@
(if window-system (concat "-" (upcase (symbol-name window-system))))
"-keys")))
(set-visited-file-name
- (read-file-name (format "Save key mapping to file (default %s): " file) nil file)))
+ (read-file-name (format-prompt "Save key mapping to file" file)
+ nil file)))
(save-buffer)
(message "That's it! Press any key to exit")
diff --git a/lisp/epa-file.el b/lisp/epa-file.el
index 3b0cc84e5f6..bb027b9abfb 100644
--- a/lisp/epa-file.el
+++ b/lisp/epa-file.el
@@ -175,9 +175,9 @@ encryption is used."
(setq-local epa-file-error error)
(add-hook 'find-file-not-found-functions
'epa-file--find-file-not-found-function
- nil t)
- (signal (if exists 'file-error 'file-missing)
- (cons "Opening input file" (cdr error))))))))
+ nil t)))
+ (signal (if exists 'file-error 'file-missing)
+ (cons "Opening input file" (cdr error))))))
(set-buffer buf) ;In case timer/filter changed/killed it (bug#16029)!
(setq-local epa-file-encrypt-to
(mapcar #'car (epg-context-result-for
diff --git a/lisp/epa.el b/lisp/epa.el
index 5140d3f0a69..b065887cef1 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -25,10 +25,7 @@
(require 'epg)
(require 'font-lock)
-(require 'widget)
-(eval-when-compile
- (require 'subr-x)
- (require 'wid-edit))
+(eval-when-compile (require 'subr-x))
(require 'derived)
;;; Options
@@ -153,14 +150,6 @@ The command `epa-mail-encrypt' uses this."
;;; Variables
-(defvar epa-font-lock-keywords
- '(("^\\*"
- (0 'epa-mark))
- ("^\t\\([^\t:]+:\\)[ \t]*\\(.*\\)$"
- (1 'epa-field-name)
- (2 'epa-field-body)))
- "Default expressions to addon in epa-mode.")
-
(defconst epa-pubkey-algorithm-letter-alist
'((1 . ?R)
(2 . ?r)
@@ -197,8 +186,9 @@ You should bind this variable with `let', but do not set it globally.")
(defvar epa-key-list-mode-map
(let ((keymap (make-sparse-keymap))
(menu-map (make-sparse-keymap)))
- (set-keymap-parent keymap widget-keymap)
(define-key keymap "\C-m" 'epa-show-key)
+ (define-key keymap [?\t] 'forward-button)
+ (define-key keymap [backtab] 'backward-button)
(define-key keymap "m" 'epa-mark-key)
(define-key keymap "u" 'epa-unmark-key)
(define-key keymap "d" 'epa-decrypt-file)
@@ -259,48 +249,35 @@ You should bind this variable with `let', but do not set it globally.")
(defvar epa-exit-buffer-function #'quit-window)
-;;; Key Widget
-
-(define-widget 'epa-key 'push-button
- "Button for representing an epg-key object."
- :format "%[%v%]"
- :button-face-get 'epa--key-widget-button-face-get
- :value-create 'epa--key-widget-value-create
- :action 'epa--key-widget-action
- :help-echo 'epa--key-widget-help-echo)
-
-(defun epa--key-widget-action (widget &optional _event)
- (save-selected-window
- (epa--show-key (widget-get widget :value))))
-
-(defun epa--key-widget-value-create (widget)
- (let* ((key (widget-get widget :value))
- (primary-sub-key (car (epg-key-sub-key-list key)))
- (primary-user-id (car (epg-key-user-id-list key))))
- (insert (format "%c "
- (if (epg-sub-key-validity primary-sub-key)
- (car (rassq (epg-sub-key-validity primary-sub-key)
- epg-key-validity-alist))
- ? ))
- (epg-sub-key-id primary-sub-key)
- " "
- (if primary-user-id
- (if (stringp (epg-user-id-string primary-user-id))
- (epg-user-id-string primary-user-id)
- (epg-decode-dn (epg-user-id-string primary-user-id)))
- ""))))
-
-(defun epa--key-widget-button-face-get (widget)
- (let ((validity (epg-sub-key-validity (car (epg-key-sub-key-list
- (widget-get widget :value))))))
- (if validity
- (cdr (assq validity epa-validity-face-alist))
- 'default)))
-
-(defun epa--key-widget-help-echo (widget)
- (format "Show %s"
- (epg-sub-key-id (car (epg-key-sub-key-list
- (widget-get widget :value))))))
+(defun epa--button-key-text (key)
+ (let ((primary-sub-key (car (epg-key-sub-key-list key)))
+ (primary-user-id (car (epg-key-user-id-list key)))
+ (validity (epg-sub-key-validity (car (epg-key-sub-key-list key)))))
+ (propertize
+ (concat
+ (propertize
+ (format "%c "
+ (if (epg-sub-key-validity primary-sub-key)
+ (car (rassq (epg-sub-key-validity primary-sub-key)
+ epg-key-validity-alist))
+ ? ))
+ 'help-echo (format "Validity: %s"
+ (epg-sub-key-validity primary-sub-key)))
+ (propertize
+ (concat
+ (epg-sub-key-id primary-sub-key)
+ " "
+ (if primary-user-id
+ (if (stringp (epg-user-id-string primary-user-id))
+ (epg-user-id-string primary-user-id)
+ (epg-decode-dn (epg-user-id-string primary-user-id)))
+ ""))
+ 'help-echo (format "Show %s"
+ (epg-sub-key-id (car (epg-key-sub-key-list key))))))
+ 'face
+ (if validity
+ (cdr (assq validity epa-validity-face-alist))
+ 'default))))
;;; Modes
@@ -309,7 +286,6 @@ You should bind this variable with `let', but do not set it globally.")
(buffer-disable-undo)
(setq truncate-lines t
buffer-read-only t)
- (setq-local font-lock-defaults '(epa-font-lock-keywords t))
(make-local-variable 'epa-exit-buffer-function)
(setq-local revert-buffer-function #'epa--key-list-revert-buffer))
@@ -318,7 +294,6 @@ You should bind this variable with `let', but do not set it globally.")
(buffer-disable-undo)
(setq truncate-lines t
buffer-read-only t)
- (setq-local font-lock-defaults '(epa-font-lock-keywords t))
(make-local-variable 'epa-exit-buffer-function))
(define-derived-mode epa-info-mode special-mode "EPA Info"
@@ -362,28 +337,12 @@ If ARG is non-nil, mark the key."
;;;; Listing and Selecting
(defun epa--insert-keys (keys)
- (save-excursion
- (save-restriction
- (narrow-to-region (point) (point))
- (let (point)
- (while keys
- (setq point (point))
- (insert " ")
- (add-text-properties point (point)
- (list 'epa-key (car keys)
- 'front-sticky nil
- 'rear-nonsticky t
- 'start-open t
- 'end-open t))
- (widget-create 'epa-key :value (car keys))
- (insert "\n")
- (setq keys (cdr keys))))
- (add-text-properties (point-min) (point-max)
- (list 'epa-list-keys t
- 'front-sticky nil
- 'rear-nonsticky t
- 'start-open t
- 'end-open t)))))
+ (dolist (key keys)
+ (insert
+ (propertize
+ (concat " " (epa--button-key-text key))
+ 'epa-key key))
+ (insert "\n")))
(defun epa--list-keys (name secret &optional doc)
"NAME specifies which key to list.
@@ -420,8 +379,7 @@ DOC is documentation text to insert at the start."
(point-max)))
(goto-char point))
- (epa--insert-keys (epg-list-keys context name secret))
- (widget-setup))
+ (epa--insert-keys (epg-list-keys context name secret)))
(make-local-variable 'epa-list-keys-arguments)
(setq epa-list-keys-arguments (list name secret))
(goto-char (point-min))
@@ -488,20 +446,13 @@ q trust status questionable. - trust status unspecified.
(substitute-command-keys "\
- `\\[epa-mark-key]' to mark a key on the line
- `\\[epa-unmark-key]' to unmark a key on the line\n"))
- (widget-create 'push-button
- :notify (lambda (&rest _ignore) (abort-recursive-edit))
- :help-echo
- "Click here or \\[abort-recursive-edit] to cancel"
- "Cancel")
- (widget-create 'push-button
- :notify (lambda (&rest _ignore) (exit-recursive-edit))
- :help-echo
- "Click here or \\[exit-recursive-edit] to finish"
- "OK")
+ (insert-button "[Cancel]"
+ 'action (lambda (_button) (abort-recursive-edit)))
+ (insert " ")
+ (insert-button "[OK]"
+ 'action (lambda (_button) (exit-recursive-edit)))
(insert "\n\n")
(epa--insert-keys keys)
- (widget-setup)
- (set-keymap-parent (current-local-map) widget-keymap)
(setq epa-exit-buffer-function #'abort-recursive-edit)
(goto-char (point-min))
(let ((display-buffer-mark-dedicated 'soft))
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index 477f148197b..1bce986a806 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -516,8 +516,8 @@ PROC is the server process."
(filename (or file (plist-get elt :file) "unknown")))
(if elt
(let* ((file (read-file-name
- (format "Local filename (default %s): "
- (file-name-nondirectory filename))
+ (format-prompt "Local filename"
+ (file-name-nondirectory filename))
(or erc-dcc-get-default-directory
default-directory)
(expand-file-name (file-name-nondirectory filename)
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index 267936583e1..5cee1bad364 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -862,7 +862,7 @@ Moves relative to START, or `eshell-history-index'."
(setq prev n
n (mod (+ n motion) len))
;; If we haven't reached a match, step some more.
- (while (and (< n len) (not tried-each-ring-item)
+ (while (and (not tried-each-ring-item)
(not (string-match regexp (eshell-get-history n))))
(setq n (mod (+ n motion) len)
;; If we have gone all the way around in this search.
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 8799007c596..ecdfd285f90 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -72,51 +72,43 @@
(defcustom eshell-mode-unload-hook nil
"A hook that gets run when `eshell-mode' is unloaded."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-mode-hook nil
"A hook that gets run when `eshell-mode' is entered."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-first-time-mode-hook nil
"A hook that gets run the first time `eshell-mode' is entered.
That is to say, the first time during an Emacs session."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-exit-hook nil
"A hook that is run whenever `eshell' is exited.
This hook is only run if exiting actually kills the buffer."
:version "24.1" ; removed eshell-query-kill-processes
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-kill-on-exit t
"If non-nil, kill the Eshell buffer on the `exit' command.
Otherwise, the buffer will simply be buried."
- :type 'boolean
- :group 'eshell-mode)
+ :type 'boolean)
(defcustom eshell-input-filter-functions nil
"Functions to call before input is processed.
The input is contained in the region from `eshell-last-input-start' to
`eshell-last-input-end'."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-send-direct-to-subprocesses nil
"If t, send any input immediately to a subprocess."
- :type 'boolean
- :group 'eshell-mode)
+ :type 'boolean)
(defcustom eshell-expand-input-functions nil
"Functions to call before input is parsed.
Each function is passed two arguments, which bounds the region of the
current input text."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-scroll-to-bottom-on-input nil
"Controls whether input to interpreter causes window to scroll.
@@ -126,8 +118,7 @@ buffer. If `this', scroll only the selected window.
See `eshell-preinput-scroll-to-bottom'."
:type '(radio (const :tag "Do not scroll Eshell windows" nil)
(const :tag "Scroll all windows showing the buffer" all)
- (const :tag "Scroll only the selected window" this))
- :group 'eshell-mode)
+ (const :tag "Scroll only the selected window" this)))
(defcustom eshell-scroll-to-bottom-on-output nil
"Controls whether interpreter output causes window to scroll.
@@ -140,8 +131,7 @@ See variable `eshell-scroll-show-maximum-output' and function
:type '(radio (const :tag "Do not scroll Eshell windows" nil)
(const :tag "Scroll all windows showing the buffer" all)
(const :tag "Scroll only the selected window" this)
- (const :tag "Scroll all windows other than selected" others))
- :group 'eshell-mode)
+ (const :tag "Scroll all windows other than selected" others)))
(defcustom eshell-scroll-show-maximum-output t
"Controls how interpreter output causes window to scroll.
@@ -149,16 +139,14 @@ If non-nil, then show the maximum output when the window is scrolled.
See variable `eshell-scroll-to-bottom-on-output' and function
`eshell-postoutput-scroll-to-bottom'."
- :type 'boolean
- :group 'eshell-mode)
+ :type 'boolean)
(defcustom eshell-buffer-maximum-lines 1024
"The maximum size in lines for eshell buffers.
Eshell buffers are truncated from the top to be no greater than this
number, if the function `eshell-truncate-buffer' is on
`eshell-output-filter-functions'."
- :type 'integer
- :group 'eshell-mode)
+ :type 'integer)
(defcustom eshell-output-filter-functions
'(eshell-postoutput-scroll-to-bottom
@@ -168,36 +156,31 @@ number, if the function `eshell-truncate-buffer' is on
"Functions to call before output is displayed.
These functions are only called for output that is displayed
interactively, and not for output which is redirected."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-preoutput-filter-functions nil
"Functions to call before output is inserted into the buffer.
These functions get one argument, a string containing the text to be
inserted. They return the string as it should be inserted."
- :type 'hook
- :group 'eshell-mode)
+ :type 'hook)
(defcustom eshell-password-prompt-regexp
(format "\\(%s\\)[^::៖]*[::៖]\\s *\\'" (regexp-opt password-word-equivalents))
"Regexp matching prompts for passwords in the inferior process.
This is used by `eshell-watch-for-password-prompt'."
:type 'regexp
- :version "27.1"
- :group 'eshell-mode)
+ :version "27.1")
(defcustom eshell-skip-prompt-function nil
"A function called from beginning of line to skip the prompt."
- :type '(choice (const nil) function)
- :group 'eshell-mode)
+ :type '(choice (const nil) function))
(define-obsolete-variable-alias 'eshell-status-in-modeline
'eshell-status-in-mode-line "24.3")
(defcustom eshell-status-in-mode-line t
"If non-nil, let the user know a command is running in the mode line."
- :type 'boolean
- :group 'eshell-mode)
+ :type 'boolean)
(defcustom eshell-directory-name
(locate-user-emacs-file "eshell/" ".eshell/")
@@ -329,6 +312,8 @@ and the hook `eshell-exit-hook'."
(if mode-line-elt
(setcar mode-line-elt 'eshell-command-running-string))))
+ (set (make-local-variable 'bookmark-make-record-function)
+ 'eshell-bookmark-make-record)
(setq local-abbrev-table eshell-mode-abbrev-table)
(set (make-local-variable 'list-buffers-directory)
@@ -1015,5 +1000,28 @@ This function could be in the list `eshell-output-filter-functions'."
(custom-add-option 'eshell-output-filter-functions
'eshell-handle-ansi-color)
+;;; Bookmark support:
+
+(declare-function bookmark-make-record-default
+ "bookmark" (&optional no-file no-context posn))
+(declare-function bookmark-prop-get "bookmark" (bookmark prop))
+
+(defun eshell-bookmark-name ()
+ (format "eshell-%s"
+ (file-name-nondirectory
+ (directory-file-name
+ (file-name-directory default-directory)))))
+
+(defun eshell-bookmark-make-record ()
+ "Create a bookmark for the current Eshell buffer."
+ `(,(eshell-bookmark-name)
+ (location . ,default-directory)
+ (handler . eshell-bookmark-jump)))
+
+(defun eshell-bookmark-jump (bookmark)
+ "Default bookmark handler for Eshell buffers."
+ (let ((default-directory (bookmark-prop-get bookmark 'location)))
+ (eshell)))
+
(provide 'esh-mode)
;;; esh-mode.el ends here
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index 419b76101b5..3ed4b54d223 100644
--- a/lisp/facemenu.el
+++ b/lisp/facemenu.el
@@ -445,7 +445,7 @@ sets the CHARSET property of the character at point."
(interactive (list (progn
(barf-if-buffer-read-only)
(read-charset
- (format "Use charset (default %s): " (charset-after))
+ (format-prompt "Use charset" (charset-after))
(charset-after)))
(if (and mark-active (not current-prefix-arg))
(region-beginning))
diff --git a/lisp/faces.el b/lisp/faces.el
index ba85973bf10..7c23e58fd9d 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1212,10 +1212,7 @@ Value is the new attribute value."
(setq name (concat (upcase (substring name 0 1)) (substring name 1)))
(let* ((completion-ignore-case t)
(value (completing-read
- (format-message (if default
- "%s for face `%s' (default %s): "
- "%s for face `%s': ")
- name face default)
+ (format-prompt "%s for face `%s'" default name face)
completion-alist nil nil nil nil default)))
(if (equal value "") default value)))
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 28f566dd93a..3e65c687af6 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -110,8 +110,6 @@
(require 'url-parse)
(require 'thingatpt)
-(define-obsolete-variable-alias 'ffap-version 'emacs-version "23.2")
-
(defgroup ffap nil
"Find file or URL at point."
:group 'matching
@@ -1753,7 +1751,7 @@ Function CONT is applied to the entry chosen by the user."
;; Bug: prompting may assume unique strings, no "".
(setq choice
(completing-read
- (format "%s (default %s): " title (car (car alist)))
+ (format-prompt title (car (car alist)))
alist nil t
;; (cons (car (car alist)) 0)
nil)))
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 3c07a494206..113d28cf75e 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -614,9 +614,6 @@ the name is considered already unique; only the second substitution
(select-window (active-minibuffer-window))
(file-cache-minibuffer-complete nil)))
-(define-obsolete-function-alias 'file-cache-mouse-choose-completion
- #'file-cache-choose-completion "23.2")
-
(defun file-cache-complete ()
"Complete the word at point, using the filecache."
(interactive)
diff --git a/lisp/fileloop.el b/lisp/fileloop.el
index d52e35d886f..458c25a49b0 100644
--- a/lisp/fileloop.el
+++ b/lisp/fileloop.el
@@ -4,18 +4,20 @@
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/files-x.el b/lisp/files-x.el
index 5d863626fa5..911e7ba9e3d 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -45,9 +45,7 @@ Intended to be used in the `interactive' spec of
(symbol-name default)))
(variable
(completing-read
- (if default
- (format "%s (default %s): " prompt default)
- (format "%s: " prompt))
+ (format-prompt prompt default)
obarray
(lambda (sym)
(or (custom-variable-p sym)
@@ -65,9 +63,7 @@ Intended to be used in the `interactive' spec of
(let* ((default (and (symbolp major-mode) (symbol-name major-mode)))
(value
(completing-read
- (if default
- (format "Add %s with value (default %s): " variable default)
- (format "Add %s with value: " variable))
+ (format-prompt "Add %s with value" default variable)
obarray
(lambda (sym)
(string-match-p "-mode\\'" (symbol-name sym)))
@@ -79,11 +75,8 @@ Intended to be used in the `interactive' spec of
((eq variable 'coding)
(let ((default (and (symbolp buffer-file-coding-system)
(symbol-name buffer-file-coding-system))))
- (read-coding-system
- (if default
- (format "Add %s with value (default %s): " variable default)
- (format "Add %s with value: " variable))
- default)))
+ (read-coding-system (format-prompt "Add %s with value" default variable)
+ default)))
(t
(let ((default (format "%S"
(cond ((eq variable 'unibyte) t)
@@ -102,9 +95,7 @@ Intended to be used in the `interactive' spec of
(let* ((default (and (symbolp major-mode) (symbol-name major-mode)))
(mode
(completing-read
- (if default
- (format "Mode or subdirectory (default %s): " default)
- (format "Mode or subdirectory: "))
+ (format-prompt "Mode or subdirectory" default)
obarray
(lambda (sym)
(and (string-match-p "-mode\\'" (symbol-name sym))
diff --git a/lisp/files.el b/lisp/files.el
index f92c3793b00..e6629d2a21a 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1563,8 +1563,8 @@ use with M-x."
(and (not (memq 'eight-bit-control charsets))
(not (memq 'eight-bit-graphic charsets)))))
(setq from-coding (read-coding-system
- (format "Recode filename %s from (default %s): "
- filename default-coding)
+ (format-prompt "Recode filename %s from"
+ filename default-coding)
default-coding))
(setq from-coding (read-coding-system
(format "Recode filename %s from: " filename))))
@@ -1576,8 +1576,8 @@ use with M-x."
(format "Recode filename %s from %s to: "
filename from-coding)))
(setq to-coding (read-coding-system
- (format "Recode filename %s from %s to (default %s): "
- filename from-coding default-coding)
+ (format-prompt "Recode filename %s from %s to"
+ default-coding filename from-coding)
default-coding)))
(list filename from-coding to-coding)))
@@ -5566,10 +5566,28 @@ change the additional actions you can take on files."
t
(setq queried t)
(if (buffer-file-name buffer)
- (format "Save file %s? "
- (buffer-file-name buffer))
- (format "Save buffer %s? "
- (buffer-name buffer))))))
+ (if (or
+ (equal (buffer-name buffer)
+ (file-name-nondirectory
+ (buffer-file-name buffer)))
+ (string-match
+ (concat "\\<"
+ (regexp-quote
+ (file-name-nondirectory
+ (buffer-file-name buffer)))
+ "<[^>]*>\\'")
+ (buffer-name buffer)))
+ ;; The buffer name is similar to the
+ ;; file name.
+ (format "Save file %s? "
+ (buffer-file-name buffer))
+ ;; The buffer and file names are
+ ;; dissimilar; display both.
+ (format "Save file %s (buffer %s)? "
+ (buffer-file-name buffer)
+ (buffer-name buffer)))
+ ;; No file name
+ (format "Save buffer %s? " (buffer-name buffer))))))
(lambda (buffer)
(with-current-buffer buffer
(save-buffer)))
@@ -5655,25 +5673,28 @@ like `write-region' does."
(defun file-newest-backup (filename)
"Return most recent backup file for FILENAME or nil if no backups exist."
+ (car (file-backup-file-names filename)))
+
+(defun file-backup-file-names (filename)
+ "Return a list of backup files for FILENAME.
+The list will be sorted by modification time so that the most
+recent files are first."
;; `make-backup-file-name' will get us the right directory for
;; ordinary or numeric backups. It might create a directory for
;; backups as a side-effect, according to `backup-directory-alist'.
(let* ((filename (file-name-sans-versions
(make-backup-file-name (expand-file-name filename))))
- (file (file-name-nondirectory filename))
- (dir (file-name-directory filename))
- (comp (file-name-all-completions file dir))
- (newest nil)
- tem)
- (while comp
- (setq tem (pop comp))
- (cond ((and (backup-file-name-p tem)
- (string= (file-name-sans-versions tem) file))
- (setq tem (concat dir tem))
- (if (or (null newest)
- (file-newer-than-file-p tem newest))
- (setq newest tem)))))
- newest))
+ (dir (file-name-directory filename)))
+ (sort
+ (seq-filter
+ (lambda (candidate)
+ (and (backup-file-name-p candidate)
+ (string= (file-name-sans-versions candidate) filename)))
+ (mapcar
+ (lambda (file)
+ (concat dir file))
+ (file-name-all-completions (file-name-nondirectory filename) dir)))
+ #'file-newer-than-file-p)))
(defun rename-uniquely ()
"Rename current buffer to a similar name not already taken.
@@ -5894,9 +5915,9 @@ last-modified time as the old ones. (This works on only some systems.)
A prefix arg makes KEEP-TIME non-nil.
-Noninteractively, the last argument PARENTS says whether to
-create parent directories if they don't exist. Interactively,
-this happens by default.
+Noninteractively, the PARENTS argument says whether to create
+parent directories if they don't exist. Interactively, this
+happens by default.
If NEWNAME is a directory name, copy DIRECTORY as a subdirectory
there. However, if called from Lisp with a non-nil optional
@@ -6462,7 +6483,7 @@ Also rename any existing auto save file, if it was made in this session."
(defun make-auto-save-file-name ()
"Return file name to use for auto-saves of current buffer.
Does not consider `auto-save-visited-file-name' as that variable is checked
-before calling this function. You can redefine this for customization.
+before calling this function.
See also `auto-save-file-name-p'."
(if buffer-file-name
(let ((handler (find-file-name-handler buffer-file-name
@@ -6569,7 +6590,8 @@ See also `auto-save-file-name-p'."
(defun auto-save-file-name-p (filename)
"Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
-FILENAME should lack slashes. You can redefine this for customization."
+FILENAME should lack slashes.
+See also `make-auto-save-file-name'."
(string-match "\\`#.*#\\'" filename))
(defun wildcard-to-regexp (wildcard)
@@ -7048,6 +7070,8 @@ normally equivalent short `-D' option is just passed on to
((stringp switches) (concat switches " -d"))
((member "-d" switches) switches)
(t (append switches '("-d"))))))
+ (if (string-match "\\`~" file)
+ (setq file (expand-file-name file)))
(apply 'call-process
insert-directory-program nil t nil
(append
@@ -7058,14 +7082,7 @@ normally equivalent short `-D' option is just passed on to
(split-string-and-unquote switches)))
;; Avoid lossage if FILE starts with `-'.
'("--")
- (progn
- (if (string-match "\\`~" file)
- (setq file (expand-file-name file)))
- (list
- (if full-directory-p
- ;; (concat (file-name-as-directory file) ".")
- file
- file))))))))
+ (list file))))))
;; If we got "//DIRED//" in the output, it means we got a real
;; directory listing, even if `ls' returned nonzero.
diff --git a/lisp/format.el b/lisp/format.el
index f3559ba9b21..905ca2d9ec9 100644
--- a/lisp/format.el
+++ b/lisp/format.el
@@ -342,8 +342,8 @@ for identifying regular expressions at the beginning of the region."
FORMAT defaults to `buffer-file-format'. It is a symbol naming one of the
formats defined in `format-alist', or a list of such symbols."
(interactive
- (list (format-read (format "Translate buffer to format (default %s): "
- buffer-file-format))))
+ (list (format-read (format-prompt "Translate buffer to format"
+ buffer-file-format))))
(format-encode-region (point-min) (point-max) format))
(defun format-encode-region (beg end &optional format)
@@ -352,8 +352,8 @@ FORMAT defaults to `buffer-file-format'. It is a symbol naming
one of the formats defined in `format-alist', or a list of such symbols."
(interactive
(list (region-beginning) (region-end)
- (format-read (format "Translate region to format (default %s): "
- buffer-file-format))))
+ (format-read (format-prompt "Translate region to format"
+ buffer-file-format))))
(if (null format) (setq format buffer-file-format))
(if (symbolp format) (setq format (list format)))
(save-excursion
diff --git a/lisp/frame.el b/lisp/frame.el
index 081d3010e9b..70088545a68 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -733,7 +733,7 @@ argument PARAMETERS specifies additional frame parameters."
(list
(let* ((default (cdr (assq 'name (frame-monitor-attributes)))))
(completing-read
- (format "Make frame on monitor (default %s): " default)
+ (format-prompt "Make frame on monitor" default)
(or (delq nil (mapcar (lambda (a)
(cdr (assq 'name a)))
(display-monitor-attributes-list)))
@@ -760,7 +760,7 @@ If DISPLAY is nil, that stands for the selected frame's display."
(list
(let* ((default (frame-parameter nil 'display))
(display (completing-read
- (format "Close display (default %s): " default)
+ (format-prompt "Close display" default)
(delete-dups
(mapcar (lambda (frame)
(frame-parameter frame 'display))
@@ -1130,7 +1130,7 @@ If there is no frame by that name, signal an error."
(let* ((frame-names-alist (make-frame-names-alist))
(default (car (car frame-names-alist)))
(input (completing-read
- (format "Select Frame (default %s): " default)
+ (format-prompt "Select Frame" default)
frame-names-alist nil t nil 'frame-name-history)))
(if (= (length input) 0)
(list default)
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 88873f47bd5..03e447e072a 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -3934,7 +3934,7 @@ If REREAD is not nil, downloaded articles are marked as unread."
(mm-with-unibyte-buffer
(nnheader-insert-file-contents file)
(nnheader-remove-body)
- (setq header (nnheader-parse-naked-head)))
+ (setq header (nnheader-parse-head t)))
(setf (mail-header-number header) (car downloaded))
(if nov-arts
(let ((key (concat "^" (int-to-string (car nov-arts))
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 02a8ea723d3..7ca3bf1ce1c 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -186,7 +186,7 @@ it's not cached."
(gnus-cache-update-file-total-fetched-for group file))
(setq lines-chars (nnheader-get-lines-and-char))
(nnheader-remove-body)
- (setq headers (nnheader-parse-naked-head))
+ (setq headers (nnheader-parse-head t))
(setf (mail-header-number headers) number)
(setf (mail-header-lines headers) (car lines-chars))
(setf (mail-header-chars headers) (cadr lines-chars))
diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el
index 673a4d22988..3e23e263262 100644
--- a/lisp/gnus/gnus-cloud.el
+++ b/lisp/gnus/gnus-cloud.el
@@ -391,6 +391,8 @@ When FULL is t, upload everything, not just a difference from the last full."
(gnus-group-refresh-group group))
(gnus-error 2 "Failed to upload Gnus Cloud data to %s" group)))))
+(defvar gnus-alter-header-function)
+
(defun gnus-cloud-add-timestamps (elems)
(dolist (elem elems)
(let* ((file-name (plist-get elem :file-name))
@@ -409,8 +411,9 @@ When FULL is t, upload everything, not just a difference from the last full."
(when (gnus-retrieve-headers (gnus-uncompress-range active) group)
(with-current-buffer nntp-server-buffer
(goto-char (point-min))
- (while (and (not (eobp))
- (setq head (nnheader-parse-head)))
+ (while (setq head (nnheader-parse-head))
+ (when gnus-alter-header-function
+ (funcall gnus-alter-header-function head))
(push head headers))))
(sort (nreverse headers)
(lambda (h1 h2)
diff --git a/lisp/gnus/gnus-dbus.el b/lisp/gnus/gnus-dbus.el
new file mode 100644
index 00000000000..8fbeffba437
--- /dev/null
+++ b/lisp/gnus/gnus-dbus.el
@@ -0,0 +1,70 @@
+;;; gnus-dbus.el --- DBUS integration for Gnus -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library contains some Gnus integration for systems using DBUS.
+;; At present it registers a signal to close all Gnus servers before
+;; system sleep or hibernation.
+
+;;; Code:
+
+(require 'gnus)
+(require 'dbus)
+(declare-function gnus-close-all-servers "gnus-start")
+
+(defcustom gnus-dbus-close-on-sleep nil
+ "When non-nil, close Gnus servers on system sleep."
+ :group 'gnus-dbus
+ :type 'boolean)
+
+(defvar gnus-dbus-sleep-registration-object nil
+ "Object returned from `dbus-register-signal'.
+Used to unregister the signal.")
+
+(defun gnus-dbus-register-sleep-signal ()
+ "Use `dbus-register-signal' to close servers on sleep."
+ (when (featurep 'dbusbind)
+ (setq gnus-dbus-sleep-registration-object
+ (dbus-register-signal :system
+ "org.freedesktop.login1"
+ "/org/freedesktop/login1"
+ "org.freedesktop.login1.Manager"
+ "PrepareForSleep"
+ #'gnus-dbus-sleep-handler))
+ (gnus-add-shutdown #'gnus-dbus-unregister-sleep-signal 'gnus)))
+
+(defun gnus-dbus-sleep-handler (sleep-start)
+ ;; Sleep-start is t before sleeping.
+ (when (and sleep-start
+ (gnus-alive-p))
+ (condition-case nil
+ (gnus-close-all-servers)
+ (error nil))))
+
+(defun gnus-dbus-unregister-sleep-signal ()
+ (condition-case nil
+ (dbus-unregister-object
+ gnus-dbus-sleep-registration-object)
+ (wrong-type-argument nil)))
+
+(provide 'gnus-dbus)
+;;; gnus-dbus.el ends here
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 97e10a37a21..a90243b8b6c 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -49,8 +49,6 @@
(autoload 'gnus-agent-total-fetched-for "gnus-agent")
(autoload 'gnus-cache-total-fetched-for "gnus-cache")
-(autoload 'gnus-group-make-nnir-group "nnir")
-
(autoload 'gnus-cloud-upload-all-data "gnus-cloud")
(autoload 'gnus-cloud-download-all-data "gnus-cloud")
@@ -663,7 +661,8 @@ simple manner."
"D" gnus-group-enter-directory
"f" gnus-group-make-doc-group
"w" gnus-group-make-web-group
- "G" gnus-group-make-nnir-group
+ "G" gnus-group-read-ephemeral-search-group
+ "g" gnus-group-make-search-group
"M" gnus-group-read-ephemeral-group
"r" gnus-group-rename-group
"R" gnus-group-make-rss-group
@@ -909,7 +908,8 @@ simple manner."
["Add the help group" gnus-group-make-help-group t]
["Make a doc group..." gnus-group-make-doc-group t]
["Make a web group..." gnus-group-make-web-group t]
- ["Make a search group..." gnus-group-make-nnir-group t]
+ ["Read a search group..." gnus-group-read-ephemeral-search-group t]
+ ["Make a search group..." gnus-group-make-search-group t]
["Make a virtual group..." gnus-group-make-empty-virtual t]
["Add a group to a virtual..." gnus-group-add-to-virtual t]
["Make an ephemeral group..." gnus-group-read-ephemeral-group t]
@@ -2411,13 +2411,13 @@ the bug number, and browsing the URL must return mbox output."
(require 'bug-reference)
(let ((def (cond ((thing-at-point-looking-at bug-reference-bug-regexp 500)
(match-string 2))
- ((number-at-point)))))
+ ((and (number-at-point)
+ (abs (number-at-point)))))))
;; Pass DEF as the value of COLLECTION instead of DEF because:
;; a) null input should not cause DEF to be returned and
;; b) TAB and M-n still work this way.
- (or (completing-read-multiple
- (format "Bug IDs%s: " (if def (format " (default %s)" def) ""))
- (and def (list (format "%s" def))))
+ (or (completing-read-multiple (format-prompt "Bug IDs" def)
+ (and def (list (format "%s" def))))
def)))
(defun gnus-read-ephemeral-bug-group (ids mbox-url &optional window-conf)
@@ -3165,6 +3165,52 @@ mail messages or news articles in files that have numeric names."
(gnus-group-real-name group)
(list 'nndir (gnus-group-real-name group) (list 'nndir-directory dir)))))
+
+(autoload 'nnir-make-specs "nnir")
+(autoload 'gnus-group-topic-name "gnus-topic")
+
+;; Temporary to make group creation easier
+(defun gnus-group-make-search-group (nnir-extra-parms &optional specs)
+ (interactive "P")
+ (let ((name (gnus-read-group "Group name: ")))
+ (with-current-buffer gnus-group-buffer
+ (gnus-group-make-group
+ name
+ (list 'nnselect "nnselect")
+ nil
+ (list
+ (cons 'nnselect-specs
+ (list
+ (cons 'nnselect-function 'nnir-run-query)
+ (cons 'nnselect-args
+ (nnir-make-specs nnir-extra-parms specs)))))))))
+
+(defun gnus-group-read-ephemeral-search-group (nnir-extra-parms &optional specs)
+ "Create an nnselect group based on a search.
+Prompt for a search query and determine the groups to search as
+follows: if called from the *Server* buffer search all groups
+belonging to the server on the current line; if called from the
+*Group* buffer search any marked groups, or the group on the
+current line, or all the groups under the current topic. Calling
+with a prefix arg prompts for additional search-engine specific
+constraints. A non-nil SPECS arg must be an alist with
+`nnir-query-spec' and `nnir-group-spec' keys, and skips all
+prompting."
+ (interactive "P")
+ (gnus-group-read-ephemeral-group
+ (concat "nnselect-" (message-unique-id))
+ (list 'nnselect "nnselect")
+ nil
+ (cons (current-buffer) gnus-current-window-configuration)
+ nil nil
+ (list
+ (cons 'nnselect-specs
+ (list
+ (cons 'nnselect-function 'nnir-run-query)
+ (cons 'nnselect-args
+ (nnir-make-specs nnir-extra-parms specs))))
+ (cons 'nnselect-artlist nil))))
+
(defun gnus-group-add-to-virtual (n vgroup)
"Add the current group to a virtual group."
(interactive
@@ -3697,9 +3743,8 @@ Uses the process/prefix convention."
(error "No group on the current line"))
(string-to-number
(let ((s (read-string
- (format "Level (default %s): "
- (or (gnus-group-group-level)
- gnus-level-default-subscribed)))))
+ (format-prompt "Level" (or (gnus-group-group-level)
+ gnus-level-default-subscribed)))))
(if (string-match "^\\s-*$" s)
(int-to-string (or (gnus-group-group-level)
gnus-level-default-subscribed))
@@ -4300,8 +4345,7 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending."
;; Closing all the backends is useful (for instance) when when the
;; IP addresses have changed and you need to reconnect.
(dolist (elem gnus-opened-servers)
- (gnus-close-server (car elem))
- (setcar (cdr elem) 'closed))
+ (gnus-close-server (car elem)))
(when group-buf
(bury-buffer group-buf)
(delete-windows-on group-buf t))))
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el
index 29d3e30780f..f624b9d032f 100644
--- a/lisp/gnus/gnus-icalendar.el
+++ b/lisp/gnus/gnus-icalendar.el
@@ -5,18 +5,20 @@
;; Author: Jan Tatarik <Jan.Tatarik@gmail.com>
;; Keywords: mail, icalendar, org
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
@@ -138,6 +140,22 @@
(or (match-string 1 rrule)
default-interval)))
+(cl-defmethod gnus-icalendar-event:recurring-days ((event gnus-icalendar-event))
+ "Return, when available, the week day numbers on which the EVENT recurs."
+ (let ((rrule (gnus-icalendar-event:recur event))
+ (weekday-map '(("SU" . 0)
+ ("MO" . 1)
+ ("TU" . 2)
+ ("WE" . 3)
+ ("TH" . 4)
+ ("FR" . 5)
+ ("SA" . 6))))
+ (when (and rrule (string-match "BYDAY=\\([^;]+\\)" rrule))
+ (let ((bydays (split-string (match-string 1 rrule) ",")))
+ (seq-map
+ (lambda (x) (cdr (assoc x weekday-map)))
+ (seq-filter (lambda (x) (string-match "^[A-Z]\\{2\\}$" x)) bydays))))))
+
(cl-defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
(format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event)))
@@ -401,21 +419,26 @@ Return nil for non-recurring EVENT."
(when org-freq
(format "+%s%s" (gnus-icalendar-event:recurring-interval event) org-freq)))))
-(cl-defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
- "Build `org-mode' timestamp from EVENT start/end dates and recurrence info."
- (let* ((start (gnus-icalendar-event:start-time event))
- (end (gnus-icalendar-event:end-time event))
- (start-date (format-time-string "%Y-%m-%d" start))
+(defun gnus-icalendar--find-day (start-date end-date day)
+ (let ((time-1-day 86400))
+ (if (= (decoded-time-weekday (decode-time start-date))
+ day)
+ (list start-date end-date)
+ (gnus-icalendar--find-day (time-add start-date time-1-day)
+ (time-add end-date time-1-day)
+ day))))
+
+(defun gnus-icalendar-event--org-timestamp (start end org-repeat)
+ (let* ((start-date (format-time-string "%Y-%m-%d" start))
(start-time (format-time-string "%H:%M" start))
(start-at-midnight (string= start-time "00:00"))
(end-date (format-time-string "%Y-%m-%d" end))
(end-time (format-time-string "%H:%M" end))
(end-at-midnight (string= end-time "00:00"))
(start-end-date-diff
- (time-to-number-of-days (time-subtract
- (org-time-string-to-time end-date)
- (org-time-string-to-time start-date))))
- (org-repeat (gnus-icalendar-event:org-repeat event))
+ (time-to-number-of-days
+ (time-subtract (org-time-string-to-time end-date)
+ (org-time-string-to-time start-date))))
(repeat (if org-repeat (concat " " org-repeat) ""))
(time-1-day 86400))
@@ -446,7 +469,31 @@ Return nil for non-recurring EVENT."
;; A .:. - A .:. -> A .:.-.:.
;; A .:. - B .:.
((zerop start-end-date-diff) (format "<%s %s-%s%s>" start-date start-time end-time repeat))
- (t (format "<%s %s>--<%s %s>" start-date start-time end-date end-time)))))
+ (t (format "<%s %s>--<%s %s>" start-date start-time end-date end-time))))
+ )
+
+(cl-defmethod gnus-icalendar-event:org-timestamp ((event gnus-icalendar-event))
+ "Build `org-mode' timestamp from EVENT start/end dates and recurrence info."
+ ;; if org-repeat +1d or +1w and byday: generate one timestamp per
+ ;; byday, starting at start-date. Change +1d to +7d.
+ (let ((start (gnus-icalendar-event:start-time event))
+ (end (gnus-icalendar-event:end-time event))
+ (org-repeat (gnus-icalendar-event:org-repeat event))
+ (recurring-days (gnus-icalendar-event:recurring-days event)))
+ (if (and (or (string= org-repeat "+1d")
+ (string= org-repeat "+1w"))
+ recurring-days)
+ (let ((repeat "+1w")
+ (dates (seq-sort-by
+ 'car
+ 'time-less-p
+ (seq-map (lambda (x)
+ (gnus-icalendar--find-day start end x))
+ recurring-days))))
+ (mapconcat (lambda (x)
+ (gnus-icalendar-event--org-timestamp (car x) (cadr x)
+ repeat)) dates "\n"))
+ (gnus-icalendar-event--org-timestamp start end org-repeat))))
(defun gnus-icalendar--format-summary-line (summary &optional location)
(if location
@@ -757,7 +804,7 @@ These will be used to retrieve the RSVP information from ical events."
`(let ((,charset (cdr (assoc 'charset (mm-handle-type ,handle)))))
(with-temp-buffer
(mm-insert-part ,handle)
- (when (string= (downcase ,charset) "utf-8")
+ (when (and ,charset (string= (downcase ,charset) "utf-8"))
(decode-coding-region (point-min) (point-max) 'utf-8))
,@body))))
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 60ebc07c343..da385a18023 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -351,9 +351,12 @@ If it is down, start it up (again)."
"Close the connection to GNUS-COMMAND-METHOD."
(when (stringp gnus-command-method)
(setq gnus-command-method (gnus-server-to-method gnus-command-method)))
- (funcall (gnus-get-function gnus-command-method 'close-server)
- (nth 1 gnus-command-method)
- (nthcdr 2 gnus-command-method)))
+ (prog1
+ (funcall (gnus-get-function gnus-command-method 'close-server)
+ (nth 1 gnus-command-method)
+ (nthcdr 2 gnus-command-method))
+ (when-let ((elem (assoc gnus-command-method gnus-opened-servers)))
+ (setf (nth 1 elem) 'closed))))
(defun gnus-request-list (gnus-command-method)
"Request the active file from GNUS-COMMAND-METHOD."
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index cdfbf16db5e..7bc7fb5be41 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -393,10 +393,9 @@ only affect the Gcc copy, but not the original message."
(gnus-inews-make-draft-meta-information
,gnus-newsgroup-name ',articles)))
-(autoload 'nnir-article-number "nnir" nil nil 'macro)
-(autoload 'nnir-article-group "nnir" nil nil 'macro)
-(autoload 'gnus-nnir-group-p "nnir")
-
+(autoload 'nnselect-article-number "nnselect" nil nil 'macro)
+(autoload 'nnselect-article-group "nnselect" nil nil 'macro)
+(autoload 'gnus-nnselect-group-p "nnselect")
(defvar gnus-article-reply nil)
(defmacro gnus-setup-message (config &rest forms)
@@ -404,22 +403,24 @@ only affect the Gcc copy, but not the original message."
(winconf-name (make-symbol "gnus-setup-message-winconf-name"))
(buffer (make-symbol "gnus-setup-message-buffer"))
(article (make-symbol "gnus-setup-message-article"))
+ (oarticle (make-symbol "gnus-setup-message-oarticle"))
(yanked (make-symbol "gnus-setup-yanked-articles"))
(group (make-symbol "gnus-setup-message-group")))
`(let ((,winconf (current-window-configuration))
(,winconf-name gnus-current-window-configuration)
(,buffer (buffer-name (current-buffer)))
- (,article (if (and (gnus-nnir-group-p gnus-newsgroup-name)
- gnus-article-reply)
- (nnir-article-number (or (car-safe gnus-article-reply)
- gnus-article-reply))
- gnus-article-reply))
+ (,article (when gnus-article-reply
+ (or (nnselect-article-number
+ (or (car-safe gnus-article-reply)
+ gnus-article-reply))
+ gnus-article-reply)))
+ (,oarticle gnus-article-reply)
(,yanked gnus-article-yanked-articles)
- (,group (if (and (gnus-nnir-group-p gnus-newsgroup-name)
- gnus-article-reply)
- (nnir-article-group (or (car-safe gnus-article-reply)
- gnus-article-reply))
- gnus-newsgroup-name))
+ (,group (when gnus-article-reply
+ (or (nnselect-article-group
+ (or (car-safe gnus-article-reply)
+ gnus-article-reply))
+ gnus-newsgroup-name)))
(message-header-setup-hook
(copy-sequence message-header-setup-hook))
(mbl mml-buffer-list)
@@ -460,24 +461,23 @@ only affect the Gcc copy, but not the original message."
(unwind-protect
(progn
,@forms)
- (gnus-inews-add-send-actions ,winconf ,buffer ,article ,config
+ (gnus-inews-add-send-actions ,winconf ,buffer ,oarticle ,config
,yanked ,winconf-name)
(setq gnus-message-buffer (current-buffer))
(set (make-local-variable 'gnus-message-group-art)
(cons ,group ,article))
- (set (make-local-variable 'gnus-newsgroup-name) ,group)
- ;; Enable highlighting of different citation levels
- (when gnus-message-highlight-citation
- (gnus-message-citation-mode 1))
- (gnus-run-hooks 'gnus-message-setup-hook)
- (if (eq major-mode 'message-mode)
- (let ((mbl1 mml-buffer-list))
- (setq mml-buffer-list mbl) ;; Global value
- (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
- (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
- (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
- (mml-destroy-buffers)
- (setq mml-buffer-list mbl)))
+ ;; Enable highlighting of different citation levels
+ (when gnus-message-highlight-citation
+ (gnus-message-citation-mode 1))
+ (gnus-run-hooks 'gnus-message-setup-hook)
+ (if (eq major-mode 'message-mode)
+ (let ((mbl1 mml-buffer-list))
+ (setq mml-buffer-list mbl) ;; Global value
+ (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
+ (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
+ (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
+ (mml-destroy-buffers)
+ (setq mml-buffer-list mbl)))
(message-hide-headers)
(gnus-add-buffer)
(gnus-configure-windows ,config t)
@@ -521,12 +521,10 @@ instead."
mail-buf)
(unwind-protect
(progn
- (setq gnus-newsgroup-name "")
+ (let ((gnus-newsgroup-name ""))
(gnus-setup-message 'message
(message-mail to subject other-headers continue
- nil yank-action send-actions return-action)))
- (with-current-buffer buf
- (setq gnus-newsgroup-name group-name)))
+ nil yank-action send-actions return-action)))))
(when switch-action
(setq mail-buf (current-buffer))
(switch-to-buffer buf)
@@ -617,18 +615,15 @@ If ARG is 1, prompt for a group name to find the posting style."
(buffer (current-buffer)))
(unwind-protect
(progn
- (setq gnus-newsgroup-name
- (if arg
- (if (= 1 (prefix-numeric-value arg))
- (gnus-group-completing-read
- "Use posting style of group"
- nil (gnus-read-active-file-p))
- (gnus-group-group-name))
- ""))
- ;; #### see comment in gnus-setup-message -- drv
- (gnus-setup-message 'message (message-mail)))
- (with-current-buffer buffer
- (setq gnus-newsgroup-name group)))))
+ (let ((gnus-newsgroup-name
+ (if arg
+ (if (= 1 (prefix-numeric-value arg))
+ (gnus-group-completing-read
+ "Use posting style of group"
+ nil (gnus-read-active-file-p))
+ (gnus-group-group-name))
+ "")))
+ (gnus-setup-message 'message (message-mail)))))))
(defun gnus-group-news (&optional arg)
"Start composing a news.
@@ -647,19 +642,16 @@ network. The corresponding back end must have a `request-post' method."
(buffer (current-buffer)))
(unwind-protect
(progn
- (setq gnus-newsgroup-name
+ (let ((gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
(gnus-group-completing-read "Use group"
nil
(gnus-read-active-file-p))
(gnus-group-group-name))
- ""))
- ;; #### see comment in gnus-setup-message -- drv
+ "")))
(gnus-setup-message 'message
- (message-news (gnus-group-real-name gnus-newsgroup-name))))
- (with-current-buffer buffer
- (setq gnus-newsgroup-name group)))))
+ (message-news (gnus-group-real-name gnus-newsgroup-name))))))))
(defun gnus-group-post-news (&optional arg)
"Start composing a message (a news by default).
@@ -694,18 +686,15 @@ posting style."
(buffer (current-buffer)))
(unwind-protect
(progn
- (setq gnus-newsgroup-name
+ (let ((gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
(gnus-group-completing-read "Use group"
nil
(gnus-read-active-file-p))
"")
- gnus-newsgroup-name))
- ;; #### see comment in gnus-setup-message -- drv
- (gnus-setup-message 'message (message-mail)))
- (with-current-buffer buffer
- (setq gnus-newsgroup-name group)))))
+ gnus-newsgroup-name)))
+ (gnus-setup-message 'message (message-mail)))))))
(defun gnus-summary-news-other-window (&optional arg)
"Start composing a news in another window.
@@ -724,24 +713,21 @@ network. The corresponding back end must have a `request-post' method."
(buffer (current-buffer)))
(unwind-protect
(progn
- (setq gnus-newsgroup-name
+ (let ((gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
(gnus-group-completing-read "Use group"
nil
(gnus-read-active-file-p))
"")
- gnus-newsgroup-name))
- ;; #### see comment in gnus-setup-message -- drv
+ gnus-newsgroup-name)))
(gnus-setup-message 'message
(progn
(message-news (gnus-group-real-name gnus-newsgroup-name))
(set (make-local-variable 'gnus-discouraged-post-methods)
(remove
(car (gnus-find-method-for-group gnus-newsgroup-name))
- gnus-discouraged-post-methods)))))
- (with-current-buffer buffer
- (setq gnus-newsgroup-name group)))))
+ gnus-discouraged-post-methods)))))))))
(defun gnus-summary-post-news (&optional arg)
"Start composing a message. Post to the current group by default.
@@ -823,7 +809,7 @@ active, the entire article will be yanked."
(with-current-buffer gnus-article-copy
(save-restriction
(nnheader-narrow-to-headers)
- (nnheader-parse-naked-head)))))
+ (nnheader-parse-head t)))))
(message-yank-original)
(message-exchange-point-and-mark)
(setq beg (or beg (mark t))))
@@ -1598,7 +1584,7 @@ this is a reply."
(message-remove-header "gcc")
(widen)
(setq groups (message-unquote-tokens
- (message-tokenize-header gcc " ,")))
+ (message-tokenize-header gcc " ,\n\t")))
;; Copy the article over to some group(s).
(while (setq group (pop groups))
(setq method (gnus-inews-group-method group)
@@ -1993,10 +1979,10 @@ process-mark several articles, they will all be attached."
(gnus-summary-iterate n
(gnus-summary-select-article)
(with-current-buffer destination
- ;; Attach at the end of the buffer.
- (save-excursion
- (goto-char (point-max))
- (message-forward-make-body-mime gnus-original-article-buffer))))
+ ;; Attach at the end of the buffer.
+ (save-excursion
+ (goto-char (point-max))
+ (message-forward-make-body-mime gnus-original-article-buffer))))
(gnus-configure-windows 'message t)))
(provide 'gnus-msg)
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 1ac1d05e033..65bcd0e8a36 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -427,6 +427,8 @@ This is not required after changing `gnus-registry-cache-file'."
(gnus-message 4 "Removed %d ignored entries from the Gnus registry"
(- old-size (registry-size db)))))
+(declare-function gnus-nnselect-group-p "nnselect" (group))
+(declare-function nnselect-article-group "nnselect" (article))
;; article move/copy/spool/delete actions
(defun gnus-registry-action (action data-header from &optional to method)
(let* ((id (mail-header-id data-header))
@@ -437,7 +439,10 @@ This is not required after changing `gnus-registry-cache-file'."
(or (cdr-safe (assq 'To extra)) "")))
(sender (nth 0 (gnus-registry-extract-addresses
(mail-header-from data-header))))
- (from (gnus-group-guess-full-name-from-command-method from))
+ (from (gnus-group-guess-full-name-from-command-method
+ (if (gnus-nnselect-group-p from)
+ (nnselect-article-group (mail-header-number data-header))
+ from)))
(to (if to (gnus-group-guess-full-name-from-command-method to) nil)))
(gnus-message 7 "Gnus registry: article %s %s from %s to %s"
id (if method "respooling" "going") from to)
@@ -788,7 +793,7 @@ Consults `gnus-registry-unfollowed-groups' and
Consults `gnus-registry-ignored-groups' and
`nnmail-split-fancy-with-parent-ignore-groups'."
(and group
- (or (gnus-grep-in-list
+ (or (gnus-virtual-group-p group) (gnus-grep-in-list
group
(delq nil (mapcar (lambda (g)
(cond
@@ -1218,7 +1223,7 @@ is `ask', ask the user; or if `gnus-registry-install' is non-nil, enable it."
(gnus-registry-initialize)))
gnus-registry-enabled)
-;; largely based on nnir-warp-to-article
+;; largely based on nnselect-warp-to-article
(defun gnus-try-warping-via-registry ()
"Try to warp via the registry.
This will be done via the current article's source group based on
@@ -1242,7 +1247,7 @@ data stored in the registry."
(gnus-ephemeral-group-p group) ;; any ephemeral group
(memq (car (gnus-find-method-for-group group))
;; Specific methods; this list may need to expand.
- '(nnir)))
+ '(nnselect)))
;; remember that we've seen this group already
(push group seen-groups)
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 095e05408d6..6beb543e5a1 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -34,7 +34,7 @@
(require 'gnus-range)
(require 'gnus-cloud)
-(autoload 'gnus-group-make-nnir-group "nnir")
+(autoload 'gnus-group-read-ephemeral-search-group "nnselect")
(defcustom gnus-server-exit-hook nil
"Hook run when exiting the server buffer."
@@ -176,7 +176,7 @@ If nil, a faster, but more primitive, buffer is used instead."
"g" gnus-server-regenerate-server
- "G" gnus-group-make-nnir-group
+ "G" gnus-group-read-ephemeral-search-group
"z" gnus-server-compact-server
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ba8b91be5c5..e4f05de5f8e 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -31,6 +31,7 @@
(require 'gnus-range)
(require 'gnus-util)
(require 'gnus-cloud)
+(require 'gnus-dbus)
(autoload 'message-make-date "message")
(autoload 'gnus-agent-read-servers-validate "gnus-agent")
(autoload 'gnus-agent-save-local "gnus-agent")
@@ -798,6 +799,8 @@ prompt the user for the name of an NNTP server to use."
(gnus-run-hooks 'gnus-setup-news-hook)
(when gnus-agent
(gnus-request-create-group "queue" '(nndraft "")))
+ (when gnus-dbus-close-on-sleep
+ (gnus-dbus-register-sleep-signal))
(gnus-start-draft-setup)
;; Generate the group buffer.
(gnus-group-list-groups level)
@@ -1799,7 +1802,7 @@ backend check whether the group actually exists."
;; by one.
(t
(dolist (info infos)
- (gnus-activate-group (gnus-info-group info) nil nil method t))))))
+ (gnus-activate-group (gnus-info-group info) t nil method t))))))
(defun gnus-make-hashtable-from-newsrc-alist ()
"Create a hash table from `gnus-newsrc-alist'.
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index c53f81fe026..dc4f1c6a386 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -85,8 +85,8 @@
(autoload 'gnus-article-outlook-unwrap-lines "deuglify" nil t)
(autoload 'gnus-article-outlook-repair-attribution "deuglify" nil t)
(autoload 'gnus-article-outlook-rearrange-citation "deuglify" nil t)
-(autoload 'nnir-article-rsv "nnir" nil nil 'macro)
-(autoload 'nnir-article-group "nnir" nil nil 'macro)
+(autoload 'nnselect-article-rsv "nnselect" nil nil)
+(autoload 'nnselect-article-group "nnselect" nil nil)
(defcustom gnus-kill-summary-on-exit t
"If non-nil, kill the summary buffer when you exit from it.
@@ -144,8 +144,8 @@ If t, fetch all the available old headers."
:type '(choice number
(sexp :menu-tag "other" t)))
-(defcustom gnus-refer-thread-use-nnir nil
- "Use nnir to search an entire server when referring threads.
+(defcustom gnus-refer-thread-use-search nil
+ "Search an entire server when referring threads.
A nil value will only search for thread-related articles in the
current group."
:version "24.1"
@@ -884,6 +884,7 @@ controls how articles are sorted."
(function-item gnus-article-sort-by-subject)
(function-item gnus-article-sort-by-date)
(function-item gnus-article-sort-by-score)
+ (function-item gnus-article-sort-by-rsv)
(function-item gnus-article-sort-by-random)
(function :tag "other"))
(boolean :tag "Reverse order"))))
@@ -927,6 +928,7 @@ subthreads, customize `gnus-subthread-sort-functions'."
(function-item gnus-thread-sort-by-subject)
(function-item gnus-thread-sort-by-date)
(function-item gnus-thread-sort-by-score)
+ (function-item gnus-thread-sort-by-rsv)
(function-item gnus-thread-sort-by-most-recent-number)
(function-item gnus-thread-sort-by-most-recent-date)
(function-item gnus-thread-sort-by-random)
@@ -1433,16 +1435,13 @@ the normal Gnus MIME machinery."
(?c (or (mail-header-chars gnus-tmp-header) 0) ?d)
(?k (gnus-summary-line-message-size gnus-tmp-header) ?s)
(?L gnus-tmp-lines ?s)
- (?Z (or (nnir-article-rsv (mail-header-number gnus-tmp-header))
- 0)
- ?d)
- (?G (or (nnir-article-group (mail-header-number gnus-tmp-header))
- "")
- ?s)
+ (?Z (or (nnselect-article-rsv (mail-header-number gnus-tmp-header))
+ 0) ?d)
+ (?G (or (nnselect-article-group (mail-header-number gnus-tmp-header))
+ "") ?s)
(?g (or (gnus-group-short-name
- (nnir-article-group (mail-header-number gnus-tmp-header)))
- "")
- ?s)
+ (nnselect-article-group (mail-header-number gnus-tmp-header)))
+ "") ?s)
(?O gnus-tmp-downloaded ?c)
(?I gnus-tmp-indentation ?s)
(?T (if (= gnus-tmp-level 0) "" (make-string (frame-width) ? )) ?s)
@@ -1619,6 +1618,8 @@ This list will always be a subset of gnus-newsgroup-undownloaded.")
(defvar gnus-newsgroup-sparse nil)
+(defvar gnus-newsgroup-selection nil)
+
(defvar gnus-current-article nil)
(defvar gnus-article-current nil)
(defvar gnus-current-headers nil)
@@ -1653,6 +1654,8 @@ This list will always be a subset of gnus-newsgroup-undownloaded.")
gnus-newsgroup-undownloaded
gnus-newsgroup-unsendable
+ gnus-newsgroup-selection
+
gnus-newsgroup-begin gnus-newsgroup-end
gnus-newsgroup-last-rmail gnus-newsgroup-last-mail
gnus-newsgroup-last-folder gnus-newsgroup-last-file
@@ -4532,48 +4535,14 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise."
;; This function has to be called with point after the article number
;; on the beginning of the line.
(defsubst gnus-nov-parse-line (number dependencies &optional force-new)
- (let ((eol (point-at-eol))
- header references in-reply-to)
-
+ (let (header)
;; overview: [num subject from date id refs chars lines misc]
(unwind-protect
- (let (x)
- (narrow-to-region (point) eol)
- (unless (eobp)
- (forward-char))
-
- (setq header
- (make-full-mail-header
- number ; number
- (condition-case () ; subject
- (gnus-remove-odd-characters
- (funcall gnus-decode-encoded-word-function
- (setq x (nnheader-nov-field))))
- (error x))
- (condition-case () ; from
- (gnus-remove-odd-characters
- (funcall gnus-decode-encoded-address-function
- (setq x (nnheader-nov-field))))
- (error x))
- (nnheader-nov-field) ; date
- (nnheader-nov-read-message-id number) ; id
- (setq references (nnheader-nov-field)) ; refs
- (nnheader-nov-read-integer) ; chars
- (nnheader-nov-read-integer) ; lines
- (unless (eobp)
- (if (looking-at "Xref: ")
- (goto-char (match-end 0)))
- (nnheader-nov-field)) ; Xref
- (nnheader-nov-parse-extra)))) ; extra
-
+ (narrow-to-region (point) (point-at-eol))
+ (unless (eobp)
+ (forward-char))
+ (setq header (nnheader-parse-nov number))
(widen))
-
- (when (and (string= references "")
- (setq in-reply-to (mail-header-extra header))
- (setq in-reply-to (cdr (assq 'In-Reply-To in-reply-to))))
- (setf (mail-header-references header)
- (gnus-extract-message-id-from-in-reply-to in-reply-to)))
-
(when gnus-alter-header-function
(funcall gnus-alter-header-function header))
(gnus-dependencies-add-header header dependencies force-new)))
@@ -5104,6 +5073,17 @@ using some other form will lead to serious barfage."
(gnus-article-sort-by-date
(gnus-thread-header h1) (gnus-thread-header h2)))
+(defsubst gnus-article-sort-by-rsv (h1 h2)
+ "Sort articles by rsv."
+ (when gnus-newsgroup-selection
+ (< (nnselect-article-rsv (mail-header-number h1))
+ (nnselect-article-rsv (mail-header-number h2)))))
+
+(defun gnus-thread-sort-by-rsv (h1 h2)
+ "Sort threads by root article rsv."
+ (gnus-article-sort-by-rsv
+ (gnus-thread-header h1) (gnus-thread-header h2)))
+
(defsubst gnus-article-sort-by-score (h1 h2)
"Sort articles by root article score.
Unscored articles will be counted as having a score of zero."
@@ -5634,22 +5614,32 @@ or a straight list of headers."
"Fetch headers of ARTICLES."
(gnus-message 7 "Fetching headers for %s..." gnus-newsgroup-name)
(prog1
- (if (eq 'nov
- (setq gnus-headers-retrieved-by
- (gnus-retrieve-headers
- articles gnus-newsgroup-name
- (or limit
- ;; We might want to fetch old headers, but
- ;; not if there is only 1 article.
- (and (or (and
- (not (eq gnus-fetch-old-headers 'some))
- (not (numberp gnus-fetch-old-headers)))
- (> (length articles) 1))
- gnus-fetch-old-headers)))))
- (gnus-get-newsgroup-headers-xover
- articles force-new dependencies gnus-newsgroup-name t)
- (gnus-get-newsgroup-headers dependencies force-new))
- (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name)))
+ (pcase (setq gnus-headers-retrieved-by
+ (gnus-retrieve-headers
+ articles gnus-newsgroup-name
+ (or limit
+ ;; We might want to fetch old headers, but
+ ;; not if there is only 1 article.
+ (and (or (and
+ (not (eq gnus-fetch-old-headers 'some))
+ (not (numberp gnus-fetch-old-headers)))
+ (> (length articles) 1))
+ gnus-fetch-old-headers))))
+ ('nov
+ (gnus-get-newsgroup-headers-xover
+ articles force-new dependencies gnus-newsgroup-name t))
+ ('headers
+ (gnus-get-newsgroup-headers dependencies force-new))
+ ((pred listp)
+ (let ((dependencies
+ (or dependencies
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-dependencies))))
+ (delq nil (mapcar #'(lambda (header)
+ (gnus-dependencies-add-header
+ header dependencies force-new))
+ gnus-headers-retrieved-by)))))
+ (gnus-message 7 "Fetching headers for %s...done" gnus-newsgroup-name)))
(defun gnus-select-newsgroup (group &optional read-all select-articles)
"Select newsgroup GROUP.
@@ -6405,12 +6395,11 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(gnus-group-update-group group t))))))
(defun gnus-get-newsgroup-headers (&optional dependencies force-new)
- (let ((cur nntp-server-buffer)
- (dependencies
+ (let ((dependencies
(or dependencies
(with-current-buffer gnus-summary-buffer
gnus-newsgroup-dependencies)))
- headers id end ref number
+ headers
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
(save-current-buffer (condition-case nil
@@ -6418,146 +6407,15 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(error))
gnus-newsgroup-ignored-charsets)))
(with-current-buffer nntp-server-buffer
- ;; Translate all TAB characters into SPACE characters.
- (subst-char-in-region (point-min) (point-max) ?\t ? t)
- (subst-char-in-region (point-min) (point-max) ?\r ? t)
- (ietf-drums-unfold-fws)
(gnus-run-hooks 'gnus-parse-headers-hook)
- (let ((case-fold-search t)
- in-reply-to header p lines chars)
+ (let ((nnmail-extra-headers gnus-extra-headers)
+ header)
(goto-char (point-min))
- ;; Search to the beginning of the next header. Error messages
- ;; do not begin with 2 or 3.
- (while (re-search-forward "^[23][0-9]+ " nil t)
- (setq id nil
- ref nil)
- ;; This implementation of this function, with nine
- ;; search-forwards instead of the one re-search-forward and
- ;; a case (which basically was the old function) is actually
- ;; about twice as fast, even though it looks messier. You
- ;; can't have everything, I guess. Speed and elegance
- ;; doesn't always go hand in hand.
- (setq
- header
- (make-full-mail-header
- ;; Number.
- (prog1
- (setq number (read cur))
- (end-of-line)
- (setq p (point))
- (narrow-to-region (point)
- (or (and (search-forward "\n.\n" nil t)
- (- (point) 2))
- (point))))
- ;; Subject.
- (progn
- (goto-char p)
- (if (search-forward "\nsubject:" nil t)
- (funcall gnus-decode-encoded-word-function
- (nnheader-header-value))
- "(none)"))
- ;; From.
- (progn
- (goto-char p)
- (if (search-forward "\nfrom:" nil t)
- (funcall gnus-decode-encoded-address-function
- (nnheader-header-value))
- "(nobody)"))
- ;; Date.
- (progn
- (goto-char p)
- (if (search-forward "\ndate:" nil t)
- (nnheader-header-value) ""))
- ;; Message-ID.
- (progn
- (goto-char p)
- (setq id (if (re-search-forward
- "^message-id: *\\(<[^\n\t> ]+>\\)" nil t)
- ;; We do it this way to make sure the Message-ID
- ;; is (somewhat) syntactically valid.
- (buffer-substring (match-beginning 1)
- (match-end 1))
- ;; If there was no message-id, we just fake one
- ;; to make subsequent routines simpler.
- (nnheader-generate-fake-message-id number))))
- ;; References.
- (progn
- (goto-char p)
- (if (search-forward "\nreferences:" nil t)
- (progn
- (setq end (point))
- (prog1
- (nnheader-header-value)
- (setq ref
- (buffer-substring
- (progn
- (end-of-line)
- (search-backward ">" end t)
- (1+ (point)))
- (progn
- (search-backward "<" end t)
- (point))))))
- ;; Get the references from the in-reply-to header if there
- ;; were no references and the in-reply-to header looks
- ;; promising.
- (if (and (search-forward "\nin-reply-to:" nil t)
- (setq in-reply-to (nnheader-header-value))
- (string-match "<[^>]+>" in-reply-to))
- (let (ref2)
- (setq ref (substring in-reply-to (match-beginning 0)
- (match-end 0)))
- (while (string-match "<[^>]+>" in-reply-to (match-end 0))
- (setq ref2 (substring in-reply-to (match-beginning 0)
- (match-end 0)))
- (when (> (length ref2) (length ref))
- (setq ref ref2)))
- ref)
- (setq ref nil))))
- ;; Chars.
- (progn
- (goto-char p)
- (if (search-forward "\nchars: " nil t)
- (if (numberp (setq chars (ignore-errors (read cur))))
- chars -1)
- -1))
- ;; Lines.
- (progn
- (goto-char p)
- (if (search-forward "\nlines: " nil t)
- (if (numberp (setq lines (ignore-errors (read cur))))
- lines -1)
- -1))
- ;; Xref.
- (progn
- (goto-char p)
- (and (search-forward "\nxref:" nil t)
- (nnheader-header-value)))
- ;; Extra.
- (when gnus-extra-headers
- (let ((extra gnus-extra-headers)
- out)
- (while extra
- (goto-char p)
- (when (search-forward
- (concat "\n" (symbol-name (car extra)) ":") nil t)
- (push (cons (car extra) (nnheader-header-value))
- out))
- (pop extra))
- out))))
- (when (equal id ref)
- (setq ref nil))
-
- (when gnus-alter-header-function
- (funcall gnus-alter-header-function header)
- (setq id (mail-header-id header)
- ref (gnus-parent-id (mail-header-references header))))
-
+ (while (setq header (nnheader-parse-head))
(when (setq header
(gnus-dependencies-add-header
header dependencies force-new))
- (push header headers))
- (goto-char (point-max))
- (widen))
+ (push header headers)))
(nreverse headers)))))
;; Goes through the xover lines and returns a list of vectors
@@ -8702,7 +8560,8 @@ SCORE."
When called interactively, ID is the Message-ID of the current
article. If thread-only is non-nil limit the summary buffer to
these articles."
- (interactive (list (mail-header-id (gnus-summary-article-header))))
+ (interactive (list (mail-header-id (gnus-summary-article-header))
+ current-prefix-arg))
(let ((articles (gnus-articles-in-thread
(gnus-id-to-thread (gnus-root-id id))))
;;we REALLY want the whole thread---this prevents cut-threads
@@ -9125,25 +8984,24 @@ Return the number of articles fetched."
result))
(defun gnus-summary-refer-thread (&optional limit)
- "Fetch all articles in the current thread. For backends
-that know how to search for threads (currently only 'nnimap)
-a non-numeric prefix arg will use nnir to search the entire
-server; without a prefix arg only the current group is
-searched. If the variable `gnus-refer-thread-use-nnir' is
-non-nil the prefix arg has the reverse meaning. If no
-backend-specific `request-thread' function is available fetch
-LIMIT (the numerical prefix) old headers. If LIMIT is
-non-numeric or nil fetch the number specified by the
-`gnus-refer-thread-limit' variable."
+ "Fetch all articles in the current thread.
+For backends that know how to search for threads (currently only
+`nnimap') a non-numeric prefix arg will search the entire server;
+without a prefix arg only the current group is searched. If the
+variable `gnus-refer-thread-use-search' is non-nil the prefix arg
+has the reverse meaning. If no backend-specific `request-thread'
+function is available fetch LIMIT (the numerical prefix) old
+headers. If LIMIT is non-numeric or nil fetch the number
+specified by the `gnus-refer-thread-limit' variable."
(interactive "P")
(let* ((header (gnus-summary-article-header))
(id (mail-header-id header))
(gnus-inhibit-demon t)
(gnus-summary-ignore-duplicates t)
(gnus-read-all-available-headers t)
- (gnus-refer-thread-use-nnir
+ (gnus-refer-thread-use-search
(if (and (not (null limit)) (listp limit))
- (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
+ (not gnus-refer-thread-use-search) gnus-refer-thread-use-search))
(new-headers
(if (gnus-check-backend-function
'request-thread gnus-newsgroup-name)
@@ -9284,9 +9142,9 @@ non-numeric or nil fetch the number specified by the
(dolist (method gnus-refer-article-method)
(push (if (eq 'current method)
gnus-current-select-method
- (if (eq 'nnir (car method))
+ (if (eq 'nnselect (car method))
(list
- 'nnir
+ 'nnselect
(or (cadr method)
(gnus-method-to-server gnus-current-select-method)))
method))
@@ -9530,10 +9388,10 @@ default."
(cond ((= (length urls) 1)
(car urls))
((> (length urls) 1)
- (completing-read (format "URL to browse (default %s): "
- (gnus-shorten-url (car urls) 40))
- urls nil t nil nil
- (car urls)))))
+ (completing-read
+ (format-prompt "URL to browse"
+ (gnus-shorten-url (car urls) 40))
+ urls nil t nil nil (car urls)))))
(if target
(if external
(funcall browse-url-secondary-browser-function target)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index cecf4d4fb49..8cd35e3d7b7 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -292,6 +292,10 @@ is restarted, and sometimes reloaded."
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
+(defgroup gnus-dbus nil
+ "D-Bus integration for Gnus."
+ :group 'gnus)
+
(defconst gnus-version-number "5.13"
"Version number for this version of Gnus.")
@@ -849,12 +853,6 @@ be used directly.")
(cons (car list) (list :type type :data data)))
list)))
-(let ((command (format "%s" this-command)))
- (when (string-match "gnus" command)
- (if (eq 'gnus-other-frame this-command)
- (gnus-get-buffer-create gnus-group-buffer)
- (gnus-splash))))
-
;;; Do the rest.
(require 'gnus-util)
@@ -1609,7 +1607,7 @@ total number of articles in the group.")
:variable-default (mapcar
(lambda (g) (list g t))
'("delayed$" "drafts$" "queue$" "INBOX$"
- "^nnmairix:" "^nnir:" "archive"))
+ "^nnmairix:" "^nnselect:" "archive"))
:variable-document
"Groups in which the registry should be turned off."
:variable-group gnus-registry
@@ -2707,6 +2705,11 @@ with some simple extensions.
%k Pretty-printed version of the above (string)
For example, \"1.2k\" or \"0.4M\".
%L Number of lines in the article (integer)
+%Z RSV of the article; nil if not in an nnselect group (integer)
+%G Originating group name for the article; nil if not
+ in an nnselect group (string)
+%g Short from of the originating group name for the article;
+ nil if not in an nnselect group (string)
%I Indentation based on thread level (a string of
spaces)
%B A complex trn-style thread tree (string)
@@ -3155,7 +3158,10 @@ that that variable is buffer-local to the summary buffers."
(defun gnus-kill-ephemeral-group (group)
"Remove ephemeral GROUP from relevant structures."
- (remhash group gnus-newsrc-hashtb))
+ (remhash group gnus-newsrc-hashtb)
+ (setq gnus-newsrc-alist
+ (delq (assoc group gnus-newsrc-alist)
+ gnus-newsrc-alist)))
(defun gnus-simplify-mode-line ()
"Make mode lines a bit simpler."
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 7f8ab5f9ef5..a01fd2729af 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1364,10 +1364,7 @@ PROMPT overrides the default one used to ask user for a file name."
(setq file
(read-file-name
(or prompt
- (format "Save MIME part to%s: "
- (if filename
- (format " (default %s)" filename)
- "")))
+ (format-prompt "Save MIME part to" filename))
(or directory mm-default-directory default-directory)
(expand-file-name
(or filename "")
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index ef8aa6ac019..067396fc2a6 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1360,7 +1360,7 @@ If not set, `default-directory' will be used."
(value (pop plist)))
(when value
;; Quote VALUE if it contains suspicious characters.
- (when (string-match "[\"'\\~/*;() \t\n[:multibyte:]]" value)
+ (when (string-match "[][\"'\\~/*;()<>= \t\n[:multibyte:]]" value)
(setq value (with-output-to-string
(let (print-escape-nonascii)
(prin1 value)))))
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index 945ef0351e5..7894285bdf3 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -992,7 +992,7 @@ all. This may very well take some time.")
(narrow-to-region
(goto-char (point-min))
(if (search-forward "\n\n" nil t) (1- (point)) (point-max))))
- (let ((headers (nnheader-parse-naked-head)))
+ (let ((headers (nnheader-parse-head t)))
(setf (mail-header-chars headers) chars)
(setf (mail-header-number headers) number)
headers))))
diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el
index 36b67a8fd13..81431270d7c 100644
--- a/lisp/gnus/nndoc.el
+++ b/lisp/gnus/nndoc.el
@@ -353,6 +353,7 @@ from the document.")
(setq nndoc-dissection-alist nil)
(with-current-buffer nndoc-current-buffer
(erase-buffer)
+ (set-buffer-multibyte nil)
(condition-case error
(if (and (stringp nndoc-address)
(string-match nndoc-binary-file-names nndoc-address))
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index c27af1742d8..6ff99056d84 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1160,7 +1160,7 @@ This command does not work if you use short group names."
(if (search-forward "\n\n" e t) (setq e (1- (point)))))
(with-temp-buffer
(insert-buffer-substring buf b e)
- (let ((headers (nnheader-parse-naked-head)))
+ (let ((headers (nnheader-parse-head t)))
(setf (mail-header-chars headers) chars)
(setf (mail-header-number headers) number)
headers)))))
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index fee7a169ff9..67dc379ef81 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -28,6 +28,10 @@
(eval-when-compile (require 'cl-lib))
+(defvar gnus-decode-encoded-word-function)
+(defvar gnus-decode-encoded-address-function)
+(defvar gnus-alter-header-function)
+
(defvar nnmail-extra-headers)
(defvar gnus-newsgroup-name)
(defvar jka-compr-compression-info-list)
@@ -39,6 +43,7 @@
(require 'mail-utils)
(require 'mm-util)
(require 'gnus-util)
+(autoload 'gnus-remove-odd-characters "gnus-sum")
(autoload 'gnus-range-add "gnus-range")
(autoload 'gnus-remove-from-range "gnus-range")
;; FIXME none of these are used explicitly in this file.
@@ -188,124 +193,166 @@ on your system, you could say something like:
(autoload 'ietf-drums-unfold-fws "ietf-drums")
-(defun nnheader-parse-naked-head (&optional number)
- ;; This function unfolds continuation lines in this buffer
- ;; destructively. When this side effect is unwanted, use
- ;; `nnheader-parse-head' instead of this function.
- (let ((case-fold-search t)
- (buffer-read-only nil)
+
+(defsubst nnheader-head-make-header (number)
+ "Return a full mail header with article NUMBER.
+Do this using data of type `head' in the current buffer."
+ (let ((p (point-min))
(cur (current-buffer))
- (p (point-min))
- in-reply-to lines ref)
- (nnheader-remove-cr-followed-by-lf)
- (ietf-drums-unfold-fws)
- (subst-char-in-region (point-min) (point-max) ?\t ? )
- (goto-char p)
- (insert "\n")
- (prog1
- ;; This implementation of this function, with nine
- ;; search-forwards instead of the one re-search-forward and a
- ;; case (which basically was the old function) is actually
- ;; about twice as fast, even though it looks messier. You
- ;; can't have everything, I guess. Speed and elegance don't
- ;; always go hand in hand.
- (make-full-mail-header
- ;; Number.
- (or number 0)
- ;; Subject.
- (progn
- (goto-char p)
- (if (search-forward "\nsubject:" nil t)
- (nnheader-header-value) "(none)"))
- ;; From.
- (progn
- (goto-char p)
- (if (search-forward "\nfrom:" nil t)
- (nnheader-header-value) "(nobody)"))
- ;; Date.
- (progn
- (goto-char p)
- (if (search-forward "\ndate:" nil t)
- (nnheader-header-value) ""))
- ;; Message-ID.
- (progn
- (goto-char p)
- (if (search-forward "\nmessage-id:" nil t)
- (buffer-substring
- (1- (or (search-forward "<" (point-at-eol) t)
- (point)))
- (or (search-forward ">" (point-at-eol) t) (point)))
- ;; If there was no message-id, we just fake one to make
- ;; subsequent routines simpler.
- (nnheader-generate-fake-message-id number)))
- ;; References.
- (progn
+ in-reply-to chars lines end ref)
+ ;; This implementation of this function, with nine
+ ;; search-forwards instead of the one re-search-forward and a
+ ;; case (which basically was the old function) is actually
+ ;; about twice as fast, even though it looks messier. You
+ ;; can't have everything, I guess. Speed and elegance don't
+ ;; always go hand in hand.
+ (make-full-mail-header
+ ;; Number.
+ number
+ ;; Subject.
+ (progn
+ (goto-char p)
+ (if (search-forward "\nsubject:" nil t)
+ (funcall gnus-decode-encoded-word-function
+ (nnheader-header-value))
+ "(none)"))
+ ;; From.
+ (progn
+ (goto-char p)
+ (if (search-forward "\nfrom:" nil t)
+ (funcall gnus-decode-encoded-address-function
+ (nnheader-header-value))
+ "(nobody)"))
+ ;; Date.
+ (progn
+ (goto-char p)
+ (if (search-forward "\ndate:" nil t)
+ (nnheader-header-value) ""))
+ ;; Message-ID.
+ (progn
+ (goto-char p)
+ (if (re-search-forward
+ "^message-id: *\\(<[^\n\t> ]+>\\)" nil t)
+ ;; We do it this way to make sure the Message-ID
+ ;; is (somewhat) syntactically valid.
+ (buffer-substring (match-beginning 1)
+ (match-end 1))
+ ;; If there was no message-id, we just fake one to make
+ ;; subsequent routines simpler.
+ (nnheader-generate-fake-message-id number)))
+ ;; References.
+ (progn
+ (goto-char p)
+ (if (search-forward "\nreferences:" nil t)
+ (progn
+ (setq end (point))
+ (prog1
+ (nnheader-header-value)
+ (setq ref
+ (buffer-substring
+ (progn
+ (end-of-line)
+ (search-backward ">" end t)
+ (1+ (point)))
+ (progn
+ (search-backward "<" end t)
+ (point))))))
+ ;; Get the references from the in-reply-to header if there
+ ;; were no references and the in-reply-to header looks
+ ;; promising.
+ (if (and (search-forward "\nin-reply-to:" nil t)
+ (setq in-reply-to (nnheader-header-value))
+ (string-match "<[^>]+>" in-reply-to))
+ (let (ref2)
+ (setq ref (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (while (string-match "<[^>]+>" in-reply-to (match-end 0))
+ (setq ref2 (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (when (> (length ref2) (length ref))
+ (setq ref ref2)))
+ ref)
+ nil)))
+ ;; Chars.
+ (progn
+ (goto-char p)
+ (if (search-forward "\nchars: " nil t)
+ (if (numberp (setq chars (ignore-errors (read cur))))
+ chars -1)
+ -1))
+ ;; Lines.
+ (progn
+ (goto-char p)
+ (if (search-forward "\nlines: " nil t)
+ (if (numberp (setq lines (ignore-errors (read cur))))
+ lines -1)
+ -1))
+ ;; Xref.
+ (progn
+ (goto-char p)
+ (and (search-forward "\nxref:" nil t)
+ (nnheader-header-value)))
+ ;; Extra.
+ (when nnmail-extra-headers
+ (let ((extra nnmail-extra-headers)
+ out)
+ (while extra
(goto-char p)
- (if (search-forward "\nreferences:" nil t)
- (nnheader-header-value)
- ;; Get the references from the in-reply-to header if
- ;; there were no references and the in-reply-to header
- ;; looks promising.
- (if (and (search-forward "\nin-reply-to:" nil t)
- (setq in-reply-to (nnheader-header-value))
- (string-match "<[^\n>]+>" in-reply-to))
- (let (ref2)
- (setq ref (substring in-reply-to (match-beginning 0)
- (match-end 0)))
- (while (string-match "<[^\n>]+>"
- in-reply-to (match-end 0))
- (setq ref2 (substring in-reply-to (match-beginning 0)
- (match-end 0)))
- (when (> (length ref2) (length ref))
- (setq ref ref2)))
- ref)
- nil)))
- ;; Chars.
- 0
- ;; Lines.
- (progn
- (goto-char p)
- (if (search-forward "\nlines: " nil t)
- (if (numberp (setq lines (read cur)))
- lines 0)
- 0))
- ;; Xref.
- (progn
- (goto-char p)
- (and (search-forward "\nxref:" nil t)
- (nnheader-header-value)))
- ;; Extra.
- (when nnmail-extra-headers
- (let ((extra nnmail-extra-headers)
- out)
- (while extra
- (goto-char p)
- (when (search-forward
- (concat "\n" (symbol-name (car extra)) ":") nil t)
- (push (cons (car extra) (nnheader-header-value))
- out))
- (pop extra))
- out)))
- (goto-char p)
- (delete-char 1))))
-
-(defun nnheader-parse-head (&optional naked)
- (let ((cur (current-buffer)) num beg end)
- (when (if naked
- (setq num 0
- beg (point-min)
- end (point-max))
- ;; Search to the beginning of the next header. Error
- ;; messages do not begin with 2 or 3.
- (when (re-search-forward "^[23][0-9]+ " nil t)
- (setq num (read cur)
- beg (point)
- end (if (search-forward "\n.\n" nil t)
- (goto-char (- (point) 2))
- (point)))))
- (with-temp-buffer
- (insert-buffer-substring cur beg end)
- (nnheader-parse-naked-head num)))))
+ (when (search-forward
+ (concat "\n" (symbol-name (car extra)) ":") nil t)
+ (push (cons (car extra) (nnheader-header-value))
+ out))
+ (pop extra))
+ out)))))
+
+(defun nnheader-parse-head (&optional naked temp)
+ "Parse data of type `header' in the current buffer and return a mail header.
+Modify the buffer contents in the process. The buffer is assumed
+to begin each header with an \"Article retrieved\" line with an
+article number; if NAKED is non-nil this line is assumed absent,
+and the buffer should contain a single header's worth of data.
+If TEMP is non-nil the data is first copied to a temporary buffer
+leaving the original buffer untouched."
+ (let ((cur (current-buffer))
+ (num 0)
+ (beg (point-min))
+ (end (point-max))
+ buf)
+ (when (or naked
+ ;; Search to the beginning of the next header. Error
+ ;; messages do not begin with 2 or 3.
+ (when (re-search-forward "^[23][0-9]+ " nil t)
+ (setq num (read cur)
+ beg (point)
+ end (if (search-forward "\n.\n" nil t)
+ (goto-char (- (point) 2))
+ (point)))))
+ ;; When TEMP copy the data to a temporary buffer.
+ (if temp
+ (progn
+ (set-buffer (setq buf (generate-new-buffer " *nnheader-temp*")))
+ (insert-buffer-substring cur beg end))
+ ;; Otherwise just narrow to the data.
+ (narrow-to-region beg end))
+ (let ((case-fold-search t)
+ (buffer-read-only nil)
+ header)
+ (nnheader-remove-cr-followed-by-lf)
+ (ietf-drums-unfold-fws)
+ (subst-char-in-region (point-min) (point-max) ?\t ?\s t)
+ (subst-char-in-region (point-min) (point-max) ?\r ?\s t)
+ (goto-char (point-min))
+ (insert "\n")
+ (setq header (nnheader-head-make-header num))
+ (goto-char (point-min))
+ (delete-char 1)
+ (if temp
+ (kill-buffer buf)
+ (goto-char (point-max))
+ (widen))
+ (when gnus-alter-header-function
+ (funcall gnus-alter-header-function header))
+ header))))
(defmacro nnheader-nov-skip-field ()
'(search-forward "\t" eol 'move))
@@ -347,24 +394,43 @@ on your system, you could say something like:
'id)
(nnheader-generate-fake-message-id ,number))))
-(defun nnheader-parse-nov ()
+(defalias 'nnheader-nov-make-header 'nnheader-parse-nov)
+(autoload 'gnus-extract-message-id-from-in-reply-to "gnus-sum")
+
+(defun nnheader-parse-nov (&optional number)
(let ((eol (point-at-eol))
- (number (nnheader-nov-read-integer)))
- (vector
- number ; number
- (nnheader-nov-field) ; subject
- (nnheader-nov-field) ; from
- (nnheader-nov-field) ; date
- (nnheader-nov-read-message-id number) ; id
- (nnheader-nov-field) ; refs
- (nnheader-nov-read-integer) ; chars
- (nnheader-nov-read-integer) ; lines
- (if (eq (char-after) ?\n)
- nil
- (if (looking-at "Xref: ")
- (goto-char (match-end 0)))
- (nnheader-nov-field)) ; Xref
- (nnheader-nov-parse-extra)))) ; extra
+ references in-reply-to x header)
+ (setq header
+ (make-full-mail-header
+ (or number (nnheader-nov-read-integer)) ; number
+ (condition-case () ; subject
+ (gnus-remove-odd-characters
+ (funcall gnus-decode-encoded-word-function
+ (setq x (nnheader-nov-field))))
+ (error x))
+ (condition-case () ; from
+ (gnus-remove-odd-characters
+ (funcall gnus-decode-encoded-address-function
+ (setq x (nnheader-nov-field))))
+ (error x))
+ (nnheader-nov-field) ; date
+ (nnheader-nov-read-message-id number) ; id
+ (setq references (nnheader-nov-field)) ; refs
+ (nnheader-nov-read-integer) ; chars
+ (nnheader-nov-read-integer) ; lines
+ (unless (eobp)
+ (if (looking-at "Xref: ")
+ (goto-char (match-end 0)))
+ (nnheader-nov-field)) ; Xref
+ (nnheader-nov-parse-extra))) ; extra
+
+ (when (and (string= references "")
+ (setq in-reply-to (mail-header-extra header))
+ (setq in-reply-to (cdr (assq 'In-Reply-To in-reply-to))))
+ (setf (mail-header-references header)
+ (gnus-extract-message-id-from-in-reply-to in-reply-to)))
+ header))
+
(defun nnheader-insert-nov (header)
(princ (mail-header-number header) (current-buffer))
@@ -399,17 +465,6 @@ on your system, you could say something like:
(delete-char 1))
(forward-line 1)))
-(defun nnheader-parse-overview-file (file)
- "Parse FILE and return a list of headers."
- (mm-with-unibyte-buffer
- (nnheader-insert-file-contents file)
- (goto-char (point-min))
- (let (headers)
- (while (not (eobp))
- (push (nnheader-parse-nov) headers)
- (forward-line 1))
- (nreverse headers))))
-
(defun nnheader-write-overview-file (file headers)
"Write HEADERS to FILE."
(with-temp-file file
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index be8ad9a6723..d797e893f51 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -986,7 +986,10 @@ textual parts.")
(when (and (car result) (not can-move))
(nnimap-delete-article article))
(cons internal-move-group
- (or (nnimap-find-uid-response "COPYUID" (caddr result))
+ (or (nnimap-find-uid-response
+ "COPYUID"
+ ;; Server gives different responses for MOVE and COPY.
+ (if can-move (caddr result) (cadr result)))
(nnimap-find-article-by-message-id
internal-move-group server message-id
nnimap-request-articles-find-limit)))))
@@ -1683,7 +1686,7 @@ If LIMIT, first try to limit the search to the N last articles."
(gnus-add-to-range
(gnus-add-to-range
(gnus-range-add (gnus-info-read info)
- vanished)
+ vanished)
(cdr (assq '%Flagged flags)))
(cdr (assq '%Seen flags))))
(let ((marks (gnus-info-marks info)))
@@ -1848,15 +1851,15 @@ If LIMIT, first try to limit the search to the N last articles."
(setq nnimap-status-string "Read-only server")
nil)
-(defvar gnus-refer-thread-use-nnir) ;; gnus-sum.el
+(defvar gnus-refer-thread-use-search) ;; gnus-sum.el
(declare-function gnus-fetch-headers "gnus-sum"
(articles &optional limit force-new dependencies))
-(autoload 'nnir-search-thread "nnir")
+(autoload 'nnselect-search-thread "nnselect")
(deffoo nnimap-request-thread (header &optional group server)
- (if gnus-refer-thread-use-nnir
- (nnir-search-thread header)
+ (if gnus-refer-thread-use-search
+ (nnselect-search-thread header)
(when (nnimap-change-group group server)
(let* ((cmd (nnimap-make-thread-query header))
(result (with-current-buffer (nnimap-buffer)
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 722969c21ba..6ba0334ceb8 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -10,6 +10,7 @@
;; IMAP search improved by Daniel Pittman <daniel@rimspace.net>.
;; nnmaildir support for Swish++ and Namazu backends by:
;; Justus Piater <Justus <at> Piater.name>
+;; Mostly rewritten by Andrew Cohen <cohen@bu.edu> from 2010
;; Keywords: news mail searching ir
;; This file is part of GNU Emacs.
@@ -29,20 +30,11 @@
;;; Commentary:
-;; What does it do? Well, it allows you to search your mail using
-;; some search engine (imap, namazu, swish-e and others -- see
-;; later) by typing `G G' in the Group buffer. You will then get a
-;; buffer which shows all articles matching the query, sorted by
-;; Retrieval Status Value (score).
-
-;; When looking at the retrieval result (in the Summary buffer) you
-;; can type `A W' (aka M-x gnus-warp-to-article RET) on an article. You
-;; will be warped into the group this article came from. Typing `A T'
-;; (aka M-x gnus-summary-refer-thread RET) will warp to the group and
-;; also show the thread this article is part of.
+;; What does it do? Well, it searches your mail using some search
+;; engine (imap, namazu, swish-e, gmane and others -- see later).
;; The Lisp setup may involve setting a few variables and setting up the
-;; search engine. You can define the variables in the server definition
+;; search engine. You can define the variables in the server definition
;; like this :
;; (setq gnus-secondary-select-methods '(
;; (nnimap "" (nnimap-address "localhost")
@@ -53,6 +45,45 @@
;; an alist, type `C-h v nnir-engines RET' for more information; this
;; includes examples for setting `nnir-search-engine', too.)
+;; The entry to searching is the single function `nnir-run-query',
+;; which dispatches the search to the proper search function. The
+;; argument of `nnir-run-query' is an alist with two keys:
+;; 'nnir-query-spec and 'nnir-group-spec. The value for
+;; 'nnir-query-spec is an alist. The only required key/value pair is
+;; (query . "query") specifying the search string to pass to the query
+;; engine. Individual engines may have other elements. The value of
+;; 'nnir-group-spec is a list with the specification of the
+;; groups/servers to search. The format of the 'nnir-group-spec is
+;; (("server1" ("group11" "group12")) ("server2" ("group21"
+;; "group22"))). If any of the group lists is absent then all groups
+;; on that server are searched.
+
+;; The output of `nnir-run-query' is a vector, each element of which
+;; should in turn be a three-element vector with the form: [fully
+;; prefixed group-name of the article; the article number; the
+;; Retrieval Status Value (RSV)] as returned from the search engine.
+;; An RSV is the score assigned to the document by the search engine.
+;; For Boolean search engines, the RSV is always 1000 (or 1 or 100, or
+;; whatever you like).
+
+;; A vector of this form is used by the nnselect backend to create
+;; virtual groups. So nnir-run-query is a suitable function to use in
+;; nnselect groups.
+
+;; The default sorting order of articles in an nnselect summary buffer
+;; is based on the order of the articles in the above mentioned
+;; vector, so that's where you can do the sorting you'd like. Maybe
+;; it would be nice to have a way of displaying the search result
+;; sorted differently?
+
+;; So what do you need to do when you want to add another search
+;; engine? You write a function that executes the query. Temporary
+;; data from the search engine can be put in `nnir-tmp-buffer'. This
+;; function should return the list of articles as a vector, as
+;; described above. Then, you need to register this backend in
+;; `nnir-engines'. Then, users can choose the backend by setting
+;; `nnir-search-engine' as a server variable.
+
;; If you use one of the local indices (namazu, find-grep, swish) you
;; must also set up a search engine backend.
@@ -75,13 +106,13 @@
;; ,----
;; | package conf; # Don't remove this line!
;; |
-;; | # Paths which will not be indexed. Don't use `^' or `$' anchors.
+;; | # Paths which will not be indexed. Don't use `^' or `$' anchors.
;; | $EXCLUDE_PATH = "spam|sent";
;; |
-;; | # Header fields which should be searchable. case-insensitive
+;; | # Header fields which should be searchable. case-insensitive
;; | $REMAIN_HEADER = "from|date|message-id|subject";
;; |
-;; | # Searchable fields. case-insensitive
+;; | # Searchable fields. case-insensitive
;; | $SEARCH_FIELD = "from|date|message-id|subject";
;; |
;; | # The max length of a word.
@@ -121,72 +152,17 @@
;; | (nnml-active-file "~/News/cache/active"))
;; `----
-;; Developer information:
-
-;; I have tried to make the code expandable. Basically, it is divided
-;; into two layers. The upper layer is somewhat like the `nnvirtual'
-;; backend: given a specification of what articles to show from
-;; another backend, it creates a group containing exactly those
-;; articles. The lower layer issues a query to a search engine and
-;; produces such a specification of what articles to show from the
-;; other backend.
-
-;; The interface between the two layers consists of the single
-;; function `nnir-run-query', which dispatches the search to the
-;; proper search function. The argument of `nnir-run-query' is an
-;; alist with two keys: 'nnir-query-spec and 'nnir-group-spec. The
-;; value for 'nnir-query-spec is an alist. The only required key/value
-;; pair is (query . "query") specifying the search string to pass to
-;; the query engine. Individual engines may have other elements. The
-;; value of 'nnir-group-spec is a list with the specification of the
-;; groups/servers to search. The format of the 'nnir-group-spec is
-;; (("server1" ("group11" "group12")) ("server2" ("group21"
-;; "group22"))). If any of the group lists is absent then all groups
-;; on that server are searched.
-
-;; The output of `nnir-run-query' is supposed to be a vector, each
-;; element of which should in turn be a three-element vector. The
-;; first element should be full group name of the article, the second
-;; element should be the article number, and the third element should
-;; be the Retrieval Status Value (RSV) as returned from the search
-;; engine. An RSV is the score assigned to the document by the search
-;; engine. For Boolean search engines, the RSV is always 1000 (or 1
-;; or 100, or whatever you like).
-
-;; The sorting order of the articles in the summary buffer created by
-;; nnir is based on the order of the articles in the above mentioned
-;; vector, so that's where you can do the sorting you'd like. Maybe
-;; it would be nice to have a way of displaying the search result
-;; sorted differently?
-
-;; So what do you need to do when you want to add another search
-;; engine? You write a function that executes the query. Temporary
-;; data from the search engine can be put in `nnir-tmp-buffer'. This
-;; function should return the list of articles as a vector, as
-;; described above. Then, you need to register this backend in
-;; `nnir-engines'. Then, users can choose the backend by setting
-;; `nnir-search-engine' as a server variable.
;;; Code:
;;; Setup:
-(require 'nnoo)
-(require 'gnus-group)
-(require 'message)
-(require 'gnus-util)
(eval-when-compile (require 'cl-lib))
+(require 'gnus)
;;; Internal Variables:
-(defvar nnir-memo-query nil
- "Internal: stores current query.")
-
-(defvar nnir-memo-server nil
- "Internal: stores current server.")
-
-(defvar nnir-artlist nil
- "Internal: stores search result.")
+(defvar gnus-inhibit-demon)
(defvar nnir-search-history ()
"Internal: the history for querying search options in nnir.")
@@ -203,30 +179,19 @@
("to" . "TO")
("from" . "FROM")
("body" . "BODY")
- ("imap" . ""))
+ ("imap" . "")
+ ("gmail" . "X-GM-RAW"))
"Mapping from user readable keys to IMAP search items for use in nnir.")
(defvar nnir-imap-search-other "HEADER %S"
- "The IMAP search item to use for anything other than
-`nnir-imap-search-arguments'. By default this is the name of an
-email header field.")
+ "The IMAP search item for anything other than `nnir-imap-search-arguments'.
+By default this is the name of an email header field.")
(defvar nnir-imap-search-argument-history ()
"The history for querying search options in nnir.")
;;; Helper macros
-;; Data type article list.
-
-(defmacro nnir-artlist-length (artlist)
- "Return number of articles in artlist."
- `(length ,artlist))
-
-(defmacro nnir-artlist-article (artlist n)
- "Return from ARTLIST the Nth artitem (counting starting at 1)."
- `(when (> ,n 0)
- (elt ,artlist (1- ,n))))
-
(defmacro nnir-artitem-group (artitem)
"Return the group from the ARTITEM."
`(elt ,artitem 0))
@@ -239,52 +204,6 @@ email header field.")
"Return the Retrieval Status Value (RSV, score) from the ARTITEM."
`(elt ,artitem 2))
-(defmacro nnir-article-group (article)
- "Return the group for ARTICLE."
- `(nnir-artitem-group (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-number (article)
- "Return the number for ARTICLE."
- `(nnir-artitem-number (nnir-artlist-article nnir-artlist ,article)))
-
-(defmacro nnir-article-rsv (article)
- "Return the rsv for ARTICLE."
- `(nnir-artitem-rsv (nnir-artlist-article nnir-artlist ,article)))
-
-(defsubst nnir-article-ids (article)
- "Return the pair `(nnir id . real id)' of ARTICLE."
- (cons article (nnir-article-number article)))
-
-(defmacro nnir-categorize (sequence keyfunc &optional valuefunc)
- "Sort a SEQUENCE into categories and returns a list of the form
-`((key1 (element11 element12)) (key2 (element21 element22))'.
-The category key for a member of the sequence is obtained
-as `(KEYFUNC member)' and the corresponding element is just
-`member'. If VALUEFUNC is non-nil, the element of the list
-is `(VALUEFUNC member)'."
- `(unless (null ,sequence)
- (let (value)
- (mapc
- (lambda (member)
- (let ((y (,keyfunc member))
- (x ,(if valuefunc
- `(,valuefunc member)
- 'member)))
- (if (assoc y value)
- (push x (cadr (assoc y value)))
- (push (list y (list x)) value))))
- ,sequence)
- value)))
-
-;;; Finish setup:
-
-(require 'gnus-sum)
-
-(nnoo-declare nnir)
-(nnoo-define-basics nnir)
-
-(gnus-declare-backend "nnir" 'mail 'virtual)
-
;;; User Customizable Variables:
@@ -293,43 +212,17 @@ is `(VALUEFUNC member)'."
:group 'gnus)
(defcustom nnir-ignored-newsgroups ""
- "A regexp to match newsgroups in the active file that should
-be skipped when searching."
+ "Newsgroups to skip when searching.
+Any newsgroup in the active file matching this regexp will be
+skipped when searching."
:version "24.1"
:type '(regexp)
:group 'nnir)
-(defcustom nnir-summary-line-format nil
- "The format specification of the lines in an nnir summary buffer.
-
-All the items from `gnus-summary-line-format' are available, along
-with three items unique to nnir summary buffers:
-
-%Z Search retrieval score value (integer)
-%G Article original full group name (string)
-%g Article original short group name (string)
-
-If nil this will use `gnus-summary-line-format'."
- :version "24.1"
- :type '(choice (const :tag "gnus-summary-line-format" nil) string)
- :group 'nnir)
-
-(defcustom nnir-retrieve-headers-override-function nil
- "If non-nil, a function that accepts an article list and group
-and populates the `nntp-server-buffer' with the retrieved
-headers. Must return either `nov' or `headers' indicating the
-retrieved header format.
-
-If this variable is nil, or if the provided function returns nil for
-a search result, `gnus-retrieve-headers' will be called instead."
- :version "24.1"
- :type '(choice (const :tag "gnus-retrieve-headers" nil) function)
- :group 'nnir)
-
(defcustom nnir-imap-default-search-key "whole message"
- "The default IMAP search key for an nnir search. Must be one of
-the keys in `nnir-imap-search-arguments'. To use raw imap queries
-by default set this to \"imap\"."
+ "The default IMAP search key for an nnir search.
+Must be one of the keys in `nnir-imap-search-arguments'. To use
+raw imap queries by default set this to \"imap\"."
:version "24.1"
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
nnir-imap-search-arguments))
@@ -357,9 +250,9 @@ Instead, use this:
:group 'nnir)
(defcustom nnir-swish++-remove-prefix (concat (getenv "HOME") "/Mail/")
- "The prefix to remove from each file name returned by swish++
-in order to get a group name (albeit with / instead of .). This is a
-regular expression.
+ "The prefix to remove from swish++ file names to get group names.
+Resulting names have '/' in place of '.'. This is a regular
+expression.
This variable is very similar to `nnir-namazu-remove-prefix', except
that it is for swish++, not Namazu."
@@ -408,9 +301,9 @@ This could be a server parameter."
:group 'nnir)
(defcustom nnir-swish-e-remove-prefix (concat (getenv "HOME") "/Mail/")
- "The prefix to remove from each file name returned by swish-e
-in order to get a group name (albeit with / instead of .). This is a
-regular expression.
+ "The prefix to remove from swish-e file names to get group names.
+Resulting names have '/' in place of '.'. This is a regular
+expression.
This variable is very similar to `nnir-namazu-remove-prefix', except
that it is for swish-e, not Namazu.
@@ -441,8 +334,8 @@ Instead, use this:
:group 'nnir)
(defcustom nnir-hyrex-remove-prefix (concat (getenv "HOME") "/Mail/")
- "The prefix to remove from each file name returned by HyREX
-in order to get a group name (albeit with / instead of .).
+ "The prefix to remove from HyREX file names to get group names.
+Resulting names have '/' in place of '.'.
For example, suppose that HyREX returns file names such as
\"/home/john/Mail/mail/misc/42\". For this example, use the following
@@ -478,8 +371,8 @@ Instead, use this:
:group 'nnir)
(defcustom nnir-namazu-remove-prefix (concat (getenv "HOME") "/Mail/")
- "The prefix to remove from each file name returned by Namazu
-in order to get a group name (albeit with / instead of .).
+ "The prefix to remove from Namazu file names to get group names.
+Resulting names have '/' in place of '.'.
For example, suppose that Namazu returns file names such as
\"/home/john/Mail/mail/misc/42\". For this example, use the following
@@ -509,9 +402,9 @@ Instead, use this:
(defcustom nnir-notmuch-remove-prefix
(regexp-quote (or (getenv "MAILDIR") (expand-file-name "~/Mail")))
- "The prefix to remove from each file name returned by notmuch
-in order to get a group name (albeit with / instead of .). This is a
-regular expression.
+ "The prefix to remove from notmuch file names to get group names.
+Resulting names have '/' in place of '.'. This is a regular
+expression.
This variable is very similar to `nnir-namazu-remove-prefix', except
that it is for notmuch, not Namazu."
@@ -590,347 +483,12 @@ Add an entry here when adding a new search engine.")
,@(mapcar (lambda (elem) (list 'const (car elem)))
nnir-engines)))))
-;; Gnus glue.
-
-(declare-function gnus-group-topic-name "gnus-topic" ())
-(declare-function gnus-topic-find-groups "gnus-topic"
- (topic &optional level all lowest recursive))
-
-(defun gnus-group-make-nnir-group (nnir-extra-parms &optional specs)
- "Create an nnir group.
-Prompt for a search query and determine the groups to search as
-follows: if called from the *Server* buffer search all groups
-belonging to the server on the current line; if called from the
-*Group* buffer search any marked groups, or the group on the current
-line, or all the groups under the current topic. Calling with a
-prefix-arg prompts for additional search-engine specific constraints.
-A non-nil `specs' arg must be an alist with `nnir-query-spec' and
-`nnir-group-spec' keys, and skips all prompting."
- (interactive "P")
- (let* ((group-spec
- (or (cdr (assq 'nnir-group-spec specs))
- (if (gnus-server-server-name)
- (list (list (gnus-server-server-name)))
- (nnir-categorize
- (or gnus-group-marked
- (if (gnus-group-group-name)
- (list (gnus-group-group-name))
- (mapcar (lambda (entry)
- (gnus-info-group (cadr entry)))
- (gnus-topic-find-groups (gnus-group-topic-name)
- nil t nil t))))
- gnus-group-server))))
- (query-spec
- (or (cdr (assq 'nnir-query-spec specs))
- (apply
- 'append
- (list (cons 'query
- (read-string "Query: " nil 'nnir-search-history)))
- (when nnir-extra-parms
- (mapcar
- (lambda (x)
- (nnir-read-parms (nnir-server-to-search-engine (car x))))
- group-spec))))))
- (gnus-group-read-ephemeral-group
- (concat "nnir-" (message-unique-id))
- (list 'nnir "nnir")
- nil
-; (cons (current-buffer) gnus-current-window-configuration)
- nil
- nil nil
- (list
- (cons 'nnir-specs (list (cons 'nnir-query-spec query-spec)
- (cons 'nnir-group-spec group-spec)))
- (cons 'nnir-artlist nil)))))
-
-(defun gnus-summary-make-nnir-group (nnir-extra-parms)
- "Search a group from the summary buffer."
- (interactive "P")
- (gnus-warp-to-article)
- (let ((spec
- (list
- (cons 'nnir-group-spec
- (list (list
- (gnus-group-server gnus-newsgroup-name)
- (list gnus-newsgroup-name)))))))
- (gnus-group-make-nnir-group nnir-extra-parms spec)))
-
-
-;; Gnus backend interface functions.
-
-(deffoo nnir-open-server (server &optional definitions)
- ;; Just set the server variables appropriately.
- (let ((backend (car (gnus-server-to-method server))))
- (if backend
- (nnoo-change-server backend server definitions)
- (add-hook 'gnus-summary-generate-hook 'nnir-mode)
- (nnoo-change-server 'nnir server definitions))))
-
-(deffoo nnir-request-group (group &optional server dont-check _info)
- (nnir-possibly-change-group group server)
- (let ((pgroup (gnus-group-guess-full-name-from-command-method group))
- length)
- ;; Check for cached search result or run the query and cache the
- ;; result.
- (unless (and nnir-artlist dont-check)
- (gnus-group-set-parameter
- pgroup 'nnir-artlist
- (setq nnir-artlist
- (nnir-run-query
- (gnus-group-get-parameter pgroup 'nnir-specs t))))
- (nnir-request-update-info pgroup (gnus-get-info pgroup)))
- (with-current-buffer nntp-server-buffer
- (if (zerop (setq length (nnir-artlist-length nnir-artlist)))
- (progn
- (nnir-close-group group)
- (nnheader-report 'nnir "Search produced empty results."))
- (nnheader-insert "211 %d %d %d %s\n"
- length ; total #
- 1 ; first #
- length ; last #
- group)))) ; group name
- nnir-artlist)
-
-(defvar gnus-inhibit-demon)
-
-(deffoo nnir-retrieve-headers (articles &optional _group _server _fetch-old)
- (with-current-buffer nntp-server-buffer
- (let ((gnus-inhibit-demon t)
- (articles-by-group (nnir-categorize
- articles nnir-article-group nnir-article-ids))
- headers)
- (while (not (null articles-by-group))
- (let* ((group-articles (pop articles-by-group))
- (artgroup (car group-articles))
- (articleids (cadr group-articles))
- (artlist (sort (mapcar 'cdr articleids) '<))
- (server (gnus-group-server artgroup))
- (gnus-override-method (gnus-server-to-method server))
- parsefunc)
- ;; (nnir-possibly-change-group nil server)
- (erase-buffer)
- (pcase (setq gnus-headers-retrieved-by
- (or
- (and
- nnir-retrieve-headers-override-function
- (funcall nnir-retrieve-headers-override-function
- artlist artgroup))
- (gnus-retrieve-headers artlist artgroup nil)))
- ('nov
- (setq parsefunc 'nnheader-parse-nov))
- ('headers
- (setq parsefunc 'nnheader-parse-head))
- (_ (error "Unknown header type %s while requesting articles \
- of group %s" gnus-headers-retrieved-by artgroup)))
- (goto-char (point-min))
- (while (not (eobp))
- (let* ((novitem (funcall parsefunc))
- (artno (and novitem
- (mail-header-number novitem)))
- (art (car (rassq artno articleids))))
- (when art
- (setf (mail-header-number novitem) art)
- (push novitem headers))
- (forward-line 1)))))
- (setq headers
- (sort headers
- (lambda (x y)
- (< (mail-header-number x) (mail-header-number y)))))
- (erase-buffer)
- (mapc 'nnheader-insert-nov headers)
- 'nov)))
-
-(defvar gnus-article-decode-hook)
-
-(deffoo nnir-request-article (article &optional group server to-buffer)
- (nnir-possibly-change-group group server)
- (if (and (stringp article)
- (not (eq 'nnimap (car (gnus-server-to-method server)))))
- (nnheader-report
- 'nnir
- "nnir-request-article only groks message ids for nnimap servers: %s"
- server)
- (save-excursion
- (let ((article article)
- query)
- (when (stringp article)
- (setq gnus-override-method (gnus-server-to-method server))
- (setq query
- (list
- (cons 'query (format "HEADER Message-ID %s" article))
- (cons 'criteria "")
- (cons 'shortcut t)))
- (unless (and nnir-artlist (equal query nnir-memo-query)
- (equal server nnir-memo-server))
- (setq nnir-artlist (nnir-run-imap query server)
- nnir-memo-query query
- nnir-memo-server server))
- (setq article 1))
- (unless (zerop (nnir-artlist-length nnir-artlist))
- (let ((artfullgroup (nnir-article-group article))
- (artno (nnir-article-number article)))
- (message "Requesting article %d from group %s"
- artno artfullgroup)
- (if to-buffer
- (with-current-buffer to-buffer
- (let ((gnus-article-decode-hook nil))
- (gnus-request-article-this-buffer artno artfullgroup)))
- (gnus-request-article artno artfullgroup))
- (cons artfullgroup artno)))))))
-
-(deffoo nnir-request-move-article (article group server accept-form
- &optional last _internal-move-group)
- (nnir-possibly-change-group group server)
- (let* ((artfullgroup (nnir-article-group article))
- (artno (nnir-article-number article))
- (to-newsgroup (nth 1 accept-form))
- (to-method (gnus-find-method-for-group to-newsgroup))
- (from-method (gnus-find-method-for-group artfullgroup))
- (move-is-internal (gnus-server-equal from-method to-method)))
- (unless (gnus-check-backend-function
- 'request-move-article artfullgroup)
- (error "The group %s does not support article moving" artfullgroup))
- (gnus-request-move-article
- artno
- artfullgroup
- (nth 1 from-method)
- accept-form
- last
- (and move-is-internal
- to-newsgroup ; Not respooling
- (gnus-group-real-name to-newsgroup)))))
-
-(deffoo nnir-request-expire-articles (articles group &optional server force)
- (nnir-possibly-change-group group server)
- (if force
- (let ((articles-by-group (nnir-categorize
- articles nnir-article-group nnir-article-ids))
- not-deleted)
- (while (not (null articles-by-group))
- (let* ((group-articles (pop articles-by-group))
- (artgroup (car group-articles))
- (articleids (cadr group-articles))
- (artlist (sort (mapcar 'cdr articleids) '<)))
- (unless (gnus-check-backend-function 'request-expire-articles
- artgroup)
- (error "The group %s does not support article deletion" artgroup))
- (unless (gnus-check-server (gnus-find-method-for-group artgroup))
- (error "Couldn't open server for group %s" artgroup))
- (push (gnus-request-expire-articles
- artlist artgroup force)
- not-deleted)))
- (sort (delq nil not-deleted) '<))
- articles))
-
-(deffoo nnir-warp-to-article ()
- (nnir-possibly-change-group gnus-newsgroup-name)
- (let* ((cur (if (> (gnus-summary-article-number) 0)
- (gnus-summary-article-number)
- (error "Can't warp to a pseudo-article")))
- (backend-article-group (nnir-article-group cur))
- (backend-article-number (nnir-article-number cur))
-; (quit-config (gnus-ephemeral-group-p gnus-newsgroup-name))
- )
-
- ;; what should we do here? we could leave all the buffers around
- ;; and assume that we have to exit from them one by one. or we can
- ;; try to clean up directly
-
- ;;first exit from the nnir summary buffer.
-; (gnus-summary-exit)
- ;; and if the nnir summary buffer in turn came from another
- ;; summary buffer we have to clean that summary up too.
- ; (when (not (eq (cdr quit-config) 'group))
-; (gnus-summary-exit))
- (gnus-summary-read-group-1 backend-article-group t t nil
- nil (list backend-article-number))))
-
-(deffoo nnir-request-update-mark (_group article mark)
- (let ((artgroup (nnir-article-group article))
- (artnumber (nnir-article-number article)))
- (or (and artgroup
- artnumber
- (gnus-request-update-mark artgroup artnumber mark))
- mark)))
-
-(deffoo nnir-request-set-mark (group actions &optional server)
- (nnir-possibly-change-group group server)
- (let (mlist)
- (dolist (action actions)
- (cl-destructuring-bind (range action marks) action
- (let ((articles-by-group (nnir-categorize
- (gnus-uncompress-range range)
- nnir-article-group nnir-article-number)))
- (dolist (artgroup articles-by-group)
- (push (list
- (car artgroup)
- (list (gnus-compress-sequence
- (sort (cadr artgroup) '<))
- action marks))
- mlist)))))
- (dolist (request (nnir-categorize mlist car cadr))
- (gnus-request-set-mark (car request) (cadr request)))))
-
-
-(deffoo nnir-request-update-info (group info &optional server)
- (nnir-possibly-change-group group server)
- ;; clear out all existing marks.
- (setf (gnus-info-marks info) nil)
- (setf (gnus-info-read info) nil)
- (let ((group (gnus-group-guess-full-name-from-command-method group))
- (articles-by-group
- (nnir-categorize
- (gnus-uncompress-range (cons 1 (nnir-artlist-length nnir-artlist)))
- nnir-article-group nnir-article-ids)))
- (gnus-set-active group
- (cons 1 (nnir-artlist-length nnir-artlist)))
- (while (not (null articles-by-group))
- (let* ((group-articles (pop articles-by-group))
- (articleids (reverse (cadr group-articles)))
- (group-info (gnus-get-info (car group-articles)))
- (marks (gnus-info-marks group-info))
- (read (gnus-info-read group-info)))
- (setf (gnus-info-read info)
- (gnus-add-to-range
- (gnus-info-read info)
- (delq nil
- (mapcar
- #'(lambda (art)
- (when (gnus-member-of-range (cdr art) read)
- (car art)))
- articleids))))
- (dolist (mark marks)
- (cl-destructuring-bind (type . range) mark
- (gnus-add-marked-articles
- group type
- (delq nil
- (mapcar
- #'(lambda (art)
- (when (gnus-member-of-range (cdr art) range) (car art)))
- articleids)))))))))
-
-
-(deffoo nnir-close-group (group &optional server)
- (nnir-possibly-change-group group server)
- (let ((pgroup (gnus-group-guess-full-name-from-command-method group)))
- (when (and nnir-artlist (not (gnus-ephemeral-group-p pgroup)))
- (gnus-group-set-parameter pgroup 'nnir-artlist nnir-artlist))
- (setq nnir-artlist nil)
- (when (gnus-ephemeral-group-p pgroup)
- (gnus-kill-ephemeral-group pgroup)
- (setq gnus-ephemeral-servers
- (delq (assq 'nnir gnus-ephemeral-servers)
- gnus-ephemeral-servers)))))
-;; (gnus-opened-servers-remove
-;; (car (assoc '(nnir "nnir-ephemeral" (nnir-address "nnir"))
-;; gnus-opened-servers))))
-
-
-
(defmacro nnir-add-result (dirnam artno score prefix server artlist)
- "Ask `nnir-compose-result' to construct a result vector,
-and if it is non-nil, add it to ARTLIST."
+ "Construct a result vector and add it to ARTLIST.
+DIRNAM, ARTNO, SCORE, PREFIX and SERVER are passed to
+`nnir-compose-result' to make the vector. Only add the result if
+non-nil."
`(let ((result (nnir-compose-result ,dirnam ,artno ,score ,prefix ,server)))
(when (not (null result))
(push result ,artlist))))
@@ -940,9 +498,9 @@ and if it is non-nil, add it to ARTLIST."
;; Helper function currently used by the Swish++ and Namazu backends;
;; perhaps useful for other backends as well
(defun nnir-compose-result (dirnam article score prefix server)
- "Extract the group from DIRNAM, and create a result vector
-ready to be added to the list of search results."
-
+ "Construct a result vector.
+The DIRNAM, ARTICLE, SCORE, PREFIX, and SERVER are used to
+construct the vector entries."
;; remove nnir-*-remove-prefix from beginning of dirnam filename
(when (string-match (concat "^" prefix) dirnam)
(setq dirnam (replace-match "" t t dirnam)))
@@ -977,13 +535,14 @@ ready to be added to the list of search results."
;; imap interface
(defun nnir-run-imap (query srv &optional groups)
- "Run a search against an IMAP back-end server.
-This uses a custom query language parser; see `nnir-imap-make-query'
-for details on the language and supported extensions."
+ "Run the QUERY search against an IMAP back-end server SRV.
+Search GROUPS, or all active groups on SRV if GROUPS is nil.
+This uses a custom query language parser; see
+`nnir-imap-make-query' for details on the language and supported
+extensions."
(save-excursion
(let ((qstring (cdr (assq 'query query)))
(server (cadr (gnus-server-to-method srv)))
-;; (defs (nth 2 (gnus-server-to-method srv)))
(criteria (or (cdr (assq 'criteria query))
(cdr (assoc nnir-imap-default-search-key
nnir-imap-search-arguments))))
@@ -995,38 +554,37 @@ for details on the language and supported extensions."
(catch 'found
(mapcar
#'(lambda (group)
- (let (artlist)
- (condition-case ()
- (when (nnimap-change-group
- (gnus-group-short-name group) server)
- (with-current-buffer (nnimap-buffer)
- (message "Searching %s..." group)
- (let ((arts 0)
- (result (nnimap-command "UID SEARCH %s"
- (if (string= criteria "")
- qstring
- (nnir-imap-make-query
- criteria qstring)))))
- (mapc
- (lambda (artnum)
- (let ((artn (string-to-number artnum)))
- (when (> artn 0)
- (push (vector group artn 100)
- artlist)
- (when (assq 'shortcut query)
- (throw 'found (list artlist)))
- (setq arts (1+ arts)))))
- (and (car result)
- (cdr (assoc "SEARCH" (cdr result)))))
- (message "Searching %s... %d matches" group arts)))
- (message "Searching %s...done" group))
- (quit nil))
- (nreverse artlist)))
+ (let (artlist)
+ (condition-case ()
+ (when (nnimap-change-group
+ (gnus-group-short-name group) server)
+ (with-current-buffer (nnimap-buffer)
+ (message "Searching %s..." group)
+ (let ((arts 0)
+ (result (nnimap-command "UID SEARCH %s"
+ (if (string= criteria "")
+ qstring
+ (nnir-imap-make-query
+ criteria qstring)))))
+ (mapc
+ (lambda (artnum)
+ (let ((artn (string-to-number artnum)))
+ (when (> artn 0)
+ (push (vector group artn 100)
+ artlist)
+ (when (assq 'shortcut query)
+ (throw 'found (list artlist)))
+ (setq arts (1+ arts)))))
+ (and (car result)
+ (cdr (assoc "SEARCH" (cdr result)))))
+ (message "Searching %s... %d matches" group arts)))
+ (message "Searching %s...done" group))
+ (quit nil))
+ (nreverse artlist)))
groups))))))
(defun nnir-imap-make-query (criteria qstring)
- "Parse the query string and criteria into an appropriate IMAP search
-expression, returning the string query to make.
+ "Make an IMAP search expression from QSTRING and CRITERIA.
This implements a little language designed to return the expected
results to an arbitrary query string to the end user.
@@ -1063,7 +621,7 @@ In the future the following will be added to the language:
(defun nnir-imap-query-to-imap (criteria query)
- "Turn an s-expression format QUERY into IMAP."
+ "Turn an s-expression format QUERY with CRITERIA into IMAP."
(mapconcat
;; Turn the expressions into IMAP text
(lambda (item)
@@ -1099,8 +657,9 @@ In the future the following will be added to the language:
(defun nnir-imap-parse-query (string)
- "Turn STRING into an s-expression based query based on the IMAP
-query language as defined in `nnir-imap-make-query'.
+ "Turn STRING into an s-expression query.
+STRING is based on the IMAP query language as defined in
+`nnir-imap-make-query'.
This involves turning individual tokens into higher level terms
that the search language can then understand and use."
@@ -1116,7 +675,7 @@ that the search language can then understand and use."
(defun nnir-imap-next-expr (&optional count)
- "Return the next expression from the current buffer."
+ "Return the next (COUNT) expression from the current buffer."
(let ((term (nnir-imap-next-term count))
(next (nnir-imap-peek-symbol)))
;; Are we looking at an 'or' expression?
@@ -1129,7 +688,7 @@ that the search language can then understand and use."
(defun nnir-imap-next-term (&optional count)
- "Return the next term from the current buffer."
+ "Return the next (COUNT) term from the current buffer."
(let ((term (nnir-imap-next-symbol count)))
;; What sort of term is this?
(cond
@@ -1147,9 +706,10 @@ that the search language can then understand and use."
(nnir-imap-next-symbol)))
(defun nnir-imap-next-symbol (&optional count)
- "Return the next symbol from the current buffer, or nil if we are
-at the end of the buffer. If supplied COUNT skips some symbols before
-returning the one at the supplied position."
+ "Return the next (COUNT) symbol from the current buffer.
+Return nil if we are at the end of the buffer. If supplied COUNT
+skips some symbols before returning the one at the supplied
+position."
(when (and (numberp count) (> count 1))
(nnir-imap-next-symbol (1- count)))
(let ((case-fold-search t))
@@ -1180,7 +740,7 @@ returning the one at the supplied position."
(buffer-substring start end)))))))
(defun nnir-imap-delimited-string (delimiter)
- "Return a delimited string from the current buffer."
+ "Return a string delimited by DELIMITER from the current buffer."
(let ((start (point)) end)
(forward-char 1) ; skip the first delimiter.
(while (not end)
@@ -1207,7 +767,7 @@ returning the one at the supplied position."
;; - file size
;; - group
(defun nnir-run-swish++ (query server &optional _group)
- "Run QUERY against swish++.
+ "Run QUERY on SERVER against swish++.
Returns a vector of (group name, file name) pairs (also vectors,
actually).
@@ -1297,7 +857,7 @@ Windows NT 4.0."
;; Swish-E interface.
(defun nnir-run-swish-e (query server &optional _group)
- "Run given QUERY against swish-e.
+ "Run given QUERY on SERVER against swish-e.
Returns a vector of (group name, file name) pairs (also vectors,
actually).
@@ -1392,6 +952,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
;; HyREX interface
(defun nnir-run-hyrex (query server &optional group)
+ "Run given QUERY with GROUP on SERVER against hyrex."
(save-excursion
(let ((artlist nil)
(groupspec (cdr (assq 'hyrex-group query)))
@@ -1463,7 +1024,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
;; Namazu interface
(defun nnir-run-namazu (query server &optional _group)
- "Run given QUERY against Namazu.
+ "Run QUERY on SERVER against Namazu.
Returns a vector of (group name, file name) pairs (also vectors,
actually).
@@ -1533,7 +1094,7 @@ Tested with Namazu 2.0.6 on a GNU/Linux system."
(nnir-artitem-rsv y)))))))))
(defun nnir-run-notmuch (query server &optional groups)
- "Run QUERY against notmuch.
+ "Run QUERY with GROUPS from SERVER against notmuch.
Returns a vector of (group name, file name) pairs (also vectors,
actually). If GROUPS is a list of group names, use them to
construct path: search terms (see the variable
@@ -1617,7 +1178,7 @@ construct path: search terms (see the variable
artlist)))
(defun nnir-run-find-grep (query server &optional grouplist)
- "Run find and grep to obtain matching articles."
+ "Run find and grep to QUERY GROUPLIST on SERVER for matching articles."
(let* ((method (gnus-server-to-method server))
(sym (intern
(concat (symbol-name (car method)) "-directory")))
@@ -1703,14 +1264,10 @@ construct path: search terms (see the variable
;;; Util Code:
-(defun gnus-nnir-group-p (group)
- "Say whether GROUP is nnir or not."
- (if (gnus-group-prefixed-p group)
- (eq 'nnir (car (gnus-find-method-for-group group)))
- (and group (string-match "^nnir" group))))
(defun nnir-read-parms (nnir-search-engine)
- "Read additional search parameters according to `nnir-engines'."
+ "Read additional search parameters for NNIR-SEARCH-ENGINE.
+Parameters are according to `nnir-engines'."
(let ((parmspec (nth 2 (assoc nnir-search-engine nnir-engines))))
(mapcar #'nnir-read-parm parmspec)))
@@ -1727,7 +1284,7 @@ PARMSPEC is a cons cell, the car is a symbol, the cdr is a prompt."
(cons sym (read-string prompt)))))
(defun nnir-run-query (specs)
- "Invoke appropriate search engine function (see `nnir-engines')."
+ "Invoke search engine appropriate for SPECS (see `nnir-engines')."
(apply #'vconcat
(mapcar
(lambda (x)
@@ -1736,10 +1293,11 @@ PARMSPEC is a cons cell, the car is a symbol, the cdr is a prompt."
(search-func (cadr (assoc search-engine nnir-engines))))
(and search-func
(funcall search-func (cdr (assq 'nnir-query-spec specs))
- server (cadr x)))))
+ server (cdr x)))))
(cdr (assq 'nnir-group-spec specs)))))
(defun nnir-server-to-search-engine (server)
+ "Find search engine for SERVER."
(or (nnir-read-server-parm 'nnir-search-engine server t)
(cdr (assoc (car (gnus-server-to-method server))
nnir-method-default-engines))))
@@ -1754,48 +1312,10 @@ environment unless NOT-GLOBAL is non-nil."
((and (not not-global) (boundp key)) (symbol-value key))
(t nil))))
-(defun nnir-possibly-change-group (group &optional server)
- (or (not server) (nnir-server-opened server) (nnir-open-server server))
- (when (gnus-nnir-group-p group)
- (setq nnir-artlist (gnus-group-get-parameter
- (gnus-group-prefixed-name
- (gnus-group-short-name group) '(nnir "nnir"))
- 'nnir-artlist t))))
-
-(defun nnir-server-opened (&optional server)
- (let ((backend (car (gnus-server-to-method server))))
- (nnoo-current-server-p (or backend 'nnir) server)))
-
-(autoload 'nnimap-make-thread-query "nnimap")
-(declare-function gnus-registry-get-id-key "gnus-registry" (id key))
-
-(defun nnir-search-thread (header)
- "Make an nnir group based on the thread containing the article HEADER.
-The current server will be searched. If the registry is installed,
-the server that the registry reports the current article came from
-is also searched."
- (let* ((query
- (list (cons 'query (nnimap-make-thread-query header))
- (cons 'criteria "")))
- (server
- (list (list (gnus-method-to-server
- (gnus-find-method-for-group gnus-newsgroup-name)))))
- (registry-group (and
- (bound-and-true-p gnus-registry-enabled)
- (car (gnus-registry-get-id-key
- (mail-header-id header) 'group))))
- (registry-server
- (and registry-group
- (gnus-method-to-server
- (gnus-find-method-for-group registry-group)))))
- (when registry-server
- (cl-pushnew (list registry-server) server :test #'equal))
- (gnus-group-make-nnir-group nil (list
- (cons 'nnir-query-spec query)
- (cons 'nnir-group-spec server)))
- (gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
+(autoload 'gnus-request-list "gnus-int")
(defun nnir-get-active (srv)
+ "Return the active list for SRV."
(let ((method (gnus-server-to-method srv))
groups)
(gnus-request-list method)
@@ -1835,82 +1355,37 @@ is also searched."
(forward-line)))))
groups))
-;; Behind gnus-registry-enabled test.
-(declare-function gnus-registry-action "gnus-registry"
- (action data-header from &optional to method))
-
-(defun nnir-registry-action (action data-header _from &optional to method)
- "Call `gnus-registry-action' with the original article group."
- (gnus-registry-action
- action
- data-header
- (nnir-article-group (mail-header-number data-header))
- to
- method))
-
-(defun nnir-mode ()
- (when (eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnir)
- (when (and nnir-summary-line-format
- (not (string= nnir-summary-line-format
- gnus-summary-line-format)))
- (setq gnus-summary-line-format nnir-summary-line-format)
- (gnus-update-format-specifications nil 'summary))
- (when (bound-and-true-p gnus-registry-enabled)
- (remove-hook 'gnus-summary-article-delete-hook 'gnus-registry-action t)
- (remove-hook 'gnus-summary-article-move-hook 'gnus-registry-action t)
- (remove-hook 'gnus-summary-article-expire-hook 'gnus-registry-action t)
- (add-hook 'gnus-summary-article-delete-hook 'nnir-registry-action t t)
- (add-hook 'gnus-summary-article-move-hook 'nnir-registry-action t t)
- (add-hook 'gnus-summary-article-expire-hook 'nnir-registry-action t t))))
-
-
-(defun gnus-summary-create-nnir-group ()
- (interactive)
- (or (nnir-server-opened "") (nnir-open-server "nnir"))
- (let ((name (gnus-read-group "Group name: "))
- (method '(nnir ""))
- (pgroup
- (gnus-group-guess-full-name-from-command-method gnus-newsgroup-name)))
- (with-current-buffer gnus-group-buffer
- (gnus-group-make-group
- name method nil
- (gnus-group-find-parameter pgroup)))))
-
-
-(deffoo nnir-request-create-group (group &optional _server args)
- (message "Creating nnir group %s" group)
- (let* ((group (gnus-group-prefixed-name group '(nnir "nnir")))
- (specs (assq 'nnir-specs args))
- (query-spec
- (or (cdr (assq 'nnir-query-spec specs))
- (list (cons 'query
- (read-string "Query: " nil 'nnir-search-history)))))
- (group-spec
- (or (cdr (assq 'nnir-group-spec specs))
- (list (list (read-string "Server: " nil nil)))))
- (nnir-specs (list (cons 'nnir-query-spec query-spec)
- (cons 'nnir-group-spec group-spec))))
- (gnus-group-set-parameter group 'nnir-specs nnir-specs)
- (gnus-group-set-parameter
- group 'nnir-artlist
- (or (cdr (assq 'nnir-artlist args))
- (nnir-run-query nnir-specs)))
- (nnir-request-update-info group (gnus-get-info group)))
- t)
-
-(deffoo nnir-request-delete-group (_group &optional _force _server)
- t)
-
-(deffoo nnir-request-list (&optional _server)
- t)
-
-(deffoo nnir-request-scan (_group _method)
- t)
-
-(deffoo nnir-request-close ()
- t)
-
-(nnoo-define-skeleton nnir)
+(autoload 'nnselect-categorize "nnselect" nil nil)
+(autoload 'gnus-group-topic-name "gnus-topic" nil nil)
+(defvar gnus-group-marked)
+(defvar gnus-topic-alist)
+
+(defun nnir-make-specs (nnir-extra-parms &optional specs)
+ "Make the query-spec and group-spec for a search with NNIR-EXTRA-PARMS.
+Query for the specs, or use SPECS."
+ (let* ((group-spec
+ (or (cdr (assq 'nnir-group-spec specs))
+ (if (gnus-server-server-name)
+ (list (list (gnus-server-server-name)))
+ (nnselect-categorize
+ (or gnus-group-marked
+ (if (gnus-group-group-name)
+ (list (gnus-group-group-name))
+ (cdr (assoc (gnus-group-topic-name) gnus-topic-alist))))
+ 'nnselect-group-server))))
+ (query-spec
+ (or (cdr (assq 'nnir-query-spec specs))
+ (apply
+ 'append
+ (list (cons 'query
+ (read-string "Query: " nil 'nnir-search-history)))
+ (when nnir-extra-parms
+ (mapcar
+ (lambda (x)
+ (nnir-read-parms (nnir-server-to-search-engine (car x))))
+ group-spec))))))
+ (list (cons 'nnir-query-spec query-spec)
+ (cons 'nnir-group-spec group-spec))))
;; The end.
(provide 'nnir)
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 9c7b1254413..81a148db669 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -492,7 +492,7 @@ This variable is set by `nnmaildir-request-article'.")
(setq nov-mid 0))
(goto-char (point-min))
(delete-char 1)
- (setq nov (nnheader-parse-naked-head)
+ (setq nov (nnheader-parse-head t)
field (or (mail-header-lines nov) 0)))
(unless (or (zerop field) (nnmaildir--param pgname 'distrust-Lines:))
(setq nov-mid field))
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index baf5d54b74d..ad608b6575e 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -766,7 +766,7 @@ article number. This function is called narrowed to an article."
(if (re-search-forward "\n\r?\n" nil t)
(1- (point))
(point-max))))
- (let ((headers (nnheader-parse-naked-head)))
+ (let ((headers (nnheader-parse-head t)))
(setf (mail-header-chars headers) chars)
(setf (mail-header-number headers) number)
headers))))
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
new file mode 100644
index 00000000000..1965a2614f7
--- /dev/null
+++ b/lisp/gnus/nnselect.el
@@ -0,0 +1,864 @@
+;;; nnselect.el --- a virtual group backend -*- lexical-binding:t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Andrew Cohen <cohen@andy.bu.edu>
+;; Keywords: news mail
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This is a "virtual" backend that allows an arbitrary list of
+;; articles to be treated as a Gnus group. An nnselect group uses an
+;; `nnselect-spec' group parameter to specify this list of
+;; articles. `nnselect-spec' is an alist with two keys:
+;; `nnselect-function', whose value should be a function that returns
+;; the list of articles, and `nnselect-args'. The function will be
+;; applied to the arguments to generate the list of articles. The
+;; return value should be a vector, each element of which should in
+;; turn be a vector of three elements: a real prefixed group name, an
+;; article number in that group, and an integer score. The score is
+;; not used by nnselect but may be used by other code to help in
+;; sorting. Most functions will just chose a fixed number, such as
+;; 100, for this score.
+
+;; For example the search function `nnir-run-query' applied to
+;; arguments specifying a search query (see "nnir.el") can be used to
+;; return a list of articles from a search. Or the function can be the
+;; identity and the args a vector of articles.
+
+
+;;; Code:
+
+;;; Setup:
+
+(require 'gnus-art)
+(require 'nnir)
+
+(eval-when-compile (require 'cl-lib))
+
+;; Set up the backend
+
+(nnoo-declare nnselect)
+
+(nnoo-define-basics nnselect)
+
+(gnus-declare-backend "nnselect" 'post-mail 'virtual)
+
+;;; Internal Variables:
+
+(defvar gnus-inhibit-demon)
+(defvar gnus-message-group-art)
+
+;; For future use
+(defvoo nnselect-directory gnus-directory
+ "Directory for the nnselect backend.")
+
+(defvoo nnselect-active-file
+ (expand-file-name "nnselect-active" nnselect-directory)
+ "nnselect active file.")
+
+(defvoo nnselect-groups-file
+ (expand-file-name "nnselect-newsgroups" nnselect-directory)
+ "nnselect groups description file.")
+
+;;; Helper routines.
+(defun nnselect-compress-artlist (artlist)
+ "Compress ARTLIST."
+ (let (selection)
+ (pcase-dolist (`(,artgroup . ,arts)
+ (nnselect-categorize artlist 'nnselect-artitem-group))
+ (let (list)
+ (pcase-dolist (`(,rsv . ,articles)
+ (nnselect-categorize
+ arts 'nnselect-artitem-rsv 'nnselect-artitem-number))
+ (push (cons rsv (gnus-compress-sequence (sort articles '<)))
+ list))
+ (push (cons artgroup list) selection)))
+ selection))
+
+(defun nnselect-uncompress-artlist (artlist)
+ "Uncompress ARTLIST."
+ (if (vectorp artlist)
+ artlist
+ (let (selection)
+ (pcase-dolist (`(,artgroup (,artrsv . ,artseq)) artlist)
+ (setq selection
+ (vconcat
+ (cl-map 'vector
+ #'(lambda (art)
+ (vector artgroup art artrsv))
+ (gnus-uncompress-sequence artseq)) selection)))
+ selection)))
+
+(defun nnselect-group-server (group)
+ "Return the server for GROUP."
+ (gnus-group-server group))
+
+;; Data type article list.
+
+(define-inline nnselect-artlist-length (artlist)
+ (inline-quote (length ,artlist)))
+
+(define-inline nnselect-artlist-article (artlist n)
+ "Return from ARTLIST the Nth artitem (counting starting at 1)."
+ (inline-quote (when (> ,n 0)
+ (elt ,artlist (1- ,n)))))
+
+(define-inline nnselect-artitem-group (artitem)
+ "Return the group from the ARTITEM."
+ (inline-quote (elt ,artitem 0)))
+
+(define-inline nnselect-artitem-number (artitem)
+ "Return the number from the ARTITEM."
+ (inline-quote (elt ,artitem 1)))
+
+(define-inline nnselect-artitem-rsv (artitem)
+ "Return the Retrieval Status Value (RSV, score) from the ARTITEM."
+ (inline-quote (elt ,artitem 2)))
+
+(define-inline nnselect-article-group (article)
+ "Return the group for ARTICLE."
+ (inline-quote
+ (nnselect-artitem-group (nnselect-artlist-article
+ gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-number (article)
+ "Return the number for ARTICLE."
+ (inline-quote (nnselect-artitem-number
+ (nnselect-artlist-article
+ gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-rsv (article)
+ "Return the rsv for ARTICLE."
+ (inline-quote (nnselect-artitem-rsv
+ (nnselect-artlist-article
+ gnus-newsgroup-selection ,article))))
+
+(define-inline nnselect-article-id (article)
+ "Return the pair `(nnselect id . real id)' of ARTICLE."
+ (inline-quote (cons ,article (nnselect-article-number ,article))))
+
+(define-inline nnselect-categorize (sequence keyfunc &optional valuefunc)
+ "Sorts a sequence into categories.
+Returns a list of the form
+`((key1 (element11 element12)) (key2 (element21 element22))'.
+The category key for a member of the sequence is obtained
+as `(keyfunc member)' and the corresponding element is just
+`member' (or `(valuefunc member)' if `valuefunc' is non-nil)."
+ (inline-letevals (sequence keyfunc valuefunc)
+ (inline-quote (let ((valuefunc (or ,valuefunc 'identity))
+ result)
+ (unless (null ,sequence)
+ (mapc
+ (lambda (member)
+ (let* ((key (funcall ,keyfunc member))
+ (value (funcall valuefunc member))
+ (kr (assoc key result)))
+ (if kr
+ (push value (cdr kr))
+ (push (list key value) result))))
+ (reverse ,sequence))
+ result)))))
+
+
+;; Unclear whether a macro or an inline function is best.
+;; (defmacro nnselect-categorize (sequence keyfunc &optional valuefunc)
+;; "Sorts a sequence into categories and returns a list of the form
+;; `((key1 (element11 element12)) (key2 (element21 element22))'.
+;; The category key for a member of the sequence is obtained
+;; as `(keyfunc member)' and the corresponding element is just
+;; `member' (or `(valuefunc member)' if `valuefunc' is non-nil)."
+;; (let ((key (make-symbol "key"))
+;; (value (make-symbol "value"))
+;; (result (make-symbol "result"))
+;; (valuefunc (or valuefunc 'identity)))
+;; `(unless (null ,sequence)
+;; (let (,result)
+;; (mapc
+;; (lambda (member)
+;; (let* ((,key (,keyfunc member))
+;; (,value (,valuefunc member))
+;; (kr (assoc ,key ,result)))
+;; (if kr
+;; (push ,value (cdr kr))
+;; (push (list ,key ,value) ,result))))
+;; (reverse ,sequence))
+;; ,result))))
+
+(define-inline ids-by-group (articles)
+ (inline-quote
+ (nnselect-categorize ,articles 'nnselect-article-group
+ 'nnselect-article-id)))
+
+(define-inline numbers-by-group (articles)
+ (inline-quote
+ (nnselect-categorize
+ ,articles 'nnselect-article-group 'nnselect-article-number)))
+
+
+(defmacro nnselect-add-prefix (group)
+ "Ensures that the GROUP has an nnselect prefix."
+ `(gnus-group-prefixed-name
+ (gnus-group-short-name ,group) '(nnselect "nnselect")))
+
+(defmacro nnselect-get-artlist (group)
+ "Retrieve the list of articles for GROUP."
+ `(when (gnus-nnselect-group-p ,group)
+ (nnselect-uncompress-artlist
+ (gnus-group-get-parameter ,group 'nnselect-artlist t))))
+
+(defmacro nnselect-add-novitem (novitem)
+ "Add NOVITEM to the list of headers."
+ `(let* ((novitem ,novitem)
+ (artno (and novitem
+ (mail-header-number novitem)))
+ (art (car-safe (rassq artno artids))))
+ (when art
+ (setf (mail-header-number novitem) art)
+ (push novitem headers))))
+
+;;; User Customizable Variables:
+
+(defgroup nnselect nil
+ "Virtual groups in Gnus with arbitrary selection methods."
+ :group 'gnus)
+
+(defcustom nnselect-retrieve-headers-override-function nil
+ "A function that retrieves article headers for ARTICLES from GROUP.
+The retrieved headers should populate the `nntp-server-buffer'.
+Returns either the retrieved header format 'nov or 'headers.
+
+If this variable is nil, or if the provided function returns nil,
+ `gnus-retrieve-headers' will be called instead."
+ :version "24.1" :type '(function) :group 'nnselect)
+
+
+;; Gnus backend interface functions.
+
+(deffoo nnselect-open-server (server &optional definitions)
+ ;; Just set the server variables appropriately.
+ (let ((backend (or (car (gnus-server-to-method server)) 'nnselect)))
+ (nnoo-change-server backend server definitions)))
+
+;; (deffoo nnselect-server-opened (&optional server)
+;; "Is SERVER the current virtual server?"
+;; (if (string-empty-p server)
+;; t
+;; (let ((backend (car (gnus-server-to-method server))))
+;; (nnoo-current-server-p (or backend 'nnselect) server))))
+
+(deffoo nnselect-server-opened (&optional _server)
+ t)
+
+
+(deffoo nnselect-request-group (group &optional _server _dont-check info)
+ (let* ((group (nnselect-add-prefix group))
+ (nnselect-artlist (nnselect-get-artlist group))
+ length)
+ ;; Check for cached select result or run the selection and cache
+ ;; the result.
+ (unless nnselect-artlist
+ (gnus-group-set-parameter
+ group 'nnselect-artlist
+ (nnselect-compress-artlist (setq nnselect-artlist
+ (nnselect-run
+ (gnus-group-get-parameter group 'nnselect-specs t)))))
+ (nnselect-request-update-info
+ group (or info (gnus-get-info group))))
+ (if (zerop (setq length (nnselect-artlist-length nnselect-artlist)))
+ (progn
+ (nnheader-report 'nnselect "Selection produced empty results.")
+ (nnheader-insert ""))
+ (with-current-buffer nntp-server-buffer
+ (nnheader-insert "211 %d %d %d %s\n"
+ length ; total #
+ 1 ; first #
+ length ; last #
+ group))) ; group name
+ nnselect-artlist))
+
+
+(deffoo nnselect-retrieve-headers (articles group &optional _server fetch-old)
+ (let ((group (nnselect-add-prefix group)))
+ (with-current-buffer (gnus-summary-buffer-name group)
+ (setq gnus-newsgroup-selection (or gnus-newsgroup-selection
+ (nnselect-get-artlist group)))
+ (let ((gnus-inhibit-demon t)
+ (gartids (ids-by-group articles))
+ headers)
+ (with-current-buffer nntp-server-buffer
+ (pcase-dolist (`(,artgroup . ,artids) gartids)
+ (let ((artlist (sort (mapcar 'cdr artids) '<))
+ (gnus-override-method (gnus-find-method-for-group artgroup))
+ (fetch-old
+ (or
+ (car-safe
+ (gnus-group-find-parameter artgroup
+ 'gnus-fetch-old-headers t))
+ fetch-old)))
+ (erase-buffer)
+ (pcase (setq gnus-headers-retrieved-by
+ (or
+ (and
+ nnselect-retrieve-headers-override-function
+ (funcall
+ nnselect-retrieve-headers-override-function
+ artlist artgroup))
+ (gnus-retrieve-headers
+ artlist artgroup fetch-old)))
+ ('nov
+ (goto-char (point-min))
+ (while (not (eobp))
+ (nnselect-add-novitem
+ (nnheader-parse-nov))
+ (forward-line 1)))
+ ('headers
+ (goto-char (point-min))
+ (while (not (eobp))
+ (nnselect-add-novitem
+ (nnheader-parse-head))
+ (forward-line 1)))
+ ((pred listp)
+ (dolist (novitem gnus-headers-retrieved-by)
+ (nnselect-add-novitem novitem)))
+ (_ (error "Unknown header type %s while requesting articles \
+ of group %s" gnus-headers-retrieved-by artgroup)))))
+ (setq headers
+ (sort
+ headers
+ (lambda (x y)
+ (< (mail-header-number x) (mail-header-number y))))))))))
+
+
+(deffoo nnselect-request-article (article &optional _group server to-buffer)
+ (let* ((gnus-override-method nil)
+ servers group-art artlist)
+ (if (numberp article)
+ (with-current-buffer gnus-summary-buffer
+ (unless (zerop (nnselect-artlist-length
+ gnus-newsgroup-selection))
+ (setq group-art (cons (nnselect-article-group article)
+ (nnselect-article-number article)))))
+ ;; message-id: either coming from a referral or a pseudo-article
+ ;; find the servers for a pseudo-article
+ (if (eq 'nnselect (car (gnus-server-to-method server)))
+ (with-current-buffer gnus-summary-buffer
+ (let ((thread (gnus-id-to-thread article)))
+ (when thread
+ (mapc
+ #'(lambda (x)
+ (when (and x (> x 0))
+ (cl-pushnew
+ (list
+ (gnus-method-to-server
+ (gnus-find-method-for-group
+ (nnselect-article-group x)))) servers :test 'equal)))
+ (gnus-articles-in-thread thread)))))
+ (setq servers (list (list server))))
+ (setq artlist
+ (nnir-run-query
+ (list
+ (cons 'nnir-query-spec
+ (list (cons 'query (format "HEADER Message-ID %s" article))
+ (cons 'criteria "") (cons 'shortcut t)))
+ (cons 'nnir-group-spec servers))))
+ (unless (zerop (nnselect-artlist-length artlist))
+ (setq
+ group-art
+ (cons
+ (nnselect-artitem-group (nnselect-artlist-article artlist 1))
+ (nnselect-artitem-number (nnselect-artlist-article artlist 1))))))
+ (when (numberp (cdr group-art))
+ (message "Requesting article %d from group %s"
+ (cdr group-art) (car group-art))
+ (if to-buffer
+ (with-current-buffer to-buffer
+ (let ((gnus-article-decode-hook nil))
+ (gnus-request-article-this-buffer
+ (cdr group-art) (car group-art))))
+ (gnus-request-article (cdr group-art) (car group-art)))
+ group-art)))
+
+
+(deffoo nnselect-request-move-article
+ (article _group _server accept-form &optional last _internal-move-group)
+ (let* ((artgroup (nnselect-article-group article))
+ (artnumber (nnselect-article-number article))
+ (to-newsgroup (nth 1 accept-form))
+ (to-method (gnus-find-method-for-group to-newsgroup))
+ (from-method (gnus-find-method-for-group artgroup))
+ (move-is-internal (gnus-server-equal from-method to-method)))
+ (unless (gnus-check-backend-function
+ 'request-move-article artgroup)
+ (error "The group %s does not support article moving" artgroup))
+ (gnus-request-move-article
+ artnumber
+ artgroup
+ (nth 1 from-method)
+ accept-form
+ last
+ (and move-is-internal
+ to-newsgroup ; Not respooling
+ (gnus-group-real-name to-newsgroup)))))
+
+
+(deffoo nnselect-request-expire-articles
+ (articles _group &optional _server force)
+ (if force
+ (let (not-expired)
+ (pcase-dolist (`(,artgroup . ,artids) (ids-by-group articles))
+ (let ((artlist (sort (mapcar 'cdr artids) '<)))
+ (unless (gnus-check-backend-function 'request-expire-articles
+ artgroup)
+ (error "Group %s does not support article expiration" artgroup))
+ (unless (gnus-check-server (gnus-find-method-for-group artgroup))
+ (error "Couldn't open server for group %s" artgroup))
+ (push (mapcar #'(lambda (art)
+ (car (rassq art artids)))
+ (let ((nnimap-expunge 'immediately))
+ (gnus-request-expire-articles
+ artlist artgroup force)))
+ not-expired)))
+ (sort (delq nil not-expired) '<))
+ articles))
+
+
+(deffoo nnselect-warp-to-article ()
+ (let* ((cur (if (> (gnus-summary-article-number) 0)
+ (gnus-summary-article-number)
+ (error "Can't warp to a pseudo-article")))
+ (artgroup (nnselect-article-group cur))
+ (artnumber (nnselect-article-number cur))
+ (_quit-config (gnus-ephemeral-group-p gnus-newsgroup-name)))
+
+ ;; what should we do here? we could leave all the buffers around
+ ;; and assume that we have to exit from them one by one. or we can
+ ;; try to clean up directly
+
+ ;;first exit from the nnselect summary buffer.
+ ;;(gnus-summary-exit)
+ ;; and if the nnselect summary buffer in turn came from another
+ ;; summary buffer we have to clean that summary up too.
+ ;;(when (not (eq (cdr quit-config) 'group))
+ ;; (gnus-summary-exit))
+ (gnus-summary-read-group-1 artgroup t t nil
+ nil (list artnumber))))
+
+
+;; we pass this through to the real group in case it wants to adjust
+;; the mark. We also use this to mark an article expirable iff it is
+;; expirable in the real group.
+(deffoo nnselect-request-update-mark (_group article mark)
+ (let* ((artgroup (nnselect-article-group article))
+ (artnumber (nnselect-article-number article))
+ (gmark (gnus-request-update-mark artgroup artnumber mark)))
+ (when (and artnumber
+ (memq mark gnus-auto-expirable-marks)
+ (= mark gmark)
+ (gnus-group-auto-expirable-p artgroup))
+ (setq gmark gnus-expirable-mark))
+ gmark))
+
+
+(deffoo nnselect-request-set-mark (_group actions &optional _server)
+ (mapc
+ (lambda (request) (gnus-request-set-mark (car request) (cdr request)))
+ (nnselect-categorize
+ (cl-mapcan
+ (lambda (act)
+ (cl-destructuring-bind (range action marks) act
+ (mapcar
+ (lambda (artgroup)
+ (list (car artgroup)
+ (gnus-compress-sequence (sort (cdr artgroup) '<))
+ action marks))
+ (numbers-by-group
+ (gnus-uncompress-range range)))))
+ actions)
+ 'car 'cdr)))
+
+(deffoo nnselect-request-update-info (group info &optional _server)
+ (let* ((group (nnselect-add-prefix group))
+ (gnus-newsgroup-selection (or gnus-newsgroup-selection
+ (nnselect-get-artlist group))))
+ (gnus-info-set-marks info nil)
+ (setf (gnus-info-read info) nil)
+ (pcase-dolist (`(,artgroup . ,nartids)
+ (ids-by-group
+ (number-sequence 1 (nnselect-artlist-length
+ gnus-newsgroup-selection))))
+ (let* ((gnus-newsgroup-active nil)
+ (artids (cl-sort nartids '< :key 'car))
+ (group-info (gnus-get-info artgroup))
+ (marks (gnus-info-marks group-info))
+ (unread (gnus-uncompress-sequence
+ (gnus-range-difference (gnus-active artgroup)
+ (gnus-info-read group-info)))))
+ (gnus-atomic-progn
+ (setf (gnus-info-read info)
+ (gnus-add-to-range
+ (gnus-info-read info)
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (unless (memq (cdr art) unread) (car art)))
+ artids))))
+ (pcase-dolist (`(,type . ,range) marks)
+ (setq range (gnus-uncompress-sequence range))
+ (gnus-add-marked-articles
+ group type
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (when (memq (cdr art) range)
+ (car art))) artids)))))))
+ (gnus-set-active group (cons 1 (nnselect-artlist-length
+ gnus-newsgroup-selection)))))
+
+
+(deffoo nnselect-request-thread (header &optional group server)
+ (with-current-buffer gnus-summary-buffer
+ (let ((group (nnselect-add-prefix group))
+ ;; find the best group for the originating article. if its a
+ ;; pseudo-article look for real articles in the same thread
+ ;; and see where they come from.
+ (artgroup (nnselect-article-group
+ (if (> (mail-header-number header) 0)
+ (mail-header-number header)
+ (if (> (gnus-summary-article-number) 0)
+ (gnus-summary-article-number)
+ (let ((thread
+ (gnus-id-to-thread (mail-header-id header))))
+ (when thread
+ (cl-some #'(lambda (x)
+ (when (and x (> x 0)) x))
+ (gnus-articles-in-thread thread)))))))))
+ ;; Check if we are dealing with an imap backend.
+ (if (eq 'nnimap
+ (car (gnus-find-method-for-group artgroup)))
+ ;; If so we perform the query, massage the result, and return
+ ;; the new headers back to the caller to incorporate into the
+ ;; current summary buffer.
+ (let* ((group-spec
+ (list (delq nil (list
+ (or server (gnus-group-server artgroup))
+ (unless gnus-refer-thread-use-search
+ artgroup)))))
+ (query-spec
+ (list (cons 'query (nnimap-make-thread-query header))
+ (cons 'criteria "")))
+ (last (nnselect-artlist-length gnus-newsgroup-selection))
+ (first (1+ last))
+ (new-nnselect-artlist
+ (nnir-run-query
+ (list (cons 'nnir-query-spec query-spec)
+ (cons 'nnir-group-spec group-spec))))
+ old-arts seq
+ headers)
+ (mapc
+ #'(lambda (article)
+ (if
+ (setq seq
+ (cl-position article
+ gnus-newsgroup-selection :test 'equal))
+ (push (1+ seq) old-arts)
+ (setq gnus-newsgroup-selection
+ (vconcat gnus-newsgroup-selection (vector article)))
+ (cl-incf last)))
+ new-nnselect-artlist)
+ (setq headers
+ (gnus-fetch-headers
+ (append (sort old-arts '<)
+ (number-sequence first last)) nil t))
+ (gnus-group-set-parameter
+ group
+ 'nnselect-artlist
+ (nnselect-compress-artlist gnus-newsgroup-selection))
+ (when (>= last first)
+ (let (new-marks)
+ (pcase-dolist (`(,artgroup . ,artids)
+ (ids-by-group (number-sequence first last)))
+ (pcase-dolist (`(,type . ,marked)
+ (gnus-info-marks (gnus-get-info artgroup)))
+ (setq marked (gnus-uncompress-sequence marked))
+ (when (setq new-marks
+ (delq nil
+ (mapcar
+ #'(lambda (art)
+ (when (memq (cdr art) marked)
+ (car art)))
+ artids)))
+ (nconc
+ (symbol-value
+ (intern
+ (format "gnus-newsgroup-%s"
+ (car (rassq type gnus-article-mark-lists)))))
+ new-marks)))))
+ (setq gnus-newsgroup-active
+ (cons 1 (nnselect-artlist-length gnus-newsgroup-selection)))
+ (gnus-set-active
+ group
+ (cons 1 (nnselect-artlist-length gnus-newsgroup-selection))))
+ headers)
+ ;; If not an imap backend just warp to the original article
+ ;; group and punt back to gnus-summary-refer-thread.
+ (and (gnus-warp-to-article) (gnus-summary-refer-thread))))))
+
+
+(deffoo nnselect-close-group (group &optional _server)
+ (let ((group (nnselect-add-prefix group)))
+ (unless gnus-group-is-exiting-without-update-p
+ (nnselect-push-info group))
+ (setq gnus-newsgroup-selection nil)
+ (when (gnus-ephemeral-group-p group)
+ (gnus-kill-ephemeral-group group)
+ (setq gnus-ephemeral-servers
+ (assq-delete-all 'nnselect gnus-ephemeral-servers)))))
+
+
+(deffoo nnselect-request-create-group (group &optional _server args)
+ (message "Creating nnselect group %s" group)
+ (let* ((group (gnus-group-prefixed-name group '(nnselect "nnselect")))
+ (specs (assq 'nnselect-specs args))
+ (function-spec
+ (or (alist-get 'nnselect-function specs)
+ (intern (completing-read "Function: " obarray #'functionp))))
+ (args-spec
+ (or (alist-get 'nnselect-args specs)
+ (read-from-minibuffer "Args: " nil nil t nil "nil")))
+ (nnselect-specs (list (cons 'nnselect-function function-spec)
+ (cons 'nnselect-args args-spec))))
+ (gnus-group-set-parameter group 'nnselect-specs nnselect-specs)
+ (gnus-group-set-parameter
+ group 'nnselect-artlist
+ (nnselect-compress-artlist (or (alist-get 'nnselect-artlist args)
+ (nnselect-run nnselect-specs))))
+ (nnselect-request-update-info group (gnus-get-info group)))
+ t)
+
+
+(deffoo nnselect-request-type (_group &optional article)
+ (if (and (numberp article) (> article 0))
+ (gnus-request-type
+ (nnselect-article-group article) (nnselect-article-number article))
+ 'unknown))
+
+(deffoo nnselect-request-post (&optional _server)
+ (if (not gnus-message-group-art)
+ (nnheader-report 'nnselect "Can't post to an nnselect group")
+ (gnus-request-post
+ (gnus-find-method-for-group
+ (nnselect-article-group (cdr gnus-message-group-art))))))
+
+
+(deffoo nnselect-request-rename-group (_group _new-name &optional _server)
+ t)
+
+
+(deffoo nnselect-request-scan (group _method)
+ (when (and group
+ (gnus-group-get-parameter (nnselect-add-prefix group)
+ 'nnselect-rescan t))
+ (nnselect-request-group-scan group)))
+
+
+(deffoo nnselect-request-group-scan (group &optional _server _info)
+ (let* ((group (nnselect-add-prefix group))
+ (artlist (nnselect-run
+ (gnus-group-get-parameter group 'nnselect-specs t))))
+ (gnus-set-active group (cons 1 (nnselect-artlist-length
+ artlist)))
+ (gnus-group-set-parameter
+ group 'nnselect-artlist
+ (nnselect-compress-artlist artlist))))
+
+;; Add any undefined required backend functions
+
+;; (nnoo-define-skeleton nnselect)
+
+;;; Util Code:
+
+(defun gnus-nnselect-group-p (group)
+ "Say whether GROUP is nnselect or not."
+ (or (and (gnus-group-prefixed-p group)
+ (eq 'nnselect (car (gnus-find-method-for-group group))))
+ (eq 'nnselect (car gnus-command-method))))
+
+
+(defun nnselect-run (specs)
+ "Apply nnselect-function to nnselect-args from SPECS.
+Return an article list."
+ (let ((func (alist-get 'nnselect-function specs))
+ (args (alist-get 'nnselect-args specs)))
+ (funcall func args)))
+
+
+(defun nnselect-search-thread (header)
+ "Make an nnselect group containing the thread with article HEADER.
+The current server will be searched. If the registry is
+installed, the server that the registry reports the current
+article came from is also searched."
+ (let* ((query
+ (list (cons 'query (nnimap-make-thread-query header))
+ (cons 'criteria "")))
+ (server
+ (list (list (gnus-method-to-server
+ (gnus-find-method-for-group gnus-newsgroup-name)))))
+ (registry-group (and
+ (bound-and-true-p gnus-registry-enabled)
+ (car (gnus-registry-get-id-key
+ (mail-header-id header) 'group))))
+ (registry-server
+ (and registry-group
+ (gnus-method-to-server
+ (gnus-find-method-for-group registry-group)))))
+ (when registry-server (cl-pushnew (list registry-server) server
+ :test 'equal))
+ (gnus-group-read-ephemeral-group
+ (concat "nnselect-" (message-unique-id))
+ (list 'nnselect "nnselect")
+ nil
+ (cons (current-buffer) gnus-current-window-configuration)
+ ; nil
+ nil nil
+ (list
+ (cons 'nnselect-specs
+ (list
+ (cons 'nnselect-function 'nnir-run-query)
+ (cons 'nnselect-args
+ (list (cons 'nnir-query-spec query)
+ (cons 'nnir-group-spec server)))))
+ (cons 'nnselect-artlist nil)))
+ (gnus-summary-goto-subject (gnus-id-to-article (mail-header-id header)))))
+
+
+
+(defun nnselect-push-info (group)
+ "Copy mark-lists from GROUP to the originating groups."
+ (let ((select-unreads (numbers-by-group gnus-newsgroup-unreads))
+ (select-reads (numbers-by-group
+ (gnus-uncompress-range
+ (gnus-info-read (gnus-get-info group)))))
+ (select-unseen (numbers-by-group gnus-newsgroup-unseen))
+ (gnus-newsgroup-active nil)
+ mark-list type-list)
+ (pcase-dolist (`(,mark . ,type) gnus-article-mark-lists)
+ (when (setq type-list
+ (symbol-value (intern (format "gnus-newsgroup-%s" mark))))
+ (push (cons type
+ (numbers-by-group
+ (gnus-uncompress-range type-list))) mark-list)))
+ (pcase-dolist (`(,artgroup . ,artlist)
+ (numbers-by-group gnus-newsgroup-articles))
+ (let* ((group-info (gnus-get-info artgroup))
+ (old-unread (gnus-list-of-unread-articles artgroup))
+ newmarked)
+ (when group-info
+ (pcase-dolist (`(,_mark . ,type) gnus-article-mark-lists)
+ (let ((select-type
+ (sort
+ (cdr (assoc artgroup (alist-get type mark-list)))
+ '<)) list)
+ (setq list
+ (gnus-uncompress-range
+ (gnus-add-to-range
+ (gnus-remove-from-range
+ (alist-get type (gnus-info-marks group-info))
+ artlist)
+ select-type)))
+
+ (when list
+ ;; Get rid of the entries of the articles that have the
+ ;; default score.
+ (when (and (eq type 'score)
+ gnus-save-score
+ list)
+ (let* ((arts list)
+ (prev (cons nil list))
+ (all prev))
+ (while arts
+ (if (or (not (consp (car arts)))
+ (= (cdar arts) gnus-summary-default-score))
+ (setcdr prev (cdr arts))
+ (setq prev arts))
+ (setq arts (cdr arts)))
+ (setq list (cdr all)))))
+
+ (when (or (eq (gnus-article-mark-to-type type) 'list)
+ (eq (gnus-article-mark-to-type type) 'range))
+ (setq list
+ (gnus-compress-sequence (sort list '<) t)))
+
+ ;; When exiting the group, everything that's previously been
+ ;; unseen is now seen.
+ (when (eq type 'seen)
+ (setq list (gnus-range-add
+ list (cdr (assoc artgroup select-unseen)))))
+
+ (when (or list (eq type 'unexist))
+ (push (cons type list) newmarked))))
+
+ (gnus-atomic-progn
+ ;; Enter these new marks into the info of the group.
+ (if (nthcdr 3 group-info)
+ (setcar (nthcdr 3 group-info) newmarked)
+ ;; Add the marks lists to the end of the info.
+ (when newmarked
+ (setcdr (nthcdr 2 group-info) (list newmarked))))
+
+ ;; Cut off the end of the info if there's nothing else there.
+ (let ((i 5))
+ (while (and (> i 2)
+ (not (nth i group-info)))
+ (when (nthcdr (cl-decf i) group-info)
+ (setcdr (nthcdr i group-info) nil))))
+
+ ;; update read and unread
+ (gnus-update-read-articles
+ artgroup
+ (gnus-uncompress-range
+ (gnus-add-to-range
+ (gnus-remove-from-range
+ old-unread
+ (cdr (assoc artgroup select-reads)))
+ (sort (cdr (assoc artgroup select-unreads)) '<))))
+ (gnus-get-unread-articles-in-group
+ group-info (gnus-active artgroup) t)
+ (gnus-group-update-group artgroup t t)))))))
+
+
+(declare-function gnus-registry-get-id-key "gnus-registry" (id key))
+
+(defun gnus-summary-make-search-group (nnir-extra-parms)
+ "Search a group from the summary buffer.
+Pass NNIR-EXTRA-PARMS on to the search engine."
+ (interactive "P")
+ (gnus-warp-to-article)
+ (let ((spec
+ (list
+ (cons 'nnir-group-spec
+ (list (list
+ (gnus-group-server gnus-newsgroup-name)
+ gnus-newsgroup-name))))))
+ (gnus-group-make-search-group nnir-extra-parms spec)))
+
+
+;; The end.
+(provide 'nnselect)
+
+;;; nnselect.el ends here
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index 33b68fa989e..0b6bba5fea7 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -422,7 +422,7 @@ there.")
(nnspool-article-pathname nnspool-current-group article))
(nnheader-insert-article-line article)
(goto-char (point-min))
- (let ((headers (nnheader-parse-head)))
+ (let ((headers (nnheader-parse-head nil t)))
(set-buffer cur)
(goto-char (point-max))
(nnheader-insert-nov headers)))
diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el
index dead1f6bf77..1d9e051a8cf 100644
--- a/lisp/help-at-pt.el
+++ b/lisp/help-at-pt.el
@@ -92,13 +92,16 @@ the `kbd-help' property at point. If `kbd-help' does not produce
a string, but the `help-echo' property does, then that string is
printed instead.
+The string is passed through `substitute-command-keys' before it
+is displayed.
+
A numeric argument ARG prevents display of a message in case
there is no help. While ARG can be used interactively, it is
mainly meant for use from Lisp."
(interactive "P")
(let ((help (help-at-pt-kbd-string)))
(if help
- (message "%s" help)
+ (message "%s" (substitute-command-keys help))
(if (not arg) (message "No local help at point")))))
(defvar help-at-pt-timer nil
@@ -162,6 +165,10 @@ included in this list. Suggested properties are `keymap',
`local-map', `button' and `kbd-help'. Any value other than t or
a non-empty list disables the feature.
+The text printed from the `help-echo' property is often only
+relevant when using the mouse. The presence of a `kbd-help'
+property guarantees that non mouse specific help is available.
+
This variable only takes effect after a call to
`help-at-pt-set-timer'. The help gets printed after Emacs has
been idle for `help-at-pt-timer-delay' seconds. You can call
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index a137c504888..a9943ccd7f4 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -151,9 +151,7 @@ When called from lisp, FUNCTION may also be a function object."
(let* ((fn (function-called-at-point))
(enable-recursive-minibuffers t)
(val (completing-read
- (if fn
- (format "Describe function (default %s): " fn)
- "Describe function: ")
+ (format-prompt "Describe function" fn)
#'help--symbol-completion-table
(lambda (f) (or (fboundp f) (get f 'function-documentation)))
t nil nil
@@ -924,10 +922,7 @@ it is displayed along with the global value."
(orig-buffer (current-buffer))
val)
(setq val (completing-read
- (if (symbolp v)
- (format
- "Describe variable (default %s): " v)
- "Describe variable: ")
+ (format-prompt "Describe variable" (and (symbolp v) v))
#'help--symbol-completion-table
(lambda (vv)
;; In case the variable only exists in the buffer
@@ -1424,10 +1419,8 @@ current buffer and the selected frame, respectively."
(v-or-f (if found v-or-f (function-called-at-point)))
(found (or found v-or-f))
(enable-recursive-minibuffers t)
- (val (completing-read (if found
- (format
- "Describe symbol (default %s): " v-or-f)
- "Describe symbol: ")
+ (val (completing-read (format-prompt "Describe symbol"
+ (and found v-or-f))
#'help--symbol-completion-table
(lambda (vv)
(cl-some (lambda (x) (funcall (nth 1 x) vv))
@@ -1603,7 +1596,7 @@ keymap value."
(interactive
(let* ((km (help-fns--most-relevant-active-keymap))
(val (completing-read
- (format "Keymap (default %s): " km)
+ (format-prompt "Keymap" km)
obarray
(lambda (m) (and (boundp m) (keymapp (symbol-value m))))
t nil 'keymap-name-history
diff --git a/lisp/help.el b/lisp/help.el
index b7d867eb70e..45159d44779 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -131,7 +131,6 @@ This is a list
(WINDOW . quit-window) do quit-window, then select WINDOW.
(WINDOW BUF START POINT) display BUF at START, POINT, then select WINDOW.")
-(define-obsolete-function-alias 'print-help-return-message 'help-print-return-message "23.2")
(defun help-print-return-message (&optional function)
"Display or return message saying how to restore windows after help command.
This function assumes that `standard-output' is the help buffer.
@@ -365,7 +364,7 @@ With argument, display info only for the selected version."
(sort (delete-dups res) #'string>)))
(current (car all-versions)))
(setq version (completing-read
- (format "Read NEWS for the version (default %s): " current)
+ (format-prompt "Read NEWS for the version" current)
all-versions nil nil nil nil current))
(if (integerp (string-to-number version))
(setq version (string-to-number version))
@@ -534,12 +533,9 @@ If INSERT (the prefix arg) is non-nil, insert the message in the buffer."
(let ((fn (function-called-at-point))
(enable-recursive-minibuffers t)
val)
- (setq val (completing-read
- (if fn
- (format "Where is command (default %s): " fn)
- "Where is command: ")
- obarray 'commandp t nil nil
- (and fn (symbol-name fn))))
+ (setq val (completing-read (format-prompt "Where is command" fn)
+ obarray 'commandp t nil nil
+ (and fn (symbol-name fn))))
(list (unless (equal val "") (intern val))
current-prefix-arg)))
(unless definition (error "No command"))
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 0ffe77d2763..0fe651ace34 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -657,10 +657,7 @@ then remove all hi-lock highlighting."
(car pattern)))
hi-lock-interactive-patterns))))
(list
- (completing-read (if (null defaults)
- "Regexp to unhighlight: "
- (format "Regexp to unhighlight (default %s): "
- (car defaults)))
+ (completing-read (format-prompt "Regexp to unhighlight" (car defaults))
(mapcar (lambda (pattern)
(cons (or (car (rassq pattern hi-lock-interactive-lighters))
(car pattern))
@@ -747,8 +744,7 @@ with completion and history."
(if (and hi-lock-auto-select-face (not current-prefix-arg))
(setq face (or (pop hi-lock--unused-faces) (car defaults)))
(setq face (completing-read
- (format "Highlight using face (default %s): "
- (car defaults))
+ (format-prompt "Highlight using face" (car defaults))
obarray 'facep t nil 'face-name-history defaults))
;; Update list of un-used faces.
(setq hi-lock--unused-faces (remove face hi-lock--unused-faces))
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index c9ca1f87424..80c5b073985 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -1234,14 +1234,12 @@ Called interactively, accept a comma separated list of mode names."
(symbol-name (buffer-local-value
'major-mode buf)))))
(mapcar #'intern
- (completing-read-multiple
- (if default
- (format "Filter by major mode (default %s): " default)
- "Filter by major mode: ")
- obarray
- (lambda (e)
- (string-match "-mode\\'" (if (symbolp e) (symbol-name e) e)))
- t nil nil default)))
+ (completing-read-multiple
+ (format-prompt "Filter by major mode" default)
+ obarray
+ (lambda (e)
+ (string-match "-mode\\'" (if (symbolp e) (symbol-name e) e)))
+ t nil nil default)))
:accept-list t)
(eq qualifier (buffer-local-value 'major-mode buf)))
@@ -1259,11 +1257,9 @@ currently used by buffers."
(symbol-name (buffer-local-value
'major-mode buf)))))
(mapcar #'intern
- (completing-read-multiple
- (if default
- (format "Filter by major mode (default %s): " default)
- "Filter by major mode: ")
- (ibuffer-list-buffer-modes) nil t nil nil default)))
+ (completing-read-multiple
+ (format-prompt "Filter by major mode" default)
+ (ibuffer-list-buffer-modes) nil t nil nil default)))
:accept-list t)
(eq qualifier (buffer-local-value 'major-mode buf)))
@@ -1881,9 +1877,7 @@ Otherwise buffers whose name matches an element of
'major-mode buf)))))
(list (intern
(completing-read
- (if default
- (format "Mark by major mode (default %s): " default)
- "Mark by major mode: ")
+ (format-prompt "Mark by major mode" default)
(ibuffer-list-buffer-modes) nil t nil nil default)))))
(ibuffer-mark-on-buffer
#'(lambda (buf)
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 8a68df876c1..47d78a0bc82 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -469,6 +469,7 @@ Usually run by inclusion in `minibuffer-setup-hook'."
with beg = (icomplete--field-beg)
with end = (icomplete--field-end)
with all = (completion-all-sorted-completions beg end)
+ ;; First, establish the "bubble up" predicates.
for fn in (cond ((and minibuffer-default
(stringp minibuffer-default) ; bug#38992
(= (icomplete--field-end) (icomplete--field-beg)))
@@ -493,14 +494,18 @@ Usually run by inclusion in `minibuffer-setup-hook'."
;; what vanilla Emacs and `ido-mode' both do.
`(,(lambda (comp)
(string= "./" comp)))))
- thereis (cl-loop
- for l on all
- while (consp (cdr l))
- for comp = (cadr l)
- when (funcall fn comp)
- do (setf (cdr l) (cddr l))
- and return
- (completion--cache-all-sorted-completions beg end (cons comp all)))
+ ;; Now, look for a completion matching one of those predicates
+ ;; to bubble up (unless that completion is already on top).
+ thereis (or
+ (and (funcall fn (car all)) all)
+ (cl-loop
+ for l on all
+ while (consp (cdr l))
+ for comp = (cadr l)
+ when (funcall fn comp)
+ do (setf (cdr l) (cddr l))
+ and return
+ (completion--cache-all-sorted-completions beg end (cons comp all))))
finally return all)))
@@ -715,7 +720,7 @@ matches exist."
(setq prospects (nreverse prospects))
;; Return the first match if the user hits enter.
(when icomplete-show-matches-on-no-input
- (setq completion-content-when-empty (car prospects)))
+ (setq-local completion-content-when-empty (car prospects)))
;; Decorate first of the prospects.
(when prospects
(let ((first (copy-sequence (pop prospects))))
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 948e62e10d0..032ebf38733 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -612,6 +612,15 @@ Key bindings:
(setq major-mode 'image-mode)
(setq image-transform-resize image-auto-resize)
+ ;; Bail out early if we have no image data.
+ (if (zerop (buffer-size))
+ (funcall (if (called-interactively-p 'any) 'error 'message)
+ (if (file-exists-p buffer-file-name)
+ "Empty file"
+ "(New file)"))
+ (image-mode--display)))
+
+(defun image-mode--display ()
(if (not (image-get-display-property))
(progn
(when (condition-case err
@@ -709,7 +718,7 @@ A non-mage major mode found from `auto-mode-alist' or fundamental mode
displays an image file as text."
;; image-mode-as-text = normal-mode + image-minor-mode
(let ((previous-image-type image-type)) ; preserve `image-type'
- (major-mode-restore '(image-mode image-mode-maybe image-mode-as-text))
+ (major-mode-restore '(image-mode image-mode-as-text))
;; Restore `image-type' after `kill-all-local-variables' in `normal-mode'.
(setq image-type previous-image-type)
;; Enable image minor mode with `C-c C-c'.
@@ -759,8 +768,6 @@ on these modes."
(if (image-get-display-property)
"text" "an image or hex") ".")))
-(define-obsolete-function-alias 'image-mode-maybe 'image-mode "23.2")
-
(defun image-toggle-display-text ()
"Show the image file as text.
Remove text properties that display the image."
diff --git a/lisp/image/image-converter.el b/lisp/image/image-converter.el
index ee1dc845fb5..c31a3b8d3cf 100644
--- a/lisp/image/image-converter.el
+++ b/lisp/image/image-converter.el
@@ -33,8 +33,15 @@
"Type of the external image converter to use.
The value should a symbol, either `imagemagick', `graphicsmagick',
or `ffmpeg'.
+
If nil, Emacs will try to find one of the supported converters
-installed on the system."
+installed on the system.
+
+The actual range of image formats that will be converted depends
+on what image formats the chosen converter reports being able to
+handle. `auto-mode-alist' is then used to further filter what
+formats that are to be supported: Only the suffixes that map to
+`image-mode' will be handled."
:group 'image
:type 'symbol
:version "27.1")
@@ -186,12 +193,25 @@ data is returned as a string."
"Find an installed image converter."
(catch 'done
(dolist (elem image-converter--converters)
- (when-let ((formats (image-converter--probe (car elem))))
+ (when-let ((formats (image-converter--filter-formats
+ (image-converter--probe (car elem)))))
(setq image-converter (car elem)
image-converter-regexp (concat "\\." (regexp-opt formats) "\\'")
image-converter-file-name-extensions formats)
(throw 'done image-converter)))))
+(defun image-converter--filter-formats (suffixes)
+ "Filter SUFFIXES based on `auto-mode-alist'.
+Only suffixes that map to `image-mode' are returned."
+ (cl-loop with case-fold-search = (if (not auto-mode-case-fold)
+ nil
+ t)
+ for suffix in suffixes
+ when (eq (cdr (assoc (concat "foo." suffix) auto-mode-alist
+ #'string-match))
+ 'image-mode)
+ collect suffix))
+
(cl-defmethod image-converter--convert ((type (eql graphicsmagick)) source
image-format)
"Convert using GraphicsMagick."
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 1949f2f48f7..8fdacb0214d 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -316,28 +316,6 @@ PREVPOS is the variable in which we store the last position displayed."
)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;
-;;;; Some examples of functions utilizing the framework of this
-;;;; package.
-;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; FIXME: This was the only imenu-example-* definition actually used,
-;; by cperl-mode.el. Now cperl-mode has its own copy, so these can
-;; all be removed.
-(defun imenu-example--name-and-position ()
- "Return the current/previous sexp and its (beginning) location.
-Don't move point."
- (declare (obsolete "use your own function instead." "23.2"))
- (save-excursion
- (forward-sexp -1)
- ;; [ydi] modified for imenu-use-markers
- (let ((beg (if imenu-use-markers (point-marker) (point)))
- (end (progn (forward-sexp) (point))))
- (cons (buffer-substring beg end)
- beg))))
-
;;;
;;; Lisp
;;;
@@ -787,10 +765,13 @@ Return one of the entries in index-alist or nil."
index-alist))))
(when (stringp name)
(setq name (or (imenu-find-default name prepared-index-alist) name)))
- (cond (prompt)
- ((and name (imenu--in-alist name prepared-index-alist))
- (setq prompt (format "Index item (default %s): " name)))
- (t (setq prompt "Index item: ")))
+ (unless prompt
+ (setq prompt (format-prompt
+ "Index item"
+ (and name
+ (imenu--in-alist name prepared-index-alist)
+ ;; Default to `name' if it's in the alist.
+ name))))
(let ((minibuffer-setup-hook minibuffer-setup-hook))
;; Display the completion buffer.
(if (not imenu-eager-completion-buffer)
diff --git a/lisp/indent.el b/lisp/indent.el
index 0a0dd99ce08..9f32cedfa4a 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -53,7 +53,16 @@ If `complete', TAB first tries to indent the current line, and if the line
was already indented, then try to complete the thing at point.
Some programming language modes have their own variable to control this,
-e.g., `c-tab-always-indent', and do not respect this variable."
+e.g., `c-tab-always-indent', and do not respect this variable.
+
+If you want the TAB key to always insert a literal TAB character,
+this can't be controlled by setting this variable. Instead you
+could say something like:
+
+\(setq overriding-terminal-local-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [?\t] 'self-insert-command)
+ map))"
:group 'indent
:type '(choice
(const :tag "Always indent" t)
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 4e379cadef1..bcc2930ffc0 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -297,9 +297,7 @@ If optional argument QUERY is non-nil, query for the help mode."
(completion-ignore-case (info-lookup->ignore-case topic mode))
(enable-recursive-minibuffers t)
(value (completing-read
- (if default
- (format "Describe %s (default %s): " topic default)
- (format "Describe %s: " topic))
+ (format-prompt "Describe %s" default topic)
completions nil nil nil 'info-lookup-history default)))
(list (if (equal value "") default value) mode)))
@@ -557,7 +555,7 @@ Return nil if there is nothing appropriate in the buffer near point."
(info-lookup->regexp topic mode)))
(start (point)) end regexp subexp result)
(save-excursion
- (if (symbolp rule)
+ (if (functionp rule)
(setq result (funcall rule))
(if (consp rule)
(setq regexp (car rule)
@@ -610,6 +608,7 @@ Return nil if there is nothing appropriate in the buffer near point."
(defun info-lookup-guess-custom-symbol ()
"Get symbol at point in custom buffers."
+ (declare (obsolete nil "28.1"))
(condition-case nil
(save-excursion
(let ((case-fold-search t)
@@ -1065,7 +1064,9 @@ Return nil if there is nothing appropriate in the buffer near point."
:mode 'Custom-mode
:ignore-case t
:regexp "[^][()`'‘’,:\" \t\n]+"
- :parse-rule 'info-lookup-guess-custom-symbol
+ :parse-rule (lambda ()
+ (when-let ((symbol (get-text-property (point) 'custom-data)))
+ (symbol-name symbol)))
:other-modes '(emacs-lisp-mode))
(info-lookup-maybe-add-help
diff --git a/lisp/info.el b/lisp/info.el
index 78f88947c79..dc1102aab30 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1995,12 +1995,9 @@ the Top node in FILENAME."
"Search for REGEXP, starting from point, and select node it's found in.
If DIRECTION is `backward', search in the reverse direction."
(interactive (list (read-string
- (if Info-search-history
- (format "Regexp search%s (default %s): "
- (if case-fold-search "" " case-sensitively")
- (car Info-search-history))
- (format "Regexp search%s: "
- (if case-fold-search "" " case-sensitively")))
+ (format-prompt
+ "Regexp search%s" (car Info-search-history)
+ (if case-fold-search "" " case-sensitively"))
nil 'Info-search-history)))
(deactivate-mark)
(when (equal regexp "")
@@ -2124,12 +2121,9 @@ If DIRECTION is `backward', search in the reverse direction."
(defun Info-search-backward (regexp &optional bound noerror count)
"Search for REGEXP in the reverse direction."
(interactive (list (read-string
- (if Info-search-history
- (format "Regexp search%s backward (default %s): "
- (if case-fold-search "" " case-sensitively")
- (car Info-search-history))
- (format "Regexp search%s backward: "
- (if case-fold-search "" " case-sensitively")))
+ (format-prompt
+ "Regexp search%s backward" (car Info-search-history)
+ (if case-fold-search "" " case-sensitively"))
nil 'Info-search-history)))
(Info-search regexp bound noerror count 'backward))
@@ -2308,7 +2302,11 @@ If SAME-FILE is non-nil, do not move to a different Info file."
nil t))
(progn (beginning-of-line) (if (looking-at "^\\* ") (forward-char 2)))
(goto-char p)
- (Info-restore-point Info-history)))))
+ (Info-restore-point Info-history))))
+ ;; If scroll-conservatively is non-zero and less than 101, display
+ ;; as much of the superior node above the target line as possible.
+ (when (< 0 scroll-conservatively 101)
+ (recenter)))
(defun Info-history-back ()
"Go back in the history to the last node visited."
@@ -2771,6 +2769,8 @@ Because of ambiguities, this should be concatenated with something like
;; Go back to the start node (for the next completion).
(unless (equal Info-current-node orignode)
(Info-goto-node orignode))
+ ;; Arrange list to be in order found in node.
+ (setq completions (nreverse completions))
;; Update the cache.
(setq Info-complete-cache
(list Info-current-file Info-current-node
@@ -2810,10 +2810,7 @@ new buffer."
(while (null item)
(setq item (let ((completion-ignore-case t)
(Info-complete-menu-buffer (current-buffer)))
- (completing-read (if default
- (format "Menu item (default %s): "
- default)
- "Menu item: ")
+ (completing-read (format-prompt "Menu item" default)
#'Info-complete-menu-item nil t nil nil
default))))
(list item current-prefix-arg))))
diff --git a/lisp/international/ccl.el b/lisp/international/ccl.el
index d3ae23c2f70..3b3fcf4c041 100644
--- a/lisp/international/ccl.el
+++ b/lisp/international/ccl.el
@@ -196,7 +196,9 @@
"Embed integer DATA in `ccl-program-vector' at `ccl-current-ic' and
increment it. If IC is specified, embed DATA at IC."
(if ic
- (aset ccl-program-vector ic (ccl-fixnum data))
+ (aset ccl-program-vector ic (if (numberp data)
+ (ccl-fixnum data)
+ data))
(let ((len (length ccl-program-vector)))
(if (>= ccl-current-ic len)
(let ((new (make-vector (* len 2) nil)))
@@ -204,7 +206,9 @@ increment it. If IC is specified, embed DATA at IC."
(setq len (1- len))
(aset new len (aref ccl-program-vector len)))
(setq ccl-program-vector new))))
- (aset ccl-program-vector ccl-current-ic (ccl-fixnum data))
+ (aset ccl-program-vector ccl-current-ic (if (numberp data)
+ (ccl-fixnum data)
+ data))
(setq ccl-current-ic (1+ ccl-current-ic))))
(defun ccl-embed-symbol (symbol prop)
diff --git a/lisp/international/kinsoku.el b/lisp/international/kinsoku.el
index 54bf0e95313..4e9b6b015a5 100644
--- a/lisp/international/kinsoku.el
+++ b/lisp/international/kinsoku.el
@@ -182,4 +182,6 @@ the context of text formatting."
(aref (char-category-set (preceding-char)) ?<))
(kinsoku-shorter linebeg))))
+(provide 'kinsoku)
+
;;; kinsoku.el ends here
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 5fe931dd9bb..ccc8ac9f9e6 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -325,9 +325,7 @@ wrong, use this command again to toggle back to the right mode."
'undecided))
buffer-file-coding-system)))
(list (read-coding-system
- (if default
- (format "Coding system for following command (default %s): " default)
- "Coding system for following command: ")
+ (format-prompt "Coding system for following command" default)
default))))
(prefix-command-preserve-state)
(setq mule-cmds--prefixed-command-next-coding-system coding-system)
@@ -613,9 +611,8 @@ When called from a program, the value is the position of the unencodable
character found, or nil if all characters are encodable."
(interactive
(list (let ((default (or buffer-file-coding-system 'us-ascii)))
- (read-coding-system
- (format "Coding-system (default %s): " default)
- default))))
+ (read-coding-system (format-prompt "Coding-system" default)
+ default))))
(let ((pos (unencodable-char-position (point) (point-max) coding-system)))
(if pos
(goto-char (1+ pos))
@@ -804,9 +801,8 @@ or specify any other coding system (and risk losing\n\
;; Read a coding system.
(setq coding-system
- (read-coding-system
- (format "Select coding system (default %s): " default)
- default))
+ (read-coding-system (format-prompt "Select coding system" default)
+ default))
(setq last-coding-system-specified coding-system))
(kill-buffer "*Warning*")
@@ -2070,12 +2066,6 @@ See `set-language-info-alist' for use in programs."
"Do various unibyte-mode setups for language environment LANGUAGE-NAME."
(set-display-table-and-terminal-coding-system language-name))
-(defun princ-list (&rest args)
- "Print all arguments with `princ', then print \"\\n\"."
- (declare (obsolete "use mapc and princ instead." "23.3"))
- (mapc #'princ args)
- (princ "\n"))
-
(put 'describe-specified-language-support 'apropos-inhibit t)
;; Print language-specific information such as input methods,
@@ -3016,6 +3006,15 @@ on encoding."
;; higher code, so it gets pushed later!
(if new-name (puthash new-name c names))
(if old-name (puthash old-name c names))
+ ;; Unicode uses the spelling "lamda" in character
+ ;; names, instead of "lambda", due to "preferences
+ ;; expressed by the Greek National Body" (Bug#30513).
+ ;; Some characters have an old-name with the "lambda"
+ ;; spelling, but others don't. Add the traditional
+ ;; spelling for more convenient completion.
+ (when (and (not old-name) new-name
+ (string-match "\\<LAMDA\\>" new-name))
+ (puthash (replace-match "LAMBDA" t t new-name) c names))
(setq c (1+ c))))))
;; Special case for "BELL" which is apparently the only char which
;; doesn't have a new name and whose old-name is shadowed by a newer
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 092abc09b05..c4febb26d4f 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1247,7 +1247,7 @@ Internal use only.")
(concat "\\(?:" completion-pcm--delim-wild-regex
"\\|\\([[:alpha:]]\\)[[:digit:]]\\)"))
(cs (completing-read
- (format "Coding system for saving file (default %s): " default)
+ (format-prompt "Coding system for saving file" default)
combined-table
nil t nil 'coding-system-history
(if default (symbol-name default)))))
@@ -1350,8 +1350,7 @@ graphical terminals."
default-terminal-coding-system)
default-terminal-coding-system)))
(read-coding-system
- (format "Coding system for terminal display (default %s): "
- default)
+ (format-prompt "Coding system for terminal display" default)
default))))
(if (and (not coding-system)
(not (terminal-coding-system)))
@@ -1384,8 +1383,7 @@ graphical terminals."
(default (if (eq (coding-system-type coding) 'raw-text)
default-keyboard-coding-system)))
(read-coding-system
- (format "Coding system for keyboard input (default %s): "
- default)
+ (format-prompt "Coding system for keyboard input" default)
default))))
(let ((coding-type (coding-system-type coding-system))
(saved-meta-mode
@@ -1480,10 +1478,8 @@ the text is encoded or decoded by CODING-SYSTEM."
This setting is effective for the next communication only."
(interactive
(list (read-coding-system
- (if last-next-selection-coding-system
- (format "Coding system for the next selection (default %S): "
- last-next-selection-coding-system)
- "Coding system for the next selection: ")
+ (format-prompt "Coding system for the next selection"
+ last-next-selection-coding-system)
last-next-selection-coding-system)))
(if coding-system
(setq last-next-selection-coding-system coding-system)
@@ -2170,8 +2166,7 @@ Part of the job of this function is setting `buffer-undo-list' appropriately."
(read-coding-system "Text was really in: ")
(let ((coding (or buffer-file-coding-system last-coding-system-used)))
(read-coding-system
- (concat "But was interpreted as"
- (if coding (format " (default %S): " coding) ": "))
+ (format-prompt "But was interpreted as" coding)
coding))))
(or (and new-coding coding)
(error "Coding system not specified"))
diff --git a/lisp/international/ogonek.el b/lisp/international/ogonek.el
index 9ab9e3b0f65..37fcda70b37 100644
--- a/lisp/international/ogonek.el
+++ b/lisp/international/ogonek.el
@@ -300,9 +300,8 @@ The functions come in the following groups.
Store the name in the parameter-variable DEFAULT-NAME-VAR.
PROMPT is a string to be shown when the user is asked for a name."
(let ((encoding
- (completing-read
- (format "%s (default %s): " prompt (symbol-value default-name-var))
- ogonek-name-encoding-alist nil t)))
+ (completing-read (format-prompt prompt (symbol-value default-name-var))
+ ogonek-name-encoding-alist nil t)))
;; change the default name to the one just read, and
;; return the new default as the name you read
(set default-name-var
@@ -314,8 +313,7 @@ The result is stored in the variable DEFAULT-PREFIX-VAR.
PROMPT is a string to be shown when the user is asked for a new prefix."
(let ((prefix-string
(read-string
- (format "%s (default %s): " prompt
- (char-to-string (eval default-prefix-var))))))
+ (format-prompt prompt (char-to-string (eval default-prefix-var))))))
(if (> (length prefix-string) 1)
(error "! Only one character expected")
;; set the default prefix character to the one just read
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 81e83d79509..7fb1d8a3ca6 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2337,7 +2337,7 @@ characters in that string."
(with-isearch-suspended
(setq regexp-collect
(read-regexp
- (format "Regexp to collect (default %s): " default)
+ (format-prompt "Regexp to collect" default)
default 'occur-collect-regexp-history)))
regexp-collect))
;; Otherwise normal occur takes numerical prefix argument.
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index ff8f250a22e..2d50df70fd4 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -329,7 +329,10 @@ ignored."
:method method
:params params))
-(defconst jrpc-default-request-timeout 10
+(define-obsolete-variable-alias 'jrpc-default-request-timeout
+ 'jsonrpc-default-request-timeout "28.1")
+
+(defconst jsonrpc-default-request-timeout 10
"Time in seconds before timing out a JSONRPC request.")
@@ -617,7 +620,7 @@ With optional CLEANUP, kill any associated buffers."
params
&rest args
&key success-fn error-fn timeout-fn
- (timeout jrpc-default-request-timeout)
+ (timeout jsonrpc-default-request-timeout)
(deferred nil))
"Does actual work for `jsonrpc-async-request'.
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index 9847ab66e60..c19637010a2 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -169,13 +169,6 @@ Support for Russian using koi8-r and the russian-computer input method.")
:charset-list '(ibm866)
:mime-charset 'cp866)
-(define-coding-system 'koi8-u
- "KOI8-U 8-bit encoding for Cyrillic (MIME: KOI8-U)"
- :coding-type 'charset
- :mnemonic ?U
- :charset-list '(koi8-u)
- :mime-charset 'koi8-u)
-
(define-coding-system 'koi8-t
"KOI8-T 8-bit encoding for Cyrillic"
:coding-type 'charset
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 7077925602c..40a4150628a 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -55,7 +55,7 @@ should return a grid vector array that is the new solution.
\(fn BREEDER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "5x5" '("5x5-")))
+(register-definition-prefixes "5x5" '("5x5-"))
;;;***
@@ -192,7 +192,7 @@ old-style time formats for entries are supported.
\(fn OTHER-LOG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "add-log" '("add-log-" "change-log-")))
+(register-definition-prefixes "add-log" '("add-log-" "change-log-"))
;;;***
@@ -329,7 +329,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
(function-put 'defadvice 'lisp-indent-function '2)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "advice" '("ad-")))
+(register-definition-prefixes "advice" '("ad-"))
;;;***
@@ -432,7 +432,7 @@ A replacement function for `newline-and-indent', aligning as it goes.
The alignment is done by calling `align' on the region that was
indented." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "align" '("align-")))
+(register-definition-prefixes "align" '("align-"))
;;;***
@@ -477,11 +477,11 @@ With value nil, inhibit any automatic allout-mode activation.")
(custom-autoload 'allout-auto-activation "allout" nil)
-(put 'allout-use-hanging-indents 'safe-local-variable (if (fboundp 'booleanp) 'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-use-hanging-indents 'safe-local-variable 'booleanp)
(put 'allout-reindent-bodies 'safe-local-variable (lambda (x) (memq x '(nil t text force))))
-(put 'allout-show-bodies 'safe-local-variable (if (fboundp 'booleanp) 'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-show-bodies 'safe-local-variable 'booleanp)
(put 'allout-header-prefix 'safe-local-variable 'stringp)
@@ -493,13 +493,13 @@ With value nil, inhibit any automatic allout-mode activation.")
(put 'allout-use-mode-specific-leader 'safe-local-variable (lambda (x) (or (memq x '(t nil allout-mode-leaders comment-start)) (stringp x))))
-(put 'allout-old-style-prefixes 'safe-local-variable (if (fboundp 'booleanp) 'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-old-style-prefixes 'safe-local-variable 'booleanp)
-(put 'allout-stylish-prefixes 'safe-local-variable (if (fboundp 'booleanp) 'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-stylish-prefixes 'safe-local-variable 'booleanp)
-(put 'allout-numbered-bullet 'safe-local-variable (if (fboundp 'string-or-null-p) 'string-or-null-p (lambda (x) (or (stringp x) (null x)))))
+(put 'allout-numbered-bullet 'safe-local-variable 'string-or-null-p)
-(put 'allout-file-xref-bullet 'safe-local-variable (if (fboundp 'string-or-null-p) 'string-or-null-p (lambda (x) (or (stringp x) (null x)))))
+(put 'allout-file-xref-bullet 'safe-local-variable 'string-or-null-p)
(put 'allout-presentation-padding 'safe-local-variable 'integerp)
@@ -516,6 +516,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\<allout-mode-map-value>
Allout outline mode is a minor mode that provides extensive
outline oriented formatting and manipulation. It enables
@@ -788,7 +791,7 @@ for details on preparing Emacs for automatic allout activation.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "allout" '("allout-")))
+(register-definition-prefixes "allout" '("allout-"))
;;;***
@@ -821,7 +824,7 @@ See `allout-widgets-mode' for allout widgets mode features.")
(custom-autoload 'allout-widgets-auto-activation "allout-widgets" nil)
-(put 'allout-widgets-mode-inhibit 'safe-local-variable (if (fboundp 'booleanp) 'booleanp (lambda (x) (member x '(t nil)))))
+(put 'allout-widgets-mode-inhibit 'safe-local-variable 'booleanp)
(autoload 'allout-widgets-mode "allout-widgets" "\
Toggle Allout Widgets mode.
@@ -831,6 +834,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Allout Widgets mode is an extension of Allout mode that provides
graphical decoration of outline structure. It is meant to
operate along with `allout-mode', via `allout-mode-hook'.
@@ -851,7 +857,7 @@ outline hot-spot navigation (see `allout-mode').
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "allout-widgets" '("allout-")))
+(register-definition-prefixes "allout-widgets" '("allout-"))
;;;***
@@ -874,7 +880,7 @@ directory, so that Emacs will know its current contents.
\(fn OPERATION &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ange-ftp" '("ange-ftp-" "ftp-error" "internal-ange-ftp-mode")))
+(register-definition-prefixes "ange-ftp" '("ange-ftp-" "ftp-error" "internal-ange-ftp-mode"))
;;;***
@@ -908,7 +914,7 @@ the buffer *Birthday-Present-for-Name*.
\(fn &optional NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "animate" '("animat")))
+(register-definition-prefixes "animate" '("animat"))
;;;***
@@ -934,7 +940,7 @@ This is a good function to put in `comint-output-filter-functions'.
\(fn IGNORED)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ansi-color" '("ansi-color-")))
+(register-definition-prefixes "ansi-color" '("ansi-color-"))
;;;***
@@ -969,7 +975,7 @@ Major mode for editing ANTLR grammar files.
Use ANTLR's convention for TABs according to `antlr-tab-offset-alist'.
Used in `antlr-mode'. Also a useful function in `java-mode-hook'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "antlr-mode" '("antlr-")))
+(register-definition-prefixes "antlr-mode" '("antlr-"))
;;;***
@@ -992,7 +998,7 @@ ARG is positive, otherwise off.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "appt" '("appt-")))
+(register-definition-prefixes "appt" '("appt-"))
;;;***
@@ -1038,6 +1044,19 @@ will be buffer-local when set.
\(fn PATTERN &optional BUFFER)" t nil)
+(autoload 'apropos-function "apropos" "\
+Show functions that match PATTERN.
+
+PATTERN can be a word, a list of words (separated by spaces),
+or a regexp (using some regexp special characters). If it is a word,
+search for matches for that word as a substring. If it is a list of words,
+search for matches for any two (or more) of those words.
+
+This is the same as running `apropos-command' with a \\[universal-argument] prefix,
+or a non-nil `apropos-do-all' argument.
+
+\(fn PATTERN)" t nil)
+
(defalias 'command-apropos 'apropos-command)
(autoload 'apropos-command "apropos" "\
@@ -1126,7 +1145,7 @@ Returns list of symbols and documentation found.
\(fn PATTERN &optional DO-ALL)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "apropos" '("apropos-")))
+(register-definition-prefixes "apropos" '("apropos-"))
;;;***
@@ -1148,7 +1167,7 @@ archive.
\(fn &optional FORCE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "arc-mode" '("arc")))
+(register-definition-prefixes "arc-mode" '("arc"))
;;;***
@@ -1221,7 +1240,7 @@ Entering array mode calls the function `array-mode-hook'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "array" '("array-" "current-line" "limit-index" "move-to-column-untabify" "untabify-backward")))
+(register-definition-prefixes "array" '("array-" "current-line" "limit-index" "move-to-column-untabify" "untabify-backward"))
;;;***
@@ -1237,6 +1256,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Artist lets you draw lines, squares, rectangles and poly-lines,
ellipses and circles with your mouse and/or keyboard.
@@ -1434,7 +1456,7 @@ Keymap summary
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "artist" '("artist-")))
+(register-definition-prefixes "artist" '("artist-"))
;;;***
@@ -1463,7 +1485,7 @@ Special commands:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "asm-mode" '("asm-")))
+(register-definition-prefixes "asm-mode" '("asm-"))
;;;***
@@ -1487,7 +1509,7 @@ passwords are revealed when point moved into the password.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "auth-source" '("auth")))
+(register-definition-prefixes "auth-source" '("auth"))
;;;***
@@ -1514,7 +1536,7 @@ key2: value2
\(fn KEY ENTRY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "auth-source-pass" '("auth-source-pass-")))
+(register-definition-prefixes "auth-source-pass" '("auth-source-pass-"))
;;;***
@@ -1569,6 +1591,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\<autoarg-kp-mode-map>
This is similar to `autoarg-mode' but rebinds the keypad keys
`kp-1' etc. to supply digit arguments.
@@ -1577,7 +1602,7 @@ This is similar to `autoarg-mode' but rebinds the keypad keys
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autoarg" '("autoarg-")))
+(register-definition-prefixes "autoarg" '("autoarg-"))
;;;***
@@ -1589,7 +1614,7 @@ Major mode for editing Autoconf configure.ac files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autoconf" '("autoconf-")))
+(register-definition-prefixes "autoconf" '("autoconf-"))
;;;***
@@ -1625,12 +1650,15 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Auto-insert mode is enabled, when new files are created you can
insert a template for the file depending on the mode of the buffer.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autoinsert" '("auto-insert")))
+(register-definition-prefixes "autoinsert" '("auto-insert"))
;;;***
@@ -1682,7 +1710,7 @@ Calls `update-directory-autoloads' on the command line arguments.
Definitions are written to `generated-autoload-file' (which
should be non-nil)." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autoload" '("autoload-" "generate" "make-autoload" "no-update-autoloads")))
+(register-definition-prefixes "autoload" '("autoload-" "batch-update-autoloads--summary" "generate" "make-autoload" "no-update-autoloads"))
;;;***
@@ -1697,6 +1725,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Auto-Revert Mode is a minor mode that affects only the current
buffer. When enabled, it reverts the buffer when the file on
disk changes.
@@ -1724,6 +1755,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Auto-Revert Tail Mode is enabled, the tail of the file is
constantly followed, as with the shell command `tail -f'. This
means that whenever the file grows on disk (presumably because
@@ -1765,6 +1799,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Global Auto-Revert Mode is a global minor mode that reverts any
buffer associated with a file when the file changes on disk. Use
`auto-revert-mode' to revert a particular buffer.
@@ -1784,7 +1821,7 @@ specifies in the mode line.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "autorevert" '("auto-revert-" "global-auto-revert-")))
+(register-definition-prefixes "autorevert" '("auto-revert-" "global-auto-revert-"))
;;;***
@@ -1792,7 +1829,7 @@ specifies in the mode line.
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/avl-tree.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "avl-tree" '("avl-tree-")))
+(register-definition-prefixes "avl-tree" '("avl-tree-"))
;;;***
@@ -1832,7 +1869,7 @@ definition of \"random distance\".)
\(fn &optional MODE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "avoid" '("mouse-avoidance-")))
+(register-definition-prefixes "avoid" '("mouse-avoidance-"))
;;;***
@@ -1845,7 +1882,7 @@ definition of \"random distance\".)
Print a trace of Lisp function calls currently active.
Output stream used is value of `standard-output'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "backtrace" '("backtrace-")))
+(register-definition-prefixes "backtrace" '("backtrace-"))
;;;***
@@ -1865,7 +1902,7 @@ Run script using `bat-run' and `bat-run-args'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bat-mode" '("bat-")))
+(register-definition-prefixes "bat-mode" '("bat-"))
;;;***
@@ -1896,6 +1933,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
The text displayed in the mode line is controlled by
`battery-mode-line-format' and `battery-status-function'.
The mode line is be updated every `battery-update-interval'
@@ -1903,7 +1943,7 @@ seconds.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "battery" '("battery-")))
+(register-definition-prefixes "battery" '("battery-"))
;;;***
@@ -1951,14 +1991,14 @@ The return value is the value of the final form in BODY.
(function-put 'benchmark-progn 'lisp-indent-function '0)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "benchmark" '("benchmark-elapse")))
+(register-definition-prefixes "benchmark" '("benchmark-elapse"))
;;;***
;;;### (autoloads nil "bib-mode" "textmodes/bib-mode.el" (0 0 0 0))
;;; Generated autoloads from textmodes/bib-mode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bib-mode" '("addbib" "bib-" "mark-bib" "return-key-bib" "unread-bib")))
+(register-definition-prefixes "bib-mode" '("addbib" "bib-" "mark-bib" "return-key-bib" "unread-bib"))
;;;***
@@ -2051,7 +2091,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'.
\(fn KEY &optional GLOBAL START DISPLAY)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bibtex" '("bibtex-")))
+(register-definition-prefixes "bibtex" '("bibtex-"))
;;;***
@@ -2064,14 +2104,14 @@ Major mode for editing BibTeX style files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bibtex-style" '("bibtex-style-")))
+(register-definition-prefixes "bibtex-style" '("bibtex-style-"))
;;;***
;;;### (autoloads nil "bindat" "emacs-lisp/bindat.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/bindat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bindat" '("bindat-")))
+(register-definition-prefixes "bindat" '("bindat-"))
;;;***
@@ -2097,7 +2137,7 @@ Binhex decode region between START and END.
\(fn START END)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "binhex" '("binhex-")))
+(register-definition-prefixes "binhex" '("binhex-"))
;;;***
@@ -2218,7 +2258,7 @@ a reflection.
\(fn NUM)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "blackbox" '("bb-" "blackbox-")))
+(register-definition-prefixes "blackbox" '("bb-" "blackbox-"))
;;;***
@@ -2229,7 +2269,7 @@ a reflection.
(define-key ctl-x-r-map "M" 'bookmark-set-no-overwrite)
(define-key ctl-x-r-map "l" 'bookmark-bmenu-list)
-(defvar bookmark-map (let ((map (make-sparse-keymap))) (define-key map "x" 'bookmark-set) (define-key map "m" 'bookmark-set) (define-key map "M" 'bookmark-set-no-overwrite) (define-key map "j" 'bookmark-jump) (define-key map "g" 'bookmark-jump) (define-key map "o" 'bookmark-jump-other-window) (define-key map "5" 'bookmark-jump-other-frame) (define-key map "i" 'bookmark-insert) (define-key map "e" 'edit-bookmarks) (define-key map "f" 'bookmark-insert-location) (define-key map "r" 'bookmark-rename) (define-key map "d" 'bookmark-delete) (define-key map "l" 'bookmark-load) (define-key map "w" 'bookmark-write) (define-key map "s" 'bookmark-save) map) "\
+(defvar bookmark-map (let ((map (make-sparse-keymap))) (define-key map "x" 'bookmark-set) (define-key map "m" 'bookmark-set) (define-key map "M" 'bookmark-set-no-overwrite) (define-key map "j" 'bookmark-jump) (define-key map "g" 'bookmark-jump) (define-key map "o" 'bookmark-jump-other-window) (define-key map "5" 'bookmark-jump-other-frame) (define-key map "i" 'bookmark-insert) (define-key map "e" 'edit-bookmarks) (define-key map "f" 'bookmark-insert-location) (define-key map "r" 'bookmark-rename) (define-key map "d" 'bookmark-delete) (define-key map "D" 'bookmark-delete-all) (define-key map "l" 'bookmark-load) (define-key map "w" 'bookmark-write) (define-key map "s" 'bookmark-save) map) "\
Keymap containing bindings to bookmark functions.
It is not bound to any key by default: to bind it
so that you have a bookmark prefix, just use `global-set-key' and bind a
@@ -2382,6 +2422,13 @@ probably because we were called from there.
\(fn BOOKMARK-NAME &optional BATCH)" t nil)
+(autoload 'bookmark-delete-all "bookmark" "\
+Permanently delete all bookmarks.
+If optional argument NO-CONFIRM is non-nil, don't ask for
+confirmation.
+
+\(fn &optional NO-CONFIRM)" t nil)
+
(autoload 'bookmark-write "bookmark" "\
Write bookmarks to a file (reading the file name with the minibuffer)." t nil)
@@ -2423,6 +2470,10 @@ unique numeric suffixes \"<2>\", \"<3>\", etc.
\(fn FILE &optional OVERWRITE NO-MSG DEFAULT)" t nil)
+(autoload 'bookmark-bmenu-get-buffer "bookmark" "\
+Return the Bookmark List, building it if it doesn't exists.
+Don't affect the buffer ring order." nil nil)
+
(autoload 'bookmark-bmenu-list "bookmark" "\
Display a list of existing bookmarks.
The list is displayed in a buffer named `*Bookmark List*'.
@@ -2436,11 +2487,11 @@ deletion, or > if it is flagged for displaying." t nil)
(autoload 'bookmark-bmenu-search "bookmark" "\
Incremental search of bookmarks, hiding the non-matches as we go." t nil)
-(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (bindings--define-key map [load] '(menu-item "Load a Bookmark File..." bookmark-load :help "Load bookmarks from a bookmark file)")) (bindings--define-key map [write] '(menu-item "Save Bookmarks As..." bookmark-write :help "Write bookmarks to a file (reading the file name with the minibuffer)")) (bindings--define-key map [save] '(menu-item "Save Bookmarks" bookmark-save :help "Save currently defined bookmarks")) (bindings--define-key map [edit] '(menu-item "Edit Bookmark List" bookmark-bmenu-list :help "Display a list of existing bookmarks")) (bindings--define-key map [delete] '(menu-item "Delete Bookmark..." bookmark-delete :help "Delete a bookmark from the bookmark list")) (bindings--define-key map [rename] '(menu-item "Rename Bookmark..." bookmark-rename :help "Change the name of a bookmark")) (bindings--define-key map [locate] '(menu-item "Insert Location..." bookmark-locate :help "Insert the name of the file associated with a bookmark")) (bindings--define-key map [insert] '(menu-item "Insert Contents..." bookmark-insert :help "Insert the text of the file pointed to by a bookmark")) (bindings--define-key map [set] '(menu-item "Set Bookmark..." bookmark-set :help "Set a bookmark named inside a file.")) (bindings--define-key map [jump] '(menu-item "Jump to Bookmark..." bookmark-jump :help "Jump to a bookmark (a point in some file)")) map))
+(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (bindings--define-key map [load] '(menu-item "Load a Bookmark File..." bookmark-load :help "Load bookmarks from a bookmark file)")) (bindings--define-key map [write] '(menu-item "Save Bookmarks As..." bookmark-write :help "Write bookmarks to a file (reading the file name with the minibuffer)")) (bindings--define-key map [save] '(menu-item "Save Bookmarks" bookmark-save :help "Save currently defined bookmarks")) (bindings--define-key map [edit] '(menu-item "Edit Bookmark List" bookmark-bmenu-list :help "Display a list of existing bookmarks")) (bindings--define-key map [delete] '(menu-item "Delete Bookmark..." bookmark-delete :help "Delete a bookmark from the bookmark list")) (bindings--define-key map [delete-all] '(menu-item "Delete all Bookmarks..." bookmark-delete-all :help "Delete all bookmarks from the bookmark list")) (bindings--define-key map [rename] '(menu-item "Rename Bookmark..." bookmark-rename :help "Change the name of a bookmark")) (bindings--define-key map [locate] '(menu-item "Insert Location..." bookmark-locate :help "Insert the name of the file associated with a bookmark")) (bindings--define-key map [insert] '(menu-item "Insert Contents..." bookmark-insert :help "Insert the text of the file pointed to by a bookmark")) (bindings--define-key map [set] '(menu-item "Set Bookmark..." bookmark-set :help "Set a bookmark named inside a file.")) (bindings--define-key map [jump] '(menu-item "Jump to Bookmark..." bookmark-jump :help "Jump to a bookmark (a point in some file)")) map))
(defalias 'menu-bar-bookmark-map menu-bar-bookmark-map)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bookmark" '("bookmark-" "with-buffer-modified-unmodified")))
+(register-definition-prefixes "bookmark" '("bookmark-" "with-buffer-modified-unmodified"))
;;;***
@@ -2668,46 +2719,6 @@ used instead of `browse-url-new-window-flag'.
(make-obsolete 'browse-url-gnome-moz 'nil '"25.1")
-(autoload 'browse-url-mosaic "browse-url" "\
-Ask the XMosaic WWW browser to load URL.
-
-Default to the URL around or before point. The strings in variable
-`browse-url-mosaic-arguments' are also passed to Mosaic and the
-program is invoked according to the variable
-`browse-url-mosaic-program'.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Mosaic window, otherwise use a
-random existing one. A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(make-obsolete 'browse-url-mosaic 'nil '"25.1")
-
-(autoload 'browse-url-cci "browse-url" "\
-Ask the XMosaic WWW browser to load URL.
-Default to the URL around or before point.
-
-This function only works for XMosaic version 2.5 or later. You must
-select `CCI' from XMosaic's File menu, set the CCI Port Address to the
-value of variable `browse-url-CCI-port', and enable `Accept requests'.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new browser window, otherwise use a
-random existing one. A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(make-obsolete 'browse-url-cci 'nil '"25.1")
-
(autoload 'browse-url-conkeror "browse-url" "\
Ask the Conkeror WWW browser to load URL.
Default to the URL around or before point. Also pass the strings
@@ -2823,7 +2834,7 @@ from `browse-url-elinks-wrapper'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "browse-url" '("browse-url-")))
+(register-definition-prefixes "browse-url" '("browse-url-"))
;;;***
@@ -2860,7 +2871,7 @@ name of buffer configuration.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bs" '("bs-")))
+(register-definition-prefixes "bs" '("bs-"))
;;;***
@@ -2881,7 +2892,7 @@ columns on its right towards the left.
\\[bubbles-set-game-difficult] sets the difficulty to difficult.
\\[bubbles-set-game-hard] sets the difficulty to hard." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bubbles" '("bubbles-")))
+(register-definition-prefixes "bubbles" '("bubbles-"))
;;;***
@@ -2901,6 +2912,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'bug-reference-prog-mode "bug-reference" "\
@@ -2911,9 +2925,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bug-reference" '("bug-reference-")))
+(register-definition-prefixes "bug-reference" '("bug-reference-"))
;;;***
@@ -2921,7 +2938,7 @@ ARG is `toggle'; disable the mode otherwise.
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/byte-opt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "byte-opt" '("byte-" "disassemble-offset")))
+(register-definition-prefixes "byte-opt" '("byte-" "disassemble-offset"))
;;;***
@@ -3050,7 +3067,7 @@ and corresponding effects.
\(fn &optional ARG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bytecomp" '("batch-byte-compile-file" "byte-" "displaying-byte-compile-warnings" "emacs-lisp-" "no-byte-compile")))
+(register-definition-prefixes "bytecomp" '("batch-byte-compile-file" "byte-" "displaying-byte-compile-warnings" "emacs-lisp-" "no-byte-compile"))
;;;***
@@ -3058,7 +3075,7 @@ and corresponding effects.
;;;;;; 0))
;;; Generated autoloads from calendar/cal-bahai.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-bahai" '("calendar-bahai-" "diary-bahai-" "holiday-bahai")))
+(register-definition-prefixes "cal-bahai" '("calendar-bahai-" "diary-bahai-" "holiday-bahai"))
;;;***
@@ -3068,7 +3085,7 @@ and corresponding effects.
(put 'calendar-chinese-time-zone 'risky-local-variable t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-china" '("calendar-chinese-" "diary-chinese-" "holiday-chinese")))
+(register-definition-prefixes "cal-china" '("calendar-chinese-" "diary-chinese-" "holiday-chinese"))
;;;***
@@ -3076,7 +3093,7 @@ and corresponding effects.
;;;;;; 0 0))
;;; Generated autoloads from calendar/cal-coptic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-coptic" '("calendar-" "diary-")))
+(register-definition-prefixes "cal-coptic" '("calendar-" "diary-"))
;;;***
@@ -3089,7 +3106,7 @@ and corresponding effects.
(put 'calendar-current-time-zone-cache 'risky-local-variable t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-dst" '("calendar-" "dst-")))
+(register-definition-prefixes "cal-dst" '("calendar-" "dst-"))
;;;***
@@ -3097,7 +3114,7 @@ and corresponding effects.
;;;;;; 0 0))
;;; Generated autoloads from calendar/cal-french.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-french" '("calendar-french-" "diary-french-date")))
+(register-definition-prefixes "cal-french" '("calendar-french-" "diary-french-date"))
;;;***
@@ -3112,14 +3129,14 @@ from the cursor position.
\(fn DEATH-DATE START-YEAR END-YEAR)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-hebrew" '("calendar-hebrew-" "diary-hebrew-" "holiday-hebrew")))
+(register-definition-prefixes "cal-hebrew" '("calendar-hebrew-" "diary-hebrew-" "holiday-hebrew"))
;;;***
;;;### (autoloads nil "cal-html" "calendar/cal-html.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-html.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-html" '("cal-html-")))
+(register-definition-prefixes "cal-html" '("cal-html-"))
;;;***
@@ -3127,14 +3144,14 @@ from the cursor position.
;;;;;; 0))
;;; Generated autoloads from calendar/cal-islam.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-islam" '("calendar-islamic-" "diary-islamic-" "holiday-islamic")))
+(register-definition-prefixes "cal-islam" '("calendar-islamic-" "diary-islamic-" "holiday-islamic"))
;;;***
;;;### (autoloads nil "cal-iso" "calendar/cal-iso.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-iso.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-iso" '("calendar-iso-" "diary-iso-date")))
+(register-definition-prefixes "cal-iso" '("calendar-iso-" "diary-iso-date"))
;;;***
@@ -3142,7 +3159,7 @@ from the cursor position.
;;;;;; 0 0))
;;; Generated autoloads from calendar/cal-julian.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-julian" '("calendar-" "diary-" "holiday-julian")))
+(register-definition-prefixes "cal-julian" '("calendar-" "diary-" "holiday-julian"))
;;;***
@@ -3150,21 +3167,21 @@ from the cursor position.
;;;;;; 0))
;;; Generated autoloads from calendar/cal-mayan.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-mayan" '("calendar-mayan-" "diary-mayan-date")))
+(register-definition-prefixes "cal-mayan" '("calendar-mayan-" "diary-mayan-date"))
;;;***
;;;### (autoloads nil "cal-menu" "calendar/cal-menu.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-menu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-menu" '("cal")))
+(register-definition-prefixes "cal-menu" '("cal"))
;;;***
;;;### (autoloads nil "cal-move" "calendar/cal-move.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-move.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-move" '("calendar-")))
+(register-definition-prefixes "cal-move" '("calendar-"))
;;;***
@@ -3172,21 +3189,21 @@ from the cursor position.
;;;;;; 0 0))
;;; Generated autoloads from calendar/cal-persia.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-persia" '("calendar-persian-" "diary-persian-date")))
+(register-definition-prefixes "cal-persia" '("calendar-persian-" "diary-persian-date"))
;;;***
;;;### (autoloads nil "cal-tex" "calendar/cal-tex.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-tex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-tex" '("cal-tex-")))
+(register-definition-prefixes "cal-tex" '("cal-tex-"))
;;;***
;;;### (autoloads nil "cal-x" "calendar/cal-x.el" (0 0 0 0))
;;; Generated autoloads from calendar/cal-x.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cal-x" '("calendar-" "diary-frame")))
+(register-definition-prefixes "cal-x" '("calendar-" "diary-frame"))
;;;***
@@ -3274,7 +3291,7 @@ See Info node `(calc)Defining Functions'.
(function-put 'defmath 'doc-string-elt '3)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc" '("calc" "defcalcmodevar" "inexact-result" "math-" "var-")))
+(register-definition-prefixes "calc" '("calc" "defcalcmodevar" "inexact-result" "math-" "var-"))
;;;***
@@ -3282,42 +3299,42 @@ See Info node `(calc)Defining Functions'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from calc/calc-aent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-aent" '("calc" "math-")))
+(register-definition-prefixes "calc-aent" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-alg" "calc/calc-alg.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-alg.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-alg" '("calc" "math-")))
+(register-definition-prefixes "calc-alg" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-arith" "calc/calc-arith.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-arith.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-arith" '("calc" "math-")))
+(register-definition-prefixes "calc-arith" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-bin" "calc/calc-bin.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-bin.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-bin" '("calc" "math-")))
+(register-definition-prefixes "calc-bin" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-comb" "calc/calc-comb.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-comb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-comb" '("calc" "math-")))
+(register-definition-prefixes "calc-comb" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-cplx" "calc/calc-cplx.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-cplx.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-cplx" '("calc" "math-")))
+(register-definition-prefixes "calc-cplx" '("calc" "math-"))
;;;***
@@ -3325,105 +3342,105 @@ See Info node `(calc)Defining Functions'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from calc/calc-embed.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-embed" '("calc-")))
+(register-definition-prefixes "calc-embed" '("calc-"))
;;;***
;;;### (autoloads nil "calc-ext" "calc/calc-ext.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-ext.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-ext" '("calc" "math-" "var-")))
+(register-definition-prefixes "calc-ext" '("calc" "math-" "var-"))
;;;***
;;;### (autoloads nil "calc-fin" "calc/calc-fin.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-fin.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-fin" '("calc" "math-c")))
+(register-definition-prefixes "calc-fin" '("calc" "math-c"))
;;;***
;;;### (autoloads nil "calc-forms" "calc/calc-forms.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-forms.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-forms" '("calc" "math-" "var-TimeZone")))
+(register-definition-prefixes "calc-forms" '("calc" "math-" "var-TimeZone"))
;;;***
;;;### (autoloads nil "calc-frac" "calc/calc-frac.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-frac.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-frac" '("calc" "math-")))
+(register-definition-prefixes "calc-frac" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-funcs" "calc/calc-funcs.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-funcs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-funcs" '("calc" "math-")))
+(register-definition-prefixes "calc-funcs" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-graph" "calc/calc-graph.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-graph.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-graph" '("calc-")))
+(register-definition-prefixes "calc-graph" '("calc-"))
;;;***
;;;### (autoloads nil "calc-help" "calc/calc-help.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-help.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-help" '("calc-")))
+(register-definition-prefixes "calc-help" '("calc-"))
;;;***
;;;### (autoloads nil "calc-incom" "calc/calc-incom.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-incom.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-incom" '("calc-")))
+(register-definition-prefixes "calc-incom" '("calc-"))
;;;***
;;;### (autoloads nil "calc-keypd" "calc/calc-keypd.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-keypd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-keypd" '("calc-")))
+(register-definition-prefixes "calc-keypd" '("calc-"))
;;;***
;;;### (autoloads nil "calc-lang" "calc/calc-lang.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-lang.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-lang" '("calc-" "math-")))
+(register-definition-prefixes "calc-lang" '("calc-" "math-"))
;;;***
;;;### (autoloads nil "calc-macs" "calc/calc-macs.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-macs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-macs" '("Math-" "calc-" "math-")))
+(register-definition-prefixes "calc-macs" '("Math-" "calc-" "math-"))
;;;***
;;;### (autoloads nil "calc-map" "calc/calc-map.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-map.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-map" '("calc" "math-")))
+(register-definition-prefixes "calc-map" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-math" "calc/calc-math.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-math.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-math" '("calc" "math-")))
+(register-definition-prefixes "calc-math" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-menu" "calc/calc-menu.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-menu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-menu" '("calc-")))
+(register-definition-prefixes "calc-menu" '("calc-"))
;;;***
@@ -3431,91 +3448,91 @@ See Info node `(calc)Defining Functions'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from calc/calc-misc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-misc" '("math-iipow")))
+(register-definition-prefixes "calc-misc" '("math-iipow"))
;;;***
;;;### (autoloads nil "calc-mode" "calc/calc-mode.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-mode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-mode" '("calc-" "math-get-modes-vec")))
+(register-definition-prefixes "calc-mode" '("calc-" "math-get-modes-vec"))
;;;***
;;;### (autoloads nil "calc-mtx" "calc/calc-mtx.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-mtx.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-mtx" '("calc" "math-")))
+(register-definition-prefixes "calc-mtx" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-nlfit" "calc/calc-nlfit.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-nlfit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-nlfit" '("calc-fit-" "math-nlfit-")))
+(register-definition-prefixes "calc-nlfit" '("calc-fit-" "math-nlfit-"))
;;;***
;;;### (autoloads nil "calc-poly" "calc/calc-poly.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-poly.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-poly" '("calcFunc-" "math-")))
+(register-definition-prefixes "calc-poly" '("calcFunc-" "math-"))
;;;***
;;;### (autoloads nil "calc-prog" "calc/calc-prog.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-prog.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-prog" '("calc" "math-" "var-q")))
+(register-definition-prefixes "calc-prog" '("calc" "math-" "var-q"))
;;;***
;;;### (autoloads nil "calc-rewr" "calc/calc-rewr.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-rewr.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-rewr" '("calc" "math-")))
+(register-definition-prefixes "calc-rewr" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-rules" "calc/calc-rules.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-rules.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-rules" '("calc-")))
+(register-definition-prefixes "calc-rules" '("calc-"))
;;;***
;;;### (autoloads nil "calc-sel" "calc/calc-sel.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-sel.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-sel" '("calc-")))
+(register-definition-prefixes "calc-sel" '("calc-"))
;;;***
;;;### (autoloads nil "calc-stat" "calc/calc-stat.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-stat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-stat" '("calc" "math-")))
+(register-definition-prefixes "calc-stat" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-store" "calc/calc-store.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-store.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-store" '("calc")))
+(register-definition-prefixes "calc-store" '("calc"))
;;;***
;;;### (autoloads nil "calc-stuff" "calc/calc-stuff.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-stuff.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-stuff" '("calc" "math-")))
+(register-definition-prefixes "calc-stuff" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-trail" "calc/calc-trail.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-trail.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-trail" '("calc-trail-")))
+(register-definition-prefixes "calc-trail" '("calc-trail-"))
;;;***
@@ -3527,21 +3544,21 @@ See Info node `(calc)Defining Functions'.
\(fn N)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-undo" '("calc-")))
+(register-definition-prefixes "calc-undo" '("calc-"))
;;;***
;;;### (autoloads nil "calc-units" "calc/calc-units.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-units.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-units" '("calc" "math-")))
+(register-definition-prefixes "calc-units" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calc-vec" "calc/calc-vec.el" (0 0 0 0))
;;; Generated autoloads from calc/calc-vec.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-vec" '("calc" "math-")))
+(register-definition-prefixes "calc-vec" '("calc" "math-"))
;;;***
@@ -3549,35 +3566,35 @@ See Info node `(calc)Defining Functions'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from calc/calc-yank.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calc-yank" '("calc-" "math-number-regexp")))
+(register-definition-prefixes "calc-yank" '("calc-" "math-number-regexp"))
;;;***
;;;### (autoloads nil "calcalg2" "calc/calcalg2.el" (0 0 0 0))
;;; Generated autoloads from calc/calcalg2.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calcalg2" '("calc" "math-" "var-IntegLimit")))
+(register-definition-prefixes "calcalg2" '("calc" "math-" "var-IntegLimit"))
;;;***
;;;### (autoloads nil "calcalg3" "calc/calcalg3.el" (0 0 0 0))
;;; Generated autoloads from calc/calcalg3.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calcalg3" '("calc" "math-")))
+(register-definition-prefixes "calcalg3" '("calc" "math-"))
;;;***
;;;### (autoloads nil "calccomp" "calc/calccomp.el" (0 0 0 0))
;;; Generated autoloads from calc/calccomp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calccomp" '("calcFunc-c" "math-")))
+(register-definition-prefixes "calccomp" '("calcFunc-c" "math-"))
;;;***
;;;### (autoloads nil "calcsel2" "calc/calcsel2.el" (0 0 0 0))
;;; Generated autoloads from calc/calcsel2.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calcsel2" '("calc-")))
+(register-definition-prefixes "calcsel2" '("calc-"))
;;;***
@@ -3588,7 +3605,7 @@ See Info node `(calc)Defining Functions'.
Run the Emacs calculator.
See the documentation for `calculator-mode' for more information." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calculator" '("calculator-")))
+(register-definition-prefixes "calculator" '("calculator-"))
;;;***
@@ -3632,7 +3649,7 @@ This function is suitable for execution in an init file.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "calendar" '("calendar-" "diary-" "holiday-buffer" "lunar-phases-buffer" "solar-sunrises-buffer")))
+(register-definition-prefixes "calendar" '("calendar-" "diary-" "holiday-buffer" "lunar-phases-buffer" "solar-sunrises-buffer"))
;;;***
@@ -3651,21 +3668,21 @@ it fails.
\(fn &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "canlock" '("canlock-")))
+(register-definition-prefixes "canlock" '("canlock-"))
;;;***
;;;### (autoloads nil "cc-align" "progmodes/cc-align.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-align.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-align" '("c-")))
+(register-definition-prefixes "cc-align" '("c-"))
;;;***
;;;### (autoloads nil "cc-awk" "progmodes/cc-awk.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-awk.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-awk" '("awk-" "c-awk-")))
+(register-definition-prefixes "cc-awk" '("awk-" "c-awk-"))
;;;***
@@ -3673,21 +3690,21 @@ it fails.
;;;;;; 0 0 0))
;;; Generated autoloads from progmodes/cc-bytecomp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-bytecomp" '("cc-")))
+(register-definition-prefixes "cc-bytecomp" '("cc-"))
;;;***
;;;### (autoloads nil "cc-cmds" "progmodes/cc-cmds.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-cmds.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-cmds" '("c-")))
+(register-definition-prefixes "cc-cmds" '("c-"))
;;;***
;;;### (autoloads nil "cc-defs" "progmodes/cc-defs.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-defs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-defs" '("c-" "cc-bytecomp-compiling-or-loading")))
+(register-definition-prefixes "cc-defs" '("c-" "cc-bytecomp-compiling-or-loading"))
;;;***
@@ -3698,14 +3715,14 @@ it fails.
(autoload 'c-guess-basic-syntax "cc-engine" "\
Return the syntactic context of the current line." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-engine" '("c-")))
+(register-definition-prefixes "cc-engine" '("c-"))
;;;***
;;;### (autoloads nil "cc-fonts" "progmodes/cc-fonts.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-fonts.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-fonts" '("autodoc-" "c++-font-lock-keywords" "c-" "doxygen-font-lock-" "gtkdoc-font-lock-" "idl-font-lock-keywords" "java" "objc-font-lock-keywords" "pike-font-lock-keywords")))
+(register-definition-prefixes "cc-fonts" '("autodoc-" "c++-font-lock-keywords" "c-" "doxygen-font-lock-" "gtkdoc-font-lock-" "idl-font-lock-keywords" "java" "objc-font-lock-keywords" "pike-font-lock-keywords"))
;;;***
@@ -3805,21 +3822,21 @@ the absolute file name of the file if STYLE-NAME is nil.
\(fn &optional STYLE-NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-guess" '("c-guess-")))
+(register-definition-prefixes "cc-guess" '("c-guess-"))
;;;***
;;;### (autoloads nil "cc-langs" "progmodes/cc-langs.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-langs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-langs" '("c-")))
+(register-definition-prefixes "cc-langs" '("c-"))
;;;***
;;;### (autoloads nil "cc-menus" "progmodes/cc-menus.el" (0 0 0 0))
;;; Generated autoloads from progmodes/cc-menus.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-menus" '("cc-imenu-")))
+(register-definition-prefixes "cc-menus" '("cc-imenu-"))
;;;***
@@ -3993,7 +4010,7 @@ Key bindings:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-mode" '("awk-mode-map" "c++-mode-" "c-" "idl-mode-" "java-mode-" "objc-mode-" "pike-mode-")))
+(register-definition-prefixes "cc-mode" '("awk-mode-map" "c++-mode-" "c-" "idl-mode-" "java-mode-" "objc-mode-" "pike-mode-"))
;;;***
@@ -4047,7 +4064,7 @@ and exists only for compatibility reasons.
\(fn SYMBOL OFFSET &optional IGNORED)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-styles" '("c-" "cc-choose-style-for-mode")))
+(register-definition-prefixes "cc-styles" '("c-" "cc-choose-style-for-mode"))
;;;***
@@ -4057,7 +4074,7 @@ and exists only for compatibility reasons.
(put 'c-backslash-column 'safe-local-variable 'integerp)
(put 'c-file-style 'safe-local-variable 'string-or-null-p)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cc-vars" '("awk-mode-hook" "c++-" "c-" "defcustom-c-stylevar" "idl-" "java-" "objc-" "pike-")))
+(register-definition-prefixes "cc-vars" '("awk-mode-hook" "c++-" "c-" "defcustom-c-stylevar" "idl-" "java-" "objc-" "pike-"))
;;;***
@@ -4352,7 +4369,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program.
\(fn CCL-PROG &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ccl" '("ccl-")))
+(register-definition-prefixes "ccl" '("ccl-"))
;;;***
@@ -4373,14 +4390,14 @@ Add the warnings that closure conversion would encounter.
\(fn FORM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cconv" '("cconv-")))
+(register-definition-prefixes "cconv" '("cconv-"))
;;;***
;;;### (autoloads nil "cdl" "cdl.el" (0 0 0 0))
;;; Generated autoloads from cdl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cdl" '("cdl-")))
+(register-definition-prefixes "cdl" '("cdl-"))
;;;***
@@ -4388,7 +4405,7 @@ Add the warnings that closure conversion would encounter.
;;; Generated autoloads from cedet/cedet.el
(push (purecopy '(cedet 2 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cedet" '("cedet-")))
+(register-definition-prefixes "cedet" '("cedet-"))
;;;***
@@ -4396,7 +4413,7 @@ Add the warnings that closure conversion would encounter.
;;;;;; 0 0))
;;; Generated autoloads from cedet/cedet-cscope.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cedet-cscope" '("cedet-cscope-")))
+(register-definition-prefixes "cedet-cscope" '("cedet-cscope-"))
;;;***
@@ -4404,7 +4421,7 @@ Add the warnings that closure conversion would encounter.
;;;;;; 0))
;;; Generated autoloads from cedet/cedet-files.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cedet-files" '("cedet-")))
+(register-definition-prefixes "cedet-files" '("cedet-"))
;;;***
@@ -4412,7 +4429,7 @@ Add the warnings that closure conversion would encounter.
;;;;;; 0 0))
;;; Generated autoloads from cedet/cedet-global.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cedet-global" '("cedet-g")))
+(register-definition-prefixes "cedet-global" '("cedet-g"))
;;;***
@@ -4420,7 +4437,7 @@ Add the warnings that closure conversion would encounter.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/cedet-idutils.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cedet-idutils" '("cedet-idutils-")))
+(register-definition-prefixes "cedet-idutils" '("cedet-idutils-"))
;;;***
@@ -4449,7 +4466,7 @@ to the action header.
(autoload 'cfengine-auto-mode "cfengine" "\
Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cfengine" '("cfengine")))
+(register-definition-prefixes "cfengine" '("cfengine"))
;;;***
@@ -4476,7 +4493,7 @@ from which to start.
\(fn STRING &optional LAX FROM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "char-fold" '("char-fold-")))
+(register-definition-prefixes "char-fold" '("char-fold-"))
;;;***
@@ -4484,7 +4501,7 @@ from which to start.
;;; Generated autoloads from emacs-lisp/chart.el
(push (purecopy '(chart 0 2)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "chart" '("chart")))
+(register-definition-prefixes "chart" '("chart"))
;;;***
@@ -4504,7 +4521,7 @@ Returns non-nil if any false statements are found.
\(fn ROOT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "check-declare" '("check-declare-")))
+(register-definition-prefixes "check-declare" '("check-declare-"))
;;;***
@@ -4680,6 +4697,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
In Checkdoc minor mode, the usual bindings for `eval-defun' which is
bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and `checkdoc-eval-current-buffer' are overridden to include
checking of documentation strings.
@@ -4691,7 +4711,7 @@ checking of documentation strings.
(autoload 'checkdoc-package-keywords "checkdoc" "\
Find package keywords that aren't in `finder-known-keywords'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "checkdoc" '("checkdoc-")))
+(register-definition-prefixes "checkdoc" '("checkdoc-"))
;;;***
@@ -4727,7 +4747,7 @@ Encode the text in the current buffer to HZ." t nil)
\(fn FROM TO)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "china-util" '("decode-hz-line-continuation" "hz-" "hz/zw-start-gb" "iso2022-" "zw-start-gb")))
+(register-definition-prefixes "china-util" '("decode-hz-line-continuation" "hz-" "hz/zw-start-gb" "iso2022-" "zw-start-gb"))
;;;***
@@ -4764,7 +4784,7 @@ and digits provide prefix arguments. Tab does not indent.
This command always recompiles the Command History listing
and runs the normal hook `command-history-hook'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "chistory" '("command-history-" "default-command-history-filter" "list-command-history-")))
+(register-definition-prefixes "chistory" '("command-history-" "default-command-history-filter" "list-command-history-"))
;;;***
@@ -4772,7 +4792,7 @@ and runs the normal hook `command-history-hook'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cl-extra.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-extra" '("cl-")))
+(register-definition-prefixes "cl-extra" '("cl-"))
;;;***
@@ -4798,9 +4818,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-font-lock" '("cl-font-lock-")))
+(register-definition-prefixes "cl-font-lock" '("cl-font-lock-"))
;;;***
@@ -4876,7 +4899,7 @@ The set of acceptable TYPEs (also called \"specializers\") is defined
\(fn GENERIC QUALIFIERS SPECIALIZERS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-generic" '("cl-")))
+(register-definition-prefixes "cl-generic" '("cl-"))
;;;***
@@ -4962,7 +4985,7 @@ instead.
\(fn INDENT-POINT STATE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-indent" '("common-lisp-" "lisp-")))
+(register-definition-prefixes "cl-indent" '("common-lisp-" "lisp-"))
;;;***
@@ -5010,9 +5033,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-lib" '("cl-")))
+(register-definition-prefixes "cl-lib" '("cl-"))
;;;***
@@ -5020,7 +5046,7 @@ ARG is `toggle'; disable the mode otherwise.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cl-macs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-macs" '("cl-")))
+(register-definition-prefixes "cl-macs" '("cl-"))
;;;***
@@ -5076,7 +5102,7 @@ limit.
\(fn PRINT-FUNCTION VALUE LIMIT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-print" '("cl-print-" "help-byte-code")))
+(register-definition-prefixes "cl-print" '("cl-print-" "help-byte-code"))
;;;***
@@ -5084,7 +5110,7 @@ limit.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/cl-seq.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cl-seq" '("cl--")))
+(register-definition-prefixes "cl-seq" '("cl--"))
;;;***
@@ -5106,7 +5132,7 @@ For use inside Lisp programs, see also `c-macro-expansion'.
\(fn START END SUBST)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cmacexp" '("c-macro-")))
+(register-definition-prefixes "cmacexp" '("c-macro-"))
;;;***
@@ -5128,7 +5154,7 @@ is run).
\(fn CMD)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cmuscheme" '("cmuscheme-load-hook" "inferior-scheme-" "scheme-" "switch-to-scheme")))
+(register-definition-prefixes "cmuscheme" '("cmuscheme-load-hook" "inferior-scheme-" "scheme-" "switch-to-scheme"))
;;;***
@@ -5149,7 +5175,7 @@ If FRAME cannot display COLOR, return nil.
\(fn COLOR &optional FRAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "color" '("color-")))
+(register-definition-prefixes "color" '("color-"))
;;;***
@@ -5257,7 +5283,7 @@ REGEXP-GROUP is the regular expression group in REGEXP to use.
\(fn PROCESS COMMAND REGEXP REGEXP-GROUP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "comint" '("comint-")))
+(register-definition-prefixes "comint" '("comint-"))
;;;***
@@ -5295,14 +5321,14 @@ on third call it again advances points to the next difference and so on.
\(fn IGNORE-WHITESPACE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "compare-w" '("compare-")))
+(register-definition-prefixes "compare-w" '("compare-"))
;;;***
;;;### (autoloads nil "compface" "image/compface.el" (0 0 0 0))
;;; Generated autoloads from image/compface.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "compface" '("uncompface")))
+(register-definition-prefixes "compface" '("uncompface"))
;;;***
@@ -5459,6 +5485,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Compilation Shell minor mode is enabled, all the
error-parsing commands of the Compilation major mode are
available but bound to keys that don't collide with Shell mode.
@@ -5474,6 +5503,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Compilation minor mode is enabled, all the error-parsing
commands of Compilation major mode are available. See
`compilation-mode'.
@@ -5486,7 +5518,7 @@ This is the value of `next-error-function' in Compilation buffers.
\(fn N &optional RESET)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "compile" '("compil" "define-compilation-mode" "kill-compilation" "recompile")))
+(register-definition-prefixes "compile" '("compil" "define-compilation-mode" "kill-compilation" "recompile"))
;;;***
@@ -5511,9 +5543,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "completion" '("*c-def-regexp*" "*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" "check-completion-length" "clear-all-completions" "cmpl-" "complet" "current-completion-source" "delete-completion" "enable-completion" "find-" "initialize-completions" "inside-locate-completion-entry" "interactive-completion-string-reader" "kill-" "list-all-completions" "load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" "reset-cdabbrev" "save" "set-c" "symbol-" "use-completion-")))
+(register-definition-prefixes "completion" '("*c-def-regexp*" "*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" "check-completion-length" "clear-all-completions" "cmpl-" "complet" "current-completion-source" "delete-completion" "enable-completion" "find-" "initialize-completions" "inside-locate-completion-entry" "interactive-completion-string-reader" "kill-" "list-all-completions" "load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" "reset-cdabbrev" "save" "set-c" "symbol-" "use-completion-"))
;;;***
@@ -5688,7 +5723,7 @@ For details see `conf-mode'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "conf-mode" '("conf-")))
+(register-definition-prefixes "conf-mode" '("conf-"))
;;;***
@@ -5718,7 +5753,7 @@ and subsequent calls on the same file won't go to disk.
\(fn PHRASE-FILE &optional STARTMSG ENDMSG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cookie1" '("cookie")))
+(register-definition-prefixes "cookie1" '("cookie"))
;;;***
@@ -5757,7 +5792,7 @@ If FIX is non-nil, run `copyright-fix-years' instead.
\(fn DIRECTORY MATCH &optional FIX)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "copyright" '("copyright-")))
+(register-definition-prefixes "copyright" '("copyright-"))
;;;***
@@ -5956,7 +5991,7 @@ Run `perldoc' on WORD.
(autoload 'cperl-perldoc-at-point "cperl-mode" "\
Run a `perldoc' on the word around point." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cperl-mode" '("cperl-" "pod2man-program")))
+(register-definition-prefixes "cperl-mode" '("cperl-" "pod2man-program"))
;;;***
@@ -5974,7 +6009,7 @@ A prefix arg suppresses display of that buffer.
(autoload 'cpp-parse-edit "cpp" "\
Edit display information for cpp conditionals." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cpp" '("cpp-")))
+(register-definition-prefixes "cpp" '("cpp-"))
;;;***
@@ -6002,7 +6037,7 @@ with empty strings removed.
\(fn PROMPT TABLE &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "crm" '("crm-")))
+(register-definition-prefixes "crm" '("crm-"))
;;;***
@@ -6047,7 +6082,7 @@ on what is seen near point.
\(fn SYMBOL)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "css-mode" '("css-" "scss-")))
+(register-definition-prefixes "css-mode" '("css-" "scss-"))
;;;***
@@ -6072,6 +6107,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
CUA mode is a global minor mode. When enabled, typed text
replaces the active selection, and you can use C-z, C-x, C-c, and
C-v to undo, cut, copy, and paste in addition to the normal Emacs
@@ -6097,14 +6135,14 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cua-base" '("cua-")))
+(register-definition-prefixes "cua-base" '("cua-"))
;;;***
;;;### (autoloads nil "cua-gmrk" "emulation/cua-gmrk.el" (0 0 0 0))
;;; Generated autoloads from emulation/cua-gmrk.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cua-gmrk" '("cua-")))
+(register-definition-prefixes "cua-gmrk" '("cua-"))
;;;***
@@ -6120,9 +6158,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cua-rect" '("cua-")))
+(register-definition-prefixes "cua-rect" '("cua-"))
;;;***
@@ -6143,6 +6184,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'cursor-sensor-mode "cursor-sensor" "\
@@ -6158,16 +6202,19 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cursor-sensor" '("cursor-sensor-")))
+(register-definition-prefixes "cursor-sensor" '("cursor-sensor-"))
;;;***
;;;### (autoloads nil "cus-dep" "cus-dep.el" (0 0 0 0))
;;; Generated autoloads from cus-dep.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cus-dep" '("custom-" "generated-custom-dependencies-file")))
+(register-definition-prefixes "cus-dep" '("custom-" "generated-custom-dependencies-file"))
;;;***
@@ -6476,7 +6523,7 @@ The format is suitable for use with `easy-menu-define'.
\(fn SYMBOL &optional NAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cus-edit" '("Custom-" "custom" "widget-")))
+(register-definition-prefixes "cus-edit" '("Custom-" "custom" "widget-"))
;;;***
@@ -6511,7 +6558,7 @@ omitted, a buffer named *Custom Themes* is used.
\(fn &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cus-theme" '("custom-" "describe-theme-1")))
+(register-definition-prefixes "cus-theme" '("custom-" "describe-theme-1"))
;;;***
@@ -6523,7 +6570,7 @@ Mode used for cvs status output.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cvs-status" '("cvs-")))
+(register-definition-prefixes "cvs-status" '("cvs-"))
;;;***
@@ -6538,6 +6585,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Suspicious constructs are highlighted using `font-lock-warning-face'.
Note, in addition to enabling this minor mode, the major mode must
@@ -6572,7 +6622,7 @@ See `cwarn-mode' for more information on Cwarn mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cwarn" '("cwarn-" "turn-on-cwarn-mode-if-enabled")))
+(register-definition-prefixes "cwarn" '("cwarn-" "turn-on-cwarn-mode-if-enabled"))
;;;***
@@ -6591,7 +6641,7 @@ Return ALTERNATIVNYJ external character code of CHAR if appropriate.
\(fn CHAR)" nil nil)
(autoload 'standard-display-cyrillic-translit "cyril-util" "\
-Display a cyrillic buffer using a transliteration.
+Display a Cyrillic buffer using a transliteration.
For readability, the table is slightly
different from the one used for the input method `cyrillic-translit'.
@@ -6603,7 +6653,7 @@ If the argument is nil, we return the display table to its standard state.
\(fn &optional CYRILLIC-LANGUAGE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "cyril-util" '("cyrillic-language-alist")))
+(register-definition-prefixes "cyril-util" '("cyrillic-language-alist"))
;;;***
@@ -6654,7 +6704,7 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion].
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dabbrev" '("dabbrev-")))
+(register-definition-prefixes "dabbrev" '("dabbrev-"))
;;;***
@@ -6666,7 +6716,7 @@ Create a new data-debug buffer with NAME.
\(fn NAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "data-debug" '("data-debug-")))
+(register-definition-prefixes "data-debug" '("data-debug-"))
;;;***
@@ -6681,7 +6731,7 @@ If the HANDLER returns a `dbus-error', it is propagated as return message.
\(fn EVENT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dbus" '("dbus-")))
+(register-definition-prefixes "dbus" '("dbus-"))
;;;***
@@ -6809,7 +6859,7 @@ There is some minimal font-lock support (see vars
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dcl-mode" '("dcl-")))
+(register-definition-prefixes "dcl-mode" '("dcl-"))
;;;***
@@ -6889,7 +6939,7 @@ To specify a nil argument interactively, exit with an empty minibuffer.
(defalias 'cancel-debug-watch #'cancel-debug-on-variable-change)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "debug" '("debug" "inhibit-debug-on-entry")))
+(register-definition-prefixes "debug" '("debug" "inhibit-debug-on-entry"))
;;;***
@@ -6915,7 +6965,7 @@ The most useful commands are:
\\[decipher-make-checkpoint] Save the current cipher alphabet (checkpoint)
\\[decipher-restore-checkpoint] Restore a saved cipher alphabet (checkpoint)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "decipher" '("decipher-")))
+(register-definition-prefixes "decipher" '("decipher-"))
;;;***
@@ -6960,7 +7010,7 @@ START and END delimit the corners of the text rectangle.
\(fn START END)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "delim-col" '("delimit-columns-")))
+(register-definition-prefixes "delim-col" '("delimit-columns-"))
;;;***
@@ -6987,6 +7037,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Delete Selection mode is enabled, typed text replaces the selection
if the selection is active. Otherwise, typed text is just inserted at
point regardless of any selection.
@@ -6996,7 +7049,7 @@ information on adapting behavior of commands in Delete Selection mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "delsel" '("del" "minibuffer-keyboard-quit")))
+(register-definition-prefixes "delsel" '("del" "minibuffer-keyboard-quit"))
;;;***
@@ -7071,7 +7124,7 @@ the first time the mode is used.
\(fn MODE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "derived" '("derived-mode-")))
+(register-definition-prefixes "derived" '("derived-mode-"))
;;;***
@@ -7131,7 +7184,7 @@ This function can be used as a value of
\(fn CALLBACK &rest _)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "descr-text" '("describe-")))
+(register-definition-prefixes "descr-text" '("describe-"))
;;;***
@@ -7156,6 +7209,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Desktop Save mode is enabled, the state of Emacs is saved from
one session to another. In particular, Emacs will save the desktop when
it exits (this may prompt you; see the option `desktop-save'). The next
@@ -7311,7 +7367,7 @@ file.
To upgrade a version 206 file to version 208, call this command
explicitly with a prefix argument: \\[universal-argument] \\[desktop-save].
-If you are upgrading from Emacs 24 or older, we recommed to do
+If you are upgrading from Emacs 24 or older, we recommend to do
this once you decide you no longer need compatibility with versions
of Emacs before 25.1.
@@ -7357,7 +7413,7 @@ Save the desktop in directory `desktop-dirname'." t nil)
(autoload 'desktop-revert "desktop" "\
Revert to the last loaded desktop." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "desktop" '("desktop-")))
+(register-definition-prefixes "desktop" '("desktop-"))
;;;***
@@ -7390,14 +7446,14 @@ article buffer.
(autoload 'gnus-article-outlook-deuglify-article "deuglify" "\
Deuglify broken Outlook (Express) articles and redisplay." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "deuglify" '("gnus-")))
+(register-definition-prefixes "deuglify" '("gnus-"))
;;;***
;;;### (autoloads nil "dframe" "dframe.el" (0 0 0 0))
;;; Generated autoloads from dframe.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dframe" '("dframe-")))
+(register-definition-prefixes "dframe" '("dframe-"))
;;;***
@@ -7442,7 +7498,7 @@ Major mode for editing the diary file.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "diary-lib" '("calendar-mark-" "diary-")))
+(register-definition-prefixes "diary-lib" '("calendar-mark-" "diary-"))
;;;***
@@ -7517,7 +7573,7 @@ OLD and NEW may each be a buffer or a buffer name.
\(fn OLD NEW &optional SWITCHES NO-ASYNC)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "diff" '("diff-")))
+(register-definition-prefixes "diff" '("diff-"))
;;;***
@@ -7549,11 +7605,14 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\{diff-minor-mode-map}
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "diff-mode" '("diff-")))
+(register-definition-prefixes "diff-mode" '("diff-"))
;;;***
@@ -7566,7 +7625,7 @@ Optional arguments are passed to `dig-invoke'.
\(fn DOMAIN &optional QUERY-TYPE QUERY-CLASS QUERY-OPTION DIG-OPTION SERVER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dig" '("dig-" "query-dig")))
+(register-definition-prefixes "dig" '("dig-" "query-dig"))
;;;***
@@ -7703,7 +7762,7 @@ Keybindings:
\(fn &optional DIRNAME SWITCHES)" nil nil)
(put 'dired-find-alternate-file 'disabled t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dired" '("dired-")))
+(register-definition-prefixes "dired" '("dired-"))
;;;***
@@ -7711,7 +7770,7 @@ Keybindings:
;;;;;; (0 0 0 0))
;;; Generated autoloads from dired-aux.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dired-aux" '("dired-" "minibuffer-default-add-dired-shell-commands")))
+(register-definition-prefixes "dired-aux" '("dired-" "minibuffer-default-add-dired-shell-commands"))
;;;***
@@ -7719,7 +7778,7 @@ Keybindings:
;;;;;; (0 0 0 0))
;;; Generated autoloads from dired-x.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dired-x" '("dired-" "virtual-dired")))
+(register-definition-prefixes "dired-x" '("dired-" "virtual-dired"))
;;;***
@@ -7734,6 +7793,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
This method requires that your shell prompt contain the current
working directory at all times, and that you set the variable
`dirtrack-list' to match the prompt.
@@ -7753,7 +7815,7 @@ from `default-directory'.
\(fn INPUT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dirtrack" '("dirtrack-")))
+(register-definition-prefixes "dirtrack" '("dirtrack-"))
;;;***
@@ -7769,7 +7831,7 @@ redefine OBJECT if it is a symbol.
\(fn OBJECT &optional BUFFER INDENT INTERACTIVE-P)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "disass" '("disassemble-")))
+(register-definition-prefixes "disass" '("disassemble-"))
;;;***
@@ -7888,7 +7950,7 @@ in `.emacs'.
\(fn ARG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "disp-table" '("display-table-print-array")))
+(register-definition-prefixes "disp-table" '("display-table-print-array"))
;;;***
@@ -7905,6 +7967,9 @@ ARG is positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and toggle
it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
To change the position of the column displayed by default
customize `display-fill-column-indicator-column'. You can change the
character for the indicator setting `display-fill-column-indicator-character'.
@@ -7936,7 +8001,7 @@ See `display-fill-column-indicator-mode' for more information on Display-Fill-Co
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "display-fill-column-indicator" '("display-fill-column-indicator--turn-on")))
+(register-definition-prefixes "display-fill-column-indicator" '("display-fill-column-indicator--turn-on"))
;;;***
@@ -7953,6 +8018,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
To change the type of line numbers displayed by default,
customize `display-line-numbers-type'. To change the type while
the mode is on, set `display-line-numbers' directly.
@@ -7983,7 +8051,7 @@ See `display-line-numbers-mode' for more information on Display-Line-Numbers mod
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "display-line-numbers" '("display-line-numbers-")))
+(register-definition-prefixes "display-line-numbers" '("display-line-numbers-"))
;;;***
@@ -8021,14 +8089,14 @@ if some action was made, or nil if the URL is ignored.")
(custom-autoload 'dnd-protocol-alist "dnd" t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dnd" '("dnd-")))
+(register-definition-prefixes "dnd" '("dnd-"))
;;;***
;;;### (autoloads nil "dns" "net/dns.el" (0 0 0 0))
;;; Generated autoloads from net/dns.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dns" '("dns-")))
+(register-definition-prefixes "dns" '("dns-"))
;;;***
@@ -8051,7 +8119,7 @@ Turning on DNS mode runs `dns-mode-hook'.
(autoload 'dns-mode-soa-increment-serial "dns-mode" "\
Locate SOA record and increment the serial field." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dns-mode" '("dns-mode-")))
+(register-definition-prefixes "dns-mode" '("dns-mode-"))
;;;***
@@ -8088,6 +8156,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
See the command `doc-view-mode' for more information on this mode.
\(fn &optional ARG)" t nil)
@@ -8097,7 +8168,7 @@ See the command `doc-view-mode' for more information on this mode.
\(fn BMK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "doc-view" '("doc-view-")))
+(register-definition-prefixes "doc-view" '("doc-view-"))
;;;***
@@ -8107,35 +8178,35 @@ See the command `doc-view-mode' for more information on this mode.
(autoload 'doctor "doctor" "\
Switch to *doctor* buffer and start giving psychotherapy." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "doctor" '("doc" "make-doctor-variables")))
+(register-definition-prefixes "doctor" '("doc" "make-doctor-variables"))
;;;***
;;;### (autoloads nil "dom" "dom.el" (0 0 0 0))
;;; Generated autoloads from dom.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dom" '("dom-")))
+(register-definition-prefixes "dom" '("dom-"))
;;;***
;;;### (autoloads nil "dos-fns" "dos-fns.el" (0 0 0 0))
;;; Generated autoloads from dos-fns.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dos-fns" '("dos")))
+(register-definition-prefixes "dos-fns" '("dos"))
;;;***
;;;### (autoloads nil "dos-vars" "dos-vars.el" (0 0 0 0))
;;; Generated autoloads from dos-vars.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dos-vars" '("dos-codepage-setup-hook" "msdos-shells")))
+(register-definition-prefixes "dos-vars" '("dos-codepage-setup-hook" "msdos-shells"))
;;;***
;;;### (autoloads nil "dos-w32" "dos-w32.el" (0 0 0 0))
;;; Generated autoloads from dos-w32.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dos-w32" '("file-name-buffer-file-type-alist" "find-" "w32-")))
+(register-definition-prefixes "dos-w32" '("file-name-buffer-file-type-alist" "find-" "w32-"))
;;;***
@@ -8150,12 +8221,15 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Double mode is enabled, some keys will insert different
strings when pressed twice. See `double-map' for details.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "double" '("double-")))
+(register-definition-prefixes "double" '("double-"))
;;;***
@@ -8166,7 +8240,7 @@ strings when pressed twice. See `double-map' for details.
(autoload 'dunnet "dunnet" "\
Switch to *dungeon* buffer and start game." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dunnet" '("dun" "obj-special")))
+(register-definition-prefixes "dunnet" '("dun" "obj-special"))
;;;***
@@ -8174,7 +8248,7 @@ Switch to *dungeon* buffer and start game." t nil)
;;;;;; 0 0))
;;; Generated autoloads from dynamic-setting.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dynamic-setting" '("dynamic-setting-handle-config-changed-event" "font-setting-change-default-font")))
+(register-definition-prefixes "dynamic-setting" '("dynamic-setting-handle-config-changed-event" "font-setting-change-default-font"))
;;;***
@@ -8329,7 +8403,7 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
(function-put 'easy-mmode-defsyntax 'lisp-indent-function '1)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "easy-mmode" '("easy-mmode-")))
+(register-definition-prefixes "easy-mmode" '("easy-mmode-"))
;;;***
@@ -8481,56 +8555,56 @@ To implement dynamic menus, either call this from
\(fn PATH NAME ITEMS &optional BEFORE MAP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "easymenu" '("add-submenu" "easy-menu-")))
+(register-definition-prefixes "easymenu" '("add-submenu" "easy-menu-"))
;;;***
;;;### (autoloads nil "ebnf-abn" "progmodes/ebnf-abn.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-abn.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-abn" '("ebnf-abn-")))
+(register-definition-prefixes "ebnf-abn" '("ebnf-abn-"))
;;;***
;;;### (autoloads nil "ebnf-bnf" "progmodes/ebnf-bnf.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-bnf.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-bnf" '("ebnf-")))
+(register-definition-prefixes "ebnf-bnf" '("ebnf-"))
;;;***
;;;### (autoloads nil "ebnf-dtd" "progmodes/ebnf-dtd.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-dtd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-dtd" '("ebnf-dtd-")))
+(register-definition-prefixes "ebnf-dtd" '("ebnf-dtd-"))
;;;***
;;;### (autoloads nil "ebnf-ebx" "progmodes/ebnf-ebx.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-ebx.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-ebx" '("ebnf-ebx-")))
+(register-definition-prefixes "ebnf-ebx" '("ebnf-ebx-"))
;;;***
;;;### (autoloads nil "ebnf-iso" "progmodes/ebnf-iso.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-iso.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-iso" '("ebnf-")))
+(register-definition-prefixes "ebnf-iso" '("ebnf-"))
;;;***
;;;### (autoloads nil "ebnf-otz" "progmodes/ebnf-otz.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-otz.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-otz" '("ebnf-")))
+(register-definition-prefixes "ebnf-otz" '("ebnf-"))
;;;***
;;;### (autoloads nil "ebnf-yac" "progmodes/ebnf-yac.el" (0 0 0 0))
;;; Generated autoloads from progmodes/ebnf-yac.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf-yac" '("ebnf-yac-")))
+(register-definition-prefixes "ebnf-yac" '("ebnf-yac-"))
;;;***
@@ -8785,7 +8859,7 @@ See also `ebnf-push-style'.
See `ebnf-style-database' documentation." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebnf2ps" '("ebnf-")))
+(register-definition-prefixes "ebnf2ps" '("ebnf-"))
;;;***
@@ -8907,7 +8981,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in.
(autoload 'ebrowse-statistics "ebrowse" "\
Display statistics for a class tree." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebrowse" '("ebrowse-" "electric-buffer-menu-mode-hook")))
+(register-definition-prefixes "ebrowse" '("ebrowse-" "electric-buffer-menu-mode-hook"))
;;;***
@@ -8942,7 +9016,7 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ebuff-menu" '("Electric-buffer-menu-" "electric-buffer-")))
+(register-definition-prefixes "ebuff-menu" '("Electric-buffer-menu-" "electric-buffer-"))
;;;***
@@ -8955,7 +9029,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing.
\(fn &optional NOCONFIRM)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "echistory" '("Electric-history-" "electric-")))
+(register-definition-prefixes "echistory" '("Electric-history-" "electric-"))
;;;***
@@ -8965,7 +9039,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing.
(autoload 'ecomplete-setup "ecomplete" "\
Read the .ecompleterc file." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ecomplete" '("ecomplete-")))
+(register-definition-prefixes "ecomplete" '("ecomplete-"))
;;;***
@@ -8991,19 +9065,22 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
This global minor mode enables `ede-minor-mode' in all buffers in
an EDE controlled project.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede" '("ede" "global-ede-mode-map" "project-try-ede")))
+(register-definition-prefixes "ede" '("ede" "global-ede-mode-map" "project-try-ede"))
;;;***
;;;### (autoloads nil "ede/auto" "cedet/ede/auto.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/auto.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/auto" '("ede-")))
+(register-definition-prefixes "ede/auto" '("ede-"))
;;;***
@@ -9011,7 +9088,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/autoconf-edit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/autoconf-edit" '("autoconf-")))
+(register-definition-prefixes "ede/autoconf-edit" '("autoconf-"))
;;;***
@@ -9019,7 +9096,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/base.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/base" '("ede-")))
+(register-definition-prefixes "ede/base" '("ede-"))
;;;***
@@ -9027,7 +9104,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/config.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/config" '("ede-")))
+(register-definition-prefixes "ede/config" '("ede-"))
;;;***
@@ -9035,7 +9112,7 @@ an EDE controlled project.
;;;;;; "cedet/ede/cpp-root.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/cpp-root.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/cpp-root" '("ede-cpp-root-")))
+(register-definition-prefixes "ede/cpp-root" '("ede-cpp-root-"))
;;;***
@@ -9043,14 +9120,14 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/custom.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/custom" '("ede-" "eieio-ede-old-variables")))
+(register-definition-prefixes "ede/custom" '("ede-" "eieio-ede-old-variables"))
;;;***
;;;### (autoloads nil "ede/detect" "cedet/ede/detect.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/detect.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/detect" '("ede-")))
+(register-definition-prefixes "ede/detect" '("ede-"))
;;;***
@@ -9058,7 +9135,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/dired.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/dired" '("ede-dired-")))
+(register-definition-prefixes "ede/dired" '("ede-dired-"))
;;;***
@@ -9066,7 +9143,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/emacs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/emacs" '("ede-emacs-")))
+(register-definition-prefixes "ede/emacs" '("ede-emacs-"))
;;;***
@@ -9074,7 +9151,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/files.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/files" '("ede-")))
+(register-definition-prefixes "ede/files" '("ede-"))
;;;***
@@ -9082,7 +9159,7 @@ an EDE controlled project.
;;;;;; "cedet/ede/generic.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/generic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/generic" '("ede-generic-")))
+(register-definition-prefixes "ede/generic" '("ede-generic-"))
;;;***
@@ -9090,7 +9167,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/linux.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/linux" '("ede-linux-" "project-linux-")))
+(register-definition-prefixes "ede/linux" '("ede-linux-" "project-linux-"))
;;;***
@@ -9098,7 +9175,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/locate.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/locate" '("ede-locate-")))
+(register-definition-prefixes "ede/locate" '("ede-locate-"))
;;;***
@@ -9106,7 +9183,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/make.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/make" '("ede-make-")))
+(register-definition-prefixes "ede/make" '("ede-"))
;;;***
@@ -9114,28 +9191,28 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/makefile-edit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/makefile-edit" '("makefile-")))
+(register-definition-prefixes "ede/makefile-edit" '("makefile-"))
;;;***
;;;### (autoloads nil "ede/pconf" "cedet/ede/pconf.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/pconf.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/pconf" '("ede-pconf-create-file-query")))
+(register-definition-prefixes "ede/pconf" '("ede-pconf-create-file-query"))
;;;***
;;;### (autoloads nil "ede/pmake" "cedet/ede/pmake.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/pmake.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/pmake" '("ede-pmake-")))
+(register-definition-prefixes "ede/pmake" '("ede-pmake-"))
;;;***
;;;### (autoloads nil "ede/proj" "cedet/ede/proj.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/proj.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj" '("ede-proj-")))
+(register-definition-prefixes "ede/proj" '("ede-proj-"))
;;;***
@@ -9143,7 +9220,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/proj-archive.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-archive" '("ede-")))
+(register-definition-prefixes "ede/proj-archive" '("ede-"))
;;;***
@@ -9151,7 +9228,7 @@ an EDE controlled project.
;;;;;; 0 0))
;;; Generated autoloads from cedet/ede/proj-aux.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-aux" '("ede-")))
+(register-definition-prefixes "ede/proj-aux" '("ede-"))
;;;***
@@ -9159,7 +9236,7 @@ an EDE controlled project.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/ede/proj-comp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-comp" '("ede-" "proj-comp-insert-variable-once")))
+(register-definition-prefixes "ede/proj-comp" '("ede-" "proj-comp-insert-variable-once"))
;;;***
@@ -9167,7 +9244,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/proj-elisp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-elisp" '("ede-")))
+(register-definition-prefixes "ede/proj-elisp" '("ede-"))
;;;***
@@ -9175,7 +9252,7 @@ an EDE controlled project.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/ede/proj-info.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-info" '("ede-")))
+(register-definition-prefixes "ede/proj-info" '("ede-"))
;;;***
@@ -9183,7 +9260,7 @@ an EDE controlled project.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/ede/proj-misc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-misc" '("ede-")))
+(register-definition-prefixes "ede/proj-misc" '("ede-"))
;;;***
@@ -9191,7 +9268,7 @@ an EDE controlled project.
;;;;;; 0 0))
;;; Generated autoloads from cedet/ede/proj-obj.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-obj" '("ede-")))
+(register-definition-prefixes "ede/proj-obj" '("ede-"))
;;;***
@@ -9199,7 +9276,7 @@ an EDE controlled project.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/ede/proj-prog.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-prog" '("ede-proj-target-makefile-program")))
+(register-definition-prefixes "ede/proj-prog" '("ede-proj-target-makefile-program"))
;;;***
@@ -9207,7 +9284,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/proj-scheme.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-scheme" '("ede-proj-target-scheme")))
+(register-definition-prefixes "ede/proj-scheme" '("ede-proj-target-scheme"))
;;;***
@@ -9215,7 +9292,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/proj-shared.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/proj-shared" '("ede-")))
+(register-definition-prefixes "ede/proj-shared" '("ede-"))
;;;***
@@ -9223,7 +9300,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/project-am.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/project-am" '("project-am-")))
+(register-definition-prefixes "ede/project-am" '("project-am-"))
;;;***
@@ -9231,21 +9308,21 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/shell.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/shell" '("ede-shell-run-command")))
+(register-definition-prefixes "ede/shell" '("ede-shell-run-command"))
;;;***
;;;### (autoloads nil "ede/simple" "cedet/ede/simple.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/simple.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/simple" '("ede-simple-")))
+(register-definition-prefixes "ede/simple" '("ede-simple-"))
;;;***
;;;### (autoloads nil "ede/source" "cedet/ede/source.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/source.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/source" '("ede-source")))
+(register-definition-prefixes "ede/source" '("ede-source"))
;;;***
@@ -9253,7 +9330,7 @@ an EDE controlled project.
;;;;;; "cedet/ede/speedbar.el" (0 0 0 0))
;;; Generated autoloads from cedet/ede/speedbar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/speedbar" '("ede-")))
+(register-definition-prefixes "ede/speedbar" '("ede-"))
;;;***
@@ -9261,7 +9338,7 @@ an EDE controlled project.
;;;;;; 0))
;;; Generated autoloads from cedet/ede/srecode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/srecode" '("ede-srecode-")))
+(register-definition-prefixes "ede/srecode" '("ede-srecode-"))
;;;***
@@ -9269,7 +9346,7 @@ an EDE controlled project.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/ede/util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ede/util" '("ede-make-buffer-writable")))
+(register-definition-prefixes "ede/util" '("ede-make-buffer-writable"))
;;;***
@@ -9329,7 +9406,7 @@ Toggle edebugging of all definitions." t nil)
(autoload 'edebug-all-forms "edebug" "\
Toggle edebugging of all forms." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edebug" '("cancel-edebug-on-entry" "edebug" "get-edebug-spec" "global-edebug-")))
+(register-definition-prefixes "edebug" '("cancel-edebug-on-entry" "edebug" "get-edebug-spec" "global-edebug-"))
;;;***
@@ -9652,14 +9729,14 @@ Call `ediff-merge-directories' with the next three command line arguments." nil
(autoload 'ediff-merge-directories-with-ancestor-command "ediff" "\
Call `ediff-merge-directories-with-ancestor' with the next four command line arguments." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff" '("ediff-")))
+(register-definition-prefixes "ediff" '("ediff-"))
;;;***
;;;### (autoloads nil "ediff-diff" "vc/ediff-diff.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-diff.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-diff" '("ediff-")))
+(register-definition-prefixes "ediff-diff" '("ediff-"))
;;;***
@@ -9668,21 +9745,21 @@ Call `ediff-merge-directories-with-ancestor' with the next four command line arg
(autoload 'ediff-customize "ediff-help" nil t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-help" '("ediff-")))
+(register-definition-prefixes "ediff-help" '("ediff-"))
;;;***
;;;### (autoloads nil "ediff-init" "vc/ediff-init.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-init.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-init" '("ediff-" "stipple-pixmap")))
+(register-definition-prefixes "ediff-init" '("ediff-" "stipple-pixmap"))
;;;***
;;;### (autoloads nil "ediff-merg" "vc/ediff-merg.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-merg.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-merg" '("ediff-")))
+(register-definition-prefixes "ediff-merg" '("ediff-"))
;;;***
@@ -9694,14 +9771,14 @@ Display Ediff's registry." t nil)
(defalias 'eregistry 'ediff-show-registry)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-mult" '("ediff-")))
+(register-definition-prefixes "ediff-mult" '("ediff-"))
;;;***
;;;### (autoloads nil "ediff-ptch" "vc/ediff-ptch.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-ptch.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-ptch" '("ediff-")))
+(register-definition-prefixes "ediff-ptch" '("ediff-"))
;;;***
@@ -9718,21 +9795,21 @@ Enable or disable Ediff toolbar.
Works only in versions of Emacs that support toolbars.
To change the default, set the variable `ediff-use-toolbar-p', which see." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-util" '("ediff-")))
+(register-definition-prefixes "ediff-util" '("ediff-"))
;;;***
;;;### (autoloads nil "ediff-vers" "vc/ediff-vers.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-vers.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-vers" '("ediff-" "rcs-ediff-view-revision")))
+(register-definition-prefixes "ediff-vers" '("ediff-" "rcs-ediff-view-revision"))
;;;***
;;;### (autoloads nil "ediff-wind" "vc/ediff-wind.el" (0 0 0 0))
;;; Generated autoloads from vc/ediff-wind.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ediff-wind" '("ediff-")))
+(register-definition-prefixes "ediff-wind" '("ediff-"))
;;;***
@@ -9784,7 +9861,7 @@ or nil, use a compact 80-column format.
\(fn &optional MACRO VERBOSE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edmacro" '("edmacro-")))
+(register-definition-prefixes "edmacro" '("edmacro-"))
;;;***
@@ -9801,7 +9878,7 @@ Argument BOTTOM is the bottom margin in number of lines or percent of window.
(autoload 'edt-emulation-on "edt" "\
Turn on EDT Emulation." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt" '("edt-")))
+(register-definition-prefixes "edt" '("edt-"))
;;;***
@@ -9809,7 +9886,7 @@ Turn on EDT Emulation." t nil)
;;;;;; 0))
;;; Generated autoloads from emulation/edt-lk201.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt-lk201" '("*EDT-keys*")))
+(register-definition-prefixes "edt-lk201" '("*EDT-keys*"))
;;;***
@@ -9817,14 +9894,14 @@ Turn on EDT Emulation." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/edt-mapper.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt-mapper" '("edt-")))
+(register-definition-prefixes "edt-mapper" '("edt-"))
;;;***
;;;### (autoloads nil "edt-pc" "emulation/edt-pc.el" (0 0 0 0))
;;; Generated autoloads from emulation/edt-pc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt-pc" '("*EDT-keys*")))
+(register-definition-prefixes "edt-pc" '("*EDT-keys*"))
;;;***
@@ -9832,7 +9909,7 @@ Turn on EDT Emulation." t nil)
;;;;;; 0))
;;; Generated autoloads from emulation/edt-vt100.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edt-vt100" '("edt-set-term-width-")))
+(register-definition-prefixes "edt-vt100" '("edt-set-term-width-"))
;;;***
@@ -9870,7 +9947,7 @@ BUFFER is put back into its original major mode.
\(fn FUN &optional NAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ehelp" '("ehelp-" "electric-")))
+(register-definition-prefixes "ehelp" '("ehelp-" "electric-"))
;;;***
@@ -9878,7 +9955,7 @@ BUFFER is put back into its original major mode.
;;; Generated autoloads from emacs-lisp/eieio.el
(push (purecopy '(eieio 1 4)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio" '("child-of-class-p" "defclass" "eieio-" "find-class" "obj" "oref" "oset" "same-class-p" "set-slot-value" "slot-" "with-slots")))
+(register-definition-prefixes "eieio" '("child-of-class-p" "defclass" "eieio-" "find-class" "obj" "oref" "oset" "same-class-p" "set-slot-value" "slot-" "with-slots"))
;;;***
@@ -9886,7 +9963,7 @@ BUFFER is put back into its original major mode.
;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-base.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-base" '("eieio-")))
+(register-definition-prefixes "eieio-base" '("eieio-"))
;;;***
@@ -9894,7 +9971,7 @@ BUFFER is put back into its original major mode.
;;;;;; "emacs-lisp/eieio-compat.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-compat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-compat" '("eieio--generic-static-symbol-specializers" "generic-p" "next-method-p" "no-")))
+(register-definition-prefixes "eieio-compat" '("eieio--generic-static-symbol-specializers" "generic-p" "next-method-p" "no-"))
;;;***
@@ -9913,7 +9990,7 @@ It creates an autoload function for CNAME's constructor.
\(fn CNAME SUPERCLASSES FILENAME DOC)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-core" '("class-" "eieio-" "inconsistent-class-hierarchy" "invalid-slot-" "unbound-slot")))
+(register-definition-prefixes "eieio-core" '("class-" "eieio-" "inconsistent-class-hierarchy" "invalid-slot-" "unbound-slot"))
;;;***
@@ -9921,7 +9998,7 @@ It creates an autoload function for CNAME's constructor.
;;;;;; "emacs-lisp/eieio-custom.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-custom.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-custom" '("eieio-")))
+(register-definition-prefixes "eieio-custom" '("eieio-"))
;;;***
@@ -9929,7 +10006,7 @@ It creates an autoload function for CNAME's constructor.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-datadebug.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-datadebug" '("data-debug-insert-object-")))
+(register-definition-prefixes "eieio-datadebug" '("data-debug-insert-object-"))
;;;***
@@ -9937,7 +10014,7 @@ It creates an autoload function for CNAME's constructor.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-opt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-opt" '("eieio-")))
+(register-definition-prefixes "eieio-opt" '("eieio-"))
;;;***
@@ -9945,13 +10022,13 @@ It creates an autoload function for CNAME's constructor.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eieio-speedbar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eieio-speedbar" '("eieio-speedbar")))
+(register-definition-prefixes "eieio-speedbar" '("eieio-speedbar"))
;;;***
;;;### (autoloads nil "eldoc" "emacs-lisp/eldoc.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/eldoc.el
-(push (purecopy '(eldoc 1 8 0)) package--builtin-versions)
+(push (purecopy '(eldoc 1 9 0)) package--builtin-versions)
;;;***
@@ -9976,6 +10053,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Electric Pair mode is a global minor mode. When enabled, typing
an open parenthesis automatically inserts the corresponding
closing parenthesis, and vice versa. (Likewise for brackets, etc.).
@@ -9994,9 +10074,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elec-pair" '("electric-pair-")))
+(register-definition-prefixes "elec-pair" '("electric-pair-"))
;;;***
@@ -10013,7 +10096,7 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elide-head" '("elide-head-")))
+(register-definition-prefixes "elide-head" '("elide-head-"))
;;;***
@@ -10046,7 +10129,7 @@ optional prefix argument REINIT is non-nil.
\(fn &optional REINIT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elint" '("elint-")))
+(register-definition-prefixes "elint" '("elint-"))
;;;***
@@ -10081,7 +10164,7 @@ If `elp-reset-after-results' is non-nil, then current profiling
information for all instrumented functions is reset after results are
displayed." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elp" '("elp-")))
+(register-definition-prefixes "elp" '("elp-"))
;;;***
@@ -10089,7 +10172,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-alias.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-alias" '("eshell" "pcomplete/eshell-mode/alias")))
+(register-definition-prefixes "em-alias" '("eshell" "pcomplete/eshell-mode/alias"))
;;;***
@@ -10097,7 +10180,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-banner.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-banner" '("eshell-banner-")))
+(register-definition-prefixes "em-banner" '("eshell-banner-"))
;;;***
@@ -10105,7 +10188,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-basic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-basic" '("eshell")))
+(register-definition-prefixes "em-basic" '("eshell"))
;;;***
@@ -10113,7 +10196,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-cmpl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-cmpl" '("eshell-")))
+(register-definition-prefixes "em-cmpl" '("eshell-"))
;;;***
@@ -10121,7 +10204,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-dirs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-dirs" '("eshell")))
+(register-definition-prefixes "em-dirs" '("eshell"))
;;;***
@@ -10129,7 +10212,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-glob.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-glob" '("eshell-")))
+(register-definition-prefixes "em-glob" '("eshell-"))
;;;***
@@ -10137,7 +10220,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-hist.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-hist" '("eshell")))
+(register-definition-prefixes "em-hist" '("eshell"))
;;;***
@@ -10145,7 +10228,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-ls.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-ls" '("eshell")))
+(register-definition-prefixes "em-ls" '("eshell"))
;;;***
@@ -10153,7 +10236,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-pred.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-pred" '("eshell-")))
+(register-definition-prefixes "em-pred" '("eshell-"))
;;;***
@@ -10161,7 +10244,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-prompt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-prompt" '("eshell-")))
+(register-definition-prefixes "em-prompt" '("eshell-"))
;;;***
@@ -10169,7 +10252,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-rebind.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-rebind" '("eshell-")))
+(register-definition-prefixes "em-rebind" '("eshell-"))
;;;***
@@ -10177,7 +10260,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-script.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-script" '("eshell")))
+(register-definition-prefixes "em-script" '("eshell"))
;;;***
@@ -10185,7 +10268,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-smart.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-smart" '("eshell-")))
+(register-definition-prefixes "em-smart" '("eshell-"))
;;;***
@@ -10193,7 +10276,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-term.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-term" '("eshell-")))
+(register-definition-prefixes "em-term" '("eshell-"))
;;;***
@@ -10201,7 +10284,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-tramp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-tramp" '("eshell")))
+(register-definition-prefixes "em-tramp" '("eshell"))
;;;***
@@ -10209,7 +10292,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-unix.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-unix" '("eshell" "nil-blank-string" "pcomplete/")))
+(register-definition-prefixes "em-unix" '("eshell" "nil-blank-string" "pcomplete/"))
;;;***
@@ -10217,7 +10300,7 @@ displayed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from eshell/em-xtra.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "em-xtra" '("eshell/" "pcomplete/bcc")))
+(register-definition-prefixes "em-xtra" '("eshell/" "pcomplete/bcc"))
;;;***
@@ -10247,7 +10330,7 @@ some major modes from being locked under some circumstances.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "emacs-lock" '("emacs-lock-" "toggle-emacs-lock")))
+(register-definition-prefixes "emacs-lock" '("emacs-lock-" "toggle-emacs-lock"))
;;;***
@@ -10266,7 +10349,7 @@ Already submitted bugs can be found in the Emacs bug tracker:
(set-advertised-calling-convention 'report-emacs-bug '(topic) '"24.5")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "emacsbug" '("report-emacs-bug-")))
+(register-definition-prefixes "emacsbug" '("report-emacs-bug-"))
;;;***
@@ -10322,7 +10405,7 @@ Emerge two RCS revisions of a file, with another revision as ancestor.
\(fn A-DIR B-DIR ANCESTOR-DIR OUTPUT-DIR)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "emerge" '("emerge-")))
+(register-definition-prefixes "emerge" '("emerge-"))
;;;***
@@ -10339,6 +10422,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Turning the mode on or off runs `enriched-mode-hook'.
More information about Enriched mode is available in the file
@@ -10360,7 +10446,7 @@ Commands:
\(fn FROM TO)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "enriched" '("enriched-")))
+(register-definition-prefixes "enriched" '("enriched-"))
;;;***
@@ -10550,7 +10636,7 @@ Insert selected KEYS after the point.
\(fn KEYS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epa" '("epa-")))
+(register-definition-prefixes "epa" '("epa-"))
;;;***
@@ -10583,7 +10669,7 @@ Encrypt marked files." t nil)
(autoload 'epa-file-disable "epa-file" nil t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epa-file" '("epa-")))
+(register-definition-prefixes "epa-file" '("epa-"))
;;;***
@@ -10598,6 +10684,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'epa-mail-decrypt "epa-mail" "\
@@ -10662,9 +10751,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epa-mail" '("epa-mail-")))
+(register-definition-prefixes "epa-mail" '("epa-mail-"))
;;;***
@@ -10677,7 +10769,7 @@ Return a context object.
\(fn &optional PROTOCOL ARMOR TEXTMODE INCLUDE-CERTS CIPHER-ALGORITHM DIGEST-ALGORITHM COMPRESS-ALGORITHM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epg" '("epg-")))
+(register-definition-prefixes "epg" '("epg-"))
;;;***
@@ -10717,7 +10809,7 @@ Look at CONFIG and try to expand GROUP.
\(fn CONFIG GROUP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epg-config" '("epg-")))
+(register-definition-prefixes "epg-config" '("epg-"))
;;;***
@@ -10766,7 +10858,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
\(fn HOST PORT CHANNEL USER PASSWORD)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc" '("define-erc-module" "erc-")))
+(register-definition-prefixes "erc" '("define-erc-module" "erc-"))
;;;***
@@ -10774,14 +10866,14 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; "erc/erc-autoaway.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-autoaway.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-autoaway" '("erc-auto")))
+(register-definition-prefixes "erc-autoaway" '("erc-auto"))
;;;***
;;;### (autoloads nil "erc-backend" "erc/erc-backend.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-backend.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-backend" '("erc-")))
+(register-definition-prefixes "erc-backend" '("erc-"))
;;;***
@@ -10789,7 +10881,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-button.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-button" '("erc-")))
+(register-definition-prefixes "erc-button" '("erc-"))
;;;***
@@ -10797,15 +10889,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-capab.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-capab" '("erc-capab-identify-")))
-
-;;;***
-
-;;;### (autoloads "actual autoloads are elsewhere" "erc-compat" "erc/erc-compat.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from erc/erc-compat.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-compat" '("erc-")))
+(register-definition-prefixes "erc-capab" '("erc-capab-identify-"))
;;;***
@@ -10813,7 +10897,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-dcc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-dcc" '("erc-" "pcomplete/erc-mode/")))
+(register-definition-prefixes "erc-dcc" '("erc-" "pcomplete/erc-mode/"))
;;;***
@@ -10821,7 +10905,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; "erc/erc-desktop-notifications.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-desktop-notifications.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-desktop-notifications" '("erc-notifications-")))
+(register-definition-prefixes "erc-desktop-notifications" '("erc-notifications-"))
;;;***
@@ -10829,7 +10913,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; "erc/erc-ezbounce.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-ezbounce.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-ezbounce" '("erc-ezb-")))
+(register-definition-prefixes "erc-ezbounce" '("erc-ezb-"))
;;;***
@@ -10837,21 +10921,21 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-fill.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-fill" '("erc-")))
+(register-definition-prefixes "erc-fill" '("erc-"))
;;;***
;;;### (autoloads nil "erc-goodies" "erc/erc-goodies.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-goodies.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-goodies" '("erc-")))
+(register-definition-prefixes "erc-goodies" '("erc-"))
;;;***
;;;### (autoloads nil "erc-ibuffer" "erc/erc-ibuffer.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-ibuffer.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-ibuffer" '("erc-")))
+(register-definition-prefixes "erc-ibuffer" '("erc-"))
;;;***
@@ -10859,7 +10943,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-identd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-identd" '("erc-identd-")))
+(register-definition-prefixes "erc-identd" '("erc-identd-"))
;;;***
@@ -10867,7 +10951,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-imenu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-imenu" '("erc-unfill-notice")))
+(register-definition-prefixes "erc-imenu" '("erc-unfill-notice"))
;;;***
@@ -10875,14 +10959,14 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-join.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-join" '("erc-")))
+(register-definition-prefixes "erc-join" '("erc-"))
;;;***
;;;### (autoloads nil "erc-lang" "erc/erc-lang.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-lang.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-lang" '("erc-cmd-LANG" "iso-638-languages" "language")))
+(register-definition-prefixes "erc-lang" '("erc-cmd-LANG" "iso-638-languages" "language"))
;;;***
@@ -10890,7 +10974,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-list.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-list" '("erc-")))
+(register-definition-prefixes "erc-list" '("erc-"))
;;;***
@@ -10898,7 +10982,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-log.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-log" '("erc-")))
+(register-definition-prefixes "erc-log" '("erc-"))
;;;***
@@ -10906,7 +10990,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-match.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-match" '("erc-")))
+(register-definition-prefixes "erc-match" '("erc-"))
;;;***
@@ -10914,7 +10998,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-menu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-menu" '("erc-menu-")))
+(register-definition-prefixes "erc-menu" '("erc-menu-"))
;;;***
@@ -10922,7 +11006,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;;;; "erc/erc-netsplit.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-netsplit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-netsplit" '("erc-")))
+(register-definition-prefixes "erc-netsplit" '("erc-"))
;;;***
@@ -10938,7 +11022,7 @@ server name and search for a match in `erc-networks-alist'." nil nil)
(autoload 'erc-server-select "erc-networks" "\
Interactively select a server to connect to using `erc-server-alist'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-networks" '("erc-")))
+(register-definition-prefixes "erc-networks" '("erc-"))
;;;***
@@ -10946,7 +11030,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-notify.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-notify" '("erc-")))
+(register-definition-prefixes "erc-notify" '("erc-"))
;;;***
@@ -10954,7 +11038,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-page.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-page" '("erc-")))
+(register-definition-prefixes "erc-page" '("erc-"))
;;;***
@@ -10962,7 +11046,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-pcomplete.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-pcomplete.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-pcomplete" '("erc-pcomplet" "pcomplete")))
+(register-definition-prefixes "erc-pcomplete" '("erc-pcomplet" "pcomplete"))
;;;***
@@ -10970,7 +11054,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-replace.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-replace.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-replace" '("erc-replace-")))
+(register-definition-prefixes "erc-replace" '("erc-replace-"))
;;;***
@@ -10978,7 +11062,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-ring.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-ring" '("erc-")))
+(register-definition-prefixes "erc-ring" '("erc-"))
;;;***
@@ -10986,7 +11070,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-services.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-services.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-services" '("erc-")))
+(register-definition-prefixes "erc-services" '("erc-"))
;;;***
@@ -10994,7 +11078,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-sound.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-sound" '("erc-")))
+(register-definition-prefixes "erc-sound" '("erc-"))
;;;***
@@ -11002,7 +11086,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-speedbar.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-speedbar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-speedbar" '("erc-")))
+(register-definition-prefixes "erc-speedbar" '("erc-"))
;;;***
@@ -11010,7 +11094,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-spelling.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-spelling.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-spelling" '("erc-spelling-")))
+(register-definition-prefixes "erc-spelling" '("erc-spelling-"))
;;;***
@@ -11018,7 +11102,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-stamp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-stamp" '("erc-")))
+(register-definition-prefixes "erc-stamp" '("erc-"))
;;;***
@@ -11026,7 +11110,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-track.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-track" '("erc-")))
+(register-definition-prefixes "erc-track" '("erc-"))
;;;***
@@ -11034,7 +11118,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; "erc/erc-truncate.el" (0 0 0 0))
;;; Generated autoloads from erc/erc-truncate.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-truncate" '("erc-max-buffer-size")))
+(register-definition-prefixes "erc-truncate" '("erc-max-buffer-size"))
;;;***
@@ -11042,7 +11126,7 @@ Interactively select a server to connect to using `erc-server-alist'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from erc/erc-xdcc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "erc-xdcc" '("erc-")))
+(register-definition-prefixes "erc-xdcc" '("erc-"))
;;;***
@@ -11117,7 +11201,7 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test).
\(fn TEST-OR-TEST-NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ert" '("ert-")))
+(register-definition-prefixes "ert" '("ert-"))
;;;***
@@ -11129,35 +11213,35 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test).
(autoload 'ert-kill-all-test-buffers "ert-x" "\
Kill all test buffers that are still live." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ert-x" '("ert-")))
+(register-definition-prefixes "ert-x" '("ert-"))
;;;***
;;;### (autoloads nil "esh-arg" "eshell/esh-arg.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-arg.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-arg" '("eshell-")))
+(register-definition-prefixes "esh-arg" '("eshell-"))
;;;***
;;;### (autoloads nil "esh-cmd" "eshell/esh-cmd.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-cmd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-cmd" '("eshell" "pcomplete/eshell-mode/eshell-debug")))
+(register-definition-prefixes "esh-cmd" '("eshell" "pcomplete/eshell-mode/eshell-debug"))
;;;***
;;;### (autoloads nil "esh-ext" "eshell/esh-ext.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-ext.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-ext" '("eshell")))
+(register-definition-prefixes "esh-ext" '("eshell"))
;;;***
;;;### (autoloads nil "esh-io" "eshell/esh-io.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-io.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-io" '("eshell-")))
+(register-definition-prefixes "esh-io" '("eshell-"))
;;;***
@@ -11169,7 +11253,7 @@ Emacs shell interactive mode.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-mode" '("eshell")))
+(register-definition-prefixes "esh-mode" '("eshell"))
;;;***
@@ -11177,35 +11261,35 @@ Emacs shell interactive mode.
;;;;;; 0))
;;; Generated autoloads from eshell/esh-module.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-module" '("eshell-")))
+(register-definition-prefixes "esh-module" '("eshell-"))
;;;***
;;;### (autoloads nil "esh-opt" "eshell/esh-opt.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-opt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-opt" '("eshell-")))
+(register-definition-prefixes "esh-opt" '("eshell-"))
;;;***
;;;### (autoloads nil "esh-proc" "eshell/esh-proc.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-proc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-proc" '("eshell")))
+(register-definition-prefixes "esh-proc" '("eshell"))
;;;***
;;;### (autoloads nil "esh-util" "eshell/esh-util.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-util" '("eshell-")))
+(register-definition-prefixes "esh-util" '("eshell-"))
;;;***
;;;### (autoloads nil "esh-var" "eshell/esh-var.el" (0 0 0 0))
;;; Generated autoloads from eshell/esh-var.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "esh-var" '("eshell" "pcomplete/eshell-mode/")))
+(register-definition-prefixes "esh-var" '("eshell" "pcomplete/eshell-mode/"))
;;;***
@@ -11247,9 +11331,7 @@ corresponding to a successful execution.
\(fn COMMAND &optional STATUS-VAR)" nil nil)
-(define-obsolete-function-alias 'eshell-report-bug 'report-emacs-bug "23.1")
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eshell" '("eshell-")))
+(register-definition-prefixes "eshell" '("eshell-"))
;;;***
@@ -11553,7 +11635,7 @@ for \\[find-tag] (which see)." t nil)
(autoload 'etags--xref-backend "etags" nil nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "etags" '("default-tags-table-function" "etags-" "file-of-tag" "find-tag-" "goto-tag-location-function" "initialize-new-tags-table" "last-tag" "list-tags-function" "select-tags-table-" "snarf-tag-function" "tag" "verify-tags-table-function" "xref-")))
+(register-definition-prefixes "etags" '("default-tags-table-function" "etags-" "file-of-tag" "find-tag-" "goto-tag-location-function" "initialize-new-tags-table" "last-tag" "list-tags-function" "select-tags-table-" "snarf-tag-function" "tag" "verify-tags-table-function" "xref-"))
;;;***
@@ -11707,7 +11789,7 @@ With ARG, insert that many delimiters.
\(fn POS TO FONT-OBJECT STRING DIRECTION)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ethio-util" '("ethio-" "exit-ethiopic-environment")))
+(register-definition-prefixes "ethio-util" '("ethio-" "exit-ethiopic-environment"))
;;;***
@@ -11774,7 +11856,7 @@ This does nothing except loading eudc by autoload side-effect." t nil)
(fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc" '("eudc-")))
+(register-definition-prefixes "eudc" '("eudc-"))
;;;***
@@ -11811,7 +11893,7 @@ Display a button for the JPEG DATA.
\(fn DATA)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-bob" '("eudc-")))
+(register-definition-prefixes "eudc-bob" '("eudc-bob-"))
;;;***
@@ -11825,7 +11907,7 @@ This function can only be called from a directory query result buffer." t nil)
(autoload 'eudc-try-bbdb-insert "eudc-export" "\
Call `eudc-insert-record-at-point-into-bbdb' if on a record." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-export" '("eudc-")))
+(register-definition-prefixes "eudc-export" '("eudc-"))
;;;***
@@ -11836,35 +11918,35 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record." t nil)
(autoload 'eudc-edit-hotlist "eudc-hotlist" "\
Edit the hotlist of directory servers in a specialized buffer." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-hotlist" '("eudc-hotlist-")))
+(register-definition-prefixes "eudc-hotlist" '("eudc-hotlist-"))
;;;***
;;;### (autoloads nil "eudc-vars" "net/eudc-vars.el" (0 0 0 0))
;;; Generated autoloads from net/eudc-vars.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudc-vars" '("eudc-")))
+(register-definition-prefixes "eudc-vars" '("eudc-"))
;;;***
;;;### (autoloads nil "eudcb-bbdb" "net/eudcb-bbdb.el" (0 0 0 0))
;;; Generated autoloads from net/eudcb-bbdb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudcb-bbdb" '("eudc-bbdb-")))
+(register-definition-prefixes "eudcb-bbdb" '("eudc-bbdb-"))
;;;***
;;;### (autoloads nil "eudcb-ldap" "net/eudcb-ldap.el" (0 0 0 0))
;;; Generated autoloads from net/eudcb-ldap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudcb-ldap" '("eudc-")))
+(register-definition-prefixes "eudcb-ldap" '("eudc-"))
;;;***
;;;### (autoloads nil "eudcb-mab" "net/eudcb-mab.el" (0 0 0 0))
;;; Generated autoloads from net/eudcb-mab.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudcb-mab" '("eudc-")))
+(register-definition-prefixes "eudcb-mab" '("eudc-"))
;;;***
@@ -11872,7 +11954,7 @@ Edit the hotlist of directory servers in a specialized buffer." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from net/eudcb-macos-contacts.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eudcb-macos-contacts" '("eudc-macos-contacts-")))
+(register-definition-prefixes "eudcb-macos-contacts" '("eudc-macos-contacts-"))
;;;***
@@ -11900,7 +11982,7 @@ fourth arg NOSEP non-nil inhibits this.
\(fn PRETTY-PRINTER &optional HEADER FOOTER NOSEP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ewoc" '("ewoc-")))
+(register-definition-prefixes "ewoc" '("ewoc-"))
;;;***
@@ -11915,6 +11997,20 @@ duplicate entries (if any) removed.")
(custom-autoload 'eww-suggest-uris "eww" t)
+(autoload 'eww-browse "eww" "\
+Function to be run to parse command line URLs.
+This is meant to be used for MIME handlers or command line use.
+
+Setting the handler for \"text/x-uri;\" to
+\"emacs -f eww-browse %u\" will then start up Emacs and call eww
+to browse the url.
+
+This can also be used on the command line directly:
+
+ emacs -f eww-browse https://gnu.org
+
+will start Emacs and browse the GNU web site." t nil)
+
(autoload 'eww "eww" "\
Fetch URL and render the page.
If the input doesn't look like an URL or a domain name, the
@@ -11967,7 +12063,7 @@ instead of `browse-url-new-window-flag'.
(autoload 'eww-list-bookmarks "eww" "\
Display the bookmarks." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "eww" '("erc--download-directory" "eww-")))
+(register-definition-prefixes "eww" '("erc--download-directory" "eww-"))
;;;***
@@ -12003,14 +12099,14 @@ Make file executable according to umask if not already executable.
If file already has any execute bits set at all, do not change existing
file modes." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "executable" '("executable-")))
+(register-definition-prefixes "executable" '("executable-"))
;;;***
;;;### (autoloads nil "exif" "image/exif.el" (0 0 0 0))
;;; Generated autoloads from image/exif.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "exif" '("exif-")))
+(register-definition-prefixes "exif" '("exif-"))
;;;***
@@ -12055,14 +12151,14 @@ This is used only in conjunction with `expand-add-abbrevs'." t nil)
(define-key abbrev-map "p" 'expand-jump-to-previous-slot)
(define-key abbrev-map "n" 'expand-jump-to-next-slot)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "expand" '("expand-")))
+(register-definition-prefixes "expand" '("expand-"))
;;;***
;;;### (autoloads nil "ezimage" "ezimage.el" (0 0 0 0))
;;; Generated autoloads from ezimage.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ezimage" '("defezimage" "ezimage-")))
+(register-definition-prefixes "ezimage" '("defezimage" "ezimage-"))
;;;***
@@ -12131,7 +12227,7 @@ with no args, if that value is non-nil.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "f90" '("f90-")))
+(register-definition-prefixes "f90" '("f90-"))
;;;***
@@ -12254,6 +12350,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When enabled, the face specified by the variable
`buffer-face-mode-face' is used to display the buffer text.
@@ -12296,7 +12395,7 @@ Besides the choice of face, it is the same as `buffer-face-mode'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "face-remap" '("buffer-face-mode-" "face-" "internal-lisp-face-attributes" "text-scale-m")))
+(register-definition-prefixes "face-remap" '("buffer-face-mode-" "face-" "internal-lisp-face-attributes" "text-scale-m"))
;;;***
@@ -12335,7 +12434,7 @@ FUNCTION must return an explanation when the test fails and
\(fn FUNCTION)" nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "faceup" '("faceup-")))
+(register-definition-prefixes "faceup" '("faceup-"))
;;;***
@@ -12389,7 +12488,7 @@ you can set `feedmail-queue-reminder-alist' to nil.
\(fn &optional WHAT-EVENT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "feedmail" '("feedmail-")))
+(register-definition-prefixes "feedmail" '("feedmail-"))
;;;***
@@ -12451,7 +12550,7 @@ This hook is intended to be put in `file-name-at-point-functions'." nil nil)
(autoload 'ffap-bindings "ffap" "\
Evaluate the forms in variable `ffap-bindings'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ffap" '("dired-at-point-" "ffap-" "find-file-literally-at-point")))
+(register-definition-prefixes "ffap" '("dired-at-point-" "ffap-" "find-file-literally-at-point"))
;;;***
@@ -12510,7 +12609,7 @@ the name is considered already unique; only the second substitution
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "filecache" '("file-cache-")))
+(register-definition-prefixes "filecache" '("file-cache-"))
;;;***
@@ -12550,7 +12649,7 @@ DELIMITED if non-nil means replace only word-delimited matches.
\(fn FROM TO FILES CASE-FOLD &optional DELIMITED)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "fileloop" '("fileloop-")))
+(register-definition-prefixes "fileloop" '("fileloop-"))
;;;***
@@ -12564,7 +12663,7 @@ Otherwise, signal a `file-notify-error'.
\(fn OBJECT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "filenotify" '("file-notify-")))
+(register-definition-prefixes "filenotify" '("file-notify-"))
;;;***
@@ -12670,7 +12769,7 @@ Execute BODY, and unwind connection-local variables.
\(fn &rest BODY)" nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "files-x" '("connection-local-" "dir-locals-to-string" "hack-connection-local-variables" "modify-" "read-file-local-variable")))
+(register-definition-prefixes "files-x" '("connection-local-" "dir-locals-to-string" "hack-connection-local-variables" "modify-" "read-file-local-variable"))
;;;***
@@ -12681,7 +12780,7 @@ Execute BODY, and unwind connection-local variables.
Filesets initialization.
Set up hooks, load the cache file -- if existing -- and build the menu." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "filesets" '("filesets-")))
+(register-definition-prefixes "filesets" '("filesets-"))
;;;***
@@ -12703,7 +12802,7 @@ result is a string that should be ready for the command line.
\(fn &rest SUBFINDS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-cmd" '("find-")))
+(register-definition-prefixes "find-cmd" '("find-"))
;;;***
@@ -12745,7 +12844,7 @@ specifies what to use in place of \"-ls\" as the final argument.
\(fn DIR REGEXP)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-dired" '("find-" "kill-find" "lookfor-dired")))
+(register-definition-prefixes "find-dired" '("find-" "kill-find" "lookfor-dired"))
;;;***
@@ -12837,7 +12936,7 @@ Visit the file you click on in another window.
\(fn EVENT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-file" '("cc-" "ff-" "modula2-other-file-alist")))
+(register-definition-prefixes "find-file" '("cc-" "ff-" "modula2-other-file-alist"))
;;;***
@@ -13026,7 +13125,7 @@ Find directly the variable at point in the other window." t nil)
(autoload 'find-function-setup-keys "find-func" "\
Define some key bindings for the find-function family of functions." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-func" '("find-")))
+(register-definition-prefixes "find-func" '("find-"))
;;;***
@@ -13048,7 +13147,7 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP.
\(fn REGEXP)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "find-lisp" '("find-lisp-")))
+(register-definition-prefixes "find-lisp" '("find-lisp-"))
;;;***
@@ -13068,7 +13167,7 @@ FILE should be in a form suitable for passing to `locate-library'.
(autoload 'finder-by-keyword "finder" "\
Find packages matching a given keyword." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "finder" '("finder-" "generated-finder-keywords-file")))
+(register-definition-prefixes "finder" '("finder-" "generated-finder-keywords-file"))
;;;***
@@ -13091,7 +13190,7 @@ to get the effect of a C-q.
\(fn &rest LOSING-TERMINAL-TYPES)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flow-ctrl" '("flow-control-c-")))
+(register-definition-prefixes "flow-ctrl" '("flow-control-c-"))
;;;***
@@ -13112,7 +13211,7 @@ lines.
\(fn &optional BUFFER DELETE-SPACE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flow-fill" '("fill-flowed-")))
+(register-definition-prefixes "flow-fill" '("fill-flowed-"))
;;;***
@@ -13167,6 +13266,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Flymake is an Emacs minor mode for on-the-fly syntax checking.
Flymake collects diagnostic information from multiple sources,
called backends, and visually annotates the buffer with the
@@ -13205,7 +13307,7 @@ Turn Flymake mode on." nil nil)
(autoload 'flymake-mode-off "flymake" "\
Turn Flymake mode off." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flymake" '("flymake-")))
+(register-definition-prefixes "flymake" '("flymake-"))
;;;***
@@ -13221,7 +13323,7 @@ REPORT-FN is Flymake's callback.
\(fn REPORT-FN &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flymake-cc" '("flymake-cc-")))
+(register-definition-prefixes "flymake-cc" '("flymake-cc-"))
;;;***
@@ -13230,7 +13332,7 @@ REPORT-FN is Flymake's callback.
;;; Generated autoloads from progmodes/flymake-proc.el
(push (purecopy '(flymake-proc 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flymake-proc" '("flymake-proc-")))
+(register-definition-prefixes "flymake-proc" '("flymake-proc-"))
;;;***
@@ -13249,6 +13351,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Flyspell mode is a buffer-local minor mode. When enabled, it
spawns a single Ispell process and checks each word. The default
flyspell behavior is to highlight incorrect words.
@@ -13297,7 +13402,7 @@ of a misspelled word removed when you've corrected it.
(autoload 'flyspell-buffer "flyspell" "\
Flyspell whole buffer." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flyspell" '("flyspell-" "mail-mode-flyspell-verify" "make-flyspell-overlay" "sgml-mode-flyspell-verify" "tex")))
+(register-definition-prefixes "flyspell" '("flyspell-" "mail-mode-flyspell-verify" "make-flyspell-overlay" "sgml-mode-flyspell-verify" "tex"))
;;;***
@@ -13305,7 +13410,7 @@ Flyspell whole buffer." t nil)
;;; Generated autoloads from foldout.el
(push (purecopy '(foldout 1 10)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "foldout" '("foldout-")))
+(register-definition-prefixes "foldout" '("foldout-"))
;;;***
@@ -13326,6 +13431,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Follow mode is a minor mode that combines windows into one tall
virtual window. This is accomplished by two main techniques:
@@ -13427,7 +13535,7 @@ selected if the original window is the first one in the frame.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "follow" '("follow-")))
+(register-definition-prefixes "follow" '("follow-"))
;;;***
@@ -13435,7 +13543,7 @@ selected if the original window is the first one in the frame.
;;;;;; 0))
;;; Generated autoloads from international/fontset.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "fontset" '("charset-script-alist" "create-" "fontset-" "generate-fontset-menu" "set" "standard-fontset-spec" "x-" "xlfd-")))
+(register-definition-prefixes "fontset" '("charset-script-alist" "create-" "fontset-" "generate-fontset-menu" "set" "standard-fontset-spec" "x-" "xlfd-"))
;;;***
@@ -13451,6 +13559,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Footnote mode is a buffer-local minor mode. If enabled, it
provides footnote support for `message-mode'. To get started,
play around with the following keys:
@@ -13458,7 +13569,7 @@ play around with the following keys:
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "footnote" '("footnote-")))
+(register-definition-prefixes "footnote" '("footnote-"))
;;;***
@@ -13512,7 +13623,7 @@ any occurrences of \"%%\" in FORMAT verbatim in the result.
\(fn FORMAT SPECIFICATION &optional IGNORE-MISSING)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "format-spec" '("format-spec-")))
+(register-definition-prefixes "format-spec" '("format-spec-"))
;;;***
@@ -13550,7 +13661,7 @@ Visit a file in Forms mode in other window.
\(fn FN)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "forms" '("forms-")))
+(register-definition-prefixes "forms" '("forms-"))
;;;***
@@ -13629,7 +13740,7 @@ with no args, if that value is non-nil.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "fortran" '("fortran-")))
+(register-definition-prefixes "fortran" '("fortran-"))
;;;***
@@ -13686,7 +13797,7 @@ and choose the directory as the fortune-file.
\(fn &optional FILE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "fortune" '("fortune-")))
+(register-definition-prefixes "fortune" '("fortune-"))
;;;***
@@ -13862,7 +13973,7 @@ Interactively, reads the register using `register-read-with-preview'.
\(fn REGISTER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "frameset" '("frameset-")))
+(register-definition-prefixes "frameset" '("frameset-"))
;;;***
@@ -13871,7 +13982,7 @@ Interactively, reads the register using `register-read-with-preview'.
(unless (fboundp 'define-fringe-bitmap) (defun define-fringe-bitmap (_bitmap _bits &optional _height _width _align) "Define fringe bitmap BITMAP from BITS of size HEIGHT x WIDTH.\nBITMAP is a symbol identifying the new fringe bitmap.\nBITS is either a string or a vector of integers.\nHEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS.\nWIDTH must be an integer between 1 and 16, or nil which defaults to 8.\nOptional fifth arg ALIGN may be one of ‘top’, ‘center’, or ‘bottom’,\nindicating the positioning of the bitmap relative to the rows where it\nis used; the default is to center the bitmap. Fifth arg may also be a\nlist (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap\nshould be repeated.\nIf BITMAP already exists, the existing definition is replaced."))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "fringe" '("fringe-" "set-fringe-")))
+(register-definition-prefixes "fringe" '("fringe-" "set-fringe-"))
;;;***
@@ -13879,14 +13990,14 @@ Interactively, reads the register using `register-read-with-preview'.
;;; Generated autoloads from play/gamegrid.el
(push (purecopy '(gamegrid 1 2)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gamegrid" '("gamegrid-")))
+(register-definition-prefixes "gamegrid" '("gamegrid-"))
;;;***
;;;### (autoloads nil "gametree" "play/gametree.el" (0 0 0 0))
;;; Generated autoloads from play/gametree.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gametree" '("gametree-")))
+(register-definition-prefixes "gametree" '("gametree-"))
;;;***
@@ -13913,6 +14024,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'gdb "gdb-mi" "\
@@ -13975,7 +14089,7 @@ detailed description of this mode.
\(fn COMMAND-LINE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gdb-mi" '("breakpoint" "def-gdb-" "gdb" "gud-" "hollow-right-triangle" "nil")))
+(register-definition-prefixes "gdb-mi" '("breakpoint" "def-gdb-" "gdb" "gud-" "hollow-right-triangle" "nil"))
;;;***
@@ -13983,7 +14097,7 @@ detailed description of this mode.
;;;;;; 0 0))
;;; Generated autoloads from emacs-lisp/generator.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "generator" '("cps-" "iter-")))
+(register-definition-prefixes "generator" '("cps-" "iter-"))
;;;***
@@ -14065,14 +14179,14 @@ regular expression that can be used as an element of
(make-obsolete 'generic-make-keywords-list 'regexp-opt '"24.4")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "generic" '("generic-")))
+(register-definition-prefixes "generic" '("generic-"))
;;;***
;;;### (autoloads nil "generic-x" "generic-x.el" (0 0 0 0))
;;; Generated autoloads from generic-x.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "generic-x" '("default-generic-mode" "generic-")))
+(register-definition-prefixes "generic-x" '("default-generic-mode" "generic-"))
;;;***
@@ -14087,12 +14201,15 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When this mode is active, it tries to add virtual
separators (like underscores) at places they belong to.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "glasses" '("glasses-")))
+(register-definition-prefixes "glasses" '("glasses-"))
;;;***
@@ -14148,15 +14265,14 @@ DEFAULT-MAP specifies the default key map for ICON-LIST.
\(fn ICON-LIST ZAP-LIST DEFAULT-MAP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gmm-utils" '("defun-gmm" "gmm-")))
+(register-definition-prefixes "gmm-utils" '("defun-gmm" "gmm-"))
;;;***
;;;### (autoloads nil "gnus" "gnus/gnus.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus.el
(push (purecopy '(gnus 5 13)) package--builtin-versions)
-(when (fboundp 'custom-autoload)
- (custom-autoload 'gnus-select-method "gnus"))
+(custom-autoload 'gnus-select-method "gnus")
(autoload 'gnus-child-no-server "gnus" "\
Read network news as a child, without connecting to the local server.
@@ -14210,7 +14326,7 @@ prompt the user for the name of an NNTP server to use.
\(fn &optional ARG DONT-CONNECT CHILD)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus" '("gnus-")))
+(register-definition-prefixes "gnus" '("gnus-"))
;;;***
@@ -14293,7 +14409,7 @@ CLEAN is obsolete and ignored.
\(fn &optional CLEAN REREAD)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-agent" '("gnus-")))
+(register-definition-prefixes "gnus-agent" '("gnus-"))
;;;***
@@ -14303,21 +14419,21 @@ CLEAN is obsolete and ignored.
(autoload 'gnus-article-prepare-display "gnus-art" "\
Make the current buffer look like a nice article." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-art" '("article-" "gnus-")))
+(register-definition-prefixes "gnus-art" '("article-" "gnus-"))
;;;***
;;;### (autoloads nil "gnus-async" "gnus/gnus-async.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-async.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-async" '("gnus-")))
+(register-definition-prefixes "gnus-async" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-bcklg" "gnus/gnus-bcklg.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-bcklg.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-bcklg" '("gnus-backlog-")))
+(register-definition-prefixes "gnus-bcklg" '("gnus-backlog-"))
;;;***
@@ -14339,7 +14455,7 @@ The list is displayed in a buffer named `*Gnus Bookmark List*'.
The leftmost column displays a D if the bookmark is flagged for
deletion, or > if it is flagged for displaying." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-bookmark" '("gnus-bookmark-")))
+(register-definition-prefixes "gnus-bookmark" '("gnus-bookmark-"))
;;;***
@@ -14380,28 +14496,35 @@ supported.
\(fn GROUP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-cache" '("gnus-")))
+(register-definition-prefixes "gnus-cache" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-cite" "gnus/gnus-cite.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-cite.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-cite" '("gnus-" "turn-o")))
+(register-definition-prefixes "gnus-cite" '("gnus-" "turn-o"))
;;;***
;;;### (autoloads nil "gnus-cloud" "gnus/gnus-cloud.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-cloud.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-cloud" '("gnus-cloud-")))
+(register-definition-prefixes "gnus-cloud" '("gnus-cloud-"))
;;;***
;;;### (autoloads nil "gnus-cus" "gnus/gnus-cus.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-cus.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-cus" '("category-fields" "gnus-")))
+(register-definition-prefixes "gnus-cus" '("category-fields" "gnus-"))
+
+;;;***
+
+;;;### (autoloads nil "gnus-dbus" "gnus/gnus-dbus.el" (0 0 0 0))
+;;; Generated autoloads from gnus/gnus-dbus.el
+
+(register-definition-prefixes "gnus-dbus" '("gnus-dbus-"))
;;;***
@@ -14440,14 +14563,14 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
\(fn &optional NO-KEYMAP NO-CHECK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-delay" '("gnus-delay-")))
+(register-definition-prefixes "gnus-delay" '("gnus-delay-"))
;;;***
;;;### (autoloads nil "gnus-demon" "gnus/gnus-demon.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-demon.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-demon" '("gnus-")))
+(register-definition-prefixes "gnus-demon" '("gnus-"))
;;;***
@@ -14464,7 +14587,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
\(fn HEADER)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-diary" '("gnus-")))
+(register-definition-prefixes "gnus-diary" '("gnus-"))
;;;***
@@ -14474,7 +14597,7 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
(autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
Convenience method to turn on gnus-dired-mode." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-dired" '("gnus-dired-")))
+(register-definition-prefixes "gnus-dired" '("gnus-dired-"))
;;;***
@@ -14484,21 +14607,21 @@ Convenience method to turn on gnus-dired-mode." t nil)
(autoload 'gnus-draft-reminder "gnus-draft" "\
Reminder user if there are unsent drafts." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-draft" '("gnus-")))
+(register-definition-prefixes "gnus-draft" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-dup" "gnus/gnus-dup.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-dup.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-dup" '("gnus-")))
+(register-definition-prefixes "gnus-dup" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-eform" "gnus/gnus-eform.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-eform.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-eform" '("gnus-edit-form")))
+(register-definition-prefixes "gnus-eform" '("gnus-edit-form"))
;;;***
@@ -14557,7 +14680,7 @@ Files matching `gnus-face-omit-files' are not considered." t nil)
(autoload 'gnus-insert-random-face-header "gnus-fun" "\
Insert a random Face header from `gnus-face-directory'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-fun" '("gnus-")))
+(register-definition-prefixes "gnus-fun" '("gnus-"))
;;;***
@@ -14577,7 +14700,7 @@ If gravatars are already displayed, remove them.
\(fn &optional FORCE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-gravatar" '("gnus-gravatar-")))
+(register-definition-prefixes "gnus-gravatar" '("gnus-gravatar-"))
;;;***
@@ -14603,7 +14726,7 @@ The arguments have the same meaning as those of
\(fn IDS &optional WINDOW-CONF)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-group" '("gnus-")))
+(register-definition-prefixes "gnus-group" '("gnus-"))
;;;***
@@ -14620,7 +14743,7 @@ The arguments have the same meaning as those of
\(fn SUMMARY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-html" '("gnus-")))
+(register-definition-prefixes "gnus-html" '("gnus-"))
;;;***
@@ -14633,14 +14756,14 @@ The arguments have the same meaning as those of
\(fn HANDLE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-icalendar" '("gnus-icalendar")))
+(register-definition-prefixes "gnus-icalendar" '("gnus-icalendar"))
;;;***
;;;### (autoloads nil "gnus-int" "gnus/gnus-int.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-int.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-int" '("gnus-")))
+(register-definition-prefixes "gnus-int" '("gnus-"))
;;;***
@@ -14653,21 +14776,21 @@ The arguments have the same meaning as those of
Run batched scoring.
Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-kill" '("gnus-")))
+(register-definition-prefixes "gnus-kill" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-logic" "gnus/gnus-logic.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-logic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-logic" '("gnus-")))
+(register-definition-prefixes "gnus-logic" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-mh" "gnus/gnus-mh.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-mh.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-mh" '("gnus-")))
+(register-definition-prefixes "gnus-mh" '("gnus-"))
;;;***
@@ -14690,11 +14813,14 @@ positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and
toggle it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when
+it is disabled.
+
\\{gnus-mailing-list-mode-map}
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-ml" '("gnus-mailing-list-")))
+(register-definition-prefixes "gnus-ml" '("gnus-mailing-list-"))
;;;***
@@ -14793,7 +14919,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns:
\(fn &optional GROUPS NO-CROSSPOST CATCH-ALL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-mlspl" '("gnus-group-split-")))
+(register-definition-prefixes "gnus-mlspl" '("gnus-group-split-"))
;;;***
@@ -14821,7 +14947,7 @@ Like `message-reply'.
(define-mail-user-agent 'gnus-user-agent 'gnus-msg-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-msg" '("gnus-")))
+(register-definition-prefixes "gnus-msg" '("gnus-"))
;;;***
@@ -14838,7 +14964,7 @@ notification using `notifications-notify' for it.
This is typically a function to add in
`gnus-after-getting-new-news-hook'" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-notifications" '("gnus-notifications-")))
+(register-definition-prefixes "gnus-notifications" '("gnus-notifications-"))
;;;***
@@ -14857,7 +14983,7 @@ If picons are already displayed, remove them." t nil)
Display picons in the Newsgroups and Followup-To headers.
If picons are already displayed, remove them." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-picon" '("gnus-picon-")))
+(register-definition-prefixes "gnus-picon" '("gnus-picon-"))
;;;***
@@ -14926,7 +15052,7 @@ Add NUM into sorted LIST by side effect.
\(fn LIST NUM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-range" '("gnus-")))
+(register-definition-prefixes "gnus-range" '("gnus-"))
;;;***
@@ -14937,7 +15063,7 @@ Add NUM into sorted LIST by side effect.
(autoload 'gnus-registry-initialize "gnus-registry" "\
Initialize the Gnus registry." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-registry" '("gnus-")))
+(register-definition-prefixes "gnus-registry" '("gnus-"))
;;;***
@@ -14945,21 +15071,21 @@ Initialize the Gnus registry." t nil)
;;;;;; 0 0))
;;; Generated autoloads from gnus/gnus-rfc1843.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-rfc1843" '("rfc1843-")))
+(register-definition-prefixes "gnus-rfc1843" '("rfc1843-"))
;;;***
;;;### (autoloads nil "gnus-salt" "gnus/gnus-salt.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-salt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-salt" '("gnus-")))
+(register-definition-prefixes "gnus-salt" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-score" "gnus/gnus-score.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-score.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-score" '("gnus-")))
+(register-definition-prefixes "gnus-score" '("gnus-"))
;;;***
@@ -14981,7 +15107,7 @@ See the documentation for these variables and functions for details." t nil)
(autoload 'gnus-sieve-article-add-rule "gnus-sieve" nil t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-sieve" '("gnus-sieve-")))
+(register-definition-prefixes "gnus-sieve" '("gnus-sieve-"))
;;;***
@@ -14993,14 +15119,14 @@ Update the format specification near point.
\(fn VAR)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-spec" '("gnus-")))
+(register-definition-prefixes "gnus-spec" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-srvr" "gnus/gnus-srvr.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-srvr.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-srvr" '("gnus-")))
+(register-definition-prefixes "gnus-srvr" '("gnus-"))
;;;***
@@ -15012,7 +15138,7 @@ Declare back end NAME with ABILITIES as a Gnus back end.
\(fn NAME &rest ABILITIES)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-start" '("gnus-")))
+(register-definition-prefixes "gnus-start" '("gnus-"))
;;;***
@@ -15025,42 +15151,42 @@ BOOKMARK is a bookmark name or a bookmark record.
\(fn BOOKMARK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-sum" '("gnus-")))
+(register-definition-prefixes "gnus-sum" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-topic" "gnus/gnus-topic.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-topic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-topic" '("gnus-")))
+(register-definition-prefixes "gnus-topic" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-undo" "gnus/gnus-undo.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-undo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-undo" '("gnus-")))
+(register-definition-prefixes "gnus-undo" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-util" "gnus/gnus-util.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-util" '("gnus-")))
+(register-definition-prefixes "gnus-util" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-uu" "gnus/gnus-uu.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-uu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-uu" '("gnus-")))
+(register-definition-prefixes "gnus-uu" '("gnus-"))
;;;***
;;;### (autoloads nil "gnus-vm" "gnus/gnus-vm.el" (0 0 0 0))
;;; Generated autoloads from gnus/gnus-vm.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-vm" '("gnus-")))
+(register-definition-prefixes "gnus-vm" '("gnus-"))
;;;***
@@ -15072,14 +15198,14 @@ Add the window configuration CONF to `gnus-buffer-configuration'.
\(fn CONF)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnus-win" '("gnus-")))
+(register-definition-prefixes "gnus-win" '("gnus-"))
;;;***
;;;### (autoloads nil "gnutls" "net/gnutls.el" (0 0 0 0))
;;; Generated autoloads from net/gnutls.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gnutls" '("gnutls-" "open-gnutls-stream")))
+(register-definition-prefixes "gnutls" '("gnutls-" "open-gnutls-stream"))
;;;***
@@ -15107,7 +15233,7 @@ Use \\[describe-mode] for more info.
\(fn &optional N M)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gomoku" '("gomoku-")))
+(register-definition-prefixes "gomoku" '("gomoku-"))
;;;***
@@ -15141,6 +15267,33 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
+\(fn &optional ARG)" t nil)
+
+(put 'global-goto-address-mode 'globalized-minor-mode t)
+
+(defvar global-goto-address-mode nil "\
+Non-nil if Global Goto-Address mode is enabled.
+See the `global-goto-address-mode' command
+for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `global-goto-address-mode'.")
+
+(custom-autoload 'global-goto-address-mode "goto-addr" nil)
+
+(autoload 'global-goto-address-mode "goto-addr" "\
+Toggle Goto-Address mode in all buffers.
+With prefix ARG, enable Global Goto-Address mode if ARG is positive;
+otherwise, disable it. If called from Lisp, enable the mode if
+ARG is omitted or nil.
+
+Goto-Address mode is enabled in all buffers where
+`goto-addr-mode--turn-on' would do it.
+See `goto-address-mode' for more information on Goto-Address mode.
+
\(fn &optional ARG)" t nil)
(autoload 'goto-address-prog-mode "goto-addr" "\
@@ -15151,9 +15304,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "goto-addr" '("goto-address-")))
+(register-definition-prefixes "goto-addr" '("goto-addr"))
;;;***
@@ -15175,7 +15331,7 @@ retrieval failed.
\(fn MAIL-ADDRESS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gravatar" '("gravatar-")))
+(register-definition-prefixes "gravatar" '("gravatar-"))
;;;***
@@ -15203,7 +15359,12 @@ by `grep-compute-defaults'; to change the default value, use
The default find command for \\[grep-find].
In interactive usage, the actual value of this variable is set up
by `grep-compute-defaults'; to change the default value, use
-\\[customize] or call the function `grep-apply-setting'.")
+\\[customize] or call the function `grep-apply-setting'.
+
+This variable can either be a string, or a cons of the
+form (COMMAND . POSITION). In the latter case, COMMAND will be
+used as the default command, and point will be placed at POSITION
+for easier editing.")
(custom-autoload 'grep-find-command "grep" nil)
@@ -15363,14 +15524,14 @@ command before it's run.
(defalias 'rzgrep 'zrgrep)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "grep" '("grep-" "kill-grep" "rgrep-")))
+(register-definition-prefixes "grep" '("grep-" "kill-grep" "rgrep-"))
;;;***
;;;### (autoloads nil "gssapi" "gnus/gssapi.el" (0 0 0 0))
;;; Generated autoloads from gnus/gssapi.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gssapi" '("gssapi-program" "open-gssapi-stream")))
+(register-definition-prefixes "gssapi" '("gssapi-program" "open-gssapi-stream"))
;;;***
@@ -15480,9 +15641,12 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gud" '("gdb-" "gud-")))
+(register-definition-prefixes "gud" '("gdb-" "gud-"))
;;;***
@@ -15590,7 +15754,7 @@ binding mode.
\(fn PLACE)" nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "gv" '("gv-")))
+(register-definition-prefixes "gv" '("gv-"))
;;;***
@@ -15607,7 +15771,7 @@ Variables: `handwrite-linespace' (default 12)
`handwrite-numlines' (default 60)
`handwrite-pagenumbering' (default nil)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "handwrite" '("handwrite-" "menu-bar-handwrite-map")))
+(register-definition-prefixes "handwrite" '("handwrite-" "menu-bar-handwrite-map"))
;;;***
@@ -15615,7 +15779,7 @@ Variables: `handwrite-linespace' (default 12)
;;;;;; 0 0))
;;; Generated autoloads from language/hanja-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hanja-util" '("han")))
+(register-definition-prefixes "hanja-util" '("han"))
;;;***
@@ -15640,7 +15804,7 @@ This is, necessarily (as of Emacs 20.3), a crock. When the
current-time interface is made s2G-compliant, hanoi.el will need
to be updated." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hanoi" '("hanoi-")))
+(register-definition-prefixes "hanoi" '("hanoi-"))
;;;***
@@ -15684,7 +15848,7 @@ Prefix arg sets default accept amount temporarily.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hashcash" '("hashcash-")))
+(register-definition-prefixes "hashcash" '("hashcash-"))
;;;***
@@ -15714,6 +15878,9 @@ the `kbd-help' property at point. If `kbd-help' does not produce
a string, but the `help-echo' property does, then that string is
printed instead.
+The string is passed through `substitute-command-keys' before it
+is displayed.
+
A numeric argument ARG prevents display of a message in case
there is no help. While ARG can be used interactively, it is
mainly meant for use from Lisp.
@@ -15740,6 +15907,10 @@ included in this list. Suggested properties are `keymap',
`local-map', `button' and `kbd-help'. Any value other than t or
a non-empty list disables the feature.
+The text printed from the `help-echo' property is often only
+relevant when using the mouse. The presence of a `kbd-help'
+property guarantees that non mouse specific help is available.
+
This variable only takes effect after a call to
`help-at-pt-set-timer'. The help gets printed after Emacs has
been idle for `help-at-pt-timer-delay' seconds. You can call
@@ -15807,7 +15978,7 @@ different regions. With numeric argument ARG, behaves like
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "help-at-pt" '("help-at-pt-" "scan-buf-move-hook")))
+(register-definition-prefixes "help-at-pt" '("help-at-pt-" "scan-buf-move-hook"))
;;;***
@@ -15921,6 +16092,21 @@ documentation for the major and minor modes of that buffer.
\(fn &optional BUFFER)" t nil)
+(autoload 'describe-widget "help-fns" "\
+Display a buffer with information about a widget.
+You can use this command to describe buttons (e.g., the links in a *Help*
+buffer), editable fields of the customization buffers, etc.
+
+Interactively, click on a widget to describe it, or hit RET to describe the
+widget at point.
+
+When called from Lisp, POS may be a buffer position or a mouse position list.
+
+Calls each function of the list `describe-widget-functions' in turn, until
+one of them returns non-nil.
+
+\(fn &optional POS)" t nil)
+
(autoload 'doc-file-to-man "help-fns" "\
Produce an nroff buffer containing the doc-strings from the DOC file.
@@ -15931,7 +16117,7 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file.
\(fn FILE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "help-fns" '("describe-" "help-")))
+(register-definition-prefixes "help-fns" '("describe-" "help-"))
;;;***
@@ -15947,7 +16133,7 @@ gives the window that lists the options.")
(custom-autoload 'three-step-help "help-macro" t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "help-macro" '("make-help-screen")))
+(register-definition-prefixes "help-macro" '("make-help-screen"))
;;;***
@@ -16044,7 +16230,7 @@ BOOKMARK is a bookmark name or a bookmark record.
\(fn BOOKMARK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "help-mode" '("describe-symbol-backends" "help-")))
+(register-definition-prefixes "help-mode" '("describe-symbol-backends" "help-"))
;;;***
@@ -16057,14 +16243,14 @@ Describe local key bindings of current mode." t nil)
(autoload 'Helper-help "helper" "\
Provide help for current mode." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "helper" '("Helper-")))
+(register-definition-prefixes "helper" '("Helper-"))
;;;***
;;;### (autoloads nil "hex-util" "hex-util.el" (0 0 0 0))
;;; Generated autoloads from hex-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hex-util" '("decode-hex-string" "encode-hex-string")))
+(register-definition-prefixes "hex-util" '("decode-hex-string" "encode-hex-string"))
;;;***
@@ -16158,7 +16344,7 @@ and edit the file in `hexl-mode'.
Convert a binary buffer to hexl format.
This discards the buffer's undo information." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hexl" '("dehexlify-buffer" "hexl-")))
+(register-definition-prefixes "hexl" '("dehexlify-buffer" "hexl-"))
;;;***
@@ -16166,7 +16352,7 @@ This discards the buffer's undo information." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from hfy-cmap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hfy-cmap" '("hfy-" "htmlfontify-unload-rgb-file")))
+(register-definition-prefixes "hfy-cmap" '("hfy-" "htmlfontify-unload-rgb-file"))
;;;***
@@ -16181,6 +16367,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Hi Lock mode is automatically enabled when you invoke any of the
highlighting commands listed below, such as \\[highlight-regexp].
To enable Hi Lock mode in all buffers, use `global-hi-lock-mode'
@@ -16367,7 +16556,7 @@ Interactively added patterns are those normally specified using
`highlight-regexp' and `highlight-lines-matching-regexp'; they can
be found in variable `hi-lock-interactive-patterns'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hi-lock" '("hi-lock-" "turn-on-hi-lock-if-enabled")))
+(register-definition-prefixes "hi-lock" '("hi-lock-" "turn-on-hi-lock-if-enabled"))
;;;***
@@ -16382,6 +16571,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Hide-Ifdef mode is a buffer-local minor mode for use with C and
C-like major modes. When enabled, code within #ifdef constructs
that the C preprocessor would eliminate may be hidden from view.
@@ -16418,7 +16610,7 @@ Several variables affect how the hiding is done:
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hideif" '("backward-ifdef" "down-ifdef" "forward-ifdef" "hide-ifdef" "hif-" "intern-safe" "next-ifdef" "previous-ifdef" "show-ifdef" "up-ifdef")))
+(register-definition-prefixes "hideif" '("backward-ifdef" "down-ifdef" "forward-ifdef" "hide-ifdef" "hif-" "intern-safe" "next-ifdef" "previous-ifdef" "show-ifdef" "up-ifdef"))
;;;***
@@ -16461,6 +16653,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When hideshow minor mode is on, the menu bar is augmented with hideshow
commands and the hideshow commands are enabled.
The value (hs . t) is added to `buffer-invisibility-spec'.
@@ -16482,7 +16677,15 @@ Key bindings:
(autoload 'turn-off-hideshow "hideshow" "\
Unconditionally turn off `hs-minor-mode'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hideshow" '("hs-")))
+(register-definition-prefixes "hideshow" '("hs-"))
+
+;;;***
+
+;;;### (autoloads nil "hierarchy" "emacs-lisp/hierarchy.el" (0 0
+;;;;;; 0 0))
+;;; Generated autoloads from emacs-lisp/hierarchy.el
+
+(register-definition-prefixes "hierarchy" '("hierarchy-"))
;;;***
@@ -16497,6 +16700,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Highlight Changes is enabled, changes are marked with a text
property. Normally they are displayed in a distinctive face, but
command \\[highlight-changes-visible-mode] can be used to toggle
@@ -16522,6 +16728,9 @@ is positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and toggle
it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Highlight Changes Visible mode only has an effect when Highlight
Changes mode is on. When enabled, the changed text is displayed
in a distinctive face.
@@ -16616,7 +16825,7 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hilit-chg" '("global-highlight-changes" "highlight-" "hilit-chg-")))
+(register-definition-prefixes "hilit-chg" '("highlight-" "hilit-chg-"))
;;;***
@@ -16649,7 +16858,7 @@ argument VERBOSE non-nil makes the function verbose.
\(fn TRY-LIST &optional VERBOSE)" nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hippie-exp" '("he-" "hippie-expand-" "try-")))
+(register-definition-prefixes "hippie-exp" '("he-" "hippie-expand-" "try-"))
;;;***
@@ -16664,6 +16873,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Hl-Line mode is a buffer-local minor mode. If
`hl-line-sticky-flag' is non-nil, Hl-Line mode highlights the
line about the buffer's point in all windows. Caveat: the
@@ -16696,6 +16908,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
If `global-hl-line-sticky-flag' is non-nil, Global Hl-Line mode
highlights the line about the current buffer's point in all live
windows.
@@ -16705,21 +16920,21 @@ and `global-hl-line-maybe-unhighlight' on `post-command-hook'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hl-line" '("global-hl-line-" "hl-line-")))
+(register-definition-prefixes "hl-line" '("global-hl-line-" "hl-line-"))
;;;***
;;;### (autoloads nil "hmac-def" "net/hmac-def.el" (0 0 0 0))
;;; Generated autoloads from net/hmac-def.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hmac-def" '("define-hmac-function")))
+(register-definition-prefixes "hmac-def" '("define-hmac-function"))
;;;***
;;;### (autoloads nil "hmac-md5" "net/hmac-md5.el" (0 0 0 0))
;;; Generated autoloads from net/hmac-md5.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "hmac-md5" '("hmac-md5" "md5-binary")))
+(register-definition-prefixes "hmac-md5" '("hmac-md5" "md5-binary"))
;;;***
@@ -16831,7 +17046,7 @@ The optional LABEL is used to label the buffer created.
(defalias 'holiday-list 'list-holidays)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "holidays" '("calendar-" "holiday-")))
+(register-definition-prefixes "holidays" '("calendar-" "holiday-"))
;;;***
@@ -16867,7 +17082,7 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'.
\(fn SRCDIR DSTDIR &optional F-EXT L-EXT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "htmlfontify" '("hfy-" "htmlfontify-")))
+(register-definition-prefixes "htmlfontify" '("hfy-" "htmlfontify-"))
;;;***
@@ -16875,7 +17090,7 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from ibuf-ext.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ibuf-ext" '("alphabetic" "basename" "content" "derived-mode" "directory" "eval" "file" "ibuffer-" "major-mode" "mod" "name" "predicate" "print" "process" "query-replace" "rename-uniquely" "replace-regexp" "revert" "shell-command-" "size" "starred-name" "used-mode" "view-and-eval" "visiting-file")))
+(register-definition-prefixes "ibuf-ext" '("alphabetic" "basename" "content" "derived-mode" "directory" "eval" "file" "ibuffer-" "major-mode" "mod" "name" "predicate" "print" "process" "query-replace" "rename-uniquely" "replace-regexp" "revert" "shell-command-" "size" "starred-name" "used-mode" "view-and-eval" "visiting-file"))
;;;***
@@ -16989,7 +17204,7 @@ bound to the current value of the filter.
(function-put 'define-ibuffer-filter 'doc-string-elt '2)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ibuf-macs" '("ibuffer-")))
+(register-definition-prefixes "ibuf-macs" '("ibuffer-"))
;;;***
@@ -17036,7 +17251,7 @@ If optional arg OTHER-WINDOW is non-nil, then use another window.
\(fn &optional OTHER-WINDOW)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ibuffer" '("filename" "ibuffer-" "locked" "mark" "mod" "name" "process" "read-only" "size")))
+(register-definition-prefixes "ibuffer" '("filename" "ibuffer-" "locked" "mark" "mod" "name" "process" "read-only" "size"))
;;;***
@@ -17091,7 +17306,7 @@ buffer `*icalendar-errors*'.
\(fn &optional DIARY-FILENAME DO-NOT-ASK NON-MARKING)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "icalendar" '("icalendar-")))
+(register-definition-prefixes "icalendar" '("icalendar-"))
;;;***
@@ -17116,6 +17331,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
This global minor mode makes minibuffer completion behave
more like `ido-mode' than regular `icomplete-mode'.
@@ -17139,6 +17357,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When this global minor mode is enabled, typing in the minibuffer
continuously displays a list of possible completions that match
the string you have typed. See `icomplete-completions' for a
@@ -17158,7 +17379,7 @@ completions:
(make-obsolete 'iswitchb-mode
"use `icomplete-mode' or `ido-mode' instead." "24.4"))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "icomplete" '("icomplete-")))
+(register-definition-prefixes "icomplete" '("icomplete-"))
;;;***
@@ -17200,7 +17421,7 @@ with no args, if that value is non-nil.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "icon" '("beginning-of-icon-defun" "calculate-icon-indent" "electric-icon-brace" "end-of-icon-defun" "icon-" "indent-icon-exp" "mark-icon-function")))
+(register-definition-prefixes "icon" '("beginning-of-icon-defun" "calculate-icon-indent" "electric-icon-brace" "end-of-icon-defun" "icon-" "indent-icon-exp" "mark-icon-function"))
;;;***
@@ -17208,7 +17429,7 @@ with no args, if that value is non-nil.
;;;;;; (0 0 0 0))
;;; Generated autoloads from progmodes/idlw-complete-structtag.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "idlw-complete-structtag" '("idlwave-")))
+(register-definition-prefixes "idlw-complete-structtag" '("idlwave-"))
;;;***
@@ -17216,7 +17437,7 @@ with no args, if that value is non-nil.
;;;;;; 0))
;;; Generated autoloads from progmodes/idlw-help.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "idlw-help" '("idlwave-")))
+(register-definition-prefixes "idlw-help" '("idlwave-"))
;;;***
@@ -17244,7 +17465,7 @@ See also the variable `idlwave-shell-prompt-pattern'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "idlw-shell" '("idlwave-")))
+(register-definition-prefixes "idlw-shell" '("idlwave-"))
;;;***
@@ -17252,7 +17473,7 @@ See also the variable `idlwave-shell-prompt-pattern'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from progmodes/idlw-toolbar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "idlw-toolbar" '("idlwave-toolbar-")))
+(register-definition-prefixes "idlw-toolbar" '("idlwave-toolbar-"))
;;;***
@@ -17382,7 +17603,7 @@ The main features of this mode are
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "idlwave" '("idlwave-")))
+(register-definition-prefixes "idlwave" '("idlwave-"))
;;;***
@@ -17642,7 +17863,7 @@ DEF, if non-nil, is the default value.
\(fn PROMPT CHOICES &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ido" '("ido-")))
+(register-definition-prefixes "ido" '("ido-"))
;;;***
@@ -17657,14 +17878,14 @@ See `inferior-emacs-lisp-mode' for details.
\(fn &optional BUF-NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ielm" '("ielm-" "inferior-emacs-lisp-mode")))
+(register-definition-prefixes "ielm" '("ielm-" "inferior-emacs-lisp-mode"))
;;;***
;;;### (autoloads nil "ietf-drums" "mail/ietf-drums.el" (0 0 0 0))
;;; Generated autoloads from mail/ietf-drums.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ietf-drums" '("ietf-drums-")))
+(register-definition-prefixes "ietf-drums" '("ietf-drums-"))
;;;***
@@ -17681,11 +17902,14 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\{iimage-mode-map}
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iimage" '("iimage-" "turn-off-iimage-mode")))
+(register-definition-prefixes "iimage" '("iimage-" "turn-off-iimage-mode"))
;;;***
@@ -17885,7 +18109,7 @@ recognizes these files as having image type `imagemagick'.
If Emacs is compiled without ImageMagick support, this does nothing." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image" '("image" "unknown-image-type")))
+(register-definition-prefixes "image" '("image" "unknown-image-type"))
;;;***
@@ -17893,7 +18117,7 @@ If Emacs is compiled without ImageMagick support, this does nothing." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from image/image-converter.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image-converter" '("image-convert")))
+(register-definition-prefixes "image-converter" '("image-convert"))
;;;***
@@ -17989,6 +18213,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(define-obsolete-function-alias 'image-dired-setup-dired-keybindings 'image-dired-minor-mode "26.1")
@@ -18025,7 +18252,7 @@ Edit comment and tags of current or marked image files.
Edit comment and tags for all marked image files in an
easy-to-use form." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image-dired" '("image-dired-")))
+(register-definition-prefixes "image-dired" '("image-dired-"))
;;;***
@@ -18085,13 +18312,16 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
An image file is one whose name has an extension in
`image-file-name-extensions', or matches a regexp in
`image-file-name-regexps'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image-file" '("image-file-")))
+(register-definition-prefixes "image-file" '("image-file-"))
;;;***
@@ -18114,6 +18344,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Image minor mode provides the key \\<image-mode-map>\\[image-toggle-display],
to switch back to `image-mode' and display an image file as the
actual image.
@@ -18130,14 +18363,14 @@ displays an image file as text." nil nil)
\(fn BMK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "image-mode" '("image-")))
+(register-definition-prefixes "image-mode" '("image-"))
;;;***
;;;### (autoloads nil "imap" "net/imap.el" (0 0 0 0))
;;; Generated autoloads from net/imap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "imap" '("imap-")))
+(register-definition-prefixes "imap" '("imap-"))
;;;***
@@ -18275,7 +18508,7 @@ for more information.
\(fn INDEX-ITEM)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "imenu" '("imenu-")))
+(register-definition-prefixes "imenu" '("imenu-"))
;;;***
@@ -18307,7 +18540,7 @@ Convert old Emacs Devanagari characters to UCS.
\(fn FROM TO)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ind-util" '("indian-" "is13194-")))
+(register-definition-prefixes "ind-util" '("indian-" "is13194-"))
;;;***
@@ -18327,7 +18560,7 @@ of `inferior-lisp-program'). Runs the hooks from
(defalias 'run-lisp 'inferior-lisp)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "inf-lisp" '("inferior-lisp-" "lisp-" "switch-to-lisp")))
+(register-definition-prefixes "inf-lisp" '("inferior-lisp-" "lisp-" "switch-to-lisp"))
;;;***
@@ -18532,7 +18765,7 @@ completion alternatives to currently visited manuals.
\(fn MANUAL)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "info" '("Info-" "info-")))
+(register-definition-prefixes "info" '("Info-" "info-"))
;;;***
@@ -18579,7 +18812,7 @@ Perform completion on file preceding point.
\(fn &optional MODE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "info-look" '("info-")))
+(register-definition-prefixes "info-look" '("info-"))
;;;***
@@ -18660,7 +18893,7 @@ the sources handy.
\(fn FILENAME-LIST)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "info-xref" '("info-xref-")))
+(register-definition-prefixes "info-xref" '("info-xref-"))
;;;***
@@ -18701,7 +18934,7 @@ Must be used only with -batch, and kills Emacs on completion.
Each file will be processed even if an error occurred previously.
For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\"" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "informat" '("Info-validate-")))
+(register-definition-prefixes "informat" '("Info-validate-"))
;;;***
@@ -18720,7 +18953,7 @@ See Info node `(elisp)Defining Functions' for more details.
(function-put 'define-inline 'doc-string-elt '3)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "inline" '("inline-")))
+(register-definition-prefixes "inline" '("inline-"))
;;;***
@@ -18734,7 +18967,7 @@ Only checks one based on which kind of Emacs is being run.
\(fn EMACS-VER XEMACS-VER SXEMACS-VER)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "inversion" '("inversion-")))
+(register-definition-prefixes "inversion" '("inversion-"))
;;;***
@@ -18753,7 +18986,7 @@ Toggle input method in interactive search." t nil)
\(fn LAST-CHAR &optional COUNT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "isearch-x" '("isearch-")))
+(register-definition-prefixes "isearch-x" '("isearch-"))
;;;***
@@ -18767,7 +19000,7 @@ Executing this command again will terminate the search; or, if
the search has not yet begun, will toggle to the last buffer
accessed via isearchb." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "isearchb" '("isearchb")))
+(register-definition-prefixes "isearchb" '("isearchb"))
;;;***
@@ -18775,7 +19008,7 @@ accessed via isearchb." t nil)
;;;;;; 0 0 0))
;;; Generated autoloads from international/iso-ascii.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iso-ascii" '("iso-ascii-")))
+(register-definition-prefixes "iso-ascii" '("iso-ascii-"))
;;;***
@@ -18866,7 +19099,7 @@ Warn that format is write-only.
(autoload 'iso-cvt-define-menu "iso-cvt" "\
Add submenus to the File menu, to convert to and from various formats." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iso-cvt" '("iso-")))
+(register-definition-prefixes "iso-cvt" '("iso-"))
;;;***
@@ -18876,14 +19109,14 @@ Add submenus to the File menu, to convert to and from various formats." t nil)
(define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
(autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iso-transl" '("iso-transl-")))
+(register-definition-prefixes "iso-transl" '("iso-transl-"))
;;;***
;;;### (autoloads nil "iso8601" "calendar/iso8601.el" (0 0 0 0))
;;; Generated autoloads from calendar/iso8601.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "iso8601" '("iso8601-")))
+(register-definition-prefixes "iso8601" '("iso8601-"))
;;;***
@@ -19016,7 +19249,16 @@ amount for last line processed.
\(fn REG-START REG-END &optional RECHECKP SHIFT)" t nil)
(autoload 'ispell-comments-and-strings "ispell" "\
-Check comments and strings in the current buffer for spelling errors." t nil)
+Check comments and strings in the current buffer for spelling errors.
+If called interactively with an active region, check only comments and
+strings in the region.
+When called from Lisp, START and END buffer positions can be provided
+to limit the check.
+
+\(fn &optional START END)" t nil)
+
+(autoload 'ispell-comment-or-string-at-point "ispell" "\
+Check the comment or string containing point for spelling errors." t nil)
(autoload 'ispell-buffer "ispell" "\
Check the current buffer for spelling errors interactively." t nil)
@@ -19060,6 +19302,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Ispell minor mode is a buffer-local minor mode. When enabled,
typing SPC or RET warns you if the previous word is incorrectly
spelled.
@@ -19093,7 +19338,7 @@ You can bind this to the key C-c i in GNUS or mail by adding to
`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
(function (lambda () (local-set-key \"\\C-ci\" \\='ispell-message)))" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ispell" '("check-ispell-version" "ispell-")))
+(register-definition-prefixes "ispell" '("check-ispell-version" "ispell-"))
;;;***
@@ -19101,7 +19346,7 @@ You can bind this to the key C-c i in GNUS or mail by adding to
;;;;;; (0 0 0 0))
;;; Generated autoloads from international/ja-dic-cnv.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ja-dic-cnv" '("batch-skkdic-convert" "ja-dic-filename" "skkdic-")))
+(register-definition-prefixes "ja-dic-cnv" '("batch-skkdic-convert" "ja-dic-filename" "skkdic-"))
;;;***
@@ -19109,7 +19354,7 @@ You can bind this to the key C-c i in GNUS or mail by adding to
;;;;;; (0 0 0 0))
;;; Generated autoloads from international/ja-dic-utl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ja-dic-utl" '("skkdic-")))
+(register-definition-prefixes "ja-dic-utl" '("skkdic-"))
;;;***
@@ -19186,7 +19431,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
\(fn PROMPT &optional INITIAL-INPUT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "japan-util" '("japanese-")))
+(register-definition-prefixes "japan-util" '("japanese-"))
;;;***
@@ -19209,7 +19454,7 @@ This removes the entries in `file-name-handler-alist' and `auto-mode-alist'
and `inhibit-local-variables-suffixes' that were added
by `jka-compr-installed'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "jka-compr" '("compression-error" "jka-compr-")))
+(register-definition-prefixes "jka-compr" '("compression-error" "jka-compr-"))
;;;***
@@ -19240,7 +19485,7 @@ one of the aforementioned options instead of using this mode.
(dolist (name (list "node" "nodejs" "gjs" "rhino")) (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'js-mode)))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "js" '("js-" "with-js")))
+(register-definition-prefixes "js" '("js-" "with-js"))
;;;***
@@ -19248,7 +19493,7 @@ one of the aforementioned options instead of using this mode.
;;; Generated autoloads from json.el
(push (purecopy '(json 1 5)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "json" '("json-")))
+(register-definition-prefixes "json" '("json-"))
;;;***
@@ -19256,14 +19501,14 @@ one of the aforementioned options instead of using this mode.
;;; Generated autoloads from jsonrpc.el
(push (purecopy '(jsonrpc 1 0 12)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "jsonrpc" '("jrpc-default-request-timeout" "jsonrpc-")))
+(register-definition-prefixes "jsonrpc" '("jsonrpc-"))
;;;***
;;;### (autoloads nil "kermit" "kermit.el" (0 0 0 0))
;;; Generated autoloads from kermit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "kermit" '("kermit-")))
+(register-definition-prefixes "kermit" '("kermit-"))
;;;***
@@ -19342,7 +19587,7 @@ the context of text formatting.
\(fn LINEBEG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "kinsoku" '("kinsoku-")))
+(register-definition-prefixes "kinsoku" '("kinsoku-"))
;;;***
@@ -19366,7 +19611,7 @@ and the return value is the length of the conversion.
\(fn FROM TO)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "kkc" '("kkc-")))
+(register-definition-prefixes "kkc" '("kkc-"))
;;;***
@@ -19490,7 +19735,7 @@ Create lambda form for macro bound to symbol or key.
\(fn MAC &optional COUNTER FORMAT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "kmacro" '("kmacro-")))
+(register-definition-prefixes "kmacro" '("kmacro-"))
;;;***
@@ -19504,7 +19749,7 @@ The kind of Korean keyboard for Korean input method.
(autoload 'setup-korean-environment-internal "korea-util" nil nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "korea-util" '("exit-korean-environment" "isearch-" "korean-key-bindings" "quail-hangul-switch-" "toggle-korean-input-method")))
+(register-definition-prefixes "korea-util" '("exit-korean-environment" "isearch-" "korean-key-bindings" "quail-hangul-switch-" "toggle-korean-input-method"))
;;;***
@@ -19543,7 +19788,7 @@ Transcribe Romanized Lao string STR to Lao character string.
\(fn FROM TO)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lao-util" '("lao-")))
+(register-definition-prefixes "lao-util" '("lao-"))
;;;***
@@ -19577,7 +19822,7 @@ coding system names is determined from `latex-inputenc-coding-alist'.
\(fn ARG-LIST)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "latexenc" '("latexenc-dont-use-")))
+(register-definition-prefixes "latexenc" '("latexenc-dont-use-"))
;;;***
@@ -19621,7 +19866,7 @@ use either \\[customize] or the function `latin1-display'.")
(custom-autoload 'latin1-display-ucs-per-lynx "latin1-disp" nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "latin1-disp" '("latin1-display-")))
+(register-definition-prefixes "latin1-disp" '("latin1-display-"))
;;;***
@@ -19634,14 +19879,14 @@ A major mode to edit GNU ld script files
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ld-script" '("ld-script-")))
+(register-definition-prefixes "ld-script" '("ld-script-"))
;;;***
;;;### (autoloads nil "ldap" "net/ldap.el" (0 0 0 0))
;;; Generated autoloads from net/ldap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ldap" '("ldap-")))
+(register-definition-prefixes "ldap" '("ldap-"))
;;;***
@@ -19649,7 +19894,7 @@ A major mode to edit GNU ld script files
;;;;;; (0 0 0 0))
;;; Generated autoloads from gnus/legacy-gnus-agent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "legacy-gnus-agent" '("gnus-agent-")))
+(register-definition-prefixes "legacy-gnus-agent" '("gnus-agent-"))
;;;***
@@ -19673,7 +19918,7 @@ Special commands:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "less-css-mode" '("less-css-")))
+(register-definition-prefixes "less-css-mode" '("less-css-"))
;;;***
@@ -19715,7 +19960,7 @@ displayed in the example above.
(function-put 'let-alist 'lisp-indent-function '1)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "let-alist" '("let-alist--")))
+(register-definition-prefixes "let-alist" '("let-alist--"))
;;;***
@@ -19724,13 +19969,17 @@ displayed in the example above.
(autoload 'life "life" "\
Run Conway's Life simulation.
-The starting pattern is randomly selected. Prefix arg (optional first
-arg non-nil from a program) is the number of seconds to sleep between
-generations (this defaults to 1).
+The starting pattern is randomly selected from `life-patterns'.
-\(fn &optional SLEEPTIME)" t nil)
+Prefix arg is the number of tenths of a second to sleep between
+generations (the default is `life-step-time').
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "life" '("life-")))
+When called from Lisp, optional argument STEP-TIME is the time to
+sleep in seconds.
+
+\(fn &optional STEP-TIME)" t nil)
+
+(register-definition-prefixes "life" '("life-"))
;;;***
@@ -19745,6 +19994,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Linum mode is a buffer-local minor mode.
\(fn &optional ARG)" t nil)
@@ -19773,7 +20025,7 @@ See `linum-mode' for more information on Linum mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "linum" '("linum-")))
+(register-definition-prefixes "linum" '("linum-"))
;;;***
@@ -19781,7 +20033,7 @@ See `linum-mode' for more information on Linum mode.
;;;;;; 0))
;;; Generated autoloads from emacs-lisp/lisp-mnt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lisp-mnt" '("lm-")))
+(register-definition-prefixes "lisp-mnt" '("lm-"))
;;;***
@@ -19814,7 +20066,7 @@ something strange, such as redefining an Emacs function.
\(fn FEATURE &optional FORCE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "loadhist" '("feature-" "file-" "loadhist-" "read-feature" "unload-")))
+(register-definition-prefixes "loadhist" '("feature-" "file-" "loadhist-" "read-feature" "unload-"))
;;;***
@@ -19868,7 +20120,7 @@ except that FILTER is not optional.
\(fn SEARCH-STRING FILTER &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "locate" '("locate-")))
+(register-definition-prefixes "locate" '("locate-"))
;;;***
@@ -19901,7 +20153,7 @@ done. Otherwise, it uses the current buffer.
\(fn CALLBACK &optional SETUP PARAMS BUFFER MODE &rest IGNORE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "log-edit" '("log-edit-")))
+(register-definition-prefixes "log-edit" '("log-edit-"))
;;;***
@@ -19913,7 +20165,7 @@ Major mode for browsing CVS log output.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "log-view" '("log-view-")))
+(register-definition-prefixes "log-view" '("log-view-"))
;;;***
@@ -20006,7 +20258,7 @@ for further customization of the printer command.
\(fn START END)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lpr" '("lpr-" "print")))
+(register-definition-prefixes "lpr" '("lpr-" "print"))
;;;***
@@ -20019,7 +20271,7 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).")
(custom-autoload 'ls-lisp-support-shell-wildcards "ls-lisp" t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ls-lisp" '("ls-lisp-")))
+(register-definition-prefixes "ls-lisp" '("ls-lisp-"))
;;;***
@@ -20033,7 +20285,7 @@ This function is suitable for execution in an init file.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lunar" '("calendar-lunar-phases" "diary-lunar-phases" "eclipse-check" "lunar-")))
+(register-definition-prefixes "lunar" '("calendar-lunar-phases" "diary-lunar-phases" "eclipse-check" "lunar-"))
;;;***
@@ -20045,7 +20297,7 @@ A major mode to edit m4 macro files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "m4-mode" '("m4-")))
+(register-definition-prefixes "m4-mode" '("m4-"))
;;;***
@@ -20130,7 +20382,7 @@ and then select the region of un-tablified names and use
\(fn TOP BOTTOM &optional MACRO)" t nil)
(define-key ctl-x-map "q" 'kbd-macro-query)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "macros" '("macros--insert-vector-macro")))
+(register-definition-prefixes "macros" '("macros--insert-vector-macro"))
;;;***
@@ -20169,7 +20421,7 @@ Convert mail domain DOMAIN to the country it corresponds to.
\(fn DOMAIN)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-extr" '("mail-extr-")))
+(register-definition-prefixes "mail-extr" '("mail-extr-"))
;;;***
@@ -20193,21 +20445,21 @@ message.
This function normally would be called when the message is sent." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-hist" '("mail-hist-")))
+(register-definition-prefixes "mail-hist" '("mail-hist-"))
;;;***
;;;### (autoloads nil "mail-parse" "mail/mail-parse.el" (0 0 0 0))
;;; Generated autoloads from mail/mail-parse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-parse" '("mail-")))
+(register-definition-prefixes "mail-parse" '("mail-"))
;;;***
;;;### (autoloads nil "mail-prsvr" "mail/mail-prsvr.el" (0 0 0 0))
;;; Generated autoloads from mail/mail-prsvr.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-prsvr" '("mail-parse-")))
+(register-definition-prefixes "mail-prsvr" '("mail-parse-"))
;;;***
@@ -20215,7 +20467,7 @@ This function normally would be called when the message is sent." nil nil)
;;;;;; 0))
;;; Generated autoloads from gnus/mail-source.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-source" '("mail-source")))
+(register-definition-prefixes "mail-source" '("mail-source"))
;;;***
@@ -20293,7 +20545,7 @@ matches may be returned from the message body.
\(fn FIELD-NAME &optional LAST ALL LIST DELETE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mail-utils" '("mail-")))
+(register-definition-prefixes "mail-utils" '("mail-"))
;;;***
@@ -20318,6 +20570,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Mail Abbrevs mode is a global minor mode. When enabled,
abbrev-like expansion is performed when editing certain mail
headers (those specified by `mail-abbrev-mode-regexp'), based on
@@ -20345,7 +20600,7 @@ double-quotes.
\(fn NAME DEFINITION &optional FROM-MAILRC-FILE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailabbrev" '("mail-" "merge-mail-abbrevs" "rebuild-mail-abbrevs")))
+(register-definition-prefixes "mailabbrev" '("mail-" "merge-mail-abbrevs" "rebuild-mail-abbrevs"))
;;;***
@@ -20398,14 +20653,14 @@ current header, calls `mail-complete-function' and passes prefix ARG if any.
(make-obsolete 'mail-complete 'mail-completion-at-point-function '"24.1")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailalias" '("build-mail-aliases" "mail-")))
+(register-definition-prefixes "mailalias" '("build-mail-aliases" "mail-"))
;;;***
;;;### (autoloads nil "mailcap" "net/mailcap.el" (0 0 0 0))
;;; Generated autoloads from net/mailcap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailcap" '("mailcap-")))
+(register-definition-prefixes "mailcap" '("mailcap-"))
;;;***
@@ -20417,21 +20672,21 @@ Pass current buffer on to the system's mail client.
Suitable value for `send-mail-function'.
The mail client is taken to be the handler of mailto URLs." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailclient" '("mailclient-")))
+(register-definition-prefixes "mailclient" '("mailclient-"))
;;;***
;;;### (autoloads nil "mailheader" "mail/mailheader.el" (0 0 0 0))
;;; Generated autoloads from mail/mailheader.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mailheader" '("mail-header")))
+(register-definition-prefixes "mailheader" '("mail-header"))
;;;***
;;;### (autoloads nil "mairix" "net/mairix.el" (0 0 0 0))
;;; Generated autoloads from net/mairix.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mairix" '("mairix-")))
+(register-definition-prefixes "mairix" '("mairix-"))
;;;***
@@ -20551,14 +20806,14 @@ An adapted `makefile-mode' that knows about imake.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "make-mode" '("makefile-")))
+(register-definition-prefixes "make-mode" '("makefile-"))
;;;***
;;;### (autoloads nil "makeinfo" "textmodes/makeinfo.el" (0 0 0 0))
;;; Generated autoloads from textmodes/makeinfo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "makeinfo" '("makeinfo-")))
+(register-definition-prefixes "makeinfo" '("makeinfo-"))
;;;***
@@ -20569,14 +20824,14 @@ An adapted `makefile-mode' that knows about imake.
Make a summary of current key bindings in the buffer *Summary*.
Previous contents of that buffer are killed first." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "makesum" '("double-column")))
+(register-definition-prefixes "makesum" '("double-column"))
;;;***
;;;### (autoloads nil "man" "man.el" (0 0 0 0))
;;; Generated autoloads from man.el
-(define-obsolete-function-alias 'manual-entry 'man "28.1")
+(defalias 'manual-entry 'man)
(autoload 'man "man" "\
Get a Un*x manual page and put it in a buffer.
@@ -20631,7 +20886,7 @@ Default bookmark handler for Man buffers.
\(fn BOOKMARK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "man" '("Man-" "man")))
+(register-definition-prefixes "man" '("Man-" "man"))
;;;***
@@ -20639,7 +20894,7 @@ Default bookmark handler for Man buffers.
;;; Generated autoloads from emacs-lisp/map.el
(push (purecopy '(map 2 1)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "map" '("map-")))
+(register-definition-prefixes "map" '("map-"))
;;;***
@@ -20654,6 +20909,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Master mode is enabled, you can scroll the slave buffer
using the following commands:
@@ -20665,7 +20923,7 @@ yourself the value of `master-of' by calling `master-show-slave'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "master" '("master-")))
+(register-definition-prefixes "master" '("master-"))
;;;***
@@ -20690,6 +20948,9 @@ is positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and toggle
it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Minibuffer Depth Indication mode is a global minor mode. When
enabled, any recursive use of the minibuffer will show the
recursion depth in the minibuffer prompt. This is only useful if
@@ -20697,7 +20958,7 @@ recursion depth in the minibuffer prompt. This is only useful if
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mb-depth" '("minibuffer-depth-")))
+(register-definition-prefixes "mb-depth" '("minibuffer-depth-"))
;;;***
@@ -20705,7 +20966,7 @@ recursion depth in the minibuffer prompt. This is only useful if
;;; Generated autoloads from md4.el
(push (purecopy '(md4 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "md4" '("md4")))
+(register-definition-prefixes "md4" '("md4"))
;;;***
@@ -20831,7 +21092,13 @@ which specify the range to operate on.
\(fn START END)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "message" '("message-" "nil")))
+(autoload 'message-mailto "message" "\
+Command to parse command line mailto: links.
+This is meant to be used for MIME handlers: Setting the handler
+for \"x-scheme-handler/mailto;\" to \"emacs -f message-mailto %u\"
+will then start up Emacs ready to compose mail." t nil)
+
+(register-definition-prefixes "message" '("message-" "nil"))
;;;***
@@ -20850,28 +21117,28 @@ Major mode for editing MetaPost sources.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "meta-mode" '("font-lock-match-meta-declaration-item-and-skip-to-next" "meta")))
+(register-definition-prefixes "meta-mode" '("font-lock-match-meta-declaration-item-and-skip-to-next" "meta"))
;;;***
;;;### (autoloads nil "mh-acros" "mh-e/mh-acros.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-acros.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-acros" '("defmacro-mh" "defun-mh" "mh-" "with-mh-folder-updating")))
+(register-definition-prefixes "mh-acros" '("defmacro-mh" "defun-mh" "mh-" "with-mh-folder-updating"))
;;;***
;;;### (autoloads nil "mh-alias" "mh-e/mh-alias.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-alias.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-alias" '("mh-")))
+(register-definition-prefixes "mh-alias" '("mh-"))
;;;***
;;;### (autoloads nil "mh-buffers" "mh-e/mh-buffers.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-buffers.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-buffers" '("mh-")))
+(register-definition-prefixes "mh-buffers" '("mh-"))
;;;***
@@ -20956,14 +21223,14 @@ this command to kill the draft buffer and delete the draft
message. Use the command \\[kill-buffer] if you don't want to
delete the draft message." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-comp" '("mh-")))
+(register-definition-prefixes "mh-comp" '("mh-"))
;;;***
;;;### (autoloads nil "mh-compat" "mh-e/mh-compat.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-compat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-compat" '("mh-")))
+(register-definition-prefixes "mh-compat" '("mh-"))
;;;***
@@ -20980,7 +21247,7 @@ delete the draft message." t nil)
(autoload 'mh-version "mh-e" "\
Display version information about MH-E and the MH mail handling system." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-e" '("defcustom-mh" "defface-mh" "defgroup-mh" "mh-")))
+(register-definition-prefixes "mh-e" '("defcustom-mh" "defface-mh" "defgroup-mh" "mh-"))
;;;***
@@ -21063,14 +21330,14 @@ perform the operation on all messages in that region.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-folder" '("mh-")))
+(register-definition-prefixes "mh-folder" '("mh-"))
;;;***
;;;### (autoloads nil "mh-funcs" "mh-e/mh-funcs.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-funcs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-funcs" '("mh-")))
+(register-definition-prefixes "mh-funcs" '("mh-"))
;;;***
@@ -21078,91 +21345,91 @@ perform the operation on all messages in that region.
;;;;;; 0))
;;; Generated autoloads from mh-e/mh-identity.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-identity" '("mh-")))
+(register-definition-prefixes "mh-identity" '("mh-"))
;;;***
;;;### (autoloads nil "mh-inc" "mh-e/mh-inc.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-inc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-inc" '("mh-inc-spool-")))
+(register-definition-prefixes "mh-inc" '("mh-inc-spool-"))
;;;***
;;;### (autoloads nil "mh-junk" "mh-e/mh-junk.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-junk.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-junk" '("mh-")))
+(register-definition-prefixes "mh-junk" '("mh-"))
;;;***
;;;### (autoloads nil "mh-letter" "mh-e/mh-letter.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-letter.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-letter" '("mh-")))
+(register-definition-prefixes "mh-letter" '("mh-"))
;;;***
;;;### (autoloads nil "mh-limit" "mh-e/mh-limit.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-limit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-limit" '("mh-")))
+(register-definition-prefixes "mh-limit" '("mh-"))
;;;***
;;;### (autoloads nil "mh-mime" "mh-e/mh-mime.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-mime.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-mime" '("mh-")))
+(register-definition-prefixes "mh-mime" '("mh-"))
;;;***
;;;### (autoloads nil "mh-print" "mh-e/mh-print.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-print.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-print" '("mh-p")))
+(register-definition-prefixes "mh-print" '("mh-p"))
;;;***
;;;### (autoloads nil "mh-scan" "mh-e/mh-scan.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-scan.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-scan" '("mh-")))
+(register-definition-prefixes "mh-scan" '("mh-"))
;;;***
;;;### (autoloads nil "mh-search" "mh-e/mh-search.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-search.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-search" '("mh-")))
+(register-definition-prefixes "mh-search" '("mh-"))
;;;***
;;;### (autoloads nil "mh-seq" "mh-e/mh-seq.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-seq.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-seq" '("mh-")))
+(register-definition-prefixes "mh-seq" '("mh-"))
;;;***
;;;### (autoloads nil "mh-show" "mh-e/mh-show.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-show.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-show" '("mh-")))
+(register-definition-prefixes "mh-show" '("mh-"))
;;;***
;;;### (autoloads nil "mh-speed" "mh-e/mh-speed.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-speed.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-speed" '("mh-")))
+(register-definition-prefixes "mh-speed" '("mh-"))
;;;***
;;;### (autoloads nil "mh-thread" "mh-e/mh-thread.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-thread.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-thread" '("mh-")))
+(register-definition-prefixes "mh-thread" '("mh-"))
;;;***
@@ -21170,21 +21437,21 @@ perform the operation on all messages in that region.
;;;;;; 0))
;;; Generated autoloads from mh-e/mh-tool-bar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-tool-bar" '("mh-tool-bar-")))
+(register-definition-prefixes "mh-tool-bar" '("mh-tool-bar-"))
;;;***
;;;### (autoloads nil "mh-utils" "mh-e/mh-utils.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-utils.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-utils" '("mh-")))
+(register-definition-prefixes "mh-utils" '("mh-"))
;;;***
;;;### (autoloads nil "mh-xface" "mh-e/mh-xface.el" (0 0 0 0))
;;; Generated autoloads from mh-e/mh-xface.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mh-xface" '("mh-")))
+(register-definition-prefixes "mh-xface" '("mh-"))
;;;***
@@ -21201,7 +21468,7 @@ the rules from `css-mode'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mhtml-mode" '("mhtml-")))
+(register-definition-prefixes "mhtml-mode" '("mhtml-"))
;;;***
@@ -21226,6 +21493,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'clean-buffer-list "midnight" "\
@@ -21247,7 +21517,7 @@ to its second argument TM.
\(fn SYMB TM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "midnight" '("clean-buffer-list-" "midnight-")))
+(register-definition-prefixes "midnight" '("clean-buffer-list-" "midnight-"))
;;;***
@@ -21272,6 +21542,9 @@ ARG is positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and toggle
it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Minibuffer Electric Default mode is a global minor mode. When
enabled, minibuffer prompts that show a default value only show
the default when it's applicable -- that is, when hitting RET
@@ -21281,7 +21554,7 @@ is modified to remove the default indication.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "minibuf-eldef" '("minibuf")))
+(register-definition-prefixes "minibuf-eldef" '("minibuf"))
;;;***
@@ -21348,7 +21621,7 @@ The return value is always nil.
\(fn &optional LOADED-ONLY-P BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "misc" '("list-dynamic-libraries--")))
+(register-definition-prefixes "misc" '("list-dynamic-libraries--"))
;;;***
@@ -21436,7 +21709,7 @@ whose file names match the specified wildcard.
\(fn FILES)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "misearch" '("misearch-unload-function" "multi-isearch-")))
+(register-definition-prefixes "misearch" '("misearch-unload-function" "multi-isearch-"))
;;;***
@@ -21450,28 +21723,28 @@ Major mode for the mixal asm language.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mixal-mode" '("mixal-")))
+(register-definition-prefixes "mixal-mode" '("mixal-"))
;;;***
;;;### (autoloads nil "mm-archive" "gnus/mm-archive.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-archive.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-archive" '("mm-")))
+(register-definition-prefixes "mm-archive" '("mm-"))
;;;***
;;;### (autoloads nil "mm-bodies" "gnus/mm-bodies.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-bodies.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-bodies" '("mm-")))
+(register-definition-prefixes "mm-bodies" '("mm-"))
;;;***
;;;### (autoloads nil "mm-decode" "gnus/mm-decode.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-decode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-decode" '("mm-")))
+(register-definition-prefixes "mm-decode" '("mm-"))
;;;***
@@ -21483,7 +21756,7 @@ Return a default encoding for FILE.
\(fn FILE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-encode" '("mm-")))
+(register-definition-prefixes "mm-encode" '("mm-"))
;;;***
@@ -21503,7 +21776,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
\(fn HANDLE &optional NO-DISPLAY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-extern" '("mm-extern-")))
+(register-definition-prefixes "mm-extern" '("mm-extern-"))
;;;***
@@ -21518,7 +21791,7 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
\(fn HANDLE &optional NO-DISPLAY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-partial" '("mm-partial-find-parts")))
+(register-definition-prefixes "mm-partial" '("mm-partial-find-parts"))
;;;***
@@ -21536,14 +21809,14 @@ Insert file contents of URL using `mm-url-program'.
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-url" '("mm-url-")))
+(register-definition-prefixes "mm-url" '("mm-url-"))
;;;***
;;;### (autoloads nil "mm-util" "gnus/mm-util.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-util" '("mm-")))
+(register-definition-prefixes "mm-util" '("mm-"))
;;;***
@@ -21564,14 +21837,14 @@ Assume text has been decoded if DECODED is non-nil.
\(fn HANDLE &optional DECODED)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-uu" '("mm-")))
+(register-definition-prefixes "mm-uu" '("mm-"))
;;;***
;;;### (autoloads nil "mm-view" "gnus/mm-view.el" (0 0 0 0))
;;; Generated autoloads from gnus/mm-view.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mm-view" '("mm-")))
+(register-definition-prefixes "mm-view" '("mm-"))
;;;***
@@ -21600,21 +21873,21 @@ will be computed and used.
\(fn FILE &optional TYPE DESCRIPTION DISPOSITION)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml" '("mime-to-mml" "mml-")))
+(register-definition-prefixes "mml" '("mime-to-mml" "mml-"))
;;;***
;;;### (autoloads nil "mml-sec" "gnus/mml-sec.el" (0 0 0 0))
;;; Generated autoloads from gnus/mml-sec.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml-sec" '("mml-")))
+(register-definition-prefixes "mml-sec" '("mml-"))
;;;***
;;;### (autoloads nil "mml-smime" "gnus/mml-smime.el" (0 0 0 0))
;;; Generated autoloads from gnus/mml-smime.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml-smime" '("mml-smime-")))
+(register-definition-prefixes "mml-smime" '("mml-smime-"))
;;;***
@@ -21631,7 +21904,7 @@ will be computed and used.
\(fn CONT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml1991" '("mml1991-")))
+(register-definition-prefixes "mml1991" '("mml1991-"))
;;;***
@@ -21670,7 +21943,7 @@ will be computed and used.
(autoload 'mml2015-self-encrypt "mml2015" nil nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mml2015" '("mml2015-")))
+(register-definition-prefixes "mml2015" '("mml2015-"))
;;;***
@@ -21679,7 +21952,7 @@ will be computed and used.
(put 'define-overloadable-function 'doc-string-elt 3)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mode-local" '("def" "describe-mode-local-bindings" "fetch-overload" "get-mode-local-parent" "make-obsolete-overload" "mode-local-" "setq-mode-local" "with-mode-local" "xref-mode-local-")))
+(register-definition-prefixes "mode-local" '("def" "describe-mode-local-bindings" "fetch-overload" "get-mode-local-parent" "make-obsolete-overload" "mode-local-" "setq-mode-local" "with-mode-local" "xref-mode-local-"))
;;;***
@@ -21714,7 +21987,7 @@ followed by the first character of the construct.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "modula2" '("m2-" "m3-font-lock-keywords")))
+(register-definition-prefixes "modula2" '("m2-" "m3-font-lock-keywords"))
;;;***
@@ -21741,14 +22014,14 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text.
\(fn BEG END)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "morse" '("morse-code" "nato-alphabet")))
+(register-definition-prefixes "morse" '("morse-code" "nato-alphabet"))
;;;***
;;;### (autoloads nil "mouse-copy" "mouse-copy.el" (0 0 0 0))
;;; Generated autoloads from mouse-copy.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mouse-copy" '("mouse-")))
+(register-definition-prefixes "mouse-copy" '("mouse-"))
;;;***
@@ -21797,7 +22070,7 @@ To test this function, evaluate:
\(fn START-EVENT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mouse-drag" '("mouse-")))
+(register-definition-prefixes "mouse-drag" '("mouse-"))
;;;***
@@ -21807,7 +22080,7 @@ To test this function, evaluate:
(autoload 'mpc "mpc" "\
Main entry point for MPC." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mpc" '("mpc-" "tag-browser-tagtypes")))
+(register-definition-prefixes "mpc" '("mpc-" "tag-browser-tagtypes"))
;;;***
@@ -21817,7 +22090,7 @@ Main entry point for MPC." t nil)
(autoload 'mpuz "mpuz" "\
Multiplication puzzle with GNU Emacs." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mpuz" '("mpuz-")))
+(register-definition-prefixes "mpuz" '("mpuz-"))
;;;***
@@ -21842,19 +22115,22 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
different buffer menu using the function `msb'.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "msb" '("mouse-select-buffer" "msb")))
+(register-definition-prefixes "msb" '("mouse-select-buffer" "msb"))
;;;***
;;;### (autoloads nil "mspools" "mail/mspools.el" (0 0 0 0))
;;; Generated autoloads from mail/mspools.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mspools" '("mspools-")))
+(register-definition-prefixes "mspools" '("mspools-"))
;;;***
@@ -21978,7 +22254,7 @@ The default is 20. If LIMIT is negative, do not limit the listing.
\(fn &optional LIMIT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mule-diag" '("charset-history" "describe-font-internal" "insert-section" "list-" "non-iso-charset-alist" "print-" "sort-listed-character-sets")))
+(register-definition-prefixes "mule-diag" '("charset-history" "describe-font-internal" "insert-section" "list-" "print-" "sort-listed-character-sets"))
;;;***
@@ -22085,15 +22361,6 @@ operations such as `find-coding-systems-region'.
\(fn CODING-SYSTEMS &rest BODY)" nil t)
(put 'with-coding-priority 'lisp-indent-function 1)
-(autoload 'detect-coding-with-priority "mule-util" "\
-Detect a coding system of the text between FROM and TO with PRIORITY-LIST.
-PRIORITY-LIST is an alist of coding categories vs the corresponding
-coding systems ordered by priority.
-
-\(fn FROM TO PRIORITY-LIST)" nil t)
-
-(make-obsolete 'detect-coding-with-priority 'with-coding-priority '"23.1")
-
(autoload 'detect-coding-with-language-environment "mule-util" "\
Detect a coding system for the text between FROM and TO with LANG-ENV.
The detection takes into account the coding system priorities for the
@@ -22129,14 +22396,14 @@ QUALITY can be:
\(fn POSITION &optional QUALITY CODING-SYSTEM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mule-util" '("filepos-to-bufferpos--dos" "truncate-string-ellipsis")))
+(register-definition-prefixes "mule-util" '("filepos-to-bufferpos--dos" "truncate-string-ellipsis"))
;;;***
;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0))
;;; Generated autoloads from mwheel.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "mwheel" '("mouse-wheel-" "mwheel-")))
+(register-definition-prefixes "mwheel" '("mouse-wheel-" "mwheel-"))
;;;***
@@ -22266,7 +22533,7 @@ Open a network connection to HOST on PORT.
\(fn HOST PORT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "net-utils" '("arp-program" "dig-program" "dns-lookup-program" "finger-X.500-host-regexps" "ftp-" "ifconfig-program" "ipconfig" "iwconfig-program" "net" "nslookup-" "ping-program" "route-program" "run-network-program" "smbclient" "traceroute-program" "whois-")))
+(register-definition-prefixes "net-utils" '("arp-program" "dig-program" "dns-lookup-program" "finger-X.500-host-regexps" "ftp-" "ifconfig-program" "ipconfig" "iwconfig-program" "net" "nslookup-" "ping-program" "route-program" "run-network-program" "smbclient" "traceroute-program" "whois-"))
;;;***
@@ -22280,7 +22547,7 @@ listed in the PORTS list.
\(fn MACHINE &rest PORTS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "netrc" '("netrc-")))
+(register-definition-prefixes "netrc" '("netrc-"))
;;;***
@@ -22398,7 +22665,7 @@ gnutls-boot (as returned by `gnutls-boot-parameters').
(defalias 'open-protocol-stream 'open-network-stream)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "network-stream" '("network-stream-")))
+(register-definition-prefixes "network-stream" '("network-stream-"))
;;;***
@@ -22420,7 +22687,7 @@ Run `newsticker-start-hook' if newsticker was not running already.
\(fn &optional DO-NOT-COMPLAIN-IF-RUNNING)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-backend" '("newsticker-")))
+(register-definition-prefixes "newst-backend" '("newsticker-"))
;;;***
@@ -22431,7 +22698,7 @@ Run `newsticker-start-hook' if newsticker was not running already.
(autoload 'newsticker-plainview "newst-plainview" "\
Start newsticker plainview." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-plainview" '("newsticker-")))
+(register-definition-prefixes "newst-plainview" '("newsticker-"))
;;;***
@@ -22442,7 +22709,7 @@ Start newsticker plainview." t nil)
(autoload 'newsticker-show-news "newst-reader" "\
Start reading news. You may want to bind this to a key." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-reader" '("newsticker-")))
+(register-definition-prefixes "newst-reader" '("newsticker-"))
;;;***
@@ -22461,7 +22728,7 @@ Start newsticker's ticker (but not the news retrieval).
Start display timer for the actual ticker if wanted and not
running already." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-ticker" '("newsticker-")))
+(register-definition-prefixes "newst-ticker" '("newsticker-"))
;;;***
@@ -22472,28 +22739,28 @@ running already." t nil)
(autoload 'newsticker-treeview "newst-treeview" "\
Start newsticker treeview." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newst-treeview" '("newsticker-")))
+(register-definition-prefixes "newst-treeview" '("newsticker-"))
;;;***
;;;### (autoloads nil "newsticker" "net/newsticker.el" (0 0 0 0))
;;; Generated autoloads from net/newsticker.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "newsticker" '("newsticker-version")))
+(register-definition-prefixes "newsticker" '("newsticker-version"))
;;;***
;;;### (autoloads nil "nnagent" "gnus/nnagent.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnagent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnagent" '("nnagent-")))
+(register-definition-prefixes "nnagent" '("nnagent-"))
;;;***
;;;### (autoloads nil "nnbabyl" "gnus/nnbabyl.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnbabyl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnbabyl" '("nnbabyl-")))
+(register-definition-prefixes "nnbabyl" '("nnbabyl-"))
;;;***
@@ -22505,14 +22772,14 @@ Generate NOV databases in all nndiary directories.
\(fn &optional SERVER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nndiary" '("nndiary-")))
+(register-definition-prefixes "nndiary" '("nndiary-"))
;;;***
;;;### (autoloads nil "nndir" "gnus/nndir.el" (0 0 0 0))
;;; Generated autoloads from gnus/nndir.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nndir" '("nndir-")))
+(register-definition-prefixes "nndir" '("nndir-"))
;;;***
@@ -22528,21 +22795,21 @@ symbol in the alist.
\(fn DEFINITION &optional POSITION)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nndoc" '("nndoc-")))
+(register-definition-prefixes "nndoc" '("nndoc-"))
;;;***
;;;### (autoloads nil "nndraft" "gnus/nndraft.el" (0 0 0 0))
;;; Generated autoloads from gnus/nndraft.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nndraft" '("nndraft-")))
+(register-definition-prefixes "nndraft" '("nndraft-"))
;;;***
;;;### (autoloads nil "nneething" "gnus/nneething.el" (0 0 0 0))
;;; Generated autoloads from gnus/nneething.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nneething" '("nneething-")))
+(register-definition-prefixes "nneething" '("nneething-"))
;;;***
@@ -22553,70 +22820,70 @@ symbol in the alist.
Look for mbox folders in the nnfolder directory and make them into groups.
This command does not work if you use short group names." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnfolder" '("nnfolder-")))
+(register-definition-prefixes "nnfolder" '("nnfolder-"))
;;;***
;;;### (autoloads nil "nngateway" "gnus/nngateway.el" (0 0 0 0))
;;; Generated autoloads from gnus/nngateway.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nngateway" '("nngateway-")))
+(register-definition-prefixes "nngateway" '("nngateway-"))
;;;***
;;;### (autoloads nil "nnheader" "gnus/nnheader.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnheader.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnheader" '("gnus-" "mail-header-" "make-mail-header" "nnheader-" "nntp-")))
+(register-definition-prefixes "nnheader" '("gnus-" "mail-header-" "make-mail-header" "nnheader-" "nntp-"))
;;;***
;;;### (autoloads nil "nnimap" "gnus/nnimap.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnimap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnimap" '("nnimap-")))
+(register-definition-prefixes "nnimap" '("nnimap-"))
;;;***
;;;### (autoloads nil "nnir" "gnus/nnir.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnir.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnir" '("gnus-" "nnir-")))
+(register-definition-prefixes "nnir" '("gnus-" "nnir-"))
;;;***
;;;### (autoloads nil "nnmail" "gnus/nnmail.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnmail.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnmail" '("nnmail-")))
+(register-definition-prefixes "nnmail" '("nnmail-"))
;;;***
;;;### (autoloads nil "nnmaildir" "gnus/nnmaildir.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnmaildir.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnmaildir" '("nnmaildir-")))
+(register-definition-prefixes "nnmaildir" '("nnmaildir-"))
;;;***
;;;### (autoloads nil "nnmairix" "gnus/nnmairix.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnmairix.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnmairix" '("nnmairix-")))
+(register-definition-prefixes "nnmairix" '("nnmairix-"))
;;;***
;;;### (autoloads nil "nnmbox" "gnus/nnmbox.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnmbox.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnmbox" '("nnmbox-")))
+(register-definition-prefixes "nnmbox" '("nnmbox-"))
;;;***
;;;### (autoloads nil "nnmh" "gnus/nnmh.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnmh.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnmh" '("nnmh-")))
+(register-definition-prefixes "nnmh" '("nnmh-"))
;;;***
@@ -22628,70 +22895,70 @@ Generate NOV databases in all nnml directories.
\(fn &optional SERVER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnml" '("nnml-")))
+(register-definition-prefixes "nnml" '("nnml-"))
;;;***
;;;### (autoloads nil "nnnil" "gnus/nnnil.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnnil.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnnil" '("nnnil-")))
+(register-definition-prefixes "nnnil" '("nnnil-"))
;;;***
;;;### (autoloads nil "nnoo" "gnus/nnoo.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnoo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnoo" '("deffoo" "defvoo" "nnoo-")))
+(register-definition-prefixes "nnoo" '("deffoo" "defvoo" "nnoo-"))
;;;***
;;;### (autoloads nil "nnregistry" "gnus/nnregistry.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnregistry.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnregistry" '("nnregistry-")))
+(register-definition-prefixes "nnregistry" '("nnregistry-"))
;;;***
;;;### (autoloads nil "nnrss" "gnus/nnrss.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnrss.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnrss" '("nnrss-")))
+(register-definition-prefixes "nnrss" '("nnrss-"))
;;;***
;;;### (autoloads nil "nnspool" "gnus/nnspool.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnspool.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnspool" '("news-inews-program" "nnspool-")))
+(register-definition-prefixes "nnspool" '("news-inews-program" "nnspool-"))
;;;***
;;;### (autoloads nil "nntp" "gnus/nntp.el" (0 0 0 0))
;;; Generated autoloads from gnus/nntp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nntp" '("nntp-")))
+(register-definition-prefixes "nntp" '("nntp-"))
;;;***
;;;### (autoloads nil "nnvirtual" "gnus/nnvirtual.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnvirtual.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnvirtual" '("nnvirtual-")))
+(register-definition-prefixes "nnvirtual" '("nnvirtual-"))
;;;***
;;;### (autoloads nil "nnweb" "gnus/nnweb.el" (0 0 0 0))
;;; Generated autoloads from gnus/nnweb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nnweb" '("nnweb-")))
+(register-definition-prefixes "nnweb" '("nnweb-"))
;;;***
;;;### (autoloads nil "notifications" "notifications.el" (0 0 0 0))
;;; Generated autoloads from notifications.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "notifications" '("notifications-")))
+(register-definition-prefixes "notifications" '("notifications-"))
;;;***
@@ -22723,7 +22990,7 @@ future sessions.
\(fn COMMAND)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "novice" '("en/disable-command")))
+(register-definition-prefixes "novice" '("en/disable-command"))
;;;***
@@ -22740,14 +23007,14 @@ closing requests for requests that are used in matched pairs.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nroff-mode" '("nroff-")))
+(register-definition-prefixes "nroff-mode" '("nroff-"))
;;;***
;;;### (autoloads nil "nsm" "net/nsm.el" (0 0 0 0))
;;; Generated autoloads from net/nsm.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nsm" '("network-security-" "nsm-")))
+(register-definition-prefixes "nsm" '("network-security-" "nsm-"))
;;;***
@@ -22755,21 +23022,21 @@ closing requests for requests that are used in matched pairs.
;;; Generated autoloads from net/ntlm.el
(push (purecopy '(ntlm 2 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ntlm" '("ntlm-")))
+(register-definition-prefixes "ntlm" '("ntlm-"))
;;;***
;;;### (autoloads nil "nxml-enc" "nxml/nxml-enc.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-enc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-enc" '("nxml-")))
+(register-definition-prefixes "nxml-enc" '("nxml-"))
;;;***
;;;### (autoloads nil "nxml-maint" "nxml/nxml-maint.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-maint.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-maint" '("nxml-insert-target-repertoire-glyph-set")))
+(register-definition-prefixes "nxml-maint" '("nxml-insert-target-repertoire-glyph-set"))
;;;***
@@ -22830,63 +23097,63 @@ Many aspects this mode can be customized using
\(fn)" t nil)
(defalias 'xml-mode 'nxml-mode)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-mode" '("nxml-")))
+(register-definition-prefixes "nxml-mode" '("nxml-"))
;;;***
;;;### (autoloads nil "nxml-ns" "nxml/nxml-ns.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-ns.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-ns" '("nxml-ns-")))
+(register-definition-prefixes "nxml-ns" '("nxml-ns-"))
;;;***
;;;### (autoloads nil "nxml-outln" "nxml/nxml-outln.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-outln.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-outln" '("nxml-")))
+(register-definition-prefixes "nxml-outln" '("nxml-"))
;;;***
;;;### (autoloads nil "nxml-parse" "nxml/nxml-parse.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-parse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-parse" '("nxml-")))
+(register-definition-prefixes "nxml-parse" '("nxml-"))
;;;***
;;;### (autoloads nil "nxml-rap" "nxml/nxml-rap.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-rap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-rap" '("nxml-")))
+(register-definition-prefixes "nxml-rap" '("nxml-"))
;;;***
;;;### (autoloads nil "nxml-util" "nxml/nxml-util.el" (0 0 0 0))
;;; Generated autoloads from nxml/nxml-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "nxml-util" '("nxml-")))
+(register-definition-prefixes "nxml-util" '("nxml-"))
;;;***
;;;### (autoloads nil "ob-C" "org/ob-C.el" (0 0 0 0))
;;; Generated autoloads from org/ob-C.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-C" '("org-babel-")))
+(register-definition-prefixes "ob-C" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-J" "org/ob-J.el" (0 0 0 0))
;;; Generated autoloads from org/ob-J.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-J" '("obj-" "org-babel-")))
+(register-definition-prefixes "ob-J" '("obj-" "org-babel-"))
;;;***
;;;### (autoloads nil "ob-R" "org/ob-R.el" (0 0 0 0))
;;; Generated autoloads from org/ob-R.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-R" '("ob-R-" "org-babel-")))
+(register-definition-prefixes "ob-R" '("ob-R-" "org-babel-"))
;;;***
@@ -22894,7 +23161,7 @@ Many aspects this mode can be customized using
;;; Generated autoloads from org/ob-abc.el
(push (purecopy '(ob-abc 0 1)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-abc" '("org-babel-")))
+(register-definition-prefixes "ob-abc" '("org-babel-"))
;;;***
@@ -22902,42 +23169,42 @@ Many aspects this mode can be customized using
;;;;;; 0))
;;; Generated autoloads from org/ob-asymptote.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-asymptote" '("org-babel-")))
+(register-definition-prefixes "ob-asymptote" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-awk" "org/ob-awk.el" (0 0 0 0))
;;; Generated autoloads from org/ob-awk.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-awk" '("org-babel-")))
+(register-definition-prefixes "ob-awk" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-calc" "org/ob-calc.el" (0 0 0 0))
;;; Generated autoloads from org/ob-calc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-calc" '("org-babel-")))
+(register-definition-prefixes "ob-calc" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-clojure" "org/ob-clojure.el" (0 0 0 0))
;;; Generated autoloads from org/ob-clojure.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-clojure" '("org-babel-")))
+(register-definition-prefixes "ob-clojure" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-comint" "org/ob-comint.el" (0 0 0 0))
;;; Generated autoloads from org/ob-comint.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-comint" '("org-babel-comint-")))
+(register-definition-prefixes "ob-comint" '("org-babel-comint-"))
;;;***
;;;### (autoloads nil "ob-coq" "org/ob-coq.el" (0 0 0 0))
;;; Generated autoloads from org/ob-coq.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-coq" '("coq-program-name" "org-babel-")))
+(register-definition-prefixes "ob-coq" '("coq-program-name" "org-babel-"))
;;;***
@@ -22945,28 +23212,28 @@ Many aspects this mode can be customized using
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ob-core.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-core" '("org-")))
+(register-definition-prefixes "ob-core" '("org-"))
;;;***
;;;### (autoloads nil "ob-css" "org/ob-css.el" (0 0 0 0))
;;; Generated autoloads from org/ob-css.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-css" '("org-babel-")))
+(register-definition-prefixes "ob-css" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-ditaa" "org/ob-ditaa.el" (0 0 0 0))
;;; Generated autoloads from org/ob-ditaa.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ditaa" '("org-")))
+(register-definition-prefixes "ob-ditaa" '("org-"))
;;;***
;;;### (autoloads nil "ob-dot" "org/ob-dot.el" (0 0 0 0))
;;; Generated autoloads from org/ob-dot.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-dot" '("org-babel-")))
+(register-definition-prefixes "ob-dot" '("org-babel-"))
;;;***
@@ -22974,7 +23241,7 @@ Many aspects this mode can be customized using
;;; Generated autoloads from org/ob-ebnf.el
(push (purecopy '(ob-ebnf 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ebnf" '("org-babel-")))
+(register-definition-prefixes "ob-ebnf" '("org-babel-"))
;;;***
@@ -22982,119 +23249,119 @@ Many aspects this mode can be customized using
;;;;;; 0 0))
;;; Generated autoloads from org/ob-emacs-lisp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-emacs-lisp" '("org-babel-")))
+(register-definition-prefixes "ob-emacs-lisp" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-eshell" "org/ob-eshell.el" (0 0 0 0))
;;; Generated autoloads from org/ob-eshell.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-eshell" '("ob-eshell-session-live-p" "org-babel-")))
+(register-definition-prefixes "ob-eshell" '("ob-eshell-session-live-p" "org-babel-"))
;;;***
;;;### (autoloads nil "ob-eval" "org/ob-eval.el" (0 0 0 0))
;;; Generated autoloads from org/ob-eval.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-eval" '("org-babel-")))
+(register-definition-prefixes "ob-eval" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-exp" "org/ob-exp.el" (0 0 0 0))
;;; Generated autoloads from org/ob-exp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-exp" '("org-")))
+(register-definition-prefixes "ob-exp" '("org-"))
;;;***
;;;### (autoloads nil "ob-forth" "org/ob-forth.el" (0 0 0 0))
;;; Generated autoloads from org/ob-forth.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-forth" '("org-babel-")))
+(register-definition-prefixes "ob-forth" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-fortran" "org/ob-fortran.el" (0 0 0 0))
;;; Generated autoloads from org/ob-fortran.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-fortran" '("org-babel-")))
+(register-definition-prefixes "ob-fortran" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-gnuplot" "org/ob-gnuplot.el" (0 0 0 0))
;;; Generated autoloads from org/ob-gnuplot.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-gnuplot" '("*org-babel-gnuplot-" "org-babel-")))
+(register-definition-prefixes "ob-gnuplot" '("*org-babel-gnuplot-" "org-babel-"))
;;;***
;;;### (autoloads nil "ob-groovy" "org/ob-groovy.el" (0 0 0 0))
;;; Generated autoloads from org/ob-groovy.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-groovy" '("org-babel-")))
+(register-definition-prefixes "ob-groovy" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-haskell" "org/ob-haskell.el" (0 0 0 0))
;;; Generated autoloads from org/ob-haskell.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-haskell" '("org-babel-")))
+(register-definition-prefixes "ob-haskell" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-hledger" "org/ob-hledger.el" (0 0 0 0))
;;; Generated autoloads from org/ob-hledger.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-hledger" '("org-babel-")))
+(register-definition-prefixes "ob-hledger" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-io" "org/ob-io.el" (0 0 0 0))
;;; Generated autoloads from org/ob-io.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-io" '("org-babel-")))
+(register-definition-prefixes "ob-io" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-java" "org/ob-java.el" (0 0 0 0))
;;; Generated autoloads from org/ob-java.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-java" '("org-babel-")))
+(register-definition-prefixes "ob-java" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-js" "org/ob-js.el" (0 0 0 0))
;;; Generated autoloads from org/ob-js.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-js" '("org-babel-")))
+(register-definition-prefixes "ob-js" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-latex" "org/ob-latex.el" (0 0 0 0))
;;; Generated autoloads from org/ob-latex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-latex" '("org-babel-")))
+(register-definition-prefixes "ob-latex" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-ledger" "org/ob-ledger.el" (0 0 0 0))
;;; Generated autoloads from org/ob-ledger.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ledger" '("org-babel-")))
+(register-definition-prefixes "ob-ledger" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-lilypond" "org/ob-lilypond.el" (0 0 0 0))
;;; Generated autoloads from org/ob-lilypond.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lilypond" '("lilypond-mode" "org-babel-")))
+(register-definition-prefixes "ob-lilypond" '("lilypond-mode" "org-babel-"))
;;;***
;;;### (autoloads nil "ob-lisp" "org/ob-lisp.el" (0 0 0 0))
;;; Generated autoloads from org/ob-lisp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lisp" '("org-babel-")))
+(register-definition-prefixes "ob-lisp" '("org-babel-"))
;;;***
@@ -23102,77 +23369,77 @@ Many aspects this mode can be customized using
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ob-lob.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lob" '("org-babel-")))
+(register-definition-prefixes "ob-lob" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-lua" "org/ob-lua.el" (0 0 0 0))
;;; Generated autoloads from org/ob-lua.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lua" '("org-babel-")))
+(register-definition-prefixes "ob-lua" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-makefile" "org/ob-makefile.el" (0 0 0 0))
;;; Generated autoloads from org/ob-makefile.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-makefile" '("org-babel-")))
+(register-definition-prefixes "ob-makefile" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-maxima" "org/ob-maxima.el" (0 0 0 0))
;;; Generated autoloads from org/ob-maxima.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-maxima" '("org-babel-")))
+(register-definition-prefixes "ob-maxima" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-mscgen" "org/ob-mscgen.el" (0 0 0 0))
;;; Generated autoloads from org/ob-mscgen.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-mscgen" '("org-babel-")))
+(register-definition-prefixes "ob-mscgen" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-ocaml" "org/ob-ocaml.el" (0 0 0 0))
;;; Generated autoloads from org/ob-ocaml.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ocaml" '("org-babel-")))
+(register-definition-prefixes "ob-ocaml" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-octave" "org/ob-octave.el" (0 0 0 0))
;;; Generated autoloads from org/ob-octave.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-octave" '("org-babel-")))
+(register-definition-prefixes "ob-octave" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-org" "org/ob-org.el" (0 0 0 0))
;;; Generated autoloads from org/ob-org.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-org" '("org-babel-")))
+(register-definition-prefixes "ob-org" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-perl" "org/ob-perl.el" (0 0 0 0))
;;; Generated autoloads from org/ob-perl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-perl" '("org-babel-")))
+(register-definition-prefixes "ob-perl" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-picolisp" "org/ob-picolisp.el" (0 0 0 0))
;;; Generated autoloads from org/ob-picolisp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-picolisp" '("org-babel-")))
+(register-definition-prefixes "ob-picolisp" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-plantuml" "org/ob-plantuml.el" (0 0 0 0))
;;; Generated autoloads from org/ob-plantuml.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-plantuml" '("org-")))
+(register-definition-prefixes "ob-plantuml" '("org-"))
;;;***
@@ -23180,49 +23447,49 @@ Many aspects this mode can be customized using
;;;;;; 0 0))
;;; Generated autoloads from org/ob-processing.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-processing" '("org-babel-")))
+(register-definition-prefixes "ob-processing" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-python" "org/ob-python.el" (0 0 0 0))
;;; Generated autoloads from org/ob-python.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-python" '("org-babel-")))
+(register-definition-prefixes "ob-python" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-ref" "org/ob-ref.el" (0 0 0 0))
;;; Generated autoloads from org/ob-ref.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ref" '("org-babel-")))
+(register-definition-prefixes "ob-ref" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-ruby" "org/ob-ruby.el" (0 0 0 0))
;;; Generated autoloads from org/ob-ruby.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ruby" '("org-babel-")))
+(register-definition-prefixes "ob-ruby" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-sass" "org/ob-sass.el" (0 0 0 0))
;;; Generated autoloads from org/ob-sass.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sass" '("org-babel-")))
+(register-definition-prefixes "ob-sass" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-scheme" "org/ob-scheme.el" (0 0 0 0))
;;; Generated autoloads from org/ob-scheme.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-scheme" '("org-babel-")))
+(register-definition-prefixes "ob-scheme" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-screen" "org/ob-screen.el" (0 0 0 0))
;;; Generated autoloads from org/ob-screen.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-screen" '("org-babel-")))
+(register-definition-prefixes "ob-screen" '("org-babel-"))
;;;***
@@ -23230,49 +23497,49 @@ Many aspects this mode can be customized using
;;; Generated autoloads from org/ob-sed.el
(push (purecopy '(ob-sed 0 1 1)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sed" '("org-babel-")))
+(register-definition-prefixes "ob-sed" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-shell" "org/ob-shell.el" (0 0 0 0))
;;; Generated autoloads from org/ob-shell.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-shell" '("org-babel-")))
+(register-definition-prefixes "ob-shell" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-shen" "org/ob-shen.el" (0 0 0 0))
;;; Generated autoloads from org/ob-shen.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-shen" '("org-babel-")))
+(register-definition-prefixes "ob-shen" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-sql" "org/ob-sql.el" (0 0 0 0))
;;; Generated autoloads from org/ob-sql.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sql" '("org-babel-")))
+(register-definition-prefixes "ob-sql" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-sqlite" "org/ob-sqlite.el" (0 0 0 0))
;;; Generated autoloads from org/ob-sqlite.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sqlite" '("org-babel-")))
+(register-definition-prefixes "ob-sqlite" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-stan" "org/ob-stan.el" (0 0 0 0))
;;; Generated autoloads from org/ob-stan.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-stan" '("org-babel-")))
+(register-definition-prefixes "ob-stan" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-table" "org/ob-table.el" (0 0 0 0))
;;; Generated autoloads from org/ob-table.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-table" '("org-")))
+(register-definition-prefixes "ob-table" '("org-"))
;;;***
@@ -23280,14 +23547,14 @@ Many aspects this mode can be customized using
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ob-tangle.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-tangle" '("org-babel-")))
+(register-definition-prefixes "ob-tangle" '("org-babel-"))
;;;***
;;;### (autoloads nil "ob-vala" "org/ob-vala.el" (0 0 0 0))
;;; Generated autoloads from org/ob-vala.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-vala" '("org-babel-")))
+(register-definition-prefixes "ob-vala" '("org-babel-"))
;;;***
@@ -23330,14 +23597,14 @@ startup file, `~/.emacs-octave'.
(defalias 'run-octave 'inferior-octave)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "octave" '("inferior-octave-" "octave-")))
+(register-definition-prefixes "octave" '("inferior-octave-" "octave-"))
;;;***
;;;### (autoloads nil "ogonek" "international/ogonek.el" (0 0 0 0))
;;; Generated autoloads from international/ogonek.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ogonek" '("ogonek-")))
+(register-definition-prefixes "ogonek" '("ogonek-"))
;;;***
@@ -23441,7 +23708,7 @@ This command can be called in any mode to insert a link in Org syntax." t nil)
Find all radio targets in this file and update the regular expression.
Also refresh fontification if needed." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol" '("org-")))
+(register-definition-prefixes "ol" '("org-"))
;;;***
@@ -23449,49 +23716,49 @@ Also refresh fontification if needed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ol-bbdb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-bbdb" '("org-bbdb-")))
+(register-definition-prefixes "ol-bbdb" '("org-bbdb-"))
;;;***
;;;### (autoloads nil "ol-bibtex" "org/ol-bibtex.el" (0 0 0 0))
;;; Generated autoloads from org/ol-bibtex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-bibtex" '("org-")))
+(register-definition-prefixes "ol-bibtex" '("org-"))
;;;***
;;;### (autoloads nil "ol-docview" "org/ol-docview.el" (0 0 0 0))
;;; Generated autoloads from org/ol-docview.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-docview" '("org-docview-")))
+(register-definition-prefixes "ol-docview" '("org-docview-"))
;;;***
;;;### (autoloads nil "ol-eshell" "org/ol-eshell.el" (0 0 0 0))
;;; Generated autoloads from org/ol-eshell.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-eshell" '("org-eshell-")))
+(register-definition-prefixes "ol-eshell" '("org-eshell-"))
;;;***
;;;### (autoloads nil "ol-eww" "org/ol-eww.el" (0 0 0 0))
;;; Generated autoloads from org/ol-eww.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-eww" '("org-eww-")))
+(register-definition-prefixes "ol-eww" '("org-eww-"))
;;;***
;;;### (autoloads nil "ol-gnus" "org/ol-gnus.el" (0 0 0 0))
;;; Generated autoloads from org/ol-gnus.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-gnus" '("org-gnus-")))
+(register-definition-prefixes "ol-gnus" '("org-gnus-"))
;;;***
;;;### (autoloads nil "ol-info" "org/ol-info.el" (0 0 0 0))
;;; Generated autoloads from org/ol-info.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-info" '("org-info-")))
+(register-definition-prefixes "ol-info" '("org-info-"))
;;;***
@@ -23499,28 +23766,28 @@ Also refresh fontification if needed." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ol-irc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-irc" '("org-irc-")))
+(register-definition-prefixes "ol-irc" '("org-irc-"))
;;;***
;;;### (autoloads nil "ol-mhe" "org/ol-mhe.el" (0 0 0 0))
;;; Generated autoloads from org/ol-mhe.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-mhe" '("org-mhe-")))
+(register-definition-prefixes "ol-mhe" '("org-mhe-"))
;;;***
;;;### (autoloads nil "ol-rmail" "org/ol-rmail.el" (0 0 0 0))
;;; Generated autoloads from org/ol-rmail.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-rmail" '("org-rmail-")))
+(register-definition-prefixes "ol-rmail" '("org-rmail-"))
;;;***
;;;### (autoloads nil "ol-w3m" "org/ol-w3m.el" (0 0 0 0))
;;; Generated autoloads from org/ol-w3m.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ol-w3m" '("org-w3m-")))
+(register-definition-prefixes "ol-w3m" '("org-w3m-"))
;;;***
@@ -23557,7 +23824,7 @@ Coloring:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "opascal" '("opascal-")))
+(register-definition-prefixes "opascal" '("opascal-"))
;;;***
@@ -23752,7 +24019,7 @@ With prefix arg UNCOMPILED, load the uncompiled versions.
(autoload 'org-customize "org" "\
Call the customize function with org as argument." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org" '("org-" "turn-on-org-cdlatex")))
+(register-definition-prefixes "org" '("org-" "turn-on-org-cdlatex"))
;;;***
@@ -24028,7 +24295,7 @@ to override `appt-message-warning-time'.
\(fn &optional REFRESH FILTER &rest ARGS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-agenda" '("org-")))
+(register-definition-prefixes "org-agenda" '("org-"))
;;;***
@@ -24036,7 +24303,7 @@ to override `appt-message-warning-time'.
;;;;;; "org/org-archive.el" (0 0 0 0))
;;; Generated autoloads from org/org-archive.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-archive" '("org-a")))
+(register-definition-prefixes "org-archive" '("org-a"))
;;;***
@@ -24044,7 +24311,7 @@ to override `appt-message-warning-time'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-attach.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-attach" '("org-attach-")))
+(register-definition-prefixes "org-attach" '("org-attach-"))
;;;***
@@ -24052,7 +24319,7 @@ to override `appt-message-warning-time'.
;;;;;; 0 0 0))
;;; Generated autoloads from org/org-attach-git.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-attach-git" '("org-attach-git-")))
+(register-definition-prefixes "org-attach-git" '("org-attach-git-"))
;;;***
@@ -24098,7 +24365,7 @@ of the day at point (if any) or the current HH:MM time.
(autoload 'org-capture-import-remember-templates "org-capture" "\
Set `org-capture-templates' to be similar to `org-remember-templates'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-capture" '("org-capture-")))
+(register-definition-prefixes "org-capture" '("org-capture-"))
;;;***
@@ -24106,7 +24373,7 @@ Set `org-capture-templates' to be similar to `org-remember-templates'." t nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-clock.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-clock" '("org-")))
+(register-definition-prefixes "org-clock" '("org-"))
;;;***
@@ -24197,7 +24464,7 @@ Create a dynamic block capturing a column view table." t nil)
(autoload 'org-agenda-columns "org-colview" "\
Turn on or update column view in the agenda." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-colview" '("org-")))
+(register-definition-prefixes "org-colview" '("org-"))
;;;***
@@ -24207,21 +24474,21 @@ Turn on or update column view in the agenda." t nil)
(autoload 'org-check-version "org-compat" "\
Try very hard to provide sensible version strings." nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-compat" '("org-")))
+(register-definition-prefixes "org-compat" '("org-"))
;;;***
;;;### (autoloads nil "org-crypt" "org/org-crypt.el" (0 0 0 0))
;;; Generated autoloads from org/org-crypt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-crypt" '("org-")))
+(register-definition-prefixes "org-crypt" '("org-"))
;;;***
;;;### (autoloads nil "org-ctags" "org/org-ctags.el" (0 0 0 0))
;;; Generated autoloads from org/org-ctags.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-ctags" '("org-ctags-")))
+(register-definition-prefixes "org-ctags" '("org-ctags-"))
;;;***
@@ -24229,7 +24496,7 @@ Try very hard to provide sensible version strings." nil t)
;;;;;; "org/org-datetree.el" (0 0 0 0))
;;; Generated autoloads from org/org-datetree.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-datetree" '("org-datetree-")))
+(register-definition-prefixes "org-datetree" '("org-datetree-"))
;;;***
@@ -24284,7 +24551,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return
\(fn TIMES)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-duration" '("org-duration-")))
+(register-definition-prefixes "org-duration" '("org-duration-"))
;;;***
@@ -24292,7 +24559,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return
;;;;;; "org/org-element.el" (0 0 0 0))
;;; Generated autoloads from org/org-element.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-element" '("org-element-")))
+(register-definition-prefixes "org-element" '("org-element-"))
;;;***
@@ -24300,14 +24567,14 @@ with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return
;;;;;; 0))
;;; Generated autoloads from org/org-entities.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-entities" '("org-entit")))
+(register-definition-prefixes "org-entities" '("org-entit"))
;;;***
;;;### (autoloads nil "org-faces" "org/org-faces.el" (0 0 0 0))
;;; Generated autoloads from org/org-faces.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-faces" '("org-")))
+(register-definition-prefixes "org-faces" '("org-"))
;;;***
@@ -24315,7 +24582,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-feed.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-feed" '("org-feed-")))
+(register-definition-prefixes "org-feed" '("org-feed-"))
;;;***
@@ -24323,7 +24590,7 @@ with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return
;;;;;; "org/org-footnote.el" (0 0 0 0))
;;; Generated autoloads from org/org-footnote.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-footnote" '("org-footnote-")))
+(register-definition-prefixes "org-footnote" '("org-footnote-"))
;;;***
@@ -24359,14 +24626,14 @@ With a prefix argument, use the alternative interface: e.g., if
\(fn &optional ALTERNATIVE-INTERFACE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-goto" '("org-goto-")))
+(register-definition-prefixes "org-goto" '("org-goto-"))
;;;***
;;;### (autoloads nil "org-habit" "org/org-habit.el" (0 0 0 0))
;;; Generated autoloads from org/org-habit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-habit" '("org-")))
+(register-definition-prefixes "org-habit" '("org-"))
;;;***
@@ -24374,7 +24641,7 @@ With a prefix argument, use the alternative interface: e.g., if
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-id.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-id" '("org-id-")))
+(register-definition-prefixes "org-id" '("org-id-"))
;;;***
@@ -24382,7 +24649,7 @@ With a prefix argument, use the alternative interface: e.g., if
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-indent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-indent" '("org-")))
+(register-definition-prefixes "org-indent" '("org-"))
;;;***
@@ -24390,7 +24657,7 @@ With a prefix argument, use the alternative interface: e.g., if
;;;;;; 0 0 0))
;;; Generated autoloads from org/org-inlinetask.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-inlinetask" '("org-inlinetask-")))
+(register-definition-prefixes "org-inlinetask" '("org-inlinetask-"))
;;;***
@@ -24400,7 +24667,7 @@ With a prefix argument, use the alternative interface: e.g., if
(autoload 'org-babel-describe-bindings "org-keys" "\
Describe all keybindings behind `org-babel-key-prefix'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-keys" '("org-")))
+(register-definition-prefixes "org-keys" '("org-"))
;;;***
@@ -24418,21 +24685,21 @@ ARG can also be a list of checker names, as symbols, to run.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-lint" '("org-lint-")))
+(register-definition-prefixes "org-lint" '("org-lint-"))
;;;***
;;;### (autoloads nil "org-list" "org/org-list.el" (0 0 0 0))
;;; Generated autoloads from org/org-list.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-list" '("org-")))
+(register-definition-prefixes "org-list" '("org-"))
;;;***
;;;### (autoloads nil "org-macro" "org/org-macro.el" (0 0 0 0))
;;; Generated autoloads from org/org-macro.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-macro" '("org-macro-")))
+(register-definition-prefixes "org-macro" '("org-macro-"))
;;;***
@@ -24444,7 +24711,7 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX.
\(fn FILE)" nil t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-macs" '("org-")))
+(register-definition-prefixes "org-macs" '("org-"))
;;;***
@@ -24452,14 +24719,14 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-mobile.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-mobile" '("org-mobile-")))
+(register-definition-prefixes "org-mobile" '("org-mobile-"))
;;;***
;;;### (autoloads nil "org-mouse" "org/org-mouse.el" (0 0 0 0))
;;; Generated autoloads from org/org-mouse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-mouse" '("org-mouse-")))
+(register-definition-prefixes "org-mouse" '("org-mouse-"))
;;;***
@@ -24480,9 +24747,12 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-num" '("org-num-")))
+(register-definition-prefixes "org-num" '("org-num-"))
;;;***
@@ -24490,7 +24760,7 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; 0 0))
;;; Generated autoloads from org/org-pcomplete.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-pcomplete" '("org-" "pcomplete/org-mode/")))
+(register-definition-prefixes "org-pcomplete" '("org-" "pcomplete/org-mode/"))
;;;***
@@ -24498,7 +24768,7 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-plot.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-plot" '("org-plot")))
+(register-definition-prefixes "org-plot" '("org-plot"))
;;;***
@@ -24506,14 +24776,14 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; 0))
;;; Generated autoloads from org/org-protocol.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-protocol" '("org-protocol-")))
+(register-definition-prefixes "org-protocol" '("org-protocol-"))
;;;***
;;;### (autoloads nil "org-src" "org/org-src.el" (0 0 0 0))
;;; Generated autoloads from org/org-src.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-src" '("org-")))
+(register-definition-prefixes "org-src" '("org-"))
;;;***
@@ -24521,14 +24791,14 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-table.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-table" '("org")))
+(register-definition-prefixes "org-table" '("org"))
;;;***
;;;### (autoloads nil "org-tempo" "org/org-tempo.el" (0 0 0 0))
;;; Generated autoloads from org/org-tempo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-tempo" '("org-tempo-")))
+(register-definition-prefixes "org-tempo" '("org-tempo-"))
;;;***
@@ -24536,7 +24806,7 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/org-timer.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-timer" '("org-timer-")))
+(register-definition-prefixes "org-timer" '("org-timer-"))
;;;***
@@ -24591,12 +24861,15 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
See the command `outline-mode' for more information on this mode.
\(fn &optional ARG)" t nil)
(put 'outline-level 'risky-local-variable t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "outline" '("outline-")))
+(register-definition-prefixes "outline" '("outline-"))
;;;***
@@ -24604,7 +24877,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox" '("org-export-")))
+(register-definition-prefixes "ox" '("org-export-"))
;;;***
@@ -24612,7 +24885,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-ascii.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-ascii" '("org-ascii-")))
+(register-definition-prefixes "ox-ascii" '("org-ascii-"))
;;;***
@@ -24620,7 +24893,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-beamer.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-beamer" '("org-beamer-")))
+(register-definition-prefixes "ox-beamer" '("org-beamer-"))
;;;***
@@ -24628,7 +24901,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-html.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-html" '("org-html-")))
+(register-definition-prefixes "ox-html" '("org-html-"))
;;;***
@@ -24636,7 +24909,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; "org/ox-icalendar.el" (0 0 0 0))
;;; Generated autoloads from org/ox-icalendar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-icalendar" '("org-icalendar-")))
+(register-definition-prefixes "ox-icalendar" '("org-icalendar-"))
;;;***
@@ -24644,7 +24917,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-latex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-latex" '("org-latex-")))
+(register-definition-prefixes "ox-latex" '("org-latex-"))
;;;***
@@ -24652,7 +24925,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-man.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-man" '("org-man-")))
+(register-definition-prefixes "ox-man" '("org-man-"))
;;;***
@@ -24660,7 +24933,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-md.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-md" '("org-md-")))
+(register-definition-prefixes "ox-md" '("org-md-"))
;;;***
@@ -24668,7 +24941,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-odt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-odt" '("org-odt-")))
+(register-definition-prefixes "ox-odt" '("org-odt-"))
;;;***
@@ -24676,7 +24949,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-org.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-org" '("org-org-")))
+(register-definition-prefixes "ox-org" '("org-org-"))
;;;***
@@ -24684,7 +24957,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-publish.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-publish" '("org-publish-")))
+(register-definition-prefixes "ox-publish" '("org-publish-"))
;;;***
@@ -24692,7 +24965,7 @@ See the command `outline-mode' for more information on this mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from org/ox-texinfo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-texinfo" '("org-texinfo-")))
+(register-definition-prefixes "ox-texinfo" '("org-texinfo-"))
;;;***
@@ -24835,7 +25108,7 @@ The return value is a string (or nil in case we can't find it)." nil nil)
(function-put 'package-get-version 'pure 't)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "package" '("bad-signature" "define-package" "describe-package-1" "package-")))
+(register-definition-prefixes "package" '("bad-signature" "define-package" "describe-package-1" "package-"))
;;;***
@@ -24858,14 +25131,14 @@ archive).
\(fn FILE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "package-x" '("package-")))
+(register-definition-prefixes "package-x" '("package-"))
;;;***
;;;### (autoloads nil "page-ext" "textmodes/page-ext.el" (0 0 0 0))
;;; Generated autoloads from textmodes/page-ext.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "page-ext" '("pages-")))
+(register-definition-prefixes "page-ext" '("pages-"))
;;;***
@@ -24890,13 +25163,16 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Show Paren mode is a global minor mode. When enabled, any
matching parenthesis is highlighted in `show-paren-style' after
`show-paren-delay' seconds of Emacs idle time.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "paren" '("show-paren-")))
+(register-definition-prefixes "paren" '("show-paren-"))
;;;***
@@ -24918,7 +25194,7 @@ unknown DST value is returned as -1.
\(fn STRING)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "parse-time" '("parse-")))
+(register-definition-prefixes "parse-time" '("parse-"))
;;;***
@@ -24969,7 +25245,7 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pascal" '("electric-pascal-" "pascal-")))
+(register-definition-prefixes "pascal" '("electric-pascal-" "pascal-"))
;;;***
@@ -24993,7 +25269,7 @@ Check if KEY is in the cache.
\(fn KEY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "password-cache" '("password-")))
+(register-definition-prefixes "password-cache" '("password-"))
;;;***
@@ -25127,7 +25403,7 @@ for the result of evaluating EXP (first arg to `pcase').
(function-put 'pcase-defmacro 'doc-string-elt '3)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcase" '("pcase-")))
+(register-definition-prefixes "pcase" '("pcase-"))
;;;***
@@ -25137,7 +25413,7 @@ for the result of evaluating EXP (first arg to `pcase').
(autoload 'pcomplete/cvs "pcmpl-cvs" "\
Completion rules for the `cvs' command." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-cvs" '("pcmpl-cvs-")))
+(register-definition-prefixes "pcmpl-cvs" '("pcmpl-cvs-"))
;;;***
@@ -25161,7 +25437,7 @@ Completion for the GNU find utility." nil nil)
(defalias 'pcomplete/gdb 'pcomplete/xargs)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-gnu" '("pcmpl-gnu-")))
+(register-definition-prefixes "pcmpl-gnu" '("pcmpl-gnu-"))
;;;***
@@ -25177,7 +25453,7 @@ Completion for GNU/Linux `umount'." nil nil)
(autoload 'pcomplete/mount "pcmpl-linux" "\
Completion for GNU/Linux `mount'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-linux" '("pcmpl-linux-" "pcomplete-pare-list")))
+(register-definition-prefixes "pcmpl-linux" '("pcmpl-linux-" "pcomplete-pare-list"))
;;;***
@@ -25187,7 +25463,7 @@ Completion for GNU/Linux `mount'." nil nil)
(autoload 'pcomplete/rpm "pcmpl-rpm" "\
Completion for the `rpm' command." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-rpm" '("pcmpl-rpm-")))
+(register-definition-prefixes "pcmpl-rpm" '("pcmpl-rpm-"))
;;;***
@@ -25226,7 +25502,7 @@ Completion rules for the `ssh' command." nil nil)
Completion rules for the `scp' command.
Includes files as well as host names followed by a colon." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-unix" '("pcmpl-")))
+(register-definition-prefixes "pcmpl-unix" '("pcmpl-"))
;;;***
@@ -25246,7 +25522,7 @@ long options." nil nil)
(autoload 'pcomplete/ag "pcmpl-x" "\
Completion for the `ag' command." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcmpl-x" '("pcmpl-x-")))
+(register-definition-prefixes "pcmpl-x" '("pcmpl-x-"))
;;;***
@@ -25295,7 +25571,7 @@ this is `comint-dynamic-complete-functions'.
(autoload 'pcomplete-shell-setup "pcomplete" "\
Setup `shell-mode' to use pcomplete." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcomplete" '("pcomplete-")))
+(register-definition-prefixes "pcomplete" '("pcomplete-"))
;;;***
@@ -25372,7 +25648,7 @@ Anything else means to do it only if the prefix arg is equal to this value.")
Run `cvs-examine' if DIR is a CVS administrative directory.
The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp dir) (setq dir (directory-file-name dir)) (when (and (string= "CVS" (file-name-nondirectory dir)) (file-readable-p (expand-file-name "Entries" dir)) cvs-dired-use-hook (if (eq cvs-dired-use-hook 'always) (not current-prefix-arg) (equal current-prefix-arg cvs-dired-use-hook))) (save-excursion (funcall cvs-dired-action (file-name-directory dir) t t)))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcvs" '("cvs-" "defun-cvs-mode")))
+(register-definition-prefixes "pcvs" '("cvs-" "defun-cvs-mode"))
;;;***
@@ -25382,28 +25658,28 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d
(defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\
Global menu used by PCL-CVS.")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcvs-defs" '("cvs-")))
+(register-definition-prefixes "pcvs-defs" '("cvs-"))
;;;***
;;;### (autoloads nil "pcvs-info" "vc/pcvs-info.el" (0 0 0 0))
;;; Generated autoloads from vc/pcvs-info.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcvs-info" '("cvs-")))
+(register-definition-prefixes "pcvs-info" '("cvs-"))
;;;***
;;;### (autoloads nil "pcvs-parse" "vc/pcvs-parse.el" (0 0 0 0))
;;; Generated autoloads from vc/pcvs-parse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcvs-parse" '("cvs-")))
+(register-definition-prefixes "pcvs-parse" '("cvs-"))
;;;***
;;;### (autoloads nil "pcvs-util" "vc/pcvs-util.el" (0 0 0 0))
;;; Generated autoloads from vc/pcvs-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pcvs-util" '("cvs-")))
+(register-definition-prefixes "pcvs-util" '("cvs-"))
;;;***
@@ -25475,7 +25751,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "perl-mode" '("indent-perl-exp" "mark-perl-function" "perl-")))
+(register-definition-prefixes "perl-mode" '("indent-perl-exp" "mark-perl-function" "perl-"))
;;;***
@@ -25555,14 +25831,14 @@ they are not by default assigned to keys." t nil)
(defalias 'edit-picture 'picture-mode)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "picture" '("picture-")))
+(register-definition-prefixes "picture" '("picture-"))
;;;***
;;;### (autoloads nil "pinyin" "language/pinyin.el" (0 0 0 0))
;;; Generated autoloads from language/pinyin.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pinyin" '("pinyin-character-map")))
+(register-definition-prefixes "pinyin" '("pinyin-character-map"))
;;;***
@@ -25587,9 +25863,12 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pixel-scroll" '("pixel-")))
+(register-definition-prefixes "pixel-scroll" '("pixel-"))
;;;***
@@ -25606,7 +25885,7 @@ Major mode for editing PLSTORE files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "plstore" '("plstore-")))
+(register-definition-prefixes "plstore" '("plstore-"))
;;;***
@@ -25619,7 +25898,7 @@ Called through `file-coding-system-alist', before the file is visited for real.
\(fn ARG-LIST)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "po" '("po-")))
+(register-definition-prefixes "po" '("po-"))
;;;***
@@ -25635,7 +25914,7 @@ pong-mode keybindings:\\<pong-mode-map>
\\{pong-mode-map}" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pong" '("pong-")))
+(register-definition-prefixes "pong" '("pong-"))
;;;***
@@ -25648,7 +25927,7 @@ Use streaming commands.
\(fn FILE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pop3" '("pop3-")))
+(register-definition-prefixes "pop3" '("pop3-"))
;;;***
@@ -25698,7 +25977,7 @@ Ignores leading comment characters.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pp" '("pp-")))
+(register-definition-prefixes "pp" '("pp-"))
;;;***
@@ -26238,7 +26517,7 @@ are both set to t.
\(fn &optional SELECT-PRINTER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "printing" '("lpr-setup" "pr-")))
+(register-definition-prefixes "printing" '("lpr-setup" "pr-"))
;;;***
@@ -26258,7 +26537,7 @@ Proced buffers.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "proced" '("proced-")))
+(register-definition-prefixes "proced" '("proced-"))
;;;***
@@ -26288,13 +26567,13 @@ Open profile FILENAME.
\(fn FILENAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "profiler" '("profiler-")))
+(register-definition-prefixes "profiler" '("profiler-"))
;;;***
;;;### (autoloads nil "project" "progmodes/project.el" (0 0 0 0))
;;; Generated autoloads from progmodes/project.el
-(push (purecopy '(project 0 5 0)) package--builtin-versions)
+(push (purecopy '(project 0 5 1)) package--builtin-versions)
(autoload 'project-current "project" "\
Return the project instance in DIRECTORY, defaulting to `default-directory'.
@@ -26315,7 +26594,7 @@ of the project instance object.
\(fn &optional MAYBE-PROMPT DIRECTORY)" nil nil)
-(defvar project-prefix-map (let ((map (make-sparse-keymap))) (define-key map "f" 'project-find-file) (define-key map "F" 'project-or-external-find-file) (define-key map "b" 'project-switch-to-buffer) (define-key map "s" 'project-shell) (define-key map "d" 'project-dired) (define-key map "v" 'project-vc-dir) (define-key map "c" 'project-compile) (define-key map "e" 'project-eshell) (define-key map "k" 'project-kill-buffers) (define-key map "p" 'project-switch-project) (define-key map "g" 'project-find-regexp) (define-key map "G" 'project-or-external-find-regexp) (define-key map "r" 'project-query-replace-regexp) map) "\
+(defvar project-prefix-map (let ((map (make-sparse-keymap))) (define-key map "!" 'project-shell-command) (define-key map "&" 'project-async-shell-command) (define-key map "f" 'project-find-file) (define-key map "F" 'project-or-external-find-file) (define-key map "b" 'project-switch-to-buffer) (define-key map "s" 'project-shell) (define-key map "d" 'project-dired) (define-key map "v" 'project-vc-dir) (define-key map "c" 'project-compile) (define-key map "e" 'project-eshell) (define-key map "k" 'project-kill-buffers) (define-key map "p" 'project-switch-project) (define-key map "g" 'project-find-regexp) (define-key map "G" 'project-or-external-find-regexp) (define-key map "r" 'project-query-replace-regexp) map) "\
Keymap for project commands.")
(define-key ctl-x-map "p" project-prefix-map)
@@ -26393,6 +26672,12 @@ switch to it. Otherwise, create a new Eshell buffer.
With \\[universal-argument] prefix arg, create a new Eshell buffer even
if one already exists." t nil)
+(autoload 'project-async-shell-command "project" "\
+Run `async-shell-command' in the current project's root directory." t nil)
+
+(autoload 'project-shell-command "project" "\
+Run `shell-command' in the current project's root directory." t nil)
+
(autoload 'project-search "project" "\
Search for REGEXP in all the files of the project.
Stops when a match is found.
@@ -26484,7 +26769,7 @@ the menu entries in the dispatch menu.")
The available commands are presented as a dispatch menu
made from `project-switch-commands'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "project" '("project-")))
+(register-definition-prefixes "project" '("project-"))
;;;***
@@ -26519,7 +26804,7 @@ With prefix argument ARG, restart the Prolog process if running before.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "prolog" '("mercury-mode-map" "prolog-")))
+(register-definition-prefixes "prolog" '("mercury-mode-map" "prolog-"))
;;;***
@@ -26532,14 +26817,14 @@ The default value is (\"/usr/local/share/emacs/fonts/bdf\").")
(custom-autoload 'bdf-directory-list "ps-bdf" t)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-bdf" '("bdf-")))
+(register-definition-prefixes "ps-bdf" '("bdf-"))
;;;***
;;;### (autoloads nil "ps-def" "ps-def.el" (0 0 0 0))
;;; Generated autoloads from ps-def.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-def" '("ps-")))
+(register-definition-prefixes "ps-def" '("ps-"))
;;;***
@@ -26587,7 +26872,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-mode" '("ps-")))
+(register-definition-prefixes "ps-mode" '("ps-"))
;;;***
@@ -26595,7 +26880,7 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
;;;;;; (0 0 0 0))
;;; Generated autoloads from ps-mule.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-mule" '("ps-mule-")))
+(register-definition-prefixes "ps-mule" '("ps-mule-"))
;;;***
@@ -26784,14 +27069,14 @@ If EXTENSION is any other symbol, it is ignored.
\(fn FACE-EXTENSION &optional MERGE-P ALIST-SYM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-print" '("ps-")))
+(register-definition-prefixes "ps-print" '("ps-"))
;;;***
;;;### (autoloads nil "ps-samp" "ps-samp.el" (0 0 0 0))
;;; Generated autoloads from ps-samp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ps-samp" '("ps-")))
+(register-definition-prefixes "ps-samp" '("ps-"))
;;;***
@@ -26811,14 +27096,14 @@ Optional argument FACE specifies the face to do the highlighting.
\(fn START END &optional FACE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pulse" '("pulse-")))
+(register-definition-prefixes "pulse" '("pulse-"))
;;;***
;;;### (autoloads nil "puny" "net/puny.el" (0 0 0 0))
;;; Generated autoloads from net/puny.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "puny" '("puny-")))
+(register-definition-prefixes "puny" '("puny-"))
;;;***
@@ -26857,7 +27142,7 @@ Major mode for editing Python files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "python" '("inferior-python-mode" "python-" "run-python-internal")))
+(register-definition-prefixes "python" '("inferior-python-mode" "python-" "run-python-internal"))
;;;***
@@ -26878,7 +27163,7 @@ them into characters should be done separately.
\(fn FROM TO &optional CODING-SYSTEM)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "qp" '("quoted-printable-")))
+(register-definition-prefixes "qp" '("quoted-printable-"))
;;;***
@@ -27108,7 +27393,7 @@ of each directory.
\(fn DIRNAME &rest DIRNAMES)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail" '("quail-")))
+(register-definition-prefixes "quail" '("quail-"))
;;;***
@@ -27116,7 +27401,7 @@ of each directory.
;;;;;; 0 0 0))
;;; Generated autoloads from leim/quail/ethiopic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/ethiopic" '("ethio-select-a-translation")))
+(register-definition-prefixes "quail/ethiopic" '("ethio-select-a-translation"))
;;;***
@@ -27131,7 +27416,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
\(fn INPUT-METHOD FUNC HELP-TEXT &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/hangul" '("alphabetp" "hangul" "notzerop")))
+(register-definition-prefixes "quail/hangul" '("alphabetp" "hangul" "notzerop"))
;;;***
@@ -27139,14 +27424,14 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
;;;;;; 0 0))
;;; Generated autoloads from leim/quail/indian.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/indian" '("indian-mlm-mozhi-u" "inscript-" "quail-")))
+(register-definition-prefixes "quail/indian" '("indian-mlm-mozhi-u" "inscript-" "quail-"))
;;;***
;;;### (autoloads nil "quail/ipa" "leim/quail/ipa.el" (0 0 0 0))
;;; Generated autoloads from leim/quail/ipa.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/ipa" '("ipa-x-sampa-")))
+(register-definition-prefixes "quail/ipa" '("ipa-x-sampa-"))
;;;***
@@ -27154,21 +27439,21 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
;;;;;; 0 0 0))
;;; Generated autoloads from leim/quail/japanese.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/japanese" '("quail-japanese-")))
+(register-definition-prefixes "quail/japanese" '("quail-japanese-"))
;;;***
;;;### (autoloads nil "quail/lao" "leim/quail/lao.el" (0 0 0 0))
;;; Generated autoloads from leim/quail/lao.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/lao" '("lao-" "quail-lao-update-translation")))
+(register-definition-prefixes "quail/lao" '("lao-" "quail-lao-update-translation"))
;;;***
;;;### (autoloads nil "quail/lrt" "leim/quail/lrt.el" (0 0 0 0))
;;; Generated autoloads from leim/quail/lrt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/lrt" '("quail-lrt-update-translation")))
+(register-definition-prefixes "quail/lrt" '("quail-lrt-update-translation"))
;;;***
@@ -27176,14 +27461,14 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
;;;;;; 0 0 0))
;;; Generated autoloads from leim/quail/sisheng.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/sisheng" '("quail-make-sisheng-rules" "sisheng-")))
+(register-definition-prefixes "quail/sisheng" '("quail-make-sisheng-rules" "sisheng-"))
;;;***
;;;### (autoloads nil "quail/thai" "leim/quail/thai.el" (0 0 0 0))
;;; Generated autoloads from leim/quail/thai.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/thai" '("thai-generate-quail-map")))
+(register-definition-prefixes "quail/thai" '("thai-generate-quail-map"))
;;;***
@@ -27191,7 +27476,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'.
;;;;;; 0 0 0))
;;; Generated autoloads from leim/quail/tibetan.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/tibetan" '("quail-tib" "tibetan-")))
+(register-definition-prefixes "quail/tibetan" '("quail-tib" "tibetan-"))
;;;***
@@ -27208,14 +27493,14 @@ While this input method is active, the variable
\(fn &optional ARG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/uni-input" '("ucs-input-")))
+(register-definition-prefixes "quail/uni-input" '("ucs-input-"))
;;;***
;;;### (autoloads nil "quail/viqr" "leim/quail/viqr.el" (0 0 0 0))
;;; Generated autoloads from leim/quail/viqr.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quail/viqr" '("viet-quail-define-rules")))
+(register-definition-prefixes "quail/viqr" '("viet-quail-define-rules"))
;;;***
@@ -27284,7 +27569,7 @@ The key bindings for `quickurl-list-mode' are:
(autoload 'quickurl-list "quickurl" "\
Display `quickurl-list' as a formatted list using `quickurl-list-mode'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "quickurl" '("quickurl-")))
+(register-definition-prefixes "quickurl" '("quickurl-"))
;;;***
@@ -27292,7 +27577,7 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'." t nil)
;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/radix-tree.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "radix-tree" '("radix-tree-")))
+(register-definition-prefixes "radix-tree" '("radix-tree-"))
;;;***
@@ -27333,9 +27618,12 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rcirc" '("defun-rcirc-command" "rcirc-" "set-rcirc-" "with-rcirc-")))
+(register-definition-prefixes "rcirc" '("defun-rcirc-command" "rcirc-" "set-rcirc-" "with-rcirc-"))
;;;***
@@ -27354,7 +27642,7 @@ in another window, initially containing an empty regexp.
As you edit the regexp in the \"*RE-Builder*\" buffer, the
matching parts of the target buffer will be highlighted." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "re-builder" '("re-builder-unload-function" "reb-")))
+(register-definition-prefixes "re-builder" '("re-builder-unload-function" "reb-"))
;;;***
@@ -27379,13 +27667,16 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Recentf mode is enabled, a \"Open Recent\" submenu is
displayed in the \"File\" menu, containing a list of files that
were operated on recently, in the most-recently-used order.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "recentf" '("recentf-")))
+(register-definition-prefixes "recentf" '("recentf-"))
;;;***
@@ -27531,25 +27822,28 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Activates the region if needed. Only lasts until the region is deactivated.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rect" '("apply-on-rectangle" "clear-rectangle-line" "delete-" "extract-rectangle-" "killed-rectangle" "ope" "rectangle-" "spaces-string" "string-rectangle-")))
+(register-definition-prefixes "rect" '("apply-on-rectangle" "clear-rectangle-line" "delete-" "extract-rectangle-" "killed-rectangle" "ope" "rectangle-" "spaces-string" "string-rectangle-"))
;;;***
;;;### (autoloads nil "refbib" "textmodes/refbib.el" (0 0 0 0))
;;; Generated autoloads from textmodes/refbib.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "refbib" '("r2b-")))
+(register-definition-prefixes "refbib" '("r2b-"))
;;;***
;;;### (autoloads nil "refer" "textmodes/refer.el" (0 0 0 0))
;;; Generated autoloads from textmodes/refer.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "refer" '("refer-")))
+(register-definition-prefixes "refer" '("refer-"))
;;;***
@@ -27564,6 +27858,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Refill mode is a buffer-local minor mode. When enabled, the
current paragraph is refilled as you edit. Self-inserting
characters only cause refilling if they would cause
@@ -27573,7 +27870,7 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "refill" '("refill-")))
+(register-definition-prefixes "refill" '("refill-"))
;;;***
@@ -27595,6 +27892,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\<reftex-mode-map>A Table of Contents of the entire (multifile) document with browsing
capabilities is available with `\\[reftex-toc]'.
@@ -27629,7 +27929,7 @@ on the menu bar.
Reset the symbols containing information from buffer scanning.
This enforces rescanning the buffer on next use." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex" '("reftex-")))
+(register-definition-prefixes "reftex" '("reftex-"))
;;;***
@@ -27637,7 +27937,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-auc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-auc" '("reftex-")))
+(register-definition-prefixes "reftex-auc" '("reftex-"))
;;;***
@@ -27645,7 +27945,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; "textmodes/reftex-cite.el" (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-cite.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-cite" '("reftex-")))
+(register-definition-prefixes "reftex-cite" '("reftex-"))
;;;***
@@ -27653,7 +27953,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-dcr.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-dcr" '("reftex-")))
+(register-definition-prefixes "reftex-dcr" '("reftex-"))
;;;***
@@ -27661,7 +27961,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; "textmodes/reftex-global.el" (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-global.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-global" '("reftex-")))
+(register-definition-prefixes "reftex-global" '("reftex-"))
;;;***
@@ -27669,7 +27969,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; "textmodes/reftex-index.el" (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-index.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-index" '("reftex-")))
+(register-definition-prefixes "reftex-index" '("reftex-"))
;;;***
@@ -27677,7 +27977,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; "textmodes/reftex-parse.el" (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-parse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-parse" '("reftex-")))
+(register-definition-prefixes "reftex-parse" '("reftex-"))
;;;***
@@ -27685,7 +27985,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-ref.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-ref" '("reftex-")))
+(register-definition-prefixes "reftex-ref" '("reftex-"))
;;;***
@@ -27693,7 +27993,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-sel.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-sel" '("reftex-")))
+(register-definition-prefixes "reftex-sel" '("reftex-"))
;;;***
@@ -27701,7 +28001,7 @@ This enforces rescanning the buffer on next use." nil nil)
;;;;;; (0 0 0 0))
;;; Generated autoloads from textmodes/reftex-toc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-toc" '("reftex-")))
+(register-definition-prefixes "reftex-toc" '("reftex-"))
;;;***
@@ -27713,7 +28013,7 @@ This enforces rescanning the buffer on next use." nil nil)
(put 'reftex-level-indent 'safe-local-variable 'integerp)
(put 'reftex-guess-label-type 'safe-local-variable (lambda (x) (memq x '(nil t))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reftex-vars" '("reftex-")))
+(register-definition-prefixes "reftex-vars" '("reftex-"))
;;;***
@@ -27777,7 +28077,7 @@ This means the number of non-shy regexp grouping constructs
\(fn REGEXP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "regexp-opt" '("regexp-opt-")))
+(register-definition-prefixes "regexp-opt" '("regexp-opt-"))
;;;***
@@ -27785,14 +28085,14 @@ This means the number of non-shy regexp grouping constructs
;;; Generated autoloads from emacs-lisp/regi.el
(push (purecopy '(regi 1 8)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "regi" '("regi-")))
+(register-definition-prefixes "regi" '("regi-"))
;;;***
;;;### (autoloads nil "registry" "registry.el" (0 0 0 0))
;;; Generated autoloads from registry.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "registry" '("registry-")))
+(register-definition-prefixes "registry" '("registry-"))
;;;***
@@ -27843,7 +28143,7 @@ to turn the *scratch* buffer into your notes buffer.
\(fn &optional SWITCH-TO)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "remember" '("remember-")))
+(register-definition-prefixes "remember" '("remember-"))
;;;***
@@ -27867,7 +28167,7 @@ recently executed command not bound to an input event\".
\(fn REPEAT-ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "repeat" '("repeat-")))
+(register-definition-prefixes "repeat" '("repeat-"))
;;;***
@@ -27900,7 +28200,7 @@ mail-sending package is used for editing and sending the message.
\(fn ADDRESS PKGNAME VARLIST &optional PRE-HOOKS POST-HOOKS SALUTATION)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reporter" '("reporter-")))
+(register-definition-prefixes "reporter" '("reporter-"))
;;;***
@@ -27928,7 +28228,7 @@ first comment line visible (if point is in a comment).
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reposition" '("repos-count-screen-lines")))
+(register-definition-prefixes "reposition" '("repos-count-screen-lines"))
;;;***
@@ -27943,6 +28243,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Reveal mode is a buffer-local minor mode. When enabled, it
reveals invisible text around point.
@@ -27967,9 +28270,12 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reveal" '("reveal-")))
+(register-definition-prefixes "reveal" '("reveal-"))
;;;***
@@ -27977,49 +28283,49 @@ enable the mode if ARG is omitted or nil, and toggle it if ARG is
;;;;;; 0))
;;; Generated autoloads from international/rfc1843.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc1843" '("rfc1843-")))
+(register-definition-prefixes "rfc1843" '("rfc1843-"))
;;;***
;;;### (autoloads nil "rfc2045" "mail/rfc2045.el" (0 0 0 0))
;;; Generated autoloads from mail/rfc2045.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc2045" '("rfc2045-encode-string")))
+(register-definition-prefixes "rfc2045" '("rfc2045-encode-string"))
;;;***
;;;### (autoloads nil "rfc2047" "mail/rfc2047.el" (0 0 0 0))
;;; Generated autoloads from mail/rfc2047.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc2047" '("rfc2047-")))
+(register-definition-prefixes "rfc2047" '("rfc2047-"))
;;;***
;;;### (autoloads nil "rfc2104" "net/rfc2104.el" (0 0 0 0))
;;; Generated autoloads from net/rfc2104.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc2104" '("rfc2104-")))
+(register-definition-prefixes "rfc2104" '("rfc2104-"))
;;;***
;;;### (autoloads nil "rfc2231" "mail/rfc2231.el" (0 0 0 0))
;;; Generated autoloads from mail/rfc2231.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc2231" '("rfc2231-")))
+(register-definition-prefixes "rfc2231" '("rfc2231-"))
;;;***
;;;### (autoloads nil "rfc2368" "mail/rfc2368.el" (0 0 0 0))
;;; Generated autoloads from mail/rfc2368.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc2368" '("rfc2368-")))
+(register-definition-prefixes "rfc2368" '("rfc2368-"))
;;;***
;;;### (autoloads nil "rfc822" "mail/rfc822.el" (0 0 0 0))
;;; Generated autoloads from mail/rfc822.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rfc822" '("rfc822-")))
+(register-definition-prefixes "rfc822" '("rfc822-"))
;;;***
@@ -28036,7 +28342,7 @@ Make a ring that can contain SIZE elements.
\(fn SIZE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ring" '("ring-")))
+(register-definition-prefixes "ring" '("ring-"))
;;;***
@@ -28082,7 +28388,7 @@ variable.
\(fn INPUT-ARGS &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rlogin" '("rlogin-")))
+(register-definition-prefixes "rlogin" '("rlogin-"))
;;;***
@@ -28279,7 +28585,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
\(fn PASSWORD)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmail" '("mail-" "rmail-")))
+(register-definition-prefixes "rmail" '("mail-" "rmail-"))
;;;***
@@ -28287,7 +28593,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmail-spam-filter.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmail-spam-filter" '("rmail-" "rsf-")))
+(register-definition-prefixes "rmail-spam-filter" '("rmail-" "rsf-"))
;;;***
@@ -28295,7 +28601,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmailedit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailedit" '("rmail-")))
+(register-definition-prefixes "rmailedit" '("rmail-"))
;;;***
@@ -28303,7 +28609,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmailkwd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailkwd" '("rmail-")))
+(register-definition-prefixes "rmailkwd" '("rmail-"))
;;;***
@@ -28311,7 +28617,7 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmailmm.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailmm" '("rmail-")))
+(register-definition-prefixes "rmailmm" '("rmail-"))
;;;***
@@ -28383,7 +28689,7 @@ than appending to it. Deletes the message after writing if
\(fn FILE-NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailout" '("rmail-")))
+(register-definition-prefixes "rmailout" '("rmail-"))
;;;***
@@ -28391,7 +28697,7 @@ than appending to it. Deletes the message after writing if
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmailsort.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailsort" '("rmail-")))
+(register-definition-prefixes "rmailsort" '("rmail-"))
;;;***
@@ -28399,7 +28705,7 @@ than appending to it. Deletes the message after writing if
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/rmailsum.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rmailsum" '("rmail-")))
+(register-definition-prefixes "rmailsum" '("rmail-"))
;;;***
@@ -28452,35 +28758,35 @@ Return a pattern.
\(fn FILENAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-cmpct" '("rng-")))
+(register-definition-prefixes "rng-cmpct" '("rng-"))
;;;***
;;;### (autoloads nil "rng-dt" "nxml/rng-dt.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-dt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-dt" '("rng-dt-")))
+(register-definition-prefixes "rng-dt" '("rng-dt-"))
;;;***
;;;### (autoloads nil "rng-loc" "nxml/rng-loc.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-loc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-loc" '("rng-")))
+(register-definition-prefixes "rng-loc" '("rng-"))
;;;***
;;;### (autoloads nil "rng-maint" "nxml/rng-maint.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-maint.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-maint" '("rng-")))
+(register-definition-prefixes "rng-maint" '("rng-"))
;;;***
;;;### (autoloads nil "rng-match" "nxml/rng-match.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-match.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-match" '("rng-")))
+(register-definition-prefixes "rng-match" '("rng-"))
;;;***
@@ -28492,35 +28798,35 @@ Initialize `nxml-mode' to take advantage of `rng-validate-mode'.
This is typically called from `nxml-mode-hook'.
Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-nxml" '("rng-")))
+(register-definition-prefixes "rng-nxml" '("rng-"))
;;;***
;;;### (autoloads nil "rng-parse" "nxml/rng-parse.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-parse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-parse" '("rng-parse-")))
+(register-definition-prefixes "rng-parse" '("rng-parse-"))
;;;***
;;;### (autoloads nil "rng-pttrn" "nxml/rng-pttrn.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-pttrn.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-pttrn" '("rng-")))
+(register-definition-prefixes "rng-pttrn" '("rng-"))
;;;***
;;;### (autoloads nil "rng-uri" "nxml/rng-uri.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-uri.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-uri" '("rng-")))
+(register-definition-prefixes "rng-uri" '("rng-"))
;;;***
;;;### (autoloads nil "rng-util" "nxml/rng-util.el" (0 0 0 0))
;;; Generated autoloads from nxml/rng-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-util" '("rng-")))
+(register-definition-prefixes "rng-util" '("rng-"))
;;;***
@@ -28535,6 +28841,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Checks whether the buffer is a well-formed XML 1.0 document,
conforming to the XML Namespaces Recommendation and valid against a
RELAX NG schema. The mode-line indicates whether it is or not. Any
@@ -28557,7 +28866,7 @@ to use for finding the schema.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-valid" '("rng-")))
+(register-definition-prefixes "rng-valid" '("rng-"))
;;;***
@@ -28586,7 +28895,7 @@ must be equal.
\(fn NAME PARAMS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rng-xsd" '("rng-xsd-" "xsd-duration-reference-dates")))
+(register-definition-prefixes "rng-xsd" '("rng-xsd-" "xsd-duration-reference-dates"))
;;;***
@@ -28620,7 +28929,7 @@ Start using robin package NAME, which is a string.
\(fn NAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "robin" '("robin-")))
+(register-definition-prefixes "robin" '("robin-"))
;;;***
@@ -28658,7 +28967,7 @@ See also `toggle-rot13-mode'." t nil)
(autoload 'toggle-rot13-mode "rot13" "\
Toggle the use of ROT13 encoding for the current window." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rot13" '("rot13-")))
+(register-definition-prefixes "rot13" '("rot13-"))
;;;***
@@ -28686,20 +28995,23 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When ReST minor mode is enabled, the ReST mode keybindings
are installed on top of the major mode bindings. Use this
for modes derived from Text mode, like Mail mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rst" '("rst-")))
+(register-definition-prefixes "rst" '("rst-"))
;;;***
;;;### (autoloads nil "rtree" "rtree.el" (0 0 0 0))
;;; Generated autoloads from rtree.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rtree" '("rtree-")))
+(register-definition-prefixes "rtree" '("rtree-"))
;;;***
@@ -28717,7 +29029,7 @@ Major mode for editing Ruby code.
(dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'ruby-mode)))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ruby-mode" '("ruby-")))
+(register-definition-prefixes "ruby-mode" '("ruby-"))
;;;***
@@ -28736,9 +29048,12 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ruler-mode" '("ruler-")))
+(register-definition-prefixes "ruler-mode" '("ruler-"))
;;;***
@@ -28932,28 +29247,28 @@ For more details, see Info node `(elisp) Extending Rx'.
(function-put 'rx-define 'lisp-indent-function 'defun)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rx" '("rx-")))
+(register-definition-prefixes "rx" '("rx-"))
;;;***
;;;### (autoloads nil "sasl" "net/sasl.el" (0 0 0 0))
;;; Generated autoloads from net/sasl.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl" '("sasl-")))
+(register-definition-prefixes "sasl" '("sasl-"))
;;;***
;;;### (autoloads nil "sasl-cram" "net/sasl-cram.el" (0 0 0 0))
;;; Generated autoloads from net/sasl-cram.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl-cram" '("sasl-cram-md5-")))
+(register-definition-prefixes "sasl-cram" '("sasl-cram-md5-"))
;;;***
;;;### (autoloads nil "sasl-digest" "net/sasl-digest.el" (0 0 0 0))
;;; Generated autoloads from net/sasl-digest.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl-digest" '("sasl-digest-md5-")))
+(register-definition-prefixes "sasl-digest" '("sasl-digest-md5-"))
;;;***
@@ -28961,7 +29276,7 @@ For more details, see Info node `(elisp) Extending Rx'.
;;; Generated autoloads from net/sasl-ntlm.el
(push (purecopy '(sasl 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl-ntlm" '("sasl-ntlm-")))
+(register-definition-prefixes "sasl-ntlm" '("sasl-ntlm-"))
;;;***
@@ -28969,7 +29284,7 @@ For more details, see Info node `(elisp) Extending Rx'.
;;;;;; 0 0 0))
;;; Generated autoloads from net/sasl-scram-rfc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl-scram-rfc" '("sasl-scram-")))
+(register-definition-prefixes "sasl-scram-rfc" '("sasl-scram-"))
;;;***
@@ -28977,7 +29292,7 @@ For more details, see Info node `(elisp) Extending Rx'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from net/sasl-scram-sha256.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sasl-scram-sha256" '("sasl-scram-sha")))
+(register-definition-prefixes "sasl-scram-sha256" '("sasl-scram-sha"))
;;;***
@@ -29003,6 +29318,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Savehist mode is enabled, minibuffer history is saved
to `savehist-file' periodically and when exiting Emacs. When
Savehist mode is enabled for the first time in an Emacs session,
@@ -29031,7 +29349,7 @@ histories, which is probably undesirable.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "savehist" '("savehist-")))
+(register-definition-prefixes "savehist" '("savehist-"))
;;;***
@@ -29058,6 +29376,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'save-place-local-mode "saveplace" "\
@@ -29071,6 +29392,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
To save places automatically in all files, put this in your init
file:
@@ -29078,7 +29402,7 @@ file:
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "saveplace" '("load-save-place-alist-from-file" "save-place")))
+(register-definition-prefixes "saveplace" '("load-save-place-alist-from-file" "save-place"))
;;;***
@@ -29119,7 +29443,7 @@ that variable's value is a string.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "scheme" '("dsssl-" "scheme-")))
+(register-definition-prefixes "scheme" '("dsssl-" "scheme-"))
;;;***
@@ -29134,7 +29458,7 @@ This mode is an extended emacs-lisp mode.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "score-mode" '("gnus-score-" "score-mode-")))
+(register-definition-prefixes "score-mode" '("gnus-score-" "score-mode-"))
;;;***
@@ -29159,19 +29483,22 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Scroll-All mode is enabled, scrolling commands invoked in
one window apply to all visible windows in the same frame.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "scroll-all" '("scroll-all-")))
+(register-definition-prefixes "scroll-all" '("scroll-all-"))
;;;***
;;;### (autoloads nil "scroll-bar" "scroll-bar.el" (0 0 0 0))
;;; Generated autoloads from scroll-bar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "scroll-bar" '("get-scroll-bar-mode" "horizontal-scroll-bar" "previous-scroll-bar-mode" "scroll-bar-" "set-scroll-bar-mode" "toggle-")))
+(register-definition-prefixes "scroll-bar" '("get-scroll-bar-mode" "horizontal-scroll-bar" "previous-scroll-bar-mode" "scroll-bar-" "set-scroll-bar-mode" "toggle-"))
;;;***
@@ -29186,6 +29513,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When enabled, keys that normally move point by line or paragraph
will scroll the buffer by the respective amount of lines instead
and point will be kept vertically fixed relative to window
@@ -29196,7 +29526,7 @@ MS-Windows systems if `w32-scroll-lock-modifier' is non-nil.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "scroll-lock" '("scroll-lock-")))
+(register-definition-prefixes "scroll-lock" '("scroll-lock-"))
;;;***
@@ -29205,7 +29535,7 @@ MS-Windows systems if `w32-scroll-lock-modifier' is non-nil.
(when (featurep 'dbusbind)
(autoload 'secrets-show-secrets "secrets" nil t))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "secrets" '("secrets-")))
+(register-definition-prefixes "secrets" '("secrets-"))
;;;***
@@ -29257,6 +29587,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
In Semantic mode, Emacs parses the buffers you visit for their
semantic content. This information is used by a variety of
auxiliary minor modes, listed in `semantic-default-submodes';
@@ -29267,7 +29600,7 @@ Semantic mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic" '("bovinate" "semantic-")))
+(register-definition-prefixes "semantic" '("bovinate" "semantic-"))
;;;***
@@ -29275,7 +29608,7 @@ Semantic mode.
;;;;;; "cedet/semantic/analyze.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/analyze.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/analyze" '("semantic-a")))
+(register-definition-prefixes "semantic/analyze" '("semantic-a"))
;;;***
@@ -29283,7 +29616,7 @@ Semantic mode.
;;;;;; "cedet/semantic/analyze/complete.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/analyze/complete.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/analyze/complete" '("semantic-analyze-")))
+(register-definition-prefixes "semantic/analyze/complete" '("semantic-analyze-"))
;;;***
@@ -29291,7 +29624,7 @@ Semantic mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/analyze/debug.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/analyze/debug" '("semantic-analyze")))
+(register-definition-prefixes "semantic/analyze/debug" '("semantic-analyze"))
;;;***
@@ -29299,7 +29632,7 @@ Semantic mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/analyze/fcn.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/analyze/fcn" '("semantic-analyze-")))
+(register-definition-prefixes "semantic/analyze/fcn" '("semantic-analyze-"))
;;;***
@@ -29307,7 +29640,7 @@ Semantic mode.
;;;;;; "cedet/semantic/analyze/refs.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/analyze/refs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/analyze/refs" '("semantic-")))
+(register-definition-prefixes "semantic/analyze/refs" '("semantic-"))
;;;***
@@ -29315,7 +29648,7 @@ Semantic mode.
;;;;;; "cedet/semantic/bovine.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine" '("semantic-")))
+(register-definition-prefixes "semantic/bovine" '("semantic-"))
;;;***
@@ -29323,7 +29656,7 @@ Semantic mode.
;;;;;; "cedet/semantic/bovine/c.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/c.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/c" '("c-mode" "semantic")))
+(register-definition-prefixes "semantic/bovine/c" '("c-mode" "semantic"))
;;;***
@@ -29331,7 +29664,7 @@ Semantic mode.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/debug.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/debug" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/debug" '("semantic-"))
;;;***
@@ -29339,7 +29672,7 @@ Semantic mode.
;;;;;; "cedet/semantic/bovine/el.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/el.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/el" '("emacs-lisp-mode" "semantic-")))
+(register-definition-prefixes "semantic/bovine/el" '("emacs-lisp-mode" "semantic-"))
;;;***
@@ -29347,7 +29680,7 @@ Semantic mode.
;;;;;; "cedet/semantic/bovine/gcc.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/gcc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/gcc" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/gcc" '("semantic-"))
;;;***
@@ -29360,7 +29693,7 @@ Major mode for editing Bovine grammars.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/grammar" '("bovine-")))
+(register-definition-prefixes "semantic/bovine/grammar" '("bovine-"))
;;;***
@@ -29368,7 +29701,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/bovine/make.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/make.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/make" '("makefile-mode" "semantic-")))
+(register-definition-prefixes "semantic/bovine/make" '("makefile-mode" "semantic-"))
;;;***
@@ -29376,7 +29709,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/bovine/scm.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/bovine/scm.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/bovine/scm" '("semantic-")))
+(register-definition-prefixes "semantic/bovine/scm" '("semantic-"))
;;;***
@@ -29384,7 +29717,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/chart.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/chart" '("semantic-chart-")))
+(register-definition-prefixes "semantic/chart" '("semantic-chart-"))
;;;***
@@ -29392,7 +29725,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/complete.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/complete.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/complete" '("semantic-")))
+(register-definition-prefixes "semantic/complete" '("semantic-"))
;;;***
@@ -29400,7 +29733,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/ctxt.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/ctxt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/ctxt" '("semantic-")))
+(register-definition-prefixes "semantic/ctxt" '("semantic-"))
;;;***
@@ -29408,7 +29741,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db" '("semanticdb-")))
+(register-definition-prefixes "semantic/db" '("semanticdb-"))
;;;***
@@ -29416,7 +29749,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-debug.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-debug" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-debug" '("semanticdb-"))
;;;***
@@ -29424,7 +29757,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-ebrowse.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-ebrowse" '("c++-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-ebrowse" '("c++-mode" "semanticdb-"))
;;;***
@@ -29432,7 +29765,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-el.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-el" '("emacs-lisp-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-el" '("emacs-lisp-mode" "semanticdb-"))
;;;***
@@ -29440,7 +29773,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db-file.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-file.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-file" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-file" '("semanticdb-"))
;;;***
@@ -29448,7 +29781,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db-find.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-find.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-find" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-find" '("semanticdb-"))
;;;***
@@ -29456,7 +29789,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db-global.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-global.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-global" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-global" '("semanticdb-"))
;;;***
@@ -29464,7 +29797,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-javascript.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-javascript" '("javascript-mode" "semanticdb-")))
+(register-definition-prefixes "semantic/db-javascript" '("javascript-mode" "semanticdb-"))
;;;***
@@ -29472,7 +29805,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db-mode.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-mode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-mode" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-mode" '("semanticdb-"))
;;;***
@@ -29480,7 +29813,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-ref.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-ref" '("semanticdb-ref-")))
+(register-definition-prefixes "semantic/db-ref" '("semanticdb-ref-"))
;;;***
@@ -29488,7 +29821,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/db-typecache.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/db-typecache.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/db-typecache" '("semanticdb-")))
+(register-definition-prefixes "semantic/db-typecache" '("semanticdb-"))
;;;***
@@ -29496,7 +29829,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/debug.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/debug.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/debug" '("semantic-debug-")))
+(register-definition-prefixes "semantic/debug" '("semantic-debug-"))
;;;***
@@ -29504,7 +29837,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/decorate.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/decorate" '("semantic-")))
+(register-definition-prefixes "semantic/decorate" '("semantic-"))
;;;***
@@ -29512,7 +29845,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/decorate/include.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/decorate/include.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/decorate/include" '("semantic-decoration-")))
+(register-definition-prefixes "semantic/decorate/include" '("semantic-decoration-"))
;;;***
@@ -29520,7 +29853,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/decorate/mode.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/decorate/mode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/decorate/mode" '("define-semantic-decoration-style" "semantic-")))
+(register-definition-prefixes "semantic/decorate/mode" '("define-semantic-decoration-style" "semantic-"))
;;;***
@@ -29528,7 +29861,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/dep.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/dep.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/dep" '("defcustom-mode-local-semantic-dependency-system-include-path" "semantic-")))
+(register-definition-prefixes "semantic/dep" '("defcustom-mode-local-semantic-dependency-system-include-path" "semantic-"))
;;;***
@@ -29536,7 +29869,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/doc.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/doc.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/doc" '("semantic-doc")))
+(register-definition-prefixes "semantic/doc" '("semantic-doc"))
;;;***
@@ -29544,7 +29877,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/ede-grammar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/ede-grammar" '("semantic-ede-")))
+(register-definition-prefixes "semantic/ede-grammar" '("semantic-ede-"))
;;;***
@@ -29552,7 +29885,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/edit.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/edit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/edit" '("semantic-")))
+(register-definition-prefixes "semantic/edit" '("semantic-"))
;;;***
@@ -29560,7 +29893,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/find.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/find.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/find" '("semantic-")))
+(register-definition-prefixes "semantic/find" '("semantic-"))
;;;***
@@ -29568,7 +29901,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/format.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/format.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/format" '("semantic-")))
+(register-definition-prefixes "semantic/format" '("semantic-"))
;;;***
@@ -29576,7 +29909,7 @@ Major mode for editing Bovine grammars.
;;;;;; 0))
;;; Generated autoloads from cedet/semantic/fw.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/fw" '("semantic")))
+(register-definition-prefixes "semantic/fw" '("semantic"))
;;;***
@@ -29584,7 +29917,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/grammar.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/grammar" '("semantic-")))
+(register-definition-prefixes "semantic/grammar" '("semantic-"))
;;;***
@@ -29592,7 +29925,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/grammar-wy.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/grammar-wy" '("semantic-grammar-wy--")))
+(register-definition-prefixes "semantic/grammar-wy" '("semantic-grammar-wy--"))
;;;***
@@ -29600,7 +29933,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/html.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/html.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/html" '("semantic-")))
+(register-definition-prefixes "semantic/html" '("semantic-"))
;;;***
@@ -29608,7 +29941,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/ia.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/ia.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/ia" '("semantic-ia-")))
+(register-definition-prefixes "semantic/ia" '("semantic-ia-"))
;;;***
@@ -29616,7 +29949,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/ia-sb.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/ia-sb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/ia-sb" '("semantic-ia-s")))
+(register-definition-prefixes "semantic/ia-sb" '("semantic-ia-s"))
;;;***
@@ -29624,7 +29957,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/idle.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/idle.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/idle" '("define-semantic-idle-service" "global-semantic-idle-summary-mode" "semantic-")))
+(register-definition-prefixes "semantic/idle" '("define-semantic-idle-service" "global-semantic-idle-summary-mode" "semantic-"))
;;;***
@@ -29632,7 +29965,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/imenu.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/imenu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/imenu" '("semantic-")))
+(register-definition-prefixes "semantic/imenu" '("semantic-"))
;;;***
@@ -29640,7 +29973,7 @@ Major mode for editing Bovine grammars.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/semantic/java.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/java" '("semantic-")))
+(register-definition-prefixes "semantic/java" '("semantic-"))
;;;***
@@ -29648,7 +29981,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/lex.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/lex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/lex" '("define-lex" "semantic-")))
+(register-definition-prefixes "semantic/lex" '("define-lex" "semantic-"))
;;;***
@@ -29656,7 +29989,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/lex-spp.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/lex-spp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/lex-spp" '("define-lex-spp-" "semantic-lex-")))
+(register-definition-prefixes "semantic/lex-spp" '("define-lex-spp-" "semantic-lex-"))
;;;***
@@ -29664,7 +29997,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/mru-bookmark.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/mru-bookmark.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/mru-bookmark" '("global-semantic-mru-bookmark-mode" "semantic-")))
+(register-definition-prefixes "semantic/mru-bookmark" '("global-semantic-mru-bookmark-mode" "semantic-"))
;;;***
@@ -29672,7 +30005,7 @@ Major mode for editing Bovine grammars.
;;;;;; 0))
;;; Generated autoloads from cedet/semantic/sb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/sb" '("semantic-sb-")))
+(register-definition-prefixes "semantic/sb" '("semantic-sb-"))
;;;***
@@ -29680,7 +30013,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/scope.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/scope.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/scope" '("semantic-")))
+(register-definition-prefixes "semantic/scope" '("semantic-"))
;;;***
@@ -29688,7 +30021,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/senator.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/senator.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/senator" '("semantic-up-reference" "senator-")))
+(register-definition-prefixes "semantic/senator" '("semantic-up-reference" "senator-"))
;;;***
@@ -29696,7 +30029,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/sort.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/sort.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/sort" '("semantic-")))
+(register-definition-prefixes "semantic/sort" '("semantic-"))
;;;***
@@ -29704,7 +30037,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref" '("semantic-symref-"))
;;;***
@@ -29712,7 +30045,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref/cscope.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/cscope.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/cscope" '("semantic-symref-cscope--line-re")))
+(register-definition-prefixes "semantic/symref/cscope" '("semantic-symref-cscope--line-re"))
;;;***
@@ -29720,7 +30053,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/filter.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/filter" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/filter" '("semantic-symref-"))
;;;***
@@ -29728,7 +30061,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref/global.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/global.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/global" '("semantic-symref-global--line-re")))
+(register-definition-prefixes "semantic/symref/global" '("semantic-symref-global--line-re"))
;;;***
@@ -29736,7 +30069,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref/grep.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/grep.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/grep" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/grep" '("semantic-symref-"))
;;;***
@@ -29744,7 +30077,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref/idutils.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/idutils.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/idutils" '("semantic-symref-idutils--line-re")))
+(register-definition-prefixes "semantic/symref/idutils" '("semantic-symref-idutils--line-re"))
;;;***
@@ -29752,7 +30085,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/symref/list.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/symref/list.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/symref/list" '("semantic-symref-")))
+(register-definition-prefixes "semantic/symref/list" '("semantic-symref-"))
;;;***
@@ -29760,7 +30093,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/tag.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/tag.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/tag" '("semantic-")))
+(register-definition-prefixes "semantic/tag" '("semantic-"))
;;;***
@@ -29768,7 +30101,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/tag-file.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/tag-file.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/tag-file" '("semantic-prototype-file")))
+(register-definition-prefixes "semantic/tag-file" '("semantic-prototype-file"))
;;;***
@@ -29776,7 +30109,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/tag-ls.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/tag-ls.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/tag-ls" '("semantic-")))
+(register-definition-prefixes "semantic/tag-ls" '("semantic-"))
;;;***
@@ -29784,7 +30117,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/tag-write.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/tag-write.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/tag-write" '("semantic-tag-write-")))
+(register-definition-prefixes "semantic/tag-write" '("semantic-tag-write-"))
;;;***
@@ -29792,7 +30125,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/texi.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/texi.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/texi" '("semantic-")))
+(register-definition-prefixes "semantic/texi" '("semantic-"))
;;;***
@@ -29800,7 +30133,7 @@ Major mode for editing Bovine grammars.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/semantic/util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/util" '("semantic-")))
+(register-definition-prefixes "semantic/util" '("semantic-"))
;;;***
@@ -29808,7 +30141,7 @@ Major mode for editing Bovine grammars.
;;;;;; "cedet/semantic/util-modes.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/util-modes.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/util-modes" '("semantic-")))
+(register-definition-prefixes "semantic/util-modes" '("semantic-"))
;;;***
@@ -29816,7 +30149,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent" '("define-wisent-lexer" "wisent-")))
+(register-definition-prefixes "semantic/wisent" '("define-wisent-lexer" "wisent-"))
;;;***
@@ -29824,7 +30157,7 @@ Major mode for editing Bovine grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/comp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/comp" '("wisent-")))
+(register-definition-prefixes "semantic/wisent/comp" '("wisent-"))
;;;***
@@ -29837,7 +30170,7 @@ Major mode for editing Wisent grammars.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/grammar" '("wisent-")))
+(register-definition-prefixes "semantic/wisent/grammar" '("wisent-"))
;;;***
@@ -29845,7 +30178,7 @@ Major mode for editing Wisent grammars.
;;;;;; "cedet/semantic/wisent/java-tags.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/java-tags.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/java-tags" '("semantic-" "wisent-java-parse-error")))
+(register-definition-prefixes "semantic/wisent/java-tags" '("semantic-" "wisent-java-parse-error"))
;;;***
@@ -29853,7 +30186,7 @@ Major mode for editing Wisent grammars.
;;;;;; "cedet/semantic/wisent/javascript.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/javascript.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/javascript" '("semantic-" "wisent-javascript-jv-expand-tag")))
+(register-definition-prefixes "semantic/wisent/javascript" '("semantic-" "wisent-javascript-jv-expand-tag"))
;;;***
@@ -29861,7 +30194,7 @@ Major mode for editing Wisent grammars.
;;;;;; "cedet/semantic/wisent/python.el" (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/python.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/python" '("semantic-" "wisent-python-")))
+(register-definition-prefixes "semantic/wisent/python" '("semantic-" "wisent-python-"))
;;;***
@@ -29869,7 +30202,7 @@ Major mode for editing Wisent grammars.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/semantic/wisent/wisent.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "semantic/wisent/wisent" '("$action" "$nterm" "$region" "wisent-")))
+(register-definition-prefixes "semantic/wisent/wisent" '("$action" "$nterm" "$region" "wisent-"))
;;;***
@@ -30151,13 +30484,13 @@ Like `mail' command, but display mail buffer in another frame.
\(fn &optional NOERASE TO SUBJECT IN-REPLY-TO CC REPLYBUFFER SENDACTIONS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sendmail" '("mail-" "sendmail-")))
+(register-definition-prefixes "sendmail" '("mail-" "sendmail-"))
;;;***
;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/seq.el
-(push (purecopy '(seq 2 21)) package--builtin-versions)
+(push (purecopy '(seq 2 22)) package--builtin-versions)
(autoload 'seq-take "seq" "\
Take the first N elements of SEQUENCE and return the result.
@@ -30224,7 +30557,13 @@ Equality is defined by TESTFN if non-nil or by `equal' if nil.
\(fn SEQUENCE ELT &optional TESTFN)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "seq" '("seq-")))
+(autoload 'seq-max "seq" "\
+Return the largest element of SEQUENCE.
+SEQUENCE must be a sequence of numbers or markers.
+
+\(fn SEQUENCE)" nil nil)
+
+(register-definition-prefixes "seq" '("seq-"))
;;;***
@@ -30284,6 +30623,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Server mode runs a process that accepts commands from the
`emacsclient' program. See Info node `Emacs server' and
`server-start' for details.
@@ -30299,7 +30641,7 @@ only these files will be asked to be saved.
\(fn ARG)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "server" '("server-")))
+(register-definition-prefixes "server" '("server-"))
;;;***
@@ -30343,7 +30685,7 @@ These are active only in the minibuffer, when entering or editing a
formula:
\\{ses-mode-edit-map}" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ses" '("ses")))
+(register-definition-prefixes "ses" '("ses"))
;;;***
@@ -30411,7 +30753,7 @@ To work around that, do:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sgml-mode" '("html-" "sgml-")))
+(register-definition-prefixes "sgml-mode" '("html-" "sgml-"))
;;;***
@@ -30477,7 +30819,7 @@ with your script for an edit-interpret-debug cycle.
(defalias 'shell-script-mode 'sh-mode)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sh-script" '("sh-")))
+(register-definition-prefixes "sh-script" '("sh-"))
;;;***
@@ -30528,7 +30870,7 @@ function, `load-path-shadows-find'.
\(fn &optional STRINGP)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shadow" '("load-path-shadows-")))
+(register-definition-prefixes "shadow" '("load-path-shadows-"))
;;;***
@@ -30562,7 +30904,7 @@ function). Each site can be either a hostname or the name of a cluster (see
(autoload 'shadow-initialize "shadowfile" "\
Set up file shadowing." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shadowfile" '("shadow")))
+(register-definition-prefixes "shadowfile" '("shadow"))
;;;***
@@ -30614,7 +30956,7 @@ Make the shell buffer the current buffer, and return it.
\(fn &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shell" '("dirs" "explicit-" "shell-")))
+(register-definition-prefixes "shell" '("dirs" "explicit-" "shell-"))
;;;***
@@ -30633,14 +30975,14 @@ DOM should be a parse tree as generated by
\(fn DOM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shr" '("shr-" "svg--wrap-svg")))
+(register-definition-prefixes "shr" '("shr-"))
;;;***
;;;### (autoloads nil "shr-color" "net/shr-color.el" (0 0 0 0))
;;; Generated autoloads from net/shr-color.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shr-color" '("shr-color-")))
+(register-definition-prefixes "shr-color" '("shr-color-"))
;;;***
@@ -30667,7 +31009,7 @@ DOM should be a parse tree as generated by
\(fn &optional NAME)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sieve" '("sieve-")))
+(register-definition-prefixes "sieve" '("sieve-"))
;;;***
@@ -30675,7 +31017,7 @@ DOM should be a parse tree as generated by
;;;;;; 0))
;;; Generated autoloads from net/sieve-manage.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sieve-manage" '("sieve-")))
+(register-definition-prefixes "sieve-manage" '("sieve-"))
;;;***
@@ -30692,7 +31034,7 @@ Turning on Sieve mode runs `sieve-mode-hook'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sieve-mode" '("sieve-")))
+(register-definition-prefixes "sieve-mode" '("sieve-"))
;;;***
@@ -30742,7 +31084,7 @@ with no arguments, if that value is non-nil.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "simula" '("simula-")))
+(register-definition-prefixes "simula" '("simula-"))
;;;***
@@ -30864,7 +31206,7 @@ twice for the others.
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "skeleton" '("skeleton-")))
+(register-definition-prefixes "skeleton" '("skeleton-"))
;;;***
@@ -30903,6 +31245,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\{smerge-mode-map}
\(fn &optional ARG)" t nil)
@@ -30913,14 +31258,14 @@ If no conflict maker is found, turn off `smerge-mode'.
\(fn &optional INTERACTIVELY)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smerge-mode" '("smerge-")))
+(register-definition-prefixes "smerge-mode" '("smerge-"))
;;;***
;;;### (autoloads nil "smie" "emacs-lisp/smie.el" (0 0 0 0))
;;; Generated autoloads from emacs-lisp/smie.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smie" '("smie-")))
+(register-definition-prefixes "smie" '("smie-"))
;;;***
@@ -30939,14 +31284,14 @@ interactively. If there's no argument, do it at the current buffer.
\(fn &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smiley" '("gnus-smiley-file-types" "smiley-")))
+(register-definition-prefixes "smiley" '("gnus-smiley-file-types" "smiley-"))
;;;***
;;;### (autoloads nil "smime" "gnus/smime.el" (0 0 0 0))
;;; Generated autoloads from gnus/smime.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smime" '("smime")))
+(register-definition-prefixes "smime" '("smime"))
;;;***
@@ -30958,7 +31303,7 @@ interactively. If there's no argument, do it at the current buffer.
(autoload 'smtpmail-send-queued-mail "smtpmail" "\
Send mail that was queued as a result of setting `smtpmail-queue-mail'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "smtpmail" '("smtpmail-")))
+(register-definition-prefixes "smtpmail" '("smtpmail-"))
;;;***
@@ -30981,7 +31326,7 @@ Snake mode keybindings:
\\[snake-move-up] Makes the snake move up
\\[snake-move-down] Makes the snake move down" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "snake" '("snake-")))
+(register-definition-prefixes "snake" '("snake-"))
;;;***
@@ -31008,7 +31353,7 @@ Delete converts tabs to spaces as it moves back.
Turning on snmp-mode runs the hooks in `snmp-common-mode-hook',
then `snmpv2-mode-hook'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "snmp-mode" '("snmp")))
+(register-definition-prefixes "snmp-mode" '("snmp"))
;;;***
@@ -31030,6 +31375,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Any active minor modes listed in `so-long-minor-modes' are disabled for the
current buffer, and buffer-local values are assigned to variables in accordance
with `so-long-variable-overrides'.
@@ -31106,6 +31454,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Many Emacs modes struggle with buffers which contain excessively long lines,
and may consequently cause unacceptable performance issues.
@@ -31122,7 +31473,7 @@ Use \\[so-long-customize] to configure the behaviour.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "so-long" '("so-long-" "turn-o")))
+(register-definition-prefixes "so-long" '("so-long-" "turn-o"))
;;;***
@@ -31130,7 +31481,7 @@ Use \\[so-long-customize] to configure the behaviour.
;;; Generated autoloads from net/soap-client.el
(push (purecopy '(soap-client 3 1 5)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "soap-client" '("soap-")))
+(register-definition-prefixes "soap-client" '("soap-"))
;;;***
@@ -31138,14 +31489,14 @@ Use \\[so-long-customize] to configure the behaviour.
;;;;;; 0))
;;; Generated autoloads from net/soap-inspect.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "soap-inspect" '("soap-")))
+(register-definition-prefixes "soap-inspect" '("soap-"))
;;;***
;;;### (autoloads nil "socks" "net/socks.el" (0 0 0 0))
;;; Generated autoloads from net/socks.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "socks" '("socks-")))
+(register-definition-prefixes "socks" '("socks-"))
;;;***
@@ -31162,7 +31513,7 @@ This function is suitable for execution in an init file.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "solar" '("calendar-" "diary-sunrise-sunset" "solar-")))
+(register-definition-prefixes "solar" '("calendar-" "diary-sunrise-sunset" "solar-"))
;;;***
@@ -31239,7 +31590,7 @@ Pick your favorite shortcuts:
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "solitaire" '("solitaire-")))
+(register-definition-prefixes "solitaire" '("solitaire-"))
;;;***
@@ -31421,14 +31772,14 @@ is non-nil, it also prints a message describing the number of deletions.
\(fn BEG END &optional REVERSE ADJACENT KEEP-BLANKS INTERACTIVE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sort" '("sort-")))
+(register-definition-prefixes "sort" '("sort-"))
;;;***
;;;### (autoloads nil "soundex" "soundex.el" (0 0 0 0))
;;; Generated autoloads from soundex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "soundex" '("soundex")))
+(register-definition-prefixes "soundex" '("soundex"))
;;;***
@@ -31444,7 +31795,7 @@ installed through `spam-necessary-extra-headers'.
\(fn &rest SYMBOLS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spam" '("spam-")))
+(register-definition-prefixes "spam" '("spam-"))
;;;***
@@ -31485,21 +31836,21 @@ Remove spam-report support from the Agent.
Spam reports will be queued with the method used when
\\[spam-report-agentize] was run." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spam-report" '("spam-report-")))
+(register-definition-prefixes "spam-report" '("spam-report-"))
;;;***
;;;### (autoloads nil "spam-stat" "gnus/spam-stat.el" (0 0 0 0))
;;; Generated autoloads from gnus/spam-stat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spam-stat" '("spam-stat" "with-spam-stat-max-buffer-size")))
+(register-definition-prefixes "spam-stat" '("spam-stat" "with-spam-stat-max-buffer-size"))
;;;***
;;;### (autoloads nil "spam-wash" "gnus/spam-wash.el" (0 0 0 0))
;;; Generated autoloads from gnus/spam-wash.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spam-wash" '("spam-")))
+(register-definition-prefixes "spam-wash" '("spam-"))
;;;***
@@ -31523,7 +31874,7 @@ Change frame focus to or from the speedbar frame.
If the selected frame is not speedbar, then speedbar frame is
selected. If the speedbar frame is active, then select the attached frame." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "speedbar" '("speedbar-")))
+(register-definition-prefixes "speedbar" '("speedbar-"))
;;;***
@@ -31536,7 +31887,7 @@ Adds that special touch of class to your outgoing mail." t nil)
(autoload 'snarf-spooks "spook" "\
Return a vector containing the lines from `spook-phrases-file'." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spook" '("spook-phrase")))
+(register-definition-prefixes "spook" '("spook-phrase"))
;;;***
@@ -31591,7 +31942,7 @@ must tell Emacs. Here's how to do that in your init file:
\(add-hook \\='sql-mode-hook
(lambda ()
- (modify-syntax-entry ?\\\\ \".\" sql-mode-syntax-table)))
+ (modify-syntax-entry ?\\\\ \"\\\\\" sql-mode-syntax-table)))
\(fn)" t nil)
@@ -32036,7 +32387,7 @@ Run vsql as an inferior process.
\(fn &optional BUFFER)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "sql" '("sql-")))
+(register-definition-prefixes "sql" '("sql-"))
;;;***
@@ -32044,7 +32395,7 @@ Run vsql as an inferior process.
;;; Generated autoloads from cedet/srecode.el
(push (purecopy '(srecode 1 2)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode" '("srecode-version")))
+(register-definition-prefixes "srecode" '("srecode-version"))
;;;***
@@ -32052,7 +32403,7 @@ Run vsql as an inferior process.
;;;;;; 0 0))
;;; Generated autoloads from cedet/srecode/args.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/args" '("srecode-")))
+(register-definition-prefixes "srecode/args" '("srecode-"))
;;;***
@@ -32060,7 +32411,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/compile.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/compile.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/compile" '("srecode-")))
+(register-definition-prefixes "srecode/compile" '("srecode-"))
;;;***
@@ -32068,7 +32419,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/cpp.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/cpp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/cpp" '("srecode-")))
+(register-definition-prefixes "srecode/cpp" '("srecode-"))
;;;***
@@ -32076,7 +32427,7 @@ Run vsql as an inferior process.
;;;;;; 0 0))
;;; Generated autoloads from cedet/srecode/ctxt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/ctxt" '("srecode-")))
+(register-definition-prefixes "srecode/ctxt" '("srecode-"))
;;;***
@@ -32084,7 +32435,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/dictionary.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/dictionary" '("srecode-")))
+(register-definition-prefixes "srecode/dictionary" '("srecode-"))
;;;***
@@ -32092,7 +32443,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/document.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/document.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/document" '("srecode-document-")))
+(register-definition-prefixes "srecode/document" '("srecode-document-"))
;;;***
@@ -32100,7 +32451,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/el.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/el" '("srecode-semantic-apply-tag-to-dict")))
+(register-definition-prefixes "srecode/el" '("srecode-semantic-apply-tag-to-dict"))
;;;***
@@ -32108,7 +32459,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/expandproto.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/expandproto.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/expandproto" '("srecode-")))
+(register-definition-prefixes "srecode/expandproto" '("srecode-"))
;;;***
@@ -32116,7 +32467,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/extract.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/extract" '("srecode-extract")))
+(register-definition-prefixes "srecode/extract" '("srecode-extract"))
;;;***
@@ -32124,7 +32475,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/fields.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/fields" '("srecode-")))
+(register-definition-prefixes "srecode/fields" '("srecode-"))
;;;***
@@ -32132,7 +32483,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/filters.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/filters" '("srecode-comment-prefix")))
+(register-definition-prefixes "srecode/filters" '("srecode-comment-prefix"))
;;;***
@@ -32140,7 +32491,7 @@ Run vsql as an inferior process.
;;;;;; 0 0))
;;; Generated autoloads from cedet/srecode/find.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/find" '("srecode-")))
+(register-definition-prefixes "srecode/find" '("srecode-"))
;;;***
@@ -32148,7 +32499,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/getset.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/getset.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/getset" '("srecode-")))
+(register-definition-prefixes "srecode/getset" '("srecode-"))
;;;***
@@ -32156,7 +32507,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/insert.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/insert.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/insert" '("srecode-")))
+(register-definition-prefixes "srecode/insert" '("srecode-"))
;;;***
@@ -32164,7 +32515,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/map.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/map.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/map" '("srecode-")))
+(register-definition-prefixes "srecode/map" '("srecode-"))
;;;***
@@ -32172,7 +32523,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/mode.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/mode.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/mode" '("srecode-")))
+(register-definition-prefixes "srecode/mode" '("srecode-"))
;;;***
@@ -32180,7 +32531,7 @@ Run vsql as an inferior process.
;;;;;; (0 0 0 0))
;;; Generated autoloads from cedet/srecode/semantic.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/semantic" '("srecode-semantic-")))
+(register-definition-prefixes "srecode/semantic" '("srecode-semantic-"))
;;;***
@@ -32188,7 +32539,7 @@ Run vsql as an inferior process.
;;;;;; "cedet/srecode/srt.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/srt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/srt" '("srecode-read-")))
+(register-definition-prefixes "srecode/srt" '("srecode-read-"))
;;;***
@@ -32203,7 +32554,7 @@ Major-mode for writing SRecode macros.
(defalias 'srt-mode 'srecode-template-mode)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/srt-mode" '("semantic-" "srecode-")))
+(register-definition-prefixes "srecode/srt-mode" '("semantic-" "srecode-"))
;;;***
@@ -32211,7 +32562,7 @@ Major-mode for writing SRecode macros.
;;;;;; 0 0 0))
;;; Generated autoloads from cedet/srecode/table.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/table" '("object-sort-list" "srecode-")))
+(register-definition-prefixes "srecode/table" '("object-sort-list" "srecode-"))
;;;***
@@ -32219,7 +32570,7 @@ Major-mode for writing SRecode macros.
;;;;;; "cedet/srecode/template.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/template.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/template" '("semantic-tag-components")))
+(register-definition-prefixes "srecode/template" '("semantic-tag-components"))
;;;***
@@ -32227,7 +32578,7 @@ Major-mode for writing SRecode macros.
;;;;;; "cedet/srecode/texi.el" (0 0 0 0))
;;; Generated autoloads from cedet/srecode/texi.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "srecode/texi" '("semantic-insert-foreign-tag" "srecode-texi-")))
+(register-definition-prefixes "srecode/texi" '("semantic-insert-foreign-tag" "srecode-texi-"))
;;;***
@@ -32314,6 +32665,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\\<strokes-mode-map>
Strokes are pictographic mouse gestures which invoke commands.
Strokes are invoked with \\[strokes-do-stroke]. You can define
@@ -32339,7 +32693,7 @@ Optional FORCE non-nil will ignore the buffer's read-only status.
(autoload 'strokes-compose-complex-stroke "strokes" "\
Read a complex stroke and insert its glyph into the current buffer." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "strokes" '("strokes-")))
+(register-definition-prefixes "strokes" '("strokes-"))
;;;***
@@ -32380,7 +32734,7 @@ Truncate STRING to LENGTH, replacing initial surplus with \"...\".
\(fn STRING LENGTH)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "subr-x" '("and-let*" "hash-table-" "if-let" "internal--" "replace-region-contents" "string-" "thread-" "when-let*")))
+(register-definition-prefixes "subr-x" '("and-let*" "hash-table-" "if-let" "internal--" "replace-region-contents" "string-" "thread-" "when-let*"))
;;;***
@@ -32397,6 +32751,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Subword mode is a buffer-local minor mode. Enabling it changes
the definition of a word so that word-based commands stop inside
symbols with mixed uppercase and lowercase letters,
@@ -32449,6 +32806,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Superword mode is a buffer-local minor mode. Enabling it changes
the definition of words such that symbols characters are treated
as parts of words: e.g., in `superword-mode',
@@ -32482,7 +32842,7 @@ See `superword-mode' for more information on Superword mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "subword" '("subword-" "superword-mode-map")))
+(register-definition-prefixes "subword" '("subword-" "superword-mode-map"))
;;;***
@@ -32514,7 +32874,7 @@ The region need not be active (and typically isn't when this
function is called). Also, the hook `sc-pre-hook' is run before,
and `sc-post-hook' is run after the guts of this function." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "supercite" '("sc-")))
+(register-definition-prefixes "supercite" '("sc-"))
;;;***
@@ -32522,15 +32882,13 @@ and `sc-post-hook' is run after the guts of this function." nil nil)
;;; Generated autoloads from svg.el
(push (purecopy '(svg 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "svg" '("svg-")))
+(register-definition-prefixes "svg" '("svg-"))
;;;***
;;;### (autoloads nil "t-mouse" "t-mouse.el" (0 0 0 0))
;;; Generated autoloads from t-mouse.el
-(define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
-
(defvar gpm-mouse-mode t "\
Non-nil if Gpm-Mouse mode is enabled.
See the `gpm-mouse-mode' command
@@ -32549,6 +32907,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
This allows the use of the mouse when operating on a GNU/Linux console,
in the same way as you can use the mouse under X11.
It relies on the `gpm' daemon being activated.
@@ -32559,7 +32920,7 @@ GPM. This is due to limitations in GPM and the Linux kernel.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "t-mouse" '("gpm-mouse-")))
+(register-definition-prefixes "t-mouse" '("gpm-mouse-"))
;;;***
@@ -32574,6 +32935,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(defvar tab-line-exclude nil)
@@ -32604,7 +32968,7 @@ See `tab-line-mode' for more information on Tab-Line mode.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tab-line" '("tab-line-")))
+(register-definition-prefixes "tab-line" '("tab-line-"))
;;;***
@@ -32635,7 +32999,7 @@ The variable `tab-width' controls the spacing of tab stops.
\(fn START END &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tabify" '("tabify-regexp")))
+(register-definition-prefixes "tabify" '("tabify-regexp"))
;;;***
@@ -32982,6 +33346,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'table-query-dimension "table" "\
@@ -33199,7 +33566,7 @@ Remove the frame from a table and deactivate the table. This command
converts a table into plain text without frames. It is a companion to
`table-capture' which does the opposite process." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "table" '("*table--" "table-")))
+(register-definition-prefixes "table" '("*table--" "table-"))
;;;***
@@ -33221,7 +33588,7 @@ Connect to display DISPLAY for the Emacs talk group.
(autoload 'talk "talk" "\
Connect to the Emacs talk group from the current X display or tty frame." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "talk" '("talk-")))
+(register-definition-prefixes "talk" '("talk-"))
;;;***
@@ -33246,7 +33613,7 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tar-mode" '("tar-")))
+(register-definition-prefixes "tar-mode" '("tar-"))
;;;***
@@ -33296,7 +33663,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'.
\(fn COMMAND &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tcl" '("add-log-tcl-defun" "calculate-tcl-indent" "indent-tcl-exp" "inferior-tcl-" "run-tcl" "switch-to-tcl" "tcl-")))
+(register-definition-prefixes "tcl" '("add-log-tcl-defun" "calculate-tcl-indent" "indent-tcl-exp" "inferior-tcl-" "run-tcl" "switch-to-tcl" "tcl-"))
;;;***
@@ -33304,15 +33671,7 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'.
;;;;;; 0 0 0))
;;; Generated autoloads from emacs-lisp/tcover-ses.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tcover-ses" '("ses-exercise")))
-
-;;;***
-
-;;;### (autoloads nil "tcover-unsafep" "emacs-lisp/tcover-unsafep.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from emacs-lisp/tcover-unsafep.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tcover-unsafep" '("testcover-unsafep")))
+(register-definition-prefixes "tcover-ses" '("ses-exercise"))
;;;***
@@ -33339,14 +33698,14 @@ Normally input is edited in Emacs and sent a line at a time.
\(fn HOST)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "telnet" '("send-process-next-char" "telnet-")))
+(register-definition-prefixes "telnet" '("send-process-next-char" "telnet-"))
;;;***
;;;### (autoloads nil "tempo" "tempo.el" (0 0 0 0))
;;; Generated autoloads from tempo.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tempo" '("tempo-")))
+(register-definition-prefixes "tempo" '("tempo-"))
;;;***
@@ -33399,7 +33758,7 @@ use in that buffer.
\(fn PORT SPEED &optional LINE-MODE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "term" '("ansi-term-color-vector" "explicit-shell-file-name" "serial-" "term-")))
+(register-definition-prefixes "term" '("ansi-term-color-vector" "explicit-shell-file-name" "serial-" "term-"))
;;;***
@@ -33416,7 +33775,7 @@ If BYTE-COMPILE is non-nil, byte compile each function after instrumenting.
(autoload 'testcover-this-defun "testcover" "\
Start coverage on function under point." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "testcover" '("testcover-")))
+(register-definition-prefixes "testcover" '("testcover-"))
;;;***
@@ -33443,7 +33802,7 @@ tetris-mode keybindings:
" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tetris" '("tetris-")))
+(register-definition-prefixes "tetris" '("tetris-"))
;;;***
@@ -33744,7 +34103,7 @@ Major mode to edit DocTeX files.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tex-mode" '("doctex-font-lock-" "latex-" "plain-tex-mode-map" "tex-")))
+(register-definition-prefixes "tex-mode" '("doctex-font-lock-" "latex-" "plain-tex-mode-map" "tex-"))
;;;***
@@ -33785,7 +34144,7 @@ if large. You can use `Info-split' to do this manually.
\(fn &optional NOSPLIT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "texinfmt" '("batch-texinfo-format" "texinf")))
+(register-definition-prefixes "texinfmt" '("batch-texinfo-format" "texinf"))
;;;***
@@ -33871,7 +34230,7 @@ value of `texinfo-mode-hook'.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "texinfo" '("texinfo-")))
+(register-definition-prefixes "texinfo" '("texinfo-"))
;;;***
@@ -33879,7 +34238,7 @@ value of `texinfo-mode-hook'.
;;;;;; 0 0))
;;; Generated autoloads from textmodes/texnfo-upd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "texnfo-upd" '("texinfo-")))
+(register-definition-prefixes "texnfo-upd" '("texinfo-"))
;;;***
@@ -33887,7 +34246,7 @@ value of `texinfo-mode-hook'.
;;;;;; (0 0 0 0))
;;; Generated autoloads from emacs-lisp/text-property-search.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "text-property-search" '("text-property-")))
+(register-definition-prefixes "text-property-search" '("text-property-"))
;;;***
@@ -33915,7 +34274,7 @@ Compose Thai characters in the current buffer." t nil)
\(fn GSTRING DIRECTION)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thai-util" '("exit-thai-language-environment-internal" "setup-thai-language-environment-internal" "thai-")))
+(register-definition-prefixes "thai-util" '("exit-thai-language-environment-internal" "setup-thai-language-environment-internal" "thai-"))
;;;***
@@ -33923,7 +34282,7 @@ Compose Thai characters in the current buffer." t nil)
;;;;;; 0))
;;; Generated autoloads from language/thai-word.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thai-word" '("thai-")))
+(register-definition-prefixes "thai-word" '("thai-"))
;;;***
@@ -33987,7 +34346,7 @@ treated as white space.
\(fn &optional IGNORE-COMMENT-OR-STRING)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thingatpt" '("beginning-of-thing" "define-thing-chars" "end-of-thing" "filename" "form-at-point" "in-string-p" "sentence-at-point" "thing-at-point-" "word-at-point")))
+(register-definition-prefixes "thingatpt" '("beginning-of-thing" "define-thing-chars" "end-of-thing" "filename" "form-at-point" "in-string-p" "sentence-at-point" "thing-at-point-" "word-at-point"))
;;;***
@@ -34005,7 +34364,7 @@ An EVENT has the format
Display a list of threads." t nil)
(put 'list-threads 'disabled "Beware: manually canceling threads can ruin your Emacs session.")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thread" '("thread-list-")))
+(register-definition-prefixes "thread" '("thread-list-"))
;;;***
@@ -34035,7 +34394,7 @@ In dired, make a thumbs buffer with all files in current directory." t nil)
(autoload 'thumbs-dired-setroot "thumbs" "\
In dired, call the setroot program on the image at point." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thumbs" '("thumbs-")))
+(register-definition-prefixes "thumbs" '("thumbs-"))
;;;***
@@ -34043,7 +34402,7 @@ In dired, call the setroot program on the image at point." t nil)
;;; Generated autoloads from emacs-lisp/thunk.el
(push (purecopy '(thunk 1 0)) package--builtin-versions)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "thunk" '("thunk-")))
+(register-definition-prefixes "thunk" '("thunk-"))
;;;***
@@ -34115,7 +34474,7 @@ See also docstring of the function tibetan-compose-region." t nil)
\(fn FROM TO)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tibet-util" '("tibetan-")))
+(register-definition-prefixes "tibet-util" '("tibetan-"))
;;;***
@@ -34175,6 +34534,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When space is inserted into a buffer in a position where hard space is required
instead (determined by `tildify-space-pattern' and `tildify-space-predicates'),
that space character is replaced by a hard space specified by
@@ -34186,7 +34548,7 @@ variable will be set to the representation.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tildify" '("tildify-")))
+(register-definition-prefixes "tildify" '("tildify-"))
;;;***
@@ -34224,6 +34586,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When Display Time mode is enabled, it updates every minute (you
can control the number of seconds between updates by customizing
`display-time-interval'). If `display-time-day-and-date' is
@@ -34232,10 +34597,12 @@ runs the normal hook `display-time-hook' after each update.
\(fn &optional ARG)" t nil)
-(autoload 'display-time-world "time" "\
-Enable updating display of times in various time zones.
-`display-time-world-list' specifies the zones.
-To turn off the world time display, go to that window and type `q'." t nil)
+(defalias 'display-time-world #'world-clock)
+
+(autoload 'world-clock "time" "\
+Display a world clock buffer with times in various time zones.
+The variable `world-clock-list' specifies which time zones to use.
+To turn off the world time display, go to the window and type `\\[quit-window]'." t nil)
(autoload 'emacs-uptime "time" "\
Return a string giving the uptime of this instance of Emacs.
@@ -34247,7 +34614,7 @@ For example, the Unix uptime command format is \"%D, %z%2h:%.2m\".
(autoload 'emacs-init-time "time" "\
Return a string giving the duration of the Emacs initialization." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "time" '("display-time-" "legacy-style-world-list" "time--display-world-list" "zoneinfo-style-world-list")))
+(register-definition-prefixes "time" '("display-time-" "legacy-style-world-list" "time--display-world-list" "world-clock-" "zoneinfo-style-world-list"))
;;;***
@@ -34344,7 +34711,7 @@ Convert the time interval in seconds to a short string.
\(fn DELAY)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "time-date" '("date-" "decoded-time-" "encode-time-value" "seconds-to-string" "time-" "with-decoded-time-value")))
+(register-definition-prefixes "time-date" '("date-" "decoded-time-" "encode-time-value" "seconds-to-string" "time-" "with-decoded-time-value"))
;;;***
@@ -34392,7 +34759,7 @@ With ARG, turn time stamping on if and only if arg is positive.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "time-stamp" '("time-stamp-")))
+(register-definition-prefixes "time-stamp" '("time-stamp-"))
;;;***
@@ -34501,7 +34868,7 @@ relative only to the time worked today, and not to past time.
\(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "timeclock" '("timeclock-")))
+(register-definition-prefixes "timeclock" '("timeclock-"))
;;;***
@@ -34515,14 +34882,14 @@ List all timers in a buffer.
\(fn &optional IGNORE-AUTO NONCONFIRM)" t nil)
(put 'list-timers 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "timer-list" '("timer-list-")))
+(register-definition-prefixes "timer-list" '("timer-list-"))
;;;***
;;;### (autoloads nil "timezone" "timezone.el" (0 0 0 0))
;;; Generated autoloads from timezone.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "timezone" '("timezone-")))
+(register-definition-prefixes "timezone" '("timezone-"))
;;;***
@@ -34547,7 +34914,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\".
\(fn &optional FORCE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "titdic-cnv" '("batch-miscdic-convert" "ctlau-" "miscdic-convert" "pinyin-convert" "py-converter" "quail-" "quick-" "tit-" "tsang-" "ziranma-converter")))
+(register-definition-prefixes "titdic-cnv" '("batch-miscdic-convert" "ctlau-" "miscdic-convert" "pinyin-convert" "py-converter" "quail-" "quick-" "tit-" "tsang-" "ziranma-converter"))
;;;***
@@ -34593,7 +34960,7 @@ instead of executing it.
\(fn MENU &optional IN-POPUP DEFAULT-ITEM NO-EXECUTE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tmm" '("tmm-")))
+(register-definition-prefixes "tmm" '("tmm-"))
;;;***
@@ -34661,7 +35028,7 @@ Mode for displaying and reprioritizing top priority Todo.
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "todo-mode" '("todo-")))
+(register-definition-prefixes "todo-mode" '("todo-"))
;;;***
@@ -34733,14 +35100,14 @@ holds a keymap.
\(fn COMMAND ICON IN-MAP &optional FROM-MAP &rest PROPS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tool-bar" '("tool-bar-")))
+(register-definition-prefixes "tool-bar" '("tool-bar-"))
;;;***
;;;### (autoloads nil "tooltip" "tooltip.el" (0 0 0 0))
;;; Generated autoloads from tooltip.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tooltip" '("tooltip-")))
+(register-definition-prefixes "tooltip" '("tooltip-"))
;;;***
@@ -34755,7 +35122,7 @@ to a tcp server on another machine.
\(fn PROCESS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tq" '("tq-")))
+(register-definition-prefixes "tq" '("tq-"))
;;;***
@@ -34804,7 +35171,7 @@ the output buffer or changing the window configuration.
(defalias 'trace-function 'trace-function-foreground)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "trace" '("inhibit-trace" "trace-" "untrace-")))
+(register-definition-prefixes "trace" '("inhibit-trace" "trace-" "untrace-"))
;;;***
@@ -34852,14 +35219,14 @@ Unload Tramp file name handlers from `file-name-handler-alist'." (dolist (fnh fi
(defun tramp-unload-tramp nil "\
Discard Tramp from loading remote files." (interactive) (ignore-errors (unload-feature 'tramp 'force)))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp" '("tramp-" "with-")))
+(register-definition-prefixes "tramp" '("tramp-" "with-"))
;;;***
;;;### (autoloads nil "tramp-adb" "net/tramp-adb.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-adb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-adb" '("tramp-")))
+(register-definition-prefixes "tramp-adb" '("tramp-"))
;;;***
@@ -34890,21 +35257,21 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
(add-hook 'tramp-archive-unload-hook (lambda nil (remove-hook 'after-init-hook #'tramp-register-archive-file-name-handler)))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-archive" '("tramp-" "with-parsed-tramp-archive-file-name")))
+(register-definition-prefixes "tramp-archive" '("tramp-" "with-parsed-tramp-archive-file-name"))
;;;***
;;;### (autoloads nil "tramp-cache" "net/tramp-cache.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-cache.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-cache" '("tramp-")))
+(register-definition-prefixes "tramp-cache" '("tramp-"))
;;;***
;;;### (autoloads nil "tramp-cmds" "net/tramp-cmds.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-cmds.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-cmds" '("tramp-")))
+(register-definition-prefixes "tramp-cmds" '("tramp-"))
;;;***
@@ -34912,28 +35279,28 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
;;;;;; 0))
;;; Generated autoloads from net/tramp-compat.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-compat" '("tramp-")))
+(register-definition-prefixes "tramp-compat" '("tramp-"))
;;;***
;;;### (autoloads nil "tramp-crypt" "net/tramp-crypt.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-crypt.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-crypt" '("tramp-crypt-")))
+(register-definition-prefixes "tramp-crypt" '("tramp-crypt-"))
;;;***
;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-ftp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-ftp" '("tramp-")))
+(register-definition-prefixes "tramp-ftp" '("tramp-"))
;;;***
;;;### (autoloads nil "tramp-gvfs" "net/tramp-gvfs.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-gvfs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-gvfs" '("tramp-" "with-tramp-dbus-")))
+(register-definition-prefixes "tramp-gvfs" '("tramp-" "with-tramp-dbus-"))
;;;***
@@ -34941,7 +35308,7 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
;;;;;; (0 0 0 0))
;;; Generated autoloads from net/tramp-integration.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-integration" '("tramp-")))
+(register-definition-prefixes "tramp-integration" '("tramp-"))
;;;***
@@ -34949,21 +35316,21 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
;;;;;; 0))
;;; Generated autoloads from net/tramp-rclone.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-rclone" '("tramp-rclone-")))
+(register-definition-prefixes "tramp-rclone" '("tramp-rclone-"))
;;;***
;;;### (autoloads nil "tramp-sh" "net/tramp-sh.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-sh.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-sh" '("tramp-")))
+(register-definition-prefixes "tramp-sh" '("tramp-"))
;;;***
;;;### (autoloads nil "tramp-smb" "net/tramp-smb.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-smb.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-smb" '("tramp-smb-")))
+(register-definition-prefixes "tramp-smb" '("tramp-smb-"))
;;;***
@@ -34971,28 +35338,28 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive
;;;;;; 0 0 0))
;;; Generated autoloads from net/tramp-sudoedit.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-sudoedit" '("tramp-sudoedit-")))
+(register-definition-prefixes "tramp-sudoedit" '("tramp-sudoedit-"))
;;;***
;;;### (autoloads nil "tramp-uu" "net/tramp-uu.el" (0 0 0 0))
;;; Generated autoloads from net/tramp-uu.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tramp-uu" '("tramp-uu")))
+(register-definition-prefixes "tramp-uu" '("tramp-uu"))
;;;***
;;;### (autoloads nil "trampver" "net/trampver.el" (0 0 0 0))
;;; Generated autoloads from net/trampver.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "trampver" '("tramp-")))
+(register-definition-prefixes "trampver" '("tramp-"))
;;;***
;;;### (autoloads nil "tree-widget" "tree-widget.el" (0 0 0 0))
;;; Generated autoloads from tree-widget.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tree-widget" '("tree-widget-")))
+(register-definition-prefixes "tree-widget" '("tree-widget-"))
;;;***
@@ -35018,7 +35385,7 @@ resumed later.
\(fn &optional ARG DONT-ASK-FOR-REVERT)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tutorial" '("get-lang-string" "lang-strings" "tutorial--")))
+(register-definition-prefixes "tutorial" '("get-lang-string" "lang-strings" "tutorial--"))
;;;***
@@ -35030,7 +35397,7 @@ resumed later.
\(fn FROM TO FONT-OBJECT STRING DIRECTION)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "tv-util" '("tai-viet-")))
+(register-definition-prefixes "tv-util" '("tai-viet-"))
;;;***
@@ -35078,7 +35445,7 @@ First column's text sSs Second column's text
\(fn ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "two-column" '("2C-")))
+(register-definition-prefixes "two-column" '("2C-"))
;;;***
@@ -35104,6 +35471,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When this mode is enabled, the user is encouraged to take typing breaks at
appropriate intervals; either after a specified amount of time or when the
user has exceeded a keystroke threshold. When the time arrives, the user
@@ -35211,7 +35581,7 @@ FRAC should be the inverse of the fractional value; for example, a value of
\(fn WPM &optional WORDLEN FRAC)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "type-break" '("timep" "type-break-")))
+(register-definition-prefixes "type-break" '("timep" "type-break-"))
;;;***
@@ -35226,7 +35596,7 @@ You might need to set `uce-mail-reader' before using this.
\(fn &optional IGNORED)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "uce" '("uce-")))
+(register-definition-prefixes "uce" '("uce-"))
;;;***
@@ -35294,7 +35664,7 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus.
\(fn STR)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ucs-normalize" '("ucs-normalize-" "utf-8-hfs")))
+(register-definition-prefixes "ucs-normalize" '("ucs-normalize-" "utf-8-hfs"))
;;;***
@@ -35323,7 +35693,7 @@ which specify the range to operate on.
;;;;;; (0 0 0 0))
;;; Generated autoloads from mail/undigest.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "undigest" '("rmail-")))
+(register-definition-prefixes "undigest" '("rmail-"))
;;;***
@@ -35343,7 +35713,7 @@ The variable `unrmail-mbox-format' controls which mbox format to use.
\(fn FILE TO-FILE)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "unrmail" '("unrmail-mbox-format")))
+(register-definition-prefixes "unrmail" '("unrmail-mbox-format"))
;;;***
@@ -35357,7 +35727,7 @@ UNSAFEP-VARS is a list of symbols with local bindings.
\(fn FORM &optional UNSAFEP-VARS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "unsafep" '("safe-functions" "unsafep-")))
+(register-definition-prefixes "unsafep" '("safe-functions" "unsafep-"))
;;;***
@@ -35413,14 +35783,14 @@ how long to wait for a response before giving up.
\(fn URL &optional SILENT INHIBIT-COOKIES TIMEOUT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url" '("url-")))
+(register-definition-prefixes "url" '("url-"))
;;;***
;;;### (autoloads nil "url-about" "url/url-about.el" (0 0 0 0))
;;; Generated autoloads from url/url-about.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-about" '("url-")))
+(register-definition-prefixes "url-about" '("url-"))
;;;***
@@ -35463,7 +35833,7 @@ RATING a rating between 1 and 10 of the strength of the authentication.
\(fn TYPE &optional FUNCTION RATING)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-auth" '("url-")))
+(register-definition-prefixes "url-auth" '("url-"))
;;;***
@@ -35486,7 +35856,7 @@ Extract FNAM from the local disk cache.
\(fn FNAM)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-cache" '("url-")))
+(register-definition-prefixes "url-cache" '("url-"))
;;;***
@@ -35498,14 +35868,14 @@ Extract FNAM from the local disk cache.
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-cid" '("url-cid-gnus")))
+(register-definition-prefixes "url-cid" '("url-cid-gnus"))
;;;***
;;;### (autoloads nil "url-cookie" "url/url-cookie.el" (0 0 0 0))
;;; Generated autoloads from url/url-cookie.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-cookie" '("url-cookie")))
+(register-definition-prefixes "url-cookie" '("url-cookie"))
;;;***
@@ -35541,28 +35911,28 @@ added to this list, so most requests can just pass in nil.
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-dav" '("url-")))
+(register-definition-prefixes "url-dav" '("url-"))
;;;***
;;;### (autoloads nil "url-dired" "url/url-dired.el" (0 0 0 0))
;;; Generated autoloads from url/url-dired.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-dired" '("url-")))
+(register-definition-prefixes "url-dired" '("url-"))
;;;***
;;;### (autoloads nil "url-domsuf" "url/url-domsuf.el" (0 0 0 0))
;;; Generated autoloads from url/url-domsuf.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-domsuf" '("url-domsuf-")))
+(register-definition-prefixes "url-domsuf" '("url-domsuf-"))
;;;***
;;;### (autoloads nil "url-expand" "url/url-expand.el" (0 0 0 0))
;;; Generated autoloads from url/url-expand.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-expand" '("url-")))
+(register-definition-prefixes "url-expand" '("url-"))
;;;***
@@ -35574,21 +35944,21 @@ Handle file: and ftp: URLs.
\(fn URL CALLBACK CBARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-file" '("url-file-")))
+(register-definition-prefixes "url-file" '("url-file-"))
;;;***
;;;### (autoloads nil "url-ftp" "url/url-ftp.el" (0 0 0 0))
;;; Generated autoloads from url/url-ftp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-ftp" '("url-ftp")))
+(register-definition-prefixes "url-ftp" '("url-ftp"))
;;;***
;;;### (autoloads nil "url-future" "url/url-future.el" (0 0 0 0))
;;; Generated autoloads from url/url-future.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-future" '("url-future-")))
+(register-definition-prefixes "url-future" '("url-future-"))
;;;***
@@ -35611,7 +35981,7 @@ overriding the value of `url-gateway-method'.
\(fn NAME BUFFER HOST SERVICE &optional GATEWAY-METHOD)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-gw" '("url-")))
+(register-definition-prefixes "url-gw" '("url-"))
;;;***
@@ -35637,6 +36007,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
(autoload 'url-file-handler "url-handlers" "\
@@ -35674,14 +36047,14 @@ if it had been inserted from a file named URL.
\(fn URL &optional VISIT BEG END REPLACE)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-handlers" '("url-")))
+(register-definition-prefixes "url-handlers" '("url-"))
;;;***
;;;### (autoloads nil "url-history" "url/url-history.el" (0 0 0 0))
;;; Generated autoloads from url/url-history.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-history" '("url-")))
+(register-definition-prefixes "url-history" '("url-"))
;;;***
@@ -35695,14 +36068,14 @@ if it had been inserted from a file named URL.
(autoload 'url-https-file-readable-p "url-http")
(autoload 'url-https-file-attributes "url-http")
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-http" '("url-h")))
+(register-definition-prefixes "url-http" '("url-h"))
;;;***
;;;### (autoloads nil "url-imap" "url/url-imap.el" (0 0 0 0))
;;; Generated autoloads from url/url-imap.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-imap" '("url-imap")))
+(register-definition-prefixes "url-imap" '("url-imap"))
;;;***
@@ -35714,7 +36087,7 @@ if it had been inserted from a file named URL.
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-irc" '("url-irc-")))
+(register-definition-prefixes "url-irc" '("url-irc-"))
;;;***
@@ -35729,7 +36102,7 @@ URL can be a URL string, or a URL record of the type returned by
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-ldap" '("url-ldap-")))
+(register-definition-prefixes "url-ldap" '("url-ldap-"))
;;;***
@@ -35746,14 +36119,14 @@ Handle the mailto: URL syntax.
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-mailto" '("url-mail-goto-field")))
+(register-definition-prefixes "url-mailto" '("url-mail-goto-field"))
;;;***
;;;### (autoloads nil "url-methods" "url/url-methods.el" (0 0 0 0))
;;; Generated autoloads from url/url-methods.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-methods" '("url-scheme-")))
+(register-definition-prefixes "url-methods" '("url-scheme-"))
;;;***
@@ -35786,7 +36159,7 @@ Fetch a data URL (RFC 2397).
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-misc" '("url-do-terminal-emulator")))
+(register-definition-prefixes "url-misc" '("url-do-terminal-emulator"))
;;;***
@@ -35803,14 +36176,14 @@ Fetch a data URL (RFC 2397).
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-news" '("url-news-")))
+(register-definition-prefixes "url-news" '("url-news-"))
;;;***
;;;### (autoloads nil "url-nfs" "url/url-nfs.el" (0 0 0 0))
;;; Generated autoloads from url/url-nfs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-nfs" '("url-nfs")))
+(register-definition-prefixes "url-nfs" '("url-nfs"))
;;;***
@@ -35863,7 +36236,7 @@ parses to
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-parse" '("url-")))
+(register-definition-prefixes "url-parse" '("url-"))
;;;***
@@ -35873,14 +36246,14 @@ parses to
(autoload 'url-setup-privacy-info "url-privacy" "\
Setup variables that expose info about you and your system." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-privacy" '("url-device-type")))
+(register-definition-prefixes "url-privacy" '("url-device-type"))
;;;***
;;;### (autoloads nil "url-proxy" "url/url-proxy.el" (0 0 0 0))
;;; Generated autoloads from url/url-proxy.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-proxy" '("url-")))
+(register-definition-prefixes "url-proxy" '("url-"))
;;;***
@@ -35896,7 +36269,7 @@ The variable `url-queue-timeout' sets a timeout.
\(fn URL CALLBACK &optional CBARGS SILENT INHIBIT-COOKIES)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-queue" '("url-queue")))
+(register-definition-prefixes "url-queue" '("url-queue"))
;;;***
@@ -35916,7 +36289,7 @@ would have been passed to OPERATION.
\(fn OPERATION &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-tramp" '("url-tramp-convert-")))
+(register-definition-prefixes "url-tramp" '("url-tramp-convert-"))
;;;***
@@ -36096,14 +36469,14 @@ is \"www.fsf.co.uk\".
\(fn URL)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-util" '("url-")))
+(register-definition-prefixes "url-util" '("url-"))
;;;***
;;;### (autoloads nil "url-vars" "url/url-vars.el" (0 0 0 0))
;;; Generated autoloads from url/url-vars.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "url-vars" '("url-")))
+(register-definition-prefixes "url-vars" '("url-"))
;;;***
@@ -36140,7 +36513,7 @@ The buffer in question is current when this function is called.
\(fn FILENAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "userlock" '("ask-user-about-" "file-" "userlock--check-content-unchanged")))
+(register-definition-prefixes "userlock" '("ask-user-about-" "file-" "userlock--check-content-unchanged"))
;;;***
@@ -36167,7 +36540,7 @@ The buffer in question is current when this function is called.
\(fn FROM TO)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "utf-7" '("utf-7-")))
+(register-definition-prefixes "utf-7" '("utf-7-"))
;;;***
@@ -36179,7 +36552,7 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil.
\(fn STRING &optional FOR-IMAP)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "utf7" '("utf7-")))
+(register-definition-prefixes "utf7" '("utf7-"))
;;;***
@@ -36205,7 +36578,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME.
\(fn START END &optional FILE-NAME)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "uudecode" '("uudecode-")))
+(register-definition-prefixes "uudecode" '("uudecode-"))
;;;***
@@ -36489,8 +36862,6 @@ Revert working copies of the selected fileset to their repository contents.
This asks for confirmation if the buffer contents are not identical
to the working revision (except for keyword expansion)." t nil)
-(define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
-
(autoload 'vc-pull "vc" "\
Update the current fileset or branch.
You must be visiting a version controlled file, or in a `vc-dir' buffer.
@@ -36579,7 +36950,7 @@ Return the branch part of a revision number REV.
\(fn REV)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc" '("vc-" "with-vc-properties")))
+(register-definition-prefixes "vc" '("vc-" "with-vc-properties"))
;;;***
@@ -36620,7 +36991,7 @@ should be applied to the background or to the foreground.
\(fn FILE REV &optional DISPLAY-MODE BUF MOVE-POINT-TO VC-BK)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-annotate" '("vc-")))
+(register-definition-prefixes "vc-annotate" '("vc-"))
;;;***
@@ -36638,7 +37009,7 @@ Name of the format file in a .bzr directory.")
(load "vc-bzr" nil t)
(vc-bzr-registered file))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-bzr" '("vc-bzr-")))
+(register-definition-prefixes "vc-bzr" '("vc-bzr-"))
;;;***
@@ -36651,14 +37022,14 @@ Name of the format file in a .bzr directory.")
(load "vc-cvs" nil t)
(vc-cvs-registered f)))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-cvs" '("vc-cvs-")))
+(register-definition-prefixes "vc-cvs" '("vc-cvs-"))
;;;***
;;;### (autoloads nil "vc-dav" "vc/vc-dav.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-dav.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-dav" '("vc-dav-")))
+(register-definition-prefixes "vc-dav" '("vc-dav-"))
;;;***
@@ -36696,7 +37067,7 @@ type returned by `vc-dir-bookmark-make-record'.
\(fn BMK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-dir" '("vc-")))
+(register-definition-prefixes "vc-dir" '("vc-"))
;;;***
@@ -36722,14 +37093,14 @@ case, and the process object in the asynchronous case.
\(fn BUFFER OKSTATUS COMMAND FILE-OR-LIST &rest FLAGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-dispatcher" '("vc-")))
+(register-definition-prefixes "vc-dispatcher" '("vc-"))
;;;***
;;;### (autoloads nil "vc-filewise" "vc/vc-filewise.el" (0 0 0 0))
;;; Generated autoloads from vc/vc-filewise.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-filewise" '("vc-")))
+(register-definition-prefixes "vc-filewise" '("vc-"))
;;;***
@@ -36742,7 +37113,7 @@ case, and the process object in the asynchronous case.
(load "vc-git" nil t)
(vc-git-registered file))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-git" '("vc-git-")))
+(register-definition-prefixes "vc-git" '("vc-git-"))
;;;***
@@ -36755,7 +37126,7 @@ case, and the process object in the asynchronous case.
(load "vc-hg" nil t)
(vc-hg-registered file))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-hg" '("vc-hg-")))
+(register-definition-prefixes "vc-hg" '("vc-hg-"))
;;;***
@@ -36773,7 +37144,7 @@ Name of the monotone directory's format file.")
(load "vc-mtn" nil t)
(vc-mtn-registered file))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-mtn" '("vc-mtn-")))
+(register-definition-prefixes "vc-mtn" '("vc-mtn-"))
;;;***
@@ -36788,7 +37159,7 @@ For a description of possible values, see `vc-check-master-templates'.")
(defun vc-rcs-registered (f) (vc-default-registered 'RCS f))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-rcs" '("vc-r")))
+(register-definition-prefixes "vc-rcs" '("vc-r"))
;;;***
@@ -36808,7 +37179,7 @@ Return the name of a master file in the SCCS project directory.
Does not check whether the file exists but returns nil if it does not
find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) (when project-dir (if (file-name-absolute-p project-dir) (setq dirs '("SCCS" "")) (setq dirs '("src/SCCS" "src" "source/SCCS" "source")) (setq project-dir (expand-file-name (concat "~" project-dir)))) (while (and (not dir) dirs) (setq dir (expand-file-name (car dirs) project-dir)) (unless (file-directory-p dir) (setq dir nil) (setq dirs (cdr dirs)))) (and dir (expand-file-name (concat "s." basename) dir)))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-sccs" '("vc-sccs-")))
+(register-definition-prefixes "vc-sccs" '("vc-sccs-"))
;;;***
@@ -36823,7 +37194,7 @@ For a description of possible values, see `vc-check-master-templates'.")
(defun vc-src-registered (f) (vc-default-registered 'src f))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-src" '("vc-src-")))
+(register-definition-prefixes "vc-src" '("vc-src-"))
;;;***
@@ -36838,14 +37209,14 @@ For a description of possible values, see `vc-check-master-templates'.")
(load "vc-svn" nil t)
(vc-svn-registered f))))
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vc-svn" '("vc-svn-")))
+(register-definition-prefixes "vc-svn" '("vc-svn-"))
;;;***
;;;### (autoloads nil "vcursor" "vcursor.el" (0 0 0 0))
;;; Generated autoloads from vcursor.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vcursor" '("vcursor-")))
+(register-definition-prefixes "vcursor" '("vcursor-"))
;;;***
@@ -36906,7 +37277,7 @@ Key bindings:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vera-mode" '("vera-")))
+(register-definition-prefixes "vera-mode" '("vera-"))
;;;***
@@ -37049,7 +37420,7 @@ Key bindings specific to `verilog-mode-map' are:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "verilog-mode" '("electric-verilog-" "verilog-" "vl-")))
+(register-definition-prefixes "verilog-mode" '("electric-verilog-" "verilog-" "vl-"))
;;;***
@@ -37606,7 +37977,7 @@ Key bindings:
\(fn)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vhdl-mode" '("vhdl-")))
+(register-definition-prefixes "vhdl-mode" '("vhdl-"))
;;;***
@@ -37649,7 +38020,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics." t nil)
\(fn FROM TO)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viet-util" '("viet-viqr-alist" "viqr-regexp")))
+(register-definition-prefixes "viet-util" '("viet-viqr-alist" "viqr-regexp"))
;;;***
@@ -37794,6 +38165,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
When View mode is enabled, commands that do not change the buffer
contents are available as usual. Kill commands save text but
do not delete it from the buffer. Most other commands beep and
@@ -37907,7 +38281,7 @@ This function runs the normal hook `view-mode-hook'.
(autoload 'View-exit-and-edit "view" "\
Exit View mode and make the current buffer editable." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "view" '("View-" "view-")))
+(register-definition-prefixes "view" '("View-" "view-"))
;;;***
@@ -37922,7 +38296,7 @@ If Viper is enabled, turn it off. Otherwise, turn it on." t nil)
(autoload 'viper-mode "viper" "\
Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper" '("set-viper-state-in-major-mode" "this-major-mode-requires-vi-state" "viper-")))
+(register-definition-prefixes "viper" '("set-viper-state-in-major-mode" "this-major-mode-requires-vi-state" "viper-"))
;;;***
@@ -37930,14 +38304,14 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0))
;;; Generated autoloads from emulation/viper-cmd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-cmd" '("viper-")))
+(register-definition-prefixes "viper-cmd" '("viper-"))
;;;***
;;;### (autoloads nil "viper-ex" "emulation/viper-ex.el" (0 0 0 0))
;;; Generated autoloads from emulation/viper-ex.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-ex" '("ex-" "viper-")))
+(register-definition-prefixes "viper-ex" '("ex-" "viper-"))
;;;***
@@ -37945,7 +38319,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/viper-init.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-init" '("viper-")))
+(register-definition-prefixes "viper-init" '("viper-"))
;;;***
@@ -37953,7 +38327,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/viper-keym.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-keym" '("ex-read-filename-map" "viper-")))
+(register-definition-prefixes "viper-keym" '("ex-read-filename-map" "viper-"))
;;;***
@@ -37961,7 +38335,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/viper-macs.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-macs" '("ex-" "viper-")))
+(register-definition-prefixes "viper-macs" '("ex-" "viper-"))
;;;***
@@ -37969,7 +38343,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/viper-mous.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-mous" '("viper-")))
+(register-definition-prefixes "viper-mous" '("viper-"))
;;;***
@@ -37977,35 +38351,35 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'." t nil)
;;;;;; 0 0))
;;; Generated autoloads from emulation/viper-util.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "viper-util" '("viper")))
+(register-definition-prefixes "viper-util" '("viper"))
;;;***
;;;### (autoloads nil "vt-control" "vt-control.el" (0 0 0 0))
;;; Generated autoloads from vt-control.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vt-control" '("vt-")))
+(register-definition-prefixes "vt-control" '("vt-"))
;;;***
;;;### (autoloads nil "vt100-led" "vt100-led.el" (0 0 0 0))
;;; Generated autoloads from vt100-led.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "vt100-led" '("led-")))
+(register-definition-prefixes "vt100-led" '("led-"))
;;;***
;;;### (autoloads nil "w32-fns" "w32-fns.el" (0 0 0 0))
;;; Generated autoloads from w32-fns.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "w32-fns" '("w32-")))
+(register-definition-prefixes "w32-fns" '("w32-"))
;;;***
;;;### (autoloads nil "w32-vars" "w32-vars.el" (0 0 0 0))
;;; Generated autoloads from w32-vars.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "w32-vars" '("w32-")))
+(register-definition-prefixes "w32-vars" '("w32-"))
;;;***
@@ -38099,7 +38473,7 @@ this is equivalent to `display-warning', using
\(fn MESSAGE &rest ARGS)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "warnings" '("display-warning-minimum-level" "log-warning-minimum-level" "warning-")))
+(register-definition-prefixes "warnings" '("warning-"))
;;;***
@@ -38116,7 +38490,7 @@ directories to reflect your edits.
See `wdired-mode'." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "wdired" '("wdired-")))
+(register-definition-prefixes "wdired" '("wdired-"))
;;;***
@@ -38132,7 +38506,7 @@ hotlist.
Please submit bug reports and other feedback to the author, Neil W. Van Dyke
<nwv@acm.org>." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "webjump" '("webjump-")))
+(register-definition-prefixes "webjump" '("webjump-"))
;;;***
@@ -38162,13 +38536,16 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Which Function mode is a global minor mode. When enabled, the
current function name is continuously displayed in the mode line,
in certain major modes.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "which-func" '("which-func")))
+(register-definition-prefixes "which-func" '("which-func"))
;;;***
@@ -38184,6 +38561,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
See also `whitespace-style', `whitespace-newline' and
`whitespace-display-mappings'.
@@ -38197,6 +38577,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Use `whitespace-newline-mode' only for NEWLINE visualization
exclusively. For other visualizations, including NEWLINE
visualization together with (HARD) SPACEs and/or TABs, please,
@@ -38224,6 +38607,9 @@ positive, and disable it if ARG is zero or negative. If called from
Lisp, also enable the mode if ARG is omitted or nil, and toggle it if
ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
See also `whitespace-style', `whitespace-newline' and
`whitespace-display-mappings'.
@@ -38247,6 +38633,9 @@ is positive, and disable it if ARG is zero or negative. If called
from Lisp, also enable the mode if ARG is omitted or nil, and toggle
it if ARG is `toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Use `global-whitespace-newline-mode' only for NEWLINE
visualization exclusively. For other visualizations, including
NEWLINE visualization together with (HARD) SPACEs and/or TABs,
@@ -38541,7 +38930,7 @@ cleaning up these problems.
\(fn START END &optional FORCE REPORT-IF-BOGUS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "whitespace" '("whitespace-")))
+(register-definition-prefixes "whitespace" '("whitespace-"))
;;;***
@@ -38571,9 +38960,12 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "wid-browse" '("widget-")))
+(register-definition-prefixes "wid-browse" '("widget-"))
;;;***
@@ -38615,7 +39007,7 @@ Note that such modes will need to require wid-edit.")
(autoload 'widget-setup "wid-edit" "\
Setup current buffer so editing string widgets works." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "wid-edit" '("widget-")))
+(register-definition-prefixes "wid-edit" '("widget-"))
;;;***
@@ -38780,7 +39172,7 @@ or a single modifier. Default value of MODIFIERS is `shift-super'.
\(fn &optional MODIFIERS)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "windmove" '("windmove-")))
+(register-definition-prefixes "windmove" '("windmove-"))
;;;***
@@ -38805,6 +39197,9 @@ disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Winner mode is a global minor mode that records the changes in
the window configuration (i.e. how the frames are partitioned
into windows) so that the changes can be \"undone\" using the
@@ -38814,7 +39209,7 @@ you can press `C-c <right>' (calling `winner-redo').
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "winner" '("winner-")))
+(register-definition-prefixes "winner" '("winner-"))
;;;***
@@ -38862,21 +39257,21 @@ Default bookmark handler for Woman buffers.
\(fn BOOKMARK)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "woman" '("WoMan-" "menu-bar-manuals-menu" "set-woman-file-regexp" "woman")))
+(register-definition-prefixes "woman" '("WoMan-" "menu-bar-manuals-menu" "set-woman-file-regexp" "woman"))
;;;***
;;;### (autoloads nil "x-dnd" "x-dnd.el" (0 0 0 0))
;;; Generated autoloads from x-dnd.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "x-dnd" '("x-dnd-")))
+(register-definition-prefixes "x-dnd" '("x-dnd-"))
;;;***
;;;### (autoloads nil "xdg" "xdg.el" (0 0 0 0))
;;; Generated autoloads from xdg.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xdg" '("xdg-")))
+(register-definition-prefixes "xdg" '("xdg-"))
;;;***
@@ -38940,7 +39335,7 @@ All text between the <!-- ... --> markers will be removed.
\(fn BEG END)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xml" '("xml-")))
+(register-definition-prefixes "xml" '("xml-"))
;;;***
@@ -38960,13 +39355,13 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT.
\(fn &optional LIMIT)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xmltok" '("xmltok-")))
+(register-definition-prefixes "xmltok" '("xmltok-"))
;;;***
;;;### (autoloads nil "xref" "progmodes/xref.el" (0 0 0 0))
;;; Generated autoloads from progmodes/xref.el
-(push (purecopy '(xref 1 0 1)) package--builtin-versions)
+(push (purecopy '(xref 1 0 3)) package--builtin-versions)
(autoload 'xref-find-backend "xref" nil nil nil)
@@ -39052,21 +39447,21 @@ FILES must be a list of absolute file names.
\(fn REGEXP FILES)" nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xref" '("xref-")))
+(register-definition-prefixes "xref" '("xref-"))
;;;***
;;;### (autoloads nil "xscheme" "progmodes/xscheme.el" (0 0 0 0))
;;; Generated autoloads from progmodes/xscheme.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xscheme" '("default-xscheme-runlight" "exit-scheme-interaction-mode" "global-set-scheme-interaction-buffer" "local-" "reset-scheme" "run-scheme" "scheme-" "start-scheme" "verify-xscheme-buffer" "xscheme-")))
+(register-definition-prefixes "xscheme" '("default-xscheme-runlight" "exit-scheme-interaction-mode" "global-set-scheme-interaction-buffer" "local-" "reset-scheme" "run-scheme" "scheme-" "start-scheme" "verify-xscheme-buffer" "xscheme-"))
;;;***
;;;### (autoloads nil "xsd-regexp" "nxml/xsd-regexp.el" (0 0 0 0))
;;; Generated autoloads from nxml/xsd-regexp.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xsd-regexp" '("xsdre-")))
+(register-definition-prefixes "xsd-regexp" '("xsdre-"))
;;;***
@@ -39091,6 +39486,9 @@ and disable it if ARG is zero or negative. If called from Lisp, also
enable the mode if ARG is omitted or nil, and toggle it if ARG is
`toggle'; disable the mode otherwise.
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
Turn it on to use Emacs mouse commands, and off to use xterm mouse commands.
This works in terminal emulators compatible with xterm. It only
works for simple uses of the mouse. Basically, only non-modified
@@ -39100,7 +39498,7 @@ down the SHIFT key while pressing the mouse button.
\(fn &optional ARG)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xt-mouse" '("turn-o" "xt-mouse-epoch" "xterm-mouse-")))
+(register-definition-prefixes "xt-mouse" '("turn-o" "xt-mouse-epoch" "xterm-mouse-"))
;;;***
@@ -39114,7 +39512,7 @@ Interactively, URL defaults to the string looking like a url around point.
\(fn URL &optional NEW-SESSION)" t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xwidget" '("xwidget-")))
+(register-definition-prefixes "xwidget" '("xwidget-"))
;;;***
@@ -39129,14 +39527,14 @@ Yenc decode region between START and END using an internal decoder.
(autoload 'yenc-extract-filename "yenc" "\
Extract file name from an yenc header." nil nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "yenc" '("yenc-")))
+(register-definition-prefixes "yenc" '("yenc-"))
;;;***
;;;### (autoloads nil "zeroconf" "net/zeroconf.el" (0 0 0 0))
;;; Generated autoloads from net/zeroconf.el
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "zeroconf" '("zeroconf-")))
+(register-definition-prefixes "zeroconf" '("zeroconf-"))
;;;***
@@ -39146,7 +39544,7 @@ Extract file name from an yenc header." nil nil)
(autoload 'zone "zone" "\
Zone out, completely." t nil)
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "zone" '("zone-")))
+(register-definition-prefixes "zone" '("zone-"))
;;;***
@@ -39196,7 +39594,7 @@ Zone out, completely." t nil)
;;;;;; "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el"
;;;;;; "emacs-lisp/nadvice.el" "emacs-lisp/syntax.el" "emacs-lisp/timer.el"
;;;;;; "env.el" "epa-hook.el" "erc/erc-autoaway.el" "erc/erc-button.el"
-;;;;;; "erc/erc-capab.el" "erc/erc-compat.el" "erc/erc-dcc.el" "erc/erc-desktop-notifications.el"
+;;;;;; "erc/erc-capab.el" "erc/erc-dcc.el" "erc/erc-desktop-notifications.el"
;;;;;; "erc/erc-ezbounce.el" "erc/erc-fill.el" "erc/erc-identd.el"
;;;;;; "erc/erc-imenu.el" "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el"
;;;;;; "erc/erc-match.el" "erc/erc-menu.el" "erc/erc-netsplit.el"
diff --git a/lisp/locate.el b/lisp/locate.el
index 9f402716d02..bc78e06eab2 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -267,9 +267,7 @@ that is, with a prefix arg, you get the default behavior."
(let* ((default (locate-word-at-point))
(input
(read-from-minibuffer
- (if (> (length default) 0)
- (format "Locate (default %s): " default)
- (format "Locate: "))
+ (format-prompt "Locate" default)
nil nil nil 'locate-history-list default t)))
(and (equal input "") default
(setq input default))
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index a6a606828f9..09afad7aa47 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -534,8 +534,7 @@ of a mail alias. The value is set up, buffer-local, when first needed.")
(default-directory (expand-file-name "~/"))
(def mail-personal-alias-file))
(read-file-name
- (format "Read additional aliases from file (default %s): "
- def)
+ (format-prompt "Read additional aliases from file" def)
default-directory
(expand-file-name def default-directory)
t))))
@@ -548,7 +547,7 @@ of a mail alias. The value is set up, buffer-local, when first needed.")
(default-directory (expand-file-name "~/"))
(def mail-personal-alias-file))
(read-file-name
- (format "Read mail aliases from file (default %s): " def)
+ (format-prompt "Read mail aliases from file" def)
default-directory
(expand-file-name def default-directory)
t))))
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el
index 8e7aaf94937..1f688734d47 100644
--- a/lisp/mail/mailalias.el
+++ b/lisp/mail/mailalias.el
@@ -255,9 +255,9 @@ removed from alias expansions."
By default, this is the file specified by `mail-personal-alias-file'."
(interactive
(list
- (read-file-name (format "Read mail alias file (default %s): "
- mail-personal-alias-file)
- nil mail-personal-alias-file t)))
+ (read-file-name
+ (format-prompt "Read mail alias file" mail-personal-alias-file)
+ nil mail-personal-alias-file t)))
(setq file (expand-file-name (or file mail-personal-alias-file)))
;; In case mail-aliases is t, make sure define-mail-alias
;; does not recursively call build-mail-aliases.
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 94b0886c75f..ab2649feb4b 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -1,4 +1,4 @@
-;;; mspools.el --- show mail spools waiting to be read
+;;; mspools.el --- show mail spools waiting to be read -*- lexical-binding: t; -*-
;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
@@ -125,18 +125,15 @@
(defcustom mspools-update nil
"Non-nil means update *spools* buffer after visiting any folder."
- :type 'boolean
- :group 'mspools)
+ :type 'boolean)
(defcustom mspools-suffix "spool"
"Extension used for spool files (not including full stop)."
- :type 'string
- :group 'mspools)
+ :type 'string)
(defcustom mspools-using-vm (fboundp 'vm)
"Non-nil if VM is used as mail reader, otherwise RMAIL is used."
- :type 'boolean
- :group 'mspools)
+ :type 'boolean)
(defcustom mspools-folder-directory
(if (boundp 'vm-folder-directory)
@@ -144,8 +141,7 @@
"~/MAIL/")
"Directory where mail folders are kept. Ensure it has a trailing /.
Defaults to `vm-folder-directory' if bound else to ~/MAIL/."
- :type 'directory
- :group 'mspools)
+ :type 'directory)
(defcustom mspools-vm-system-mail (or (getenv "MAIL")
(concat rmail-spool-directory
@@ -156,8 +152,7 @@ without it. By default this will be set to the environment variable
$MAIL. Otherwise it will use `rmail-spool-directory' to guess where
your primary spool is. If this fails, set it to something like
/usr/spool/mail/login-name."
- :type 'file
- :group 'mspools)
+ :type 'file)
;;; Internal Variables
@@ -175,11 +170,8 @@ your primary spool is. If this fails, set it to something like
(define-key map "\C-c\C-c" 'mspools-visit-spool)
(define-key map "\C-m" 'mspools-visit-spool)
(define-key map " " 'mspools-visit-spool)
- (define-key map "?" 'mspools-help)
- (define-key map "q" 'mspools-quit)
(define-key map "n" 'next-line)
(define-key map "p" 'previous-line)
- (define-key map "g" 'revert-buffer)
map)
"Keymap for the *spools* buffer.")
@@ -221,14 +213,15 @@ your primary spool is. If this fails, set it to something like
(concat mspools-folder-directory s "." mspools-suffix)
(concat mspools-folder-directory s ".crash")))
;; So I create a vm-spool-files entry for each of those mail drops
- (mapcar 'file-name-sans-extension
+ (mapcar #'file-name-sans-extension
(directory-files mspools-folder-directory nil
(format "\\`[^.]+\\.%s" mspools-suffix)))
))
))
;;; MSPOOLS-SHOW -- the main function
-(defun mspools-show ( &optional noshow)
+;;;###autoload
+(defun mspools-show (&optional noshow)
"Show the list of non-empty spool files in the *spools* buffer.
Buffer is not displayed if SHOW is non-nil."
(interactive)
@@ -237,7 +230,7 @@ Buffer is not displayed if SHOW is non-nil."
(progn
(set-buffer mspools-buffer)
(setq buffer-read-only nil)
- (delete-region (point-min) (point-max)))
+ (erase-buffer))
;; else buffer doesn't exist so create it
(get-buffer-create mspools-buffer))
@@ -260,8 +253,8 @@ Buffer is not displayed if SHOW is non-nil."
(defun mspools-visit-spool ()
"Visit the folder on the current line of the *spools* buffer."
(interactive)
- (let ( spool-name folder-name)
- (setq spool-name (mspools-get-spool-name))
+ (let ((spool-name (mspools-get-spool-name))
+ folder-name)
(if (null spool-name)
(message "No spool on current line")
@@ -270,19 +263,20 @@ Buffer is not displayed if SHOW is non-nil."
;; put in a little "*" to indicate spool file has been read.
(if (not mspools-update)
(save-excursion
- (setq buffer-read-only nil)
(beginning-of-line)
- (insert "*")
- (delete-char 1)
- (setq buffer-read-only t)
- ))
+ (let ((inhibit-read-only t))
+ (insert "*")
+ (delete-char 1))))
(message "folder %s spool %s" folder-name spool-name)
- (if (eq (count-lines (point-min) (point-at-eol))
- mspools-files-len)
- (forward-line (- 1 mspools-files-len)) ;back to top of list
- ;; else just on to next line
- (forward-line 1))
+ (forward-line (if (eq (count-lines (point-min) (point-at-eol))
+ mspools-files-len)
+ ;; FIXME: Why use `mspools-files-len' instead
+ ;; of looking if we're on the last line and
+ ;; jumping to the first one if so?
+ (- 1 mspools-files-len) ;back to top of list
+ ;; else just on to next line
+ 1))
;; Choose whether to use VM or RMAIL for reading folder.
(if mspools-using-vm
@@ -296,8 +290,8 @@ Buffer is not displayed if SHOW is non-nil."
(if mspools-update
;; generate new list of spools.
- (save-excursion
- (mspools-show-again 'noshow))))))
+ (save-excursion ;;FIXME: Why?
+ (mspools-revert-buffer))))))
(defun mspools-get-folder-from-spool (name)
"Return folder name corresponding to the spool file NAME."
@@ -319,27 +313,31 @@ Buffer is not displayed if SHOW is non-nil."
(defun mspools-get-spool-name ()
"Return the name of the spool on the current line."
(let ((line-num (1- (count-lines (point-min) (point-at-eol)))))
+ ;; FIXME: Why not extract the name directly from the current line's text?
(car (nth line-num mspools-files))))
;;; Spools mode functions
-(defun mspools-revert-buffer (ignore noconfirm)
- "Re-run mspools-show to revert the *spools* buffer."
+(defun mspools-revert-buffer (&optional _ignore _noconfirm)
+ "Re-run `mspools-show' to revert the *spools* buffer."
(mspools-show 'noshow))
(defun mspools-show-again (&optional noshow)
- "Update the *spools* buffer. This is useful if mspools-update is
-nil."
+ "Update the *spools* buffer.
+This is useful if `mspools-update' is nil."
+ (declare (obsolete revert-buffer "28.1"))
(interactive)
(mspools-show noshow))
(defun mspools-help ()
"Show help for `mspools-mode'."
+ (declare (obsolete describe-mode "28.1"))
(interactive)
(describe-function 'mspools-mode))
(defun mspools-quit ()
"Quit the *spools* buffer."
+ (declare (obsolete quit-window "28.1"))
(interactive)
(kill-buffer mspools-buffer))
@@ -353,32 +351,26 @@ nil."
(defun mspools-get-spool-files ()
"Find the list of spool files and display them in *spools* buffer."
- (let (folders head spool len beg end any)
- (if (null mspools-folder-directory)
- (error "Set `mspools-folder-directory' to where the spool files are"))
- (setq folders (directory-files mspools-folder-directory nil
+ (if (null mspools-folder-directory)
+ (error "Set `mspools-folder-directory' to where the spool files are"))
+ (let* ((folders (directory-files mspools-folder-directory nil
(format "\\`[^.]+\\.%s\\'" mspools-suffix)))
- (setq folders (mapcar 'mspools-size-folder folders))
- (setq folders (delq nil folders))
+ (folders (delq nil (mapcar #'mspools-size-folder folders)))
+ ;; beg end
+ )
(setq mspools-files folders)
(setq mspools-files-len (length mspools-files))
- (set-buffer mspools-buffer)
- (while folders
- (setq any t)
- (setq head (car folders))
- (setq spool (car head))
- (setq len (cdr head))
- (setq folders (cdr folders))
- (setq beg (point))
- (insert (format " %10d %s" len spool))
- (setq end (point))
- (insert "\n")
- ;;(put-text-property beg end 'mouse-face 'highlight)
- )
- (if any
- (delete-char -1)) ;delete last RET
- (goto-char (point-min))
- ))
+ (with-current-buffer mspools-buffer
+ (pcase-dolist (`(,spool . ,len) folders)
+ ;; (setq beg (point))
+ (insert (format " %10d %s" len spool))
+ ;; (setq end (point))
+ (insert "\n")
+ ;;(put-text-property beg end 'mouse-face 'highlight)
+ )
+ (if (not (bolp))
+ (delete-char -1)) ;delete last RET
+ (goto-char (point-min)))))
(defun mspools-size-folder (spool)
"Return (SPOOL . SIZE ), if SIZE of spool file is non-zero."
diff --git a/lisp/mail/qp.el b/lisp/mail/qp.el
index 35ff47fd098..10ac696fecf 100644
--- a/lisp/mail/qp.el
+++ b/lisp/mail/qp.el
@@ -125,7 +125,7 @@ encode lines starting with \"From\"."
(not (eobp)))
(insert
(prog1
- (format "=%02X" (char-after))
+ (format "=%02X" (get-byte))
(delete-char 1))))
;; Encode white space at the end of lines.
(goto-char (point-min))
@@ -134,7 +134,7 @@ encode lines starting with \"From\"."
(while (not (eolp))
(insert
(prog1
- (format "=%02X" (char-after))
+ (format "=%02X" (get-byte))
(delete-char 1)))))
(let ((ultra
(and (boundp 'mm-use-ultra-safe-encoding)
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 312baffb901..f14025a93a8 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -417,20 +417,6 @@ The variable `rmail-highlighted-headers' specifies which headers."
:group 'rmail-headers
:version "22.1")
-;; This was removed in Emacs 23.1 with no notification, an unnecessary
-;; incompatible change.
-(defcustom rmail-highlight-face 'rmail-highlight
- "Face used by Rmail for highlighting headers."
- ;; Note that nil doesn't actually mean use the default face, it
- ;; means use either bold or highlight. It's not worth fixing this
- ;; now that this is obsolete.
- :type '(choice (const :tag "Default" nil)
- face)
- :group 'rmail-headers)
-(make-obsolete-variable 'rmail-highlight-face
- "customize the face `rmail-highlight' instead."
- "23.2")
-
(defface rmail-header-name
'((t (:inherit font-lock-function-name-face)))
"Face to use for highlighting the header names.
@@ -3012,7 +2998,7 @@ using the coding system CODING."
(defun rmail-highlight-headers ()
"Highlight the headers specified by `rmail-highlighted-headers'.
-Uses the face specified by `rmail-highlight-face'."
+Uses the face `rmail-highlight'."
(if rmail-highlighted-headers
(save-excursion
(search-forward "\n\n" nil 'move)
@@ -3020,11 +3006,7 @@ Uses the face specified by `rmail-highlight-face'."
(narrow-to-region (point-min) (point))
(let ((case-fold-search t)
(inhibit-read-only t)
- ;; When rmail-highlight-face is removed, just
- ;; use 'rmail-highlight here.
- (face (or rmail-highlight-face
- (if (face-differs-from-default-p 'bold)
- 'bold 'highlight)))
+ (face 'rmail-highlight)
;; List of overlays to reuse.
(overlays rmail-overlay-list))
(goto-char (point-min))
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 65d598c3bac..dd6eecbfd09 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -529,7 +529,7 @@ This also saves the value of `send-mail-function' via Customize."
(display-buffer (current-buffer))
(let ((completion-ignore-case t))
(completing-read
- (format "Send mail via (default %s): " (caar options))
+ (format-prompt "Send mail via" (caar options))
options nil 'require-match nil nil (car options))))))
;; Return the choice.
(cdr (assoc-string choice options t))))
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 666395e0b9e..1786608dd67 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -512,8 +512,9 @@ for `smtpmail-try-auth-method'.")
(if port
(format "%s" port)
"smtp"))
- (let* ((mechs (cdr-safe (assoc 'auth supported-extensions)))
- (mech (car (smtpmail-intersection mechs smtpmail-auth-supported)))
+ (let* ((mechs (smtpmail-intersection
+ (cdr-safe (assoc 'auth supported-extensions))
+ smtpmail-auth-supported))
(auth-source-creation-prompts
'((user . "SMTP user name for %h: ")
(secret . "SMTP password for %u@%h: ")))
@@ -526,6 +527,7 @@ for `smtpmail-try-auth-method'.")
:require (and ask-for-password
'(:user :secret))
:create ask-for-password)))
+ (mech (or (plist-get auth-info :smtp-auth) (car mechs)))
(user (plist-get auth-info :user))
(password (plist-get auth-info :secret))
(save-function (and ask-for-password
diff --git a/lisp/man.el b/lisp/man.el
index da8a15f69b9..64272415411 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -1014,10 +1014,9 @@ to auto-complete your input based on the installed manual pages."
(completion-ignore-case t)
Man-completion-cache ;Don't cache across calls.
(input (completing-read
- (format "Manual entry%s"
- (if (string= default-entry "")
- ": "
- (format " (default %s): " default-entry)))
+ (format-prompt "Manual entry"
+ (and (not (equal default-entry ""))
+ default-entry))
'Man-completion-table
nil nil nil 'Man-topic-history default-entry)))
(if (string= input "")
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index 01672c027f0..a32d21abb30 100644
--- a/lisp/minibuf-eldef.el
+++ b/lisp/minibuf-eldef.el
@@ -36,10 +36,24 @@
(defvar minibuffer-eldef-shorten-default)
(defun minibuffer-default--in-prompt-regexps ()
- `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
- 1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
- ("([^(]+?\\(, default\\(?: is\\)? \\(.*\\)\\)):? \\'" 1)
- ("\\( \\[.*\\]\\):? *\\'" 1)))
+ (cons
+ (list
+ (concat
+ "\\("
+ (if (string-match "%s" minibuffer-default-prompt-format)
+ (concat
+ (regexp-quote (substring minibuffer-default-prompt-format
+ 0 (match-beginning 0)))
+ ".*"
+ (regexp-quote (substring minibuffer-default-prompt-format
+ (match-end 0))))
+ (regexp-quote minibuffer-default-prompt-format))
+ ": *\\)")
+ 1)
+ `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
+ 1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
+ ("([^(]+?\\(, default\\(?: is\\)? \\(.*\\)\\)):? \\'" 1)
+ ("\\( \\[.*\\]\\):? *\\'" 1))))
(defcustom minibuffer-eldef-shorten-default nil
"If non-nil, shorten \"(default ...)\" to \"[...]\" in minibuffer prompts."
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 641a2e53152..864726e3cc0 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -2539,11 +2539,6 @@ same as `substitute-in-file-name'."
all))))))
(file-error nil))) ;PCM often calls with invalid directories.
-(defvar read-file-name-predicate nil
- "Current predicate used by `read-file-name-internal'.")
-(make-obsolete-variable 'read-file-name-predicate
- "use the regular PRED argument" "23.2")
-
(defun completion--sifn-requote (upos qstr)
;; We're looking for `qpos' such that:
;; (equal (substring (substitute-in-file-name qstr) 0 upos)
@@ -3033,6 +3028,19 @@ the commands start with a \"-\" or a SPC."
:version "24.1"
:type 'boolean)
+(defcustom minibuffer-default-prompt-format " (default %s)"
+ "Format string used to output \"default\" values.
+When prompting for input, there will often be a default value,
+leading to prompts like \"Number of articles (default 50): \".
+The \"default\" part of that prompt is controlled by this
+variable, and can be set to, for instance, \" [%s]\" if you want
+a shorter displayed prompt, or \"\", if you don't want to display
+the default at all.
+
+This variable is used by the `format-prompt' function."
+ :version "28.1"
+ :type 'string)
+
(defun completion-pcm--pattern-trivial-p (pattern)
(and (stringp (car pattern))
;; It can be followed by `point' and "" and still be trivial.
@@ -3850,6 +3858,23 @@ the minibuffer was activated, and execute the forms."
(with-minibuffer-selected-window
(scroll-other-window-down arg)))
+(defun format-prompt (prompt default &rest format-args)
+ "Format PROMPT with DEFAULT according to `minibuffer-default-prompt-format'.
+If FORMAT-ARGS is nil, PROMPT is used as a plain string. If
+FORMAT-ARGS is non-nil, PROMPT is used as a format control
+string, and FORMAT-ARGS are the arguments to be substituted into
+it. See `format' for details.
+
+If DEFAULT is nil, no \"default value\" string is included in the
+return value."
+ (concat
+ (if (null format-args)
+ prompt
+ (apply #'format prompt format-args))
+ (and default
+ (format minibuffer-default-prompt-format default))
+ ": "))
+
(provide 'minibuffer)
;;; minibuffer.el ends here
diff --git a/lisp/mouse.el b/lisp/mouse.el
index a06ca2a56ca..06fdca12b9c 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -2303,9 +2303,6 @@ and selects that window."
;; Few buffers--put them all in one pane.
(list (cons title alist))))
-(define-obsolete-function-alias
- 'mouse-choose-completion 'choose-completion "23.2")
-
;; Font selection.
(defun font-menu-add-default ()
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index 8e2039ba9d8..3b93bd1d5e4 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,4 +1,4 @@
-;;; mwheel.el --- Wheel mouse support
+;;; mwheel.el --- Mouse wheel support -*- lexical-binding:t -*-
;; Copyright (C) 1998, 2000-2020 Free Software Foundation, Inc.
;; Keywords: mouse
@@ -25,8 +25,8 @@
;; Under X11/X.Org, the wheel events are sent as button4/button5
;; events.
-;; It is already enabled by default on most graphical displays. You
-;; can toggle it with M-x mouse-wheel-mode.
+;; Mouse wheel support is already enabled by default on most graphical
+;; displays. You can toggle it using `M-x mouse-wheel-mode'.
;;; Code:
@@ -344,16 +344,39 @@ non-Windows systems."
(text-scale-decrease 1)))
(select-window selected-window))))
-(defvar mwheel-installed-bindings nil)
-(defvar mwheel-installed-text-scale-bindings nil)
+(defvar mouse-wheel--installed-bindings-alist nil
+ "Alist of all installed mouse wheel key bindings.")
-(defun mouse-wheel--remove-bindings (bindings funs)
- "Remove key BINDINGS if they're bound to any function in FUNS.
-BINDINGS is a list of key bindings, FUNS is a list of functions.
+(defun mouse-wheel--add-binding (key fun)
+ "Bind mouse wheel button KEY to function FUN.
+Save it for later removal by `mouse-wheel--remove-bindings'."
+ (global-set-key key fun)
+ (push (cons key fun) mouse-wheel--installed-bindings-alist))
+
+(defun mouse-wheel--remove-bindings ()
+ "Remove all mouse wheel key bindings.
This is a helper function for `mouse-wheel-mode'."
- (dolist (key bindings)
- (when (memq (lookup-key (current-global-map) key) funs)
- (global-unset-key key))))
+ (dolist (binding mouse-wheel--installed-bindings-alist)
+ (let ((key (car binding))
+ (fun (cdr binding)))
+ (when (eq (lookup-key (current-global-map) key) fun)
+ (global-unset-key key))))
+ (setq mouse-wheel--installed-bindings-alist nil))
+
+(defun mouse-wheel--create-scroll-keys (binding event)
+ "Return list of key vectors for BINDING and EVENT.
+BINDING is an element in `mouse-wheel-scroll-amount'. EVENT is
+an event used for scrolling, such as `mouse-wheel-down-event'."
+ (let ((prefixes (list 'left-margin 'right-margin
+ 'left-fringe 'right-fringe
+ 'vertical-scroll-bar 'horizontal-scroll-bar
+ 'mode-line 'header-line)))
+ (if (consp binding)
+ ;; With modifiers, bind only the buffer area (no prefix).
+ (list `[(,@(car binding) ,event)])
+ ;; No modifier: bind also some non-buffer areas of the screen.
+ (cons (vector event)
+ (mapcar (lambda (prefix) (vector prefix event)) prefixes)))))
(define-minor-mode mouse-wheel-mode
"Toggle mouse wheel support (Mouse Wheel mode)."
@@ -366,12 +389,7 @@ This is a helper function for `mouse-wheel-mode'."
:global t
:group 'mouse
;; Remove previous bindings, if any.
- (mouse-wheel--remove-bindings mwheel-installed-bindings
- '(mwheel-scroll))
- (mouse-wheel--remove-bindings mwheel-installed-text-scale-bindings
- '(mouse-wheel-text-scale))
- (setq mwheel-installed-bindings nil)
- (setq mwheel-installed-text-scale-bindings nil)
+ (mouse-wheel--remove-bindings)
;; Setup bindings as needed.
(when mouse-wheel-mode
(dolist (binding mouse-wheel-scroll-amount)
@@ -379,16 +397,16 @@ This is a helper function for `mouse-wheel-mode'."
;; Bindings for changing font size.
((and (consp binding) (eq (cdr binding) 'text-scale))
(dolist (event (list mouse-wheel-down-event mouse-wheel-up-event))
- (let ((key `[,(list (caar binding) event)]))
- (global-set-key key 'mouse-wheel-text-scale)
- (push key mwheel-installed-text-scale-bindings))))
+ (mouse-wheel--add-binding `[,(list (caar binding) event)]
+ 'mouse-wheel-text-scale)))
;; Bindings for scrolling.
(t
(dolist (event (list mouse-wheel-down-event mouse-wheel-up-event
- mouse-wheel-right-event mouse-wheel-left-event))
- (let ((key `[(,@(if (consp binding) (car binding)) ,event)]))
- (global-set-key key 'mwheel-scroll)
- (push key mwheel-installed-bindings))))))))
+ mouse-wheel-left-event mouse-wheel-right-event))
+ (dolist (key (mouse-wheel--create-scroll-keys binding event))
+ (mouse-wheel--add-binding key 'mwheel-scroll))))))))
+
+;;; Obsolete.
;;; Compatibility entry point
;; preloaded ;;;###autoload
@@ -397,6 +415,12 @@ This is a helper function for `mouse-wheel-mode'."
(declare (obsolete mouse-wheel-mode "27.1"))
(mouse-wheel-mode (if uninstall -1 1)))
+(defvar mwheel-installed-bindings nil)
+(make-obsolete-variable 'mwheel-installed-bindings nil "28.1")
+
+(defvar mwheel-installed-text-scale-bindings nil)
+(make-obsolete-variable 'mwheel-installed-text-scale-bindings nil "28.1")
+
(provide 'mwheel)
;;; mwheel.el ends here
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 2b8d4d0ce62..e7dad48cf4a 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -922,7 +922,7 @@ opposite of the browser kind of `browse-url-browser-function'."
'external
'internal))
(k (intern (completing-read
- (format "Browser kind (default %s): " default)
+ (format-prompt "Browser kind" default)
'(internal external)
nil t nil nil
default))))
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index fdd726ff613..ad5ff8d450e 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -53,6 +53,8 @@
(require 'xml)
+;;; D-Bus constants.
+
(defconst dbus-service-dbus "org.freedesktop.DBus"
"The bus name used to talk to the bus itself.")
@@ -62,7 +64,8 @@
(defconst dbus-path-local (concat dbus-path-dbus "/Local")
"The object path used in local/in-process-generated messages.")
-;; Default D-Bus interfaces.
+
+;;; Default D-Bus interfaces.
(defconst dbus-interface-dbus "org.freedesktop.DBus"
"The interface exported by the service `dbus-service-dbus'.")
@@ -145,7 +148,28 @@ See URL `https://dbus.freedesktop.org/doc/dbus-specification.html#standard-inter
;; </signal>
;; </interface>
-;; Emacs defaults.
+
+;;; Default D-Bus errors.
+
+(defconst dbus-error-dbus "org.freedesktop.DBus.Error"
+ "The namespace for default error names.
+See /usr/include/dbus-1.0/dbus/dbus-protocol.h.")
+
+(defconst dbus-error-failed (concat dbus-error-dbus ".Failed")
+ "A generic error; \"something went wrong\" - see the error message for more.")
+
+(defconst dbus-error-access-denied (concat dbus-error-dbus ".AccessDenied")
+ "Security restrictions don't allow doing what you're trying to do.")
+
+(defconst dbus-error-invalid-args (concat dbus-error-dbus ".InvalidArgs")
+ "Invalid arguments passed to a method call.")
+
+(defconst dbus-error-property-read-only
+ (concat dbus-error-dbus ".PropertyReadOnly")
+ "Property you tried to set is read-only.")
+
+
+;;; Emacs defaults.
(defconst dbus-service-emacs "org.gnu.Emacs"
"The well known service name of Emacs.")
@@ -157,7 +181,8 @@ shall be subdirectories of this path.")
(defconst dbus-interface-emacs "org.gnu.Emacs"
"The interface namespace used by Emacs.")
-;; D-Bus constants.
+
+;;; Basic D-Bus message functions.
(defmacro dbus-ignore-errors (&rest body)
"Execute BODY; signal D-Bus error when `dbus-debug' is non-nil.
@@ -172,9 +197,6 @@ Otherwise, return result of last form in BODY, or all other errors."
Every function must accept two arguments, the event and the error variable
caught in `condition-case' by `dbus-error'.")
-
-;;; Basic D-Bus message functions.
-
(defvar dbus-return-values-table (make-hash-table :test #'equal)
"Hash table for temporarily storing arguments of reply messages.
A key in this hash table is a list (:serial BUS SERIAL), like in
@@ -463,8 +485,9 @@ This is an internal function, it shall not be used outside dbus.el."
(apply #'dbus-message-internal dbus-message-type-method-return
bus service serial args))
-(defun dbus-method-error-internal (bus service serial &rest args)
+(defun dbus-method-error-internal (bus service serial error-name &rest args)
"Return error message for message SERIAL on the D-Bus BUS.
+ERROR-NAME must belong to the \"org.freedesktop.DBus.Error\" namespace.
This is an internal function, it shall not be used outside dbus.el."
(or (featurep 'dbusbind)
@@ -477,7 +500,7 @@ This is an internal function, it shall not be used outside dbus.el."
(signal 'wrong-type-argument (list 'natnump serial)))
(apply #'dbus-message-internal dbus-message-type-error
- bus service serial args))
+ bus service serial error-name args))
;;; Hash table of registered functions.
@@ -587,7 +610,7 @@ queue of this service."
(maphash
(lambda (key value)
- (unless (equal :serial (car key))
+ (unless (eq :serial (car key))
(dolist (elt value)
(ignore-errors
(when (and (equal bus (cadr key)) (string-equal service (cadr elt)))
@@ -775,10 +798,18 @@ discussion of DONT-REGISTER-SERVICE below). INTERFACE is the
interface offered by SERVICE. It must provide METHOD.
HANDLER is a Lisp function to be called when a method call is
-received. It must accept the input arguments of METHOD. The return
-value of HANDLER is used for composing the returning D-Bus message.
-If HANDLER returns a reply message with an empty argument list,
-HANDLER must return the symbol `:ignore'.
+received. It must accept the input arguments of METHOD. The
+return value of HANDLER is used for composing the returning D-Bus
+message. If HANDLER returns a reply message with an empty
+argument list, HANDLER must return the symbol `:ignore' in order
+to distinguish it from nil (the boolean false).
+
+If HANDLER detects an error, it shall return the list `(:error
+ERROR-NAME ERROR-MESSAGE)'. ERROR-NAME is a namespaced string
+which characterizes the error type, and ERROR-MESSAGE is a free
+text string. Alternatively, any Emacs signal `dbus-error' in
+HANDLER raises a D-Bus error message with the error name
+\"org.freedesktop.DBus.Error.Failed\".
When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is not
registered. This means that other D-Bus clients have no way of
@@ -996,22 +1027,26 @@ If the HANDLER returns a `dbus-error', it is propagated as return message."
(signal 'dbus-error (nthcdr 9 event)))
;; Apply the handler.
(setq result (apply (nth 8 event) (nthcdr 9 event)))
- ;; Return a message when it is a message call.
+ ;; Return an (error) message when it is a message call.
(when (= dbus-message-type-method-call (nth 2 event))
(dbus-ignore-errors
- (if (eq result :ignore)
- (dbus-method-return-internal
- (nth 1 event) (nth 4 event) (nth 3 event))
- (apply #'dbus-method-return-internal
- (nth 1 event) (nth 4 event) (nth 3 event)
- (if (consp result) result (list result)))))))
+ (if (eq (car-safe result) :error)
+ (apply #'dbus-method-error-internal
+ (nth 1 event) (nth 4 event) (nth 3 event) (cdr result))
+ (if (eq result :ignore)
+ (dbus-method-return-internal
+ (nth 1 event) (nth 4 event) (nth 3 event))
+ (apply #'dbus-method-return-internal
+ (nth 1 event) (nth 4 event) (nth 3 event)
+ (if (consp result) result (list result))))))))
;; Error handling.
(dbus-error
;; Return an error message when it is a message call.
(when (= dbus-message-type-method-call (nth 2 event))
(dbus-ignore-errors
(dbus-method-error-internal
- (nth 1 event) (nth 4 event) (nth 3 event) (cadr err))))
+ (nth 1 event) (nth 4 event) (nth 3 event) dbus-error-failed
+ (error-message-string err))))
;; Propagate D-Bus error messages.
(run-hook-with-args 'dbus-event-error-functions event err)
(when dbus-debug
@@ -1420,6 +1455,26 @@ nil is returned."
(dbus-call-method bus service path dbus-interface-properties
"GetAll" :timeout 500 interface))))
+(defun dbus-get-this-registered-property (bus _service path interface property)
+ "Return PROPERTY entry of `dbus-registered-objects-table'.
+Filter out not matching PATH."
+ ;; Remove entries not belonging to this case.
+ (seq-filter
+ (lambda (item)
+ (string-equal path (nth 2 item)))
+ (gethash (list :property bus interface property)
+ dbus-registered-objects-table)))
+
+(defun dbus-get-other-registered-property (bus _service path interface property)
+ "Return PROPERTY entry of `dbus-registered-objects-table'.
+Filter out matching PATH."
+ ;; Remove matching entries.
+ (seq-remove
+ (lambda (item)
+ (string-equal path (nth 2 item)))
+ (gethash (list :property bus interface property)
+ dbus-registered-objects-table)))
+
(defun dbus-register-property
(bus service path interface property access value
&optional emits-signal dont-register-service)
@@ -1436,14 +1491,14 @@ discussion of DONT-REGISTER-SERVICE below). INTERFACE is the
name of the interface used at PATH, PROPERTY is the name of the
property of INTERFACE. ACCESS indicates, whether the property
can be changed by other services via D-Bus. It must be either
-the symbol `:read' or `:readwrite'. VALUE is the initial value
-of the property, it can be of any valid type (see
+the symbol `:read', `:write' or `:readwrite'. VALUE is the
+initial value of the property, it can be of any valid type (see
`dbus-call-method' for details).
If PROPERTY already exists on PATH, it will be overwritten. For
properties with access type `:read' this is the only way to
-change their values. Properties with access type `:readwrite'
-can be changed by `dbus-set-property'.
+change their values. Properties with access type `:write' or
+`:readwrite' can be changed by `dbus-set-property'.
The interface \"org.freedesktop.DBus.Properties\" is added to
PATH, including a default handler for the \"Get\", \"GetAll\" and
@@ -1457,7 +1512,7 @@ of noticing the newly registered property. When interfaces are
constructed incrementally by adding single methods or properties
at a time, DONT-REGISTER-SERVICE can be used to prevent other
clients from discovering the still incomplete interface."
- (unless (member access '(:read :readwrite))
+ (unless (member access '(:read :write :readwrite))
(signal 'wrong-type-argument (list "Access type invalid" access)))
;; Add handlers for the three property-related methods.
@@ -1479,19 +1534,25 @@ clients from discovering the still incomplete interface."
(when emits-signal
(dbus-send-signal
bus service path dbus-interface-properties "PropertiesChanged"
- `((:dict-entry ,property (:variant ,value)))
- '(:array)))
+ (if (member access '(:read :readwrite))
+ `(:array (:dict-entry ,property (:variant ,value)))
+ '(:array: :signature "{sv}"))
+ (if (eq access :write)
+ `(:array ,property)
+ '(:array))))
;; Create a hash table entry. We use nil for the unique name,
;; because the property might be accessed from anybody.
(let ((key (list :property bus interface property))
(val
- (list
+ (cons
(list
nil service path
(cons
(if emits-signal (list access :emits-signal) (list access))
- value)))))
+ value))
+ (dbus-get-other-registered-property
+ bus service path interface property))))
(puthash key val dbus-registered-objects-table)
;; Return the object.
@@ -1509,55 +1570,70 @@ It will be registered for all objects created by `dbus-register-property'."
(cond
;; "Get" returns a variant.
((string-equal method "Get")
- (let ((entry (gethash (list :property bus interface property)
- dbus-registered-objects-table)))
- (when (string-equal path (nth 2 (car entry)))
- `((:variant ,(cdar (last (car entry))))))))
+ (let* ((entry (dbus-get-this-registered-property
+ bus service path interface property))
+ (object (car (last (car entry)))))
+ (cond
+ ((not (consp object))
+ `(:error ,dbus-error-invalid-args
+ ,(format-message
+ "No such property \"%s\" at path \"%s\"" property path)))
+ ((eq (car object) :write)
+ `(:error ,dbus-error-access-denied
+ ,(format-message
+ "Property \"%s\" at path \"%s\" is not readable" property path)))
+ ;; Return the result.
+ (t `((:variant ,(cdar (last (car entry)))))))))
;; "Set" expects a variant.
((string-equal method "Set")
(let* ((value (caar (cddr args)))
- (entry (gethash (list :property bus interface property)
- dbus-registered-objects-table))
- ;; The value of the hash table is a list; in case of
- ;; properties it contains just one element (UNAME SERVICE
- ;; PATH OBJECT). OBJECT is a cons cell of a list, which
- ;; contains a list of annotations (like :read,
- ;; :read-write, :emits-signal), and the value of the
- ;; property.
+ (entry (dbus-get-this-registered-property
+ bus service path interface property))
(object (car (last (car entry)))))
- (unless (consp object)
- (signal 'dbus-error
- (list "Property not registered at path" property path)))
- (unless (member :readwrite (car object))
- (signal 'dbus-error
- (list "Property not writable at path" property path)))
- (puthash (list :property bus interface property)
- (list (append (butlast (car entry))
- (list (cons (car object) value))))
- dbus-registered-objects-table)
- ;; Send the "PropertiesChanged" signal.
- (when (member :emits-signal (car object))
- (dbus-send-signal
- bus service path dbus-interface-properties "PropertiesChanged"
- `((:dict-entry ,property (:variant ,value)))
- '(:array)))
- ;; Return empty reply.
- :ignore))
+ (cond
+ ((not (consp object))
+ `(:error ,dbus-error-invalid-args
+ ,(format-message
+ "No such property \"%s\" at path \"%s\"" property path)))
+ ((eq (car object) :read)
+ `(:error ,dbus-error-property-read-only
+ ,(format-message
+ "Property \"%s\" at path \"%s\" is not writable" property path)))
+ (t (puthash (list :property bus interface property)
+ (cons (append (butlast (car entry))
+ (list (cons (car object) value)))
+ (dbus-get-other-registered-property
+ bus service path interface property))
+ dbus-registered-objects-table)
+ ;; Send the "PropertiesChanged" signal.
+ (when (member :emits-signal (car object))
+ (dbus-send-signal
+ bus service path dbus-interface-properties "PropertiesChanged"
+ (if (or (member :read (car object))
+ (member :readwrite (car object)))
+ `(:array (:dict-entry ,property (:variant ,value)))
+ '(:array: :signature "{sv}"))
+ (if (eq (car object) :write)
+ `(:array ,property)
+ '(:array))))
+ ;; Return empty reply.
+ :ignore))))
;; "GetAll" returns "a{sv}".
((string-equal method "GetAll")
(let (result)
(maphash
(lambda (key val)
- (when (and (equal (butlast key) (list :property bus interface))
- (string-equal path (nth 2 (car val)))
- (not (functionp (car (last (car val))))))
- (push
- (list :dict-entry
- (car (last key))
- (list :variant (cdar (last (car val)))))
- result)))
+ (dolist (item val)
+ (when (and (equal (butlast key) (list :property bus interface))
+ (string-equal path (nth 2 item))
+ (not (functionp (car (last item)))))
+ (push
+ (list :dict-entry
+ (car (last key))
+ (list :variant (cdar (last item))))
+ result))))
dbus-registered-objects-table)
;; Return the result, or an empty array.
(list :array (or result '(:signature "{sv}"))))))))
@@ -1765,5 +1841,7 @@ this connection to those buses."
;; * Implement org.freedesktop.DBus.ObjectManager.InterfacesAdded and
;; org.freedesktop.DBus.ObjectManager.InterfacesRemoved.
+;;
+;; * Run handlers in own threads.
;;; dbus.el ends here
diff --git a/lisp/net/eudcb-macos-contacts.el b/lisp/net/eudcb-macos-contacts.el
index e2d10e33d49..3c0d88fc23f 100644
--- a/lisp/net/eudcb-macos-contacts.el
+++ b/lisp/net/eudcb-macos-contacts.el
@@ -96,7 +96,8 @@ RETURN-ATTRS is a list of attributes to return, defaulting to
(name (nth 0 args))
(email (nth 1 args)))
(setq result (cons `((name . ,name)
- (email . ,email)) result))))
+ (email . ,email))
+ result))))
(forward-line))
result)))
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 04deb5bee05..b720edc7fef 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -307,11 +307,10 @@ If BUFFER, the data to be rendered is in that buffer. In that
case, this function doesn't actually fetch URL. BUFFER will be
killed after rendering."
(interactive
- (let* ((uris (eww-suggested-uris))
- (prompt (concat "Enter URL or keywords"
- (if uris (format " (default %s)" (car uris)) "")
- ": ")))
- (list (read-string prompt nil 'eww-prompt-history uris)
+ (let ((uris (eww-suggested-uris)))
+ (list (read-string (format-prompt "Enter URL or keywords"
+ (and uris (car uris)))
+ nil 'eww-prompt-history uris)
(prefix-numeric-value current-prefix-arg))))
(setq url (eww--dwim-expand-url url))
(pop-to-buffer-same-window
@@ -1402,16 +1401,15 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
(options nil)
(start (point))
(max 0))
- (dolist (elem (dom-non-text-children dom))
- (when (eq (dom-tag elem) 'option)
- (when (dom-attr elem 'selected)
- (nconc menu (list :value (dom-attr elem 'value))))
- (let ((display (dom-text elem)))
- (setq max (max max (length display)))
- (push (list 'item
- :value (dom-attr elem 'value)
- :display display)
- options))))
+ (dolist (elem (dom-by-tag dom 'option))
+ (when (dom-attr elem 'selected)
+ (nconc menu (list :value (dom-attr elem 'value))))
+ (let ((display (dom-text elem)))
+ (setq max (max max (length display)))
+ (push (list 'item
+ :value (dom-attr elem 'value)
+ :display display)
+ options)))
(when options
(setq options (nreverse options))
;; If we have no selected values, default to the first value.
@@ -1451,12 +1449,13 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
(cons (plist-get (cdr elem) :display)
(plist-get (cdr elem) :value))))
input)))
- (display
- (completing-read "Change value: " options nil 'require-match))
+ (display (completing-read "Change value: " options nil 'require-match))
(inhibit-read-only t))
- (plist-put input :value (cdr (assoc-string display options t)))
- (goto-char
- (eww-update-field display))))
+ ;; If the user doesn't enter anything, don't change anything.
+ (when (> (length display) 0)
+ (plist-put input :value (cdr (assoc-string display options t)))
+ (goto-char
+ (eww-update-field display)))))
(defun eww-update-field (string &optional offset)
(unless offset
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 1766e192f2d..f296ae3afe1 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -625,7 +625,7 @@ SERVER-PLIST is the property list for the server."
(default (or (plist-get server-plist :encryption)
"plain")))
(intern
- (completing-read (format "Encryption (default %s): " default)
+ (completing-read (format-prompt "Encryption" default)
choices nil t nil nil default))))
(defun rcirc-keepalive ()
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index ddd81127213..6517596130c 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -751,10 +751,10 @@ size, and full-buffer size."
(face (get-text-property (point) 'face)))
;; Extend the background to the end of the line.
(insert ?\n)
+ (shr-indent)
(when face
- (put-text-property (1- (point)) (point)
+ (put-text-property gap-start (point)
'face (shr-face-background face)))
- (shr-indent)
(when (and (> (1- gap-start) (point-min))
(get-text-property (point) 'shr-url)
;; The link on both sides of the newline are the
@@ -1209,25 +1209,8 @@ Return a string with image data."
;; that are non-ASCII.
(shr-dom-to-xml
(libxml-parse-xml-region (point) (point-max)) 'utf-8)))
- ;; SVG images often do not have a specified foreground/background
- ;; color, so wrap them in styles.
- (when (and (display-images-p)
- (eq content-type 'image/svg+xml))
- (setq data (svg--wrap-svg data)))
(list data content-type)))
-(defun svg--wrap-svg (data)
- "Add a default foreground colour to SVG images."
- (let ((size (image-size (create-image data nil t :scaling 1) t)))
- (with-temp-buffer
- (insert
- (format
- "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:xi=\"http://www.w3.org/2001/XInclude\" style=\"color: %s;\" viewBox=\"0 0 %d %d\"> <xi:include href=\"data:image/svg+xml;base64,%s\"></xi:include></svg>"
- (face-foreground 'default)
- (car size) (cdr size)
- (base64-encode-string data t)))
- (buffer-string))))
-
(defun shr-image-displayer (content-function)
"Return a function to display an image.
CONTENT-FUNCTION is a function to retrieve an image for a cid url that
@@ -1332,7 +1315,7 @@ ones, in case fg and bg are nil."
t))
(when bg
(add-face-text-property start end
- (list :background (car new-colors))
+ (list :background (car new-colors) :extend t)
t)))
new-colors)))
@@ -2267,7 +2250,7 @@ flags that control whether to collect or render objects."
(not background))
(setq background (cadr elem))))
(and background
- (list :background background))))))
+ (list :background background :extend t))))))
(defun shr-expand-alignments (start end)
(while (< (setq start (next-single-property-change
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 52cc186ecf7..827d5f60a2b 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -482,9 +482,7 @@ For details, see `tramp-rename-files'."
(defun tramp-bug ()
"Submit a bug report to the Tramp developers."
(interactive)
- (let ((reporter-prompt-for-summary-p t)
- ;; In rare cases, it could contain the password. So we make it nil.
- tramp-password-save-function)
+ (let ((reporter-prompt-for-summary-p t))
(reporter-submit-bug-report
tramp-bug-report-address ; to-address
(format "tramp (%s %s/%s)" ; package name and version
@@ -492,10 +490,11 @@ For details, see `tramp-rename-files'."
(sort
(delq nil (mapcar
(lambda (x)
- (and x (boundp x) (cons x 'tramp-reporter-dump-variable)))
+ (and x (boundp x) (not (get x 'tramp-suppress-trace))
+ (cons x 'tramp-reporter-dump-variable)))
(append
(mapcar #'intern (all-completions "tramp-" obarray #'boundp))
- ;; Non-tramp variables of interest.
+ ;; Non-Tramp variables of interest.
'(shell-prompt-pattern
backup-by-copying
backup-by-copying-when-linked
@@ -552,11 +551,11 @@ buffer in your bug report.
(string-match-p
(concat "[^" (bound-and-true-p mm-7bit-chars) "]") val))
(with-current-buffer reporter-eval-buffer
- (set
- varsym
- (format
- "(decode-coding-string (base64-decode-string \"%s\") 'raw-text)"
- (base64-encode-string (encode-coding-string val 'raw-text)))))))
+ (set varsym
+ `(decode-coding-string
+ (base64-decode-string
+ ,(base64-encode-string (encode-coding-string val 'raw-text)))
+ 'raw-text)))))
;; Dump variable.
(reporter-dump-variable varsym mailbuf)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index fae15fe6a8e..7a3f3fe8f02 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3025,6 +3025,10 @@ implementation will be used."
(setq signals
(append
'(0) (split-string (shell-command-to-string "kill -l") nil 'omit)))
+ ;; Sanity check. Sometimes, the first entry is "0", although we
+ ;; don't expect it. Remove it.
+ (when (and (stringp (cadr signals)) (string-equal "0" (cadr signals)))
+ (setcdr signals (cddr signals)))
;; Sanity check. "kill -l" shall have returned just the signal
;; names. Some shells don't, like the one in "docker alpine".
(let (signal-hook-function)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 83ade66ee14..96446399dd6 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -80,6 +80,7 @@
(eval-and-compile ;; So it's also available in tramp-loaddefs.el!
(defvar tramp--startup-hook nil
"Forms to be executed at the end of tramp.el.")
+ (put 'tramp--startup-hook 'tramp-suppress-trace t)
(defmacro tramp--with-startup (&rest body)
"Schedule BODY to be executed at the end of tramp.el."
@@ -248,6 +249,10 @@ pair of the form (KEY VALUE). The following KEYs are defined:
parameters to suppress diagnostic messages, in order not to
tamper the process output.
+ * `tramp-direct-async-args'
+ An additional argument when a direct asynchronous process is
+ started. Used so far only in the \"mock\" method of tramp-tests.el.
+
* `tramp-copy-program'
This specifies the name of the program to use for remotely copying
the file; this might be the absolute filename of scp or the name of
@@ -1237,6 +1242,7 @@ the (optional) timestamp of last activity on this connection.")
"Password save function.
Will be called once the password has been verified by successful
authentication.")
+(put 'tramp-password-save-function 'tramp-suppress-trace t)
(defconst tramp-completion-file-name-handler-alist
'((file-name-all-completions
@@ -3733,26 +3739,29 @@ User is always nil."
(defun tramp-direct-async-process-p (&rest args)
"Whether direct async `make-process' can be called."
- (let ((v (tramp-dissect-file-name default-directory)))
- (and (tramp-get-connection-property v "direct-async-process" nil)
- (= (length (tramp-compute-multi-hops v)) 1)
- (not (plist-get args :stderr)))))
-
-;; We use BUFFER also as connection buffer during setup. Because of
-;; this, its original contents must be saved, and restored once
-;; connection has been setup.
+ (let ((v (tramp-dissect-file-name default-directory))
+ (buffer (plist-get args :buffer))
+ (stderr (plist-get args :stderr)))
+ (and ;; It has been indicated.
+ (tramp-get-connection-property v "direct-async-process" nil)
+ ;; There's no multi-hop.
+ (or (not (tramp-multi-hop-p v))
+ (= (length (tramp-compute-multi-hops v)) 1))
+ ;; There's no remote stdout or stderr file.
+ (or (not (stringp buffer)) (not (tramp-tramp-file-p buffer)))
+ (or (not (stringp stderr)) (not (tramp-tramp-file-p stderr))))))
+
(defun tramp-handle-make-process (&rest args)
"An alternative `make-process' implementation for Tramp files.
It does not support `:stderr'."
(when args
(with-parsed-tramp-file-name (expand-file-name default-directory) nil
- (let ((name (plist-get args :name))
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ (name (plist-get args :name))
(buffer (plist-get args :buffer))
(command (plist-get args :command))
- ;; FIXME: `:coding' shall be used.
(coding (plist-get args :coding))
(noquery (plist-get args :noquery))
- ;; FIXME: `:connection-type' shall be used.
(connection-type (plist-get args :connection-type))
(filter (plist-get args :filter))
(sentinel (plist-get args :sentinel))
@@ -3775,122 +3784,77 @@ It does not support `:stderr'."
(signal 'wrong-type-argument (list #'functionp filter)))
(unless (or (null sentinel) (functionp sentinel))
(signal 'wrong-type-argument (list #'functionp sentinel)))
- (when stderr
- (signal
- 'user-error
- (list
- "Stderr not supported for direct remote asynchronous processes"
- stderr)))
+ (unless (or (null stderr) (bufferp stderr))
+ (signal 'wrong-type-argument (list #'stringp stderr)))
(let* ((buffer
(if buffer
(get-buffer-create buffer)
;; BUFFER can be nil. We use a temporary buffer.
(generate-new-buffer tramp-temp-buffer-name)))
- (command (append `("cd" ,localname "&&")
- (mapcar #'tramp-shell-quote-argument command)))
- (bmp (and (buffer-live-p buffer) (buffer-modified-p buffer)))
- (name1 name)
- (i 0)
- ;; We do not want to raise an error when `make-process'
- ;; has been started several times in `eshell' and
- ;; friends.
- tramp-current-connection
- p)
-
- (while (get-process name1)
- ;; NAME must be unique as process name.
- (setq i (1+ i)
- name1 (format "%s<%d>" name i)))
- (setq name name1)
- ;; Set the new process properties.
- (tramp-set-connection-property v "process-name" name)
- (tramp-set-connection-property v "process-buffer" buffer)
+ (command
+ (mapconcat
+ #'identity (append `("cd" ,localname "&&") command) " ")))
;; Check for `tramp-sh-file-name-handler', because something
;; is different between tramp-adb.el and tramp-sh.el.
- (with-current-buffer (tramp-get-connection-buffer v)
- (unwind-protect
- (let* ((sh-file-name-handler-p (tramp-sh-file-name-handler-p v))
- (login-program
- (tramp-get-method-parameter v 'tramp-login-program))
- (login-args
- (tramp-get-method-parameter v 'tramp-login-args))
- (async-args
- (tramp-get-method-parameter v 'tramp-async-args))
- ;; We don't create the temporary file. In
- ;; fact, it is just a prefix for the
- ;; ControlPath option of ssh; the real
- ;; temporary file has another name, and it is
- ;; created and protected by ssh. It is also
- ;; removed by ssh when the connection is
- ;; closed. The temporary file name is cached
- ;; in the main connection process, therefore
- ;; we cannot use `tramp-get-connection-process'.
- (tmpfile
- (when sh-file-name-handler-p
- (with-tramp-connection-property
- (tramp-get-process v) "temp-file"
- (tramp-compat-make-temp-name))))
- (options
- (when sh-file-name-handler-p
- (tramp-compat-funcall
- 'tramp-ssh-controlmaster-options v)))
- spec)
-
- ;; Replace `login-args' place holders.
- (setq
- spec (format-spec-make ?t tmpfile)
- options (format-spec (or options "") spec)
- spec (format-spec-make
- ?h (or host "") ?u (or user "") ?p (or port "")
- ?c options ?l "")
- ;; Add arguments for asynchronous processes.
- login-args (append async-args login-args)
- ;; Expand format spec.
- login-args
- (tramp-compat-flatten-tree
- (mapcar
- (lambda (x)
- (setq x (mapcar (lambda (y) (format-spec y spec)) x))
- (unless (member "" x) x))
- login-args))
- ;; Split ControlMaster options.
- login-args
- (tramp-compat-flatten-tree
- (mapcar (lambda (x) (split-string x " ")) login-args))
- p (apply
- #'start-process
- name buffer login-program (append login-args command)))
-
- (tramp-message v 6 "%s" (string-join (process-command p) " "))
- ;; Set sentinel and filter.
- (when sentinel
- (set-process-sentinel p sentinel))
- (when filter
- (set-process-filter p filter))
- ;; Set query flag and process marker for this
- ;; process. We ignore errors, because the
- ;; process could have finished already.
- (ignore-errors
- (set-process-query-on-exit-flag p (null noquery))
- (set-marker (process-mark p) (point)))
- ;; We must flush them here already; otherwise
- ;; `rename-file', `delete-file' or
- ;; `insert-file-contents' will fail.
- (tramp-flush-connection-property v "process-name")
- (tramp-flush-connection-property v "process-buffer")
- ;; Return process.
- p)
-
- ;; Save exit.
- (if (string-match-p tramp-temp-buffer-name (buffer-name))
- (ignore-errors
- (set-process-buffer p nil)
- (kill-buffer (current-buffer)))
- (set-buffer-modified-p bmp))
- (tramp-flush-connection-property v "process-name")
- (tramp-flush-connection-property v "process-buffer"))))))))
+ (let* ((sh-file-name-handler-p (tramp-sh-file-name-handler-p v))
+ (login-program
+ (tramp-get-method-parameter v 'tramp-login-program))
+ (login-args
+ (tramp-get-method-parameter v 'tramp-login-args))
+ (async-args
+ (tramp-get-method-parameter v 'tramp-async-args))
+ (direct-async-args
+ (tramp-get-method-parameter v 'tramp-direct-async-args))
+ ;; We don't create the temporary file. In fact, it
+ ;; is just a prefix for the ControlPath option of
+ ;; ssh; the real temporary file has another name, and
+ ;; it is created and protected by ssh. It is also
+ ;; removed by ssh when the connection is closed. The
+ ;; temporary file name is cached in the main
+ ;; connection process, therefore we cannot use
+ ;; `tramp-get-connection-process'.
+ (tmpfile
+ (when sh-file-name-handler-p
+ (with-tramp-connection-property
+ (tramp-get-process v) "temp-file"
+ (tramp-compat-make-temp-name))))
+ (options
+ (when sh-file-name-handler-p
+ (tramp-compat-funcall
+ 'tramp-ssh-controlmaster-options v)))
+ spec p)
+
+ ;; Replace `login-args' place holders.
+ (setq
+ spec (format-spec-make ?t tmpfile)
+ options (format-spec (or options "") spec)
+ spec (format-spec-make
+ ?h (or host "") ?u (or user "") ?p (or port "")
+ ?c options ?l "")
+ ;; Add arguments for asynchronous processes.
+ login-args (append async-args direct-async-args login-args)
+ ;; Expand format spec.
+ login-args
+ (tramp-compat-flatten-tree
+ (mapcar
+ (lambda (x)
+ (setq x (mapcar (lambda (y) (format-spec y spec)) x))
+ (unless (member "" x) x))
+ login-args))
+ ;; Split ControlMaster options.
+ login-args
+ (tramp-compat-flatten-tree
+ (mapcar (lambda (x) (split-string x " ")) login-args))
+ p (make-process
+ :name name :buffer buffer
+ :command (append `(,login-program) login-args `(,command))
+ :coding coding :noquery noquery :connection-type connection-type
+ :filter filter :sentinel sentinel :stderr stderr))
+
+ (tramp-message v 6 "%s" (string-join (process-command p) " "))
+ p))))))
(defun tramp-handle-make-symbolic-link
(target linkname &optional ok-if-already-exists)
diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el
index 098aa3d5fe1..d7c5b381d29 100644
--- a/lisp/pcmpl-gnu.el
+++ b/lisp/pcmpl-gnu.el
@@ -118,7 +118,7 @@
Return the new list."
(goto-char (point-min))
(while (re-search-forward
- "^\\s-*\\([^\n#%.$][^:=\n]*\\)\\s-*:[^=]" nil t)
+ "^\\([^\t\n#%.$][^:=\n]*\\)\\s-*:[^=]" nil t)
(setq targets (nconc (split-string (match-string-no-properties 1))
targets)))
targets)
diff --git a/lisp/pcmpl-linux.el b/lisp/pcmpl-linux.el
index 6e036434ef2..df9d24507a0 100644
--- a/lisp/pcmpl-linux.el
+++ b/lisp/pcmpl-linux.el
@@ -1,4 +1,4 @@
-;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions
+;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions -*- lexical-binding: t -*-
;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
@@ -65,18 +65,22 @@
(pcomplete-opt "hVanfFrsvwt(pcmpl-linux-fs-types)o?L?U?")
(while (pcomplete-here (pcomplete-entries) nil 'identity)))
+(defconst pcmpl-linux-fs-modules-path-format "/lib/modules/%s/kernel/fs/")
+
(defun pcmpl-linux-fs-types ()
"Return a list of available fs modules on GNU/Linux systems."
(let ((kernel-ver (pcomplete-process-result "uname" "-r")))
(directory-files
- (concat "/lib/modules/" kernel-ver "/kernel/fs/"))))
+ (format pcmpl-linux-fs-modules-path-format kernel-ver))))
+
+(defconst pcmpl-linux-mtab-file "/etc/mtab")
(defun pcmpl-linux-mounted-directories ()
"Return a list of mounted directory names."
(let (points)
- (when (file-readable-p "/etc/mtab")
+ (when (file-readable-p pcmpl-linux-mtab-file)
(with-temp-buffer
- (insert-file-contents-literally "/etc/mtab")
+ (insert-file-contents-literally pcmpl-linux-mtab-file)
(while (not (eobp))
(let* ((line (buffer-substring (point) (line-end-position)))
(args (split-string line " ")))
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index f1c8725afea..822f6f37e78 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -1,4 +1,4 @@
-;;; pcmpl-unix.el --- standard UNIX completions
+;;; pcmpl-unix.el --- standard UNIX completions -*- lexical-binding:t -*-
;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
@@ -155,12 +155,14 @@ documentation), this function returns nil."
(let ((host-re "\\(?:\\([-.[:alnum:]]+\\)\\|\\[\\([-.[:alnum:]]+\\)\\]:[0-9]+\\)[, ]")
ssh-hosts-list)
(while (re-search-forward (concat "^ *" host-re) nil t)
- (add-to-list 'ssh-hosts-list (concat (match-string 1)
- (match-string 2)))
+ (push (concat (match-string 1)
+ (match-string 2))
+ ssh-hosts-list)
(while (and (eq (char-before) ?,)
(re-search-forward host-re (line-end-position) t))
- (add-to-list 'ssh-hosts-list (concat (match-string 1)
- (match-string 2)))))
+ (push (concat (match-string 1)
+ (match-string 2))
+ ssh-hosts-list)))
ssh-hosts-list))))
(defun pcmpl-ssh-config-hosts ()
@@ -173,7 +175,7 @@ documentation), this function returns nil."
(case-fold-search t))
(while (re-search-forward "^ *host\\(name\\)? +\\([-.[:alnum:]]+\\)"
nil t)
- (add-to-list 'ssh-hosts-list (match-string 2)))
+ (push (match-string 2) ssh-hosts-list))
ssh-hosts-list))))
(defun pcmpl-ssh-hosts ()
@@ -181,7 +183,7 @@ documentation), this function returns nil."
Uses both `pcmpl-ssh-config-file' and `pcmpl-ssh-known-hosts-file'."
(let ((hosts (pcmpl-ssh-known-hosts)))
(dolist (h (pcmpl-ssh-config-hosts))
- (add-to-list 'hosts h))
+ (push h hosts))
hosts))
;;;###autoload
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index f0132135fd9..9b74eb913e0 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -265,12 +265,7 @@ format."
(set-face-foreground face color)
(set-face-background face color)
(gamegrid-set-font face)
- (condition-case nil
- (set-face-background-pixmap face [nothing]);; XEmacs
- (error nil))
- (condition-case nil
- (set-face-background-pixmap face nil);; Emacs
- (error nil)))
+ (set-face-background-pixmap face nil))
(defun gamegrid-make-mono-tty-face ()
(let ((face (make-face 'gamegrid-mono-tty-face)))
diff --git a/lisp/play/life.el b/lisp/play/life.el
index 06d5b4082ff..56ecc5273da 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -1,4 +1,4 @@
-;;; life.el --- John Horton Conway's `Life' game for GNU Emacs
+;;; life.el --- John Horton Conway's Game of Life -*- lexical-binding:t -*-
;; Copyright (C) 1988, 2001-2020 Free Software Foundation, Inc.
@@ -29,6 +29,15 @@
;;; Code:
+(defgroup life nil
+ "Conway's Game of Life."
+ :group 'games)
+
+(defcustom life-step-time 0.5
+ "Time to sleep between steps (generations)."
+ :type 'number
+ :version "28.1")
+
(defvar life-patterns
[("@@@" " @@" "@@@")
("@@@ @@@" "@@ @@ " "@@@ @@@")
@@ -54,6 +63,7 @@
" @@")
("@@@@@@@@@" "@ @ @" "@ @@@@@ @" "@ @ @ @" "@@@ @@@"
"@ @ @ @" "@ @@@@@ @" "@ @ @" "@@@@@@@@@")
+ ;; Glider Gun (infinite, Bill Gosper, 1970)
(" @ "
" @ @ "
" @@ @@ @@"
@@ -74,7 +84,26 @@
" @@"
" @@ @"
"@ @ @")
- ("@@@@@@@@ @@@@@ @@@ @@@@@@@ @@@@@")]
+ ("@@@@@@@@ @@@@@ @@@ @@@@@@@ @@@@@")
+ ;; Pentadecathlon (period 15, John Conway, 1970)
+ (" @ @ "
+ "@@ @@@@ @@"
+ " @ @ ")
+ ;; Queen Bee Shuttle (period 30, Bill Gosper, 1970)
+ (" @ "
+ " @ @ "
+ " @ @ "
+ "@@ @ @ @@"
+ "@@ @ @ @@"
+ " @ @ "
+ " @ ")
+ ;; 2x Figure eight (period 8, Simon Norton, 1970)
+ ("@@@ @@@ "
+ "@@@ @@@ "
+ "@@@ @@@ "
+ " @@@ @@@"
+ " @@@ @@@"
+ " @@@ @@@")]
"Vector of rectangles containing some Life startup patterns.")
;; Macros are used macros for manifest constants instead of variables
@@ -106,28 +135,45 @@
;; (scroll-up) and (scroll-down) when trying to center the display.
(defvar life-window-start nil)
+(defvar life--max-width nil
+ "If non-nil, restrict width to this positive integer. ")
+
+(defvar life--max-height nil
+ "If non-nil, restrict height to this positive integer. ")
+
;; For mode line
(defvar life-current-generation nil)
;; Sadly, mode-line-format won't display numbers.
(defvar life-generation-string nil)
+(defun life--tick ()
+ "Game tick for `life'."
+ (let ((inhibit-quit t)
+ (inhibit-read-only t))
+ (life-grim-reaper)
+ (life-expand-plane-if-needed)
+ (life-increment-generation)))
+
;;;###autoload
-(defun life (&optional sleeptime)
+(defun life (&optional step-time)
"Run Conway's Life simulation.
-The starting pattern is randomly selected. Prefix arg (optional first
-arg non-nil from a program) is the number of seconds to sleep between
-generations (this defaults to 1)."
- (interactive "p")
- (or sleeptime (setq sleeptime 1))
+The starting pattern is randomly selected from `life-patterns'.
+
+Prefix arg is the number of tenths of a second to sleep between
+generations (the default is `life-step-time').
+
+When called from Lisp, optional argument STEP-TIME is the time to
+sleep in seconds."
+ (interactive "P")
+ (setq step-time (or (and step-time (/ (if (consp step-time)
+ (car step-time)
+ step-time) 10.0))
+ life-step-time))
(life-setup)
(catch 'life-exit
(while t
- (let ((inhibit-quit t)
- (inhibit-read-only t))
- (life-display-generation sleeptime)
- (life-grim-reaper)
- (life-expand-plane-if-needed)
- (life-increment-generation)))))
+ (life-display-generation step-time)
+ (life--tick))))
(define-derived-mode life-mode special-mode "Life"
"Major mode for the buffer of `life'."
@@ -138,16 +184,17 @@ generations (this defaults to 1)."
(setq-local life-generation-string "0")
(setq-local mode-line-buffer-identification '("Life: generation "
life-generation-string))
- (setq-local fill-column (1- (window-width)))
+ (setq-local fill-column (min (or life--max-width most-positive-fixnum)
+ (1- (window-width))))
(setq-local life-window-start 1)
(buffer-disable-undo))
(defun life-setup ()
(switch-to-buffer (get-buffer-create "*Life*") t)
- (erase-buffer)
- (life-mode)
;; stuff in the random pattern
(let ((inhibit-read-only t))
+ (erase-buffer)
+ (life-mode)
(life-insert-random-pattern)
;; make sure (life-life-char) is used throughout
(goto-char (point-min))
@@ -160,7 +207,8 @@ generations (this defaults to 1)."
(indent-to n)
(forward-line)))
;; center the pattern vertically
- (let ((n (/ (- (1- (window-height))
+ (let ((n (/ (- (min (or life--max-height most-positive-fixnum)
+ (1- (window-height)))
(count-lines (point-min) (point-max)))
2)))
(goto-char (point-min))
@@ -276,12 +324,12 @@ generations (this defaults to 1)."
(insert ?\n)
(setq life-window-start (+ life-window-start fill-column 1)))))
-(defun life-display-generation (sleeptime)
+(defun life-display-generation (step-time)
(goto-char life-window-start)
(recenter 0)
;; Redisplay; if the user has hit a key, exit the loop.
- (or (and (sit-for sleeptime) (< 0 sleeptime))
+ (or (and (sit-for step-time) (< 0 step-time))
(not (input-pending-p))
(throw 'life-exit nil)))
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index d5723344a0d..4e6d73b6e94 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -1,4 +1,4 @@
-;;; pong.el --- classical implementation of pong
+;;; pong.el --- classical implementation of pong -*- lexical-binding:t -*-
;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
@@ -33,88 +33,72 @@
;;; Customization
(defgroup pong nil
- "Emacs-Lisp implementation of the classical game pong."
+ "Emacs Lisp implementation of the classical game pong."
:tag "Pong"
:group 'games)
(defcustom pong-buffer-name "*Pong*"
"Name of the buffer used to play."
- :group 'pong
:type '(string))
(defcustom pong-width 50
"Width of the playfield."
- :group 'pong
:type '(integer))
(defcustom pong-height (min 30 (- (frame-height) 6))
"Height of the playfield."
- :group 'pong
:type '(integer))
(defcustom pong-bat-width 3
"Width of the bats for pong."
- :group 'pong
:type '(integer))
(defcustom pong-blank-color "black"
"Color used for background."
- :group 'pong
:type 'color)
(defcustom pong-bat-color "yellow"
"Color used for bats."
- :group 'pong
:type 'color)
(defcustom pong-ball-color "red"
"Color used for the ball."
- :group 'pong
:type 'color)
(defcustom pong-border-color "white"
"Color used for pong borders."
- :group 'pong
:type 'color)
(defcustom pong-left-key "4"
"Alternate key to press for bat 1 to go up (primary one is [left])."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-right-key "6"
"Alternate key to press for bat 1 to go down (primary one is [right])."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-up-key "8"
"Alternate key to press for bat 2 to go up (primary one is [up])."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-down-key "2"
"Alternate key to press for bat 2 to go down (primary one is [down])."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-quit-key "q"
"Key to press to quit pong."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-pause-key "p"
"Key to press to pause pong."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-resume-key "p"
"Key to press to resume pong."
- :group 'pong
:type '(restricted-sexp :match-alternatives (stringp vectorp)))
(defcustom pong-timer-delay 0.1
"Time to wait between every cycle."
- :group 'pong
:type 'number)
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index 70d80c464fc..8ea214d8025 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -1,4 +1,4 @@
-;;; snake.el --- implementation of Snake for Emacs
+;;; snake.el --- implementation of Snake for Emacs -*- lexical-binding:t -*-
;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
@@ -279,7 +279,7 @@ and then start moving it leftwards.")
snake-velocity-queue nil)
(let ((x snake-initial-x)
(y snake-initial-y))
- (dotimes (i snake-length)
+ (dotimes (_ snake-length)
(gamegrid-set-cell x y snake-snake)
(setq snake-positions (cons (vector x y) snake-positions))
(cl-incf x snake-velocity-x)
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index 97979b5b6b6..e25cacbb722 100644
--- a/lisp/play/tetris.el
+++ b/lisp/play/tetris.el
@@ -1,4 +1,4 @@
-;;; tetris.el --- implementation of Tetris for Emacs
+;;; tetris.el --- implementation of Tetris for Emacs -*- lexical-binding:t -*-
;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index bf56a7ee49e..24e1f8831a0 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -695,7 +695,7 @@ imenu."
(define-key map "\e\C-e" 'antlr-end-of-rule)
(define-key map "\C-c\C-a" 'antlr-beginning-of-body)
(define-key map "\C-c\C-e" 'antlr-end-of-body)
- (define-key map "\C-c\C-f" 'c-forward-into-nomenclature)
+ (define-key map "\C-c\C-f" 'subword-forward)
(define-key map "\C-c\C-b" 'c-backward-into-nomenclature)
(define-key map "\C-c\C-c" 'comment-region)
(define-key map "\C-c\C-v" 'antlr-hide-actions)
@@ -745,7 +745,7 @@ imenu."
["Backward Statement" c-beginning-of-statement t]
["Forward Statement" c-end-of-statement t]
["Backward Into Nomencl." c-backward-into-nomenclature t]
- ["Forward Into Nomencl." c-forward-into-nomenclature t])
+ ["Forward Into Nomencl." subword-forward t])
["Indent Region" indent-region
:active (and (not buffer-read-only) (c-region-is-active-p))]
["Comment Out Region" comment-region
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 1b557c41a5d..4425e275ac9 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1554,19 +1554,6 @@ left out."
(declare-function c-backward-subword "ext:cc-subword" (&optional arg))
;; "nomenclature" functions + c-scope-operator.
-(defun c-forward-into-nomenclature (&optional arg)
- "Compatibility alias for `c-forward-subword'."
- (interactive "p")
- (if (fboundp 'subword-mode)
- (progn
- (require 'subword)
- (subword-forward arg))
- (require 'cc-subword)
- (c-forward-subword arg)))
-(make-obsolete 'c-forward-into-nomenclature
- (if (fboundp 'subword-mode) 'subword-forward 'c-forward-subword)
- "23.2")
-
(defun c-backward-into-nomenclature (&optional arg)
"Compatibility alias for `c-backward-subword'."
(interactive "p")
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 81bcd101fe4..2ffbde99aa4 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1204,7 +1204,7 @@ Note that the style variables are always made local to the buffer."
(while (progn
(parse-partial-sexp (point) end nil nil st-s 'syntax-table)
(unless (bobp)
- (c-clear-char-property (1- (point)) 'syntax-table))
+ (c-clear-syn-tab (1- (point))))
(setq st-pos (point))
(and (< (point) end)
(not (eq (char-before) ?\")))))
@@ -1237,7 +1237,7 @@ Note that the style variables are always made local to the buffer."
t)
(t
;; At a significant "
- (c-clear-char-property (1- (point)) 'syntax-table)
+ (c-clear-syn-tab (1- (point)))
(setq pos-ll (c-literal-limits)
pos-lt (c-literal-type pos-ll))
nil)))
@@ -1245,7 +1245,7 @@ Note that the style variables are always made local to the buffer."
(cond
((bobp))
((eq pos-lt 'string)
- (c-put-char-property (1- (point)) 'syntax-table '(15)))
+ (c-put-syn-tab (1- (point)) '(15)))
(t nil)))))
(defun c-put-syn-tab (pos value)
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index a043bbcfa3c..13b672bd53b 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -221,9 +221,9 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
;; considered before EDG.
;; The message may be a "warning", "error", or "fatal error" with
;; an error code, or "see declaration of" without an error code.
- "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ :(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)) ?\
+ "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ :(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?) ?\
: \\(?:see declaration\\|\\(?:warnin\\(g\\)\\|[a-z ]+\\) C[0-9]+:\\)"
- 2 3 nil (4))
+ 2 3 4 (5))
(edg-1
"^\\([^ \n]+\\)(\\([0-9]+\\)): \\(?:error\\|warnin\\(g\\)\\|remar\\(k\\)\\)"
@@ -1148,12 +1148,13 @@ POS and RES.")
(setcdr l1 (cons (list ,key) l2)))))))
(defun compilation-auto-jump (buffer pos)
- (with-current-buffer buffer
- (goto-char pos)
- (let ((win (get-buffer-window buffer 0)))
- (if win (set-window-point win pos)))
- (if compilation-auto-jump-to-first-error
- (compile-goto-error))))
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (goto-char pos)
+ (let ((win (get-buffer-window buffer 0)))
+ (if win (set-window-point win pos)))
+ (if compilation-auto-jump-to-first-error
+ (compile-goto-error)))))
;; This function is the central driver, called when font-locking to gather
;; all information needed to later jump to corresponding source code.
@@ -2064,6 +2065,8 @@ Returns the compilation buffer created."
(define-key map "\M-p" 'compilation-previous-error)
(define-key map "\M-{" 'compilation-previous-file)
(define-key map "\M-}" 'compilation-next-file)
+ (define-key map "n" 'next-error-no-select)
+ (define-key map "p" 'previous-error-no-select)
(define-key map "\t" 'compilation-next-error)
(define-key map [backtab] 'compilation-previous-error)
(define-key map "g" 'recompile) ; revert
@@ -2910,11 +2913,8 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
(and w (progn (compilation-set-window w marker)
(compilation-set-overlay-arrow w))))
(let* ((name (read-file-name
- (format "Find this %s in%s: "
- compilation-error
- (if filename
- (format " (default %s)" filename)
- ""))
+ (format-prompt "Find this %s in"
+ filename compilation-error)
spec-dir filename t nil
;; The predicate below is fine when called from
;; minibuffer-complete-and-exit, but it's too
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 2d2713a36ab..af179e2797e 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -451,8 +451,7 @@ Older version of this page was called `perl5', newer `perl'."
:type 'string
:group 'cperl-help-system)
-(defcustom cperl-use-syntax-table-text-property
- (boundp 'parse-sexp-lookup-properties)
+(defcustom cperl-use-syntax-table-text-property t
"Non-nil means CPerl sets up and uses `syntax-table' text property."
:type 'boolean
:group 'cperl-speed)
@@ -535,8 +534,7 @@ One should tune up `cperl-close-paren-offset' as well."
:type 'boolean
:group 'cperl-indentation-details)
-(defcustom cperl-syntaxify-by-font-lock
- (boundp 'parse-sexp-lookup-properties)
+(defcustom cperl-syntaxify-by-font-lock t
"Non-nil means that CPerl uses the `font-lock' routines for syntaxification."
:type '(choice (const message) boolean)
:group 'cperl-speed)
@@ -1081,10 +1079,6 @@ versions of Emacs."
(define-key map [(control ?c) (control ?h) ?v]
;;(concat (char-to-string help-char) "v") ; does not work
'cperl-get-help))
- (or (boundp 'fill-paragraph-function)
- (substitute-key-definition
- 'fill-paragraph 'cperl-fill-paragraph
- map global-map))
(substitute-key-definition
'indent-sexp 'cperl-indent-exp
map global-map)
@@ -1637,9 +1631,8 @@ or as help on variables `cperl-tips', `cperl-problems',
"\\)"
cperl-maybe-white-and-comment-rex))
(set (make-local-variable 'comment-indent-function) #'cperl-comment-indent)
- (and (boundp 'fill-paragraph-function)
- (set (make-local-variable 'fill-paragraph-function)
- #'cperl-fill-paragraph))
+ (set (make-local-variable 'fill-paragraph-function)
+ #'cperl-fill-paragraph)
(set (make-local-variable 'parse-sexp-ignore-comments) t)
(set (make-local-variable 'indent-region-function) #'cperl-indent-region)
;;(setq auto-fill-function #'cperl-do-auto-fill) ; Need to switch on and off!
@@ -1701,13 +1694,8 @@ or as help on variables `cperl-tips', `cperl-problems',
;; to make font-lock think that font-lock-syntactic-keywords
;; are defined.
'(t)))))
- (if (boundp 'font-lock-multiline) ; Newer font-lock; use its facilities
- (progn
- (setq cperl-font-lock-multiline t) ; Not localized...
- (set (make-local-variable 'font-lock-multiline) t))
- (set (make-local-variable 'font-lock-fontify-region-function)
- ;; not present with old Emacs
- #'cperl-font-lock-fontify-region-function))
+ (setq cperl-font-lock-multiline t) ; Not localized...
+ (set (make-local-variable 'font-lock-multiline) t)
(set (make-local-variable 'font-lock-fontify-region-function)
#'cperl-font-lock-fontify-region-function)
(make-local-variable 'cperl-old-style)
@@ -3253,8 +3241,8 @@ Return the error message (if any). Does not work if delimiter is `)'.
Works before syntax recognition is done."
;; Works *before* syntax recognition is done
(or st-l (setq st-l (list nil))) ; Avoid overwriting '()
- (let (st b reset-st)
- (condition-case b
+ (let (st result reset-st)
+ (condition-case err
(progn
(setq st (cperl-cached-syntax-table st-l))
(modify-syntax-entry ?\( "()" st)
@@ -3262,8 +3250,7 @@ Works before syntax recognition is done."
(setq reset-st (syntax-table))
(set-syntax-table st)
(forward-sexp 1))
- (error (message
- "cperl-forward-group-in-re: error %s" b)))
+ (error (setq result err)))
;; now restore the initial state
(if st
(progn
@@ -3271,7 +3258,7 @@ Works before syntax recognition is done."
(modify-syntax-entry ?\) "." st)))
(if reset-st
(set-syntax-table reset-st))
- b))
+ result))
(defvar font-lock-string-face)
@@ -4832,9 +4819,10 @@ conditional/loop constructs."
(while (< (point) tmp-end)
(parse-partial-sexp (point) tmp-end nil t) ; To start-sexp or eol
(or (eolp) (forward-sexp 1)))
- (if (> (point) tmp-end) ; Yes, there an unfinished block
+ (if (> (point) tmp-end) ; Check for an unfinished block
nil
(if (eq ?\) (preceding-char))
+ ;; closing parens can be preceded by up to three sexps
(progn ;; Plan B: find by REGEXP block followup this line
(setq top (point))
(condition-case nil
@@ -4855,7 +4843,9 @@ conditional/loop constructs."
(progn
(goto-char top)
(forward-sexp 1)
- (setq top (point)))))
+ (setq top (point)))
+ ;; no block to be processed: expression ends here
+ (setq done t)))
(error (setq done t)))
(goto-char top))
(if (looking-at ; Try Plan C: continuation block
@@ -4888,7 +4878,7 @@ Returns some position at the last line."
;; }? continue
;; blah; }
(if (not
- (or (looking-at "[ \t]*\\(els\\(e\\|if\\)\\|continue\\|if\\|while\\|for\\(each\\)?\\|until\\)")
+ (or (looking-at "[ \t]*\\(els\\(e\\|if\\)\\|continue\\|if\\|while\\|for\\(each\\)?\\|unless\\|until\\)\\_>")
(setq have-brace (save-excursion (search-forward "}" ee t)))))
nil ; Do not need to do anything
;; Looking at:
@@ -4896,7 +4886,7 @@ Returns some position at the last line."
;; else
(if cperl-merge-trailing-else
(if (looking-at
- "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+ "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\_>")
(progn
(search-forward "}")
(setq p (point))
@@ -4904,7 +4894,7 @@ Returns some position at the last line."
(delete-region p (point))
(insert (make-string cperl-indent-region-fix-constructs ?\s))
(beginning-of-line)))
- (if (looking-at "[ \t]*}[ \t]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+ (if (looking-at "[ \t]*}[ \t]*\\(els\\(e\\|if\\)\\|continue\\)\\_>")
(save-excursion
(search-forward "}")
(delete-horizontal-space)
@@ -4916,7 +4906,7 @@ Returns some position at the last line."
(setq ret (point)))))))
;; Looking at:
;; } else
- (if (looking-at "[ \t]*}\\(\t*\\|[ \t][ \t]+\\)\\<\\(els\\(e\\|if\\)\\|continue\\)\\>")
+ (if (looking-at "[ \t]*}\\(\t*\\|[ \t][ \t]+\\)\\<\\(els\\(e\\|if\\)\\|continue\\)\\_>")
(progn
(search-forward "}")
(delete-horizontal-space)
@@ -5451,8 +5441,7 @@ indentation and initial hashes. Behaves usually outside of comment."
(cond ((featurep 'ps-print)
(or cperl-faces-init
(progn
- (and (boundp 'font-lock-multiline)
- (setq cperl-font-lock-multiline t))
+ (setq cperl-font-lock-multiline t)
(cperl-init-faces))))
((not cperl-faces-init)
(add-hook 'font-lock-mode-hook
@@ -5499,12 +5488,8 @@ indentation and initial hashes. Behaves usually outside of comment."
(condition-case errs
(progn
(require 'font-lock)
- (and (fboundp 'font-lock-fontify-anchored-keywords)
- (featurep 'font-lock-extra)
- (message "You have an obsolete package `font-lock-extra'. Install `choose-color'."))
(let (t-font-lock-keywords t-font-lock-keywords-1 font-lock-anchored)
- (if (fboundp 'font-lock-fontify-anchored-keywords)
- (setq font-lock-anchored t))
+ (setq font-lock-anchored t)
(setq
t-font-lock-keywords
(list
@@ -5791,8 +5776,8 @@ indentation and initial hashes. Behaves usually outside of comment."
t-font-lock-keywords)
cperl-font-lock-keywords cperl-font-lock-keywords-1
cperl-font-lock-keywords-2 (append
- cperl-font-lock-keywords-1
- t-font-lock-keywords-1)))
+ t-font-lock-keywords-1
+ cperl-font-lock-keywords-1)))
(if (fboundp 'ps-print-buffer) (cperl-ps-print-init))
(if (or (featurep 'choose-color) (featurep 'font-lock-extra))
(eval ; Avoid a warning
@@ -6321,8 +6306,7 @@ Customized by setting variables `cperl-shrink-wrap-info-frame',
(interactive
(let* ((default (cperl-word-at-point))
(read (read-string
- (format "Find doc for Perl function (default %s): "
- default))))
+ (format-prompt "Find doc for Perl function" default))))
(list (if (equal read "")
default
read))))
@@ -6857,7 +6841,7 @@ Use as
(insert (cperl-find-tags file xs topdir))))))
(if inbuffer nil ; Delegate to the caller
(save-buffer 0) ; No backup
- (if (fboundp 'initialize-new-tags-table) ; Do we need something special in XEmacs?
+ (if (fboundp 'initialize-new-tags-table)
(initialize-new-tags-table))))))
(defvar cperl-tags-hier-regexp-list
@@ -8281,10 +8265,7 @@ the appropriate statement modifier."
(interactive
(list (let* ((default-entry (cperl-word-at-point))
(input (read-string
- (format "perldoc entry%s: "
- (if (string= default-entry "")
- ""
- (format " (default %s)" default-entry))))))
+ (format-prompt "perldoc entry" default-entry))))
(if (string= input "")
(if (string= default-entry "")
(error "No perldoc args given")
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 21ba42a0fe1..72b94a57b4a 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1421,7 +1421,7 @@ Intended for `eldoc-documentation-functions' (which see)."
"Document variable at point.
Intended for `eldoc-documentation-functions' (which see)."
(let* ((sym (elisp--current-symbol))
- (docstring (and sym (elisp-get-var-docstring sym))))
+ (docstring (and sym (elisp-get-var-docstring sym))))
(when docstring
(funcall callback docstring
:thing sym
diff --git a/lisp/progmodes/flymake-cc.el b/lisp/progmodes/flymake-cc.el
index bddd1a39fc2..19565ef9b13 100644
--- a/lisp/progmodes/flymake-cc.el
+++ b/lisp/progmodes/flymake-cc.el
@@ -5,18 +5,20 @@
;; Author: João Távora <joaotavora@gmail.com>
;; Keywords: languages, c
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 37e73241e5d..bdb775795ab 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1002,7 +1002,7 @@ special *Flymake log* buffer." :group 'flymake :lighter
(add-hook 'after-change-functions 'flymake-after-change-function nil t)
(add-hook 'after-save-hook 'flymake-after-save-hook nil t)
(add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t)
- (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function nil t)
+ (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function t t)
;; If Flymake happened to be alrady already ON, we must cleanup
;; existing diagnostic overlays, lest we forget them by blindly
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 7731be59659..c71a90344ff 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -168,8 +168,14 @@ This is done to disambiguate file names in `grep's output."
"The default find command for \\[grep-find].
In interactive usage, the actual value of this variable is set up
by `grep-compute-defaults'; to change the default value, use
-\\[customize] or call the function `grep-apply-setting'."
+\\[customize] or call the function `grep-apply-setting'.
+
+This variable can either be a string, or a cons of the
+form (COMMAND . POSITION). In the latter case, COMMAND will be
+used as the default command, and point will be placed at POSITION
+for easier editing."
:type '(choice string
+ (cons string integer)
(const :tag "Not Set" nil))
:set #'grep-apply-setting)
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 153f2578bf1..90e56943f20 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -7042,12 +7042,10 @@ If these don't exist, a letter in the string is automatically selected."
#'idlwave-make-modified-completion-map "28.1")
(defun idlwave-make-modified-completion-map (old-map)
- "Replace `choose-completion' and `mouse-choose-completion' in OLD-MAP."
+ "Replace `choose-completion' in OLD-MAP."
(let ((new-map (copy-keymap old-map)))
(substitute-key-definition
'choose-completion 'idlwave-choose-completion new-map)
- (substitute-key-definition
- 'mouse-choose-completion 'idlwave-mouse-choose-completion new-map)
(define-key new-map [mouse-3] 'idlwave-mouse-completion-help)
new-map))
@@ -7056,10 +7054,8 @@ If these don't exist, a letter in the string is automatically selected."
(interactive (list last-nonmenu-event))
(apply 'idlwave-choose 'choose-completion args))
-(defun idlwave-mouse-choose-completion (&rest args)
- "Click on an alternative in the `*Completions*' buffer to choose it."
- (interactive "e")
- (apply 'idlwave-choose 'mouse-choose-completion args))
+(define-obsolete-function-alias 'idlwave-mouse-choose-completion
+ #'idlwave-choose-completion "28.1")
;;----------------------------------------------------------------------
;;----------------------------------------------------------------------
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index 9f34a377f4a..59db646ff32 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -554,10 +554,7 @@ Used by these commands to determine defaults."
;;; Reads a string from the user.
(defun lisp-symprompt (prompt default)
- (list (let* ((prompt (if default
- (format "%s (default %s): " prompt default)
- (concat prompt ": ")))
- (ans (read-string prompt)))
+ (list (let ((ans (read-string (format-prompt prompt default))))
(if (zerop (length ans)) default ans))))
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index ec246d63ac2..235279e226e 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -316,7 +316,7 @@ not be enclosed in { } or ( )."
(defconst makefile-gmake-statements
`("-sinclude" "sinclude" ; makefile-makepp-statements takes rest
"ifdef" "ifndef" "ifeq" "ifneq" "-include" "define" "endef" "export"
- "override define" "override" "unexport" "vpath"
+ "override define" "override" "unexport" "vpath" "undefine"
,@(cdr makefile-automake-statements))
"List of keywords understood by gmake.")
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index e07f818a68a..55a78c6cc85 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -165,7 +165,7 @@ parenthetical grouping.")
(modify-syntax-entry ?| "." table)
(modify-syntax-entry ?! "." table)
(modify-syntax-entry ?\\ "." table)
- (modify-syntax-entry ?\' "." table)
+ (modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\` "." table)
(modify-syntax-entry ?. "." table)
(modify-syntax-entry ?\" "\"" table)
@@ -1048,10 +1048,9 @@ directory and makes this the current buffer's default directory."
(save-excursion
(skip-syntax-backward "-(")
(thing-at-point 'symbol)))))
- (completing-read
- (format (if def "Function (default %s): " "Function: ") def)
- (inferior-octave-completion-table)
- nil nil nil nil def)))
+ (completing-read (format-prompt "Function" def)
+ (inferior-octave-completion-table)
+ nil nil nil nil def)))
(defun octave-goto-function-definition (fn)
"Go to the function definition of FN in current buffer."
@@ -1172,10 +1171,7 @@ q: Don't fix\n" func file))
(min (line-end-position 4) end)
t)
(match-string 1))))
- (old-func (read-string (format (if old-func
- "Name to replace (default %s): "
- "Name to replace: ")
- old-func)
+ (old-func (read-string (format-prompt "Name to replace" old-func)
nil nil old-func)))
(if (and func old-func (not (equal func old-func)))
(perform-replace old-func func 'query
@@ -1454,7 +1450,7 @@ The block marked is the one that contains point or follows point."
Prompt for the function's name, arguments and return values (to be
entered without parens)."
(let* ((defname (file-name-sans-extension (buffer-name)))
- (name (read-string (format "Function name (default %s): " defname)
+ (name (read-string (format-prompt "Function name" defname)
nil nil defname))
(args (read-string "Arguments: "))
(vals (read-string "Return values: ")))
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 8afd5ce7959..7180ba317c3 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,7 +1,7 @@
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
-;; Version: 0.5.1
+;; Version: 0.5.2
;; Package-Requires: ((emacs "26.3") (xref "1.0.2"))
;; This is a GNU ELPA :core package. Avoid using functionality that
@@ -581,6 +581,8 @@ DIRS must contain directory names."
;;;###autoload
(defvar project-prefix-map
(let ((map (make-sparse-keymap)))
+ (define-key map "!" 'project-shell-command)
+ (define-key map "&" 'project-async-shell-command)
(define-key map "f" 'project-find-file)
(define-key map "F" 'project-or-external-find-file)
(define-key map "b" 'project-switch-to-buffer)
@@ -665,7 +667,9 @@ The following commands are available:
(interactive)
(project--other-place-command '((display-buffer-in-new-tab))))
-;;;###autoload (define-key tab-prefix-map "p" #'project-other-tab-command)
+;;;###autoload
+(when (bound-and-true-p tab-prefix-map)
+ (define-key tab-prefix-map "p" #'project-other-tab-command))
(declare-function grep-read-files "grep")
(declare-function xref--show-xrefs "xref")
@@ -882,6 +886,20 @@ if one already exists."
(pop-to-buffer eshell-buffer)
(eshell t))))
+;;;###autoload
+(defun project-async-shell-command ()
+ "Run `async-shell-command' in the current project's root directory."
+ (interactive)
+ (let ((default-directory (project-root (project-current t))))
+ (call-interactively #'async-shell-command)))
+
+;;;###autoload
+(defun project-shell-command ()
+ "Run `shell-command' in the current project's root directory."
+ (interactive)
+ (let ((default-directory (project-root (project-current t))))
+ (call-interactively #'shell-command)))
+
(declare-function fileloop-continue "fileloop" ())
;;;###autoload
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index d83af83b32e..ccbcb081305 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -4585,9 +4585,7 @@ Interactively, prompt for symbol."
(interactive
(let ((symbol (python-eldoc--get-symbol-at-point))
(enable-recursive-minibuffers t))
- (list (read-string (if symbol
- (format "Describe symbol (default %s): " symbol)
- "Describe symbol: ")
+ (list (read-string (format-prompt "Describe symbol" symbol)
nil nil symbol))))
(message (python-eldoc--get-doc-at-point symbol)))
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index e16225c7fa9..831acf87bf0 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1060,22 +1060,12 @@ delimiter."
(goto-char (point))
)
((looking-at "[\\[{(]")
- (let ((deep (ruby-deep-indent-paren-p (char-after))))
- (if (and deep (or (not (eq (char-after) ?\{)) (ruby-expr-beg)))
- (progn
- (and (eq deep 'space) (looking-at ".\\s +[^# \t\n]")
- (setq pnt (1- (match-end 0))))
- (setq nest (cons (cons (char-after (point)) pnt) nest))
- (setq pcol (cons (cons pnt depth) pcol))
- (setq depth 0))
- (setq nest (cons (cons (char-after (point)) pnt) nest))
- (setq depth (1+ depth))))
+ (setq nest (cons (cons (char-after (point)) pnt) nest))
+ (setq depth (1+ depth))
(goto-char pnt)
)
((looking-at "[])}]")
- (if (ruby-deep-indent-paren-p (matching-paren (char-after)))
- (setq depth (cdr (car pcol)) pcol (cdr pcol))
- (setq depth (1- depth)))
+ (setq depth (1- depth))
(setq nest (cdr nest))
(goto-char pnt))
((looking-at ruby-block-end-re)
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 5a47594878e..3c249b7bc0e 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -2206,8 +2206,7 @@ Shell script files can cause this function be called automatically
when the file is visited by having a `sh-shell' file-local variable
whose value is the shell name (don't quote it)."
(interactive (list (completing-read
- (format "Shell (default %s): "
- sh-shell-file)
+ (format-prompt "Shell" sh-shell-file)
;; This used to use interpreter-mode-alist, but that is
;; no longer appropriate now that uses regexps.
;; Maybe there could be a separate variable that lists
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 7ffa6d41dac..33aad2d39f7 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1346,9 +1346,8 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'."
(not tcl-use-smart-word-finder)
tcl-use-smart-word-finder))))
(completing-read
- (if (or (null word) (string= word ""))
- "Help on Tcl command: "
- (format "Help on Tcl command (default %s): " word))
+ (format-prompt "Help on Tcl command: "
+ (and (not (equal word "")) word))
tcl-help-alist nil t nil nil word)))
current-prefix-arg))
(if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 3c9ced02916..8bde89e774e 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -1,4 +1,4 @@
-;;; vera-mode.el --- major mode for editing Vera files
+;;; vera-mode.el --- major mode for editing Vera files -*- lexical-binding: t; -*-
;; Copyright (C) 1997-2020 Free Software Foundation, Inc.
@@ -33,9 +33,7 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Commentary:
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; This package provides a simple Emacs major mode for editing Vera code.
;; It includes the following features:
@@ -44,38 +42,11 @@
;; - Indentation
;; - Word/keyword completion
;; - Block commenting
-;; - Works under GNU Emacs and XEmacs
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Documentation
;; See comment string of function `vera-mode' or type `C-h m' in Emacs.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Installation
-
-;; Prerequisites: GNU Emacs 20.X/21.X, XEmacs 20.X/21.X
-
-;; Put `vera-mode.el' into the `site-lisp' directory of your Emacs installation
-;; or into an arbitrary directory that is added to the load path by the
-;; following line in your Emacs start-up file (`.emacs'):
-
-;; (setq load-path (cons (expand-file-name "<directory-name>") load-path))
-
-;; If you already have the compiled `vera-mode.elc' file, put it in the same
-;; directory. Otherwise, byte-compile the source file:
-;; Emacs: M-x byte-compile-file -> vera-mode.el
-;; Unix: emacs -batch -q -no-site-file -f batch-byte-compile vera-mode.el
-
-;; Add the following lines to the `site-start.el' file in the `site-lisp'
-;; directory of your Emacs installation or to your Emacs start-up file
-;; (`.emacs'):
-
-;; (autoload 'vera-mode "vera-mode" "Vera Mode" t)
-;; (setq auto-mode-alist (cons '("\\.vr[hi]?\\'" . vera-mode) auto-mode-alist))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
;;; Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -90,16 +61,14 @@
(defcustom vera-basic-offset 2
"Amount of basic offset used for indentation."
- :type 'integer
- :group 'vera)
+ :type 'integer)
(defcustom vera-underscore-is-part-of-word nil
"Non-nil means consider the underscore character `_' as part of word.
An identifier containing underscores is then treated as a single word in
select and move operations. All parts of an identifier separated by underscore
are treated as single words otherwise."
- :type 'boolean
- :group 'vera)
+ :type 'boolean)
(make-obsolete-variable 'vera-underscore-is-part-of-word
'superword-mode "24.4")
@@ -110,8 +79,7 @@ else if not at beginning of line then insert tab,
else if last command was a `TAB' or `RET' then dedent one step,
else indent current line.
If nil, TAB always indents current line."
- :type 'boolean
- :group 'vera)
+ :type 'boolean)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -125,9 +93,6 @@ If nil, TAB always indents current line."
(let ((map (make-sparse-keymap)))
;; Backspace/delete key bindings.
(define-key map [backspace] 'backward-delete-char-untabify)
- (unless (boundp 'delete-key-deletes-forward) ; XEmacs variable
- (define-key map [delete] 'delete-char)
- (define-key map [(meta delete)] 'kill-word))
;; Standard key bindings.
(define-key map "\M-e" 'vera-forward-statement)
(define-key map "\M-a" 'vera-backward-statement)
@@ -227,9 +192,7 @@ If nil, TAB always indents current line."
(modify-syntax-entry ?\{ "(}" syntax-table)
(modify-syntax-entry ?\} "){" syntax-table)
;; comment
- (if (featurep 'xemacs)
- (modify-syntax-entry ?\/ ". 1456" syntax-table) ; XEmacs
- (modify-syntax-entry ?\/ ". 124b" syntax-table)) ; Emacs
+ (modify-syntax-entry ?\/ ". 124b" syntax-table)
(modify-syntax-entry ?\* ". 23" syntax-table)
;; newline and CR
(modify-syntax-entry ?\n "> b" syntax-table)
@@ -314,8 +277,6 @@ Key bindings:
;; initialize font locking
(set (make-local-variable 'font-lock-defaults)
'(vera-font-lock-keywords nil nil ((?\_ . "w"))))
- ;; add menu (XEmacs)
- (easy-menu-add vera-mode-menu)
;; miscellaneous
(message "Vera Mode %s. Type C-c C-h for documentation." vera-version))
@@ -542,12 +503,6 @@ Key bindings:
)
"List of Vera-RVM predefined constants.")
-;; `regexp-opt' undefined (`xemacs-devel' not installed)
-(unless (fboundp 'regexp-opt)
- (defun regexp-opt (strings &optional paren)
- (let ((open (if paren "\\(" "")) (close (if paren "\\)" "")))
- (concat open (mapconcat 'regexp-quote strings "\\|") close))))
-
(defconst vera-keywords-regexp
(concat "\\<\\(" (regexp-opt vera-keywords) "\\)\\>")
"Regexp for Vera keywords.")
@@ -796,10 +751,7 @@ This function does not modify point or mark."
(defun vera-skip-forward-literal ()
"Skip forward literal and return t if within one."
- (let ((state (save-excursion
- (if (fboundp 'syntax-ppss)
- (syntax-ppss)
- (parse-partial-sexp (point-min) (point))))))
+ (let ((state (save-excursion (syntax-ppss))))
(when (nth 8 state)
;; Inside a string or comment.
(goto-char (nth 8 state))
@@ -814,10 +766,7 @@ This function does not modify point or mark."
(defun vera-skip-backward-literal ()
"Skip backward literal and return t if within one."
- (let ((state (save-excursion
- (if (fboundp 'syntax-ppss)
- (syntax-ppss)
- (parse-partial-sexp (point-min) (point))))))
+ (let ((state (save-excursion (syntax-ppss))))
(when (nth 8 state)
;; Inside a string or comment.
(goto-char (nth 8 state))
@@ -1232,6 +1181,8 @@ Calls `indent-region' for whole buffer."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; electrifications
+(defvar hippie-expand-only-buffers)
+
(defun vera-electric-tab (&optional prefix)
"Do what I mean (indent, expand, tab, change indent, etc..).
If preceding character is part of a word or a paren then `hippie-expand',
@@ -1243,7 +1194,7 @@ If `vera-intelligent-tab' is nil, always indent line."
(interactive "*P")
(if vera-intelligent-tab
(progn
- (cond ((and (not (featurep 'xemacs)) (use-region-p))
+ (cond ((use-region-p)
(vera-indent-region (region-beginning) (region-end) nil))
((memq (char-syntax (preceding-char)) '(?w ?_))
(let ((case-fold-search t)
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 9cd84cf713b..3d66483b83e 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -2304,10 +2304,6 @@ Ignore byte-compiler warnings you might see."
(defvaralias 'vhdl-last-input-event 'last-input-char)
(defvaralias 'vhdl-last-input-event 'last-input-event))
-;; `help-print-return-message' changed to `print-help-return-message' in Emacs
-;;;(unless (fboundp 'help-print-return-message)
-;;; (defalias 'help-print-return-message 'print-help-return-message))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Compatibility with older VHDL Mode versions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index bbf899e7017..de2053c3c99 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1,7 +1,7 @@
;;; xref.el --- Cross-referencing commands -*-lexical-binding:t-*-
;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
-;; Version: 1.0.2
+;; Version: 1.0.3
;; Package-Requires: ((emacs "26.3"))
;; This is a GNU ELPA :core package. Avoid functionality that is not
@@ -608,7 +608,10 @@ buffer."
(user-error "No reference at point")))
(xref--current-item xref))
(xref--show-location (xref-item-location xref) (if quit 'quit t))
- (next-error-found buffer (current-buffer))))
+ (if (fboundp 'next-error-found)
+ (next-error-found buffer (current-buffer))
+ ;; Emacs < 27
+ (setq next-error-last-buffer buffer))))
(defun xref-quit-and-goto-xref ()
"Quit *xref* buffer, then jump to xref on current line."
@@ -958,8 +961,18 @@ Accepts the same arguments as `xref-show-xrefs-function'."
(defvar xref--read-pattern-history nil)
-(defun xref--show-xrefs (fetcher display-action)
+(defun xref--show-xrefs (fetcher display-action &optional _always-show-list)
(xref--push-markers)
+ (unless (functionp fetcher)
+ ;; Old convention.
+ (let ((xrefs fetcher))
+ (setq fetcher
+ (lambda ()
+ (if (eq xrefs 'called-already)
+ (user-error "Refresh is not supported")
+ (prog1
+ xrefs
+ (setq xrefs 'called-already)))))))
(funcall xref-show-xrefs-function fetcher
`((window . ,(selected-window))
(display-action . ,display-action))))
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 8dfb3a40dd1..c6997862f7f 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -446,8 +446,6 @@ Entry to this mode runs `scheme-mode-hook' and then
(scheme-interaction-mode-initialize)
(scheme-interaction-mode t)))))
-(define-obsolete-function-alias 'advertised-xscheme-send-previous-expression
- 'xscheme-send-previous-expression "23.2")
;;;; Debugger Mode
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 1ca4a23ab2c..67ee4d24390 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -4523,7 +4523,7 @@ page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th
(let* ((name (concat (file-name-nondirectory (or (buffer-file-name)
(buffer-name)))
".ps"))
- (prompt (format "Save PostScript to file (default %s): " name))
+ (prompt (format-prompt "Save PostScript to file" name))
(res (read-file-name prompt default-directory name nil)))
(while (cond ((file-directory-p res)
(ding)
diff --git a/lisp/rect.el b/lisp/rect.el
index 9922aac9ec9..ebf309a88fe 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -521,8 +521,9 @@ Called from a program, takes three args; START, END and STRING."
#'rectangle--string-erase-preview nil t)
(add-hook 'post-command-hook
#'rectangle--string-preview nil t))
- (read-string (format "String rectangle (default %s): "
- (or (car string-rectangle-history) ""))
+ (read-string (format-prompt
+ "String rectangle"
+ (or (car string-rectangle-history) ""))
nil 'string-rectangle-history
(car string-rectangle-history)
'inherit-input-method))))))
@@ -549,8 +550,8 @@ This command does not delete or overwrite any existing text."
(list
(region-beginning)
(region-end)
- (read-string (format "String insert rectangle (default %s): "
- (or (car string-rectangle-history) ""))
+ (read-string (format-prompt "String insert rectangle"
+ (or (car string-rectangle-history) ""))
nil 'string-rectangle-history
(car string-rectangle-history)))))
(apply-on-rectangle 'string-rectangle-line start end string nil))
diff --git a/lisp/replace.el b/lisp/replace.el
index 69092c16f96..a751822c79a 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -208,12 +208,15 @@ wants to replace FROM with TO."
(minibuffer-allow-text-properties t) ; separator uses text-properties
(prompt
(cond ((and query-replace-defaults separator)
- (format "%s (default %s): " prompt (car minibuffer-history)))
+ (format-prompt prompt (car minibuffer-history)))
(query-replace-defaults
- (format "%s (default %s -> %s): " prompt
- (query-replace-descr (caar query-replace-defaults))
- (query-replace-descr (cdar query-replace-defaults))))
- (t (format "%s: " prompt))))
+ (format-prompt
+ prompt (format "%s -> %s"
+ (query-replace-descr
+ (caar query-replace-defaults))
+ (query-replace-descr
+ (cdar query-replace-defaults)))))
+ (t (format-prompt prompt nil))))
(from
;; The save-excursion here is in case the user marks and copies
;; a region in order to specify the minibuffer input.
@@ -1487,7 +1490,7 @@ which means to discard all text properties."
;; Get the regexp for collection pattern.
(let ((default (car occur-collect-regexp-history)))
(read-regexp
- (format "Regexp to collect (default %s): " default)
+ (format-prompt "Regexp to collect" default)
default 'occur-collect-regexp-history)))
;; Otherwise normal occur takes numerical prefix argument.
(when current-prefix-arg
diff --git a/lisp/ses.el b/lisp/ses.el
index 96b219fc601..5707067e765 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -2540,10 +2540,8 @@ cell formula was unsafe and user declined confirmation."
(if (equal initial "\"")
(progn
(if (not (stringp curval)) (setq curval nil))
- (read-string (if curval
- (format "String Cell %s (default %s): "
- ses--curcell curval)
- (format "String Cell %s: " ses--curcell))
+ (read-string (format-prompt "String Cell %s"
+ curval ses--curcell)
nil 'ses-read-string-history curval))
(read-from-minibuffer
(format "Cell %s: " ses--curcell)
@@ -3007,9 +3005,9 @@ inserts a new row if at bottom of print area. Repeat COUNT times."
(list col
(if current-prefix-arg
(prefix-numeric-value current-prefix-arg)
- (read-from-minibuffer (format "Column %s width (default %d): "
- (ses-column-letter col)
- (ses-col-width col))
+ (read-from-minibuffer (format-prompt "Column %s width"
+ (ses-col-width col)
+ (ses-column-letter col))
nil ; No initial contents.
nil ; No override keymap.
t ; Convert to Lisp object.
diff --git a/lisp/simple.el b/lisp/simple.el
index f08015372af..376585d8e82 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2129,11 +2129,9 @@ See also `minibuffer-history-case-insensitive-variables'."
(interactive
(let* ((enable-recursive-minibuffers t)
(regexp (read-from-minibuffer
- (format "Previous element matching regexp%s: "
- (if minibuffer-history-search-history
- (format " (default %s)"
- (car minibuffer-history-search-history))
- ""))
+ (format-prompt "Previous element matching regexp"
+ (and minibuffer-history-search-history
+ (car minibuffer-history-search-history)))
nil minibuffer-local-map nil
'minibuffer-history-search-history
(car minibuffer-history-search-history))))
@@ -2416,15 +2414,17 @@ previous element of the minibuffer history in the minibuffer."
(goto-char (1- (minibuffer-prompt-end)))
(current-column))))
(move-to-column old-column))
- ;; Put the cursor at the end of the visual line instead of the
- ;; logical line, so the next `previous-line-or-history-element'
- ;; would move to the previous history element, not to a possible upper
- ;; visual line from the end of logical line in `line-move-visual' mode.
- (end-of-visual-line)
- ;; Since `end-of-visual-line' puts the cursor at the beginning
- ;; of the next visual line, move it one char back to the end
- ;; of the first visual line (bug#22544).
- (unless (eolp) (backward-char 1)))))))
+ (if (not line-move-visual) ; Handle logical lines (bug#42862)
+ (end-of-line)
+ ;; Put the cursor at the end of the visual line instead of the
+ ;; logical line, so the next `previous-line-or-history-element'
+ ;; would move to the previous history element, not to a possible upper
+ ;; visual line from the end of logical line in `line-move-visual' mode.
+ (end-of-visual-line)
+ ;; Since `end-of-visual-line' puts the cursor at the beginning
+ ;; of the next visual line, move it one char back to the end
+ ;; of the first visual line (bug#22544).
+ (unless (eolp) (backward-char 1))))))))
(defun next-complete-history-element (n)
"Get next history element that completes the minibuffer before the point.
@@ -6120,8 +6120,6 @@ Does not set point. Does nothing if mark ring is empty."
(pop mark-ring))
(deactivate-mark))
-(define-obsolete-function-alias
- 'exchange-dot-and-mark 'exchange-point-and-mark "23.3")
(defun exchange-point-and-mark (&optional arg)
"Put the mark where point is now, and point where the mark is now.
This command works even when the mark is not active,
@@ -7019,15 +7017,16 @@ rests."
(setq done t)))))))
(defun move-beginning-of-line (arg)
- "Move point to beginning of current line as displayed.
-\(If there's an image in the line, this disregards newlines
-that are part of the text that the image rests on.)
+ "Move point to visible beginning of current logical line.
+This disregards any invisible newline characters.
With argument ARG not nil or 1, move forward ARG - 1 lines first.
If point reaches the beginning or end of buffer, it stops there.
\(But if the buffer doesn't end in a newline, it stops at the
beginning of the last line.)
-To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
+
+To ignore intangibility, bind `inhibit-point-motion-hooks' to t.
+For motion by visual lines, see `beginning-of-visual-line'."
(interactive "^p")
(or arg (setq arg 1))
@@ -8311,7 +8310,7 @@ makes it easier to edit it."
(interactive
(let* ((default-var (variable-at-point))
(var (if (custom-variable-p default-var)
- (read-variable (format "Set variable (default %s): " default-var)
+ (read-variable (format-prompt "Set variable" default-var)
default-var)
(read-variable "Set variable: ")))
(minibuffer-help-form `(describe-variable ',var))
@@ -8406,18 +8405,6 @@ Called with three arguments (BEG END TEXT), it should replace the text
between BEG and END with TEXT. Expected to be set buffer-locally
in the *Completions* buffer.")
-(defvar completion-base-size nil
- "Number of chars before point not involved in completion.
-This is a local variable in the completion list buffer.
-It refers to the chars in the minibuffer if completing in the
-minibuffer, or in `completion-reference-buffer' otherwise.
-Only characters in the field at point are included.
-
-If nil, Emacs determines which part of the tail end of the
-buffer's text is involved in completion by comparing the text
-directly.")
-(make-obsolete-variable 'completion-base-size 'completion-base-position "23.2")
-
(defun delete-completion-window ()
"Delete the completion list window.
Go to the window from which completion was requested."
@@ -8471,7 +8458,6 @@ If EVENT, use EVENT's position to determine the starting position."
(run-hooks 'mouse-leave-buffer-hook)
(with-current-buffer (window-buffer (posn-window (event-start event)))
(let ((buffer completion-reference-buffer)
- (base-size completion-base-size)
(base-position completion-base-position)
(insert-function completion-list-insert-choice-function)
(choice
@@ -8498,10 +8484,6 @@ If EVENT, use EVENT's position to determine the starting position."
(choose-completion-string
choice buffer
(or base-position
- (when base-size
- ;; Someone's using old completion code that doesn't know
- ;; about base-position yet.
- (list (+ base-size (field-beginning))))
;; If all else fails, just guess.
(list (choose-completion-guess-base-position choice)))
insert-function)))))
@@ -8529,10 +8511,6 @@ If EVENT, use EVENT's position to determine the starting position."
(forward-char 1))
(point))))
-(defun choose-completion-delete-max-match (string)
- (declare (obsolete choose-completion-guess-base-position "23.2"))
- (delete-region (choose-completion-guess-base-position string) (point)))
-
(defvar choose-completion-string-functions nil
"Functions that may override the normal insertion of a completion choice.
These functions are called in order with three arguments:
@@ -8561,13 +8539,6 @@ back on `completion-list-insert-choice-function' when nil."
;; unless it is reading a file name and CHOICE is a directory,
;; or completion-no-auto-exit is non-nil.
- ;; Some older code may call us passing `base-size' instead of
- ;; `base-position'. It's difficult to make any use of `base-size',
- ;; so we just ignore it.
- (unless (consp base-position)
- (message "Obsolete `base-size' passed to choose-completion-string")
- (setq base-position nil))
-
(let* ((buffer (or buffer completion-reference-buffer))
(mini-p (minibufferp buffer)))
;; If BUFFER is a minibuffer, barf unless it's the currently
@@ -8623,8 +8594,7 @@ Type \\<completion-list-mode-map>\\[choose-completion] in the completion list\
to select the completion near point.
Or click to select one with the mouse.
-\\{completion-list-mode-map}"
- (set (make-local-variable 'completion-base-size) nil))
+\\{completion-list-mode-map}")
(defun completion-list-mode-finish ()
"Finish setup of the completions buffer.
@@ -8661,14 +8631,11 @@ Called from `temp-buffer-show-hook'."
(if minibuffer-completing-file-name
(file-name-as-directory
(expand-file-name
- (buffer-substring (minibuffer-prompt-end)
- (- (point) (or completion-base-size 0))))))))
+ (buffer-substring (minibuffer-prompt-end) (point)))))))
(with-current-buffer standard-output
- (let ((base-size completion-base-size) ;Read before killing localvars.
- (base-position completion-base-position)
+ (let ((base-position completion-base-position)
(insert-fun completion-list-insert-choice-function))
(completion-list-mode)
- (set (make-local-variable 'completion-base-size) base-size)
(set (make-local-variable 'completion-base-position) base-position)
(set (make-local-variable 'completion-list-insert-choice-function)
insert-fun))
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 5b98eb36bb9..aab6a3a1283 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1759,8 +1759,9 @@ This is based on `speedbar-initial-expansion-list-name' referencing
"Change speedbar's default expansion list to NEW-DEFAULT."
(interactive
(list
- (completing-read (format "Speedbar Mode (default %s): "
- speedbar-previously-used-expansion-list-name)
+ (completing-read (format-prompt
+ "Speedbar Mode"
+ speedbar-previously-used-expansion-list-name)
speedbar-initial-expansion-mode-alist
nil t "" nil
speedbar-previously-used-expansion-list-name)))
diff --git a/lisp/startup.el b/lisp/startup.el
index 2d938b8889d..9f6b0601772 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -463,9 +463,6 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(and (string-match "\\`[[:alnum:]]" file)
;; The lower-case variants of RCS and CVS are for DOS/Windows.
(not (member file '("RCS" "CVS" "rcs" "cvs")))
- ;; Avoid doing a `stat' when it isn't necessary because
- ;; that can cause trouble when an NFS server is down.
- (not (string-match "\\.elc?\\'" file))
(file-directory-p file)
(let ((expanded (expand-file-name file)))
(or (file-exists-p (expand-file-name ".nosearch" expanded))
@@ -645,16 +642,13 @@ It is the default value of the variable `top-level'."
(list (default-value 'user-full-name)))
;; If the PWD environment variable isn't accurate, delete it.
(let ((pwd (getenv "PWD")))
- (and (stringp pwd)
- ;; Use FOO/., so that if FOO is a symlink, file-attributes
- ;; describes the directory linked to, not FOO itself.
+ (and pwd
(or (and default-directory
(ignore-errors
(equal (file-attributes
- (concat (file-name-as-directory pwd) "."))
+ (file-name-as-directory pwd))
(file-attributes
- (concat (file-name-as-directory default-directory)
- ".")))))
+ (file-name-as-directory default-directory)))))
(setq process-environment
(delete (concat "PWD=" pwd)
process-environment)))))
diff --git a/lisp/subr.el b/lisp/subr.el
index 0bd09c6556d..08ff38ff8c1 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -766,7 +766,6 @@ If that is non-nil, the element matches; then `assoc-default'
If no element matches, the value is nil.
If TEST is omitted or nil, `equal' is used."
- (declare (side-effect-free t))
(let (found (tail alist) value)
(while (and tail (not found))
(let ((elt (car tail)))
@@ -3071,9 +3070,17 @@ If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
o1))
(defun remove-overlays (&optional beg end name val)
- "Clear BEG and END of overlays whose property NAME has value VAL.
-Overlays might be moved and/or split.
-BEG and END default respectively to the beginning and end of buffer."
+ "Remove overlays between BEG and END that have property NAME with value VAL.
+Overlays might be moved and/or split. If any targeted overlays
+start before BEG, the overlays will be altered so that they end
+at BEG. Likewise, if the targeted overlays end after END, they
+will be altered so that they start at END. Overlays that start
+at or after BEG and end before END will be removed completely.
+
+BEG and END default respectively to the beginning and end of the
+buffer.
+Values are compared with `eq'.
+If either NAME or VAL are specified, both should be specified."
;; This speeds up the loops over overlays.
(unless beg (setq beg (point-min)))
(unless end (setq end (point-max)))
@@ -4670,13 +4677,6 @@ This function is called directly from the C code."
;; Finally, run any other hook.
(run-hook-with-args 'after-load-functions abs-file))
-(defun eval-next-after-load (file)
- "Read the following input sexp, and run it whenever FILE is loaded.
-This makes or adds to an entry on `after-load-alist'.
-FILE should be the name of a library, with no directory name."
- (declare (obsolete eval-after-load "23.2"))
- (eval-after-load file (read)))
-
(defun display-delayed-warnings ()
"Display delayed warnings from `delayed-warnings-list'.
diff --git a/lisp/svg.el b/lisp/svg.el
index 7aadbc23593..eeb945f53b5 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -5,7 +5,7 @@
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Felix E. Klee <felix.klee@inka.de>
;; Keywords: image
-;; Version: 1.0
+;; Version: 1.1
;; Package-Requires: ((emacs "25"))
;; This file is part of GNU Emacs.
diff --git a/lisp/term.el b/lisp/term.el
index 99f1bf4f54f..f0470d806cd 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -241,9 +241,9 @@
;; printf '\033AnSiTu %s\n' "$USER"
;; printf '\033AnSiTc %s\n' "$PWD"
;;
-;; cd() { command cd "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
-;; pushd() { command pushd "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
-;; popd() { command popd "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
+;; cd() { command cd "$@" && printf '\033AnSiTc %s\n' "$PWD"; }
+;; pushd() { command pushd "$@" && printf '\033AnSiTc %s\n' "$PWD"; }
+;; popd() { command popd "$@" && printf '\033AnSiTc %s\n' "$PWD"; }
;;
;; # Use custom dircolors in term buffers.
;; # eval $(dircolors $HOME/.emacs_dircolors)
@@ -4110,53 +4110,6 @@ see `expand-file-name' and `substitute-in-file-name'. For completion see
(term-dynamic-complete-filename))
-(defun term-dynamic-simple-complete (stub candidates)
- "Dynamically complete STUB from CANDIDATES list.
-This function inserts completion characters at point by completing STUB from
-the strings in CANDIDATES. A completions listing may be shown in a help buffer
-if completion is ambiguous.
-
-Returns nil if no completion was inserted.
-Returns `sole' if completed with the only completion match.
-Returns `shortest' if completed with the shortest of the completion matches.
-Returns `partial' if completed as far as possible with the completion matches.
-Returns `listed' if a completion listing was shown.
-
-See also `term-dynamic-complete-filename'."
- (declare (obsolete completion-in-region "23.2"))
- (let* ((completion-ignore-case nil)
- (completions (all-completions stub candidates)))
- (cond ((null completions)
- (message "No completions of %s" stub)
- nil)
- ((= 1 (length completions)) ; Gotcha!
- (let ((completion (car completions)))
- (if (string-equal completion stub)
- (message "Sole completion")
- (insert (substring completion (length stub)))
- (message "Completed"))
- (when term-completion-addsuffix (insert " "))
- 'sole))
- (t ; There's no unique completion.
- (let ((completion (try-completion stub candidates)))
- ;; Insert the longest substring.
- (insert (substring completion (length stub)))
- (cond ((and term-completion-recexact term-completion-addsuffix
- (string-equal stub completion)
- (member completion completions))
- ;; It's not unique, but user wants shortest match.
- (insert " ")
- (message "Completed shortest")
- 'shortest)
- ((or term-completion-autolist
- (string-equal stub completion))
- ;; It's not unique, list possible completions.
- (term-dynamic-list-completions completions)
- 'listed)
- (t
- (message "Partially completed")
- 'partial)))))))
-
(defun term-dynamic-list-filename-completions ()
"List in help buffer possible completions of the filename at point."
(interactive)
@@ -4186,7 +4139,7 @@ Typing SPC flushes the help buffer."
(eq (window-buffer (posn-window (event-start first)))
(get-buffer "*Completions*"))
(memq (key-binding key)
- '(mouse-choose-completion choose-completion))))
+ '(choose-completion))))
;; If the user does choose-completion with the mouse,
;; execute the command, then delete the completion window.
(progn
@@ -4325,8 +4278,7 @@ well as the newer ports COM10 and higher."
;; `prompt': The most recently used port is provided as
;; the default value, which is used when the user
;; simply presses return.
- (if (stringp h) (format "Serial port (default %s): " h)
- "Serial port: ")
+ (format-prompt "Serial port" h)
;; `directory': Most systems have their serial ports
;; in the same directory, so start in the directory
;; of the most recently used port, or in a reasonable
@@ -4341,8 +4293,7 @@ well as the newer ports COM10 and higher."
;; serial port.
"")
(read-from-minibuffer
- (if (stringp h) (format "Serial port (default %s): " h)
- "Serial port: ")
+ (format-prompt "Serial port" h)
nil nil nil '(file-name-history . 1) nil nil))))
(if (or (null x) (and (stringp x) (zerop (length x))))
(setq x h)
@@ -4364,7 +4315,7 @@ Try to be nice by providing useful defaults and history."
(cond ((string= h serial-no-speed)
"Speed (default nil = set by port): ")
(h
- (format "Speed (default %s b/s): " h))
+ (format-prompt "Speed" (format "%s b/s" h)))
(t
(format "Speed (b/s): ")))
nil nil nil '(history . 1) nil nil)))
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index cc5879880c8..8c824461d22 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1883,12 +1883,9 @@ on what is seen near point."
(list
(let* ((sym (css--mdn-find-symbol))
(enable-recursive-minibuffers t)
- (value (completing-read
- (if sym
- (format "Describe CSS symbol (default %s): " sym)
- "Describe CSS symbol: ")
- css--mdn-completion-list nil nil nil
- 'css--mdn-lookup-history sym)))
+ (value (completing-read (format-prompt "Describe CSS symbol" sym)
+ css--mdn-completion-list nil nil nil
+ 'css--mdn-lookup-history sym)))
(if (equal value "") sym value))))
(when symbol
;; If we see a single-colon pseudo-element like ":after", turn it
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 23f96d7e0ee..6889d7eadac 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -398,8 +398,8 @@ like <img alt=\"Some thing.\">."
(let ((f (get-text-property (1- (point)) 'face)))
(memq f flyspell-prog-text-faces))))
-;; Records the binding of M-TAB in effect before flyspell was activated.
-(defvar flyspell--prev-meta-tab-binding)
+(defvar flyspell--prev-meta-tab-binding nil
+ "Records the binding of M-TAB in effect before flyspell was activated.")
;;;###autoload
(defun flyspell-prog-mode ()
@@ -533,7 +533,7 @@ in your init file.
(progn
(when flyspell-use-mouse-3-for-menu
(flyspell--set-use-mouse-3-for-menu 'flyspell-use-mouse-3-for-menu t))
- (flyspell-mode-on))
+ (flyspell-mode-on (called-interactively-p 'interactive)))
(error (message "Error enabling Flyspell mode:\n%s" (cdr err))
(flyspell-mode -1)))
(flyspell-mode-off)))
@@ -550,12 +550,9 @@ in your init file.
(custom-add-option 'text-mode-hook 'turn-on-flyspell)
-;;*---------------------------------------------------------------------*/
-;;* flyspell-buffers ... */
-;;* ------------------------------------------------------------- */
-;;* For remembering buffers running flyspell */
-;;*---------------------------------------------------------------------*/
-(defvar flyspell-buffers nil)
+(defvar flyspell-buffers nil
+ "For remembering buffers running flyspell")
+(make-obsolete-variable 'flyspell-buffers "not used." "28.1")
;;*---------------------------------------------------------------------*/
;;* flyspell-minibuffer-p ... */
@@ -611,8 +608,12 @@ in your init file.
;;*---------------------------------------------------------------------*/
;;* flyspell-mode-on ... */
;;*---------------------------------------------------------------------*/
-(defun flyspell-mode-on ()
- "Turn Flyspell mode on. Do not use this; use `flyspell-mode' instead."
+(defun flyspell-mode-on (&optional show-msg)
+ "Turn Flyspell mode on. Do not use this; use `flyspell-mode' instead.
+
+If optional argument SHOW-MSG is non-nil, show a welcome message
+if `flyspell-issue-message-flag' and `flyspell-issue-welcome-flag'
+are both non-nil."
(ispell-set-spellchecker-params) ; Initialize variables and dicts alists
(setq ispell-highlight-face 'flyspell-incorrect)
;; local dictionaries setup
@@ -644,15 +645,17 @@ in your init file.
(setq flyspell-generic-check-word-predicate mode-predicate)))
;; the welcome message
(if (and flyspell-issue-message-flag
- flyspell-issue-welcome-flag
- (called-interactively-p 'interactive))
- (let ((binding (where-is-internal 'flyspell-auto-correct-word
- nil 'non-ascii)))
- (message "%s"
- (if binding
- (format "Welcome to flyspell. Use %s or Mouse-2 to correct words."
- (key-description binding))
- "Welcome to flyspell. Use Mouse-2 to correct words.")))))
+ flyspell-issue-welcome-flag
+ show-msg)
+ (let* ((binding (where-is-internal 'flyspell-auto-correct-word
+ nil 'non-ascii))
+ (mouse-button (if flyspell-use-mouse-3-for-menu
+ "Mouse-3" "Mouse-2")))
+ (message (format-message
+ "Welcome to Flyspell. Use %s to correct words."
+ (if binding
+ (format "`%s' or `%s'" (key-description binding) mouse-button)
+ (format "`%s'" mouse-button)))))))
;;*---------------------------------------------------------------------*/
;;* flyspell-delay-commands ... */
@@ -1802,7 +1805,9 @@ for the overlay."
(overlay-put overlay 'mouse-face mouse-face)
(overlay-put overlay 'flyspell-overlay t)
(overlay-put overlay 'evaporate t)
- (overlay-put overlay 'help-echo "mouse-2: correct word at point")
+ (overlay-put overlay 'help-echo (concat (if flyspell-use-mouse-3-for-menu
+ "mouse-3"
+ "mouse-2") ": correct word at point"))
;; If misspelled text has a 'keymap' property, let that remain in
;; effect for the bindings that flyspell-mouse-map doesn't override.
(set-keymap-parent flyspell-mouse-map (get-char-property beg 'keymap))
@@ -1899,7 +1904,7 @@ before point that's highlighted as misspelled."
(while (and (setq pos (previous-overlay-change pos))
(not (= pos pos1)))
(setq pos1 pos)
- (if (> pos (point-min))
+ (if (>= pos (point-min))
(progn
(setq ovs (overlays-at pos))
(while (consp ovs)
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index b2ccbc8da24..86452ff1e87 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -44,6 +44,7 @@
;; ispell-buffer
;; ispell-message
;; ispell-comments-and-strings
+;; ispell-comment-or-string-at-point
;; ispell-continue
;; ispell-complete-word
;; ispell-complete-word-interior-frag
@@ -1095,28 +1096,38 @@ to dictionaries found, and will remove aliases from the list
in `ispell-dicts-name2locale-equivs-alist' if an explicit
dictionary from that list was found."
(let ((hunspell-found-dicts
- (split-string
- (with-temp-buffer
- (ispell-call-process ispell-program-name
- null-device
- t
- nil
- "-D"
- ;; Use -a to prevent Hunspell from
- ;; trying to initialize its
- ;; curses/termcap UI, which causes it
- ;; to crash or fail to start in some
- ;; MS-Windows ports.
- "-a"
- ;; Hunspell 1.7.0 (and later?) won't
- ;; show LOADED DICTIONARY unless
- ;; there's at least one file argument
- ;; on the command line. So we feed
- ;; it with the null device.
- null-device)
- (buffer-string))
- "[\n\r]+"
- t))
+ (seq-filter
+ (lambda (str)
+ (when (string-match
+ ;; Hunspell gives this error when there is some
+ ;; installation problem, for example if $LANG is unset.
+ (concat "^Can't open affix or dictionary files "
+ "for dictionary named \"default\".$")
+ str)
+ (user-error "Hunspell error (is $LANG unset?): %s" str))
+ (file-name-absolute-p str))
+ (split-string
+ (with-temp-buffer
+ (ispell-call-process ispell-program-name
+ null-device
+ t
+ nil
+ "-D"
+ ;; Use -a to prevent Hunspell from
+ ;; trying to initialize its
+ ;; curses/termcap UI, which causes it
+ ;; to crash or fail to start in some
+ ;; MS-Windows ports.
+ "-a"
+ ;; Hunspell 1.7.0 (and later?) won't
+ ;; show LOADED DICTIONARY unless
+ ;; there's at least one file argument
+ ;; on the command line. So we feed
+ ;; it with the null device.
+ null-device)
+ (buffer-string))
+ "[\n\r]+"
+ t)))
hunspell-default-dict
hunspell-default-dict-entry
hunspell-multi-dict)
@@ -3580,24 +3591,40 @@ Returns the sum SHIFT due to changes in word replacements."
;;;###autoload
-(defun ispell-comments-and-strings ()
- "Check comments and strings in the current buffer for spelling errors."
- (interactive)
- (goto-char (point-min))
+(defun ispell-comments-and-strings (&optional start end)
+ "Check comments and strings in the current buffer for spelling errors.
+If called interactively with an active region, check only comments and
+strings in the region.
+When called from Lisp, START and END buffer positions can be provided
+to limit the check."
+ (interactive (when (use-region-p) (list (region-beginning) (region-end))))
+ (unless end (setq end (point-max)))
+ (goto-char (or start (point-min)))
(let (state done)
(while (not done)
(setq done t)
- (setq state (parse-partial-sexp (point) (point-max)
- nil nil state 'syntax-table))
+ (setq state (parse-partial-sexp (point) end nil nil state 'syntax-table))
(if (or (nth 3 state) (nth 4 state))
(let ((start (point)))
- (setq state (parse-partial-sexp start (point-max)
+ (setq state (parse-partial-sexp start end
nil nil state 'syntax-table))
(if (or (nth 3 state) (nth 4 state))
(error "Unterminated string or comment"))
(save-excursion
(setq done (not (ispell-region start (point))))))))))
+;;;###autoload
+(defun ispell-comment-or-string-at-point ()
+ "Check the comment or string containing point for spelling errors."
+ (interactive)
+ (save-excursion
+ (let ((state (syntax-ppss)))
+ (if (or (nth 3 state) (nth 4 state))
+ (ispell-region (nth 8 state)
+ (progn (parse-partial-sexp (point) (point-max)
+ nil nil state 'syntax-table)
+ (point)))
+ (user-error "Not inside a string or comment")))))
;;;###autoload
(defun ispell-buffer ()
@@ -4188,7 +4215,7 @@ Both should not be used to define a buffer-local dictionary."
(let (line-okay search done found)
(while (not done)
(let ((case-fold-search nil))
- (setq search (search-forward ispell-words-keyword nil 'move)
+ (setq search (search-forward ispell-words-keyword nil t)
found (or found search)
line-okay (< (+ (length word) 1 ; 1 for space after word..
(progn (end-of-line) (current-column)))
@@ -4199,8 +4226,10 @@ Both should not be used to define a buffer-local dictionary."
(setq done t)
(if (null search)
(progn
- (open-line 1)
- (unless found (newline))
+ (if found (insert "\n") ;; after an existing LocalWords
+ (goto-char (point-max)) ;; no LocalWords, go to end of file
+ (open-line 1)
+ (newline))
(insert (if comment-start
(concat
(progn
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index 8d8223a7326..c8fd0bea004 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -336,9 +336,9 @@ found on the last `refer-find-entry' or `refer-find-next-entry'."
(list (expand-file-name
(if (eq major-mode 'bibtex-mode)
(read-file-name
- (format ".bib file (default %s): "
- (file-name-nondirectory
- (buffer-file-name)))
+ (format-prompt ".bib file"
+ (file-name-nondirectory
+ (buffer-file-name)))
(file-name-directory (buffer-file-name))
(file-name-nondirectory (buffer-file-name))
t)
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index b79bb292c8a..4c780d8d8c3 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -861,9 +861,7 @@ Optional prefix argument OTHER-WINDOW goes to the label in another window."
(default (when (looking-back "\\\\\\(?:page\\)?ref{[-a-zA-Z0-9_*.:]*"
(line-beginning-position))
(reftex-this-word "-a-zA-Z0-9_*.:")))
- (label (completing-read (if default
- (format "Label (default %s): " default)
- "Label: ")
+ (label (completing-read (format-prompt "Label" default)
docstruct
(lambda (x) (stringp (car x))) t nil nil
default))
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 1672dce4f23..e0ef786953e 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -46,7 +46,8 @@
(defcustom sgml-basic-offset 2
"Specifies the basic indentation level for `sgml-indent-line'."
- :type 'integer)
+ :type 'integer
+ :safe #'integerp)
(defcustom sgml-attribute-offset 0
"Specifies a delta for attribute indentation in `sgml-indent-line'.
@@ -778,7 +779,7 @@ If you like tags and attributes in uppercase, customize
(setq sgml-tag-last
(completing-read
(if (> (length sgml-tag-last) 0)
- (format "Tag (default %s): " sgml-tag-last)
+ (format-prompt "Tag" sgml-tag-last)
"Tag: ")
sgml-tag-alist nil nil nil 'sgml-tag-history sgml-tag-last)))
?< str |
@@ -877,9 +878,7 @@ With prefix argument, only self insert."
(list (let ((def (save-excursion
(if (eq (following-char) ?<) (forward-char))
(sgml-beginning-of-tag))))
- (completing-read (if def
- (format "Tag (default %s): " def)
- "Tag: ")
+ (completing-read (format-prompt "Tag" def)
sgml-tag-alist nil nil nil
'sgml-tag-history def))))
(or (and tag (> (length tag) 0))
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 33f181b80c3..cfe6ce5ce61 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -1824,11 +1824,11 @@ See `table-insert-row' and `table-insert-column'."
(list (intern (let ((completion-ignore-case t)
(default (car table-insert-row-column-history)))
(downcase (completing-read
- (format "Insert %s row%s/column%s (default %s): "
- (if (> n 1) (format "%d" n) "a")
- (if (> n 1) "s" "")
- (if (> n 1) "s" "")
- default)
+ (format-prompt
+ "Insert %s row%s/column%s" default
+ (if (> n 1) (format "%d" n) "a")
+ (if (> n 1) "s" "")
+ (if (> n 1) "s" ""))
'(("row") ("column"))
nil t nil 'table-insert-row-column-history default))))
n)))
@@ -2534,7 +2534,7 @@ DIRECTION is one of symbols; right, left, above or below."
(caar direction-list)))
(completion-ignore-case t))
(intern (downcase (completing-read
- (format "Span into (default %s): " default-direction)
+ (format-prompt "Span into" default-direction)
direction-list
nil t nil 'table-cell-span-direction-history default-direction))))))
(unless (memq direction '(right left above below))
@@ -2697,7 +2697,7 @@ Creates a cell on the left and a cell on the right of the current point location
("Title"
("Split" . "split") ("Left" . "left") ("Right" . "right"))))
(downcase (completing-read
- (format "Existing cell contents to (default %s): " default)
+ (format-prompt "Existing cell contents to" default)
'(("split") ("left") ("right"))
nil t nil 'table-cell-split-contents-to-history default)))))))
(unless (eq contents-to 'split)
@@ -2769,7 +2769,7 @@ ORIENTATION is a symbol either horizontally or vertically."
(completion-ignore-case t)
(default (car table-cell-split-orientation-history)))
(intern (downcase (completing-read
- (format "Split orientation (default %s): " default)
+ (format-prompt "Split orientation" default)
'(("horizontally") ("vertically"))
nil t nil 'table-cell-split-orientation-history default))))))
(unless (memq orientation '(horizontally vertically))
@@ -2789,7 +2789,7 @@ WHAT is a symbol `cell', `row' or `column'. JUSTIFY is a symbol
(completion-ignore-case t)
(default (car table-target-history)))
(intern (downcase (completing-read
- (format "Justify what (default %s): " default)
+ (format-prompt "Justify what" default)
'(("cell") ("row") ("column"))
nil t nil 'table-target-history default))))
(table--query-justification)))
@@ -2943,7 +2943,7 @@ CALS (DocBook DTD):
(completion-ignore-case t)
(default (car table-source-language-history))
(language (downcase (completing-read
- (format "Language (default %s): " default)
+ (format-prompt "Language" default)
table-source-languages
nil t nil 'table-source-language-history default))))
(list
@@ -3366,7 +3366,7 @@ Example:
(let* ((completion-ignore-case t)
(default (car table-sequence-justify-history)))
(intern (downcase (completing-read
- (format "Justify (default %s): " default)
+ (format-prompt "Justify" default)
'(("left") ("center") ("right"))
nil t nil 'table-sequence-justify-history default)))))))
(unless (or (called-interactively-p 'interactive) (table--probe-cell))
@@ -3668,7 +3668,7 @@ companion command to `table-capture' this way.
(if (and (string= col-delim-regexp "") (string= row-delim-regexp "")) 'left
(intern
(downcase (completing-read
- (format "Justify (default %s): " default)
+ (format-prompt "Justify" default)
'(("left") ("center") ("right"))
nil t nil 'table-capture-justify-history default)))))
(if (and (string= col-delim-regexp "") (string= row-delim-regexp "")) "1"
@@ -4253,9 +4253,8 @@ cache buffer into the designated cell in the table buffer."
PROMPT-HISTORY is a cons cell which car is the prompt string and the
cdr is the history symbol."
(let ((default (car (symbol-value (cdr prompt-history)))))
- (read-from-minibuffer
- (format "%s (default %s): " (car prompt-history) default)
- "" nil nil (cdr prompt-history) default))
+ (read-from-minibuffer (format-prompt (car prompt-history) default)
+ "" nil nil (cdr prompt-history) default))
(car (symbol-value (cdr prompt-history))))
(defun table--buffer-substring-and-trim (beg end)
@@ -4312,7 +4311,7 @@ Returns the coordinate of the final point location."
(let* ((completion-ignore-case t)
(default (car table-justify-history)))
(intern (downcase (completing-read
- (format "Justify (default %s): " default)
+ (format-prompt "Justify" default)
'(("left") ("center") ("right") ("top") ("middle") ("bottom") ("none"))
nil t nil 'table-justify-history default)))))
diff --git a/lisp/time.el b/lisp/time.el
index 1ab992adb45..534f1283429 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -29,6 +29,8 @@
;;; Code:
+(eval-when-compile (require 'subr-x))
+
(defgroup display-time nil
"Display time and load in mode line of Emacs."
:group 'mode-line
@@ -559,26 +561,31 @@ See `world-clock'."
The variable `world-clock-list' specifies which time zones to use.
To turn off the world time display, go to the window and type `\\[quit-window]'."
(interactive)
- (when (and world-clock-timer-enable
- (not (get-buffer world-clock-buffer-name)))
- (run-at-time t world-clock-timer-second #'world-clock-update))
- (pop-to-buffer world-clock-buffer-name)
+ (if-let ((buffer (get-buffer world-clock-buffer-name)))
+ (pop-to-buffer buffer)
+ (pop-to-buffer world-clock-buffer-name)
+ (when world-clock-timer-enable
+ (run-at-time t world-clock-timer-second #'world-clock-update)
+ (add-hook 'kill-buffer-hook #'world-clock-cancel-timer nil t)))
(world-clock-display (time--display-world-list))
(world-clock-mode)
(fit-window-to-buffer))
+(defun world-clock-cancel-timer ()
+ "Cancel the world clock timer."
+ (let ((list timer-list))
+ (while list
+ (let ((elt (pop list)))
+ (when (equal (symbol-name (timer--function elt))
+ "world-clock-update")
+ (cancel-timer elt))))))
+
(defun world-clock-update (&optional _arg _noconfirm)
"Update the `world-clock' buffer."
(if (get-buffer world-clock-buffer-name)
(with-current-buffer (get-buffer world-clock-buffer-name)
(world-clock-display (time--display-world-list)))
- ;; cancel timer
- (let ((list timer-list))
- (while list
- (let ((elt (pop list)))
- (when (equal (symbol-name (timer--function elt))
- "world-clock-update")
- (cancel-timer elt)))))))
+ (world-clock-cancel-timer)))
;;;###autoload
(defun emacs-uptime (&optional format)
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index d302fb16eda..54bb3569788 100644
--- a/lisp/vc/add-log.el
+++ b/lisp/vc/add-log.el
@@ -667,7 +667,7 @@ With a numeric prefix ARG, go back ARG comments."
"Prompt for a change log name."
(let* ((default (change-log-name))
(name (expand-file-name
- (read-file-name (format "Log file (default %s): " default)
+ (read-file-name (format-prompt "Log file" default)
nil default))))
;; Handle something that is syntactically a directory name.
;; Look for ChangeLog or whatever in that directory.
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index aff20b6e6e9..9c41d508b6b 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -392,6 +392,12 @@ well."
'((t :inherit diff-file-header))
"`diff-mode' face used to highlight nonexistent files in recursive diffs.")
+(defface diff-error
+ '((((class color))
+ :foreground "red" :background "black" :weight bold)
+ (t :weight bold))
+ "`diff-mode' face for error messages from diff.")
+
(defconst diff-yank-handler '(diff-yank-function))
(defun diff-yank-function (text)
;; FIXME: the yank-handler is now called separately on each piece of text
@@ -472,6 +478,7 @@ and the face `diff-added' for added lines.")
("^\\(#\\)\\(.*\\)"
(1 font-lock-comment-delimiter-face)
(2 font-lock-comment-face))
+ ("^diff: .*" (0 'diff-error))
("^[^-=+*!<>#].*\n" (0 'diff-context))
(,#'diff--font-lock-syntax)
(,#'diff--font-lock-prettify)
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index ef466741b24..ccf5a7807f2 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -325,6 +325,10 @@ one optional arguments, diff-number to refine.")
(error-buf ediff-error-buffer))
(ediff-skip-unsuitable-frames)
(switch-to-buffer error-buf)
+ ;; We output data from the diff command using `raw-text' as
+ ;; the coding system, so decode before displaying.
+ (when (eq ediff-coding-system-for-read 'raw-text)
+ (decode-coding-region (point-min) (point-max) 'undecided))
(ediff-kill-buffer-carefully ctl-buf)
(user-error "Errors in diff output. Diff output is in %S" diff-buff))))
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 2b1b07927f8..c977291a524 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -1807,11 +1807,9 @@ all marked sessions must be active."
(ediff-show-meta-buffer session-buf)
(setq regexp
(read-string
- (if (stringp default-regexp)
- (format
- "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt
+ "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp t)))
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index f56d31c7136..52878bad8a7 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -2181,19 +2181,18 @@ a regular expression typed in by the user."
(setq ediff-skip-diff-region-function ediff-hide-regexp-matches-function
regexp-A
(read-string
- (format
- "Ignore A-regions matching this regexp (default %s): "
- ediff-regexp-hide-A))
+ (format-prompt
+ "Ignore A-regions matching this regexp" ediff-regexp-hide-A))
regexp-B
(read-string
- (format
- "Ignore B-regions matching this regexp (default %s): "
+ (format-prompt
+ "Ignore B-regions matching this regexp"
ediff-regexp-hide-B)))
(if ediff-3way-comparison-job
(setq regexp-C
(read-string
- (format
- "Ignore C-regions matching this regexp (default %s): "
+ (format-prompt
+ "Ignore C-regions matching this regexp"
ediff-regexp-hide-C))))
(if (eq ediff-hide-regexp-connective 'and)
(setq msg-connective "BOTH"
@@ -2220,20 +2219,18 @@ a regular expression typed in by the user."
ediff-focus-on-regexp-matches-function
regexp-A
(read-string
- (format
- "Focus on A-regions matching this regexp (default %s): "
- ediff-regexp-focus-A))
+ (format-prompt
+ "Focus on A-regions matching this regexp" ediff-regexp-focus-A))
regexp-B
(read-string
- (format
- "Focus on B-regions matching this regexp (default %s): "
- ediff-regexp-focus-B)))
+ (format-prompt
+ "Focus on B-regions matching this regexp" ediff-regexp-focus-B)))
(if ediff-3way-comparison-job
(setq regexp-C
(read-string
- (format
- "Focus on C-regions matching this regexp (default %s): "
- ediff-regexp-focus-C))))
+ (format-prompt
+ "Focus on C-regions matching this regexp"
+ ediff-regexp-focus-C))))
(if (eq ediff-focus-regexp-connective 'and)
(setq msg-connective "BOTH"
alt-msg-connective "ONE OF"
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 133d2109f5b..ae2f8ad6c1c 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -566,10 +566,8 @@ expression; only file names that match the regexp are considered."
(ediff-strip-last-dir f))
nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -594,10 +592,8 @@ names. Only the files that are under revision control are taken into account."
(list (read-directory-name
"Directory to compare with revision:" dir-A nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt
+ "Filter filenames through regular expression" default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -632,10 +628,8 @@ regular expression; only file names that match the regexp are considered."
(ediff-strip-last-dir f))
nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -665,10 +659,8 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
(ediff-strip-last-dir f))
nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -707,10 +699,8 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
(ediff-strip-last-dir f))
nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -735,10 +725,8 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
(list (read-directory-name
"Directory to merge with revisions:" dir-A nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -767,10 +755,8 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
"Directory to merge with revisions and ancestors:"
dir-A nil 'must-match)
(read-string
- (if (stringp default-regexp)
- (format "Filter filenames through regular expression (default %s): "
- default-regexp)
- "Filter filenames through regular expression: ")
+ (format-prompt "Filter filenames through regular expression"
+ default-regexp)
nil
'ediff-filtering-regexp-history
(eval ediff-default-filtering-regexp))
@@ -1353,16 +1339,18 @@ the merge buffer."
(let (rev1 rev2)
(setq rev1
(read-string
- (format-message
- "Version 1 to merge (default %s's working version): "
- (if (stringp file)
- (file-name-nondirectory file) "current buffer")))
+ (format-prompt "Version 1 to merge"
+ (concat
+ (if (stringp file)
+ (file-name-nondirectory file)
+ "current buffer")
+ "'s working version")))
rev2
(read-string
- (format
- "Version 2 to merge (default %s): "
- (if (stringp file)
- (file-name-nondirectory file) "current buffer"))))
+ (format-prompt "Version 2 to merge"
+ (if (stringp file)
+ (file-name-nondirectory file)
+ "current buffer"))))
(ediff-load-version-control)
;; ancestor-revision=nil
(funcall
@@ -1388,22 +1376,26 @@ the merge buffer."
(let (rev1 rev2 ancestor-rev)
(setq rev1
(read-string
- (format-message
- "Version 1 to merge (default %s's working version): "
- (if (stringp file)
- (file-name-nondirectory file) "current buffer")))
+ (format-prompt "Version 1 to merge"
+ (concat
+ (if (stringp file)
+ (file-name-nondirectory file)
+ "current buffer")
+ "'s working version")))
rev2
(read-string
- (format
- "Version 2 to merge (default %s): "
- (if (stringp file)
- (file-name-nondirectory file) "current buffer")))
+ (format-prompt "Version 2 to merge"
+ (if (stringp file)
+ (file-name-nondirectory file)
+ "current buffer")))
ancestor-rev
- (read-string
- (format-message
- "Ancestor version (default %s's base revision): "
- (if (stringp file)
- (file-name-nondirectory file) "current buffer"))))
+ (read-string (format-prompt
+ "Ancestor version"
+ (concat
+ (if (stringp file)
+ (file-name-nondirectory file)
+ "current buffer")
+ "'s base revision"))))
(ediff-load-version-control)
(funcall
(intern (format "ediff-%S-merge-internal" ediff-version-control-package))
@@ -1503,13 +1495,14 @@ arguments after setting up the Ediff buffers."
(save-buffer (current-buffer)))
(let (rev1 rev2)
(setq rev1
- (read-string
- (format "Revision 1 to compare (default %s's latest revision): "
- (file-name-nondirectory file)))
+ (read-string (format-prompt "Revision 1 to compare"
+ (concat (file-name-nondirectory file)
+ "'s latest revision")))
rev2
(read-string
- (format "Revision 2 to compare (default %s's current state): "
- (file-name-nondirectory file))))
+ (format-prompt "Revision 2 to compare"
+ (concat (file-name-nondirectory file)
+ "'s current state"))))
(ediff-load-version-control)
(funcall
(intern (format "ediff-%S-internal" ediff-version-control-package))
diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el
index fc8c318e3af..d2d419ac786 100644
--- a/lisp/vc/emerge.el
+++ b/lisp/vc/emerge.el
@@ -2757,15 +2757,14 @@ Otherwise, signal an error."
alternative-default-dir
(not (string-equal alternative-default-dir
(file-name-directory A-file))))
- (read-file-name (format "%s (default %s): "
- prompt (file-name-nondirectory A-file))
+ (read-file-name (format-prompt prompt (file-name-nondirectory A-file))
alternative-default-dir
(concat alternative-default-dir
(file-name-nondirectory A-file))
(and must-match 'confirm)))
;; If there is a default file, use it.
(default-file
- (read-file-name (format "%s (default %s): " prompt default-file)
+ (read-file-name (format-prompt prompt default-file)
;; If emerge-default-last-directories is set, use the
;; directory from the same argument of the last call of
;; Emerge as the default for this argument.
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index d82cadc70dd..18bcc6c2f10 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -403,7 +403,7 @@ should be applied to the background or to the foreground."
(let ((def (vc-working-revision buffer-file-name)))
(if (null current-prefix-arg) def
(vc-read-revision
- (format "Annotate from revision (default %s): " def)
+ (format-prompt "Annotate from revision" def)
(list buffer-file-name) nil def)))
(if (null current-prefix-arg)
vc-annotate-display-mode
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index cdf8ab984e8..6c219005cea 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -451,7 +451,11 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc."
(setf (vc-dir-fileinfo->state (ewoc-data node)) (nth 1 entry))
(setf (vc-dir-fileinfo->extra (ewoc-data node)) (nth 2 entry))
(setf (vc-dir-fileinfo->needs-update (ewoc-data node)) nil)
- (ewoc-invalidate vc-ewoc node))
+ ;; `ewoc-invalidate' will kill line and insert new text,
+ ;; let's keep point column.
+ (let ((p (point)))
+ (ewoc-invalidate vc-ewoc node)
+ (goto-char p)))
;; If the state is nil, the file does not exist
;; anymore, so remember the entry so we can remove
;; it after we are done inserting all ENTRIES.
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index 4a04c9365a5..99bf5bf9b64 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -691,7 +691,6 @@ BACKEND, if non-nil, specifies a VC backend for the Log Edit buffer."
(message "%s Type C-c C-c when done" msg)
(vc-finish-logentry (eq comment t)))))
-(declare-function vc-dir-move-to-goal-column "vc-dir" ())
;; vc-finish-logentry is typically called from a log-edit buffer (see
;; vc-start-logentry).
(defun vc-finish-logentry (&optional nocomment)
@@ -740,8 +739,6 @@ the buffer contents as a comment."
(mapc
(lambda (file) (vc-resynch-buffer file t t))
log-fileset))
- (when (vc-dispatcher-browsing)
- (vc-dir-move-to-goal-column))
(run-hooks after-hook 'vc-finish-logentry-hook)))
(defun vc-dispatcher-browsing ()
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 5561292d8c0..4cbd2658f80 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1346,8 +1346,6 @@ For old-style locking-based version control systems, like RCS:
nil t)))))
(vc-call-backend backend 'create-repo))
-(declare-function vc-dir-move-to-goal-column "vc-dir" ())
-
;;;###autoload
(defun vc-register (&optional vc-fileset comment)
"Register into a version control system.
@@ -1398,8 +1396,6 @@ first backend that could register the file is used."
(vc-resynch-buffer file t t))
files)
- (when (derived-mode-p 'vc-dir-mode)
- (vc-dir-move-to-goal-column))
(message "Registering %s... done" files)))
(defun vc-register-with (backend)
@@ -2520,11 +2516,8 @@ with its diffs (if the underlying VCS supports that)."
(cond
((eq current-prefix-arg 1)
(let* ((default (thing-at-point 'word t))
- (revision (read-string
- (if default
- (format "Revision to show (default %s): " default)
- "Revision to show: ")
- nil nil default)))
+ (revision (read-string (format-prompt "Revision to show" default)
+ nil nil default)))
(list 1 revision)))
((numberp current-prefix-arg)
(list current-prefix-arg))
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index c252c0b18f8..e159d1888e5 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -202,8 +202,7 @@ This function is provided for backward compatibility, since
(interactive
(list (let ((default locale-coding-system))
(read-coding-system
- (format "Coding system for system calls (default %s): "
- default)
+ (format-prompt "Coding system for system calls" default)
default))))
(check-coding-system coding-system)
(setq locale-coding-system coding-system))
diff --git a/lisp/wdired.el b/lisp/wdired.el
index b98becfafe7..6defbf8bc86 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -461,10 +461,12 @@ non-nil means return old filename."
(defun wdired-do-renames (renames)
"Perform RENAMES in parallel."
- (let ((residue ())
- (progress nil)
- (errors 0)
- (overwrite (or (not wdired-confirm-overwrite) 1)))
+ (let* ((residue ())
+ (progress nil)
+ (errors 0)
+ (total (1- (length renames)))
+ (prep (make-progress-reporter "Renaming" 0 total))
+ (overwrite (or (not wdired-confirm-overwrite) 1)))
(while (or renames
;; We've done one round through the renames, we have found
;; some residue, but we also made some progress, so maybe
@@ -472,6 +474,7 @@ non-nil means return old filename."
(prog1 (setq renames residue)
(setq progress nil)
(setq residue nil)))
+ (progress-reporter-update prep (- total (length renames)))
(let* ((rename (pop renames))
(file-new (cdr rename)))
(cond
@@ -519,6 +522,7 @@ non-nil means return old filename."
(dired-log "Rename `%s' to `%s' failed:\n%s\n"
file-ori file-new
err)))))))))
+ (progress-reporter-done prep)
errors))
(defun wdired-create-parentdirs (file-new)
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index ea7e266e0d0..e9799dc00fd 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -3161,6 +3161,15 @@ It reads a file name from an editable text field."
:completions (completion-table-case-fold
#'completion-file-name-table
(not read-file-name-completion-ignore-case))
+ :match (lambda (widget value)
+ (or (not (widget-get widget :must-match))
+ (file-exists-p value)))
+ :validate (lambda (widget)
+ (let ((value (widget-value widget)))
+ (unless (widget-apply widget :match value)
+ (widget-put widget
+ :error (format "File %s does not exist" value))
+ widget)))
:prompt-value 'widget-file-prompt-value
:format "%{%t%}: %v"
;; Doesn't work well with terminating newline.
@@ -3172,11 +3181,10 @@ It reads a file name from an editable text field."
(abbreviate-file-name
(if unbound
(read-file-name prompt)
- (let ((prompt2 (format "%s (default %s): " prompt value))
- (dir (file-name-directory value))
+ (let ((dir (file-name-directory value))
(file (file-name-nondirectory value))
(must-match (widget-get widget :must-match)))
- (read-file-name prompt2 dir nil must-match file)))))
+ (read-file-name (format-prompt prompt value) dir nil must-match file)))))
;;;(defun widget-file-action (widget &optional event)
;;; ;; Read a file name from the minibuffer.
@@ -3288,10 +3296,10 @@ It reads a directory name from an editable text field."
"Read coding-system from minibuffer."
(if (widget-get widget :base-only)
(intern
- (completing-read (format "%s (default %s): " prompt value)
+ (completing-read (format-prompt prompt value)
(mapcar #'list (coding-system-list t)) nil nil nil
coding-system-history))
- (read-coding-system (format "%s (default %s): " prompt value) value)))
+ (read-coding-system (format-prompt prompt value) value)))
(defun widget-coding-system-action (widget &optional event)
(let ((answer
diff --git a/lisp/woman.el b/lisp/woman.el
index 891a1263ace..eeacceadc27 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -1277,14 +1277,11 @@ cache to be re-read."
(test-completion
word-at-point woman-topic-all-completions))
word-at-point)))
- (completing-read
- (if default
- (format "Manual entry (default %s): " default)
- "Manual entry: ")
- woman-topic-all-completions nil 1
- nil
- 'woman-topic-history
- default))))
+ (completing-read (format-prompt "Manual entry" default)
+ woman-topic-all-completions nil 1
+ nil
+ 'woman-topic-history
+ default))))
;; Note that completing-read always returns a string.
(unless (= (length topic) 0)
(cond
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 5bfa1473edd..d2fdbd82e73 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -145,6 +145,7 @@ AC_DEFUN([gl_EARLY],
# Code from module regex:
# Code from module root-uid:
# Code from module sig2str:
+ # Code from module sigdescr_np:
# Code from module signal-h:
# Code from module snippet/_Noreturn:
# Code from module snippet/arg-nonnull:
@@ -424,6 +425,11 @@ AC_DEFUN([gl_INIT],
AC_LIBOBJ([sig2str])
gl_PREREQ_SIG2STR
fi
+ gl_FUNC_SIGDESCR_NP
+ if test $HAVE_SIGDESCR_NP = 0; then
+ AC_LIBOBJ([sigdescr_np])
+ fi
+ gl_STRING_MODULE_INDICATOR([sigdescr_np])
gl_SIGNAL_H
gl_TYPE_SOCKLEN_T
gt_TYPE_SSIZE_T
@@ -1059,6 +1065,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/sha512.h
lib/sig2str.c
lib/sig2str.h
+ lib/sigdescr_np.c
lib/signal.in.h
lib/stat-time.c
lib/stat-time.h
@@ -1181,6 +1188,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/open-slash.m4
m4/open.m4
m4/pathmax.m4
+ m4/pid_t.m4
m4/pipe2.m4
m4/pselect.m4
m4/pthread_sigmask.m4
@@ -1191,6 +1199,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/sha256.m4
m4/sha512.m4
m4/sig2str.m4
+ m4/sigdescr_np.m4
m4/signal_h.m4
m4/socklen.m4
m4/ssize_t.m4
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index 33601aa3b43..9221d9f7d5f 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,4 +1,4 @@
-# include_next.m4 serial 25
+# include_next.m4 serial 26
dnl Copyright (C) 2006-2020 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -106,19 +106,21 @@ dnl We intentionally avoid using AC_LANG_SOURCE here.
AC_SUBST([INCLUDE_NEXT])
AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
AC_SUBST([PRAGMA_SYSTEM_HEADER])
- AC_CACHE_CHECK([whether system header files limit the line length],
- [gl_cv_pragma_columns],
- [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
- AC_EGREP_CPP([choke me],
+
+ dnl HP NonStop systems, which define __TANDEM, limit the line length
+ dnl after including some system header files.
+ AC_CACHE_CHECK([whether source code line length is unlimited],
+ [gl_cv_source_line_length_unlimited],
+ [AC_EGREP_CPP([choke me],
[
#ifdef __TANDEM
choke me
#endif
],
- [gl_cv_pragma_columns=yes],
- [gl_cv_pragma_columns=no])
+ [gl_cv_source_line_length_unlimited=no],
+ [gl_cv_source_line_length_unlimited=yes])
])
- if test $gl_cv_pragma_columns = yes; then
+ if test $gl_cv_source_line_length_unlimited = no; then
PRAGMA_COLUMNS="#pragma COLUMNS 10000"
else
PRAGMA_COLUMNS=
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index 28bac816b69..84b1654ea26 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,4 +1,4 @@
-# inttypes.m4 serial 31
+# inttypes.m4 serial 32
dnl Copyright (C) 2006-2020 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -44,7 +44,7 @@ AC_DEFUN([gl_INTTYPES_PRI_SCN],
#ifdef _WIN64
LLP64
#endif
- ]]),
+ ]])
],
[PRIPTR_PREFIX='"l"'],
[PRIPTR_PREFIX='"ll"'])
diff --git a/m4/sigdescr_np.m4 b/m4/sigdescr_np.m4
new file mode 100644
index 00000000000..f0f3f979e83
--- /dev/null
+++ b/m4/sigdescr_np.m4
@@ -0,0 +1,17 @@
+# sigdescr_np.m4 serial 1
+dnl Copyright (C) 2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SIGDESCR_NP],
+[
+ dnl Persuade glibc <string.h> to declare sigdescr_np().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+ AC_CHECK_FUNCS([sigdescr_np])
+ if test $ac_cv_func_sigdescr_np = no; then
+ HAVE_SIGDESCR_NP=0
+ fi
+])
diff --git a/m4/std-gnu11.m4 b/m4/std-gnu11.m4
index c1ec624b3b3..db833d820f3 100644
--- a/m4/std-gnu11.m4
+++ b/m4/std-gnu11.m4
@@ -70,7 +70,7 @@ _AS_ECHO_LOG([checking for _AC_LANG compiler version])
set X $ac_compile
ac_compiler=$[2]
for ac_option in --version -v -V -qversion -version; do
- m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
done
m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
@@ -135,7 +135,7 @@ _AS_ECHO_LOG([checking for _AC_LANG compiler version])
set X $ac_compile
ac_compiler=$[2]
for ac_option in --version -v -V -qversion; do
- m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
done
m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index e0fa8a51fb3..d5f5d6133a9 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,4 +1,4 @@
-# stdint.m4 serial 55
+# stdint.m4 serial 56
dnl Copyright (C) 2001-2020 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -302,9 +302,10 @@ static const char *macro_values[] =
HAVE_C99_STDINT_H=1
dnl Now see whether the system <stdint.h> works without
dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
- AC_CACHE_CHECK([whether stdint.h predates C++11],
- [gl_cv_header_stdint_predates_cxx11_h],
- [gl_cv_header_stdint_predates_cxx11_h=yes
+ dnl If not, there would be problems when stdint.h is included from C++.
+ AC_CACHE_CHECK([whether stdint.h works without ISO C predefines],
+ [gl_cv_header_stdint_without_STDC_macros],
+ [gl_cv_header_stdint_without_STDC_macros=no
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
@@ -315,13 +316,14 @@ gl_STDINT_INCLUDES
intmax_t im = INTMAX_MAX;
int32_t i32 = INT32_C (0x7fffffff);
]])],
- [gl_cv_header_stdint_predates_cxx11_h=no])])
+ [gl_cv_header_stdint_without_STDC_macros=yes])
+ ])
- if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+ if test $gl_cv_header_stdint_without_STDC_macros = no; then
AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
- [Define to 1 if the system <stdint.h> predates C++11.])
+ [Define to 1 if the system <stdint.h> predates C++11.])
AC_DEFINE([__STDC_LIMIT_MACROS], [1],
- [Define to 1 if the system <stdint.h> predates C++11.])
+ [Define to 1 if the system <stdint.h> predates C++11.])
fi
AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
[gl_cv_header_stdint_width],
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index 516b346b311..29796b8629f 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -5,7 +5,7 @@
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 24
+# serial 27
# Written by Paul Eggert.
@@ -28,7 +28,7 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
]],
[ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
- strerror_r strsignal strverscmp])
+ strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp])
AC_REQUIRE([AC_C_RESTRICT])
])
@@ -44,45 +44,48 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
[
- GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
- GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
- GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
- GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR])
- GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM])
- GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY])
- GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR])
- GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR])
- GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY])
- GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY])
- GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL])
- GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP])
- GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT])
- GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP])
- GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN])
- GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK])
- GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP])
- GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR])
- GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR])
- GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R])
- GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN])
- GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN])
- GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR])
- GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR])
- GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR])
- GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP])
- GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
- GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
- GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR])
- GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN])
- GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK])
- GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN])
- GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP])
- GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R])
- GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR])
- GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R])
- GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL])
- GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
- HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
+ GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
+ GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
+ GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
+ GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR])
+ GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM])
+ GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY])
+ GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR])
+ GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR])
+ GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY])
+ GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY])
+ GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL])
+ GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP])
+ GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT])
+ GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP])
+ GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN])
+ GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK])
+ GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP])
+ GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR])
+ GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR])
+ GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R])
+ GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN])
+ GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN])
+ GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR])
+ GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR])
+ GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR])
+ GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP])
+ GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
+ GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
+ GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR])
+ GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN])
+ GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK])
+ GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN])
+ GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP])
+ GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R])
+ GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR])
+ GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R])
+ GNULIB_STRERRORNAME_NP=0; AC_SUBST([GNULIB_STRERRORNAME_NP])
+ GNULIB_SIGABBREV_NP=0; AC_SUBST([GNULIB_SIGABBREV_NP])
+ GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP])
+ GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL])
+ GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
+ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO])
HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
@@ -102,6 +105,9 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR])
HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R])
HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R])
+ HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP])
+ HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP])
+ HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP])
HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL])
HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP])
REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR])
@@ -117,6 +123,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R])
REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR])
REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R])
+ REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP])
REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL])
UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R])
])
diff --git a/m4/time_rz.m4 b/m4/time_rz.m4
index 2dd64b28488..30161c01e63 100644
--- a/m4/time_rz.m4
+++ b/m4/time_rz.m4
@@ -13,12 +13,12 @@ AC_DEFUN([gl_TIME_RZ],
AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
AC_REQUIRE([AC_STRUCT_TIMEZONE])
- # Mac OS X 10.6 loops forever with some time_t values.
+ # On Mac OS X 10.6, localtime loops forever with some time_t values.
# See Bug#27706, Bug#27736, and
# https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html
- AC_CACHE_CHECK([whether localtime loops forever near extrema],
- [gl_cv_func_localtime_infloop_bug],
- [gl_cv_func_localtime_infloop_bug=no
+ AC_CACHE_CHECK([whether localtime works even near extrema],
+ [gl_cv_func_localtime_works],
+ [gl_cv_func_localtime_works=yes
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[#include <stdlib.h>
@@ -37,10 +37,10 @@ AC_DEFUN([gl_TIME_RZ],
return tm && tm->tm_isdst;
]])],
[(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 ||
- gl_cv_func_localtime_infloop_bug=yes],
+ gl_cv_func_localtime_works=no],
[],
- [gl_cv_func_localtime_infloop_bug="guessing no"])])
- if test "$gl_cv_func_localtime_infloop_bug" = yes; then
+ [gl_cv_func_localtime_works="guessing yes"])])
+ if test "$gl_cv_func_localtime_works" = no; then
AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1,
[Define if localtime-like functions can loop forever on
extreme arguments.])
diff --git a/src/alloc.c b/src/alloc.c
index b16b2f8b93e..b12922b5858 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4457,9 +4457,17 @@ live_string_holding (struct mem_node *m, void *p)
must not be on the free-list. */
if (0 <= offset && offset < sizeof b->strings)
{
- struct Lisp_String *s = p = cp -= offset % sizeof b->strings[0];
- if (s->u.s.data)
- return s;
+ ptrdiff_t off = offset % sizeof b->strings[0];
+ if (off == Lisp_String
+ || off == 0
+ || off == offsetof (struct Lisp_String, u.s.size_byte)
+ || off == offsetof (struct Lisp_String, u.s.intervals)
+ || off == offsetof (struct Lisp_String, u.s.data))
+ {
+ struct Lisp_String *s = p = cp -= off;
+ if (s->u.s.data)
+ return s;
+ }
}
return NULL;
}
@@ -4489,9 +4497,15 @@ live_cons_holding (struct mem_node *m, void *p)
&& (b != cons_block
|| offset / sizeof b->conses[0] < cons_block_index))
{
- struct Lisp_Cons *s = p = cp -= offset % sizeof b->conses[0];
- if (!deadp (s->u.s.car))
- return s;
+ ptrdiff_t off = offset % sizeof b->conses[0];
+ if (off == Lisp_Cons
+ || off == 0
+ || off == offsetof (struct Lisp_Cons, u.s.u.cdr))
+ {
+ struct Lisp_Cons *s = p = cp -= off;
+ if (!deadp (s->u.s.car))
+ return s;
+ }
}
return NULL;
}
@@ -4522,9 +4536,23 @@ live_symbol_holding (struct mem_node *m, void *p)
&& (b != symbol_block
|| offset / sizeof b->symbols[0] < symbol_block_index))
{
- struct Lisp_Symbol *s = p = cp -= offset % sizeof b->symbols[0];
- if (!deadp (s->u.s.function))
- return s;
+ ptrdiff_t off = offset % sizeof b->symbols[0];
+ if (off == Lisp_Symbol
+
+ /* Plain '|| off == 0' would run afoul of GCC 10.2
+ -Wlogical-op, as Lisp_Symbol happens to be zero. */
+ || (Lisp_Symbol != 0 && off == 0)
+
+ || off == offsetof (struct Lisp_Symbol, u.s.name)
+ || off == offsetof (struct Lisp_Symbol, u.s.val)
+ || off == offsetof (struct Lisp_Symbol, u.s.function)
+ || off == offsetof (struct Lisp_Symbol, u.s.plist)
+ || off == offsetof (struct Lisp_Symbol, u.s.next))
+ {
+ struct Lisp_Symbol *s = p = cp -= off;
+ if (!deadp (s->u.s.function))
+ return s;
+ }
}
return NULL;
}
@@ -4536,23 +4564,70 @@ live_symbol_p (struct mem_node *m, void *p)
}
-/* Return true if P is a pointer to a live Lisp float on
- the heap. M is a pointer to the mem_block for P. */
+/* If P is a (possibly-tagged) pointer to a live Lisp_Float on the
+ heap, return the address of the Lisp_Float. Otherwise, return NULL.
+ M is a pointer to the mem_block for P. */
-static bool
-live_float_p (struct mem_node *m, void *p)
+static struct Lisp_Float *
+live_float_holding (struct mem_node *m, void *p)
{
eassert (m->type == MEM_TYPE_FLOAT);
struct float_block *b = m->start;
char *cp = p;
ptrdiff_t offset = cp - (char *) &b->floats[0];
- /* P must point to the start of a Lisp_Float and not be
- one of the unused cells in the current float block. */
- return (0 <= offset && offset < sizeof b->floats
- && offset % sizeof b->floats[0] == 0
+ /* P must point to (or be a tagged pointer to) the start of a
+ Lisp_Float and not be one of the unused cells in the current
+ float block. */
+ if (0 <= offset && offset < sizeof b->floats)
+ {
+ int off = offset % sizeof b->floats[0];
+ if ((off == Lisp_Float || off == 0)
&& (b != float_block
- || offset / sizeof b->floats[0] < float_block_index));
+ || offset / sizeof b->floats[0] < float_block_index))
+ {
+ p = cp - off;
+ return p;
+ }
+ }
+ return NULL;
+}
+
+static bool
+live_float_p (struct mem_node *m, void *p)
+{
+ return live_float_holding (m, p) == p;
+}
+
+/* Return VECTOR if P points within it, NULL otherwise. */
+
+static struct Lisp_Vector *
+live_vector_pointer (struct Lisp_Vector *vector, void *p)
+{
+ void *vvector = vector;
+ char *cvector = vvector;
+ char *cp = p;
+ ptrdiff_t offset = cp - cvector;
+ return ((offset == Lisp_Vectorlike
+ || offset == 0
+ || (sizeof vector->header <= offset
+ && offset < vector_nbytes (vector)
+ && (! (vector->header.size & PSEUDOVECTOR_FLAG)
+ ? (offsetof (struct Lisp_Vector, contents) <= offset
+ && (((offset - offsetof (struct Lisp_Vector, contents))
+ % word_size)
+ == 0))
+ /* For non-bool-vector pseudovectors, treat any pointer
+ past the header as valid since it's too much of a pain
+ to write special-case code for every pseudovector. */
+ : (! PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR)
+ || offset == offsetof (struct Lisp_Bool_Vector, size)
+ || (offsetof (struct Lisp_Bool_Vector, data) <= offset
+ && (((offset
+ - offsetof (struct Lisp_Bool_Vector, data))
+ % sizeof (bits_word))
+ == 0))))))
+ ? vector : NULL);
}
/* If P is a pointer to a live, large vector-like object, return the object.
@@ -4563,10 +4638,7 @@ static struct Lisp_Vector *
live_large_vector_holding (struct mem_node *m, void *p)
{
eassert (m->type == MEM_TYPE_VECTORLIKE);
- struct Lisp_Vector *vp = p;
- struct Lisp_Vector *vector = large_vector_vec (m->start);
- struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
- return vector <= vp && vp < next ? vector : NULL;
+ return live_vector_pointer (large_vector_vec (m->start), p);
}
static bool
@@ -4596,7 +4668,7 @@ live_small_vector_holding (struct mem_node *m, void *p)
{
struct Lisp_Vector *next = ADVANCE (vector, vector_nbytes (vector));
if (vp < next && !PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE))
- return vector;
+ return live_vector_pointer (vector, vp);
vector = next;
}
return NULL;
@@ -4608,117 +4680,33 @@ live_small_vector_p (struct mem_node *m, void *p)
return live_small_vector_holding (m, p) == p;
}
-/* Mark OBJ if we can prove it's a Lisp_Object. */
+/* If P points to Lisp data, mark that as live if it isn't already
+ marked. */
static void
-mark_maybe_object (Lisp_Object obj)
+mark_maybe_pointer (void *p)
{
+ struct mem_node *m;
+
#if USE_VALGRIND
- VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
+ VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
#endif
- int type_tag = XTYPE (obj);
- intptr_t pointer_word_tag = LISP_WORD_TAG (type_tag), offset, ipo;
-
- switch (type_tag)
- {
- case_Lisp_Int: case Lisp_Type_Unused0:
- return;
-
- case Lisp_Symbol:
- offset = (intptr_t) lispsym;
- break;
-
- default:
- offset = 0;
- break;
- }
-
- INT_ADD_WRAPV ((intptr_t) XLP (obj), offset - pointer_word_tag, &ipo);
- void *po = (void *) ipo;
-
/* If the pointer is in the dump image and the dump has a record
of the object starting at the place where the pointer points, we
definitely have an object. If the pointer is in the dump image
and the dump has no idea what the pointer is pointing at, we
definitely _don't_ have an object. */
- if (pdumper_object_p (po))
+ if (pdumper_object_p (p))
{
/* Don't use pdumper_object_p_precise here! It doesn't check the
tag bits. OBJ here might be complete garbage, so we need to
verify both the pointer and the tag. */
- if (pdumper_find_object_type (po) == type_tag)
- mark_object (obj);
- return;
- }
-
- struct mem_node *m = mem_find (po);
-
- if (m != MEM_NIL)
- {
- bool mark_p = false;
-
- switch (type_tag)
- {
- case Lisp_String:
- mark_p = m->type == MEM_TYPE_STRING && live_string_p (m, po);
- break;
-
- case Lisp_Cons:
- mark_p = m->type == MEM_TYPE_CONS && live_cons_p (m, po);
- break;
-
- case Lisp_Symbol:
- mark_p = m->type == MEM_TYPE_SYMBOL && live_symbol_p (m, po);
- break;
-
- case Lisp_Float:
- mark_p = m->type == MEM_TYPE_FLOAT && live_float_p (m, po);
- break;
-
- case Lisp_Vectorlike:
- mark_p = (m->type == MEM_TYPE_VECTOR_BLOCK
- ? live_small_vector_p (m, po)
- : (m->type == MEM_TYPE_VECTORLIKE
- && live_large_vector_p (m, po)));
- break;
-
- default:
- eassume (false);
- }
-
- if (mark_p)
- mark_object (obj);
- }
-}
-
-void
-mark_maybe_objects (Lisp_Object const *array, ptrdiff_t nelts)
-{
- for (Lisp_Object const *lim = array + nelts; array < lim; array++)
- mark_maybe_object (*array);
-}
-
-/* If P points to Lisp data, mark that as live if it isn't already
- marked. */
-
-static void
-mark_maybe_pointer (void *p)
-{
- struct mem_node *m;
-
-#if USE_VALGRIND
- VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
-#endif
-
- if (pdumper_object_p (p))
- {
int type = pdumper_find_object_type (p);
if (pdumper_valid_object_type_p (type))
mark_object (type == Lisp_Symbol
? make_lisp_symbol (p)
: make_lisp_ptr (p, type));
- /* See mark_maybe_object for why we can confidently return. */
return;
}
@@ -4762,9 +4750,12 @@ mark_maybe_pointer (void *p)
break;
case MEM_TYPE_FLOAT:
- if (! live_float_p (m, p))
- return;
- obj = make_lisp_ptr (p, Lisp_Float);
+ {
+ struct Lisp_Float *h = live_float_holding (m, p);
+ if (!h)
+ return;
+ obj = make_lisp_ptr (h, Lisp_Float);
+ }
break;
case MEM_TYPE_VECTORLIKE:
@@ -4849,11 +4840,6 @@ mark_memory (void const *start, void const *end)
intptr_t ip;
INT_ADD_WRAPV ((intptr_t) p, (intptr_t) lispsym, &ip);
mark_maybe_pointer ((void *) ip);
-
- verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0);
- if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT
- || (uintptr_t) pp % alignof (Lisp_Object) == 0)
- mark_maybe_object (*(Lisp_Object const *) pp);
}
}
@@ -6261,7 +6247,6 @@ mark_vectorlike (union vectorlike_header *header)
{
struct Lisp_Vector *ptr = (struct Lisp_Vector *) header;
ptrdiff_t size = ptr->header.size;
- ptrdiff_t i;
eassert (!vector_marked_p (ptr));
@@ -6276,8 +6261,7 @@ mark_vectorlike (union vectorlike_header *header)
the number of Lisp_Object fields that we should trace.
The distinction is used e.g. by Lisp_Process which places extra
non-Lisp_Object fields at the end of the structure... */
- for (i = 0; i < size; i++) /* ...and then mark its elements. */
- mark_object (ptr->contents[i]);
+ mark_objects (ptr->contents, size);
}
/* Like mark_vectorlike but optimized for char-tables (and
@@ -6376,8 +6360,7 @@ mark_face_cache (struct face_cache *c)
{
if (c)
{
- int i, j;
- for (i = 0; i < c->used; ++i)
+ for (int i = 0; i < c->used; i++)
{
struct face *face = FACE_FROM_ID_OR_NULL (c->f, i);
@@ -6386,8 +6369,7 @@ mark_face_cache (struct face_cache *c)
if (face->font && !vectorlike_marked_p (&face->font->header))
mark_vectorlike (&face->font->header);
- for (j = 0; j < LFACE_VECTOR_SIZE; ++j)
- mark_object (face->lface[j]);
+ mark_objects (face->lface, LFACE_VECTOR_SIZE);
}
}
}
@@ -6500,6 +6482,13 @@ mark_hash_table (struct Lisp_Vector *ptr)
}
}
+void
+mark_objects (Lisp_Object *obj, ptrdiff_t n)
+{
+ for (ptrdiff_t i = 0; i < n; i++)
+ mark_object (obj[i]);
+}
+
/* Determine type of generic Lisp_Object and mark it accordingly.
This function implements a straightforward depth-first marking
diff --git a/src/callproc.c b/src/callproc.c
index 65c858393a9..e3346e2eabb 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -231,6 +231,9 @@ DESTINATION can also have the form (REAL-BUFFER STDERR-FILE); in that case,
Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
Remaining arguments ARGS are strings passed as command arguments to PROGRAM.
+If PROGRAM is not an absolute file name, `call-process' will look for
+PROGRAM in `exec-path' (which is a list of directories).
+
If executable PROGRAM can't be found as an executable, `call-process'
signals a Lisp error. `call-process' reports errors in execution of
the program only through its return and output.
@@ -1060,6 +1063,9 @@ Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
Remaining arguments ARGS are passed to PROGRAM at startup as command-line
arguments.
+If PROGRAM is not an absolute file name, `call-process-region' will
+look for PROGRAM in `exec-path' (which is a list of directories).
+
If BUFFER is 0, `call-process-region' returns immediately with value nil.
Otherwise it waits for PROGRAM to terminate
and returns a numeric exit status or a signal description string.
diff --git a/src/ccl.c b/src/ccl.c
index 86debeef0e5..796698eb1ce 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1374,7 +1374,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
if (! (IN_INT_RANGE (eop) && CHARACTERP (opl)))
CCL_INVALID_CMD;
reg[RRR] = charset_unicode;
- reg[rrr] = eop;
+ reg[rrr] = XFIXNUM (opl);
reg[7] = 1; /* r7 true for success */
}
else
diff --git a/src/character.c b/src/character.c
index 4902e564b1d..5860f6a0c8c 100644
--- a/src/character.c
+++ b/src/character.c
@@ -495,9 +495,9 @@ parse_str_as_multibyte (const unsigned char *str, ptrdiff_t len,
/* Arrange unibyte text at STR of NBYTES bytes as a multibyte text.
It actually converts only such 8-bit characters that don't construct
- a multibyte sequence to multibyte forms of Latin-1 characters. If
- NCHARS is nonzero, set *NCHARS to the number of characters in the
- text. It is assured that we can use LEN bytes at STR as a work
+ a multibyte sequence to multibyte forms of raw bytes. If NCHARS
+ is nonzero, set *NCHARS to the number of characters in the text.
+ It is assured that we can use LEN bytes at STR as a work
area and that is enough. Return the number of bytes of the
resulting text. */
diff --git a/src/coding.c b/src/coding.c
index 51bd441de9d..221a9cad898 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -10895,7 +10895,10 @@ usage: (define-coding-system-internal ...) */)
ASET (attrs, coding_attr_base_name, name);
Lisp_Object val = args[coding_arg_mnemonic];
- if (! STRINGP (val))
+ /* decode_mode_spec_coding assumes the mnemonic is a single character. */
+ if (STRINGP (val))
+ val = make_fixnum (STRING_CHAR (SDATA (val)));
+ else
CHECK_CHARACTER (val);
ASET (attrs, coding_attr_mnemonic, val);
@@ -11408,7 +11411,10 @@ DEFUN ("coding-system-put", Fcoding_system_put, Scoding_system_put,
attrs = AREF (spec, 0);
if (EQ (prop, QCmnemonic))
{
- if (! STRINGP (val))
+ /* decode_mode_spec_coding assumes the mnemonic is a single character. */
+ if (STRINGP (val))
+ val = make_fixnum (STRING_CHAR (SDATA (val)));
+ else
CHECK_CHARACTER (val);
ASET (attrs, coding_attr_mnemonic, val);
}
diff --git a/src/dbusbind.c b/src/dbusbind.c
index f6a0879e6a9..4fce92521a4 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1261,6 +1261,7 @@ usage: (dbus-message-internal &rest REST) */)
Lisp_Object path = Qnil;
Lisp_Object interface = Qnil;
Lisp_Object member = Qnil;
+ Lisp_Object error_name = Qnil;
Lisp_Object result;
DBusConnection *connection;
DBusMessage *dmessage;
@@ -1298,7 +1299,9 @@ usage: (dbus-message-internal &rest REST) */)
else /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */
{
serial = xd_extract_unsigned (args[3], TYPE_MAXIMUM (dbus_uint32_t));
- count = 4;
+ if (mtype == DBUS_MESSAGE_TYPE_ERROR)
+ error_name = args[4];
+ count = (mtype == DBUS_MESSAGE_TYPE_ERROR) ? 5 : 4;
}
/* Check parameters. */
@@ -1341,13 +1344,22 @@ usage: (dbus-message-internal &rest REST) */)
XD_OBJECT_TO_STRING (interface),
XD_OBJECT_TO_STRING (member));
break;
- default: /* DBUS_MESSAGE_TYPE_METHOD_RETURN, DBUS_MESSAGE_TYPE_ERROR */
+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
ui_serial = serial;
XD_DEBUG_MESSAGE ("%s %s %s %u",
XD_MESSAGE_TYPE_TO_STRING (mtype),
XD_OBJECT_TO_STRING (bus),
XD_OBJECT_TO_STRING (service),
ui_serial);
+ break;
+ default: /* DBUS_MESSAGE_TYPE_ERROR */
+ ui_serial = serial;
+ XD_DEBUG_MESSAGE ("%s %s %s %u %s",
+ XD_MESSAGE_TYPE_TO_STRING (mtype),
+ XD_OBJECT_TO_STRING (bus),
+ XD_OBJECT_TO_STRING (service),
+ ui_serial,
+ XD_OBJECT_TO_STRING (error_name));
}
/* Retrieve bus address. */
@@ -1406,7 +1418,7 @@ usage: (dbus-message-internal &rest REST) */)
XD_SIGNAL1 (build_string ("Unable to create a return message"));
if ((mtype == DBUS_MESSAGE_TYPE_ERROR)
- && (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED)))
+ && (!dbus_message_set_error_name (dmessage, SSDATA (error_name))))
XD_SIGNAL1 (build_string ("Unable to create an error message"));
}
diff --git a/src/dispextern.h b/src/dispextern.h
index 311867a0c8c..956ca96eb61 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3056,9 +3056,9 @@ struct image
if necessary. */
unsigned long background;
- /* Foreground and background colors of the frame on which the image
+ /* Foreground and background colors of the face on which the image
is created. */
- unsigned long frame_foreground, frame_background;
+ unsigned long face_foreground, face_background;
/* True if this image has a `transparent' background -- that is, is
uses an image mask. The accessor macro for this is
@@ -3475,7 +3475,7 @@ void clear_image_caches (Lisp_Object);
void mark_image_cache (struct image_cache *);
bool valid_image_p (Lisp_Object);
void prepare_image_for_display (struct frame *, struct image *);
-ptrdiff_t lookup_image (struct frame *, Lisp_Object);
+ptrdiff_t lookup_image (struct frame *, Lisp_Object, int);
#if defined HAVE_X_WINDOWS || defined USE_CAIRO || defined HAVE_NS
#define RGB_PIXEL_COLOR unsigned long
diff --git a/src/editfns.c b/src/editfns.c
index cb09ea8a31a..7e1e24ef16a 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -707,7 +707,8 @@ If the scan reaches the end of the buffer, return that position.
This function ignores text display directionality; it returns the
position of the first character in logical order, i.e. the smallest
-character position on the line.
+character position on the logical line. See `vertical-motion' for
+movement by screen lines.
This function constrains the returned position to the current field
unless that position would be on a different line from the original,
@@ -1876,9 +1877,6 @@ determines whether case is significant or ignored. */)
#undef EQUAL
#define USE_HEURISTIC
-/* Counter used to rarely_quit in replace-buffer-contents. */
-static unsigned short rbc_quitcounter;
-
#define XVECREF_YVECREF_EQUAL(ctx, xoff, yoff) \
buffer_chars_equal ((ctx), (xoff), (yoff))
@@ -1899,10 +1897,11 @@ static unsigned short rbc_quitcounter;
unsigned char *deletions; \
unsigned char *insertions; \
struct timespec time_limit; \
- unsigned int early_abort_tests;
+ sys_jmp_buf jmp; \
+ unsigned short quitcounter;
-#define NOTE_DELETE(ctx, xoff) set_bit ((ctx)->deletions, (xoff))
-#define NOTE_INSERT(ctx, yoff) set_bit ((ctx)->insertions, (yoff))
+#define NOTE_DELETE(ctx, xoff) set_bit ((ctx)->deletions, xoff)
+#define NOTE_INSERT(ctx, yoff) set_bit ((ctx)->insertions, yoff)
#define EARLY_ABORT(ctx) compareseq_early_abort (ctx)
struct context;
@@ -1955,6 +1954,28 @@ nil. */)
if (a == b)
error ("Cannot replace a buffer with itself");
+ ptrdiff_t too_expensive;
+ if (NILP (max_costs))
+ too_expensive = 1000000;
+ else if (FIXNUMP (max_costs))
+ too_expensive = clip_to_bounds (0, XFIXNUM (max_costs), PTRDIFF_MAX);
+ else
+ {
+ CHECK_INTEGER (max_costs);
+ too_expensive = NILP (Fnatnump (max_costs)) ? 0 : PTRDIFF_MAX;
+ }
+
+ struct timespec time_limit = make_timespec (0, -1);
+ if (!NILP (max_secs))
+ {
+ struct timespec
+ tlim = timespec_add (current_timespec (),
+ lisp_time_argument (max_secs)),
+ tmax = make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_HZ - 1);
+ if (timespec_cmp (tlim, tmax) < 0)
+ time_limit = tlim;
+ }
+
ptrdiff_t min_a = BEGV;
ptrdiff_t min_b = BUF_BEGV (b);
ptrdiff_t size_a = ZV - min_a;
@@ -1984,36 +2005,24 @@ nil. */)
ptrdiff_t count = SPECPDL_INDEX ();
- /* FIXME: It is not documented how to initialize the contents of the
- context structure. This code cargo-cults from the existing
- caller in src/analyze.c of GNU Diffutils, which appears to
- work. */
ptrdiff_t diags = size_a + size_b + 3;
+ ptrdiff_t del_bytes = size_a / CHAR_BIT + 1;
+ ptrdiff_t ins_bytes = size_b / CHAR_BIT + 1;
ptrdiff_t *buffer;
+ ptrdiff_t bytes_needed;
+ if (INT_MULTIPLY_WRAPV (diags, 2 * sizeof *buffer, &bytes_needed)
+ || INT_ADD_WRAPV (del_bytes + ins_bytes, bytes_needed, &bytes_needed))
+ memory_full (SIZE_MAX);
USE_SAFE_ALLOCA;
- SAFE_NALLOCA (buffer, 2, diags);
+ buffer = SAFE_ALLOCA (bytes_needed);
+ unsigned char *deletions_insertions = memset (buffer + 2 * diags, 0,
+ del_bytes + ins_bytes);
- if (NILP (max_costs))
- XSETFASTINT (max_costs, 1000000);
- else
- CHECK_FIXNUM (max_costs);
-
- struct timespec time_limit = make_timespec (0, -1);
- if (!NILP (max_secs))
- {
- struct timespec
- tlim = timespec_add (current_timespec (),
- lisp_time_argument (max_secs)),
- tmax = make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_HZ - 1);
- if (timespec_cmp (tlim, tmax) < 0)
- time_limit = tlim;
- }
-
- /* Micro-optimization: Casting to size_t generates much better
- code. */
- ptrdiff_t del_bytes = (size_t) size_a / CHAR_BIT + 1;
- ptrdiff_t ins_bytes = (size_t) size_b / CHAR_BIT + 1;
+ /* FIXME: It is not documented how to initialize the contents of the
+ context structure. This code cargo-cults from the existing
+ caller in src/analyze.c of GNU Diffutils, which appears to
+ work. */
struct context ctx = {
.buffer_a = a,
.buffer_b = b,
@@ -2021,21 +2030,22 @@ nil. */)
.beg_b = min_b,
.a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
.b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
- .deletions = SAFE_ALLOCA (del_bytes),
- .insertions = SAFE_ALLOCA (ins_bytes),
+ .deletions = deletions_insertions,
+ .insertions = deletions_insertions + del_bytes,
.fdiag = buffer + size_b + 1,
.bdiag = buffer + diags + size_b + 1,
.heuristic = true,
- .too_expensive = XFIXNUM (max_costs),
+ .too_expensive = too_expensive,
.time_limit = time_limit,
- .early_abort_tests = 0
};
- memclear (ctx.deletions, del_bytes);
- memclear (ctx.insertions, ins_bytes);
/* compareseq requires indices to be zero-based. We add BEGV back
later. */
- bool early_abort = compareseq (0, size_a, 0, size_b, false, &ctx);
+ bool early_abort;
+ if (! sys_setjmp (ctx.jmp))
+ early_abort = compareseq (0, size_a, 0, size_b, false, &ctx);
+ else
+ early_abort = true;
if (early_abort)
{
@@ -2045,8 +2055,6 @@ nil. */)
return Qnil;
}
- rbc_quitcounter = 0;
-
Fundo_boundary ();
bool modification_hooks_inhibited = false;
record_unwind_protect_excursion ();
@@ -2070,13 +2078,12 @@ nil. */)
walk backwards, we don’t have to keep the positions in sync. */
while (i >= 0 || j >= 0)
{
- /* Allow the user to quit if this gets too slow. */
- rarely_quit (++rbc_quitcounter);
+ rarely_quit (++ctx.quitcounter);
/* Check whether there is a change (insertion or deletion)
before the current position. */
- if ((i > 0 && bit_is_set (ctx.deletions, i - 1)) ||
- (j > 0 && bit_is_set (ctx.insertions, j - 1)))
+ if ((i > 0 && bit_is_set (ctx.deletions, i - 1))
+ || (j > 0 && bit_is_set (ctx.insertions, j - 1)))
{
ptrdiff_t end_a = min_a + i;
ptrdiff_t end_b = min_b + j;
@@ -2086,8 +2093,6 @@ nil. */)
while (j > 0 && bit_is_set (ctx.insertions, j - 1))
--j;
- rarely_quit (rbc_quitcounter++);
-
ptrdiff_t beg_a = min_a + i;
ptrdiff_t beg_b = min_b + j;
eassert (beg_a <= end_a);
@@ -2107,7 +2112,6 @@ nil. */)
}
SAFE_FREE_UNBIND_TO (count, Qnil);
- rbc_quitcounter = 0;
if (modification_hooks_inhibited)
{
@@ -2121,21 +2125,15 @@ nil. */)
static void
set_bit (unsigned char *a, ptrdiff_t i)
{
- eassert (i >= 0);
- /* Micro-optimization: Casting to size_t generates much better
- code. */
- size_t j = i;
- a[j / CHAR_BIT] |= (1 << (j % CHAR_BIT));
+ eassume (0 <= i);
+ a[i / CHAR_BIT] |= (1 << (i % CHAR_BIT));
}
static bool
bit_is_set (const unsigned char *a, ptrdiff_t i)
{
- eassert (i >= 0);
- /* Micro-optimization: Casting to size_t generates much better
- code. */
- size_t j = i;
- return a[j / CHAR_BIT] & (1 << (j % CHAR_BIT));
+ eassume (0 <= i);
+ return a[i / CHAR_BIT] & (1 << (i % CHAR_BIT));
}
/* Return true if the characters at position POS_A of buffer
@@ -2154,12 +2152,16 @@ static bool
buffer_chars_equal (struct context *ctx,
ptrdiff_t pos_a, ptrdiff_t pos_b)
{
+ if (!++ctx->quitcounter)
+ {
+ maybe_quit ();
+ if (compareseq_early_abort (ctx))
+ sys_longjmp (ctx->jmp, 1);
+ }
+
pos_a += ctx->beg_a;
pos_b += ctx->beg_b;
- /* Allow the user to escape out of a slow compareseq call. */
- rarely_quit (++rbc_quitcounter);
-
ptrdiff_t bpos_a =
ctx->a_unibyte ? pos_a : buf_charpos_to_bytepos (ctx->buffer_a, pos_a);
ptrdiff_t bpos_b =
diff --git a/src/eval.c b/src/eval.c
index 9daae92e55a..126ee2e9555 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3960,7 +3960,7 @@ mark_specpdl (union specbinding *first, union specbinding *ptr)
break;
case SPECPDL_UNWIND_ARRAY:
- mark_maybe_objects (pdl->unwind_array.array, pdl->unwind_array.nelts);
+ mark_objects (pdl->unwind_array.array, pdl->unwind_array.nelts);
break;
case SPECPDL_UNWIND_EXCURSION:
@@ -3974,8 +3974,7 @@ mark_specpdl (union specbinding *first, union specbinding *ptr)
mark_object (backtrace_function (pdl));
if (nargs == UNEVALLED)
nargs = 1;
- while (nargs--)
- mark_object (backtrace_args (pdl)[nargs]);
+ mark_objects (backtrace_args (pdl), nargs);
}
break;
diff --git a/src/fileio.c b/src/fileio.c
index 37072d9b6bd..1e4ca82e5f3 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -947,6 +947,22 @@ the root directory. */)
)
{
default_directory = Fexpand_file_name (default_directory, Qnil);
+
+ /* The above expansion might have produced a remote file name,
+ so give the handlers one last chance to DTRT. This can
+ happen when both NAME and DEFAULT-DIRECTORY arguments are
+ relative file names, and the buffer's default-directory is
+ remote. */
+ handler = Ffind_file_name_handler (default_directory,
+ Qexpand_file_name);
+ if (!NILP (handler))
+ {
+ handled_name = call3 (handler, Qexpand_file_name,
+ name, default_directory);
+ if (STRINGP (handled_name))
+ return handled_name;
+ error ("Invalid handler in `file-name-handler-alist'");
+ }
}
}
multibyte = STRING_MULTIBYTE (name);
diff --git a/src/font.c b/src/font.c
index 5c01c7ff796..2786a772dc3 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5521,11 +5521,11 @@ footprint in sessions that use lots of different fonts. */);
#endif
DEFVAR_BOOL ("xft-ignore-color-fonts",
- Vxft_ignore_color_fonts,
+ xft_ignore_color_fonts,
doc: /*
Non-nil means don't query fontconfig for color fonts, since they often
cause Xft crashes. Only has an effect in Xft builds. */);
- Vxft_ignore_color_fonts = 1;
+ xft_ignore_color_fonts = true;
#ifdef HAVE_WINDOW_SYSTEM
#ifdef HAVE_FREETYPE
diff --git a/src/fringe.c b/src/fringe.c
index c3d64fefc82..75496692d53 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1733,11 +1733,7 @@ If nil, also continue lines which are exactly as wide as the window. */);
void
mark_fringe_data (void)
{
- int i;
-
- for (i = 0; i < max_fringe_bitmaps; i++)
- if (!NILP (fringe_faces[i]))
- mark_object (fringe_faces[i]);
+ mark_objects (fringe_faces, max_fringe_bitmaps);
}
/* Initialize this module when Emacs starts. */
diff --git a/src/ftfont.c b/src/ftfont.c
index a904007a329..6fca9c85093 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -768,7 +768,7 @@ ftfont_spec_pattern (Lisp_Object spec, char *otlayout, struct OpenTypeSpec **ots
#if defined HAVE_XFT && defined FC_COLOR
/* We really don't like color fonts, they cause Xft crashes. See
Bug#30874. */
- if (Vxft_ignore_color_fonts
+ if (xft_ignore_color_fonts
&& ! FcPatternAddBool (pattern, FC_COLOR, FcFalse))
goto err;
#endif
@@ -911,7 +911,7 @@ ftfont_list (struct frame *f, Lisp_Object spec)
returns them even when it shouldn't really do so, so we
need to manually skip them here (Bug#37786). */
FcBool b;
- if (Vxft_ignore_color_fonts
+ if (xft_ignore_color_fonts
&& FcPatternGetBool (fontset->fonts[i], FC_COLOR, 0, &b)
== FcResultMatch && b != FcFalse)
continue;
diff --git a/src/gnutls.c b/src/gnutls.c
index 416fb154701..0010553a9d4 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -2298,6 +2298,8 @@ gnutls_symmetric_aead (bool encrypting, gnutls_cipher_algorithm_t gca,
# endif
}
+static Lisp_Object cipher_cache;
+
static Lisp_Object
gnutls_symmetric (bool encrypting, Lisp_Object cipher,
Lisp_Object key, Lisp_Object iv,
@@ -2329,7 +2331,9 @@ gnutls_symmetric (bool encrypting, Lisp_Object cipher,
if (SYMBOLP (cipher))
{
- info = Fassq (cipher, Fgnutls_ciphers ());
+ if (NILP (cipher_cache))
+ cipher_cache = Fgnutls_ciphers ();
+ info = Fassq (cipher, cipher_cache);
if (!CONSP (info))
xsignal2 (Qerror,
build_string ("GnuTLS cipher is invalid or not found"),
@@ -2914,6 +2918,9 @@ level in the ones. For builds without libgnutls, the value is -1. */);
defsubr (&Sgnutls_hash_digest);
defsubr (&Sgnutls_symmetric_encrypt);
defsubr (&Sgnutls_symmetric_decrypt);
+
+ cipher_cache = Qnil;
+ staticpro (&cipher_cache);
#endif
DEFVAR_INT ("gnutls-log-level", global_gnutls_log_level,
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 1fe160acca9..fafd94c0f71 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -5113,7 +5113,7 @@ update_frame_tool_bar (struct frame *f)
else
idx = -1;
- img_id = lookup_image (f, image);
+ img_id = lookup_image (f, image, -1);
img = IMAGE_FROM_ID (f, img_id);
prepare_image_for_display (f, img);
diff --git a/src/image.c b/src/image.c
index 643b3d0a1f4..d8c34669cc4 100644
--- a/src/image.c
+++ b/src/image.c
@@ -758,10 +758,10 @@ struct image_type
/* Load IMG which is used on frame F from information contained in
IMG->spec. Value is true if successful. */
- bool (*load) (struct frame *f, struct image *img);
+ bool (*load_img) (struct frame *f, struct image *img);
/* Free resources of image IMG which is used on frame F. */
- void (*free) (struct frame *f, struct image *img);
+ void (*free_img) (struct frame *f, struct image *img);
#ifdef WINDOWSNT
/* Initialization function (used for dynamic loading of image
@@ -1081,7 +1081,7 @@ calling this function. */)
if (valid_image_p (spec))
{
struct frame *f = decode_window_system_frame (frame);
- ptrdiff_t id = lookup_image (f, spec);
+ ptrdiff_t id = lookup_image (f, spec, -1);
struct image *img = IMAGE_FROM_ID (f, id);
int width = img->width + 2 * img->hmargin;
int height = img->height + 2 * img->vmargin;
@@ -1111,7 +1111,7 @@ or omitted means use the selected frame. */)
if (valid_image_p (spec))
{
struct frame *f = decode_window_system_frame (frame);
- ptrdiff_t id = lookup_image (f, spec);
+ ptrdiff_t id = lookup_image (f, spec, -1);
struct image *img = IMAGE_FROM_ID (f, id);
if (img->mask)
mask = Qt;
@@ -1134,7 +1134,7 @@ or omitted means use the selected frame. */)
if (valid_image_p (spec))
{
struct frame *f = decode_window_system_frame (frame);
- ptrdiff_t id = lookup_image (f, spec);
+ ptrdiff_t id = lookup_image (f, spec, -1);
struct image *img = IMAGE_FROM_ID (f, id);
ext = img->lisp_data;
}
@@ -1197,13 +1197,8 @@ free_image (struct frame *f, struct image *img)
XRenderFreePicture (FRAME_X_DISPLAY (f), img->mask_picture);
#endif
- /* Windows NT redefines 'free', but in this file, we need to
- avoid the redefinition. */
-#ifdef WINDOWSNT
-#undef free
-#endif
/* Free resources, then free IMG. */
- img->type->free (f, img);
+ img->type->free_img (f, img);
xfree (img);
}
}
@@ -1249,7 +1244,7 @@ prepare_image_for_display (struct frame *f, struct image *img)
/* If IMG doesn't have a pixmap yet, load it now, using the image
type dependent loader function. */
if (img->pixmap == NO_PIXMAP && !img->load_failed_p)
- img->load_failed_p = ! img->type->load (f, img);
+ img->load_failed_p = ! img->type->load_img (f, img);
#ifdef USE_CAIRO
if (!img->load_failed_p)
@@ -1266,7 +1261,7 @@ prepare_image_for_display (struct frame *f, struct image *img)
if (img->cr_data == NULL)
{
img->load_failed_p = 1;
- img->type->free (f, img);
+ img->type->free_img (f, img);
}
}
unblock_input ();
@@ -1611,7 +1606,9 @@ equal_lists (Lisp_Object a, Lisp_Object b)
/* Find an image matching SPEC in the cache, and return it. If no
image is found, return NULL. */
static struct image *
-search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash)
+search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash,
+ unsigned long foreground, unsigned long background,
+ bool ignore_colors)
{
struct image *img;
struct image_cache *c = FRAME_IMAGE_CACHE (f);
@@ -1633,9 +1630,9 @@ search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash)
for (img = c->buckets[i]; img; img = img->next)
if (img->hash == hash
- && !equal_lists (img->spec, spec)
- && img->frame_foreground == FRAME_FOREGROUND_PIXEL (f)
- && img->frame_background == FRAME_BACKGROUND_PIXEL (f))
+ && equal_lists (img->spec, spec)
+ && (ignore_colors || (img->face_foreground == foreground
+ && img->face_background == background)))
break;
return img;
}
@@ -1646,8 +1643,13 @@ search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash)
static void
uncache_image (struct frame *f, Lisp_Object spec)
{
- struct image *img = search_image_cache (f, spec, sxhash (spec));
- if (img)
+ struct image *img;
+
+ /* Because the background colors are based on the current face, we
+ can have multiple copies of an image with the same spec. We want
+ to remove them all to ensure the user doesn't see an old version
+ of the image when the face changes. */
+ while ((img = search_image_cache (f, spec, sxhash (spec), 0, 0, true)))
{
free_image (f, img);
/* As display glyphs may still be referring to the image ID, we
@@ -2133,7 +2135,17 @@ image_set_transform (struct frame *f, struct image *img)
/* Determine size. */
int width, height;
- compute_image_size (img->width, img->height, img->spec, &width, &height);
+
+#ifdef HAVE_RSVG
+ /* SVGs are pre-scaled to the correct size. */
+ if (EQ (image_spec_value (img->spec, QCtype, NULL), Qsvg))
+ {
+ width = img->width;
+ height = img->height;
+ }
+ else
+#endif
+ compute_image_size (img->width, img->height, img->spec, &width, &height);
/* Determine rotation. */
double rotation = 0.0;
@@ -2312,11 +2324,16 @@ image_set_transform (struct frame *f, struct image *img)
SPEC must be a valid Lisp image specification (see valid_image_p). */
ptrdiff_t
-lookup_image (struct frame *f, Lisp_Object spec)
+lookup_image (struct frame *f, Lisp_Object spec, int face_id)
{
struct image *img;
EMACS_UINT hash;
+ struct face *face = (face_id >= 0) ? FACE_FROM_ID (f, face_id)
+ : FACE_FROM_ID (f, DEFAULT_FACE_ID);
+ unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f);
+ unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f);
+
/* F must be a window-system frame, and SPEC must be a valid image
specification. */
eassert (FRAME_WINDOW_P (f));
@@ -2324,7 +2341,7 @@ lookup_image (struct frame *f, Lisp_Object spec)
/* Look up SPEC in the hash table of the image cache. */
hash = sxhash (spec);
- img = search_image_cache (f, spec, hash);
+ img = search_image_cache (f, spec, hash, foreground, background, true);
if (img && img->load_failed_p)
{
free_image (f, img);
@@ -2337,9 +2354,9 @@ lookup_image (struct frame *f, Lisp_Object spec)
block_input ();
img = make_image (spec, hash);
cache_image (f, img);
- img->load_failed_p = ! img->type->load (f, img);
- img->frame_foreground = FRAME_FOREGROUND_PIXEL (f);
- img->frame_background = FRAME_BACKGROUND_PIXEL (f);
+ img->face_foreground = foreground;
+ img->face_background = background;
+ img->load_failed_p = ! img->type->load_img (f, img);
/* If we can't load the image, and we don't have a width and
height, use some arbitrary width and height so that we can
@@ -2393,8 +2410,7 @@ lookup_image (struct frame *f, Lisp_Object spec)
if (!NILP (bg))
{
img->background
- = image_alloc_image_color (f, img, bg,
- FRAME_BACKGROUND_PIXEL (f));
+ = image_alloc_image_color (f, img, bg, background);
img->background_valid = 1;
}
}
@@ -3667,8 +3683,8 @@ xbm_load_image (struct frame *f, struct image *img, char *contents, char *end)
&data, 0);
if (rc)
{
- unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
- unsigned long background = FRAME_BACKGROUND_PIXEL (f);
+ unsigned long foreground = img->face_foreground;
+ unsigned long background = img->face_background;
bool non_default_colors = 0;
Lisp_Object value;
@@ -3764,8 +3780,8 @@ xbm_load (struct frame *f, struct image *img)
{
struct image_keyword fmt[XBM_LAST];
Lisp_Object data;
- unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
- unsigned long background = FRAME_BACKGROUND_PIXEL (f);
+ unsigned long foreground = img->face_foreground;
+ unsigned long background = img->face_background;
bool non_default_colors = 0;
char *bits;
bool parsed_p;
@@ -6125,8 +6141,8 @@ pbm_load (struct frame *f, struct image *img)
unsigned char c = 0;
int g;
struct image_keyword fmt[PBM_LAST];
- unsigned long fg = FRAME_FOREGROUND_PIXEL (f);
- unsigned long bg = FRAME_BACKGROUND_PIXEL (f);
+ unsigned long fg = img->face_foreground;
+ unsigned long bg = img->face_background;
/* Parse the image specification. */
memcpy (fmt, pbm_format, sizeof fmt);
parse_image_spec (img->spec, fmt, PBM_LAST, Qpbm);
@@ -9433,6 +9449,7 @@ enum svg_keyword_index
SVG_ALGORITHM,
SVG_HEURISTIC_MASK,
SVG_MASK,
+ SVG_FOREGROUND,
SVG_BACKGROUND,
SVG_LAST
};
@@ -9451,6 +9468,7 @@ static const struct image_keyword svg_format[SVG_LAST] =
{":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
{":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
{":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
+ {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0},
{":background", IMAGE_STRING_OR_NIL_VALUE, 0}
};
@@ -9715,6 +9733,8 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
int height;
const guint8 *pixels;
int rowstride;
+ char *wrapped_contents = NULL;
+ ptrdiff_t wrapped_size;
#if ! GLIB_CHECK_VERSION (2, 36, 0)
/* g_type_init is a glib function that must be called prior to
@@ -9722,6 +9742,8 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
g_type_init ();
#endif
+ /* Parse the unmodified SVG data so we can get its initial size. */
+
#if LIBRSVG_CHECK_VERSION (2, 32, 0)
GInputStream *input_stream
= g_memory_input_stream_new_from_data (contents, size, NULL);
@@ -9750,6 +9772,105 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
rsvg_handle_write (rsvg_handle, (unsigned char *) contents, size, &err);
if (err) goto rsvg_error;
+ /* The parsing is complete, rsvg_handle is ready to be used, close
+ it for further writes. */
+ rsvg_handle_close (rsvg_handle, &err);
+ if (err) goto rsvg_error;
+#endif
+
+ /* Get the image dimensions. */
+ rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
+
+ /* We are now done with the unmodified data. */
+ g_object_unref (rsvg_handle);
+
+ /* Calculate the final image size. */
+ compute_image_size (dimension_data.width, dimension_data.height,
+ img->spec, &width, &height);
+
+ /* Wrap the SVG data in another SVG. This allows us to set the
+ width and height, as well as modify the foreground and background
+ colors. */
+ {
+ Lisp_Object value;
+ unsigned long foreground = img->face_foreground;
+ unsigned long background = img->face_background;
+
+ Lisp_Object encoded_contents
+ = Fbase64_encode_string (make_unibyte_string (contents, size), Qt);
+
+ /* The wrapper sets the foreground color, width and height, and
+ viewBox must contain the dimensions of the original image. It
+ also draws a rectangle over the whole space, set to the
+ background color, before including the original image. This
+ acts to set the background color, instead of leaving it
+ transparent. */
+ const char *wrapper =
+ "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" "
+ "xmlns:xi=\"http://www.w3.org/2001/XInclude\" "
+ "style=\"color: #%06X; fill: currentColor;\" "
+ "width=\"%d\" height=\"%d\" preserveAspectRatio=\"none\" "
+ "viewBox=\"0 0 %d %d\">"
+ "<rect width=\"100%%\" height=\"100%%\" fill=\"#%06X\"/>"
+ "<xi:include href=\"data:image/svg+xml;base64,%s\"></xi:include>"
+ "</svg>";
+
+ /* FIXME: I've added 64 in the hope it will cover the size of the
+ width and height strings and things. */
+ int buffer_size = SBYTES (encoded_contents) + strlen (wrapper) + 64;
+
+ value = image_spec_value (img->spec, QCforeground, NULL);
+ if (!NILP (value))
+ foreground = image_alloc_image_color (f, img, value, img->face_foreground);
+ value = image_spec_value (img->spec, QCbackground, NULL);
+ if (!NILP (value))
+ {
+ background = image_alloc_image_color (f, img, value, img->face_background);
+ img->background = background;
+ img->background_valid = 1;
+ }
+
+ wrapped_contents = xmalloc (buffer_size);
+
+ if (!wrapped_contents
+ || buffer_size <= snprintf (wrapped_contents, buffer_size, wrapper,
+ foreground & 0xFFFFFF, width, height,
+ dimension_data.width, dimension_data.height,
+ background & 0xFFFFFF, SSDATA (encoded_contents)))
+ goto rsvg_error;
+
+ wrapped_size = strlen (wrapped_contents);
+ }
+
+ /* Now we parse the wrapped version. */
+
+#if LIBRSVG_CHECK_VERSION (2, 32, 0)
+ input_stream = g_memory_input_stream_new_from_data (wrapped_contents, wrapped_size, NULL);
+ base_file = filename ? g_file_new_for_path (filename) : NULL;
+ rsvg_handle = rsvg_handle_new_from_stream_sync (input_stream, base_file,
+ RSVG_HANDLE_FLAGS_NONE,
+ NULL, &err);
+ if (base_file)
+ g_object_unref (base_file);
+ g_object_unref (input_stream);
+
+ /* Check rsvg_handle too, to avoid librsvg 2.40.13 bug (Bug#36773#26). */
+ if (!rsvg_handle || err) goto rsvg_error;
+#else
+ /* Make a handle to a new rsvg object. */
+ rsvg_handle = rsvg_handle_new ();
+ eassume (rsvg_handle);
+
+ /* Set base_uri for properly handling referenced images (via 'href').
+ See rsvg bug 596114 - "image refs are relative to curdir, not .svg file"
+ <https://gitlab.gnome.org/GNOME/librsvg/issues/33>. */
+ if (filename)
+ rsvg_handle_set_base_uri (rsvg_handle, filename);
+
+ /* Parse the contents argument and fill in the rsvg_handle. */
+ rsvg_handle_write (rsvg_handle, (unsigned char *) wrapped_contents, wrapped_size, &err);
+ if (err) goto rsvg_error;
+
/* The parsing is complete, rsvg_handle is ready to used, close it
for further writes. */
rsvg_handle_close (rsvg_handle, &err);
@@ -9768,6 +9889,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
pixbuf = rsvg_handle_get_pixbuf (rsvg_handle);
if (!pixbuf) goto rsvg_error;
g_object_unref (rsvg_handle);
+ xfree (wrapped_contents);
/* Extract some meta data from the svg handle. */
width = gdk_pixbuf_get_width (pixbuf);
@@ -9792,25 +9914,6 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
init_color_table ();
- /* Handle alpha channel by combining the image with a background
- color. */
- Emacs_Color background;
- Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
- if (!STRINGP (specified_bg)
- || !FRAME_TERMINAL (f)->defined_color_hook (f,
- SSDATA (specified_bg),
- &background,
- false,
- false))
- FRAME_TERMINAL (f)->query_frame_background_color (f, &background);
-
- /* SVG pixmaps specify transparency in the last byte, so right
- shift 8 bits to get rid of it, since emacs doesn't support
- transparency. */
- background.red >>= 8;
- background.green >>= 8;
- background.blue >>= 8;
-
/* This loop handles opacity values, since Emacs assumes
non-transparent images. Each pixel must be "flattened" by
calculating the resulting color, given the transparency of the
@@ -9822,16 +9925,11 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
int red = *pixels++;
int green = *pixels++;
int blue = *pixels++;
- int opacity = *pixels++;
- red = ((red * opacity)
- + (background.red * ((1 << 8) - opacity)));
- green = ((green * opacity)
- + (background.green * ((1 << 8) - opacity)));
- blue = ((blue * opacity)
- + (background.blue * ((1 << 8) - opacity)));
+ /* Skip opacity. */
+ pixels++;
- PUT_PIXEL (ximg, x, y, lookup_rgb_color (f, red, green, blue));
+ PUT_PIXEL (ximg, x, y, lookup_rgb_color (f, red << 8, green << 8, blue << 8));
}
pixels += rowstride - 4 * width;
@@ -9861,6 +9959,8 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
rsvg_error:
if (rsvg_handle)
g_object_unref (rsvg_handle);
+ if (wrapped_contents)
+ xfree (wrapped_contents);
/* FIXME: Use error->message so the user knows what is the actual
problem with the image. */
image_error ("Error parsing SVG image `%s'", img->spec);
@@ -10159,7 +10259,7 @@ DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0,
ptrdiff_t id = -1;
if (valid_image_p (spec))
- id = lookup_image (SELECTED_FRAME (), spec);
+ id = lookup_image (SELECTED_FRAME (), spec, -1);
debug_print (spec);
return make_fixnum (id);
diff --git a/src/keyboard.c b/src/keyboard.c
index 5fa58abce1d..590d183c4c6 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -12475,13 +12475,11 @@ keys_of_keyboard (void)
void
mark_kboards (void)
{
- KBOARD *kb;
- Lisp_Object *p;
- for (kb = all_kboards; kb; kb = kb->next_kboard)
+ for (KBOARD *kb = all_kboards; kb; kb = kb->next_kboard)
{
if (kb->kbd_macro_buffer)
- for (p = kb->kbd_macro_buffer; p < kb->kbd_macro_ptr; p++)
- mark_object (*p);
+ mark_objects (kb->kbd_macro_buffer,
+ kb->kbd_macro_ptr - kb->kbd_macro_buffer);
mark_object (KVAR (kb, Voverriding_terminal_local_map));
mark_object (KVAR (kb, Vlast_command));
mark_object (KVAR (kb, Vreal_last_command));
diff --git a/src/keymap.c b/src/keymap.c
index d98b27b7a1b..0608bdddeea 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3277,7 +3277,7 @@ describe_map (Lisp_Object map, Lisp_Object prefix,
ptrdiff_t pt = max (PT - 1, BEG);
SET_PT (pt);
- insert_string ("\n (that binding is currently shadowed by another mode)");
+ insert_string ("\n (this binding is currently shadowed)");
pt = min (PT + 1, Z);
SET_PT (pt);
}
diff --git a/src/lisp.h b/src/lisp.h
index 7983339ac50..88e69b9061d 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -339,24 +339,20 @@ typedef EMACS_INT Lisp_Word;
# define lisp_h_XLI(o) ((EMACS_INT) (o))
# define lisp_h_XIL(i) ((Lisp_Object) (i))
# define lisp_h_XLP(o) ((void *) (o))
-# define lisp_h_XPL(p) ((Lisp_Object) (p))
# else
# define lisp_h_XLI(o) (o)
# define lisp_h_XIL(i) (i)
# define lisp_h_XLP(o) ((void *) (uintptr_t) (o))
-# define lisp_h_XPL(p) ((Lisp_Object) (uintptr_t) (p))
# endif
#else
# if LISP_WORDS_ARE_POINTERS
# define lisp_h_XLI(o) ((EMACS_INT) (o).i)
# define lisp_h_XIL(i) ((Lisp_Object) {(Lisp_Word) (i)})
# define lisp_h_XLP(o) ((void *) (o).i)
-# define lisp_h_XPL(p) lisp_h_XIL (p)
# else
# define lisp_h_XLI(o) ((o).i)
# define lisp_h_XIL(i) ((Lisp_Object) {i})
# define lisp_h_XLP(o) ((void *) (uintptr_t) (o).i)
-# define lisp_h_XPL(p) ((Lisp_Object) {(uintptr_t) (p)})
# endif
#endif
@@ -425,7 +421,6 @@ typedef EMACS_INT Lisp_Word;
# define XLI(o) lisp_h_XLI (o)
# define XIL(i) lisp_h_XIL (i)
# define XLP(o) lisp_h_XLP (o)
-# define XPL(p) lisp_h_XPL (p)
# define CHECK_FIXNUM(x) lisp_h_CHECK_FIXNUM (x)
# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)
# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x)
@@ -735,12 +730,6 @@ INLINE void *
return lisp_h_XLP (o);
}
-INLINE Lisp_Object
-(XPL) (void *p)
-{
- return lisp_h_XPL (p);
-}
-
/* Extract A's type. */
INLINE enum Lisp_Type
@@ -3767,12 +3756,12 @@ extern AVOID memory_full (size_t);
extern AVOID buffer_memory_full (ptrdiff_t);
extern bool survives_gc_p (Lisp_Object);
extern void mark_object (Lisp_Object);
+extern void mark_objects (Lisp_Object *, ptrdiff_t);
#if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
extern void refill_memory_reserve (void);
#endif
extern void alloc_unexec_pre (void);
extern void alloc_unexec_post (void);
-extern void mark_maybe_objects (Lisp_Object const *, ptrdiff_t);
extern void mark_stack (char const *, char const *);
extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg);
@@ -4884,7 +4873,10 @@ safe_free_unbind_to (ptrdiff_t count, ptrdiff_t sa_count, Lisp_Object val)
(buf) = AVAIL_ALLOCA (alloca_nbytes); \
else \
{ \
- (buf) = xmalloc (alloca_nbytes); \
+ /* Although only the first nelt words need clearing, \
+ typically EXTRA is 0 or small so just use xzalloc; \
+ this is simpler and often faster. */ \
+ (buf) = xzalloc (alloca_nbytes); \
record_unwind_protect_array (buf, nelt); \
} \
} while (false)
diff --git a/src/minibuf.c b/src/minibuf.c
index e18ff17abbf..f957b2ae173 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1039,7 +1039,7 @@ Prompt with PROMPT. */)
DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0,
doc: /* Read the name of a user option and return it as a symbol.
Prompt with PROMPT. By default, return DEFAULT-VALUE or its first element
-if it is a list.
+if it is a list of strings.
A user option, or customizable variable, is one for which
`custom-variable-p' returns non-nil. */)
(Lisp_Object prompt, Lisp_Object default_value)
diff --git a/src/nsfns.m b/src/nsfns.m
index 628233ea0dd..c7956497c4c 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -390,37 +390,25 @@ ns_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
/* Don't change the name if it's already NAME. */
if ([[view window] miniwindowTitle]
&& ([[[view window] miniwindowTitle]
- isEqualToString: [NSString stringWithUTF8String:
- SSDATA (arg)]]))
+ isEqualToString: [NSString stringWithLispString:arg]]))
return;
[[view window] setMiniwindowTitle:
- [NSString stringWithUTF8String: SSDATA (arg)]];
+ [NSString stringWithLispString:arg]];
}
static void
ns_set_name_internal (struct frame *f, Lisp_Object name)
{
- Lisp_Object encoded_name, encoded_icon_name;
- NSString *str;
NSView *view = FRAME_NS_VIEW (f);
-
-
- encoded_name = ENCODE_UTF_8 (name);
-
- str = [NSString stringWithUTF8String: SSDATA (encoded_name)];
-
+ NSString *str = [NSString stringWithLispString: name];
/* Don't change the name if it's already NAME. */
if (! [[[view window] title] isEqualToString: str])
[[view window] setTitle: str];
- if (!STRINGP (f->icon_name))
- encoded_icon_name = encoded_name;
- else
- encoded_icon_name = ENCODE_UTF_8 (f->icon_name);
-
- str = [NSString stringWithUTF8String: SSDATA (encoded_icon_name)];
+ if (STRINGP (f->icon_name))
+ str = [NSString stringWithLispString: f->icon_name];
if ([[view window] miniwindowTitle]
&& ! [[[view window] miniwindowTitle] isEqualToString: str])
@@ -448,7 +436,7 @@ ns_set_name (struct frame *f, Lisp_Object name, int explicit)
return;
if (NILP (name))
- name = build_string ([ns_app_name UTF8String]);
+ name = [ns_app_name lispString];
else
CHECK_STRING (name);
@@ -487,7 +475,7 @@ ns_set_represented_filename (struct frame *f)
{
encoded_filename = ENCODE_UTF_8 (filename);
- fstr = [NSString stringWithUTF8String: SSDATA (encoded_filename)];
+ fstr = [NSString stringWithLispString:encoded_filename];
if (fstr == nil) fstr = @"";
}
else
@@ -734,7 +722,7 @@ ns_implicitly_set_icon_type (struct frame *f)
block_input ();
pool = [[NSAutoreleasePool alloc] init];
if (f->output_data.ns->miniimage
- && [[NSString stringWithUTF8String: SSDATA (f->name)]
+ && [[NSString stringWithLispString:f->name]
isEqualToString: [(NSImage *)f->output_data.ns->miniimage name]])
{
[pool release];
@@ -759,7 +747,7 @@ ns_implicitly_set_icon_type (struct frame *f)
if (SYMBOLP (elt) && EQ (elt, Qt) && SSDATA (f->name)[0] == '/')
{
NSString *str
- = [NSString stringWithUTF8String: SSDATA (f->name)];
+ = [NSString stringWithLispString:f->name];
if ([[NSFileManager defaultManager] fileExistsAtPath: str])
image = [[[NSWorkspace sharedWorkspace] iconForFile: str] retain];
}
@@ -771,8 +759,7 @@ ns_implicitly_set_icon_type (struct frame *f)
image = [EmacsImage allocInitFromFile: XCDR (elt)];
if (image == nil)
image = [[NSImage imageNamed:
- [NSString stringWithUTF8String:
- SSDATA (XCDR (elt))]] retain];
+ [NSString stringWithLispString:XCDR (elt)]] retain];
}
}
@@ -816,8 +803,7 @@ ns_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
image = [EmacsImage allocInitFromFile: arg];
if (image == nil)
- image =[NSImage imageNamed: [NSString stringWithUTF8String:
- SSDATA (arg)]];
+ image =[NSImage imageNamed: [NSString stringWithLispString:arg]];
if (image == nil)
{
@@ -851,20 +837,18 @@ ns_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
static Lisp_Object
ns_appkit_version_str (void)
{
- char tmp[256];
+ NSString *tmp;
#ifdef NS_IMPL_GNUSTEP
- sprintf(tmp, "gnustep-gui-%s", Xstr(GNUSTEP_GUI_VERSION));
+ tmp = [NSString stringWithFormat:@"gnustep-gui-%s", Xstr(GNUSTEP_GUI_VERSION)];
#elif defined (NS_IMPL_COCOA)
- NSString *osversion
- = [[NSProcessInfo processInfo] operatingSystemVersionString];
- sprintf(tmp, "appkit-%.2f %s",
- NSAppKitVersionNumber,
- [osversion UTF8String]);
+ tmp = [NSString stringWithFormat:@"appkit-%.2f %@",
+ NSAppKitVersionNumber,
+ [[NSProcessInfo processInfo] operatingSystemVersionString]];
#else
- tmp = "ns-unknown";
+ tmp = [NSString initWithUTF8String:@"ns-unknown"];
#endif
- return build_string (tmp);
+ return [tmp lispString];
}
@@ -1168,7 +1152,7 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
be set. */
if (EQ (name, Qunbound) || NILP (name) || ! STRINGP (name))
{
- fset_name (f, build_string ([ns_app_name UTF8String]));
+ fset_name (f, [ns_app_name lispString]);
f->explicit_name = 0;
}
else
@@ -1609,12 +1593,12 @@ Optional arg DIR_ONLY_P, if non-nil, means choose only directories. */)
Lisp_Object fname = Qnil;
NSString *promptS = NILP (prompt) || !STRINGP (prompt) ? nil :
- [NSString stringWithUTF8String: SSDATA (prompt)];
+ [NSString stringWithLispString:prompt];
NSString *dirS = NILP (dir) || !STRINGP (dir) ?
- [NSString stringWithUTF8String: SSDATA (BVAR (current_buffer, directory))] :
- [NSString stringWithUTF8String: SSDATA (dir)];
+ [NSString stringWithLispString:BVAR (current_buffer, directory)] :
+ [NSString stringWithLispString:dir];
NSString *initS = NILP (init) || !STRINGP (init) ? nil :
- [NSString stringWithUTF8String: SSDATA (init)];
+ [NSString stringWithLispString:init];
NSEvent *nxev;
check_window_system (NULL);
@@ -1690,7 +1674,7 @@ Optional arg DIR_ONLY_P, if non-nil, means choose only directories. */)
{
NSString *str = ns_filename_from_panel (panel);
if (! str) str = ns_directory_from_panel (panel);
- if (str) fname = build_string ([str UTF8String]);
+ if (str) fname = [str lispString];
}
[[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
@@ -1720,7 +1704,7 @@ If OWNER is nil, Emacs is assumed. */)
check_window_system (NULL);
if (NILP (owner))
- owner = build_string([ns_app_name UTF8String]);
+ owner = [ns_app_name lispString];
CHECK_STRING (name);
value = ns_get_defaults_value (SSDATA (name));
@@ -1739,20 +1723,19 @@ If VALUE is nil, the default is removed. */)
{
check_window_system (NULL);
if (NILP (owner))
- owner = build_string ([ns_app_name UTF8String]);
+ owner = [ns_app_name lispString];
CHECK_STRING (name);
if (NILP (value))
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:
- [NSString stringWithUTF8String: SSDATA (name)]];
+ [NSString stringWithLispString:name]];
}
else
{
CHECK_STRING (value);
[[NSUserDefaults standardUserDefaults] setObject:
- [NSString stringWithUTF8String: SSDATA (value)]
- forKey: [NSString stringWithUTF8String:
- SSDATA (name)]];
+ [NSString stringWithLispString:value]
+ forKey: [NSString stringWithLispString:name]];
}
return Qnil;
@@ -2044,7 +2027,7 @@ The optional argument FRAME is currently ignored. */)
NSEnumerator *cnames = [[clist allKeys] reverseObjectEnumerator];
NSString *cname;
while ((cname = [cnames nextObject]))
- list = Fcons (build_string ([cname UTF8String]), list);
+ list = Fcons ([cname lispString], list);
/* for (i = [[clist allKeys] count] - 1; i >= 0; i--)
list = Fcons (build_string ([[[clist allKeys] objectAtIndex: i]
UTF8String]), list); */
@@ -2092,13 +2075,11 @@ there was no result. */)
{
id pb;
NSString *svcName;
- char *utfStr;
CHECK_STRING (service);
check_window_system (NULL);
- utfStr = SSDATA (service);
- svcName = [NSString stringWithUTF8String: utfStr];
+ svcName = [NSString stringWithLispString:service];
pb =[NSPasteboard pasteboardWithUniqueName];
ns_string_to_pasteboard (pb, send);
@@ -2128,7 +2109,7 @@ ns_do_applescript (Lisp_Object script, Lisp_Object *result)
NSAppleScript *scriptObject =
[[NSAppleScript alloc] initWithSource:
- [NSString stringWithUTF8String: SSDATA (script)]];
+ [NSString stringWithLispString:script]];
returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
[scriptObject release];
@@ -2151,7 +2132,7 @@ ns_do_applescript (Lisp_Object script, Lisp_Object *result)
{
desc = [returnDescriptor coerceToDescriptorType: typeUTF8Text];
if (desc)
- *result = build_string([[desc stringValue] UTF8String]);
+ *result = [[desc stringValue] lispString];
}
else
{
@@ -3031,6 +3012,60 @@ DEFUN ("ns-show-character-palette",
#endif
+/* Whether N bytes at STR are in the [0,127] range. */
+static bool
+all_nonzero_ascii (unsigned char *str, ptrdiff_t n)
+{
+ for (ptrdiff_t i = 0; i < n; i++)
+ if (str[i] < 1 || str[i] > 127)
+ return false;
+ return true;
+}
+
+@implementation NSString (EmacsString)
+/* Make an NSString from a Lisp string. */
++ (NSString *)stringWithLispString:(Lisp_Object)string
+{
+ /* Shortcut for the common case. */
+ if (all_nonzero_ascii (SDATA (string), SBYTES (string)))
+ return [NSString stringWithCString: SSDATA (string)
+ encoding: NSASCIIStringEncoding];
+ string = string_to_multibyte (string);
+
+ /* Now the string is multibyte; convert to UTF-16. */
+ unichar *chars = xmalloc (4 * SCHARS (string));
+ unichar *d = chars;
+ const unsigned char *s = SDATA (string);
+ const unsigned char *end = s + SBYTES (string);
+ while (s < end)
+ {
+ int c = string_char_advance (&s);
+ /* We pass unpaired surrogates through, because they are typically
+ handled fairly well by the NS libraries (displayed with distinct
+ glyphs etc). */
+ if (c <= 0xffff)
+ *d++ = c;
+ else if (c <= 0x10ffff)
+ {
+ *d++ = 0xd800 + ((c - 0x10000) >> 10);
+ *d++ = 0xdc00 + (c & 0x3ff);
+ }
+ else
+ *d++ = 0xfffd; /* Not valid for UTF-16. */
+ }
+ NSString *str = [NSString stringWithCharacters: chars
+ length: d - chars];
+ xfree (chars);
+ return str;
+}
+
+/* Make a Lisp string from an NSString. */
+- (Lisp_Object)lispString
+{
+ return build_string ([self UTF8String]);
+}
+@end
+
/* ==========================================================================
Lisp interface declaration
diff --git a/src/nsmenu.m b/src/nsmenu.m
index b7e4cbd5654..e313fc03f40 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1092,7 +1092,7 @@ update_frame_tool_bar (struct frame *f)
continue;
}
- img_id = lookup_image (f, image);
+ img_id = lookup_image (f, image, -1);
img = IMAGE_FROM_ID (f, img_id);
prepare_image_for_display (f, img);
diff --git a/src/nsterm.h b/src/nsterm.h
index a511fef5b98..b56bcad4dc1 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -361,6 +361,12 @@ typedef id instancetype;
@end
+
+@interface NSString (EmacsString)
++ (NSString *)stringWithLispString:(Lisp_Object)string;
+- (Lisp_Object)lispString;
+@end
+
/* ==========================================================================
The Emacs application
diff --git a/src/nsterm.m b/src/nsterm.m
index 98c5b69d681..26059ab67cd 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -5909,7 +5909,7 @@ ns_term_shutdown (int sig)
emacs_event->kind = NS_NONKEY_EVENT;
emacs_event->code = KEY_NS_OPEN_FILE_LINE;
- ns_input_file = append2 (ns_input_file, build_string ([fileName UTF8String]));
+ ns_input_file = append2 (ns_input_file, [fileName lispString]);
ns_input_line = Qnil; /* can be start or cons start,end */
emacs_event->modifiers =0;
EV_TRAILER (theEvent);
@@ -6273,8 +6273,7 @@ not_in_argv (NSString *arg)
error: (NSString **)error
{
[ns_pending_service_names addObject: userData];
- [ns_pending_service_args addObject: [NSString stringWithUTF8String:
- SSDATA (ns_string_from_pasteboard (pboard))]];
+ [ns_pending_service_args addObject: [NSString stringWithLispString:ns_string_from_pasteboard (pboard)]];
}
@@ -6291,8 +6290,8 @@ not_in_argv (NSString *arg)
emacs_event->kind = NS_NONKEY_EVENT;
emacs_event->code = KEY_NS_SPI_SERVICE_CALL;
- ns_input_spi_name = build_string ([name UTF8String]);
- ns_input_spi_arg = build_string ([arg UTF8String]);
+ ns_input_spi_name = [name lispString];
+ ns_input_spi_arg = [arg lispString];
emacs_event->modifiers = EV_MODIFIERS (theEvent);
EV_TRAILER (theEvent);
@@ -6374,7 +6373,7 @@ not_in_argv (NSString *arg)
size = [newFont pointSize];
ns_input_fontsize = make_fixnum (lrint (size));
- ns_input_font = build_string ([[newFont familyName] UTF8String]);
+ ns_input_font = [[newFont familyName] lispString];
EV_TRAILER (e);
}
}
@@ -6685,7 +6684,7 @@ not_in_argv (NSString *arg)
processingCompose = YES;
[workingText release];
workingText = [str copy];
- ns_working_text = build_string ([workingText UTF8String]);
+ ns_working_text = [workingText lispString];
emacs_event->kind = NS_TEXT_EVENT;
emacs_event->code = KEY_NS_PUT_WORKING_TEXT;
@@ -7605,7 +7604,7 @@ not_in_argv (NSString *arg)
tem = f->icon_name;
if (!NILP (tem))
[win setMiniwindowTitle:
- [NSString stringWithUTF8String: SSDATA (tem)]];
+ [NSString stringWithLispString:tem]];
if (FRAME_PARENT_FRAME (f) != NULL)
{
@@ -8609,7 +8608,7 @@ not_in_argv (NSString *arg)
fenum = [files objectEnumerator];
while ( (file = [fenum nextObject]) )
- strings = Fcons (build_string ([file UTF8String]), strings);
+ strings = Fcons ([file lispString], strings);
}
else if ([type isEqualToString: NSURLPboardType])
{
@@ -8618,7 +8617,7 @@ not_in_argv (NSString *arg)
type_sym = Qurl;
- strings = list1 (build_string ([[url absoluteString] UTF8String]));
+ strings = list1 ([[url absoluteString] lispString]);
}
else if ([type isEqualToString: NSStringPboardType]
|| [type isEqualToString: NSTabularTextPboardType])
@@ -8630,7 +8629,7 @@ not_in_argv (NSString *arg)
type_sym = Qnil;
- strings = list1 (build_string ([data UTF8String]));
+ strings = list1 ([data lispString]);
}
else
{
@@ -8802,9 +8801,7 @@ not_in_argv (NSString *arg)
}
if (STRINGP (str))
{
- const char *utfStr = SSDATA (str);
- NSString *nsStr = [NSString stringWithUTF8String: utfStr];
- return nsStr;
+ return [NSString stringWithLispString:str];
}
}
diff --git a/src/process.c b/src/process.c
index 15634e4a8b0..3aa105ae342 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1654,7 +1654,10 @@ you specify a filter function to handle the output. BUFFER may be
also nil, meaning that this process is not associated with any buffer.
:command COMMAND -- COMMAND is a list starting with the program file
-name, followed by strings to give to the program as arguments.
+name, followed by strings to give to the program as arguments. If the
+program file name is not an absolute file name, `make-process' will
+look for the program file name in `exec-path' (which is a list of
+directories).
:coding CODING -- If CODING is a symbol, it specifies the coding
system used for both reading and writing for this process. If CODING
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index c44cce9f787..971a5f63749 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -929,7 +929,7 @@ typedef struct
? 0 \
: ((fail_stack).stack \
= REGEX_REALLOCATE ((fail_stack).stack, \
- (fail_stack).size * sizeof (fail_stack_elt_t), \
+ (fail_stack).avail * sizeof (fail_stack_elt_t), \
min (emacs_re_max_failures * TYPICAL_FAILURE_SIZE, \
((fail_stack).size * FAIL_STACK_GROWTH_FACTOR)) \
* sizeof (fail_stack_elt_t)), \
@@ -969,7 +969,11 @@ typedef struct
#define ENSURE_FAIL_STACK(space) \
while (REMAINING_AVAIL_SLOTS <= space) { \
if (!GROW_FAIL_STACK (fail_stack)) \
- return -2; \
+ { \
+ unbind_to (count, Qnil); \
+ SAFE_FREE (); \
+ return -2; \
+ } \
DEBUG_PRINT ("\n Doubled stack; size now: %td\n", fail_stack.size); \
DEBUG_PRINT (" slots available: %td\n", REMAINING_AVAIL_SLOTS);\
}
@@ -979,6 +983,8 @@ while (REMAINING_AVAIL_SLOTS <= space) { \
do { \
char *destination; \
intptr_t n = num; \
+ eassert (0 < n && n < num_regs); \
+ eassert (REG_UNSET (regstart[n]) <= REG_UNSET (regend[n])); \
ENSURE_FAIL_STACK(3); \
DEBUG_PRINT (" Push reg %"PRIdPTR" (spanning %p -> %p)\n", \
n, regstart[n], regend[n]); \
@@ -1017,8 +1023,10 @@ do { \
} \
else \
{ \
+ eassert (0 < pfreg && pfreg < num_regs); \
regend[pfreg] = POP_FAILURE_POINTER (); \
regstart[pfreg] = POP_FAILURE_POINTER (); \
+ eassert (REG_UNSET (regstart[pfreg]) <= REG_UNSET (regend[pfreg])); \
DEBUG_PRINT (" Pop reg %ld (spanning %p -> %p)\n", \
pfreg, regstart[pfreg], regend[pfreg]); \
} \
@@ -3864,6 +3872,10 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
re_char *string2, ptrdiff_t size2,
ptrdiff_t pos, struct re_registers *regs, ptrdiff_t stop)
{
+ eassume (0 <= size1);
+ eassume (0 <= size2);
+ eassume (0 <= pos && pos <= stop && stop <= size1 + size2);
+
/* General temporaries. */
int mcnt;
@@ -3919,8 +3931,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
attempt) by a subexpression part of the pattern, that is, the
regnum-th regstart pointer points to where in the pattern we began
matching and the regnum-th regend points to right after where we
- stopped matching the regnum-th subexpression. (The zeroth register
- keeps track of what the whole pattern matches.) */
+ stopped matching the regnum-th subexpression. */
re_char **regstart UNINIT, **regend UNINIT;
/* The following record the register info as found in the above
@@ -3969,29 +3980,22 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
/* Do not bother to initialize all the register variables if there are
no groups in the pattern, as it takes a fair amount of time. If
there are groups, we include space for register 0 (the whole
- pattern), even though we never use it, since it simplifies the
- array indexing. We should fix this. */
- if (bufp->re_nsub)
+ pattern) in REGSTART[0], even though we never use it, to avoid
+ the undefined behavior of subtracting 1 from REGSTART. */
+ ptrdiff_t re_nsub = num_regs - 1;
+ if (0 < re_nsub)
{
- regstart = SAFE_ALLOCA (num_regs * 4 * sizeof *regstart);
+ regstart = SAFE_ALLOCA ((re_nsub * 4 + 1) * sizeof *regstart);
regend = regstart + num_regs;
- best_regstart = regend + num_regs;
- best_regend = best_regstart + num_regs;
- }
+ best_regstart = regend + re_nsub;
+ best_regend = best_regstart + re_nsub;
- /* The starting position is bogus. */
- if (pos < 0 || pos > size1 + size2)
- {
- unbind_to (count, Qnil);
- SAFE_FREE ();
- return -1;
+ /* Initialize subexpression text positions to unset, to mark ones
+ that no start_memory/stop_memory has been seen for. */
+ for (re_char **apos = regstart + 1; apos < best_regstart + 1; apos++)
+ *apos = NULL;
}
- /* Initialize subexpression text positions to -1 to mark ones that no
- start_memory/stop_memory has been seen for. */
- for (ptrdiff_t reg = 1; reg < num_regs; reg++)
- regstart[reg] = regend[reg] = NULL;
-
/* We move 'string1' into 'string2' if the latter's empty -- but not if
'string1' is null. */
if (size2 == 0 && string1 != NULL)
@@ -4126,6 +4130,8 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
{
regstart[reg] = best_regstart[reg];
regend[reg] = best_regend[reg];
+ eassert (REG_UNSET (regstart[reg])
+ <= REG_UNSET (regend[reg]));
}
}
} /* d != end_match_2 */
@@ -4173,7 +4179,9 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
for (ptrdiff_t reg = 1; reg < num_regs; reg++)
{
- if (REG_UNSET (regstart[reg]) || REG_UNSET (regend[reg]))
+ eassert (REG_UNSET (regstart[reg])
+ <= REG_UNSET (regend[reg]));
+ if (REG_UNSET (regend[reg]))
regs->start[reg] = regs->end[reg] = -1;
else
{
@@ -4373,12 +4381,12 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
registers data structure) under the register number. */
case start_memory:
DEBUG_PRINT ("EXECUTING start_memory %d:\n", *p);
+ eassert (0 < *p && *p < num_regs);
/* In case we need to undo this operation (via backtracking). */
PUSH_FAILURE_REG (*p);
regstart[*p] = d;
- regend[*p] = NULL; /* probably unnecessary. -sm */
DEBUG_PRINT (" regstart: %td\n", POINTER_TO_OFFSET (regstart[*p]));
/* Move past the register number and inner group count. */
@@ -4391,6 +4399,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
case stop_memory:
DEBUG_PRINT ("EXECUTING stop_memory %d:\n", *p);
+ eassert (0 < *p && *p < num_regs);
eassert (!REG_UNSET (regstart[*p]));
/* Strictly speaking, there should be code such as:
@@ -4423,7 +4432,9 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
DEBUG_PRINT ("EXECUTING duplicate %d.\n", regno);
/* Can't back reference a group which we've never matched. */
- if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+ eassert (0 < regno && regno < num_regs);
+ eassert (REG_UNSET (regstart[regno]) <= REG_UNSET (regend[regno]));
+ if (REG_UNSET (regend[regno]))
goto fail;
/* Where in input to try to start matching. */
diff --git a/src/syntax.c b/src/syntax.c
index 9f77ea5f9b0..7f0fc341f6e 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -807,7 +807,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
/* Ignore escaped characters, except comment-enders which cannot
be escaped. */
- if ((Vcomment_end_can_be_escaped || code != Sendcomment)
+ if ((comment_end_can_be_escaped || code != Sendcomment)
&& char_quoted (from, from_byte))
continue;
@@ -2336,7 +2336,7 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
&& SYNTAX_FLAGS_COMMENT_STYLE (syntax, 0) == style
&& (SYNTAX_FLAGS_COMMENT_NESTED (syntax) ?
(nesting > 0 && --nesting == 0) : nesting < 0)
- && !(Vcomment_end_can_be_escaped && char_quoted (from, from_byte)))
+ && !(comment_end_can_be_escaped && char_quoted (from, from_byte)))
/* We have encountered a comment end of the same style
as the comment sequence which began this comment
section. */
@@ -2569,7 +2569,7 @@ between them, return t; otherwise return nil. */)
}
else if (code == Sendcomment)
{
- found = (!quoted || !Vcomment_end_can_be_escaped)
+ found = (!quoted || !comment_end_can_be_escaped)
&& back_comment (from, from_byte, stop, comnested, comstyle,
&out_charpos, &out_bytepos);
if (!found)
@@ -3760,9 +3760,9 @@ character of that word.
In both cases, LIMIT bounds the search. */);
Vfind_word_boundary_function_table = Fmake_char_table (Qnil, Qnil);
- DEFVAR_BOOL ("comment-end-can-be-escaped", Vcomment_end_can_be_escaped,
+ DEFVAR_BOOL ("comment-end-can-be-escaped", comment_end_can_be_escaped,
doc: /* Non-nil means an escaped ender inside a comment doesn't end the comment. */);
- Vcomment_end_can_be_escaped = 0;
+ comment_end_can_be_escaped = false;
DEFSYM (Qcomment_end_can_be_escaped, "comment-end-can-be-escaped");
Fmake_variable_buffer_local (Qcomment_end_can_be_escaped);
diff --git a/src/sysdep.c b/src/sysdep.c
index a1050c4309a..e161172a79b 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1761,24 +1761,6 @@ deliver_thread_signal (int sig, signal_handler_t handler)
errno = old_errno;
}
-#if !HAVE_DECL_SYS_SIGLIST
-# undef sys_siglist
-# ifdef _sys_siglist
-# define sys_siglist _sys_siglist
-# elif HAVE_DECL___SYS_SIGLIST
-# define sys_siglist __sys_siglist
-# else
-# define sys_siglist my_sys_siglist
-static char const *sys_siglist[NSIG];
-# endif
-#endif
-
-#ifdef _sys_nsig
-# define sys_siglist_entries _sys_nsig
-#else
-# define sys_siglist_entries NSIG
-#endif
-
/* Handle bus errors, invalid instruction, etc. */
static void
handle_fatal_signal (int sig)
@@ -1970,143 +1952,6 @@ init_signals (void)
main_thread_id = pthread_self ();
#endif
-#if !HAVE_DECL_SYS_SIGLIST && !defined _sys_siglist
- if (! initialized)
- {
- sys_siglist[SIGABRT] = "Aborted";
-# ifdef SIGAIO
- sys_siglist[SIGAIO] = "LAN I/O interrupt";
-# endif
- sys_siglist[SIGALRM] = "Alarm clock";
-# ifdef SIGBUS
- sys_siglist[SIGBUS] = "Bus error";
-# endif
-# ifdef SIGCHLD
- sys_siglist[SIGCHLD] = "Child status changed";
-# endif
-# ifdef SIGCONT
- sys_siglist[SIGCONT] = "Continued";
-# endif
-# ifdef SIGDANGER
- sys_siglist[SIGDANGER] = "Swap space dangerously low";
-# endif
-# ifdef SIGDGNOTIFY
- sys_siglist[SIGDGNOTIFY] = "Notification message in queue";
-# endif
-# ifdef SIGEMT
- sys_siglist[SIGEMT] = "Emulation trap";
-# endif
- sys_siglist[SIGFPE] = "Arithmetic exception";
-# ifdef SIGFREEZE
- sys_siglist[SIGFREEZE] = "SIGFREEZE";
-# endif
-# ifdef SIGGRANT
- sys_siglist[SIGGRANT] = "Monitor mode granted";
-# endif
- sys_siglist[SIGHUP] = "Hangup";
- sys_siglist[SIGILL] = "Illegal instruction";
- sys_siglist[SIGINT] = "Interrupt";
-# ifdef SIGIO
- sys_siglist[SIGIO] = "I/O possible";
-# endif
-# ifdef SIGIOINT
- sys_siglist[SIGIOINT] = "I/O intervention required";
-# endif
-# ifdef SIGIOT
- sys_siglist[SIGIOT] = "IOT trap";
-# endif
- sys_siglist[SIGKILL] = "Killed";
-# ifdef SIGLOST
- sys_siglist[SIGLOST] = "Resource lost";
-# endif
-# ifdef SIGLWP
- sys_siglist[SIGLWP] = "SIGLWP";
-# endif
-# ifdef SIGMSG
- sys_siglist[SIGMSG] = "Monitor mode data available";
-# endif
-# ifdef SIGPHONE
- sys_siglist[SIGWIND] = "SIGPHONE";
-# endif
- sys_siglist[SIGPIPE] = "Broken pipe";
-# ifdef SIGPOLL
- sys_siglist[SIGPOLL] = "Pollable event occurred";
-# endif
-# ifdef SIGPROF
- sys_siglist[SIGPROF] = "Profiling timer expired";
-# endif
-# ifdef SIGPTY
- sys_siglist[SIGPTY] = "PTY I/O interrupt";
-# endif
-# ifdef SIGPWR
- sys_siglist[SIGPWR] = "Power-fail restart";
-# endif
- sys_siglist[SIGQUIT] = "Quit";
-# ifdef SIGRETRACT
- sys_siglist[SIGRETRACT] = "Need to relinquish monitor mode";
-# endif
-# ifdef SIGSAK
- sys_siglist[SIGSAK] = "Secure attention";
-# endif
- sys_siglist[SIGSEGV] = "Segmentation violation";
-# ifdef SIGSOUND
- sys_siglist[SIGSOUND] = "Sound completed";
-# endif
-# ifdef SIGSTOP
- sys_siglist[SIGSTOP] = "Stopped (signal)";
-# endif
-# ifdef SIGSTP
- sys_siglist[SIGSTP] = "Stopped (user)";
-# endif
-# ifdef SIGSYS
- sys_siglist[SIGSYS] = "Bad argument to system call";
-# endif
- sys_siglist[SIGTERM] = "Terminated";
-# ifdef SIGTHAW
- sys_siglist[SIGTHAW] = "SIGTHAW";
-# endif
-# ifdef SIGTRAP
- sys_siglist[SIGTRAP] = "Trace/breakpoint trap";
-# endif
-# ifdef SIGTSTP
- sys_siglist[SIGTSTP] = "Stopped (user)";
-# endif
-# ifdef SIGTTIN
- sys_siglist[SIGTTIN] = "Stopped (tty input)";
-# endif
-# ifdef SIGTTOU
- sys_siglist[SIGTTOU] = "Stopped (tty output)";
-# endif
-# ifdef SIGURG
- sys_siglist[SIGURG] = "Urgent I/O condition";
-# endif
-# ifdef SIGUSR1
- sys_siglist[SIGUSR1] = "User defined signal 1";
-# endif
-# ifdef SIGUSR2
- sys_siglist[SIGUSR2] = "User defined signal 2";
-# endif
-# ifdef SIGVTALRM
- sys_siglist[SIGVTALRM] = "Virtual timer expired";
-# endif
-# ifdef SIGWAITING
- sys_siglist[SIGWAITING] = "Process's LWPs are blocked";
-# endif
-# ifdef SIGWINCH
- sys_siglist[SIGWINCH] = "Window size changed";
-# endif
-# ifdef SIGWIND
- sys_siglist[SIGWIND] = "SIGWIND";
-# endif
-# ifdef SIGXCPU
- sys_siglist[SIGXCPU] = "CPU time limit exceeded";
-# endif
-# ifdef SIGXFSZ
- sys_siglist[SIGXFSZ] = "File size limit exceeded";
-# endif
- }
-#endif /* !HAVE_DECL_SYS_SIGLIST && !_sys_siglist */
-
/* Don't alter signal handlers if dumping. On some machines,
changing signal handlers sets static data that would make signals
fail to work right when the dumped Emacs is run. */
@@ -2762,15 +2607,13 @@ renameat_noreplace (int srcfd, char const *src, int dstfd, char const *dst)
#endif
}
-/* Like strsignal, except async-signal-safe, and this function typically
+/* Like strsignal, except async-signal-safe, and this function
returns a string in the C locale rather than the current locale. */
char const *
safe_strsignal (int code)
{
- char const *signame = 0;
+ char const *signame = sigdescr_np (code);
- if (0 <= code && code < sys_siglist_entries)
- signame = sys_siglist[code];
if (! signame)
signame = "Unknown signal";
diff --git a/src/thread.c b/src/thread.c
index b638dd77f8b..7ab1e6de1fc 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -28,6 +28,12 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "pdumper.h"
#include "keyboard.h"
+#if defined HAVE_GLIB && ! defined (HAVE_NS)
+#include <xgselect.h>
+#else
+#define release_select_lock() do { } while (0)
+#endif
+
union aligned_thread_state
{
struct thread_state s;
@@ -586,6 +592,8 @@ really_call_select (void *arg)
sa->result = (sa->func) (sa->max_fds, sa->rfds, sa->wfds, sa->efds,
sa->timeout, sa->sigmask);
+ release_select_lock ();
+
block_interrupt_signal (&oldset);
/* If we were interrupted by C-g while inside sa->func above, the
signal handler could have called maybe_reacquire_global_lock, in
diff --git a/src/window.c b/src/window.c
index ef58f43a0bd..e7433969d29 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5462,7 +5462,7 @@ window_scroll (Lisp_Object window, EMACS_INT n, bool whole, bool noerror)
wset_redisplay (XWINDOW (window));
- if (whole && Vfast_but_imprecise_scrolling)
+ if (whole && fast_but_imprecise_scrolling)
specbind (Qfontification_functions, Qnil);
/* On GUI frames, use the pixel-based version which is much slower
@@ -8398,7 +8398,7 @@ pixelwise even if this option is nil. */);
window_resize_pixelwise = false;
DEFVAR_BOOL ("fast-but-imprecise-scrolling",
- Vfast_but_imprecise_scrolling,
+ fast_but_imprecise_scrolling,
doc: /* When non-nil, accelerate scrolling operations.
This comes into play when scrolling rapidly over previously
unfontified buffer regions. Only those portions of the buffer which
@@ -8406,7 +8406,7 @@ are actually going to be displayed get fontified.
Note that this optimization can cause the portion of the buffer
displayed after a scrolling operation to be somewhat inaccurate. */);
- Vfast_but_imprecise_scrolling = false;
+ fast_but_imprecise_scrolling = false;
defsubr (&Sselected_window);
defsubr (&Sold_selected_window);
diff --git a/src/xdisp.c b/src/xdisp.c
index ad03ac46054..406b2d70d58 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -447,6 +447,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "termchar.h"
#include "dispextern.h"
#include "character.h"
+#include "category.h"
#include "buffer.h"
#include "charset.h"
#include "indent.h"
@@ -508,13 +509,87 @@ static Lisp_Object list_of_error;
&& (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' ' \
|| *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t'))))
+/* These are the category sets we use. They are defined by
+ kinsoku.el and chracters.el. */
+#define NOT_AT_EOL '<'
+#define NOT_AT_BOL '>'
+#define LINE_BREAKABLE '|'
+
+static bool
+it_char_has_category(struct it *it, int cat)
+{
+ int ch = 0;
+ if (it->what == IT_CHARACTER)
+ ch = it->c;
+ else if (STRINGP (it->string))
+ ch = SREF (it->string, IT_STRING_BYTEPOS (*it));
+ else if (it->s)
+ ch = it->s[IT_BYTEPOS (*it)];
+ else if (IT_BYTEPOS (*it) < ZV_BYTE)
+ ch = *BYTE_POS_ADDR (IT_BYTEPOS (*it));
+
+ if (ch == 0)
+ return false;
+ else
+ return CHAR_HAS_CATEGORY (ch, cat);
+}
+
+/* Return true if the current character allows wrapping before it. */
+static bool
+char_can_wrap_before (struct it *it)
+{
+ if (!word_wrap_by_category)
+ return !IT_DISPLAYING_WHITESPACE (it);
+
+ /* For CJK (LTR) text in RTL paragraph, EOL and BOL are flipped.
+ Because in RTL paragraph, each glyph is prepended to the last
+ one, effectively drawing right to left. */
+ int not_at_bol;
+ if (it->glyph_row && it->glyph_row->reversed_p)
+ not_at_bol = NOT_AT_EOL;
+ else
+ not_at_bol = NOT_AT_BOL;
+ /* You cannot wrap before a space or tab because that way you'll
+ have space and tab at the beginning of next line. */
+ return (!IT_DISPLAYING_WHITESPACE (it)
+ /* Can be at BOL. */
+ && !it_char_has_category (it, not_at_bol));
+}
+
+/* Return true if the current character allows wrapping after it. */
+static bool
+char_can_wrap_after (struct it *it)
+{
+ if (!word_wrap_by_category)
+ return IT_DISPLAYING_WHITESPACE (it);
+
+ /* For CJK (LTR) text in RTL paragraph, EOL and BOL are flipped.
+ Because in RTL paragraph, each glyph is prepended to the last
+ one, effectively drawing right to left. */
+ int not_at_eol;
+ if (it->glyph_row && it->glyph_row->reversed_p)
+ not_at_eol = NOT_AT_BOL;
+ else
+ not_at_eol = NOT_AT_EOL;
+
+ return (IT_DISPLAYING_WHITESPACE (it)
+ /* Can break after && can be at EOL. */
+ || (it_char_has_category (it, LINE_BREAKABLE)
+ && !it_char_has_category (it, not_at_eol)));
+}
+
+#undef IT_DISPLAYING_WHITESPACE
+#undef NOT_AT_EOL
+#undef NOT_AT_BOL
+#undef LINE_BREAKABLE
+
/* If all the conditions needed to print the fill column indicator are
met, return the (nonnegative) column number, else return a negative
value. */
static int
fill_column_indicator_column (struct it *it, int char_width)
{
- if (Vdisplay_fill_column_indicator
+ if (display_fill_column_indicator
&& !it->w->pseudo_window_p
&& it->continuation_lines_width == 0
&& CHARACTERP (Vdisplay_fill_column_indicator_character))
@@ -5696,7 +5771,7 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object,
else
{
it->what = IT_IMAGE;
- it->image_id = lookup_image (it->f, value);
+ it->image_id = lookup_image (it->f, value, it->face_id);
it->position = start_pos;
it->object = NILP (object) ? it->w->contents : object;
it->method = GET_FROM_IMAGE;
@@ -9193,13 +9268,20 @@ move_it_in_display_line_to (struct it *it,
{
if (it->line_wrap == WORD_WRAP && it->area == TEXT_AREA)
{
- if (IT_DISPLAYING_WHITESPACE (it))
- may_wrap = true;
- else if (may_wrap)
+ bool next_may_wrap = may_wrap;
+ /* Can we wrap after this character? */
+ if (char_can_wrap_after (it))
+ next_may_wrap = true;
+ else
+ next_may_wrap = false;
+ /* Can we wrap here? */
+ if (may_wrap && char_can_wrap_before (it))
{
/* We have reached a glyph that follows one or more
- whitespace characters. If the position is
- already found, we are done. */
+ whitespace characters or a character that allows
+ wrapping after it. If this character allows
+ wrapping before it, save this position as a
+ wrapping point. */
if (atpos_it.sp >= 0)
{
RESTORE_IT (it, &atpos_it, atpos_data);
@@ -9214,8 +9296,10 @@ move_it_in_display_line_to (struct it *it,
}
/* Otherwise, we can wrap here. */
SAVE_IT (wrap_it, *it, wrap_data);
- may_wrap = false;
+ next_may_wrap = false;
}
+ /* Update may_wrap for the next iteration. */
+ may_wrap = next_may_wrap;
}
}
@@ -9343,10 +9427,10 @@ move_it_in_display_line_to (struct it *it,
{
bool can_wrap = true;
- /* If we are at a whitespace character
- that barely fits on this screen line,
- but the next character is also
- whitespace, we cannot wrap here. */
+ /* If the previous character says we can
+ wrap after it, but the current
+ character says we can't wrap before
+ it, then we can't wrap here. */
if (it->line_wrap == WORD_WRAP
&& wrap_it.sp >= 0
&& may_wrap
@@ -9358,7 +9442,7 @@ move_it_in_display_line_to (struct it *it,
SAVE_IT (tem_it, *it, tem_data);
set_iterator_to_next (it, true);
if (get_next_display_element (it)
- && IT_DISPLAYING_WHITESPACE (it))
+ && !char_can_wrap_before (it))
can_wrap = false;
RESTORE_IT (it, &tem_it, tem_data);
}
@@ -9437,19 +9521,18 @@ move_it_in_display_line_to (struct it *it,
else
IT_RESET_X_ASCENT_DESCENT (it);
- /* If the screen line ends with whitespace, and we
- are under word-wrap, don't use wrap_it: it is no
- longer relevant, but we won't have an opportunity
- to update it, since we are done with this screen
- line. */
+ /* If the screen line ends with whitespace (or
+ wrap-able character), and we are under word-wrap,
+ don't use wrap_it: it is no longer relevant, but
+ we won't have an opportunity to update it, since
+ we are done with this screen line. */
if (may_wrap && IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)
/* If the character after the one which set the
- may_wrap flag is also whitespace, we can't
- wrap here, since the screen line cannot be
- wrapped in the middle of whitespace.
- Therefore, wrap_it _is_ relevant in that
- case. */
- && !(moved_forward && IT_DISPLAYING_WHITESPACE (it)))
+ may_wrap flag says we can't wrap before it,
+ we can't wrap here. Therefore, wrap_it
+ (previously found wrap-point) _is_ relevant
+ in that case. */
+ && (!moved_forward || char_can_wrap_before (it)))
{
/* If we've found TO_X, go back there, as we now
know the last word fits on this screen line. */
@@ -12482,6 +12565,11 @@ gui_consider_frame_title (Lisp_Object frame)
display_mode_element (&it, 0, -1, -1, fmt, Qnil, false);
len = MODE_LINE_NOPROP_LEN (title_start);
title = mode_line_noprop_buf + title_start;
+ /* Make sure that any raw bytes in the title are properly
+ represented by their multibyte sequences. */
+ ptrdiff_t nchars = 0;
+ len = str_as_multibyte ((unsigned char *)title,
+ mode_line_noprop_buf_end - title, len, &nchars);
unbind_to (count, Qnil);
/* Set the title only if it's changed. This avoids consing in
@@ -12493,9 +12581,10 @@ gui_consider_frame_title (Lisp_Object frame)
|| SBYTES (f->name) != len
|| memcmp (title, SDATA (f->name), len) != 0)
&& FRAME_TERMINAL (f)->implicit_set_name_hook)
- FRAME_TERMINAL (f)->implicit_set_name_hook (f,
- make_string (title, len),
- Qnil);
+ {
+ Lisp_Object title_string = make_multibyte_string (title, nchars, len);
+ FRAME_TERMINAL (f)->implicit_set_name_hook (f, title_string, Qnil);
+ }
}
}
@@ -21840,7 +21929,7 @@ extend_face_to_end_of_line (struct it *it)
&& !face->stipple
#endif
&& !it->glyph_row->reversed_p
- && !Vdisplay_fill_column_indicator)
+ && !display_fill_column_indicator)
return;
/* Set the glyph row flag indicating that the face of the last glyph
@@ -22434,7 +22523,7 @@ push_prefix_prop (struct it *it, Lisp_Object prop)
else if (IMAGEP (prop))
{
it->what = IT_IMAGE;
- it->image_id = lookup_image (it->f, prop);
+ it->image_id = lookup_image (it->f, prop, it->face_id);
it->method = GET_FROM_IMAGE;
}
#endif /* HAVE_WINDOW_SYSTEM */
@@ -23322,9 +23411,14 @@ display_line (struct it *it, int cursor_vpos)
if (it->line_wrap == WORD_WRAP && it->area == TEXT_AREA)
{
- if (IT_DISPLAYING_WHITESPACE (it))
- may_wrap = true;
- else if (may_wrap)
+ bool next_may_wrap = may_wrap;
+ /* Can we wrap after this character? */
+ if (char_can_wrap_after (it))
+ next_may_wrap = true;
+ else
+ next_may_wrap = false;
+ /* Can we wrap here? */
+ if (may_wrap && char_can_wrap_before (it))
{
SAVE_IT (wrap_it, *it, wrap_data);
wrap_x = x;
@@ -23338,8 +23432,9 @@ display_line (struct it *it, int cursor_vpos)
wrap_row_min_bpos = min_bpos;
wrap_row_max_pos = max_pos;
wrap_row_max_bpos = max_bpos;
- may_wrap = false;
}
+ /* Update may_wrap for the next iteration. */
+ may_wrap = next_may_wrap;
}
}
@@ -23463,14 +23558,18 @@ display_line (struct it *it, int cursor_vpos)
/* If line-wrap is on, check if a previous
wrap point was found. */
if (!IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)
- && wrap_row_used > 0
+ && wrap_row_used > 0 /* Found. */
/* Even if there is a previous wrap
point, continue the line here as
usual, if (i) the previous character
- was a space or tab AND (ii) the
- current character is not. */
- && (!may_wrap
- || IT_DISPLAYING_WHITESPACE (it)))
+ allows wrapping after it, AND (ii)
+ the current character allows wrapping
+ before it. Because this is a valid
+ break point, we can just continue to
+ the next line at here, there is no
+ need to wrap early at the previous
+ wrap point. */
+ && (!may_wrap || !char_can_wrap_before (it)))
goto back_to_wrap;
/* Record the maximum and minimum buffer
@@ -23498,13 +23597,16 @@ display_line (struct it *it, int cursor_vpos)
/* If line-wrap is on, check if a
previous wrap point was found. */
else if (wrap_row_used > 0
- /* Even if there is a previous wrap
- point, continue the line here as
- usual, if (i) the previous character
- was a space or tab AND (ii) the
- current character is not. */
- && (!may_wrap
- || IT_DISPLAYING_WHITESPACE (it)))
+ /* Even if there is a previous
+ wrap point, continue the
+ line here as usual, if (i)
+ the previous character was a
+ space or tab AND (ii) the
+ current character is not,
+ AND (iii) the current
+ character allows wrapping
+ before it. */
+ && (!may_wrap || !char_can_wrap_before (it)))
goto back_to_wrap;
}
@@ -25535,6 +25637,12 @@ display_mode_element (struct it *it, int depth, int field_width, int precision,
spec = decode_mode_spec (it->w, c, field, &string);
eassert (NILP (string) || STRINGP (string));
multibyte = !NILP (string) && STRING_MULTIBYTE (string);
+ /* Non-ASCII characters in SPEC should cause mode-line
+ element be displayed as a multibyte string. */
+ ptrdiff_t nbytes = strlen (spec);
+ if (multibyte_chars_in_text ((const unsigned char *)spec,
+ nbytes) != nbytes)
+ multibyte = true;
switch (mode_line_target)
{
@@ -26153,9 +26261,11 @@ decode_mode_spec_coding (Lisp_Object coding_system, char *buf, bool eol_flag)
attrs = AREF (val, 0);
eolvalue = AREF (val, 2);
- *buf++ = multibyte
- ? XFIXNAT (CODING_ATTR_MNEMONIC (attrs))
- : ' ';
+ if (multibyte)
+ buf += CHAR_STRING (XFIXNAT (CODING_ATTR_MNEMONIC (attrs)),
+ (unsigned char *) buf);
+ else
+ *buf++ = ' ';
if (eol_flag)
{
@@ -27335,7 +27445,7 @@ calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop,
if (FRAME_WINDOW_P (it->f)
&& valid_image_p (prop))
{
- ptrdiff_t id = lookup_image (it->f, prop);
+ ptrdiff_t id = lookup_image (it->f, prop, it->face_id);
struct image *img = IMAGE_FROM_ID (it->f, id);
return OK_PIXELS (width_p ? img->width : img->height);
@@ -34662,6 +34772,23 @@ A value of nil means to respect the value of `truncate-lines'.
If `word-wrap' is enabled, you might want to reduce this. */);
Vtruncate_partial_width_windows = make_fixnum (50);
+ DEFVAR_BOOL("word-wrap-by-category", word_wrap_by_category, doc: /*
+ Non-nil means also wrap after characters of a certain category.
+Normally when `word-wrap' is on, Emacs only breaks lines after
+whitespace characters. When this option is turned on, Emacs also
+breaks lines after characters that have the "|" category (defined in
+characters.el). This is useful for allowing breaking after CJK
+characters and improves the word-wrapping for CJK text mixed with
+Latin text.
+
+If this variable is set using Customize, Emacs automatically loads
+kinsoku.el. When kinsoku.el is loaded, Emacs respects kinsoku rules
+when breaking lines. That means characters with the ">" category
+don't appear at the beginning of a line (e.g., FULLWIDTH COMMA), and
+characters with the "<" category don't appear at the end of a line
+(e.g., LEFT DOUBLE ANGLE BRACKET). */);
+ word_wrap_by_category = false;
+
DEFVAR_LISP ("line-number-display-limit", Vline_number_display_limit,
doc: /* Maximum buffer size for which line number should be displayed.
If the buffer is bigger than this, the line number does not appear
@@ -35057,10 +35184,10 @@ It has no effect when set to 0, or when line numbers are not absolute. */);
DEFSYM (Qdisplay_line_numbers_offset, "display-line-numbers-offset");
Fmake_variable_buffer_local (Qdisplay_line_numbers_offset);
- DEFVAR_BOOL ("display-fill-column-indicator", Vdisplay_fill_column_indicator,
+ DEFVAR_BOOL ("display-fill-column-indicator", display_fill_column_indicator,
doc: /* Non-nil means display the fill column indicator.
See Info node `Displaying Boundaries' for details. */);
- Vdisplay_fill_column_indicator = false;
+ display_fill_column_indicator = false;
DEFSYM (Qdisplay_fill_column_indicator, "display-fill-column-indicator");
Fmake_variable_buffer_local (Qdisplay_fill_column_indicator);
diff --git a/src/xgselect.c b/src/xgselect.c
index f8d0bac7fac..be70107b756 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -29,6 +29,27 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "blockinput.h"
#include "systime.h"
+static ptrdiff_t threads_holding_glib_lock;
+static GMainContext *glib_main_context;
+
+void release_select_lock (void)
+{
+ if (--threads_holding_glib_lock == 0)
+ g_main_context_release (glib_main_context);
+}
+
+static void acquire_select_lock (GMainContext *context)
+{
+ if (threads_holding_glib_lock++ == 0)
+ {
+ glib_main_context = context;
+ while (!g_main_context_acquire (context))
+ {
+ /* Spin. */
+ }
+ }
+}
+
/* `xg_select' is a `pselect' replacement. Why do we need a separate function?
1. Timeouts. Glib and Gtk rely on timer events. If we did pselect
with a greater timeout then the one scheduled by Glib, we would
@@ -54,26 +75,19 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
GPollFD *gfds = gfds_buf;
int gfds_size = ARRAYELTS (gfds_buf);
int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
- bool context_acquired = false;
int i, nfds, tmo_in_millisec, must_free = 0;
bool need_to_dispatch;
context = g_main_context_default ();
- context_acquired = g_main_context_acquire (context);
- /* FIXME: If we couldn't acquire the context, we just silently proceed
- because this function handles more than just glib file descriptors.
- Note that, as implemented, this failure is completely silent: there is
- no feedback to the caller. */
+ acquire_select_lock (context);
if (rfds) all_rfds = *rfds;
else FD_ZERO (&all_rfds);
if (wfds) all_wfds = *wfds;
else FD_ZERO (&all_wfds);
- n_gfds = (context_acquired
- ? g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
- gfds, gfds_size)
- : -1);
+ n_gfds = g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
+ gfds, gfds_size);
if (gfds_size < n_gfds)
{
@@ -151,8 +165,10 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
#else
need_to_dispatch = true;
#endif
- if (need_to_dispatch && context_acquired)
+ if (need_to_dispatch)
{
+ acquire_select_lock (context);
+
int pselect_errno = errno;
/* Prevent g_main_dispatch recursion, that would occur without
block_input wrapper, because event handlers call
@@ -162,11 +178,9 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
g_main_context_dispatch (context);
unblock_input ();
errno = pselect_errno;
+ release_select_lock ();
}
- if (context_acquired)
- g_main_context_release (context);
-
/* To not have to recalculate timeout, return like this. */
if ((our_fds > 0 || (nfds == 0 && tmop == &tmo)) && (retval == 0))
{
diff --git a/src/xgselect.h b/src/xgselect.h
index a38591f3296..512bf3ad85f 100644
--- a/src/xgselect.h
+++ b/src/xgselect.h
@@ -29,4 +29,6 @@ extern int xg_select (int max_fds,
fd_set *rfds, fd_set *wfds, fd_set *efds,
struct timespec *timeout, sigset_t *sigmask);
+extern void release_select_lock (void);
+
#endif /* XGSELECT_H */
diff --git a/test/data/themes/faces-test-dark-theme.el b/test/data/themes/faces-test-dark-theme.el
index 2eb72d6b358..a5e2ca43627 100644
--- a/test/data/themes/faces-test-dark-theme.el
+++ b/test/data/themes/faces-test-dark-theme.el
@@ -2,18 +2,20 @@
;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/data/themes/faces-test-light-theme.el b/test/data/themes/faces-test-light-theme.el
index 4a7c7f6877d..b2f7ec69742 100644
--- a/test/data/themes/faces-test-light-theme.el
+++ b/test/data/themes/faces-test-light-theme.el
@@ -2,18 +2,20 @@
;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lib-src/emacsclient-tests.el b/test/lib-src/emacsclient-tests.el
index 901922c03e1..a502bb782f2 100644
--- a/test/lib-src/emacsclient-tests.el
+++ b/test/lib-src/emacsclient-tests.el
@@ -1,4 +1,4 @@
-;;; emacsclient-tests.el --- Test emacsclient
+;;; emacsclient-tests.el --- Test emacsclient -*- lexical-binding:t -*-
;; Copyright (C) 2016-2020 Free Software Foundation, Inc.
diff --git a/test/lisp/calendar/icalendar-tests.el b/test/lisp/calendar/icalendar-tests.el
index d496878205b..bce7de769e0 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -183,6 +183,7 @@
(ert-deftest icalendar--parse-vtimezone ()
"Test method for `icalendar--parse-vtimezone'."
(let (vtimezone result)
+ ;; testcase: valid timezone with rrule
(setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
TZID:thename
BEGIN:STANDARD
@@ -204,6 +205,8 @@ END:VTIMEZONE
(message (cdr result))
(should (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00"
(cdr result)))
+
+ ;; testcase: name of tz contains comma
(setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
TZID:anothername, with a comma
BEGIN:STANDARD
@@ -225,7 +228,8 @@ END:VTIMEZONE
(message (cdr result))
(should (string= "STD-02:00DST-03:00,M3.2.1/03:00:00,M10.2.1/04:00:00"
(cdr result)))
- ;; offsetfrom = offsetto
+
+ ;; testcase: offsetfrom = offsetto
(setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
TZID:Kolkata, Chennai, Mumbai, New Delhi
X-MICROSOFT-CDO-TZID:23
@@ -245,7 +249,10 @@ END:VTIMEZONE
(should (string= "Kolkata, Chennai, Mumbai, New Delhi" (car result)))
(message (cdr result))
(should (string= "STD-05:30DST-05:30,M1.1.1/00:00:00,M1.1.1/00:00:00"
- (cdr result)))))
+ (cdr result)))
+
+ ;; FIXME: add testcase that covers changes for fix of bug#34315
+ ))
(ert-deftest icalendar--convert-ordinary-to-ical ()
"Test method for `icalendar--convert-ordinary-to-ical'."
@@ -482,17 +489,132 @@ END:VEVENT
(should (equal '(0 0 10 1 8 2013 4 t 10800)
(icalendar--decode-isodatetime "20130801T100000")))
+ ;; testcase: no time zone in input, shift by -1 days
+ ;; 1 Jan 2013 10:00 -> 31 Dec 2012
+ (should (equal '(0 0 10 31 12 2012 1 nil 7200)
+ (icalendar--decode-isodatetime "20130101T100000" -1)))
+ ;; 1 Aug 2013 10:00 (DST) -> 31 Jul 2012 (DST)
+ (should (equal '(0 0 10 31 7 2013 3 t 10800)
+ (icalendar--decode-isodatetime "20130801T100000" -1)))
+
+
;; testcase: UTC time zone specifier in input -> convert to local time
- ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2013 01:00 EET
+ ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2014 01:00 EET
(should (equal '(0 0 1 1 1 2014 3 nil 7200)
(icalendar--decode-isodatetime "20131231T230000Z")))
;; 1 Aug 2013 10:00 UTC -> 1 Aug 2013 13:00 EEST
(should (equal '(0 0 13 1 8 2013 4 t 10800)
(icalendar--decode-isodatetime "20130801T100000Z")))
+ ;; testcase: override timezone with Central European Time, 1 Jan 2013 10:00 -> 1 Jan 2013 11:00
+ (should (equal '(0 0 11 1 1 2013 2 nil 7200)
+ (icalendar--decode-isodatetime "20130101T100000" nil
+ '(3600 "CET"))))
+ ;; testcase: override timezone (UTC-02:00), 1 Jan 2013 10:00 -> 1 Jan 2013 14:00
+ (should (equal '(0 0 14 1 1 2013 2 nil 7200)
+ (icalendar--decode-isodatetime "20130101T100000" nil -7200)))
+
+ ;; FIXME: add testcase that covers changes for fix of bug#34315
+
+ )
+ ;; restore time-zone even if something went terribly wrong
+ (setenv "TZ" tz))))
+
+(ert-deftest icalendar--convert-tz-offset ()
+ "Test `icalendar--convert-tz-offset'."
+ (let ((tz (getenv "TZ")))
+ (unwind-protect
+ (progn
+ ;; Use Eastern European Time (UTC+2, UTC+3 daylight saving)
+ (setenv "TZ" "EET-2EEST,M3.5.0/3,M10.5.0/4")
+
+ ;; testcase: artificial input
+ (should (equal '("DST-03:00" . "M5.1.1/01:23:45")
+ (icalendar--convert-tz-offset
+ '((DTSTART nil "________T012345") ;
+ (TZOFFSETFROM nil "+0200")
+ (TZOFFSETTO nil "+0300")
+ (RRULE nil "FREQ=YEARLY;INTERVAL=1;BYDAY=1MO;BYMONTH=5"))
+ t)))
+
+ ;; testcase: Europe/Berlin Standard
+ (should (equal '("STD-01:00" . "M10.5.0/03:00:00")
+ (icalendar--convert-tz-offset
+ '((TZOFFSETFROM nil "+0200")
+ (TZOFFSETTO nil "+0100")
+ (TZNAME nil CET)
+ (DTSTART nil "19701025T030000")
+ (RRULE nil "FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU"))
+ nil)))
+
+ ;; testcase: Europe/Berlin DST
+ (should (equal '("DST-02:00" . "M3.5.0/02:00:00")
+ (icalendar--convert-tz-offset
+ '((TZOFFSETFROM nil "+0100")
+ (TZOFFSETTO nil "+0200")
+ (TZNAME nil CEST)
+ (DTSTART nil "19700329T020000")
+ (RRULE nil "FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU"))
+ t)))
+
+ ;; testcase: dtstart is mandatory
+ (should (null (icalendar--convert-tz-offset
+ '((TZOFFSETFROM nil "+0100")
+ (TZOFFSETTO nil "+0200")
+ (RRULE nil "FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU"))
+ t)))
+
+ ;; FIXME: rrule and rdate are NOT mandatory! Must fix code
+ ;; before activating these testcases
+ ;; ;; testcase: no rrule and no rdate => no result
+ ;; (should (null (icalendar--convert-tz-offset
+ ;; '((TZOFFSETFROM nil "+0100")
+ ;; (TZOFFSETTO nil "+0200")
+ ;; (DTSTART nil "19700329T020000"))
+ ;; t)))
+ ;; ;; testcase: no rrule with rdate => no result
+ ;; (should (null (icalendar--convert-tz-offset
+ ;; '((TZOFFSETFROM nil "+0100")
+ ;; (TZOFFSETTO nil "+0200")
+ ;; (DTSTART nil "18840101T000000")
+ ;; (RDATE nil "18840101T000000"))
+ ;; t)))
)
;; restore time-zone even if something went terribly wrong
- (setenv "TZ" tz))) )
+ (setenv "TZ" tz))))
+
+(ert-deftest icalendar--decode-isoduration ()
+ "Test `icalendar--decode-isoduration'."
+
+ ;; testcase: 7 days
+ (should (equal '(0 0 0 7 0 0)
+ (icalendar--decode-isoduration "P7D")))
+
+ ;; testcase: 7 days, one second -- see bug#34315
+ (should (equal '(1 0 0 7 0 0)
+ (icalendar--decode-isoduration "P7DT1S")))
+
+ ;; testcase: 3 hours, 2 minutes, one second
+ (should (equal '(1 2 3 0 0 0)
+ (icalendar--decode-isoduration "PT3H2M1S")))
+
+ ;; testcase: 99 days, 3 hours, 2 minutes, one second -- see bug#34315
+ (should (equal '(1 2 3 99 0 0)
+ (icalendar--decode-isoduration "P99DT3H2M1S")))
+
+ ;; testcase: 2 weeks
+ (should (equal '(0 0 0 14 0 0)
+ (icalendar--decode-isoduration "P2W")))
+
+ ;; testcase: rfc2445, section 4.3.6: 15 days, 5 hours and 20 seconds -- see bug#34315
+ (should (equal '(20 0 5 15 0 0)
+ (icalendar--decode-isoduration "P15DT5H0M20S")))
+
+ ;; testcase: rfc2445, section 4.3.6: 7 weeks
+ (should (equal '(0 0 0 49 0 0)
+ (icalendar--decode-isoduration "P7W")))
+ )
+
;; ======================================================================
;; Export tests
diff --git a/test/lisp/calendar/time-date-tests.el b/test/lisp/calendar/time-date-tests.el
index fe1460cf29e..233d43cd01a 100644
--- a/test/lisp/calendar/time-date-tests.el
+++ b/test/lisp/calendar/time-date-tests.el
@@ -123,4 +123,24 @@
(should (equal (decoded-time-period '((135 . 10) 0 0 0 0 0 nil nil nil))
13.5)))
+(ert-deftest test-time-wrap-addition ()
+ (should (equal (decoded-time-add '(0 0 0 1 11 2008 nil nil nil)
+ (make-decoded-time :month 1))
+ '(0 0 0 1 12 2008 nil nil nil)))
+ (should (equal (decoded-time-add '(0 0 0 1 12 2008 nil nil nil)
+ (make-decoded-time :month 1))
+ '(0 0 0 1 1 2009 nil nil nil)))
+ (should (equal (decoded-time-add '(0 0 0 1 11 2008 nil nil nil)
+ (make-decoded-time :month 12))
+ '(0 0 0 1 11 2009 nil nil nil)))
+ (should (equal (decoded-time-add '(0 0 0 1 11 2008 nil nil nil)
+ (make-decoded-time :month 13))
+ '(0 0 0 1 12 2009 nil nil nil)))
+ (should (equal (decoded-time-add '(0 0 0 30 12 2008 nil nil nil)
+ (make-decoded-time :day 1))
+ '(0 0 0 31 12 2008 nil nil nil)))
+ (should (equal (decoded-time-add '(0 0 0 30 12 2008 nil nil nil)
+ (make-decoded-time :day 2))
+ '(0 0 0 1 1 2009 nil nil nil))))
+
;;; time-date-tests.el ends here
diff --git a/test/lisp/calendar/todo-mode-resources/todo-test-1.todo b/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
index 598d487cad9..2375772fbe7 100644
--- a/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
+++ b/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
@@ -1,8 +1,8 @@
-(("testcat1" . [2 0 2 1]) ("testcat2" . [3 0 1 1]) ("testcat3" . [0 0 0 0]))
+(("testcat1" . [2 0 2 1]) ("testcat2" . [3 0 1 1]) ("testcat3" . [0 0 0 0]) ("testcat4" . [1 0 0 0]))
--==-- testcat1
[May 29, 2017] testcat1 item3
- has more than one line
- to test item highlighting
+ has more than one line
+ to test item highlighting
[Jul 3, 2017] testcat1 item4
==--== DONE
@@ -18,3 +18,7 @@
--==-- testcat3
==--== DONE
+--==-- testcat4
+[Jan 1, 2020] testcat4 item1
+
+==--== DONE
diff --git a/test/lisp/calendar/todo-mode-tests.el b/test/lisp/calendar/todo-mode-tests.el
index d65f94d4f31..1fbd39478c5 100644
--- a/test/lisp/calendar/todo-mode-tests.el
+++ b/test/lisp/calendar/todo-mode-tests.el
@@ -414,8 +414,15 @@ the top done item should be the first done item."
(should (todo-done-item-p))
(forward-line -1)
(should (looking-at todo-category-done))
- ;; Make sure marked items are no longer in first category.
- (todo-backward-category)
+ ;; Make sure marked items are no longer in first category. Since
+ ;; cat1 now contains no todo or done items but does have archived
+ ;; items, todo-backward-category would skip it by default, so
+ ;; prevent this. (FIXME: Without this let-binding,
+ ;; todo-backward-category selects the nonempty cat4 and this test
+ ;; fails as expected when run interactively but not in a batch
+ ;; run -- why?)
+ (let (todo-skip-archived-categories)
+ (todo-backward-category))
(should (eq (point-min) (point-max))) ; All todo items were moved.
;; This passes when run interactively but fails in a batch run:
;; the message is displayed but (current-message) evaluates to
@@ -848,6 +855,94 @@ should display the previously current (or default) todo file."
(should (equal todo-current-todo-file todo-test-file-1))
(delete-file (concat file "~")))))
+(ert-deftest todo-test-edit-item-date-month () ; bug#42976 #3 and #4
+ "Test incrementing and decrementing the month of an item's date.
+If the change in month crosses a year boundary, the year of the
+item's date should be adjusted accordingly."
+ (with-todo-test
+ (todo-test--show 4)
+ (let ((current-prefix-arg t) ; For todo-edit-item--header.
+ (get-date (lambda ()
+ (save-excursion
+ (todo-date-string-matcher (line-end-position))
+ (buffer-substring-no-properties (match-beginning 1)
+ (match-end 0))))))
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 0)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 1)
+ (should (equal (funcall get-date) "Feb 1, 2020"))
+ (todo-edit-item--header 'month -1)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month -1)
+ (should (equal (funcall get-date) "Dec 1, 2019"))
+ (todo-edit-item--header 'month 1)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 12)
+ (should (equal (funcall get-date) "Jan 1, 2021"))
+ (todo-edit-item--header 'month -12)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month -13)
+ (should (equal (funcall get-date) "Dec 1, 2018"))
+ (todo-edit-item--header 'month 7)
+ (should (equal (funcall get-date) "Jul 1, 2019"))
+ (todo-edit-item--header 'month 6)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 23)
+ (should (equal (funcall get-date) "Dec 1, 2021"))
+ (todo-edit-item--header 'month -23)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 24)
+ (should (equal (funcall get-date) "Jan 1, 2022"))
+ (todo-edit-item--header 'month -24)
+ (should (equal (funcall get-date) "Jan 1, 2020"))
+ (todo-edit-item--header 'month 25)
+ (should (equal (funcall get-date) "Feb 1, 2022"))
+ (todo-edit-item--header 'month -25)
+ (should (equal (funcall get-date) "Jan 1, 2020")))))
+
+(ert-deftest todo-test-multiline-item-indentation-1 ()
+ "Test inserting a multine item containing a hard line break.
+After insertion the second line of the item should begin with a
+tab character."
+ (with-todo-test
+ (let* ((item0 "Test inserting a multine item")
+ (item1 "containing a hard line break.")
+ (item (concat item0 "\n" item1)))
+ (todo-test--show 1)
+ (todo-test--insert-item item 1)
+ (re-search-forward (concat todo-date-string-start todo-date-pattern
+ (regexp-quote todo-nondiary-end) " ")
+ (line-end-position) t)
+ (should (looking-at (regexp-quote (concat item0 "\n\t" item1)))))))
+
+(ert-deftest todo-test-multiline-item-indentation-2 () ; bug#43068
+ "Test editing an item by adding text on a new line.
+After quitting todo-edit-mode the second line of the item should
+begin with a tab character."
+ (with-todo-test
+ (todo-test--show 2)
+ (let* ((item0 (todo-item-string))
+ (item1 "Second line."))
+ (todo-edit-item--text 'multiline)
+ (insert (concat "\n" item1))
+ (todo-edit-quit)
+ (goto-char (line-beginning-position))
+ (should (looking-at (regexp-quote (concat item0 "\n\t" item1)))))))
+
+(ert-deftest todo-test-multiline-item-indentation-3 ()
+ "Test adding an unindented new line to an item using todo-edit-file.
+Attempting to quit todo-edit-mode should signal a user-error,
+since all non-initial item lines must begin with whitespace."
+ (with-todo-test
+ (todo-test--show 2)
+ (let* ((item0 (todo-item-string))
+ (item1 "Second line."))
+ (todo-edit-file)
+ (should (looking-at (regexp-quote item0)))
+ (goto-char (line-end-position))
+ (insert (concat "\n" item1))
+ (should-error (todo-edit-quit) :type 'user-error))))
(provide 'todo-mode-tests)
;;; todo-mode-tests.el ends here
diff --git a/test/lisp/char-fold-tests.el b/test/lisp/char-fold-tests.el
index 0e55dfbb8ed..599d9d614f9 100644
--- a/test/lisp/char-fold-tests.el
+++ b/test/lisp/char-fold-tests.el
@@ -4,18 +4,20 @@
;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/custom-tests.el b/test/lisp/custom-tests.el
index 766e4844988..7853c84bb69 100644
--- a/test/lisp/custom-tests.el
+++ b/test/lisp/custom-tests.el
@@ -99,7 +99,6 @@
;; This is demonstrating bug#34027.
(ert-deftest custom--test-theme-variables ()
"Test variables setting with enabling / disabling a custom theme."
- :expected-result :failed
;; We load custom-resources/custom--test-theme.el.
(let ((custom-theme-load-path
`(,(expand-file-name "custom-resources" (file-name-directory #$)))))
@@ -115,15 +114,10 @@
(should (equal custom--test-user-option 'baz))
(should (equal custom--test-variable 'baz))
+ ;; Enable and then disable.
(enable-theme 'custom--test)
- ;; The variables have the theme values.
- (should (equal custom--test-user-option 'bar))
- (should (equal custom--test-variable 'bar))
-
(disable-theme 'custom--test)
;; The variables should have the changed values, by reverting.
- ;; This doesn't work as expected. Instead, they have their
- ;; initial values `foo'.
(should (equal custom--test-user-option 'baz))
(should (equal custom--test-variable 'baz))))
diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
index 67f474cbd52..8b9c1c5fcb5 100644
--- a/test/lisp/electric-tests.el
+++ b/test/lisp/electric-tests.el
@@ -5,18 +5,20 @@
;; Author: João Távora <joaotavora@gmail.com>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el
index 834e3b6d914..a9dcf152617 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -354,10 +354,18 @@
'((a c) (b c) (7 c) (-3 c) (nil nil) (t c) (q c) (r c) (s c)
(t c) (x "a") (x "c") (x c) (x d) (x e)))
- ;; `substring' bytecode generation (bug#39709).
- (substring "abcdef")
- (substring "abcdef" 2)
- (substring "abcdef" 3 2))
+ (mapcar (lambda (x) (cond ((member '(a . b) x) 1)
+ ((equal x '(c)) 2)))
+ '(((a . b)) a b (c) (d)))
+ (mapcar (lambda (x) (cond ((memq '(a . b) x) 1)
+ ((equal x '(c)) 2)))
+ '(((a . b)) a b (c) (d)))
+ (mapcar (lambda (x) (cond ((member '(a b) x) 1)
+ ((equal x '(c)) 2)))
+ '(((a b)) a b (c) (d)))
+ (mapcar (lambda (x) (cond ((memq '(a b) x) 1)
+ ((equal x '(c)) 2)))
+ '(((a b)) a b (c) (d))))
"List of expression for test.
Each element will be executed by interpreter and with
bytecompiled code, and their results compared.")
diff --git a/test/lisp/emacs-lisp/hierarchy-tests.el b/test/lisp/emacs-lisp/hierarchy-tests.el
index 23cfc79d848..41d3f2f3ccf 100644
--- a/test/lisp/emacs-lisp/hierarchy-tests.el
+++ b/test/lisp/emacs-lisp/hierarchy-tests.el
@@ -1,4 +1,4 @@
-;;; hierarchy-tests.el --- Tests for hierarchy.el
+;;; hierarchy-tests.el --- Tests for hierarchy.el -*- lexical-binding:t -*-
;; Copyright (C) 2017-2019 Damien Cassou
@@ -274,7 +274,7 @@
'(dove pigeon dolphin cow)))))
(ert-deftest hierarchy-leafs-includes-lonely-roots ()
- (let ((parentfn (lambda (item) nil))
+ (let ((parentfn (lambda (_) nil))
(hierarchy (hierarchy-new)))
(hierarchy-add-tree hierarchy 'foo parentfn)
(should (equal (hierarchy-leafs hierarchy)
diff --git a/test/lisp/emacs-lisp/rmc-tests.el b/test/lisp/emacs-lisp/rmc-tests.el
index 5dee206e931..5add24c479a 100644
--- a/test/lisp/emacs-lisp/rmc-tests.el
+++ b/test/lisp/emacs-lisp/rmc-tests.el
@@ -5,18 +5,20 @@
;; Author: Tino Calancha <tino.calancha@gmail.com>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 0e6f27836ea..3b01d89dbab 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -56,9 +56,12 @@
(ert-deftest rx-def-in-or ()
(rx-let ((a b)
(b (or "abc" c))
- (c ?a))
+ (c ?a)
+ (d (any "a-z")))
(should (equal (rx (or a (| "ab" "abcde") "abcd"))
- "\\(?:a\\(?:b\\(?:c\\(?:de?\\)?\\)?\\)?\\)"))))
+ "\\(?:a\\(?:b\\(?:c\\(?:de?\\)?\\)?\\)?\\)"))
+ (should (equal (rx (or ?m (not d)))
+ "[^a-ln-z]"))))
(ert-deftest rx-char-any ()
"Test character alternatives with `]' and `-' (Bug#25123)."
@@ -132,8 +135,8 @@
;; relint suppression: Single-character range .f-f
;; relint suppression: Range .--/. overlaps previous .-
;; relint suppression: Range .\*--. overlaps previous .--/
- (should (equal (rx (any "-a" "c-" "f-f" "--/*--"))
- "[*-/acf]"))
+ (should (equal (rx (any "-a" "c-" "f-f" "--/*--") (any "," "-" "A"))
+ "[*-/acf][,A-]"))
(should (equal (rx (any "]-a" ?-) (not (any "]-a" ?-)))
"[]-a-][^]-a-]"))
(should (equal (rx (any "--]") (not (any "--]"))
@@ -394,6 +397,8 @@
"ab")))
(ert-deftest rx-literal ()
+ (should (equal (rx (literal "$a"))
+ "\\$a"))
(should (equal (rx (literal (char-to-string 42)) nonl)
"\\*."))
(let ((x "a+b"))
diff --git a/test/lisp/emacs-lisp/subr-x-tests.el b/test/lisp/emacs-lisp/subr-x-tests.el
index c702fdff6f1..9d14a5ab7ec 100644
--- a/test/lisp/emacs-lisp/subr-x-tests.el
+++ b/test/lisp/emacs-lisp/subr-x-tests.el
@@ -5,18 +5,20 @@
;; Author: Fabián E. Gallina <fgallina@gnu.org>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/emacs-lisp/text-property-search-tests.el b/test/lisp/emacs-lisp/text-property-search-tests.el
index 549c90d20d8..83d4b95b76b 100644
--- a/test/lisp/emacs-lisp/text-property-search-tests.el
+++ b/test/lisp/emacs-lisp/text-property-search-tests.el
@@ -5,18 +5,20 @@
;; Author: Lars Ingebrigtsen <larsi@gnus.org>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/emacs-lisp/tcover-unsafep.el b/test/lisp/emacs-lisp/unsafep-tests.el
index 108dee3d95d..2b920a00ca4 100644
--- a/lisp/emacs-lisp/tcover-unsafep.el
+++ b/test/lisp/emacs-lisp/unsafep-tests.el
@@ -1,10 +1,8 @@
-;;;; testcover-unsafep.el -- Use testcover to test unsafep's code coverage
-
-;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
+;;; unsafep-tests.el --- tests for unsafep.el -*- lexical-binding: t; -*-
;; Author: Jonathan Yavner <jyavner@member.fsf.org>
-;; Keywords: safety lisp utility
-;; Package: testcover
+
+;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
@@ -21,18 +19,19 @@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-(require 'testcover)
+;;; Code:
+
+(require 'ert)
+(require 'unsafep)
(defvar safe-functions)
-;;;These forms are all considered safe
+;;; These forms are all considered safe
(defconst testcover-unsafep-safe
'(((lambda (x) (* x 2)) 14)
(apply 'cdr (mapcar (lambda (x) (car x)) y))
(cond ((= x 4) 5) (t 27))
(condition-case x (car y) (error (car x)))
- (dolist (x y) (message "here: %s" x))
- (dotimes (x 14 (* x 2)) (message "here: %d" x))
(let (x) (dolist (y '(1 2 3) (1+ y)) (push y x)))
(let (x) (apply (lambda (x) (* x 2)) 14))
(let ((x '(2))) (push 1 x) (pop x) (add-to-list 'x 2))
@@ -47,7 +46,7 @@
(propertize "x" 'display '(height (progn (delete-file "x") 1))))
"List of forms that `unsafep' should decide are safe.")
-;;;These forms are considered unsafe
+;;; These forms are considered unsafe
(defconst testcover-unsafep-unsafe
'(( (add-to-list x y)
. (unquoted x))
@@ -109,32 +108,37 @@
)
"A-list of (FORM . REASON)... that`unsafep' should decide are unsafe.")
-(declare-function unsafep-function "unsafep" (fun))
-
-;;;#########################################################################
-(defun testcover-unsafep ()
+(ert-deftest test-unsafep/safe ()
"Executes all unsafep tests and displays the coverage results."
- (interactive)
- (testcover-unmark-all "unsafep.el")
- (testcover-start "unsafep.el")
- (let (save-functions)
+ (let (safe-functions)
(dolist (x testcover-unsafep-safe)
- (if (unsafep x)
- (error "%S should be safe" x)))
+ (should-not (unsafep x)))))
+
+(ert-deftest test-unsafep/message ()
+ ;; FIXME: This failed after converting these tests from testcover to
+ ;; ert.
+ :expected-result :failed
+ (should-not '(dolist (x y) (message "here: %s" x)))
+ (should-not '(dotimes (x 14 (* x 2)) (message "here: %d" x))))
+
+(ert-deftest test-unsafep/unsafe ()
+ "Executes all unsafep tests and displays the coverage results."
+ (let (safe-functions)
(dolist (x testcover-unsafep-unsafe)
- (if (not (equal (unsafep (car x)) (cdr x)))
- (error "%S should be unsafe: %s" (car x) (cdr x))))
- (setq safe-functions t)
- (if (or (unsafep '(delete-file "x"))
- (unsafep-function 'delete-file))
- (error "safe-functions=t should allow delete-file"))
- (setq safe-functions '(setcar))
- (if (unsafep '(setcar x 1))
- (error "safe-functions=(setcar) should allow setcar"))
- (if (not (unsafep '(setcdr x 1)))
- (error "safe-functions=(setcar) should not allow setcdr")))
- (testcover-mark-all "unsafep.el")
- (testcover-end "unsafep.el")
- (message "Done"))
-
-;; testcover-unsafep.el ends here.
+ (should (equal (unsafep (car x)) (cdr x))))))
+
+(ert-deftest test-unsafep/safe-functions-t ()
+ "safe-functions=t should allow delete-file"
+ (let ((safe-functions t))
+ (should-not (unsafep '(delete-file "x")))
+ (should-not (unsafep-function 'delete-file))))
+
+(ert-deftest test-unsafep/safe-functions-setcar ()
+ "safe-functions=(setcar) should allow setcar but not setcdr"
+ (let ((safe-functions '(setcar)))
+ (should-not (unsafep '(setcar x 1)))
+ (should (unsafep '(setcdr x 1)))))
+
+(provide 'unsafep-tests)
+
+;;; unsafep-tests.el ends here
diff --git a/test/lisp/emacs-lisp/warnings-tests.el b/test/lisp/emacs-lisp/warnings-tests.el
new file mode 100644
index 00000000000..02c09b41ca5
--- /dev/null
+++ b/test/lisp/emacs-lisp/warnings-tests.el
@@ -0,0 +1,60 @@
+;;; warnings-tests.el --- tests for warnings.el -*- lexical-binding: t; -*-
+
+;; Author: Stefan Kangas <stefankangas@gmail.com>
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'warnings)
+
+(ert-deftest test-warning-suppress-p ()
+ (should (warning-suppress-p 'foo '((foo))))
+ (should (warning-suppress-p '(foo bar) '((foo bar))))
+ (should (warning-suppress-p '(foo bar baz) '((foo bar))))
+ (should-not (warning-suppress-p '(foo bar baz) '((foo bax))))
+ (should-not (warning-suppress-p 'foobar nil)))
+
+(ert-deftest test-display-warning ()
+ (dolist (level '(:emergency :error :warning))
+ (with-temp-buffer
+ (display-warning '(foo) "Hello123" level (current-buffer))
+ (should (string-match "foo" (buffer-string)))
+ (should (string-match "Hello123" (buffer-string))))
+ (with-current-buffer "*Messages*"
+ (should (string-match "Hello123" (buffer-string))))))
+
+(ert-deftest test-display-warning/warning-minimum-level ()
+ ;; This test only works interactively:
+ :expected-result :failed
+ (let ((warning-minimum-level :emergency))
+ (with-temp-buffer
+ (display-warning '(foo) "baz" :warning (current-buffer)))
+ (with-current-buffer "*Messages*"
+ (should-not (string-match "baz" (buffer-string))))))
+
+(ert-deftest test-display-warning/warning-minimum-log-level ()
+ (let ((warning-minimum-log-level :error))
+ (with-temp-buffer
+ (display-warning '(foo) "hello" :warning (current-buffer))
+ (should-not (string-match "hello" (buffer-string))))))
+
+(provide 'warnings-tests)
+
+;;; warnings-tests.el ends here
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index 16a04647723..1b93fb0fbbc 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -1,4 +1,4 @@
-;;; tests/eshell-tests.el --- Eshell test suite
+;;; tests/eshell-tests.el --- Eshell test suite -*- lexical-binding:t -*-
;; Copyright (C) 1999-2020 Free Software Foundation, Inc.
@@ -61,6 +61,8 @@
(eshell-insert-command text func)
(eshell-match-result regexp))
+(defvar eshell-history-file-name)
+
(defun eshell-test-command-result (command)
"Like `eshell-command-result', but not using HOME."
(let ((eshell-directory-name (make-temp-file "eshell" t))
diff --git a/test/lisp/faces-tests.el b/test/lisp/faces-tests.el
index d5dc19349a4..32dc1eea856 100644
--- a/test/lisp/faces-tests.el
+++ b/test/lisp/faces-tests.el
@@ -5,18 +5,20 @@
;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/gnus/gnus-icalendar-tests.el b/test/lisp/gnus/gnus-icalendar-tests.el
new file mode 100644
index 00000000000..be23c90af37
--- /dev/null
+++ b/test/lisp/gnus/gnus-icalendar-tests.el
@@ -0,0 +1,236 @@
+;;; gnus-icalendar-tests.el --- tests -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Jan Tatarik <jtatarik@liveintent.com>
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'gnus-icalendar)
+
+
+(defun gnus-icalendar-tests--get-ical-event (ical-string &optional participant)
+ "Return gnus-icalendar event for ICAL-STRING."
+ (let (event)
+ (with-temp-buffer
+ (insert ical-string)
+ (setq event (gnus-icalendar-event-from-buffer (buffer-name) participant)))
+ event))
+
+(ert-deftest gnus-icalendar-parse ()
+ "test"
+ (let ((tz (getenv "TZ"))
+ (event (gnus-icalendar-tests--get-ical-event "\
+BEGIN:VCALENDAR
+PRODID:-//Google Inc//Google Calendar 70.9054//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:REQUEST
+BEGIN:VTIMEZONE
+TZID:America/New_York
+X-LIC-LOCATION:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19700308T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19701101T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTART;TZID=America/New_York:20201208T090000
+DTEND;TZID=America/New_York:20201208T100000
+DTSTAMP:20200728T182853Z
+ORGANIZER;CN=Company Events:mailto:liveintent.com_3bm6fh805bme9uoeliqcle1sa
+ g@group.calendar.google.com
+UID:iipdt88slddpeu7hheuu09sfmd@google.com
+X-MICROSOFT-CDO-OWNERAPPTID:-362490173
+RECURRENCE-ID;TZID=America/New_York:20201208T091500
+CREATED:20200309T134939Z
+DESCRIPTION:In this meeting\\, we will cover topics from product and enginee
+ ring presentations and demos to new hire announcements to watching the late
+LAST-MODIFIED:20200728T182852Z
+LOCATION:New York-22-Town Hall Space (250) [Chrome Box]
+SEQUENCE:4
+STATUS:CONFIRMED
+SUMMARY:Townhall | All Company Meeting
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+")))
+
+ (unwind-protect
+ (progn
+ ;; Use this form so as not to rely on system tz database.
+ ;; Eg hydra.nixos.org.
+ (setenv "TZ" "CET-1CEST,M3.5.0/2,M10.5.0/3")
+ (should (eq (eieio-object-class event) 'gnus-icalendar-event-request))
+ (should (not (gnus-icalendar-event:recurring-p event)))
+ (should (string= (gnus-icalendar-event:start event) "2020-12-08 15:00"))
+ (with-slots (organizer summary description location end-time uid rsvp participation-type) event
+ (should (string= organizer "liveintent.com_3bm6fh805bme9uoeliqcle1sag@group.calendar.google.com"))
+ (should (string= summary "Townhall | All Company Meeting"))
+ (should (string= description "In this meeting, we will cover topics from product and engineering presentations and demos to new hire announcements to watching the late"))
+ (should (string= location "New York-22-Town Hall Space (250) [Chrome Box]"))
+ (should (string= (format-time-string "%Y-%m-%d %H:%M" end-time) "2020-12-08 16:00"))
+ (should (string= uid "iipdt88slddpeu7hheuu09sfmd@google.com"))
+ (should (not rsvp))
+ (should (eq participation-type 'non-participant))))
+ (setenv "TZ" tz))))
+
+(ert-deftest gnus-icalendary-byday ()
+ ""
+ (let ((tz (getenv "TZ"))
+ (event (gnus-icalendar-tests--get-ical-event "\
+BEGIN:VCALENDAR
+PRODID:Zimbra-Calendar-Provider
+VERSION:2.0
+METHOD:REQUEST
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:STANDARD
+DTSTART:16010101T020000
+TZOFFSETTO:-0500
+TZOFFSETFROM:-0400
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T020000
+TZOFFSETTO:-0400
+TZOFFSETFROM:-0500
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:903a5415-9067-4f63-b499-1b6205f49c88
+RRULE:FREQ=DAILY;UNTIL=20200825T035959Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
+SUMMARY:appointment every weekday\\, start jul 24\\, 2020\\, end aug 24\\, 2020
+ATTENDEE;CN=Mark Hershberger;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP
+ =TRUE:mailto:hexmode <at> gmail.com
+ORGANIZER;CN=Mark A. Hershberger:mailto:mah <at> nichework.com
+DTSTART;TZID=\"America/New_York\":20200724T090000
+DTEND;TZID=\"America/New_York\":20200724T093000
+STATUS:CONFIRMED
+CLASS:PUBLIC
+X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
+TRANSP:OPAQUE
+LAST-MODIFIED:20200719T150815Z
+DTSTAMP:20200719T150815Z
+SEQUENCE:0
+DESCRIPTION:The following is a new meeting request:
+BEGIN:VALARM
+ACTION:DISPLAY
+TRIGGER;RELATED=START:-PT5M
+DESCRIPTION:Reminder
+END:VALARM
+END:VEVENT
+END:VCALENDAR" (list "Mark Hershberger"))))
+
+ (unwind-protect
+ (progn
+ ;; Use this form so as not to rely on system tz database.
+ ;; Eg hydra.nixos.org.
+ (setenv "TZ" "CET-1CEST,M3.5.0/2,M10.5.0/3")
+ (should (eq (eieio-object-class event) 'gnus-icalendar-event-request))
+ (should (gnus-icalendar-event:recurring-p event))
+ (should (string= (gnus-icalendar-event:recurring-interval event) "1"))
+ (should (string= (gnus-icalendar-event:start event) "2020-07-24 15:00"))
+ (with-slots (organizer summary description location end-time uid rsvp participation-type) event
+ (should (string= organizer "mah <at> nichework.com"))
+ (should (string= summary "appointment every weekday, start jul 24, 2020, end aug 24, 2020"))
+ (should (string= description "The following is a new meeting request:"))
+ (should (null location))
+ (should (string= (format-time-string "%Y-%m-%d %H:%M" end-time) "2020-07-24 15:30"))
+ (should (string= uid "903a5415-9067-4f63-b499-1b6205f49c88"))
+ (should rsvp)
+ (should (eq participation-type 'required)))
+ (should (equal (gnus-icalendar-event:recurring-days event) '(1 2 3 4 5)))
+ (should (string= (gnus-icalendar-event:org-timestamp event) "<2020-07-24 15:00-15:30 +1w>
+<2020-07-27 15:00-15:30 +1w>
+<2020-07-28 15:00-15:30 +1w>
+<2020-07-29 15:00-15:30 +1w>
+<2020-07-30 15:00-15:30 +1w>")))
+ (setenv "TZ" tz))))
+
+
+;; (VCALENDAR nil
+;; ((PRODID nil "Zimbra-Calendar-Provider")
+;; (VERSION nil "2.0")
+;; (METHOD nil "REQUEST"))
+;; ((VTIMEZONE nil
+;; ((TZID nil "America/New_York"))
+;; ((STANDARD nil
+;; ((DTSTART nil "16010101T020000")
+;; (TZOFFSETTO nil "-0500")
+;; (TZOFFSETFROM nil "-0400")
+;; (RRULE nil "FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU")
+;; (TZNAME nil "EST"))
+;; nil)
+;; (DAYLIGHT nil
+;; ((DTSTART nil "16010101T020000")
+;; (TZOFFSETTO nil "-0400")
+;; (TZOFFSETFROM nil "-0500")
+;; (RRULE nil "FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU")
+;; (TZNAME nil "EDT"))
+;; nil)))
+;; (VEVENT nil
+;; ((UID nil "903a5415-9067-4f63-b499-1b6205f49c88")
+;; (RRULE nil "FREQ=DAILY;UNTIL=20200825T035959Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR")
+;; (SUMMARY nil "appointment every weekday, start jul 24, 2020, end aug 24, 2020")
+;; (ATTENDEE
+;; (CN "Mark Hershberger" ROLE "REQ-PARTICIPANT" PARTSTAT "NEEDS-ACTION" CN "Mark A. Hershberger")
+;; "mailto:mah <at> nichework.com")
+;; (DTSTART
+;; (TZID "America/New_York")
+;; "20200724T090000")
+;; (DTEND
+;; (TZID "America/New_York")
+;; "20200724T093000")
+;; (STATUS nil "CONFIRMED")
+;; (CLASS nil "PUBLIC")
+;; (X-MICROSOFT-CDO-INTENDEDSTATUS nil "BUSY")
+;; (TRANSP nil "OPAQUE")
+;; (LAST-MODIFIED nil "20200719T150815Z")
+;; (DTSTAMP nil "20200719T150815Z")
+;; (SEQUENCE nil "0")
+;; (DESCRIPTION nil "The following is a new meeting request:"))
+;; ((VALARM nil
+;; ((ACTION nil "DISPLAY")
+;; (TRIGGER
+;; (RELATED "START")
+;; "-PT5M")
+;; (DESCRIPTION nil "Reminder"))
+;; nil)))))
+
+(provide 'gnus-icalendar-tests)
+;;; gnus-icalendar-tests.el ends here
diff --git a/test/lisp/gnus/gnus-util-tests.el b/test/lisp/gnus/gnus-util-tests.el
index b01e2fc2966..7eadb0de716 100644
--- a/test/lisp/gnus/gnus-util-tests.el
+++ b/test/lisp/gnus/gnus-util-tests.el
@@ -1,4 +1,4 @@
-;;; gnus-util-tests.el --- Selectived tests only.
+;;; gnus-util-tests.el --- Selectived tests only. -*- lexical-binding:t -*-
;; Copyright (C) 2015-2020 Free Software Foundation, Inc.
;; Author: Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
diff --git a/test/lisp/gnus/mml-sec-tests.el b/test/lisp/gnus/mml-sec-tests.el
index 07da4bffa5a..673fa6984a1 100644
--- a/test/lisp/gnus/mml-sec-tests.el
+++ b/test/lisp/gnus/mml-sec-tests.el
@@ -37,7 +37,7 @@ Mostly, the empty passphrase is used. However, the keys for
as S/MIME).")
(defun test-conf ()
- (ignore-errors (epg-configuration)))
+ (ignore-errors (epg-find-configuration 'OpenPGP)))
(defun enc-standards ()
(if with-smime '(enc-pgp enc-pgp-mime enc-smime)
@@ -647,6 +647,7 @@ In this test, just multiple encryption and signing keys may be available."
(ert-deftest mml-secure-en-decrypt-sign-1-2-double ()
"Sign and encrypt message; then decrypt and test for expected result.
In this test, just multiple encryption and signing keys may be available."
+ :tags '(:unstable)
(skip-unless (test-conf))
(mml-secure-test-key-fixture
(lambda ()
@@ -842,7 +843,8 @@ So the second decryption fails."
(ert-deftest mml-secure-en-decrypt-passphrase-no-cache-openpgp-todo ()
"Passphrase caching with OpenPGP only for GnuPG 1.x."
(skip-unless (test-conf))
- (skip-unless (string< (cdr (assq 'version (epg-configuration))) "2"))
+ (skip-unless (string< (cdr (assq 'version (epg-find-configuration 'OpenPGP)))
+ "2"))
(mml-secure-en-decrypt-passphrase-no-cache 'enc-pgp)
(mml-secure-en-decrypt-passphrase-no-cache 'enc-pgp-mime))
@@ -884,7 +886,7 @@ So the second decryption fails."
(defun mml-secure-run-tests-with-gpg2 ()
"Run all tests with gpg2 instead of gpg."
(let* ((epg-gpg-program "gpg2"); ~/local/gnupg-2.1.9/PLAY/inst/bin/gpg2
- (gpg-version (cdr (assq 'version (epg-configuration))))
+ (gpg-version (cdr (assq 'version (epg-find-configuration 'OpenPGP))))
;; Empty passphrases do not seem to work with gpgsm in 2.1.x:
;; https://lists.gnupg.org/pipermail/gnupg-users/2015-October/054575.html
(with-smime (string< gpg-version "2.1")))
diff --git a/test/lisp/hi-lock-tests.el b/test/lisp/hi-lock-tests.el
index 59f3e73b17d..d30a6d08001 100644
--- a/test/lisp/hi-lock-tests.el
+++ b/test/lisp/hi-lock-tests.el
@@ -5,18 +5,20 @@
;; Author: Tino Calancha <tino.calancha@gmail.com>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/international/ccl-tests.el b/test/lisp/international/ccl-tests.el
index 9277d0162e8..16e591f1dd5 100644
--- a/test/lisp/international/ccl-tests.el
+++ b/test/lisp/international/ccl-tests.el
@@ -232,3 +232,17 @@ At EOF:
(with-temp-buffer
(ccl-dump prog-midi-code)
(should (equal (buffer-string) prog-midi-dump))))
+
+(ert-deftest ccl-hash-table ()
+ (let ((sym (gensym))
+ (table (make-hash-table :test 'eq)))
+ (puthash 16 17 table)
+ (puthash 17 16 table)
+ (define-translation-hash-table sym table)
+ (let* ((prog `(2
+ ((loop
+ (lookup-integer ,sym r0 r1)))))
+ (compiled (ccl-compile prog))
+ (registers [17 0 0 0 0 0 0 0]))
+ (ccl-execute compiled registers)
+ (should (equal registers [2 16 0 0 0 0 0 1])))))
diff --git a/test/lisp/isearch-tests.el b/test/lisp/isearch-tests.el
index 3f430ab25f7..516077ac1f8 100644
--- a/test/lisp/isearch-tests.el
+++ b/test/lisp/isearch-tests.el
@@ -4,18 +4,20 @@
;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/json-tests.el b/test/lisp/json-tests.el
index a0e8c87c7b3..8ac454467d3 100644
--- a/test/lisp/json-tests.el
+++ b/test/lisp/json-tests.el
@@ -4,18 +4,20 @@
;; Author: Dmitry Gutov <dgutov@yandex.ru>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/jsonrpc-tests.el b/test/lisp/jsonrpc-tests.el
index 6c08023d4f3..168a2c950cf 100644
--- a/test/lisp/jsonrpc-tests.el
+++ b/test/lisp/jsonrpc-tests.el
@@ -5,18 +5,20 @@
;; Author: João Távora <joaotavora@gmail.com>
;; Keywords: tests
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/mail/footnote-tests.el b/test/lisp/mail/footnote-tests.el
index 79f48072391..6594aa2b3e5 100644
--- a/test/lisp/mail/footnote-tests.el
+++ b/test/lisp/mail/footnote-tests.el
@@ -5,18 +5,20 @@
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/manual/rmailmm.el b/test/lisp/mail/rmailmm-tests.el
index d6e29a8b07b..645bb96d113 100644
--- a/test/manual/rmailmm.el
+++ b/test/lisp/mail/rmailmm-tests.el
@@ -1,4 +1,4 @@
-;;; rmailmm.el --- tests for mail/rmailmm.el
+;;; rmailmm-tests.el --- Tests for rmailmm.el -*- lexical-binding:t -*-
;; Copyright (C) 2006-2020 Free Software Foundation, Inc.
@@ -19,27 +19,42 @@
;;; Commentary:
+;; Converted to ert from previous manual tests.
+
+;; FIXME: Some of these still lack a condition for success.
+
;;; Code:
+(require 'ert)
(require 'rmailmm)
-(defun rmailmm-test-handler ()
+(ert-deftest rmailmm-test-handler ()
"Test of a mail using no MIME parts at all."
(let ((mail "To: alex@gnu.org
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
-\372\304\322\301\327\323\324\327\325\312\324\305\41"))
- (switch-to-buffer (get-buffer-create "*test*"))
- (erase-buffer)
- (set-buffer-multibyte nil)
- (insert mail)
- (rmail-mime-show t)
- (set-buffer-multibyte t)))
+\372\304\322\301\327\323\324\327\325\312\324\305\41")
+ (correct "To: alex@gnu.org
+Content-Type: text/plain; charset=koi8-r
+Content-Transfer-Encoding: 8bit
+MIME-Version: 1.0
-(defun rmailmm-test-bulk-handler ()
+ЗдравÑтвуйте!
+"))
+ (with-temp-buffer
+ (erase-buffer)
+ (set-buffer-multibyte nil)
+ (insert mail)
+ (rmail-mime-show t)
+ (set-buffer-multibyte t)
+ (should (equal (buffer-string) correct)))))
+
+;;;; FIXME: This doesn't seem to be working.
+(ert-deftest rmailmm-test-bulk-handler ()
"Test of a mail used as an example in RFC 2183."
+ :tags '(:unstable)
(let ((mail "Content-Type: image/jpeg
Content-Disposition: attachment; filename=genome.jpeg;
modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\";
@@ -54,13 +69,17 @@ WATQdRUvAK0Bnmshmtn79PpaLBbbOZkjKvRnjRZoRswOkG1wFchKew2g9wXVJVZL/m4+B+vv
UDwbgUEAUmk2Zyg101d6PhCDySgAvTvDgKiuOrc4dLxUb7UMnhGIexyI+d6U+ABuNAP4Simx
lgAAAABJRU5ErkJggg==
"))
- (switch-to-buffer (get-buffer-create "*test*"))
- (erase-buffer)
- (insert mail)
- (rmail-mime-show)))
-
-(defun rmailmm-test-multipart-handler ()
+ (with-temp-buffer
+ (erase-buffer)
+ (insert mail)
+ (rmail-mime-show)
+ ;; FIXME: What is the condition for success?
+ )))
+
+;; FIXME: Has no condition for success -- see below.
+(ert-deftest rmailmm-test-multipart-handler ()
"Test of a mail used as an example in RFC 2046."
+ :tags '(:unstable)
(let ((mail "From: Nathaniel Borenstein <nsb@bellcore.com>
To: Ned Freed <ned@innosoft.com>
Date: Sun, 21 Mar 1993 23:56:48 -0800 (PST)
@@ -88,6 +107,11 @@ This is the epilogue. It is also to be ignored."))
(switch-to-buffer (get-buffer-create "*test*"))
(erase-buffer)
(insert mail)
- (rmail-mime-show t)))
+ (rmail-mime-show t)
+ ;; FIXME: What is the condition for success?
+ (should nil) ; expected fail for now
+ ))
+
+(provide 'rmailmm-tests)
-;;; rmailmm.el ends here
+;; rmailmm-tests.el ends here
diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el
index f4c840c1171..5da86f36148 100644
--- a/test/lisp/minibuffer-tests.el
+++ b/test/lisp/minibuffer-tests.el
@@ -5,18 +5,20 @@
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/mwheel-tests.el b/test/lisp/mwheel-tests.el
new file mode 100644
index 00000000000..fd998fd4f0e
--- /dev/null
+++ b/test/lisp/mwheel-tests.el
@@ -0,0 +1,46 @@
+;;; mwheel-tests.el --- tests for mwheel.el -*- lexical-binding:t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'mwheel)
+
+(ert-deftest mwheel-test-enable/disable ()
+ (mouse-wheel-mode 1)
+ (should (eq (lookup-key (current-global-map) '[mouse-4]) 'mwheel-scroll))
+ (mouse-wheel-mode -1)
+ (should (eq (lookup-key (current-global-map) '[mouse-4]) nil)))
+
+(ert-deftest mwheel-test--create-scroll-keys ()
+ (should (equal (mouse-wheel--create-scroll-keys 10 'mouse-4)
+ '([mouse-4]
+ [left-margin mouse-4] [right-margin mouse-4]
+ [left-fringe mouse-4] [right-fringe mouse-4]
+ [vertical-scroll-bar mouse-4] [horizontal-scroll-bar mouse-4]
+ [mode-line mouse-4] [header-line mouse-4])))
+ ;; Don't bind modifiers outside of buffer area (e.g. for fringes).
+ (should (equal (mouse-wheel--create-scroll-keys '((shift) . 1) 'mouse-4)
+ '([(shift mouse-4)])))
+ (should (equal (mouse-wheel--create-scroll-keys '((control) . 9) 'mouse-7)
+ '([(control mouse-7)])))
+ (should (equal (mouse-wheel--create-scroll-keys '((meta) . 5) 'mouse-5)
+ '([(meta mouse-5)]))))
+
+;;; mwheel-tests.el ends here
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 05196e7e4a6..3914f9ae44e 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -57,9 +57,7 @@
(declare-function tramp-get-remote-perl "tramp-sh")
(declare-function tramp-get-remote-stat "tramp-sh")
(declare-function tramp-list-tramp-buffers "tramp-cmds")
-(declare-function tramp-method-out-of-band-p "tramp-sh")
(declare-function tramp-smb-get-localname "tramp-smb")
-(declare-function tramp-time-diff "tramp")
(defvar ange-ftp-make-backup-files)
(defvar auto-save-file-name-transforms)
(defvar tramp-connection-properties)
@@ -98,6 +96,7 @@
'("mock"
(tramp-login-program "sh")
(tramp-login-args (("-i")))
+ (tramp-direct-async-args (("-c")))
(tramp-remote-shell "/bin/sh")
(tramp-remote-shell-args ("-c"))
(tramp-connection-timeout 10)))
@@ -2023,8 +2022,12 @@ is greater than 10.
"Check `substitute-in-file-name'."
(skip-unless (eq tramp-syntax 'default))
- ;; Suppress method name check.
- (let ((tramp-methods (cons '("method") tramp-methods)))
+ ;; Suppress method name check. We cannot use the string "foo" as
+ ;; user name, because (substitute-in-string "/~foo") returns
+ ;; different values depending on the existence of user "foo" (see
+ ;; Bug#43052).
+ (let ((tramp-methods (cons '("method") tramp-methods))
+ (foo (downcase (md5 (current-time-string)))))
(should
(string-equal (substitute-in-file-name "/method:host:///foo") "/foo"))
(should
@@ -2056,36 +2059,40 @@ is greater than 10.
;; Emacs 25, occasionally. No idea what's up.
(when (tramp--test-emacs26-p)
(should
- (string-equal (substitute-in-file-name "/method:host://~foo") "/~foo"))
+ (string-equal
+ (substitute-in-file-name (concat "/method:host://~" foo))
+ (concat "/~" foo)))
(should
(string-equal
- (substitute-in-file-name "/method:host:/~foo") "/method:host:/~foo"))
+ (substitute-in-file-name (concat "/method:host:/~" foo))
+ (concat "/method:host:/~" foo)))
(should
(string-equal
- (substitute-in-file-name "/method:host:/path//~foo") "/~foo"))
+ (substitute-in-file-name (concat "/method:host:/path//~" foo))
+ (concat "/~" foo)))
;; (substitute-in-file-name "/path/~foo") expands only for a local
;; user "foo" to "/~foo"". Otherwise, it doesn't expand.
(should
(string-equal
- (substitute-in-file-name
- "/method:host:/path/~foo") "/method:host:/path/~foo"))
+ (substitute-in-file-name (concat "/method:host:/path/~" foo))
+ (concat "/method:host:/path/~" foo)))
;; Quoting local part.
(should
(string-equal
- (substitute-in-file-name "/method:host:/://~foo")
- "/method:host:/://~foo"))
+ (substitute-in-file-name (concat "/method:host:/://~" foo))
+ (concat "/method:host:/://~" foo)))
(should
(string-equal
- (substitute-in-file-name
- "/method:host:/:/~foo") "/method:host:/:/~foo"))
+ (substitute-in-file-name (concat "/method:host:/:/~" foo))
+ (concat "/method:host:/:/~" foo)))
(should
(string-equal
- (substitute-in-file-name
- "/method:host:/:/path//~foo") "/method:host:/:/path//~foo"))
+ (substitute-in-file-name (concat "/method:host:/:/path//~" foo))
+ (concat "/method:host:/:/path//~" foo)))
(should
(string-equal
- (substitute-in-file-name
- "/method:host:/:/path/~foo") "/method:host:/:/path/~foo")))
+ (substitute-in-file-name (concat "/method:host:/:/path/~" foo))
+ (concat "/method:host:/:/path/~" foo))))
(let (process-environment)
(should
@@ -2154,21 +2161,12 @@ is greater than 10.
"/method:host:/:/~/path/file"))))
;; The following test is inspired by Bug#26911 and Bug#34834. They
-;; are rather bugs in `expand-file-name', and it fails for all Emacs
-;; versions. Test added for later, when they are fixed.
+;; were bugs in `expand-file-name'.
(ert-deftest tramp-test05-expand-file-name-relative ()
"Check `expand-file-name'."
- ;; Mark as failed until bug has been fixed.
- :expected-result :failed
(skip-unless (tramp--test-enabled))
-
- ;; These are the methods the test doesn't fail.
- (when (or (tramp--test-adb-p) (tramp--test-ange-ftp-p) (tramp--test-gvfs-p)
- (tramp--test-rclone-p)
- (tramp--test-smb-p))
- (setf (ert-test-expected-result-type
- (ert-get-test 'tramp-test05-expand-file-name-relative))
- :passed))
+ ;; The bugs are fixed in Emacs 28.1.
+ (skip-unless (tramp--test-emacs28-p))
(should
(string-equal
@@ -3556,7 +3554,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; `tmp-name3' is a local file name. Therefore, the link
;; target remains unchanged, even if quoted.
;; `make-symbolic-link' might not be permitted on w32 systems.
- (unless (tramp--test-windows-nt)
+ (unless (tramp--test-windows-nt-p)
(make-symbolic-link tmp-name1 tmp-name3)
(should
(string-equal tmp-name1 (file-symlink-p tmp-name3))))
@@ -3670,7 +3668,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(concat (file-remote-p tmp-name2) penguin)))))
;; `tmp-name3' is a local file name.
;; `make-symbolic-link' might not be permitted on w32 systems.
- (unless (tramp--test-windows-nt)
+ (unless (tramp--test-windows-nt-p)
(make-symbolic-link tmp-name1 tmp-name3)
(should (file-symlink-p tmp-name3))
(should-not (string-equal tmp-name3 (file-truename tmp-name3)))
@@ -4325,9 +4323,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
- ;; We cannot use `string-equal', because tramp-adb.el
- ;; echoes also the sent string.
- (should (string-match "\\`foo" (buffer-string))))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
@@ -4346,7 +4342,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
- (should (string-equal (buffer-string) "foo")))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors
@@ -4368,13 +4364,35 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
- ;; We cannot use `string-equal', because tramp-adb.el
- ;; echoes also the sent string.
- (should (string-match "\\`foo" (buffer-string))))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc))))))
+(defmacro tramp--test--deftest-direct-async-process
+ (test docstring &optional unstable)
+ "Define ert test `TEST-direct-async' for direct async processes.
+If UNSTABLE is non-nil, the test is tagged as `:unstable'."
+ (declare (indent 1))
+ `(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) ()
+ ,docstring
+ :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test))
+ (skip-unless (tramp--test-enabled))
+ (let ((default-directory tramp-test-temporary-file-directory)
+ (ert-test (ert-get-test ',test))
+ (tramp-connection-properties
+ (cons '(nil "direct-async-process" t) tramp-connection-properties)))
+ (skip-unless (tramp-direct-async-process-p))
+ ;; We do expect an established connection already,
+ ;; `file-truename' does it by side-effect. Suppress
+ ;; `tramp--test-enabled', in order to keep the connection.
+ (cl-letf (((symbol-function #'tramp--test-enabled) (lambda nil t)))
+ (file-truename tramp-test-temporary-file-directory)
+ (funcall (ert-test-body ert-test))))))
+
+(tramp--test--deftest-direct-async-process tramp-test29-start-file-process
+ "Check direct async `start-file-process'.")
+
(ert-deftest tramp-test30-make-process ()
"Check `make-process'."
:tags '(:expensive-test)
@@ -4407,9 +4425,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
- ;; We cannot use `string-equal', because tramp-adb.el
- ;; echoes also the sent string.
- (should (string-match "\\`foo" (buffer-string))))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
@@ -4430,7 +4446,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (< (- (point-max) (point-min)) (length "foo"))
(while (accept-process-output proc 0 nil t))))
- (should (string-equal (buffer-string) "foo")))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors
@@ -4456,9 +4472,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
(with-timeout (10 (tramp--test-timeout-handler))
(while (not (string-match "foo" (buffer-string)))
(while (accept-process-output proc 0 nil t))))
- ;; We cannot use `string-equal', because tramp-adb.el
- ;; echoes also the sent string.
- (should (string-match "\\`foo" (buffer-string))))
+ (should (string-match "foo" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
@@ -4482,69 +4496,67 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Read output.
(with-timeout (10 (tramp--test-timeout-handler))
(while (accept-process-output proc 0 nil t)))
- ;; We cannot use `string-equal', because tramp-adb.el
- ;; echoes also the sent string. And a remote macOS sends
- ;; a slightly modified string. On MS Windows,
- ;; `delete-process' sends an unknown signal.
- (should
- (string-match
- (if (eq system-type 'windows-nt)
- "unknown signal\n\\'" "killed.*\n\\'")
- (buffer-string))))
+ ;; On some MS Windows systems, it returns "unknown signal".
+ (should (string-match "unknown signal\\|killed" (buffer-string))))
;; Cleanup.
(ignore-errors (delete-process proc)))
;; Process with stderr buffer.
- (let ((stderr (generate-new-buffer "*stderr*")))
- (unwind-protect
- (with-temp-buffer
- (setq proc
- (with-no-warnings
- (make-process
- :name "test5" :buffer (current-buffer)
- :command '("cat" "/does-not-exist")
- :stderr stderr
- :file-handler t)))
- (should (processp proc))
- ;; Read stderr.
- (with-timeout (10 (tramp--test-timeout-handler))
- (while (accept-process-output proc 0 nil t)))
- (delete-process proc)
- (with-current-buffer stderr
- (should
- (string-match
- "cat:.* No such file or directory" (buffer-string)))))
+ (unless (tramp-direct-async-process-p)
+ (let ((stderr (generate-new-buffer "*stderr*")))
+ (unwind-protect
+ (with-temp-buffer
+ (setq proc
+ (with-no-warnings
+ (make-process
+ :name "test5" :buffer (current-buffer)
+ :command '("cat" "/does-not-exist")
+ :stderr stderr
+ :file-handler t)))
+ (should (processp proc))
+ ;; Read stderr.
+ (with-timeout (10 (tramp--test-timeout-handler))
+ (while (accept-process-output proc 0 nil t)))
+ (delete-process proc)
+ (with-current-buffer stderr
+ (should
+ (string-match
+ "cat:.* No such file or directory" (buffer-string)))))
- ;; Cleanup.
- (ignore-errors (delete-process proc))
- (ignore-errors (kill-buffer stderr))))
+ ;; Cleanup.
+ (ignore-errors (delete-process proc))
+ (ignore-errors (kill-buffer stderr)))))
;; Process with stderr file.
- (dolist (tmpfile `(,tmp-name1 ,tmp-name2))
- (unwind-protect
- (with-temp-buffer
- (setq proc
- (with-no-warnings
- (make-process
- :name "test6" :buffer (current-buffer)
- :command '("cat" "/does-not-exist")
- :stderr tmpfile
- :file-handler t)))
- (should (processp proc))
- ;; Read stderr.
- (with-timeout (10 (tramp--test-timeout-handler))
- (while (accept-process-output proc nil nil t)))
- (delete-process proc)
+ (unless (tramp-direct-async-process-p)
+ (dolist (tmpfile `(,tmp-name1 ,tmp-name2))
+ (unwind-protect
(with-temp-buffer
- (insert-file-contents tmpfile)
- (should
- (string-match
- "cat:.* No such file or directory" (buffer-string)))))
+ (setq proc
+ (with-no-warnings
+ (make-process
+ :name "test6" :buffer (current-buffer)
+ :command '("cat" "/does-not-exist")
+ :stderr tmpfile
+ :file-handler t)))
+ (should (processp proc))
+ ;; Read stderr.
+ (with-timeout (10 (tramp--test-timeout-handler))
+ (while (accept-process-output proc nil nil t)))
+ (delete-process proc)
+ (with-temp-buffer
+ (insert-file-contents tmpfile)
+ (should
+ (string-match
+ "cat:.* No such file or directory" (buffer-string)))))
- ;; Cleanup.
- (ignore-errors (delete-process proc))
- (ignore-errors (delete-file tmpfile)))))))
+ ;; Cleanup.
+ (ignore-errors (delete-process proc))
+ (ignore-errors (delete-file tmpfile))))))))
+
+(tramp--test--deftest-direct-async-process tramp-test30-make-process
+ "Check direct async `make-process'.")
(ert-deftest tramp-test31-interrupt-process ()
"Check `interrupt-process'."
@@ -5689,11 +5701,11 @@ This does not support special file names."
"Check, whether the sudoedit method is used."
(tramp-sudoedit-file-name-p tramp-test-temporary-file-directory))
-(defun tramp--test-windows-nt ()
+(defun tramp--test-windows-nt-p ()
"Check, whether the locale host runs MS Windows."
(eq system-type 'windows-nt))
-(defun tramp--test-windows-nt-and-batch ()
+(defun tramp--test-windows-nt-and-batch-p ()
"Check, whether the locale host runs MS Windows in batch mode.
This does not support special characters."
(and (eq system-type 'windows-nt) noninteractive))
@@ -6000,7 +6012,7 @@ Use the `ls' command."
(skip-unless (tramp--test-enabled))
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-rsync-p)))
- (skip-unless (not (tramp--test-windows-nt-and-batch)))
+ (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(let ((tramp-connection-properties
@@ -6066,7 +6078,7 @@ Use the `ls' command."
(skip-unless (tramp--test-enabled))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
- (skip-unless (not (tramp--test-windows-nt-and-batch)))
+ (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(skip-unless (not (tramp--test-crypt-p)))
@@ -6081,7 +6093,7 @@ Use the `stat' command."
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
- (skip-unless (not (tramp--test-windows-nt-and-batch)))
+ (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(skip-unless (not (tramp--test-crypt-p)))
@@ -6103,7 +6115,7 @@ Use the `perl' command."
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
- (skip-unless (not (tramp--test-windows-nt-and-batch)))
+ (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(skip-unless (not (tramp--test-crypt-p)))
@@ -6128,7 +6140,7 @@ Use the `ls' command."
(skip-unless (tramp--test-sh-p))
(skip-unless (not (tramp--test-docker-p)))
(skip-unless (not (tramp--test-rsync-p)))
- (skip-unless (not (tramp--test-windows-nt-and-batch)))
+ (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
(skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
(skip-unless (not (tramp--test-ksh-p)))
(skip-unless (not (tramp--test-crypt-p)))
@@ -6223,7 +6235,7 @@ process sentinels. They shall not disturb each other."
(shell-file-name (if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
;; It doesn't work on w32 systems.
(watchdog
- (unless (tramp--test-windows-nt)
+ (unless (tramp--test-windows-nt-p)
(start-process-shell-command
"*watchdog*" nil
(format
@@ -6591,7 +6603,8 @@ If INTERACTIVE is non-nil, the tests are run interactively."
;; * Fix `tramp-test06-directory-file-name' for `ftp'.
;; * Investigate, why `tramp-test11-copy-file' and `tramp-test12-rename-file'
;; do not work properly for `nextcloud'.
-;; * Implement `tramp-test31-interrupt-process' for `adb'.
+;; * Implement `tramp-test31-interrupt-process' for `adb' and for
+;; direct async processes.
;; * Fix Bug#16928 in `tramp-test43-asynchronous-requests'. A remote
;; file name operation cannot run in the timer. Remove `:unstable' tag?
diff --git a/test/lisp/pcmpl-linux-resources/fs/ext4/.keep b/test/lisp/pcmpl-linux-resources/fs/ext4/.keep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/test/lisp/pcmpl-linux-resources/fs/ext4/.keep
diff --git a/test/lisp/pcmpl-linux-resources/mtab b/test/lisp/pcmpl-linux-resources/mtab
new file mode 100644
index 00000000000..ea33abd7b0a
--- /dev/null
+++ b/test/lisp/pcmpl-linux-resources/mtab
@@ -0,0 +1,11 @@
+/dev/sdb1 / ext3 rw,relatime,errors=remount-ro 0 0
+proc /proc proc rw,noexec,nosuid,nodev 0 0
+/sys /sys sysfs rw,noexec,nosuid,nodev 0 0
+varrun /var/run tmpfs rw,noexec,nosuid,nodev,mode=0755 0 0
+varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
+udev /dev tmpfs rw,mode=0755 0 0
+devshm /dev/shm tmpfs rw 0 0
+devpts /dev/pts devpts rw,gid=5,mode=620 0 0
+lrm /lib/modules/2.6.24-16-generic/volatile tmpfs rw 0 0
+securityfs /sys/kernel/security securityfs rw 0 0
+gvfs-fuse-daemon /home/alice/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,user=alice 0 0
diff --git a/test/lisp/pcmpl-linux-tests.el b/test/lisp/pcmpl-linux-tests.el
new file mode 100644
index 00000000000..cf7e6288fdb
--- /dev/null
+++ b/test/lisp/pcmpl-linux-tests.el
@@ -0,0 +1,51 @@
+;;; pcmpl-linux-tests.el --- Tests for pcmpl-linux.el -*- lexical-binding: t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'pcmpl-linux)
+
+(defvar pcmpl-linux-tests-data-dir
+ (file-truename
+ (expand-file-name "pcmpl-linux-resources/"
+ (file-name-directory (or load-file-name
+ buffer-file-name))))
+ "Base directory of pcmpl-linux-tests.el data files.")
+
+(ert-deftest pcmpl-linux-test-fs-types ()
+ (let ((pcmpl-linux-fs-modules-path-format (expand-file-name "fs"
+ pcmpl-linux-tests-data-dir)))
+ ;; FIXME: Shouldn't return "." and ".."
+ (should (equal (pcmpl-linux-fs-types)
+ '("." ".." "ext4")))))
+
+(ert-deftest pcmpl-linux-test-mounted-directories ()
+ (let ((pcmpl-linux-mtab-file (expand-file-name "mtab"
+ pcmpl-linux-tests-data-dir)))
+ (should (equal (pcmpl-linux-mounted-directories)
+ '("/" "/dev" "/dev/pts" "/dev/shm" "/home/alice/.gvfs"
+ "/lib/modules/2.6.24-16-generic/volatile" "/proc" "/sys"
+ "/sys/kernel/security" "/var/lock" "/var/run")))))
+
+(provide 'pcmpl-linux-tests)
+
+;;; pcmpl-linux-tests.el ends here
diff --git a/test/lisp/play/life-tests.el b/test/lisp/play/life-tests.el
new file mode 100644
index 00000000000..38726bbc416
--- /dev/null
+++ b/test/lisp/play/life-tests.el
@@ -0,0 +1,80 @@
+;;; life-tests.el --- Tests for life.el -*- lexical-binding:t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Stefan Kangas <stefankangas@gmail.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'life)
+
+(ert-deftest test-life ()
+ (let ((life--max-width 5)
+ (life--max-height 3)
+ (life-patterns [(" @ "
+ " @"
+ "@@@")])
+ (generations '("
+
+ @
+ @
+ @@@
+" "
+
+
+ @ @
+ @@
+ @
+" "
+
+
+ @
+ @ @
+ @@
+" "
+
+
+ @
+ @@
+ @@
+" "
+
+
+ @
+ @
+ @@@
+"
+)))
+ (life-setup)
+ ;; Test initial state.
+ (goto-char (point-min))
+ (dolist (generation generations)
+ ;; Hack to test buffer contents without trailing whitespace,
+ ;; while also not modifying the "*Life*" buffer.
+ (let ((str (buffer-string))
+ (delete-trailing-lines t))
+ (with-temp-buffer
+ (insert str)
+ (delete-trailing-whitespace)
+ (should (equal (buffer-string) generation))))
+ (life--tick))))
+
+(provide 'life-tests)
+
+;;; life-tests.el ends here
diff --git a/test/lisp/progmodes/compile-tests.el b/test/lisp/progmodes/compile-tests.el
index d566e7dd862..819f2e78c2a 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -267,6 +267,8 @@
3 nil 29 "test_main.cpp")
("1>test_main.cpp(29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int"
3 nil 29 "test_main.cpp")
+ ("C:\\tmp\\test.cpp(101,11): error C4101: 'bias0123': unreferenced local variable [C:\\tmp\\project.vcxproj]"
+ 1 11 101 "C:\\tmp\\test.cpp")
;; watcom
("..\\src\\ctrl\\lister.c(109): Error! E1009: Expecting ';' but found '{'"
1 nil 109 "..\\src\\ctrl\\lister.c")
@@ -434,7 +436,7 @@ The test data is in `compile-tests--test-regexps-data'."
(compilation-num-warnings-found 0)
(compilation-num-infos-found 0))
(mapc #'compile--test-error-line compile-tests--test-regexps-data)
- (should (eq compilation-num-errors-found 94))
+ (should (eq compilation-num-errors-found 95))
(should (eq compilation-num-warnings-found 35))
(should (eq compilation-num-infos-found 28)))))
diff --git a/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl
new file mode 100644
index 00000000000..4a9842ffa56
--- /dev/null
+++ b/test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl
@@ -0,0 +1,52 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.020;
+
+# This file contains test input and expected output for the tests in
+# cperl-mode-tests.el, cperl-mode-test-indent-exp. The code is
+# syntactically valid, but doesn't make much sense.
+
+# -------- for loop: input --------
+for my $foo (@ARGV)
+{
+...;
+}
+# -------- for loop: expected output --------
+for my $foo (@ARGV) {
+ ...;
+}
+# -------- for loop: end --------
+
+# -------- while loop: input --------
+{
+while (1)
+{
+say "boring loop";
+}
+continue
+{
+last; # no endless loop, though
+}
+}
+# -------- while loop: expected output --------
+{
+ while (1) {
+ say "boring loop";
+ } continue {
+ last; # no endless loop, though
+ }
+}
+# -------- while loop: end --------
+
+# -------- if-then-else: input --------
+if (my $foo) { bar() } elsif (quux()) { baz() } else { quuux }
+# -------- if-then-else: expected output --------
+if (my $foo) {
+ bar();
+} elsif (quux()) {
+ baz();
+} else {
+ quuux;
+}
+# -------- if-then-else: end --------
diff --git a/test/lisp/progmodes/cperl-mode-tests.el b/test/lisp/progmodes/cperl-mode-tests.el
index be8b42d99a8..b549b924042 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -7,17 +7,39 @@
;; Keywords: internal
;; Homepage: https://github.com/HaraldJoerg/cperl-mode
-;;; Commentary:
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
-;; This is a collection of tests for the fontification of CPerl-mode.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-;; Run these tests interactively:
-;; (ert-run-tests-interactively '(tag :fontification))
+;;; Commentary:
+
+;; This is a collection of tests for CPerl-mode.
;;; Code:
(defvar cperl-test-mode #'cperl-mode)
+(require 'cperl-mode)
+
+(defvar cperl-mode-tests-data-directory
+ (expand-file-name "lisp/progmodes/cperl-mode-resources"
+ (or (getenv "EMACS_TEST_DIRECTORY")
+ (expand-file-name "../../../"
+ (or load-file-name
+ buffer-file-name))))
+ "Directory containing cperl-mode test data.")
+
(defun cperl-test-ppss (text regexp)
"Return the `syntax-ppss' of the first character matched by REGEXP in TEXT."
(interactive)
@@ -48,4 +70,103 @@ have a face property."
(let ((code "{ $a- / $b } # /"))
(should (equal (nth 8 (cperl-test-ppss code "/")) 7))))
+(ert-deftest cperl-mode-test-bug-16368 ()
+ "Verify that `cperl-forward-group-in-re' doesn't hide errors."
+ (skip-unless (eq cperl-test-mode #'cperl-mode))
+ (let ((code "/(\\d{4})(?{2}/;") ; the regex from the bug report
+ (result))
+ (with-temp-buffer
+ (insert code)
+ (goto-char 9)
+ (setq result (cperl-forward-group-in-re))
+ (should (equal (car result) 'scan-error))
+ (should (equal (nth 1 result) "Unbalanced parentheses"))
+ (should (= (point) 9)))) ; point remains unchanged on error
+ (let ((code "/(\\d{4})(?{2})/;") ; here all parens are balanced
+ (result))
+ (with-temp-buffer
+ (insert code)
+ (goto-char 9)
+ (setq result (cperl-forward-group-in-re))
+ (should (equal result nil))
+ (should (= (point) 15))))) ; point has skipped the group
+
+(defun cperl-mode-test--run-bug-10483 ()
+ "Runs a short program, intended to be under timer scrutiny.
+This function is intended to be used by an Emacs subprocess in
+batch mode. The message buffer is used to report the result of
+running `cperl-indent-exp' for a very simple input. The result
+is expected to be different from the input, to verify that
+indentation actually takes place.."
+ (let ((code "poop ('foo', \n'bar')")) ; see the bug report
+ (message "Test Bug#10483 started")
+ (with-temp-buffer
+ (insert code)
+ (funcall cperl-test-mode)
+ (goto-char (point-min))
+ (search-forward "poop")
+ (cperl-indent-exp)
+ (message "%s" (buffer-string)))))
+
+(ert-deftest cperl-mode-test-bug-10483 ()
+ "Verifies that a piece of code which ends in a paren without a
+statement terminato ron tne same line does not loop forever. The
+test starts an asynchronous Emacs batch process under timeout
+control."
+ (interactive)
+ (let* ((emacs (concat invocation-directory invocation-name))
+ (test-function 'cperl-mode-test--run-bug-10483)
+ (test-function-name (symbol-name test-function))
+ (test-file (symbol-file test-function 'defun))
+ (ran-out-of-time nil)
+ (process-connection-type nil)
+ runner)
+ (with-temp-buffer
+ (with-timeout (1
+ (delete-process runner)
+ (setq ran-out-of-time t))
+ (setq runner (start-process "speedy"
+ (current-buffer)
+ emacs
+ "-batch"
+ "--quick"
+ "--load" test-file
+ "--funcall" test-function-name))
+ (while (accept-process-output runner)))
+ (should (equal ran-out-of-time nil))
+ (goto-char (point-min))
+ ;; just a very simple test for indentation: This should
+ ;; be rather robust with regard to indentation defaults
+ (should (string-match
+ "poop ('foo', \n 'bar')" (buffer-string))))))
+
+(ert-deftest cperl-mode-test-indent-exp ()
+ "Run various tests for `cperl-indent-exp' edge cases.
+These exercise some standard blocks and also the special
+treatment for Perl expressions where a closing paren isn't the
+end of the statement."
+ (let ((file (expand-file-name "cperl-indent-exp.pl"
+ cperl-mode-tests-data-directory)))
+ (with-temp-buffer
+ (insert-file-contents file)
+ (goto-char (point-min))
+ (while (re-search-forward
+ (concat "^# ?-+ \\_<\\(?1:.+?\\)\\_>: input ?-+\n"
+ "\\(?2:\\(?:.*\n\\)+?\\)"
+ "# ?-+ \\1: expected output ?-+\n"
+ "\\(?3:\\(?:.*\n\\)+?\\)"
+ "# ?-+ \\1: end ?-+")
+ nil t)
+ (let ((name (match-string 1))
+ (code (match-string 2))
+ (expected (match-string 3))
+ got)
+ (with-temp-buffer
+ (insert code)
+ (goto-char (point-min))
+ (cperl-indent-exp) ; here we go!
+ (setq expected (concat "test case " name ":\n" expected))
+ (setq got (concat "test case " name ":\n" (buffer-string)))
+ (should (equal got expected))))))))
+
;;; cperl-mode-tests.el ends here
diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el
index 0d53c0681bf..681e51de0ed 100644
--- a/test/lisp/progmodes/js-tests.el
+++ b/test/lisp/progmodes/js-tests.el
@@ -1,4 +1,4 @@
-;;; js-tests.el --- Test suite for js-mode
+;;; js-tests.el --- Test suite for js-mode -*- lexical-binding:t -*-
;; Copyright (C) 2017-2020 Free Software Foundation, Inc.
diff --git a/test/lisp/progmodes/subword-tests.el b/test/lisp/progmodes/subword-tests.el
index 86e905c8696..6aeee76110b 100644
--- a/test/lisp/progmodes/subword-tests.el
+++ b/test/lisp/progmodes/subword-tests.el
@@ -5,18 +5,20 @@
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 63e504bbe17..457de91c149 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -4,18 +4,20 @@
;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/sort-tests.el b/test/lisp/sort-tests.el
index 21f483a23af..9033745e0d4 100644
--- a/test/lisp/sort-tests.el
+++ b/test/lisp/sort-tests.el
@@ -4,18 +4,20 @@
;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/textmodes/bibtex-tests.el b/test/lisp/textmodes/bibtex-tests.el
index b3858de9e61..c12722fca13 100644
--- a/test/lisp/textmodes/bibtex-tests.el
+++ b/test/lisp/textmodes/bibtex-tests.el
@@ -1,4 +1,4 @@
-;;; bibtex-tests.el --- Test suite for bibtex.
+;;; bibtex-tests.el --- Test suite for bibtex. -*- lexical-binding:t -*-
;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
diff --git a/test/lisp/textmodes/conf-mode-tests.el b/test/lisp/textmodes/conf-mode-tests.el
index 7e870269959..7e094e8a7c2 100644
--- a/test/lisp/textmodes/conf-mode-tests.el
+++ b/test/lisp/textmodes/conf-mode-tests.el
@@ -7,18 +7,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/textmodes/css-mode-tests.el b/test/lisp/textmodes/css-mode-tests.el
index b57bbd8a9ef..38cb73b3557 100644
--- a/test/lisp/textmodes/css-mode-tests.el
+++ b/test/lisp/textmodes/css-mode-tests.el
@@ -7,18 +7,20 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/url/url-handlers-test.el b/test/lisp/url/url-handlers-test.el
index bf574fcc1a5..57692e53a70 100644
--- a/test/lisp/url/url-handlers-test.el
+++ b/test/lisp/url/url-handlers-test.el
@@ -4,18 +4,20 @@
;; Author: Nicolas Petton <nicolas@petton.fr>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/wdired-tests.el b/test/lisp/wdired-tests.el
index 2cfabd1ee2d..96e88f62fec 100644
--- a/test/lisp/wdired-tests.el
+++ b/test/lisp/wdired-tests.el
@@ -4,18 +4,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/manual/cedet/cedet-utests.el b/test/manual/cedet/cedet-utests.el
index 124b49907d8..ee6be438dd3 100644
--- a/test/manual/cedet/cedet-utests.el
+++ b/test/manual/cedet/cedet-utests.el
@@ -150,7 +150,7 @@ of just logging the error."
;; Cleanup stray input and events that are in the way.
;; Not doing this causes sit-for to not refresh the screen.
;; Doing this causes the user to need to press keys more frequently.
- (when (and (interactive-p) (input-pending-p))
+ (when (and (called-interactively-p 'interactive) (input-pending-p))
(if (fboundp 'read-event)
(read-event)
(read-char)))
@@ -497,11 +497,11 @@ When optional NO-ERROR don't throw an error if we can't run tests."
(error (concat "Pulse test only works on versions of Emacs"
" that support pulsing")))
;; Run the tests
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "<Press a key> Pulse one line.")
(read-char))
(pulse-momentary-highlight-one-line (point))
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "<Press a key> Pulse a region.")
(read-char))
(pulse-momentary-highlight-region (point)
@@ -510,11 +510,11 @@ When optional NO-ERROR don't throw an error if we can't run tests."
(forward-char 30)
(error nil))
(point)))
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "<Press a key> Pulse line a specific color.")
(read-char))
(pulse-momentary-highlight-one-line (point) 'mode-line)
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "<Press a key> Pulse a pre-existing overlay.")
(read-char))
(let* ((start (point-at-bol))
@@ -530,7 +530,7 @@ When optional NO-ERROR don't throw an error if we can't run tests."
(delete-overlay o)
(error "Non-temporary overlay was deleted!"))
)
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "Done!"))))
(provide 'cedet-utests)
diff --git a/test/manual/cedet/semantic-tests.el b/test/manual/cedet/semantic-tests.el
index 53552be06b2..a0899cb9326 100644
--- a/test/manual/cedet/semantic-tests.el
+++ b/test/manual/cedet/semantic-tests.el
@@ -235,7 +235,7 @@ Analyze the area between BEG and END."
(set-buffer buff)
(semantic-lex-spp-write-test)
(kill-buffer buff)
- (when (not (interactive-p))
+ (when (not (called-interactively-p 'interactive))
(kill-buffer "*SPP Write Test*"))
)))
@@ -276,7 +276,7 @@ tag that contains point, and return that."
target (lambda (start end prefix) (setq Lcount (1+ Lcount)))
(semantic-tag-start tag)
(semantic-tag-end tag))
- (when (interactive-p)
+ (when (called-interactively-p 'interactive)
(message "Found %d occurrences of %s in %.2f seconds"
Lcount (semantic-tag-name target)
(semantic-elapsed-time start nil)))
diff --git a/test/manual/image-size-tests.el b/test/manual/image-size-tests.el
index 67d8f788c8a..159e9025ae3 100644
--- a/test/manual/image-size-tests.el
+++ b/test/manual/image-size-tests.el
@@ -4,18 +4,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;; To test: Load the file and eval (image-size-tests).
;; A non-erroring result is a success.
diff --git a/test/manual/image-transforms-tests.el b/test/manual/image-transforms-tests.el
index 0ebd5c7a195..02607e63676 100644
--- a/test/manual/image-transforms-tests.el
+++ b/test/manual/image-transforms-tests.el
@@ -48,24 +48,24 @@
(let ((image "<svg height='30' width='30'>
<rect x='0' y='0' width='10' height='10'/>
<rect x='10' y='10' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
- <line x1='10' y1='10' x2='20' y2='20' style='stroke:#000'/>
- <line x1='20' y1='10' x2='10' y2='20' style='stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
+ <line x1='10' y1='10' x2='20' y2='20' style='stroke:currentColor'/>
+ <line x1='20' y1='10' x2='10' y2='20' style='stroke:currentColor'/>
<rect x='20' y='20' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
</svg>")
(top-left "<svg height='10' width='10'>
<rect x='0' y='0' width='10' height='10'/>
</svg>")
(middle "<svg height='10' width='10'>
<rect x='0' y='0' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
- <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
- <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
+ <line x1='0' y1='0' x2='10' y2='10' style='stroke:currentColor'/>
+ <line x1='10' y1='0' x2='0' y2='10' style='stroke:currentColor'/>
</svg>")
(bottom-right "<svg height='10' width='10'>
<rect x='0' y='0' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
</svg>"))
(insert-header "Test Crop: cropping an image (only works with ImageMagick)")
(insert-test "all params" top-left image '(:crop (10 10 0 0)))
@@ -77,23 +77,23 @@
(defun test-scaling ()
(let ((image "<svg height='10' width='10'>
<rect x='0' y='0' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
- <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
- <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
+ <line x1='0' y1='0' x2='10' y2='10' style='stroke:currentColor'/>
+ <line x1='10' y1='0' x2='0' y2='10' style='stroke:currentColor'/>
</svg>")
(large "<svg height='20' width='20'>
<rect x='0' y='0' width='20' height='20'
- style='fill:none;stroke-width:2;stroke:#000'/>
+ style='fill:none;stroke-width:2;stroke:currentColor'/>
<line x1='0' y1='0' x2='20' y2='20'
- style='stroke-width:2;stroke:#000'/>
+ style='stroke-width:2;stroke:currentColor'/>
<line x1='20' y1='0' x2='0' y2='20'
- style='stroke-width:2;stroke:#000'/>
+ style='stroke-width:2;stroke:currentColor'/>
</svg>")
(small "<svg height='5' width='5'>
<rect x='0' y='0' width='4' height='4'
- style='fill:none;stroke-width:1;stroke:#000'/>
- <line x1='0' y1='0' x2='4' y2='4' style='stroke:#000'/>
- <line x1='4' y1='0' x2='0' y2='4' style='stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
+ <line x1='0' y1='0' x2='4' y2='4' style='stroke:currentColor'/>
+ <line x1='4' y1='0' x2='0' y2='4' style='stroke:currentColor'/>
</svg>"))
(insert-header "Test Scaling: resize an image (pixelization may occur)")
(insert-test "1x" image image '(:scale 1))
@@ -107,27 +107,27 @@
(defun test-scaling-rotation ()
(let ((image "<svg height='20' width='20'>
<rect x='0' y='0' width='20' height='20'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
<rect x='0' y='0' width='10' height='10'
- style='fill:#000'/>
+ style='fill:currentColor'/>
</svg>")
(x2-90 "<svg height='40' width='40'>
<rect x='0' y='0' width='40' height='40'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
<rect x='20' y='0' width='20' height='20'
- style='fill:#000'/>
+ style='fill:currentColor'/>
</svg>")
(x2--90 "<svg height='40' width='40'>
<rect x='0' y='0' width='40' height='40'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
<rect x='0' y='20' width='20' height='20'
- style='fill:#000'/>
+ style='fill:currentColor'/>
</svg>")
(x0.5-180 "<svg height='10' width='10'>
<rect x='0' y='0' width='10' height='10'
- style='fill:none;stroke-width:1;stroke:#000'/>
+ style='fill:none;stroke-width:1;stroke:currentColor'/>
<rect x='5' y='5' width='5' height='5'
- style='fill:#000'/>
+ style='fill:currentColor'/>
</svg>"))
(insert-header "Test Scaling and Rotation: resize and rotate an image (pixelization may occur)")
(insert-test "1x, 0 degrees" image image '(:scale 1 :rotation 0))
diff --git a/test/manual/scroll-tests.el b/test/manual/scroll-tests.el
index 96a419a29d9..937e0b12799 100644
--- a/test/manual/scroll-tests.el
+++ b/test/manual/scroll-tests.el
@@ -4,18 +4,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/src/charset-tests.el b/test/src/charset-tests.el
index 9a1d0a46f91..86a0d6ffc1a 100644
--- a/test/src/charset-tests.el
+++ b/test/src/charset-tests.el
@@ -2,18 +2,20 @@
;; Copyright 2017-2020 Free Software Foundation, Inc.
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/src/chartab-tests.el b/test/src/chartab-tests.el
index 0ddea2b338c..4d52dc367c8 100644
--- a/test/src/chartab-tests.el
+++ b/test/src/chartab-tests.el
@@ -4,18 +4,20 @@
;; Author: Eli Zaretskii <eliz@gnu.org>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/src/cmds-tests.el b/test/src/cmds-tests.el
index e98e5784609..302b00c6760 100644
--- a/test/src/cmds-tests.el
+++ b/test/src/cmds-tests.el
@@ -5,18 +5,20 @@
;; Author: Nicolas Richard <youngfrog@members.fsf.org>
;; Keywords:
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
index 50cf0144b80..797b9ba5480 100644
--- a/test/src/doc-tests.el
+++ b/test/src/doc-tests.el
@@ -4,18 +4,20 @@
;; Author: Eli Zaretskii <eliz@gnu.org>
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index 18f76afca91..de0aeabfe78 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -1,21 +1,21 @@
-;;; editfns-tests.el -- tests for editfns.c
+;;; editfns-tests.el -- tests for editfns.c -*- lexical-binding:t -*-
;; Copyright (C) 2016-2020 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
@@ -124,8 +124,8 @@
"Validate character position to byte position translation."
(let ((bytes '()))
(dotimes (pos len)
- (setq bytes (add-to-list 'bytes (position-bytes (1+ pos)) t)))
- bytes))
+ (push (position-bytes (1+ pos)) bytes))
+ (nreverse bytes)))
(ert-deftest transpose-ascii-regions-test ()
(with-temp-buffer
diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el
index 96b03a01372..ed381d151ee 100644
--- a/test/src/fileio-tests.el
+++ b/test/src/fileio-tests.el
@@ -98,15 +98,14 @@ Also check that an encoding error can appear in a symlink."
(ert-deftest fileio-tests--relative-HOME ()
"Test that expand-file-name works even when HOME is relative."
- (let ((old-home (getenv "HOME")))
+ (let ((process-environment (copy-sequence process-environment)))
(setenv "HOME" "a/b/c")
(should (equal (expand-file-name "~/foo")
(expand-file-name "a/b/c/foo")))
(when (memq system-type '(ms-dos windows-nt))
;; Test expansion of drive-relative file names.
(setenv "HOME" "x:foo")
- (should (equal (expand-file-name "~/bar") "x:/foo/bar")))
- (setenv "HOME" old-home)))
+ (should (equal (expand-file-name "~/bar") "x:/foo/bar")))))
(ert-deftest fileio-tests--insert-file-interrupt ()
(let ((text "-*- coding: binary -*-\n\xc3\xc3help")
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 400e9126486..b9a7d29895a 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -1,4 +1,4 @@
-;;; fns-tests.el --- tests for src/fns.c
+;;; fns-tests.el --- tests for src/fns.c -*- lexical-binding:t -*-
;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
@@ -229,8 +229,8 @@
(require 'info)
(should (equal (func-arity 'Info-goto-node) '(1 . 3)))
(should (equal (func-arity (lambda (&rest x))) '(0 . many)))
- (should (equal (func-arity (eval (lambda (x &optional y)) nil)) '(1 . 2)))
- (should (equal (func-arity (eval (lambda (x &optional y)) t)) '(1 . 2)))
+ (should (equal (func-arity (eval '(lambda (x &optional y)) nil)) '(1 . 2)))
+ (should (equal (func-arity (eval '(lambda (x &optional y)) t)) '(1 . 2)))
(should (equal (func-arity 'let) '(1 . unevalled))))
(defun fns-tests--string-repeat (s o)
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
index 6efd8bed302..26fd6aa22a1 100644
--- a/test/src/lread-tests.el
+++ b/test/src/lread-tests.el
@@ -6,18 +6,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/src/print-tests.el b/test/src/print-tests.el
index 0f729964248..42e5962137c 100644
--- a/test/src/print-tests.el
+++ b/test/src/print-tests.el
@@ -4,18 +4,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 748afe41d2c..e15ad47f968 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -2,18 +2,20 @@
;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index 51dd1d1aeb5..b35a5287946 100644
--- a/test/src/timefns-tests.el
+++ b/test/src/timefns-tests.el
@@ -4,18 +4,20 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert)