aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Gutov2019-05-24 04:53:39 +0300
committerDmitry Gutov2019-05-24 04:53:39 +0300
commit8cdb9d9d24be0894ec3adc79f7f4af61e131850e (patch)
tree05cfdc9237eaf1abe30911caca26e95e2c68f4bd
parent62349fe82ad42d7d2a7fb19e40860ee5d6ebd017 (diff)
parent5b6401b001c770f5426597175a90ba78ddca79ef (diff)
downloademacs-8cdb9d9d24be0894ec3adc79f7f4af61e131850e.tar.gz
emacs-8cdb9d9d24be0894ec3adc79f7f4af61e131850e.zip
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--admin/authors.el2
-rw-r--r--admin/find-gc.el2
-rw-r--r--admin/last-chance.el1
-rwxr-xr-xautogen.sh13
-rwxr-xr-xbuild-aux/git-hooks/prepare-commit-msg45
-rwxr-xr-xbuild-aux/make-info-dir1
-rw-r--r--doc/emacs/building.texi6
-rw-r--r--doc/emacs/custom.texi1
-rw-r--r--doc/emacs/programs.texi5
-rw-r--r--doc/lispref/functions.texi4
-rw-r--r--doc/lispref/hooks.texi1
-rw-r--r--doc/lispref/loading.texi23
-rw-r--r--doc/lispref/sequences.texi2
-rw-r--r--doc/lispref/variables.texi2
-rw-r--r--etc/NEWS15
-rw-r--r--etc/refcards/Makefile2
-rw-r--r--etc/tutorials/TUTORIAL.translators5
-rw-r--r--lib-src/etags.c2
-rw-r--r--lisp/abbrev.el1
-rw-r--r--lisp/align.el1
-rw-r--r--lisp/allout-widgets.el41
-rw-r--r--lisp/allout.el94
-rw-r--r--lisp/array.el1
-rw-r--r--lisp/autoinsert.el1
-rw-r--r--lisp/autorevert.el124
-rw-r--r--lisp/bindings.el1
-rw-r--r--lisp/bs.el1
-rw-r--r--lisp/buff-menu.el1
-rw-r--r--lisp/calendar/time-date.el2
-rw-r--r--lisp/case-table.el1
-rw-r--r--lisp/cdl.el1
-rw-r--r--lisp/cedet/cedet.el2
-rw-r--r--lisp/cedet/semantic/imenu.el2
-rw-r--r--lisp/cedet/semantic/senator.el1
-rw-r--r--lisp/cedet/semantic/wisent/python.el4
-rw-r--r--lisp/cedet/srecode/insert.el34
-rw-r--r--lisp/char-fold.el1
-rw-r--r--lisp/chistory.el1
-rw-r--r--lisp/cmuscheme.el1
-rw-r--r--lisp/comint.el1
-rw-r--r--lisp/completion.el1
-rw-r--r--lisp/composite.el2
-rw-r--r--lisp/cus-edit.el1
-rw-r--r--lisp/cus-theme.el1
-rw-r--r--lisp/custom.el1
-rw-r--r--lisp/dabbrev.el4
-rw-r--r--lisp/delim-col.el70
-rw-r--r--lisp/delsel.el1
-rw-r--r--lisp/descr-text.el1
-rw-r--r--lisp/dired-aux.el1
-rw-r--r--lisp/dired.el1
-rw-r--r--lisp/disp-table.el1
-rw-r--r--lisp/display-fill-column-indicator.el1
-rw-r--r--lisp/display-line-numbers.el1
-rw-r--r--lisp/dnd.el1
-rw-r--r--lisp/dos-fns.el1
-rw-r--r--lisp/dos-vars.el1
-rw-r--r--lisp/dynamic-setting.el1
-rw-r--r--lisp/ebuff-menu.el1
-rw-r--r--lisp/echistory.el1
-rw-r--r--lisp/ehelp.el1
-rw-r--r--lisp/electric.el1
-rw-r--r--lisp/emacs-lisp/advice.el1
-rw-r--r--lisp/emacs-lisp/avl-tree.el1
-rw-r--r--lisp/emacs-lisp/backquote.el1
-rw-r--r--lisp/emacs-lisp/byte-opt.el1
-rw-r--r--lisp/emacs-lisp/byte-run.el1
-rw-r--r--lisp/emacs-lisp/bytecomp.el1
-rw-r--r--lisp/emacs-lisp/cconv.el1
-rw-r--r--lisp/emacs-lisp/cl-indent.el1
-rw-r--r--lisp/emacs-lisp/cl-macs.el5
-rw-r--r--lisp/emacs-lisp/debug.el1
-rw-r--r--lisp/emacs-lisp/derived.el1
-rw-r--r--lisp/emacs-lisp/disass.el1
-rw-r--r--lisp/emacs-lisp/edebug.el1
-rw-r--r--lisp/emacs-lisp/eldoc.el2
-rw-r--r--lisp/emacs-lisp/elp.el1
-rw-r--r--lisp/emacs-lisp/ewoc.el2
-rw-r--r--lisp/emacs-lisp/float-sup.el1
-rw-r--r--lisp/emacs-lisp/helper.el1
-rw-r--r--lisp/emacs-lisp/lisp-mnt.el1
-rw-r--r--lisp/emacs-lisp/lisp-mode.el1
-rw-r--r--lisp/emacs-lisp/lisp.el1
-rw-r--r--lisp/emacs-lisp/map-ynp.el1
-rw-r--r--lisp/emacs-lisp/map.el2
-rw-r--r--lisp/emacs-lisp/regexp-opt.el1
-rw-r--r--lisp/emacs-lisp/ring.el1
-rw-r--r--lisp/emacs-lisp/rmc.el2
-rw-r--r--lisp/emacs-lisp/rx.el15
-rw-r--r--lisp/emacs-lisp/seq.el2
-rw-r--r--lisp/emacs-lisp/subr-x.el1
-rw-r--r--lisp/emacs-lisp/syntax.el1
-rw-r--r--lisp/emacs-lisp/tcover-ses.el4
-rw-r--r--lisp/emacs-lisp/tcover-unsafep.el4
-rw-r--r--lisp/emacs-lisp/thunk.el2
-rw-r--r--lisp/emacs-lisp/timer-list.el1
-rw-r--r--lisp/emacs-lisp/timer.el1
-rw-r--r--lisp/emacs-lisp/tq.el1
-rw-r--r--lisp/emacs-lisp/trace.el1
-rw-r--r--lisp/emacs-lisp/warnings.el1
-rw-r--r--lisp/emacs-lock.el1
-rw-r--r--lisp/env.el1
-rw-r--r--lisp/erc/erc-autoaway.el1
-rw-r--r--lisp/erc/erc-backend.el1
-rw-r--r--lisp/erc/erc-button.el1
-rw-r--r--lisp/erc/erc-capab.el2
-rw-r--r--lisp/erc/erc-compat.el1
-rw-r--r--lisp/erc/erc-dcc.el1
-rw-r--r--lisp/erc/erc-ezbounce.el1
-rw-r--r--lisp/erc/erc-fill.el1
-rw-r--r--lisp/erc/erc-goodies.el1
-rw-r--r--lisp/erc/erc-ibuffer.el1
-rw-r--r--lisp/erc/erc-identd.el1
-rw-r--r--lisp/erc/erc-imenu.el1
-rw-r--r--lisp/erc/erc-join.el1
-rw-r--r--lisp/erc/erc-lang.el1
-rw-r--r--lisp/erc/erc-list.el1
-rw-r--r--lisp/erc/erc-log.el1
-rw-r--r--lisp/erc/erc-match.el1
-rw-r--r--lisp/erc/erc-menu.el1
-rw-r--r--lisp/erc/erc-netsplit.el1
-rw-r--r--lisp/erc/erc-networks.el1
-rw-r--r--lisp/erc/erc-notify.el1
-rw-r--r--lisp/erc/erc-page.el2
-rw-r--r--lisp/erc/erc-pcomplete.el1
-rw-r--r--lisp/erc/erc-replace.el1
-rw-r--r--lisp/erc/erc-ring.el1
-rw-r--r--lisp/erc/erc-services.el2
-rw-r--r--lisp/erc/erc-sound.el2
-rw-r--r--lisp/erc/erc-speedbar.el1
-rw-r--r--lisp/erc/erc-spelling.el1
-rw-r--r--lisp/erc/erc-stamp.el1
-rw-r--r--lisp/erc/erc-track.el1
-rw-r--r--lisp/erc/erc-truncate.el1
-rw-r--r--lisp/erc/erc-xdcc.el1
-rw-r--r--lisp/erc/erc.el1
-rw-r--r--lisp/expand.el1
-rw-r--r--lisp/faces.el1
-rw-r--r--lisp/ffap.el1
-rw-r--r--lisp/filenotify.el14
-rw-r--r--lisp/files-x.el1
-rw-r--r--lisp/files.el7
-rw-r--r--lisp/filesets.el1
-rw-r--r--lisp/find-dired.el1
-rw-r--r--lisp/find-file.el1
-rw-r--r--lisp/flow-ctrl.el1
-rw-r--r--lisp/foldout.el1
-rw-r--r--lisp/follow.el1
-rw-r--r--lisp/font-core.el1
-rw-r--r--lisp/font-lock.el1
-rw-r--r--lisp/frame.el1
-rw-r--r--lisp/fringe.el1
-rw-r--r--lisp/gnus/gnus-art.el2
-rw-r--r--lisp/gnus/gnus-async.el2
-rw-r--r--lisp/gnus/gnus-demon.el4
-rw-r--r--lisp/gnus/mail-source.el5
-rw-r--r--lisp/gnus/mm-decode.el2
-rw-r--r--lisp/gnus/nnheader.el6
-rw-r--r--lisp/gnus/nnmail.el2
-rw-r--r--lisp/gnus/nnmaildir.el2
-rw-r--r--lisp/gnus/nntp.el6
-rw-r--r--lisp/help-fns.el19
-rw-r--r--lisp/help-macro.el1
-rw-r--r--lisp/help-mode.el1
-rw-r--r--lisp/help.el1
-rw-r--r--lisp/hexl.el1
-rw-r--r--lisp/hippie-exp.el1
-rw-r--r--lisp/hl-line.el1
-rw-r--r--lisp/icomplete.el4
-rw-r--r--lisp/ielm.el1
-rw-r--r--lisp/iimage.el1
-rw-r--r--lisp/image.el1
-rw-r--r--lisp/imenu.el1
-rw-r--r--lisp/indent.el1
-rw-r--r--lisp/info.el1
-rw-r--r--lisp/informat.el1
-rw-r--r--lisp/international/isearch-x.el4
-rw-r--r--lisp/international/iso-ascii.el1
-rw-r--r--lisp/international/iso-transl.el1
-rw-r--r--lisp/international/ogonek.el1
-rw-r--r--lisp/international/quail.el6
-rw-r--r--lisp/international/utf7.el1
-rw-r--r--lisp/isearch.el1
-rw-r--r--lisp/isearchb.el1
-rw-r--r--lisp/jka-cmpr-hook.el1
-rw-r--r--lisp/jka-compr.el1
-rw-r--r--lisp/kermit.el1
-rw-r--r--lisp/language/cyrillic.el2
-rw-r--r--lisp/language/european.el2
-rw-r--r--lisp/language/indian.el2
-rw-r--r--lisp/language/thai-word.el2
-rw-r--r--lisp/leim/quail/py-punct.el2
-rw-r--r--lisp/leim/quail/pypunct-b5.el2
-rw-r--r--lisp/linum.el1
-rw-r--r--lisp/loadhist.el1
-rw-r--r--lisp/loadup.el1
-rw-r--r--lisp/lpr.el1
-rw-r--r--lisp/ls-lisp.el1
-rw-r--r--lisp/macros.el1
-rw-r--r--lisp/mail/blessmail.el1
-rw-r--r--lisp/mail/emacsbug.el1
-rw-r--r--lisp/mail/feedmail.el2
-rw-r--r--lisp/mail/hashcash.el1
-rw-r--r--lisp/mail/mail-extr.el1
-rw-r--r--lisp/mail/mail-utils.el1
-rw-r--r--lisp/mail/mailabbrev.el1
-rw-r--r--lisp/mail/mailalias.el1
-rw-r--r--lisp/mail/reporter.el1
-rw-r--r--lisp/mail/rfc822.el1
-rw-r--r--lisp/mail/rmail.el1
-rw-r--r--lisp/mail/rmailedit.el1
-rw-r--r--lisp/mail/rmailkwd.el1
-rw-r--r--lisp/mail/rmailmm.el1
-rw-r--r--lisp/mail/rmailmsc.el1
-rw-r--r--lisp/mail/rmailout.el1
-rw-r--r--lisp/mail/rmailsort.el1
-rw-r--r--lisp/mail/rmailsum.el1
-rw-r--r--lisp/mail/sendmail.el1
-rw-r--r--lisp/mail/supercite.el1
-rw-r--r--lisp/mail/undigest.el1
-rw-r--r--lisp/mail/unrmail.el1
-rw-r--r--lisp/makesum.el1
-rw-r--r--lisp/man.el1
-rw-r--r--lisp/menu-bar.el1
-rw-r--r--lisp/misc.el1
-rw-r--r--lisp/mouse.el1
-rw-r--r--lisp/msb.el1
-rw-r--r--lisp/mwheel.el2
-rw-r--r--lisp/net/ange-ftp.el1
-rw-r--r--lisp/net/browse-url.el1
-rw-r--r--lisp/net/goto-addr.el1
-rw-r--r--lisp/net/ldap.el1
-rw-r--r--lisp/net/pop3.el1
-rw-r--r--lisp/net/socks.el2
-rw-r--r--lisp/net/telnet.el1
-rw-r--r--lisp/newcomment.el2
-rw-r--r--lisp/novice.el1
-rw-r--r--lisp/obarray.el1
-rw-r--r--lisp/obsolete/abbrevlist.el1
-rw-r--r--lisp/obsolete/bruce.el1
-rw-r--r--lisp/obsolete/fast-lock.el1
-rw-r--r--lisp/obsolete/gs.el1
-rw-r--r--lisp/obsolete/gulp.el1
-rw-r--r--lisp/obsolete/info-edit.el1
-rw-r--r--lisp/obsolete/lazy-lock.el1
-rw-r--r--lisp/obsolete/ledit.el1
-rw-r--r--lisp/obsolete/levents.el1
-rw-r--r--lisp/obsolete/lucid.el1
-rw-r--r--lisp/obsolete/mailpost.el1
-rw-r--r--lisp/obsolete/meese.el1
-rw-r--r--lisp/obsolete/pc-mode.el1
-rw-r--r--lisp/obsolete/rcompile.el1
-rw-r--r--lisp/obsolete/sregex.el1
-rw-r--r--lisp/obsolete/sup-mouse.el1
-rw-r--r--lisp/obsolete/terminal.el1
-rw-r--r--lisp/obsolete/yow.el1
-rw-r--r--lisp/org/org-id.el3
-rw-r--r--lisp/org/org.el6
-rw-r--r--lisp/org/ox-publish.el2
-rw-r--r--lisp/outline.el1
-rw-r--r--lisp/paren.el1
-rw-r--r--lisp/play/cookie1.el1
-rw-r--r--lisp/play/dissociate.el1
-rw-r--r--lisp/play/doctor.el1
-rw-r--r--lisp/play/gomoku.el1
-rw-r--r--lisp/play/hanoi.el1
-rw-r--r--lisp/play/life.el1
-rw-r--r--lisp/play/spook.el1
-rw-r--r--lisp/play/studly.el1
-rw-r--r--lisp/progmodes/ada-mode.el2
-rw-r--r--lisp/progmodes/asm-mode.el1
-rw-r--r--lisp/progmodes/cc-align.el12
-rw-r--r--lisp/progmodes/cc-awk.el1
-rw-r--r--lisp/progmodes/cc-engine.el71
-rw-r--r--lisp/progmodes/compile.el1
-rw-r--r--lisp/progmodes/cperl-mode.el1
-rw-r--r--lisp/progmodes/dcl-mode.el1
-rw-r--r--lisp/progmodes/ebrowse.el1
-rw-r--r--lisp/progmodes/elisp-mode.el1
-rw-r--r--lisp/progmodes/etags.el1
-rw-r--r--lisp/progmodes/gdb-mi.el1
-rw-r--r--lisp/progmodes/grep.el1
-rw-r--r--lisp/progmodes/gud.el1
-rw-r--r--lisp/progmodes/make-mode.el1
-rw-r--r--lisp/progmodes/mixal-mode.el1
-rw-r--r--lisp/progmodes/modula2.el1
-rw-r--r--lisp/progmodes/octave.el1
-rw-r--r--lisp/progmodes/perl-mode.el1
-rw-r--r--lisp/progmodes/prog-mode.el1
-rw-r--r--lisp/progmodes/project.el4
-rw-r--r--lisp/progmodes/python.el1
-rw-r--r--lisp/progmodes/sh-script.el1
-rw-r--r--lisp/progmodes/tcl.el1
-rw-r--r--lisp/progmodes/xscheme.el1
-rw-r--r--lisp/ps-bdf.el2
-rw-r--r--lisp/ps-def.el4
-rw-r--r--lisp/ps-mule.el4
-rw-r--r--lisp/ps-print.el6
-rw-r--r--lisp/ps-samp.el4
-rw-r--r--lisp/register.el1
-rw-r--r--lisp/replace.el1
-rw-r--r--lisp/reposition.el1
-rw-r--r--lisp/rot13.el1
-rw-r--r--lisp/savehist.el1
-rw-r--r--lisp/saveplace.el1
-rw-r--r--lisp/scroll-bar.el1
-rw-r--r--lisp/scroll-lock.el1
-rw-r--r--lisp/select.el1
-rw-r--r--lisp/server.el1
-rw-r--r--lisp/ses.el2
-rw-r--r--lisp/shell.el1
-rw-r--r--lisp/simple.el1
-rw-r--r--lisp/skeleton.el1
-rw-r--r--lisp/sort.el1
-rw-r--r--lisp/soundex.el1
-rw-r--r--lisp/startup.el1
-rw-r--r--lisp/strokes.el1
-rw-r--r--lisp/subr.el1
-rw-r--r--lisp/t-mouse.el1
-rw-r--r--lisp/tabify.el1
-rw-r--r--lisp/talk.el1
-rw-r--r--lisp/tar-mode.el1
-rw-r--r--lisp/tempo.el41
-rw-r--r--lisp/term/common-win.el1
-rw-r--r--lisp/term/pc-win.el1
-rw-r--r--lisp/term/tty-colors.el1
-rw-r--r--lisp/textmodes/bib-mode.el1
-rw-r--r--lisp/textmodes/fill.el1
-rw-r--r--lisp/textmodes/flyspell.el1
-rw-r--r--lisp/textmodes/makeinfo.el1
-rw-r--r--lisp/textmodes/nroff-mode.el1
-rw-r--r--lisp/textmodes/page.el1
-rw-r--r--lisp/textmodes/paragraphs.el1
-rw-r--r--lisp/textmodes/picture.el2
-rw-r--r--lisp/textmodes/refbib.el1
-rw-r--r--lisp/textmodes/refer.el1
-rw-r--r--lisp/textmodes/remember.el1
-rw-r--r--lisp/textmodes/sgml-mode.el36
-rw-r--r--lisp/textmodes/table.el2
-rw-r--r--lisp/textmodes/tex-mode.el1
-rw-r--r--lisp/textmodes/texinfmt.el1
-rw-r--r--lisp/textmodes/texinfo.el1
-rw-r--r--lisp/textmodes/texnfo-upd.el1
-rw-r--r--lisp/textmodes/text-mode.el1
-rw-r--r--lisp/textmodes/underline.el1
-rw-r--r--lisp/thingatpt.el1
-rw-r--r--lisp/thread.el1
-rw-r--r--lisp/thumbs.el1
-rw-r--r--lisp/time.el2
-rw-r--r--lisp/tmm.el1
-rw-r--r--lisp/tutorial.el1
-rw-r--r--lisp/uniquify.el1
-rw-r--r--lisp/url/url-dav.el1
-rw-r--r--lisp/url/url-gw.el1
-rw-r--r--lisp/url/url-handlers.el161
-rw-r--r--lisp/url/url-http.el1
-rw-r--r--lisp/url/url-util.el1
-rw-r--r--lisp/url/url.el1
-rw-r--r--lisp/userlock.el1
-rw-r--r--lisp/vc/add-log.el1
-rw-r--r--lisp/vc/compare-w.el1
-rw-r--r--lisp/vc/diff.el1
-rw-r--r--lisp/vc/vc-annotate.el1
-rw-r--r--lisp/vc/vc-bzr.el1
-rw-r--r--lisp/vc/vc-cvs.el1
-rw-r--r--lisp/vc/vc-dispatcher.el1
-rw-r--r--lisp/vc/vc-filewise.el1
-rw-r--r--lisp/vc/vc-hg.el1
-rw-r--r--lisp/vc/vc-hooks.el1
-rw-r--r--lisp/vc/vc-rcs.el1
-rw-r--r--lisp/vc/vc-sccs.el1
-rw-r--r--lisp/vc/vc-src.el1
-rw-r--r--lisp/vc/vc.el1
-rw-r--r--lisp/vcursor.el1
-rw-r--r--lisp/version.el1
-rw-r--r--lisp/view.el1
-rw-r--r--lisp/vt100-led.el1
-rw-r--r--lisp/w32-fns.el2
-rw-r--r--lisp/wid-edit.el1
-rw-r--r--lisp/window.el1
-rw-r--r--lisp/woman.el1
-rw-r--r--lisp/x-dnd.el1
-rw-r--r--src/alloc.c4
-rw-r--r--src/buffer.c22
-rw-r--r--src/character.h9
-rw-r--r--src/data.c23
-rw-r--r--src/dispextern.h85
-rw-r--r--src/eval.c4
-rw-r--r--src/fileio.c9
-rw-r--r--src/fns.c6
-rw-r--r--src/font.h4
-rw-r--r--src/frame.h4
-rw-r--r--src/ftcrfont.c381
-rw-r--r--src/ftfont.c224
-rw-r--r--src/ftfont.h18
-rw-r--r--src/ftxfont.c8
-rw-r--r--src/gtkutil.c2
-rw-r--r--src/gtkutil.h2
-rw-r--r--src/image.c325
-rw-r--r--src/keyboard.c4
-rw-r--r--src/lisp.h2
-rw-r--r--src/macfont.m17
-rw-r--r--src/msdos.h1
-rw-r--r--src/nsfont.m2
-rw-r--r--src/nsgui.h61
-rw-r--r--src/nsimage.m4
-rw-r--r--src/nsmenu.m7
-rw-r--r--src/nsselect.m14
-rw-r--r--src/nsterm.h54
-rw-r--r--src/nsterm.m101
-rw-r--r--src/regex-emacs.c2
-rw-r--r--src/search.c7
-rw-r--r--src/termhooks.h8
-rw-r--r--src/w32fns.c27
-rw-r--r--src/w32font.c20
-rw-r--r--src/w32font.h2
-rw-r--r--src/w32gui.h43
-rw-r--r--src/w32term.c119
-rw-r--r--src/w32term.h50
-rw-r--r--src/window.c6
-rw-r--r--src/window.h10
-rw-r--r--src/xdisp.c250
-rw-r--r--src/xfaces.c68
-rw-r--r--src/xfns.c2
-rw-r--r--src/xfont.c111
-rw-r--r--src/xftfont.c156
-rw-r--r--src/xterm.c21
-rw-r--r--src/xterm.h14
-rw-r--r--test/lisp/autorevert-tests.el112
-rw-r--r--test/lisp/delim-col-tests.el181
-rw-r--r--test/lisp/emacs-lisp/map-tests.el1
-rw-r--r--test/lisp/emacs-lisp/rx-tests.el8
-rw-r--r--test/lisp/emacs-lisp/seq-tests.el1
-rw-r--r--test/lisp/emacs-lisp/thunk-tests.el1
-rw-r--r--test/lisp/help-fns-tests.el2
-rw-r--r--test/lisp/md4-tests.el1
-rw-r--r--test/lisp/org/org-tests.el2
-rw-r--r--test/lisp/soundex-tests.el2
-rw-r--r--test/lisp/tempo-tests.el228
-rw-r--r--test/lisp/textmodes/sgml-mode-tests.el4
-rw-r--r--test/lisp/vc/diff-mode-tests.el1
-rw-r--r--test/lisp/vc/smerge-mode-tests.el2
-rw-r--r--test/lisp/vc/vc-bzr-tests.el1
-rw-r--r--test/lisp/vc/vc-hg-tests.el1
-rw-r--r--test/lisp/xdg-tests.el1
-rw-r--r--test/manual/biditest.el1
-rw-r--r--test/manual/etags/el-src/emacs/lisp/progmodes/etags.el1
-rw-r--r--test/src/lcms-tests.el2
449 files changed, 2260 insertions, 1934 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 92efcf64973..df48764c52a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -21,7 +21,7 @@
21# any particular service that uses that protocol. Also, it is intended for 21# any particular service that uses that protocol. Also, it is intended for
22# evaluation purposes, thus possibly temporary. 22# evaluation purposes, thus possibly temporary.
23 23
24# Maintainer: tzz@lifelogs.com 24# Maintainer: Ted Zlatanov <tzz@lifelogs.com>
25# URL: https://emba.gnu.org/emacs/emacs 25# URL: https://emba.gnu.org/emacs/emacs
26 26
27image: debian:stretch 27image: debian:stretch
diff --git a/admin/authors.el b/admin/authors.el
index a3f8bdde841..8329f3f581c 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -1,10 +1,8 @@
1
2;;; authors.el --- utility for maintaining Emacs's AUTHORS file 1;;; authors.el --- utility for maintaining Emacs's AUTHORS file
3 2
4;; Copyright (C) 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
5 4
6;; Author: Gerd Moellmann <gerd@gnu.org> 5;; Author: Gerd Moellmann <gerd@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: maint 6;; Keywords: maint
9;; Package: emacs 7;; Package: emacs
10 8
diff --git a/admin/find-gc.el b/admin/find-gc.el
index bf93c4eedf4..9b925565dfb 100644
--- a/admin/find-gc.el
+++ b/admin/find-gc.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/admin/last-chance.el b/admin/last-chance.el
index 5f993be18e2..ceed1c7cfa3 100644
--- a/admin/last-chance.el
+++ b/admin/last-chance.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2016-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
4 4
5;; Author: Thien-Thi Nguyen <ttn@gnu.org> 5;; Author: Thien-Thi Nguyen <ttn@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: maint 6;; Keywords: maint
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/autogen.sh b/autogen.sh
index 40d0c37b11b..cff4a54be56 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -4,7 +4,6 @@
4## Copyright (C) 2011-2019 Free Software Foundation, Inc. 4## Copyright (C) 2011-2019 Free Software Foundation, Inc.
5 5
6## Author: Glenn Morris <rgm@gnu.org> 6## Author: Glenn Morris <rgm@gnu.org>
7## Maintainer: emacs-devel@gnu.org
8 7
9## This file is part of GNU Emacs. 8## This file is part of GNU Emacs.
10 9
@@ -316,8 +315,16 @@ git_config transfer.fsckObjects true
316 315
317# Configure 'git diff' hunk header format. 316# Configure 'git diff' hunk header format.
318 317
318# This xfuncname is based on Git's built-in 'cpp' pattern.
319# The first line rejects jump targets and access declarations.
320# The second line matches top-level functions and methods.
321# The third line matches preprocessor and DEFUN macros.
322git_config diff.cpp.xfuncname \
323'!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])
324^((::[[:space:]]*)?[A-Za-z_][A-Za-z_0-9]*[[:space:]]*\(.*)$
325^((#define[[:space:]]|DEFUN).*)$'
319git_config diff.elisp.xfuncname \ 326git_config diff.elisp.xfuncname \
320 '^\(def[^[:space:]]+[[:space:]]+([^()[:space:]]+)' 327 '^\([^[:space:]]*def[^[:space:]]+[[:space:]]+([^()[:space:]]+)'
321git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*' 328git_config 'diff.m4.xfuncname' '^((m4_)?define|A._DEFUN(_ONCE)?)\([^),]*'
322git_config 'diff.make.xfuncname' \ 329git_config 'diff.make.xfuncname' \
323 '^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)' 330 '^([$.[:alnum:]_].*:|[[:alnum:]_]+[[:space:]]*([*:+]?[:?]?|!?)=|define .*)'
@@ -332,7 +339,7 @@ git_config diff.texinfo.xfuncname \
332tailored_hooks= 339tailored_hooks=
333sample_hooks= 340sample_hooks=
334 341
335for hook in commit-msg pre-commit; do 342for hook in commit-msg pre-commit prepare-commit-msg; do
336 cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 || 343 cmp -- build-aux/git-hooks/$hook "$hooks/$hook" >/dev/null 2>&1 ||
337 tailored_hooks="$tailored_hooks $hook" 344 tailored_hooks="$tailored_hooks $hook"
338done 345done
diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg
new file mode 100755
index 00000000000..3562a802234
--- /dev/null
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -0,0 +1,45 @@
1#!/bin/sh
2# Check the format of GNU Emacs change log entries.
3
4# Copyright 2019 Free Software Foundation, Inc.
5
6# This file is part of GNU Emacs.
7
8# GNU Emacs is free software: you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation, either version 3 of the License, or
11# (at your option) any later version.
12
13# GNU Emacs is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17
18# You should have received a copy of the GNU General Public License
19# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
20
21COMMIT_MSG_FILE=$1
22COMMIT_SOURCE=$2
23SHA1=$3
24
25# Prefer gawk if available, as it handles NUL bytes properly.
26if type gawk >/dev/null 2>&1; then
27 awk=gawk
28else
29 awk=awk
30fi
31
32exec $awk '
33 # Catch the case when someone ran git-commit with -s option,
34 # which automatically adds Signed-off-by.
35 /^Signed-off-by: / {
36 print "'\''Signed-off-by:'\'' in commit message"
37 status = 1
38 }
39 END {
40 if (status != 0) {
41 print "Commit aborted; please see the file 'CONTRIBUTE'"
42 }
43 exit status
44 }
45' <"$COMMIT_MSG_FILE"
diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir
index 2dcac87b489..51f384aff8f 100755
--- a/build-aux/make-info-dir
+++ b/build-aux/make-info-dir
@@ -5,7 +5,6 @@
5## Copyright (C) 2013-2019 Free Software Foundation, Inc. 5## Copyright (C) 2013-2019 Free Software Foundation, Inc.
6 6
7## Author: Glenn Morris <rgm@gnu.org> 7## Author: Glenn Morris <rgm@gnu.org>
8## Maintainer: emacs-devel@gnu.org
9 8
10## This file is part of GNU Emacs. 9## This file is part of GNU Emacs.
11 10
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 518d157e4ee..6e16588861e 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -1521,6 +1521,12 @@ library lets Emacs properly set up the hyperlinks in the @file{*Help*}
1521buffer). To disable this feature, change the variable 1521buffer). To disable this feature, change the variable
1522@code{help-enable-auto-load} to @code{nil}. 1522@code{help-enable-auto-load} to @code{nil}.
1523 1523
1524@vindex help-enable-completion-auto-load
1525Automatic loading also occurs when completing names for
1526@code{describe-variable} and @code{describe-function}, based on the
1527prefix being completed. To disable this feature, change the variable
1528@code{help-enable-completion-auto-load} to @code{nil}.
1529
1524@vindex load-dangerous-libraries 1530@vindex load-dangerous-libraries
1525@cindex Lisp files byte-compiled by XEmacs 1531@cindex Lisp files byte-compiled by XEmacs
1526 By default, Emacs refuses to load compiled Lisp files which were 1532 By default, Emacs refuses to load compiled Lisp files which were
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 8a8ac5d0464..bdd6decb6b5 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -801,6 +801,7 @@ Its value is 70
801 Automatically becomes buffer-local when set. 801 Automatically becomes buffer-local when set.
802 This variable is safe as a file local variable if its value 802 This variable is safe as a file local variable if its value
803 satisfies the predicate ‘integerp’. 803 satisfies the predicate ‘integerp’.
804 Probably introduced at or before Emacs version 18.
804 805
805Documentation: 806Documentation:
806Column beyond which automatic line-wrapping should happen. 807Column beyond which automatic line-wrapping should happen.
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index c1ad5b57023..28bfa5b578f 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1298,8 +1298,11 @@ count as blocks.
1298@findex hs-show-block 1298@findex hs-show-block
1299@findex hs-show-region 1299@findex hs-show-region
1300@findex hs-hide-level 1300@findex hs-hide-level
1301@findex hs-toggle-hiding
1302@findex hs-mouse-toggle-hiding
1301@kindex C-c @@ C-h 1303@kindex C-c @@ C-h
1302@kindex C-c @@ C-s 1304@kindex C-c @@ C-s
1305@kindex C-c @@ C-c
1303@kindex C-c @@ C-M-h 1306@kindex C-c @@ C-M-h
1304@kindex C-c @@ C-M-s 1307@kindex C-c @@ C-M-s
1305@kindex C-c @@ C-r 1308@kindex C-c @@ C-r
@@ -1312,7 +1315,7 @@ Hide the current block (@code{hs-hide-block}).
1312@item C-c @@ C-s 1315@item C-c @@ C-s
1313Show the current block (@code{hs-show-block}). 1316Show the current block (@code{hs-show-block}).
1314@item C-c @@ C-c 1317@item C-c @@ C-c
1315@itemx C-x @@ C-e 1318@itemx C-c @@ C-e
1316Either hide or show the current block (@code{hs-toggle-hiding}). 1319Either hide or show the current block (@code{hs-toggle-hiding}).
1317@item S-mouse-2 1320@item S-mouse-2
1318Toggle hiding for the block you click on (@code{hs-mouse-toggle-hiding}). 1321Toggle hiding for the block you click on (@code{hs-mouse-toggle-hiding}).
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 97f7fb9f79e..2f9d898c9b0 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -1122,6 +1122,10 @@ a byte-code function object (@pxref{Byte Compilation}).
1122When lexical binding is enabled, @var{function-object} is converted 1122When lexical binding is enabled, @var{function-object} is converted
1123into a closure. @xref{Closures}. 1123into a closure. @xref{Closures}.
1124@end itemize 1124@end itemize
1125
1126When @var{function-object} is a symbol and the code is byte compiled,
1127the byte-compiler will warn if that function is not defined or might
1128not be known at run time.
1125@end defspec 1129@end defspec
1126 1130
1127@cindex @samp{#'} syntax 1131@cindex @samp{#'} syntax
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 71992464e09..f775aa4d4b0 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -251,6 +251,7 @@ I thought did not need to be mentioned here:
251 251
252Lisp: 252Lisp:
253after-load-functions 253after-load-functions
254after-set-visited-file-name-hook
254auto-coding-functions 255auto-coding-functions
255choose-completion-string-functions 256choose-completion-string-functions
256completing-read-function 257completing-read-function
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index 6f1213f097b..3261e6d1888 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -466,9 +466,11 @@ first call to the function automatically loads the proper library, in
466order to install the real definition and other associated code, then 466order to install the real definition and other associated code, then
467runs the real definition as if it had been loaded all along. 467runs the real definition as if it had been loaded all along.
468Autoloading can also be triggered by looking up the documentation of 468Autoloading can also be triggered by looking up the documentation of
469the function or macro (@pxref{Documentation Basics}). 469the function or macro (@pxref{Documentation Basics}), and completion
470of variable and function names (@pxref{Autoload by Prefix} below).
470 471
471@menu 472@menu
473* Autoload by Prefix:: Autoload by Prefix.
472* When to Autoload:: When to Use Autoload. 474* When to Autoload:: When to Use Autoload.
473@end menu 475@end menu
474 476
@@ -703,6 +705,25 @@ symbol's new function value. If the value of the optional argument
703function, only a macro. 705function, only a macro.
704@end defun 706@end defun
705 707
708@node Autoload by Prefix
709@subsection Autoload by Prefix
710@cindex autoload by prefix
711
712@vindex definition-prefixes
713@findex register-definition-prefixes
714@vindex autoload-compute-prefixes
715During completion for the commands @code{describe-variable} and
716@code{describe-function}, Emacs will try to load files which may
717contain definitions matching the prefix being completed. The variable
718@code{definition-prefixes} holds a hashtable which maps a prefix to
719the corresponding list of files to load for it. Entries to this
720mapping are added by calls to @code{register-definition-prefixes}
721which are generated by @code{update-file-autoloads}
722(@pxref{Autoload}). Files which don't contain any definitions worth
723loading (test files, for examples), should set
724@code{autoload-compute-prefixes} to @code{nil} as a file-local
725variable.
726
706@node When to Autoload 727@node When to Autoload
707@subsection When to Use Autoload 728@subsection When to Use Autoload
708@cindex autoload, when to use 729@cindex autoload, when to use
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index a7f270c0680..4b67a5f9f1a 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -601,7 +601,7 @@ returned value is a list.
601@defun seq-mapn function &rest sequences 601@defun seq-mapn function &rest sequences
602 This function returns the result of applying @var{function} to each 602 This function returns the result of applying @var{function} to each
603element of @var{sequences}. The arity (@pxref{What Is a Function, 603element of @var{sequences}. The arity (@pxref{What Is a Function,
604sub-arity}) of @var{function} must match the number of sequences. 604subr-arity}) of @var{function} must match the number of sequences.
605Mapping stops at the end of the shortest sequence, and the returned 605Mapping stops at the end of the shortest sequence, and the returned
606value is a list. 606value is a list.
607 607
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index aca7d2f5e93..932b7c829b9 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -2009,7 +2009,7 @@ all files in those directories. The list in @var{variables} can be of
2009one of the two forms: @code{(@var{major-mode} . @var{alist})} or 2009one of the two forms: @code{(@var{major-mode} . @var{alist})} or
2010@code{(@var{directory} . @var{list})}. With the first form, if the 2010@code{(@var{directory} . @var{list})}. With the first form, if the
2011file's buffer turns on a mode that is derived from @var{major-mode}, 2011file's buffer turns on a mode that is derived from @var{major-mode},
2012then the all the variables in the associated @var{alist} are applied; 2012then all the variables in the associated @var{alist} are applied;
2013@var{alist} should be of the form @code{(@var{name} . @var{value})}. 2013@var{alist} should be of the form @code{(@var{name} . @var{value})}.
2014A special value @code{nil} for @var{major-mode} means the settings are 2014A special value @code{nil} for @var{major-mode} means the settings are
2015applicable to any mode. In @var{alist}, you can use a special 2015applicable to any mode. In @var{alist}, you can use a special
diff --git a/etc/NEWS b/etc/NEWS
index d70cda179e0..064143047df 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -153,6 +153,12 @@ after Emacs has finished initialization and is ready for use.
153emacs.service file to eg "~/.config/systemd/user/", you will need to copy 153emacs.service file to eg "~/.config/systemd/user/", you will need to copy
154the new version of the file again.) 154the new version of the file again.)
155 155
156+++
157** New option 'help-enable-completion-auto-load'.
158This allows disabling the new feature introduced in Emacs 26.1 which
159loads files during completion of 'C-h f' and 'C-h v' according to
160'definition-prefixes'.
161
156 162
157* Changes in Emacs 27.1 163* Changes in Emacs 27.1
158 164
@@ -1321,6 +1327,12 @@ when given in a string. Previously, '(any "\x80-\xff")' would match
1321characters U+0080...U+00FF. Now the expression matches raw bytes in 1327characters U+0080...U+00FF. Now the expression matches raw bytes in
1322the 128...255 range, as expected. 1328the 128...255 range, as expected.
1323 1329
1330*** The rx 'or' and 'seq' forms no longer require any arguments.
1331(or) produces a regexp that never matches anything, while (seq)
1332matches the empty string, each being an identity for the operation.
1333This also works for their aliases: '|' for 'or'; ':', 'and' and
1334'sequence' for 'seq'.
1335
1324** Frames 1336** Frames
1325 1337
1326+++ 1338+++
@@ -1443,8 +1455,7 @@ When set to a non-nil value, buffers in Auto Revert mode are no longer
1443polled for changes periodically. This reduces the power consumption 1455polled for changes periodically. This reduces the power consumption
1444of an idle Emacs, but may fail on some network file systems; set 1456of an idle Emacs, but may fail on some network file systems; set
1445'auto-revert-notify-exclude-dir-regexp' to match files where 1457'auto-revert-notify-exclude-dir-regexp' to match files where
1446notification is not supported. The new variable currently has no 1458notification is not supported. The default value is nil.
1447effect in 'global-auto-revert-mode'. The default value is nil.
1448 1459
1449*** New variable 'buffer-auto-revert-by-notification' 1460*** New variable 'buffer-auto-revert-by-notification'
1450A major mode can declare that notification on the buffer's default 1461A major mode can declare that notification on the buffer's default
diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile
index 469e8fa05cd..0ba6db5aa28 100644
--- a/etc/refcards/Makefile
+++ b/etc/refcards/Makefile
@@ -40,7 +40,7 @@ PDF_CZECH = \
40PDF_FRENCH = \ 40PDF_FRENCH = \
41 fr-dired-ref.pdf \ 41 fr-dired-ref.pdf \
42 fr-refcard.pdf \ 42 fr-refcard.pdf \
43 fr-survival.pdf \ 43 fr-survival.pdf
44 44
45PDF_GERMAN = de-refcard.pdf 45PDF_GERMAN = de-refcard.pdf
46 46
diff --git a/etc/tutorials/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators
index 2747d39d355..b6b95787068 100644
--- a/etc/tutorials/TUTORIAL.translators
+++ b/etc/tutorials/TUTORIAL.translators
@@ -41,8 +41,8 @@ Maintainer: Alfredo Finelli <alfredofnl@tiscali.it>
41 Italian GNU Translation Group <tp@lists.linux.it> 41 Italian GNU Translation Group <tp@lists.linux.it>
42 42
43* TUTORIAL.ja: 43* TUTORIAL.ja:
44Author: Kenichi Handa <handa@m17n.org> 44Author: Kenichi Handa <handa@gnu.org>
45Maintainer: Kenichi Handa <handa@m17n.org> 45Maintainer: Kenichi Handa <handa@gnu.org>
46 46
47* TUTORIAL.ko: 47* TUTORIAL.ko:
48Author: Koaunghi Un <koaunghi@ling.cnu.ac.kr> 48Author: Koaunghi Un <koaunghi@ling.cnu.ac.kr>
@@ -94,4 +94,3 @@ Maintainer: Chao-Hong Liu <chliu@gnu.org>
94;;; Local Variables: 94;;; Local Variables:
95;;; coding: utf-8 95;;; coding: utf-8
96;;; End: 96;;; End:
97
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 949ab5a2c6b..6bd04d1f1c3 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -4282,7 +4282,7 @@ Yacc_entries (FILE *inf)
4282 while (perhaps_more_input (file_pointer) \ 4282 while (perhaps_more_input (file_pointer) \
4283 && (readline (&(line_buffer), file_pointer), \ 4283 && (readline (&(line_buffer), file_pointer), \
4284 (char_pointer) = (line_buffer).buffer, \ 4284 (char_pointer) = (line_buffer).buffer, \
4285 true)) \ 4285 true))
4286 4286
4287#define LOOKING_AT(cp, kw) /* kw is the keyword, a literal string */ \ 4287#define LOOKING_AT(cp, kw) /* kw is the keyword, a literal string */ \
4288 ((assert ("" kw), true) /* syntax error if not a literal string */ \ 4288 ((assert ("" kw), true) /* syntax error if not a literal string */ \
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 3c88ec661a9..be19da525ea 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1992, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985-1987, 1992, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: abbrev convenience 6;; Keywords: abbrev convenience
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/align.el b/lisp/align.el
index 443237b451b..aeb845a5613 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience languages lisp 6;; Keywords: convenience languages lisp
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el
index 67fce325ff1..fd04c31f3b8 100644
--- a/lisp/allout-widgets.el
+++ b/lisp/allout-widgets.el
@@ -70,12 +70,7 @@
70(require 'allout) 70(require 'allout)
71(require 'widget) 71(require 'widget)
72(require 'wid-edit) 72(require 'wid-edit)
73 73(eval-when-compile (require 'cl-lib))
74(eval-when-compile
75 (progn
76 (require 'overlay)
77 (require 'cl)
78 ))
79 74
80;;;_ : internal variables needed before user-customization variables 75;;;_ : internal variables needed before user-customization variables
81;;; In order to enable activation of allout-widgets-mode via customization, 76;;; In order to enable activation of allout-widgets-mode via customization,
@@ -960,7 +955,7 @@ posting threshold criteria."
960 (when changes-pending 955 (when changes-pending
961 (while changes-record 956 (while changes-record
962 (setq entry (pop changes-record)) 957 (setq entry (pop changes-record))
963 (case (car entry) 958 (pcase (car entry)
964 (:exposed (push entry exposures)) 959 (:exposed (push entry exposures))
965 (:added (push entry additions)) 960 (:added (push entry additions))
966 (:deleted (push entry deletions)) 961 (:deleted (push entry deletions))
@@ -1378,34 +1373,34 @@ FROM and TO must be in increasing order, as must be the pairs in RANGES."
1378 1373
1379 ;; fresh: 1374 ;; fresh:
1380 (setq ranges nil) 1375 (setq ranges nil)
1381 (assert (equal (funcall try 3 5) '(nil ((3 5))))) 1376 (cl-assert (equal (funcall try 3 5) '(nil ((3 5)))))
1382 ;; add range at end: 1377 ;; add range at end:
1383 (assert (equal (funcall try 10 12) '(nil ((3 5) (10 12))))) 1378 (cl-assert (equal (funcall try 10 12) '(nil ((3 5) (10 12)))))
1384 ;; add range at beginning: 1379 ;; add range at beginning:
1385 (assert (equal (funcall try 1 2) '(nil ((1 2) (3 5) (10 12))))) 1380 (cl-assert (equal (funcall try 1 2) '(nil ((1 2) (3 5) (10 12)))))
1386 ;; insert range somewhere in the middle: 1381 ;; insert range somewhere in the middle:
1387 (assert (equal (funcall try 7 9) '(nil ((1 2) (3 5) (7 9) (10 12))))) 1382 (cl-assert (equal (funcall try 7 9) '(nil ((1 2) (3 5) (7 9) (10 12)))))
1388 ;; consolidate some: 1383 ;; consolidate some:
1389 (assert (equal (funcall try 5 8) '(t ((1 2) (3 9) (10 12))))) 1384 (cl-assert (equal (funcall try 5 8) '(t ((1 2) (3 9) (10 12)))))
1390 ;; add more: 1385 ;; add more:
1391 (assert (equal (funcall try 15 17) '(nil ((1 2) (3 9) (10 12) (15 17))))) 1386 (cl-assert (equal (funcall try 15 17) '(nil ((1 2) (3 9) (10 12) (15 17)))))
1392 ;; add more: 1387 ;; add more:
1393 (assert (equal (funcall try 20 22) 1388 (cl-assert (equal (funcall try 20 22)
1394 '(nil ((1 2) (3 9) (10 12) (15 17) (20 22))))) 1389 '(nil ((1 2) (3 9) (10 12) (15 17) (20 22)))))
1395 ;; encompass more: 1390 ;; encompass more:
1396 (assert (equal (funcall try 4 11) '(t ((1 2) (3 12) (15 17) (20 22))))) 1391 (cl-assert (equal (funcall try 4 11) '(t ((1 2) (3 12) (15 17) (20 22)))))
1397 ;; encompass all: 1392 ;; encompass all:
1398 (assert (equal (funcall try 2 25) '(t ((1 25))))) 1393 (cl-assert (equal (funcall try 2 25) '(t ((1 25)))))
1399 1394
1400 ;; fresh slate: 1395 ;; fresh slate:
1401 (setq ranges nil) 1396 (setq ranges nil)
1402 (assert (equal (funcall try 20 25) '(nil ((20 25))))) 1397 (cl-assert (equal (funcall try 20 25) '(nil ((20 25)))))
1403 (assert (equal (funcall try 30 35) '(nil ((20 25) (30 35))))) 1398 (cl-assert (equal (funcall try 30 35) '(nil ((20 25) (30 35)))))
1404 (assert (equal (funcall try 26 28) '(nil ((20 25) (26 28) (30 35))))) 1399 (cl-assert (equal (funcall try 26 28) '(nil ((20 25) (26 28) (30 35)))))
1405 (assert (equal (funcall try 15 20) '(t ((15 25) (26 28) (30 35))))) 1400 (cl-assert (equal (funcall try 15 20) '(t ((15 25) (26 28) (30 35)))))
1406 (assert (equal (funcall try 10 30) '(t ((10 35))))) 1401 (cl-assert (equal (funcall try 10 30) '(t ((10 35)))))
1407 (assert (equal (funcall try 5 6) '(nil ((5 6) (10 35))))) 1402 (cl-assert (equal (funcall try 5 6) '(nil ((5 6) (10 35)))))
1408 (assert (equal (funcall try 2 100) '(t ((2 100))))) 1403 (cl-assert (equal (funcall try 2 100) '(t ((2 100)))))
1409 1404
1410 (setq ranges nil) 1405 (setq ranges nil)
1411 )) 1406 ))
diff --git a/lisp/allout.el b/lisp/allout.el
index b3b87e533b9..07608551886 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -79,12 +79,7 @@
79 79
80;;;_* Dependency loads 80;;;_* Dependency loads
81(require 'overlay) 81(require 'overlay)
82(eval-when-compile 82(eval-when-compile (require 'cl-lib))
83 ;; `cl' is required for `assert'. `assert' is not covered by a standard
84 ;; autoload, but it is a macro, so that eval-when-compile is sufficient
85 ;; to byte-compile it in, or to do the require when the buffer evalled.
86 (require 'cl)
87 )
88 83
89;;;_* USER CUSTOMIZATION VARIABLES: 84;;;_* USER CUSTOMIZATION VARIABLES:
90 85
@@ -6122,13 +6117,13 @@ signal."
6122 (point-max)))) 6117 (point-max))))
6123 ;; determine key mode and, if keypair, recipients: 6118 ;; determine key mode and, if keypair, recipients:
6124 (setq recipients 6119 (setq recipients
6125 (case keypair-mode 6120 (pcase keypair-mode
6126 6121
6127 (decrypting nil) 6122 ('decrypting nil)
6128 6123
6129 (default (if encrypt-to (epg-list-keys epg-context encrypt-to))) 6124 ('default (if encrypt-to (epg-list-keys epg-context encrypt-to)))
6130 6125
6131 ((prompt prompt-save) 6126 ((or 'prompt 'prompt-save)
6132 (save-window-excursion 6127 (save-window-excursion
6133 (epa-select-keys epg-context keypair-message))))) 6128 (epa-select-keys epg-context keypair-message)))))
6134 6129
@@ -6786,6 +6781,7 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
6786(defvar allout-tests-locally-true nil 6781(defvar allout-tests-locally-true nil
6787 "Fodder for allout resumptions tests -- defvar just for byte compiler.") 6782 "Fodder for allout resumptions tests -- defvar just for byte compiler.")
6788(defun allout-test-resumptions () 6783(defun allout-test-resumptions ()
6784 ;; FIXME: Use ERT.
6789 "Exercise allout resumptions." 6785 "Exercise allout resumptions."
6790 ;; for each resumption case, we also test that the right local/global 6786 ;; for each resumption case, we also test that the right local/global
6791 ;; scopes are affected during resumption effects: 6787 ;; scopes are affected during resumption effects:
@@ -6794,48 +6790,48 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
6794 (with-temp-buffer 6790 (with-temp-buffer
6795 (allout-tests-obliterate-variable 'allout-tests-globally-unbound) 6791 (allout-tests-obliterate-variable 'allout-tests-globally-unbound)
6796 (allout-add-resumptions '(allout-tests-globally-unbound t)) 6792 (allout-add-resumptions '(allout-tests-globally-unbound t))
6797 (assert (not (default-boundp 'allout-tests-globally-unbound))) 6793 (cl-assert (not (default-boundp 'allout-tests-globally-unbound)))
6798 (assert (local-variable-p 'allout-tests-globally-unbound (current-buffer))) 6794 (cl-assert (local-variable-p 'allout-tests-globally-unbound (current-buffer)))
6799 (assert (boundp 'allout-tests-globally-unbound)) 6795 (cl-assert (boundp 'allout-tests-globally-unbound))
6800 (assert (equal allout-tests-globally-unbound t)) 6796 (cl-assert (equal allout-tests-globally-unbound t))
6801 (allout-do-resumptions) 6797 (allout-do-resumptions)
6802 (assert (not (local-variable-p 'allout-tests-globally-unbound 6798 (cl-assert (not (local-variable-p 'allout-tests-globally-unbound
6803 (current-buffer)))) 6799 (current-buffer))))
6804 (assert (not (boundp 'allout-tests-globally-unbound)))) 6800 (cl-assert (not (boundp 'allout-tests-globally-unbound))))
6805 6801
6806 ;; ensure that variable with prior global value is resumed 6802 ;; ensure that variable with prior global value is resumed
6807 (with-temp-buffer 6803 (with-temp-buffer
6808 (allout-tests-obliterate-variable 'allout-tests-globally-true) 6804 (allout-tests-obliterate-variable 'allout-tests-globally-true)
6809 (setq allout-tests-globally-true t) 6805 (setq allout-tests-globally-true t)
6810 (allout-add-resumptions '(allout-tests-globally-true nil)) 6806 (allout-add-resumptions '(allout-tests-globally-true nil))
6811 (assert (equal (default-value 'allout-tests-globally-true) t)) 6807 (cl-assert (equal (default-value 'allout-tests-globally-true) t))
6812 (assert (local-variable-p 'allout-tests-globally-true (current-buffer))) 6808 (cl-assert (local-variable-p 'allout-tests-globally-true (current-buffer)))
6813 (assert (equal allout-tests-globally-true nil)) 6809 (cl-assert (equal allout-tests-globally-true nil))
6814 (allout-do-resumptions) 6810 (allout-do-resumptions)
6815 (assert (not (local-variable-p 'allout-tests-globally-true 6811 (cl-assert (not (local-variable-p 'allout-tests-globally-true
6816 (current-buffer)))) 6812 (current-buffer))))
6817 (assert (boundp 'allout-tests-globally-true)) 6813 (cl-assert (boundp 'allout-tests-globally-true))
6818 (assert (equal allout-tests-globally-true t))) 6814 (cl-assert (equal allout-tests-globally-true t)))
6819 6815
6820 ;; ensure that prior local value is resumed 6816 ;; ensure that prior local value is resumed
6821 (with-temp-buffer 6817 (with-temp-buffer
6822 (allout-tests-obliterate-variable 'allout-tests-locally-true) 6818 (allout-tests-obliterate-variable 'allout-tests-locally-true)
6823 (set (make-local-variable 'allout-tests-locally-true) t) 6819 (set (make-local-variable 'allout-tests-locally-true) t)
6824 (assert (not (default-boundp 'allout-tests-locally-true)) 6820 (cl-assert (not (default-boundp 'allout-tests-locally-true))
6825 nil (concat "Test setup mistake -- variable supposed to" 6821 nil (concat "Test setup mistake -- variable supposed to"
6826 " not have global binding, but it does.")) 6822 " not have global binding, but it does."))
6827 (assert (local-variable-p 'allout-tests-locally-true (current-buffer)) 6823 (cl-assert (local-variable-p 'allout-tests-locally-true (current-buffer))
6828 nil (concat "Test setup mistake -- variable supposed to have" 6824 nil (concat "Test setup mistake -- variable supposed to have"
6829 " local binding, but it lacks one.")) 6825 " local binding, but it lacks one."))
6830 (allout-add-resumptions '(allout-tests-locally-true nil)) 6826 (allout-add-resumptions '(allout-tests-locally-true nil))
6831 (assert (not (default-boundp 'allout-tests-locally-true))) 6827 (cl-assert (not (default-boundp 'allout-tests-locally-true)))
6832 (assert (local-variable-p 'allout-tests-locally-true (current-buffer))) 6828 (cl-assert (local-variable-p 'allout-tests-locally-true (current-buffer)))
6833 (assert (equal allout-tests-locally-true nil)) 6829 (cl-assert (equal allout-tests-locally-true nil))
6834 (allout-do-resumptions) 6830 (allout-do-resumptions)
6835 (assert (boundp 'allout-tests-locally-true)) 6831 (cl-assert (boundp 'allout-tests-locally-true))
6836 (assert (local-variable-p 'allout-tests-locally-true (current-buffer))) 6832 (cl-assert (local-variable-p 'allout-tests-locally-true (current-buffer)))
6837 (assert (equal allout-tests-locally-true t)) 6833 (cl-assert (equal allout-tests-locally-true t))
6838 (assert (not (default-boundp 'allout-tests-locally-true)))) 6834 (cl-assert (not (default-boundp 'allout-tests-locally-true))))
6839 6835
6840 ;; ensure that last of multiple resumptions holds, for various scopes. 6836 ;; ensure that last of multiple resumptions holds, for various scopes.
6841 (with-temp-buffer 6837 (with-temp-buffer
@@ -6851,27 +6847,27 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
6851 '(allout-tests-globally-true 3) 6847 '(allout-tests-globally-true 3)
6852 '(allout-tests-locally-true 4)) 6848 '(allout-tests-locally-true 4))
6853 ;; reestablish many of the basic conditions are maintained after re-add: 6849 ;; reestablish many of the basic conditions are maintained after re-add:
6854 (assert (not (default-boundp 'allout-tests-globally-unbound))) 6850 (cl-assert (not (default-boundp 'allout-tests-globally-unbound)))
6855 (assert (local-variable-p 'allout-tests-globally-unbound (current-buffer))) 6851 (cl-assert (local-variable-p 'allout-tests-globally-unbound (current-buffer)))
6856 (assert (equal allout-tests-globally-unbound 2)) 6852 (cl-assert (equal allout-tests-globally-unbound 2))
6857 (assert (default-boundp 'allout-tests-globally-true)) 6853 (cl-assert (default-boundp 'allout-tests-globally-true))
6858 (assert (local-variable-p 'allout-tests-globally-true (current-buffer))) 6854 (cl-assert (local-variable-p 'allout-tests-globally-true (current-buffer)))
6859 (assert (equal allout-tests-globally-true 3)) 6855 (cl-assert (equal allout-tests-globally-true 3))
6860 (assert (not (default-boundp 'allout-tests-locally-true))) 6856 (cl-assert (not (default-boundp 'allout-tests-locally-true)))
6861 (assert (local-variable-p 'allout-tests-locally-true (current-buffer))) 6857 (cl-assert (local-variable-p 'allout-tests-locally-true (current-buffer)))
6862 (assert (equal allout-tests-locally-true 4)) 6858 (cl-assert (equal allout-tests-locally-true 4))
6863 (allout-do-resumptions) 6859 (allout-do-resumptions)
6864 (assert (not (local-variable-p 'allout-tests-globally-unbound 6860 (cl-assert (not (local-variable-p 'allout-tests-globally-unbound
6865 (current-buffer)))) 6861 (current-buffer))))
6866 (assert (not (boundp 'allout-tests-globally-unbound))) 6862 (cl-assert (not (boundp 'allout-tests-globally-unbound)))
6867 (assert (not (local-variable-p 'allout-tests-globally-true 6863 (cl-assert (not (local-variable-p 'allout-tests-globally-true
6868 (current-buffer)))) 6864 (current-buffer))))
6869 (assert (boundp 'allout-tests-globally-true)) 6865 (cl-assert (boundp 'allout-tests-globally-true))
6870 (assert (equal allout-tests-globally-true t)) 6866 (cl-assert (equal allout-tests-globally-true t))
6871 (assert (boundp 'allout-tests-locally-true)) 6867 (cl-assert (boundp 'allout-tests-locally-true))
6872 (assert (local-variable-p 'allout-tests-locally-true (current-buffer))) 6868 (cl-assert (local-variable-p 'allout-tests-locally-true (current-buffer)))
6873 (assert (equal allout-tests-locally-true t)) 6869 (cl-assert (equal allout-tests-locally-true t))
6874 (assert (not (default-boundp 'allout-tests-locally-true)))) 6870 (cl-assert (not (default-boundp 'allout-tests-locally-true))))
6875 6871
6876 ;; ensure that deliberately unbinding registered variables doesn't foul things 6872 ;; ensure that deliberately unbinding registered variables doesn't foul things
6877 (with-temp-buffer 6873 (with-temp-buffer
diff --git a/lisp/array.el b/lisp/array.el
index 2fffe0197e8..28635d18af1 100644
--- a/lisp/array.el
+++ b/lisp/array.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1987, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1987, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: David M. Brown 5;; Author: David M. Brown
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: extensions 6;; Keywords: extensions
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index f7ecfe27bb1..c2ebea70083 100644
--- a/lisp/autoinsert.el
+++ b/lisp/autoinsert.el
@@ -6,7 +6,6 @@
6;; Author: Charlie Martin <crm@cs.duke.edu> 6;; Author: Charlie Martin <crm@cs.duke.edu>
7;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org> 7;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org>
8;; Keywords: convenience 8;; Keywords: convenience
9;; Maintainer: emacs-devel@gnu.org
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
12 11
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 197a2bf1578..2de855b303e 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -312,10 +312,7 @@ when those files are modified from another computer.
312 312
313When nil, buffers in Auto-Revert Mode will always be polled for 313When nil, buffers in Auto-Revert Mode will always be polled for
314changes to their files on disk every `auto-revert-interval' 314changes to their files on disk every `auto-revert-interval'
315seconds, in addition to using notification for those files. 315seconds, in addition to using notification for those files."
316
317In Global Auto-Revert Mode, polling is always done regardless of
318the value of this variable."
319 :group 'auto-revert 316 :group 'auto-revert
320 :type 'boolean 317 :type 'boolean
321 :set (lambda (variable value) 318 :set (lambda (variable value)
@@ -335,6 +332,9 @@ buffers to this list.
335The timer function `auto-revert-buffers' is responsible for purging 332The timer function `auto-revert-buffers' is responsible for purging
336the list of old buffers.") 333the list of old buffers.")
337 334
335(defvar-local auto-revert--global-mode nil
336 "Non-nil if buffer is handled by Global Auto-Revert mode.")
337
338(defvar auto-revert-remaining-buffers () 338(defvar auto-revert-remaining-buffers ()
339 "Buffers not checked when user input stopped execution.") 339 "Buffers not checked when user input stopped execution.")
340 340
@@ -501,34 +501,107 @@ specifies in the mode line."
501 :global t :group 'auto-revert :lighter global-auto-revert-mode-text 501 :global t :group 'auto-revert :lighter global-auto-revert-mode-text
502 (auto-revert-set-timer) 502 (auto-revert-set-timer)
503 (if global-auto-revert-mode 503 (if global-auto-revert-mode
504 (auto-revert-buffers) 504 ;; Turn global-auto-revert-mode ON.
505 (progn
506 (dolist (buf (buffer-list))
507 (with-current-buffer buf
508 (auto-revert--global-add-current-buffer)))
509 ;; Make sure future buffers are added as well.
510 (add-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
511 (add-hook 'after-set-visited-file-name-hook
512 #'auto-revert--global-set-visited-file-name)
513 ;; To track non-file buffers, we need to listen in to buffer
514 ;; creation in general. Listening to major-mode changes is
515 ;; suitable, since we then know whether it's a mode that is tracked.
516 (when global-auto-revert-non-file-buffers
517 (add-hook 'after-change-major-mode-hook
518 #'auto-revert--global-adopt-current-buffer))
519 (auto-revert-buffers))
520 ;; Turn global-auto-revert-mode OFF.
521 (remove-hook 'after-change-major-mode-hook
522 #'auto-revert--global-adopt-current-buffer)
523 (remove-hook 'after-set-visited-file-name-hook
524 #'auto-revert--global-set-visited-file-name)
525 (remove-hook 'find-file-hook #'auto-revert--global-adopt-current-buffer)
505 (dolist (buf (buffer-list)) 526 (dolist (buf (buffer-list))
506 (with-current-buffer buf 527 (with-current-buffer buf
507 (when (and auto-revert-notify-watch-descriptor 528 (when auto-revert--global-mode
508 (not (memq buf auto-revert-buffer-list))) 529 (setq auto-revert--global-mode nil)
509 (auto-revert-notify-rm-watch)))))) 530 (when (and auto-revert-notify-watch-descriptor
531 (not (or auto-revert-mode auto-revert-tail-mode)))
532 (auto-revert-notify-rm-watch)))))))
533
534(defun auto-revert--global-add-current-buffer ()
535 "Set current buffer to be tracked by Global Auto-Revert if appropriate."
536 (when (and (not auto-revert--global-mode)
537 (or buffer-file-name
538 (and global-auto-revert-non-file-buffers
539 (not (string-prefix-p " " (buffer-name)))
540 ;; Any non-file buffer must have a custom
541 ;; `buffer-stale-function' to be tracked, since
542 ;; we wouldn't know when to revert it otherwise.
543 (not (eq buffer-stale-function
544 #'buffer-stale--default-function))))
545 (not (memq 'major-mode global-auto-revert-ignore-modes))
546 (not global-auto-revert-ignore-buffer))
547 (setq auto-revert--global-mode t)))
548
549(defun auto-revert--global-adopt-current-buffer ()
550 "Consider tracking current buffer in a running Global Auto-Revert mode."
551 (auto-revert--global-add-current-buffer)
552 (auto-revert-set-timer))
553
554(defun auto-revert--global-set-visited-file-name ()
555 "Update Global Auto-Revert management of the current buffer.
556Called after `set-visited-file-name'."
557 ;; Remove any existing notifier first so that we don't track the
558 ;; wrong file in case the file name was changed.
559 (when auto-revert-notify-watch-descriptor
560 (auto-revert-notify-rm-watch))
561 (auto-revert--global-adopt-current-buffer))
510 562
511(defun auto-revert--polled-buffers () 563(defun auto-revert--polled-buffers ()
512 "List of buffers that need to be polled." 564 "List of buffers that need to be polled."
513 (cond (global-auto-revert-mode (buffer-list)) 565 (cond (global-auto-revert-mode
566 (mapcan (lambda (buffer)
567 (and (not (and auto-revert-avoid-polling
568 (buffer-local-value
569 'auto-revert-notify-watch-descriptor
570 buffer)))
571 (or (buffer-local-value
572 'auto-revert--global-mode buffer)
573 (buffer-local-value 'auto-revert-mode buffer)
574 (buffer-local-value 'auto-revert-tail-mode buffer))
575 (list buffer)))
576 (buffer-list)))
514 (auto-revert-avoid-polling 577 (auto-revert-avoid-polling
515 (mapcan (lambda (buffer) 578 (mapcan (lambda (buffer)
516 (and (not (buffer-local-value 579 (and (not (buffer-local-value
517 'auto-revert-notify-watch-descriptor buffer)) 580 'auto-revert-notify-watch-descriptor buffer))
518 (list buffer))) 581 (list buffer)))
519 auto-revert-buffer-list)) 582 auto-revert-buffer-list))
520 (t auto-revert-buffer-list))) 583 (t auto-revert-buffer-list)))
521 584
522;; Same as above in a boolean context, but cheaper. 585;; Same as above in a boolean context, but cheaper.
523(defun auto-revert--need-polling-p () 586(defun auto-revert--need-polling-p ()
524 "Whether periodic polling is required." 587 "Whether periodic polling is required."
525 (or global-auto-revert-mode 588 (cond (global-auto-revert-mode
526 (if auto-revert-avoid-polling 589 (or (not auto-revert-avoid-polling)
527 (not (cl-every (lambda (buffer) 590 (cl-some
528 (buffer-local-value 591 (lambda (buffer)
529 'auto-revert-notify-watch-descriptor buffer)) 592 (and (not (buffer-local-value
530 auto-revert-buffer-list)) 593 'auto-revert-notify-watch-descriptor buffer))
531 auto-revert-buffer-list))) 594 (or (buffer-local-value 'auto-revert--global-mode buffer)
595 (buffer-local-value 'auto-revert-mode buffer)
596 (buffer-local-value 'auto-revert-tail-mode buffer))))
597 (buffer-list))))
598 (auto-revert-avoid-polling
599 (not (cl-every
600 (lambda (buffer)
601 (buffer-local-value
602 'auto-revert-notify-watch-descriptor buffer))
603 auto-revert-buffer-list)))
604 (t auto-revert-buffer-list)))
532 605
533(defun auto-revert-set-timer () 606(defun auto-revert-set-timer ()
534 "Restart or cancel the timer used by Auto-Revert Mode. 607 "Restart or cancel the timer used by Auto-Revert Mode.
@@ -652,9 +725,8 @@ system.")
652 (null buffer-file-name)) 725 (null buffer-file-name))
653 (auto-revert-notify-rm-watch) 726 (auto-revert-notify-rm-watch)
654 ;; Restart the timer if it wasn't running. 727 ;; Restart the timer if it wasn't running.
655 (when (and (memq buffer auto-revert-buffer-list) 728 (unless auto-revert-timer)
656 (not auto-revert-timer)) 729 (auto-revert-set-timer))))
657 (auto-revert-set-timer)))))
658 730
659 ;; Loop over all buffers, in order to find the intended one. 731 ;; Loop over all buffers, in order to find the intended one.
660 (cl-dolist (buffer buffers) 732 (cl-dolist (buffer buffers)
@@ -697,12 +769,10 @@ If the buffer needs to be reverted, do it now."
697 (auto-revert-handler))))) 769 (auto-revert-handler)))))
698 770
699(defun auto-revert-active-p () 771(defun auto-revert-active-p ()
700 "Check if auto-revert is active (in current buffer or globally)." 772 "Check if auto-revert is active in current buffer."
701 (or auto-revert-mode 773 (or auto-revert-mode
702 auto-revert-tail-mode 774 auto-revert-tail-mode
703 (and global-auto-revert-mode 775 auto-revert--global-mode))
704 (not global-auto-revert-ignore-buffer)
705 (not (memq major-mode global-auto-revert-ignore-modes)))))
706 776
707(defun auto-revert-handler () 777(defun auto-revert-handler ()
708 "Revert current buffer, if appropriate. 778 "Revert current buffer, if appropriate.
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 744bcc36a85..4f09d583d74 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1992-1996, 1999-2019 Free Software 3;; Copyright (C) 1985-1987, 1992-1996, 1999-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/bs.el b/lisp/bs.el
index cd9524a440b..c564da251b5 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998-2019 Free Software Foundation, Inc.
4;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de> 4;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: convenience 5;; Keywords: convenience
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 5f889866361..c8cd25caff7 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1993-1995, 2000-2019 Free Software 3;; Copyright (C) 1985-1987, 1993-1995, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience 6;; Keywords: convenience
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index decb21e9c20..2c0280ccf3b 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -156,7 +156,7 @@ If DATE lacks timezone information, GMT is assumed."
156 (let ((overflow-error '(error "Specified time is not representable"))) 156 (let ((overflow-error '(error "Specified time is not representable")))
157 (if (equal err overflow-error) 157 (if (equal err overflow-error)
158 (signal (car err) (cdr err)) 158 (signal (car err) (cdr err))
159 (condition-case-unless-debug err 159 (condition-case err
160 (encode-time (parse-time-string 160 (encode-time (parse-time-string
161 (timezone-make-date-arpa-standard date))) 161 (timezone-make-date-arpa-standard date)))
162 (error 162 (error
diff --git a/lisp/case-table.el b/lisp/case-table.el
index c27e772b044..7474d633236 100644
--- a/lisp/case-table.el
+++ b/lisp/case-table.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1988, 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Howard Gayle 5;; Author: Howard Gayle
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: i18n 6;; Keywords: i18n
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/cdl.el b/lisp/cdl.el
index 752e59b5d49..36f72ef0510 100644
--- a/lisp/cdl.el
+++ b/lisp/cdl.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Ata Etemadi <ATAE@spva.physics.imperial.ac.uk> 5;; Author: Ata Etemadi <ATAE@spva.physics.imperial.ac.uk>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: data 6;; Keywords: data
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/cedet/cedet.el b/lisp/cedet/cedet.el
index b3d4a5def2e..9260cfb47dc 100644
--- a/lisp/cedet/cedet.el
+++ b/lisp/cedet/cedet.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: David Ponce <david@dponce.com> 5;; Author: David Ponce <david@dponce.com>
6;; Maintainer: Eric M. Ludlam <zappo@gnu.org> 6;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
7;; Version: 2.0 7;; Version: 2.0
8;; Keywords: OO, lisp 8;; Keywords: OO, lisp
9 9
diff --git a/lisp/cedet/semantic/imenu.el b/lisp/cedet/semantic/imenu.el
index 0fb9eca7536..15ab50c72ac 100644
--- a/lisp/cedet/semantic/imenu.el
+++ b/lisp/cedet/semantic/imenu.el
@@ -4,7 +4,7 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Eric M. Ludlam <zappo@gnu.org> 6;; Author: Eric M. Ludlam <zappo@gnu.org>
7;; Maintainer: Eric Ludlam 7;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
8 8
9;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
10 10
diff --git a/lisp/cedet/semantic/senator.el b/lisp/cedet/semantic/senator.el
index 2462662bbd8..79bb4b20ee3 100644
--- a/lisp/cedet/semantic/senator.el
+++ b/lisp/cedet/semantic/senator.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: David Ponce <david@dponce.com> 5;; Author: David Ponce <david@dponce.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 10 Nov 2000 6;; Created: 10 Nov 2000
8;; Keywords: syntax 7;; Keywords: syntax
9 8
diff --git a/lisp/cedet/semantic/wisent/python.el b/lisp/cedet/semantic/wisent/python.el
index c530329baed..c5849ffc973 100644
--- a/lisp/cedet/semantic/wisent/python.el
+++ b/lisp/cedet/semantic/wisent/python.el
@@ -2,8 +2,8 @@
2 2
3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Richard Kim <emacs18@gmail.com> 5;; Author: Richard Kim <emacs18@gmail.com>
6;; Maintainer: Richard Kim <emacs18@gmail.com> 6;; Maintainer: Richard Kim <emacs18@gmail.com>
7;; Created: June 2002 7;; Created: June 2002
8;; Keywords: syntax 8;; Keywords: syntax
9 9
diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el
index 26af2ffe2ef..a7445ea401a 100644
--- a/lisp/cedet/srecode/insert.el
+++ b/lisp/cedet/srecode/insert.el
@@ -1,4 +1,4 @@
1;;; srecode/insert.el --- Insert srecode templates to an output stream. 1;;; srecode/insert.el --- Insert srecode templates to an output stream -*- lexical-binding:t -*-
2 2
3;; Copyright (C) 2005, 2007-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2005, 2007-2019 Free Software Foundation, Inc.
4 4
@@ -26,9 +26,6 @@
26;; Manage the insertion process for a template. 26;; Manage the insertion process for a template.
27;; 27;;
28 28
29(eval-when-compile
30 (require 'cl)) ;; for `lexical-let'
31
32(require 'srecode/compile) 29(require 'srecode/compile)
33(require 'srecode/find) 30(require 'srecode/find)
34(require 'srecode/dictionary) 31(require 'srecode/dictionary)
@@ -1049,21 +1046,20 @@ template where a ^ inserter occurs."
1049 ;; which implements the wrap insertion behavior in FUNCTION. The 1046 ;; which implements the wrap insertion behavior in FUNCTION. The
1050 ;; maximum valid nesting depth is just the current depth + 1. 1047 ;; maximum valid nesting depth is just the current depth + 1.
1051 (let ((srecode-template-inserter-point-override 1048 (let ((srecode-template-inserter-point-override
1052 (lexical-let ((inserter1 sti)) 1049 (cons
1053 (cons 1050 ;; DEPTH
1054 ;; DEPTH 1051 (+ (length (oref-default 'srecode-template active)) 1)
1055 (+ (length (oref-default 'srecode-template active)) 1) 1052 ;; FUNCTION
1056 ;; FUNCTION 1053 (lambda (dict)
1057 (lambda (dict) 1054 (let ((srecode-template-inserter-point-override nil))
1058 (let ((srecode-template-inserter-point-override nil)) 1055 (if (srecode-dictionary-lookup-name
1059 (if (srecode-dictionary-lookup-name 1056 dict (oref sti :object-name))
1060 dict (oref inserter1 :object-name)) 1057 ;; Insert our sectional part with looping.
1061 ;; Insert our sectional part with looping. 1058 (srecode-insert-method-helper
1062 (srecode-insert-method-helper 1059 sti dict 'template)
1063 inserter1 dict 'template) 1060 ;; Insert our sectional part just once.
1064 ;; Insert our sectional part just once. 1061 (srecode-insert-subtemplate
1065 (srecode-insert-subtemplate 1062 sti dict 'template)))))))
1066 inserter1 dict 'template))))))))
1067 ;; Do a regular insertion for an include, but with our override in 1063 ;; Do a regular insertion for an include, but with our override in
1068 ;; place. 1064 ;; place.
1069 (cl-call-next-method))) 1065 (cl-call-next-method)))
diff --git a/lisp/char-fold.el b/lisp/char-fold.el
index e61bc3edc6a..426b1a9f844 100644
--- a/lisp/char-fold.el
+++ b/lisp/char-fold.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2015-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: matching 5;; Keywords: matching
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/chistory.el b/lisp/chistory.el
index 59bdc00c674..9c29bb7c432 100644
--- a/lisp/chistory.el
+++ b/lisp/chistory.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: K. Shane Hartman 5;; Author: K. Shane Hartman
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience 6;; Keywords: convenience
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index ed6f1bfb1ad..f949a8c1098 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Olin Shivers <olin.shivers@cs.cmu.edu> 6;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: processes, lisp 7;; Keywords: processes, lisp
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/comint.el b/lisp/comint.el
index d21cc1378f7..3939371ab85 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Olin Shivers <shivers@cs.cmu.edu> 5;; Author: Olin Shivers <shivers@cs.cmu.edu>
6;; Simon Marshall <simon@gnu.org> 6;; Simon Marshall <simon@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: processes 7;; Keywords: processes
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/completion.el b/lisp/completion.el
index 89285c74d41..ff392dd8219 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2019 Free Software 3;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: abbrev convenience 6;; Keywords: abbrev convenience
8;; Author: Jim Salem <alem@bbnplanet.com> of Thinking Machines Inc. 7;; Author: Jim Salem <alem@bbnplanet.com> of Thinking Machines Inc.
9;; (ideas suggested by Brewster Kahle) 8;; (ideas suggested by Brewster Kahle)
diff --git a/lisp/composite.el b/lisp/composite.el
index d2df3d1e922..87f563030bd 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -7,7 +7,7 @@
7;; National Institute of Advanced Industrial Science and Technology (AIST) 7;; National Institute of Advanced Industrial Science and Technology (AIST)
8;; Registration Number H14PRO021 8;; Registration Number H14PRO021
9 9
10;; Author: Kenichi HANDA <handa@etl.go.jp> 10;; Author: Kenichi Handa <handa@gnu.org>
11;; (according to ack.texi) 11;; (according to ack.texi)
12;; Keywords: mule, multilingual, character composition 12;; Keywords: mule, multilingual, character composition
13;; Package: emacs 13;; Package: emacs
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 6d47e607ae6..e65f19dd2e1 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1996-1997, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996-1997, 1999-2019 Free Software Foundation, Inc.
4;; 4;;
5;; Author: Per Abrahamsen <abraham@dina.kvl.dk> 5;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, faces 6;; Keywords: help, faces
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index bc9d1d4f7d6..9846aa8d99d 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2019 Free Software Foundation, Inc.
4;; 4;;
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, faces 6;; Keywords: help, faces
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/custom.el b/lisp/custom.el
index 29bf9e570a8..e2bf8718b62 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5;; 5;;
6;; Author: Per Abrahamsen <abraham@dina.kvl.dk> 6;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: help, faces 7;; Keywords: help, faces
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index 2159f96028f..aa22d6c754e 100644
--- a/lisp/dabbrev.el
+++ b/lisp/dabbrev.el
@@ -6,7 +6,6 @@
6;; Author: Don Morrison 6;; Author: Don Morrison
7;; Lars Lindberg 7;; Lars Lindberg
8;; (according to ack.texi) 8;; (according to ack.texi)
9;; Maintainer: emacs-devel@gnu.org
10;; Created: 16 Mars 1992 9;; Created: 16 Mars 1992
11;; Lindberg's last update version: 5.7 10;; Lindberg's last update version: 5.7
12;; Keywords: abbrev expand completion convenience 11;; Keywords: abbrev expand completion convenience
@@ -238,8 +237,7 @@ See also `dabbrev-ignored-buffer-names'."
238 :version "21.1") 237 :version "21.1")
239 238
240(defcustom dabbrev-check-other-buffers t 239(defcustom dabbrev-check-other-buffers t
241 "Should \\[dabbrev-expand] look in other buffers?\ 240 "Should \\[dabbrev-expand] look in other buffers?
242
243nil: Don't look in other buffers. 241nil: Don't look in other buffers.
244t: Also look for expansions in the buffers pointed out by 242t: Also look for expansions in the buffers pointed out by
245 `dabbrev-select-buffers-function'. 243 `dabbrev-select-buffers-function'.
diff --git a/lisp/delim-col.el b/lisp/delim-col.el
index a968b32052b..4b4fc7fe960 100644
--- a/lisp/delim-col.el
+++ b/lisp/delim-col.el
@@ -1,12 +1,12 @@
1;;; delim-col.el --- prettify all columns in a region or rectangle 1;;; delim-col.el --- prettify all columns in a region or rectangle -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
6;; Maintainer: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 6;; Maintainer: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
7;; Version: 2.1 7;; Version: 2.1
8;; Keywords: internal 8;; Keywords: convenience text
9;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre 9;; X-URL: https://www.emacswiki.org/emacs/ViniciusJoseLatorre
10 10
11;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
12 12
@@ -27,11 +27,6 @@
27 27
28;; delim-col helps to prettify columns in a text region or rectangle. 28;; delim-col helps to prettify columns in a text region or rectangle.
29;; 29;;
30;; To use it, make sure that this file is in load-path and insert in your
31;; .emacs:
32;;
33;; (require 'delim-col)
34;;
35;; If you have, for example, the following columns: 30;; If you have, for example, the following columns:
36;; 31;;
37;; a b c d 32;; a b c d
@@ -91,9 +86,9 @@
91;; aaa [ <bbb>, <cccc> ] dddd 86;; aaa [ <bbb>, <cccc> ] dddd
92;; aa [ <bb> , <ccccccc> ] ddd 87;; aa [ <bb> , <ccccccc> ] ddd
93;; 88;;
94;; Note that `delimit-columns-region' operates over all text region 89;; Note that `delimit-columns-region' operates over the entire selected
95;; selected, extending the region start to the beginning of line and the 90;; text region, extending the region start to the beginning of line and
96;; region end to the end of line. While `delimit-columns-rectangle' 91;; the region end to the end of line. While `delimit-columns-rectangle'
97;; operates over the text rectangle selected which rectangle diagonal is 92;; operates over the text rectangle selected which rectangle diagonal is
98;; given by the region start and end. 93;; given by the region start and end.
99;; 94;;
@@ -117,6 +112,7 @@
117 112
118;;; Code: 113;;; Code:
119 114
115(require 'rect)
120 116
121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
122;; User Options: 118;; User Options:
@@ -125,6 +121,7 @@
125 "Prettify columns." 121 "Prettify columns."
126 :link '(emacs-library-link :tag "Source Lisp File" "delim-col.el") 122 :link '(emacs-library-link :tag "Source Lisp File" "delim-col.el")
127 :prefix "delimit-columns-" 123 :prefix "delimit-columns-"
124 :group 'convenience
128 :group 'text) 125 :group 'text)
129 126
130(defcustom delimit-columns-str-before "" 127(defcustom delimit-columns-str-before ""
@@ -213,10 +210,11 @@ See also `delimit-columns-end' for documentation.
213The following relation must hold: 210The following relation must hold:
214 0 <= delimit-columns-start <= delimit-columns-end 211 0 <= delimit-columns-start <= delimit-columns-end
215 212
216The column number start from 0 and it's relative to the beginning of selected 213The column number starts at 0 and is relative to the beginning of
217region. So if you selected a text region, the first column (column 0) is 214the selected region. So if you select a text region, the first
218located at beginning of line. If you selected a text rectangle, the first 215column (column 0) is located at the beginning of line. If you
219column (column 0) is located at left corner." 216select a text rectangle, the first column (column 0) is located
217at the left corner."
220 :type '(integer :tag "Column Start") 218 :type '(integer :tag "Column Start")
221 :group 'columns) 219 :group 'columns)
222 220
@@ -228,10 +226,11 @@ See also `delimit-columns-start' for documentation.
228The following relation must hold: 226The following relation must hold:
229 0 <= delimit-columns-start <= delimit-columns-end 227 0 <= delimit-columns-start <= delimit-columns-end
230 228
231The column number start from 0 and it's relative to the beginning of selected 229The column number starts at 0 and is relative to the beginning of
232region. So if you selected a text region, the first column (column 0) is 230the selected region. So if you select a text region, the first
233located at beginning of line. If you selected a text rectangle, the first 231column (column 0) is located at the beginning of line. If you
234column (column 0) is located at left corner." 232select a text rectangle, the first column (column 0) is located
233at the left corner."
235 :type '(integer :tag "Column End") 234 :type '(integer :tag "Column End")
236 :group 'columns) 235 :group 'columns)
237 236
@@ -247,20 +246,20 @@ column (column 0) is located at left corner."
247 246
248;;;###autoload 247;;;###autoload
249(defun delimit-columns-customize () 248(defun delimit-columns-customize ()
250 "Customization of `columns' group." 249 "Customize the `columns' group."
251 (interactive) 250 (interactive)
252 (customize-group 'columns)) 251 (customize-group 'columns))
253 252
254 253
255(defmacro delimit-columns-str (str) 254(defun delimit-columns-str (str)
256 `(if (stringp ,str) ,str "")) 255 (if (stringp str) str ""))
257 256
258 257
259;;;###autoload 258;;;###autoload
260(defun delimit-columns-region (start end) 259(defun delimit-columns-region (start end)
261 "Prettify all columns in a text region. 260 "Prettify all columns in a text region.
262 261
263START and END delimits the text region." 262START and END delimit the text region."
264 (interactive "*r") 263 (interactive "*r")
265 (let ((delimit-columns-str-before 264 (let ((delimit-columns-str-before
266 (delimit-columns-str delimit-columns-str-before)) 265 (delimit-columns-str delimit-columns-str-before))
@@ -273,8 +272,7 @@ START and END delimits the text region."
273 (delimit-columns-after 272 (delimit-columns-after
274 (delimit-columns-str delimit-columns-after)) 273 (delimit-columns-str delimit-columns-after))
275 (delimit-columns-start 274 (delimit-columns-start
276 (if (and (integerp delimit-columns-start) 275 (if (natnump delimit-columns-start)
277 (>= delimit-columns-start 0))
278 delimit-columns-start 276 delimit-columns-start
279 0)) 277 0))
280 (delimit-columns-end 278 (delimit-columns-end
@@ -309,14 +307,11 @@ START and END delimits the text region."
309 (set-marker the-end nil))))) 307 (set-marker the-end nil)))))
310 308
311 309
312(require 'rect)
313
314
315;;;###autoload 310;;;###autoload
316(defun delimit-columns-rectangle (start end) 311(defun delimit-columns-rectangle (start end)
317 "Prettify all columns in a text rectangle. 312 "Prettify all columns in a text rectangle.
318 313
319START and END delimits the corners of text rectangle." 314START and END delimit the corners of the text rectangle."
320 (interactive "*r") 315 (interactive "*r")
321 (let ((delimit-columns-str-before 316 (let ((delimit-columns-str-before
322 (delimit-columns-str delimit-columns-str-before)) 317 (delimit-columns-str delimit-columns-str-before))
@@ -329,8 +324,7 @@ START and END delimits the corners of text rectangle."
329 (delimit-columns-after 324 (delimit-columns-after
330 (delimit-columns-str delimit-columns-after)) 325 (delimit-columns-str delimit-columns-after))
331 (delimit-columns-start 326 (delimit-columns-start
332 (if (and (integerp delimit-columns-start) 327 (if (natnump delimit-columns-start)
333 (>= delimit-columns-start 0))
334 delimit-columns-start 328 delimit-columns-start
335 0)) 329 0))
336 (delimit-columns-end 330 (delimit-columns-end
@@ -344,11 +338,11 @@ START and END delimits the corners of text rectangle."
344 ;; get maximum length for each column 338 ;; get maximum length for each column
345 (and delimit-columns-format 339 (and delimit-columns-format
346 (save-excursion 340 (save-excursion
347 (operate-on-rectangle 'delimit-columns-rectangle-max 341 (operate-on-rectangle #'delimit-columns-rectangle-max
348 start the-end nil))) 342 start the-end nil)))
349 ;; prettify columns 343 ;; prettify columns
350 (save-excursion 344 (save-excursion
351 (operate-on-rectangle 'delimit-columns-rectangle-line 345 (operate-on-rectangle #'delimit-columns-rectangle-line
352 start the-end nil)) 346 start the-end nil))
353 ;; nullify markers 347 ;; nullify markers
354 (set-marker delimit-columns-limit nil) 348 (set-marker delimit-columns-limit nil)
@@ -359,7 +353,7 @@ START and END delimits the corners of text rectangle."
359;; Internal Variables and Functions: 353;; Internal Variables and Functions:
360 354
361 355
362(defun delimit-columns-rectangle-max (startpos &optional _ignore1 _ignore2) 356(defun delimit-columns-rectangle-max (startpos &optional _begextra _endextra)
363 (set-marker delimit-columns-limit (point)) 357 (set-marker delimit-columns-limit (point))
364 (goto-char startpos) 358 (goto-char startpos)
365 (let ((ncol 1) 359 (let ((ncol 1)
@@ -392,7 +386,7 @@ START and END delimits the corners of text rectangle."
392 (setq values (cdr values))))) 386 (setq values (cdr values)))))
393 387
394 388
395(defun delimit-columns-rectangle-line (startpos &optional _ignore1 _ignore2) 389(defun delimit-columns-rectangle-line (startpos &optional _begextra _endextra)
396 (let ((len (length delimit-columns-max)) 390 (let ((len (length delimit-columns-max))
397 (ncol 0) 391 (ncol 0)
398 origin) 392 origin)
@@ -442,8 +436,7 @@ START and END delimits the corners of text rectangle."
442 ((eq delimit-columns-format 'padding) 436 ((eq delimit-columns-format 'padding)
443 (insert spaces delimit-columns-after delimit-columns-str-after)) 437 (insert spaces delimit-columns-after delimit-columns-str-after))
444 (t 438 (t
445 (insert delimit-columns-after spaces delimit-columns-str-after)) 439 (insert delimit-columns-after spaces delimit-columns-str-after))))
446 ))
447 (goto-char (max (point) delimit-columns-limit)))) 440 (goto-char (max (point) delimit-columns-limit))))
448 441
449 442
@@ -466,8 +459,7 @@ START and END delimits the corners of text rectangle."
466 (insert delimit-columns-after 459 (insert delimit-columns-after
467 delimit-columns-str-separator 460 delimit-columns-str-separator
468 spaces 461 spaces
469 delimit-columns-before)) 462 delimit-columns-before))))
470 ))
471 463
472 464
473;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 465;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/delsel.el b/lisp/delsel.el
index 8f71bc65191..a815b91c015 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Matthieu Devin <devin@lucid.com> 6;; Author: Matthieu Devin <devin@lucid.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 14 Jul 92 7;; Created: 14 Jul 92
9;; Keywords: convenience emulations 8;; Keywords: convenience emulations
10 9
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index 8be2b94458a..2976b788f0a 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994-1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Boris Goldowsky <boris@gnu.org> 5;; Author: Boris Goldowsky <boris@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: faces, i18n, Unicode, multilingual 6;; Keywords: faces, i18n, Unicode, multilingual
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 51749acb217..387bd4e004c 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>. 6;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>.
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: files 7;; Keywords: files
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/dired.el b/lisp/dired.el
index ea1943de1db..f137d4a5be0 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Sebastian Kremer <sk@thp.uni-koeln.de> 6;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: files 7;; Keywords: files
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/disp-table.el b/lisp/disp-table.el
index 4a597506774..f1676bbfa3a 100644
--- a/lisp/disp-table.el
+++ b/lisp/disp-table.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Erik Naggum <erik@naggum.no> 6;; Author: Erik Naggum <erik@naggum.no>
7;; Based on a previous version by Howard Gayle 7;; Based on a previous version by Howard Gayle
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: i18n 8;; Keywords: i18n
10;; Package: emacs 9;; Package: emacs
11 10
diff --git a/lisp/display-fill-column-indicator.el b/lisp/display-fill-column-indicator.el
index 6d5f5a9f894..ec89adea218 100644
--- a/lisp/display-fill-column-indicator.el
+++ b/lisp/display-fill-column-indicator.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2019 Free Software Foundation, Inc. 3;; Copyright (C) 2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: convenience 5;; Keywords: convenience
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/display-line-numbers.el b/lisp/display-line-numbers.el
index d38f2e69635..ac01112215e 100644
--- a/lisp/display-line-numbers.el
+++ b/lisp/display-line-numbers.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: convenience 5;; Keywords: convenience
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/dnd.el b/lisp/dnd.el
index 459a7238dcd..82bb7c9ef86 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2005-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2005-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jan Djärv <jan.h.d@swipnet.se> 5;; Author: Jan Djärv <jan.h.d@swipnet.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: window, drag, drop 6;; Keywords: window, drag, drop
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index c575dd413fc..bffd54006de 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1991, 1993, 1995-1996, 2001-2019 Free Software 3;; Copyright (C) 1991, 1993, 1995-1996, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/dos-vars.el b/lisp/dos-vars.el
index 53de20b853a..0bf10133c24 100644
--- a/lisp/dos-vars.el
+++ b/lisp/dos-vars.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/dynamic-setting.el b/lisp/dynamic-setting.el
index cf1a8d3b73c..ea530f991a7 100644
--- a/lisp/dynamic-setting.el
+++ b/lisp/dynamic-setting.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2009-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2009-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jan Djärv <jan.h.d@swipnet.se> 5;; Author: Jan Djärv <jan.h.d@swipnet.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: font, system-font, tool-bar-style 6;; Keywords: font, system-font, tool-bar-style
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el
index 6543e5f1978..ddfad25a382 100644
--- a/lisp/ebuff-menu.el
+++ b/lisp/ebuff-menu.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Richard Mlynarik <mly@ai.mit.edu> 6;; Author: Richard Mlynarik <mly@ai.mit.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: convenience 7;; Keywords: convenience
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/echistory.el b/lisp/echistory.el
index e932daf2f01..8006d7bcd95 100644
--- a/lisp/echistory.el
+++ b/lisp/echistory.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: K. Shane Hartman 5;; Author: K. Shane Hartman
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/lisp/ehelp.el b/lisp/ehelp.el
index 2a24c9857c2..8fc8e1f15af 100644
--- a/lisp/ehelp.el
+++ b/lisp/ehelp.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Richard Mlynarik 5;; Author: Richard Mlynarik
6;; (according to ack.texi and authors.el) 6;; (according to ack.texi and authors.el)
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: help, extensions 7;; Keywords: help, extensions
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/electric.el b/lisp/electric.el
index 07da2f1d9e7..1f4c132f922 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: K. Shane Hartman 6;; Author: K. Shane Hartman
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: extensions 7;; Keywords: extensions
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 2034f33d0e6..dfd6d2e5b8f 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1994, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Hans Chalupsky <hans@cs.buffalo.edu> 5;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 12 Dec 1992 6;; Created: 12 Dec 1992
8;; Keywords: extensions, lisp, tools 7;; Keywords: extensions, lisp, tools
9;; Package: emacs 8;; Package: emacs
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index d2a3a131d16..a1739562f6f 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -6,7 +6,6 @@
6;; Inge Wallin <inge@lysator.liu.se> 6;; Inge Wallin <inge@lysator.liu.se>
7;; Thomas Bellman <bellman@lysator.liu.se> 7;; Thomas Bellman <bellman@lysator.liu.se>
8;; Toby Cubitt <toby-predictive@dr-qubit.org> 8;; Toby Cubitt <toby-predictive@dr-qubit.org>
9;; Maintainer: emacs-devel@gnu.org
10;; Created: 10 May 1991 9;; Created: 10 May 1991
11;; Keywords: extensions, data structures, AVL, tree 10;; Keywords: extensions, data structures, AVL, tree
12 11
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el
index 5e72dc3b400..344a0ba8f61 100644
--- a/lisp/emacs-lisp/backquote.el
+++ b/lisp/emacs-lisp/backquote.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Rick Sladkey <jrs@world.std.com> 6;; Author: Rick Sladkey <jrs@world.std.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: extensions, internal 7;; Keywords: extensions, internal
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 44cca6136c0..02a9749f47a 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Jamie Zawinski <jwz@lucid.com> 5;; Author: Jamie Zawinski <jwz@lucid.com>
6;; Hallvard Furuseth <hbf@ulrik.uio.no> 6;; Hallvard Furuseth <hbf@ulrik.uio.no>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: internal 7;; Keywords: internal
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index 842d1d48b45..811b485dc6f 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Jamie Zawinski <jwz@lucid.com> 5;; Author: Jamie Zawinski <jwz@lucid.com>
6;; Hallvard Furuseth <hbf@ulrik.uio.no> 6;; Hallvard Furuseth <hbf@ulrik.uio.no>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: internal 7;; Keywords: internal
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index e76baf5ed0d..95e287c806c 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Jamie Zawinski <jwz@lucid.com> 6;; Author: Jamie Zawinski <jwz@lucid.com>
7;; Hallvard Furuseth <hbf@ulrik.uio.no> 7;; Hallvard Furuseth <hbf@ulrik.uio.no>
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: lisp 8;; Keywords: lisp
10;; Package: emacs 9;; Package: emacs
11 10
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index 58ca9d5f57e..21af4b6e631 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2011-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2011-2019 Free Software Foundation, Inc.
4 4
5;; Author: Igor Kuzmin <kzuminig@iro.umontreal.ca> 5;; Author: Igor Kuzmin <kzuminig@iro.umontreal.ca>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: lisp 6;; Keywords: lisp
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index 10af440008d..ea6efbf851d 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Richard Mlynarik <mly@eddie.mit.edu> 5;; Author: Richard Mlynarik <mly@eddie.mit.edu>
6;; Created: July 1987 6;; Created: July 1987
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: lisp, tools 7;; Keywords: lisp, tools
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index c4a1dcb8baa..24e79acfa55 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -2597,8 +2597,9 @@ rather than all at the end (i.e. like `let*' rather than like `let')."
2597;;;###autoload 2597;;;###autoload
2598(defmacro cl-callf (func place &rest args) 2598(defmacro cl-callf (func place &rest args)
2599 "Set PLACE to (FUNC PLACE ARGS...). 2599 "Set PLACE to (FUNC PLACE ARGS...).
2600FUNC should be an unquoted function name. PLACE may be a symbol, 2600FUNC should be an unquoted function name or a lambda expression.
2601or any generalized variable allowed by `setf'." 2601PLACE may be a symbol, or any generalized variable allowed by
2602`setf'."
2602 (declare (indent 2) (debug (cl-function place &rest form))) 2603 (declare (indent 2) (debug (cl-function place &rest form)))
2603 (gv-letplace (getter setter) place 2604 (gv-letplace (getter setter) place
2604 (let* ((rargs (cons getter args))) 2605 (let* ((rargs (cons getter args)))
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index 8989aa07196..259f240d297 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1994, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985-1986, 1994, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: lisp, tools, maint 6;; Keywords: lisp, tools, maint
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index 6db0584b987..9f7beeaef51 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -5,7 +5,6 @@
5;; Inc. 5;; Inc.
6 6
7;; Author: David Megginson (dmeggins@aix1.uottawa.ca) 7;; Author: David Megginson (dmeggins@aix1.uottawa.ca)
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: extensions 8;; Keywords: extensions
10;; Package: emacs 9;; Package: emacs
11 10
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index 3fc22247fa6..ed3c1fbaa94 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Doug Cutting <doug@csli.stanford.edu> 5;; Author: Doug Cutting <doug@csli.stanford.edu>
6;; Jamie Zawinski <jwz@lucid.com> 6;; Jamie Zawinski <jwz@lucid.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: internal 7;; Keywords: internal
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index ab5553b4e83..b8da76ccf0b 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Daniel LaLiberte <liberte@holonexus.org> 6;; Author: Daniel LaLiberte <liberte@holonexus.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: lisp, tools, maint 7;; Keywords: lisp, tools, maint
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index 188d99e14cb..23f303bc28a 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 1996-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996-2019 Free Software Foundation, Inc.
4 4
5;; Author: Noah Friedman <friedman@splode.com> 5;; Author: Noah Friedman <friedman@splode.com>
6;; Maintainer: friedman@splode.com 6;; Maintainer: Noah Friedman <friedman@splode.com>
7;; Keywords: extensions 7;; Keywords: extensions
8;; Created: 1995-10-06 8;; Created: 1995-10-06
9 9
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index f0dcb51af89..1f8d31a3fcc 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Barry A. Warsaw 6;; Author: Barry A. Warsaw
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 26-Feb-1994 7;; Created: 26-Feb-1994
9;; Keywords: debugging lisp tools 8;; Keywords: debugging lisp tools
10 9
diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el
index c33b46501ff..597afdd66f2 100644
--- a/lisp/emacs-lisp/ewoc.el
+++ b/lisp/emacs-lisp/ewoc.el
@@ -4,7 +4,7 @@
4 4
5;; Author: Per Cederqvist <ceder@lysator.liu.se> 5;; Author: Per Cederqvist <ceder@lysator.liu.se>
6;; Inge Wallin <inge@lysator.liu.se> 6;; Inge Wallin <inge@lysator.liu.se>
7;; Maintainer: monnier@gnu.org 7;; Maintainer: Stefan Monnier <monnier@gnu.org>
8;; Created: 3 Aug 1992 8;; Created: 3 Aug 1992
9;; Keywords: extensions, lisp 9;; Keywords: extensions, lisp
10 10
diff --git a/lisp/emacs-lisp/float-sup.el b/lisp/emacs-lisp/float-sup.el
index 54c8afe62b4..6ee378e8528 100644
--- a/lisp/emacs-lisp/float-sup.el
+++ b/lisp/emacs-lisp/float-sup.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1987, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1987, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/emacs-lisp/helper.el b/lisp/emacs-lisp/helper.el
index d1bd46fb584..4a84cfa3e2d 100644
--- a/lisp/emacs-lisp/helper.el
+++ b/lisp/emacs-lisp/helper.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: K. Shane Hartman 5;; Author: K. Shane Hartman
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help 6;; Keywords: help
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index 91c76158a31..81adbd5d4f1 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Eric S. Raymond <esr@snark.thyrsus.com> 6;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 14 Jul 1992 7;; Created: 14 Jul 1992
9;; Keywords: docs 8;; Keywords: docs
10;; X-Bogus-Bureaucratic-Cruft: Gruad will get you if you don't watch out! 9;; X-Bogus-Bureaucratic-Cruft: Gruad will get you if you don't watch out!
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index fa6dc98d04c..021708c588a 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1986, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1986, 1999-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: lisp, languages 5;; Keywords: lisp, languages
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 38df920f17a..f653f6c1099 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1994, 2000-2019 Free Software Foundation, 3;; Copyright (C) 1985-1986, 1994, 2000-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: lisp, languages 6;; Keywords: lisp, languages
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index a688330b74a..e8337a99c80 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1991-1995, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1991-1995, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Roland McGrath <roland@gnu.org> 5;; Author: Roland McGrath <roland@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: lisp, extensions 6;; Keywords: lisp, extensions
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index 54e802edf4f..774df3f84e7 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -8,8 +8,6 @@
8;; Package-Requires: ((emacs "25")) 8;; Package-Requires: ((emacs "25"))
9;; Package: map 9;; Package: map
10 10
11;; Maintainer: emacs-devel@gnu.org
12
13;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
14 12
15;; GNU Emacs is free software: you can redistribute it and/or modify 13;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index 00f72e284ad..2753bbd5482 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-2019 Free Software Foundation, Inc.
4 4
5;; Author: Simon Marshall <simon@gnu.org> 5;; Author: Simon Marshall <simon@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: strings, regexps, extensions 6;; Keywords: strings, regexps, extensions
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index c7d0268a77f..91c043fb3fb 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: extensions 5;; Keywords: extensions
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el
index 6d1adae9749..4c90f47c914 100644
--- a/lisp/emacs-lisp/rmc.el
+++ b/lisp/emacs-lisp/rmc.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2016-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index fdd24317c6a..ed32490ceee 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Gerd Moellmann <gerd@gnu.org> 5;; Author: Gerd Moellmann <gerd@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: strings, regexps, extensions 6;; Keywords: strings, regexps, extensions
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
@@ -107,15 +106,16 @@
107;;; Code: 106;;; Code:
108 107
109(require 'cl-lib) 108(require 'cl-lib)
109(require 'cl-extra)
110 110
111;; FIXME: support macros. 111;; FIXME: support macros.
112 112
113(defvar rx-constituents ;Not `const' because some modes extend it. 113(defvar rx-constituents ;Not `const' because some modes extend it.
114 '((and . (rx-and 1 nil)) 114 '((and . (rx-and 0 nil))
115 (seq . and) ; SRE 115 (seq . and) ; SRE
116 (: . and) ; SRE 116 (: . and) ; SRE
117 (sequence . and) ; sregex 117 (sequence . and) ; sregex
118 (or . (rx-or 1 nil)) 118 (or . (rx-or 0 nil))
119 (| . or) ; SRE 119 (| . or) ; SRE
120 (not-newline . ".") 120 (not-newline . ".")
121 (nonl . not-newline) ; SRE 121 (nonl . not-newline) ; SRE
@@ -391,9 +391,11 @@ FORM is of the form `(and FORM1 ...)'."
391 "Parse and produce code from FORM, which is `(or FORM1 ...)'." 391 "Parse and produce code from FORM, which is `(or FORM1 ...)'."
392 (rx-check form) 392 (rx-check form)
393 (rx-group-if 393 (rx-group-if
394 (if (memq nil (mapcar 'stringp (cdr form))) 394 (cond
395 (mapconcat (lambda (x) (rx-form x '|)) (cdr form) "\\|") 395 ((null (cdr form)) regexp-unmatchable)
396 ((cl-every #'stringp (cdr form))
396 (regexp-opt (cdr form) nil t)) 397 (regexp-opt (cdr form) nil t))
398 (t (mapconcat (lambda (x) (rx-form x '|)) (cdr form) "\\|")))
397 (and (memq rx-parent '(: * t)) rx-parent))) 399 (and (memq rx-parent '(: * t)) rx-parent)))
398 400
399 401
@@ -1122,6 +1124,7 @@ CHAR
1122`(seq SEXP1 SEXP2 ...)' 1124`(seq SEXP1 SEXP2 ...)'
1123`(sequence SEXP1 SEXP2 ...)' 1125`(sequence SEXP1 SEXP2 ...)'
1124 matches what SEXP1 matches, followed by what SEXP2 matches, etc. 1126 matches what SEXP1 matches, followed by what SEXP2 matches, etc.
1127 Without arguments, matches the empty string.
1125 1128
1126`(submatch SEXP1 SEXP2 ...)' 1129`(submatch SEXP1 SEXP2 ...)'
1127`(group SEXP1 SEXP2 ...)' 1130`(group SEXP1 SEXP2 ...)'
@@ -1137,7 +1140,7 @@ CHAR
1137`(| SEXP1 SEXP2 ...)' 1140`(| SEXP1 SEXP2 ...)'
1138 matches anything that matches SEXP1 or SEXP2, etc. If all 1141 matches anything that matches SEXP1 or SEXP2, etc. If all
1139 args are strings, use `regexp-opt' to optimize the resulting 1142 args are strings, use `regexp-opt' to optimize the resulting
1140 regular expression. 1143 regular expression. Without arguments, never matches anything.
1141 1144
1142`(minimal-match SEXP)' 1145`(minimal-match SEXP)'
1143 produce a non-greedy regexp for SEXP. Normally, regexps matching 1146 produce a non-greedy regexp for SEXP. Normally, regexps matching
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 3413cd1513c..8997b7501b2 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -7,8 +7,6 @@
7;; Version: 2.21 7;; Version: 2.21
8;; Package: seq 8;; Package: seq
9 9
10;; Maintainer: emacs-devel@gnu.org
11
12;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
13 11
14;; GNU Emacs is free software: you can redistribute it and/or modify 12;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el
index b9ffe6a6fc6..33445835aed 100644
--- a/lisp/emacs-lisp/subr-x.el
+++ b/lisp/emacs-lisp/subr-x.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2013-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: convenience 5;; Keywords: convenience
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index f1904e64efb..f488bed3b0e 100644
--- a/lisp/emacs-lisp/syntax.el
+++ b/lisp/emacs-lisp/syntax.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index 29b481849e2..8d2f8217c61 100644
--- a/lisp/emacs-lisp/tcover-ses.el
+++ b/lisp/emacs-lisp/tcover-ses.el
@@ -2,8 +2,8 @@
2 2
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jonathan Yavner <jyavner@engineer.com> 5;; Author: Jonathan Yavner <jyavner@member.fsf.org>
6;; Maintainer: Jonathan Yavner <jyavner@engineer.com> 6;; Maintainer: Jonathan Yavner <jyavner@member.fsf.org>
7;; Keywords: spreadsheet lisp utility 7;; Keywords: spreadsheet lisp utility
8;; Package: testcover 8;; Package: testcover
9 9
diff --git a/lisp/emacs-lisp/tcover-unsafep.el b/lisp/emacs-lisp/tcover-unsafep.el
index 571f53c7957..daae3ad43bc 100644
--- a/lisp/emacs-lisp/tcover-unsafep.el
+++ b/lisp/emacs-lisp/tcover-unsafep.el
@@ -2,8 +2,8 @@
2 2
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jonathan Yavner <jyavner@engineer.com> 5;; Author: Jonathan Yavner <jyavner@member.fsf.org>
6;; Maintainer: Jonathan Yavner <jyavner@engineer.com> 6;; Maintainer: Jonathan Yavner <jyavner@member.fsf.org>
7;; Keywords: safety lisp utility 7;; Keywords: safety lisp utility
8;; Package: testcover 8;; Package: testcover
9 9
diff --git a/lisp/emacs-lisp/thunk.el b/lisp/emacs-lisp/thunk.el
index e1370c45911..968dc71f678 100644
--- a/lisp/emacs-lisp/thunk.el
+++ b/lisp/emacs-lisp/thunk.el
@@ -7,8 +7,6 @@
7;; Version: 1.0 7;; Version: 1.0
8;; Package: thunk 8;; Package: thunk
9 9
10;; Maintainer: emacs-devel@gnu.org
11
12;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
13 11
14;; GNU Emacs is free software: you can redistribute it and/or modify 12;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/emacs-lisp/timer-list.el b/lisp/emacs-lisp/timer-list.el
index 55aa56b72e0..3a791c2af44 100644
--- a/lisp/emacs-lisp/timer-list.el
+++ b/lisp/emacs-lisp/timer-list.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2016-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Package: emacs 5;; Package: emacs
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index 22ccc35103a..668da42a6ef 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Package: emacs 5;; Package: emacs
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lisp/tq.el b/lisp/emacs-lisp/tq.el
index 4249305feee..ca2d2a23c75 100644
--- a/lisp/emacs-lisp/tq.el
+++ b/lisp/emacs-lisp/tq.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Scott Draves <spot@cs.cmu.edu> 6;; Author: Scott Draves <spot@cs.cmu.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Adapted-By: ESR 7;; Adapted-By: ESR
9;; Keywords: extensions 8;; Keywords: extensions
10 9
diff --git a/lisp/emacs-lisp/trace.el b/lisp/emacs-lisp/trace.el
index 2f271c1f708..0a8351195f1 100644
--- a/lisp/emacs-lisp/trace.el
+++ b/lisp/emacs-lisp/trace.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Hans Chalupsky <hans@cs.buffalo.edu> 5;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 15 Dec 1992 6;; Created: 15 Dec 1992
8;; Keywords: tools, lisp 7;; Keywords: tools, lisp
9 8
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index 13ca605dd00..70d6b077ebc 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el
index 0cded29193a..05b4c010f68 100644
--- a/lisp/emacs-lock.el
+++ b/lisp/emacs-lock.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Juanma Barranquero <lekktu@gmail.com> 5;; Author: Juanma Barranquero <lekktu@gmail.com>
6;; Inspired by emacs-lock.el by Tom Wurgler <twurgler@goodyear.com> 6;; Inspired by emacs-lock.el by Tom Wurgler <twurgler@goodyear.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: extensions, processes 7;; Keywords: extensions, processes
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/env.el b/lisp/env.el
index 5a4130eb3be..30b63a8e552 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1991, 1994, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1991, 1994, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: processes, unix 5;; Keywords: processes, unix
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index 9e224e0b828..298cffb49ae 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jorgen Schaefer <forcer@forcix.cx> 5;; Author: Jorgen Schaefer <forcer@forcix.cx>
6;; Maintainer: emacs-devel@gnu.org
7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcAutoAway 6;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcAutoAway
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 210830a2b49..eb441c29b41 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -4,7 +4,6 @@
4 4
5;; Filename: erc-backend.el 5;; Filename: erc-backend.el
6;; Author: Lawrence Mitchell <wence@gmx.li> 6;; Author: Lawrence Mitchell <wence@gmx.li>
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 2004-05-7 7;; Created: 2004-05-7
9;; Keywords: IRC chat client internet 8;; Keywords: IRC chat client internet
10 9
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index c8aa887a652..8e2a6b980d0 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1996-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: irc, button, url, regexp 6;; Keywords: irc, button, url, regexp
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcButton 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcButton
9 8
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 210a7736cc0..3d99c259aad 100644
--- a/lisp/erc/erc-capab.el
+++ b/lisp/erc/erc-capab.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2006-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7; This file is part of GNU Emacs. 5; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index e724e367ab1..3b362774b6b 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc.
4 4
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; URL: http://www.emacswiki.org/cgi-bin/wiki/ERC 6;; URL: http://www.emacswiki.org/cgi-bin/wiki/ERC
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index a6b7532e1f3..b835191960e 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -6,7 +6,6 @@
6;; Author: Ben A. Mesander <ben@gnu.ai.mit.edu> 6;; Author: Ben A. Mesander <ben@gnu.ai.mit.edu>
7;; Noah Friedman <friedman@prep.ai.mit.edu> 7;; Noah Friedman <friedman@prep.ai.mit.edu>
8;; Per Persson <pp@sno.pp.se> 8;; Per Persson <pp@sno.pp.se>
9;; Maintainer: emacs-devel@gnu.org
10;; Keywords: comm, processes 9;; Keywords: comm, processes
11;; Created: 1994-01-23 10;; Created: 1994-01-23
12 11
diff --git a/lisp/erc/erc-ezbounce.el b/lisp/erc/erc-ezbounce.el
index a2c9336826a..5784e63d7f8 100644
--- a/lisp/erc/erc-ezbounce.el
+++ b/lisp/erc/erc-ezbounce.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Andreas Fuchs <asf@void.at> 5;; Author: Andreas Fuchs <asf@void.at>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 934b52a938c..ef876f464e3 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Andreas Fuchs <asf@void.at> 5;; Author: Andreas Fuchs <asf@void.at>
6;; Mario Lang <mlang@delysid.org> 6;; Mario Lang <mlang@delysid.org>
7;; Maintainer: emacs-devel@gnu.org
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcFilling 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcFilling
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 884c594b9ed..0d16aaf5412 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jorgen Schaefer <forcer@forcix.cx> 5;; Author: Jorgen Schaefer <forcer@forcix.cx>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; Most code is taken verbatim from erc.el, see there for the original 7;; Most code is taken verbatim from erc.el, see there for the original
9;; authors. 8;; authors.
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 149c858d2e8..ce0104b3054 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcIbuffer 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcIbuffer
9 8
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index d95e0eac0c7..96b45899b49 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, processes 6;; Keywords: comm, processes
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index 08f52f13647..e40dc1fc250 100644
--- a/lisp/erc/erc-imenu.el
+++ b/lisp/erc/erc-imenu.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Mario Lang <mlang@delysid.org> 6;; Author: Mario Lang <mlang@delysid.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: comm 7;; Keywords: comm
9;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcImenu 8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcImenu
10 9
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index 896521eaf0a..18cc8b54252 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: irc 6;; Keywords: irc
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcAutoJoin 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcAutoJoin
9 8
diff --git a/lisp/erc/erc-lang.el b/lisp/erc/erc-lang.el
index f0dbe69f791..765898da7b9 100644
--- a/lisp/erc/erc-lang.el
+++ b/lisp/erc/erc-lang.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Old-Version: 1.0.0 6;; Old-Version: 1.0.0
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcLang 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcLang
9;; Keywords: comm languages processes 8;; Keywords: comm languages processes
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index d8d9e17c95a..6a2ba785ba4 100644
--- a/lisp/erc/erc-list.el
+++ b/lisp/erc/erc-list.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2008-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2008-2019 Free Software Foundation, Inc.
4 4
5;; Author: Tom Tromey <tromey@redhat.com> 5;; Author: Tom Tromey <tromey@redhat.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Old-Version: 0.1 6;; Old-Version: 0.1
8;; Keywords: comm 7;; Keywords: comm
9 8
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 4153f5c57bd..fc12dc73ef5 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2019 Free Software Foundation, Inc.
4 4
5;; Author: Lawrence Mitchell <wence@gmx.li> 5;; Author: Lawrence Mitchell <wence@gmx.li>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: IRC, chat, client, Internet, logging 6;; Keywords: IRC, chat, client, Internet, logging
8 7
9;; Created 2003-04-26 8;; Created 2003-04-26
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index cc4b4a88f11..98ddebd0cfc 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Andreas Fuchs <asf@void.at> 5;; Author: Andreas Fuchs <asf@void.at>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, faces 6;; Keywords: comm, faces
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcMatch 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcMatch
9 8
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index 8173829797b..e13404ca133 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, processes, menu 6;; Keywords: comm, processes, menu
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 87c3a61b663..252af715d72 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index eca8ad6a899..e92da7b7253 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002, 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@lexx.delysid.org> 5;; Author: Mario Lang <mlang@lexx.delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 45dae899900..9bd062a98d6 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@lexx.delysid.org> 5;; Author: Mario Lang <mlang@lexx.delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index cb57883ae6f..4e7fed7b403 100644
--- a/lisp/erc/erc-page.el
+++ b/lisp/erc/erc-page.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index dd2da85d0e8..e2489a8d0ee 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Sacha Chua <sacha@free.net.ph> 5;; Author: Sacha Chua <sacha@free.net.ph>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, convenience 6;; Keywords: comm, convenience
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcCompletion 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcCompletion
9 8
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index 2e0e54a030f..e1c495c9036 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Andreas Fuchs <asf@void.at> 6;; Author: Andreas Fuchs <asf@void.at>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: IRC, client, Internet 7;; Keywords: IRC, client, Internet
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 5459d8b01e5..54f91d134cb 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm 6;; Keywords: comm
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcHistory 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcHistory
9 8
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 886ba60eb47..f500f4c1278 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index 34f7ce62c74..38e0b2885bb 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2002-2003, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2003, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 0a1e38fe248..833ad2f1e78 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Contributor: Eric M. Ludlam <eric@siege-engine.com> 6;; Contributor: Eric M. Ludlam <eric@siege-engine.com>
7;; Maintainer: emacs-devel@gnu.org
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
10 9
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index 69a83fa032b..8df7ea9e4c1 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2005-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2005-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jorgen Schaefer <forcer@forcix.cx> 5;; Author: Jorgen Schaefer <forcer@forcix.cx>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: irc 6;; Keywords: irc
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcSpelling 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcSpelling
9 8
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index 860fdbb77ce..541c67a74fb 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, processes, timestamp 6;; Keywords: comm, processes, timestamp
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcStamp 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcStamp
9 8
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index e51e6056fb9..14e86c199a2 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, faces 6;; Keywords: comm, faces
8;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcChannelTracking 7;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcChannelTracking
9 8
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index 04174295520..73c7316b346 100644
--- a/lisp/erc/erc-truncate.el
+++ b/lisp/erc/erc-truncate.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Andreas Fuchs <asf@void.at> 5;; Author: Andreas Fuchs <asf@void.at>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: IRC, chat, client, Internet, logging 6;; Keywords: IRC, chat, client, Internet, logging
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index 162b22e15c6..20a91b7a30d 100644
--- a/lisp/erc/erc-xdcc.el
+++ b/lisp/erc/erc-xdcc.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mario Lang <mlang@delysid.org> 5;; Author: Mario Lang <mlang@delysid.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, processes 6;; Keywords: comm, processes
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index d1fa5c7f120..fc0f6128f6f 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -10,7 +10,6 @@
10;; Gergely Nagy (algernon@midgard.debian.net) 10;; Gergely Nagy (algernon@midgard.debian.net)
11;; David Edmondson (dme@dme.org) 11;; David Edmondson (dme@dme.org)
12;; Kelvin White (kwhite@gnu.org) 12;; Kelvin White (kwhite@gnu.org)
13;; Maintainer: emacs-devel@gnu.org
14;; Keywords: IRC, chat, client, Internet 13;; Keywords: IRC, chat, client, Internet
15 14
16;; Version: 5.3 15;; Version: 5.3
diff --git a/lisp/expand.el b/lisp/expand.el
index 0c4d343090c..7eaf7fdab05 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995-1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995-1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Frederic Lepied <Frederic.Lepied@sugix.frmug.org> 5;; Author: Frederic Lepied <Frederic.Lepied@sugix.frmug.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: abbrev 6;; Keywords: abbrev
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/faces.el b/lisp/faces.el
index 89b598669c9..137ce99d5e6 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 08f72089450..4e91a7affaf 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995-1997, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995-1997, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Michelangelo Grigni <mic@mathcs.emory.edu> 5;; Author: Michelangelo Grigni <mic@mathcs.emory.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 29 Mar 1993 6;; Created: 29 Mar 1993
8;; Keywords: files, hypermedia, matching, mouse, convenience 7;; Keywords: files, hypermedia, matching, mouse, convenience
9 8
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 26b83ce66c0..d77046d2871 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -238,11 +238,17 @@ EVENT is the cadr of the event in `file-notify-handle-event'
238 (string-equal 238 (string-equal
239 (file-notify--watch-filename watch) 239 (file-notify--watch-filename watch)
240 (file-name-nondirectory file)) 240 (file-name-nondirectory file))
241
241 ;; Directory matches. 242 ;; Directory matches.
242 (string-equal 243 ;; FIXME: What purpose would this condition serve?
243 (file-name-nondirectory file) 244 ;; Doesn't it just slip through events for files
244 (file-name-nondirectory 245 ;; having the same name as the last component of the
245 (file-notify--watch-directory watch))) 246 ;; directory of the file that we are really watching?
247 ;;(string-equal
248 ;; (file-name-nondirectory file)
249 ;; (file-name-nondirectory
250 ;; (file-notify--watch-directory watch)))
251
246 ;; File1 matches. 252 ;; File1 matches.
247 (and (stringp file1) 253 (and (stringp file1)
248 (string-equal 254 (string-equal
diff --git a/lisp/files-x.el b/lisp/files-x.el
index b71e9204f32..0d156db0e62 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2009-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2009-2019 Free Software Foundation, Inc.
4 4
5;; Author: Juri Linkov <juri@jurta.org> 5;; Author: Juri Linkov <juri@jurta.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: files 6;; Keywords: files
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/files.el b/lisp/files.el
index 1dec0ed7ca9..989d1cb4658 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1987, 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1987, 1992-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Package: emacs 5;; Package: emacs
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
@@ -4269,6 +4268,9 @@ However, the mode will not be changed if
4269 :type 'boolean 4268 :type 'boolean
4270 :group 'editing-basics) 4269 :group 'editing-basics)
4271 4270
4271(defvar after-set-visited-file-name-hook nil
4272 "Normal hook run just after setting visited file name of current buffer.")
4273
4272(defun set-visited-file-name (filename &optional no-query along-with-file) 4274(defun set-visited-file-name (filename &optional no-query along-with-file)
4273 "Change name of file visited in current buffer to FILENAME. 4275 "Change name of file visited in current buffer to FILENAME.
4274This also renames the buffer to correspond to the new file. 4276This also renames the buffer to correspond to the new file.
@@ -4389,7 +4391,8 @@ the old visited file has been renamed to the new name FILENAME."
4389 (set-auto-mode t) 4391 (set-auto-mode t)
4390 (or (eq old major-mode) 4392 (or (eq old major-mode)
4391 (hack-local-variables)))) 4393 (hack-local-variables))))
4392 (error nil)))) 4394 (error nil))
4395 (run-hooks 'after-set-visited-file-name-hook)))
4393 4396
4394(defun write-file (filename &optional confirm) 4397(defun write-file (filename &optional confirm)
4395 "Write current buffer into file FILENAME. 4398 "Write current buffer into file FILENAME.
diff --git a/lisp/filesets.el b/lisp/filesets.el
index b74b4a8a400..05c30dedf40 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Thomas Link <sanobast-emacs@yahoo.de> 5;; Author: Thomas Link <sanobast-emacs@yahoo.de>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: filesets convenience 6;; Keywords: filesets convenience
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/find-dired.el b/lisp/find-dired.el
index ef137be9bbf..578f7653628 100644
--- a/lisp/find-dired.el
+++ b/lisp/find-dired.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Roland McGrath <roland@gnu.org>, 6;; Author: Roland McGrath <roland@gnu.org>,
7;; Sebastian Kremer <sk@thp.uni-koeln.de> 7;; Sebastian Kremer <sk@thp.uni-koeln.de>
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: unix 8;; Keywords: unix
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/find-file.el b/lisp/find-file.el
index 87314086a4a..f93d2a02d74 100644
--- a/lisp/find-file.el
+++ b/lisp/find-file.el
@@ -1,7 +1,6 @@
1;;; find-file.el --- find a file corresponding to this one given a pattern 1;;; find-file.el --- find a file corresponding to this one given a pattern
2 2
3;; Author: Henry Guillaume <henri@tibco.com, henry@c032.aone.net.au> 3;; Author: Henry Guillaume <henri@tibco.com, henry@c032.aone.net.au>
4;; Maintainer: emacs-devel@gnu.org
5;; Keywords: c, matching, tools 4;; Keywords: c, matching, tools
6 5
7;; Copyright (C) 1994-1995, 2001-2019 Free Software Foundation, Inc. 6;; Copyright (C) 1994-1995, 2001-2019 Free Software Foundation, Inc.
diff --git a/lisp/flow-ctrl.el b/lisp/flow-ctrl.el
index e92b6b4df2e..0b95efaf041 100644
--- a/lisp/flow-ctrl.el
+++ b/lisp/flow-ctrl.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Kevin Gallagher 6;; Author: Kevin Gallagher
7;; Maintainer: emacs-devel@gnu.org
8;; Adapted-By: ESR 7;; Adapted-By: ESR
9;; Keywords: hardware 8;; Keywords: hardware
10 9
diff --git a/lisp/foldout.el b/lisp/foldout.el
index 3ef88fe686a..2eae65a7928 100644
--- a/lisp/foldout.el
+++ b/lisp/foldout.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Kevin Broadey <KevinB@bartley.demon.co.uk> 5;; Author: Kevin Broadey <KevinB@bartley.demon.co.uk>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 27 Jan 1994 6;; Created: 27 Jan 1994
8;; Version: 1.10 7;; Version: 1.10
9;; Keywords: folding, outlines 8;; Keywords: folding, outlines
diff --git a/lisp/follow.el b/lisp/follow.el
index acc2b26c550..47e7aa4cd5e 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Anders Lindgren 6;; Author: Anders Lindgren
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 1995-05-25 7;; Created: 1995-05-25
9;; Keywords: display, window, minor-mode, convenience 8;; Keywords: display, window, minor-mode, convenience
10 9
diff --git a/lisp/font-core.el b/lisp/font-core.el
index 6b26f0cb92e..da6c91bca5e 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: languages, faces 5;; Keywords: languages, faces
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 3991a4ee8ef..b0e4598bac7 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -5,7 +5,6 @@
5;; Author: Jamie Zawinski 5;; Author: Jamie Zawinski
6;; Richard Stallman 6;; Richard Stallman
7;; Stefan Monnier 7;; Stefan Monnier
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: languages, faces 8;; Keywords: languages, faces
10;; Package: emacs 9;; Package: emacs
11 10
diff --git a/lisp/frame.el b/lisp/frame.el
index a8c230cb7b2..8e0738f31c0 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1994, 1996-1997, 2000-2019 Free Software 3;; Copyright (C) 1993-1994, 1996-1997, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/fringe.el b/lisp/fringe.el
index 92387a21571..632efa81a8d 100644
--- a/lisp/fringe.el
+++ b/lisp/fringe.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Simon Josefsson <simon@josefsson.org> 5;; Author: Simon Josefsson <simon@josefsson.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: frames 6;; Keywords: frames
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index baa8a244c07..a1b82f8aab4 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -3733,7 +3733,7 @@ is to run."
3733 "Stop the Date timer." 3733 "Stop the Date timer."
3734 (interactive) 3734 (interactive)
3735 (when article-lapsed-timer 3735 (when article-lapsed-timer
3736 (nnheader-cancel-timer article-lapsed-timer) 3736 (cancel-timer article-lapsed-timer)
3737 (setq article-lapsed-timer nil))) 3737 (setq article-lapsed-timer nil)))
3738 3738
3739(defun article-date-user (&optional highlight) 3739(defun article-date-user (&optional highlight)
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index 4e2723e8d27..b3da3505da8 100644
--- a/lisp/gnus/gnus-async.el
+++ b/lisp/gnus/gnus-async.el
@@ -146,7 +146,7 @@ that was fetched."
146 (when next 146 (when next
147 (when gnus-async-timer 147 (when gnus-async-timer
148 (ignore-errors 148 (ignore-errors
149 (nnheader-cancel-timer 'gnus-async-timer))) 149 (cancel-timer 'gnus-async-timer)))
150 (setq gnus-async-timer 150 (setq gnus-async-timer
151 (run-with-idle-timer 151 (run-with-idle-timer
152 0.1 nil 'gnus-async-prefetch-article 152 0.1 nil 'gnus-async-prefetch-article
diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el
index 6c5e0b7f5d0..cb70d9525c2 100644
--- a/lisp/gnus/gnus-demon.el
+++ b/lisp/gnus/gnus-demon.el
@@ -111,7 +111,7 @@ marked with SPECIAL."
111 func idle time)))) 111 func idle time))))
112 ((and idle (> idle (gnus-demon-idle-since))) 112 ((and idle (> idle (gnus-demon-idle-since)))
113 (when time 113 (when time
114 (nnheader-cancel-timer (plist-get gnus-demon-timers func)) 114 (cancel-timer (plist-get gnus-demon-timers func))
115 (setq gnus-demon-timers 115 (setq gnus-demon-timers
116 (plist-put gnus-demon-timers func 116 (plist-put gnus-demon-timers func
117 (run-with-idle-timer idle nil 117 (run-with-idle-timer idle nil
@@ -202,7 +202,7 @@ marked with SPECIAL."
202 "Cancel any Gnus daemons." 202 "Cancel any Gnus daemons."
203 (interactive) 203 (interactive)
204 (dotimes (i (/ (length gnus-demon-timers) 2)) 204 (dotimes (i (/ (length gnus-demon-timers) 2))
205 (nnheader-cancel-timer (nth (1+ (* i 2)) gnus-demon-timers))) 205 (cancel-timer (nth (1+ (* i 2)) gnus-demon-timers)))
206 (setq gnus-demon-timers nil)) 206 (setq gnus-demon-timers nil))
207 207
208(defun gnus-demon-add-disconnection () 208(defun gnus-demon-add-disconnection ()
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 7514e64e7c2..9d70bd5afa9 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -31,7 +31,6 @@
31(autoload 'auth-source-search "auth-source") 31(autoload 'auth-source-search "auth-source")
32(autoload 'pop3-movemail "pop3") 32(autoload 'pop3-movemail "pop3")
33(autoload 'pop3-get-message-count "pop3") 33(autoload 'pop3-get-message-count "pop3")
34(autoload 'nnheader-cancel-timer "nnheader")
35(require 'mm-util) 34(require 'mm-util)
36(require 'message) ;; for `message-directory' 35(require 'message) ;; for `message-directory'
37 36
@@ -989,9 +988,9 @@ This only works when `display-time' is enabled."
989 (> (prefix-numeric-value arg) 0)))) 988 (> (prefix-numeric-value arg) 0))))
990 (setq mail-source-report-new-mail on) 989 (setq mail-source-report-new-mail on)
991 (and mail-source-report-new-mail-timer 990 (and mail-source-report-new-mail-timer
992 (nnheader-cancel-timer mail-source-report-new-mail-timer)) 991 (cancel-timer mail-source-report-new-mail-timer))
993 (and mail-source-report-new-mail-idle-timer 992 (and mail-source-report-new-mail-idle-timer
994 (nnheader-cancel-timer mail-source-report-new-mail-idle-timer)) 993 (cancel-timer mail-source-report-new-mail-idle-timer))
995 (setq mail-source-report-new-mail-timer nil) 994 (setq mail-source-report-new-mail-timer nil)
996 (setq mail-source-report-new-mail-idle-timer nil) 995 (setq mail-source-report-new-mail-idle-timer nil)
997 (if on 996 (if on
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 5b1859e3240..0b9cdde1fa5 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1111,7 +1111,7 @@ external if displayed external."
1111 (mm-remove-part handle))))))) 1111 (mm-remove-part handle)))))))
1112 1112
1113(defun mm-destroy-parts (handles) 1113(defun mm-destroy-parts (handles)
1114 "Remove the displayed MIME parts represented by HANDLES." 1114 "Destroy the displayed MIME parts represented by HANDLES."
1115 (if (and (listp handles) 1115 (if (and (listp handles)
1116 (bufferp (car handles))) 1116 (bufferp (car handles)))
1117 (mm-destroy-part handles) 1117 (mm-destroy-part handles)
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index d30a7399493..6ef324ae916 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -121,7 +121,6 @@ on your system, you could say something like:
121 121
122(autoload 'nnmail-message-id "nnmail") 122(autoload 'nnmail-message-id "nnmail")
123(autoload 'mail-position-on-field "sendmail") 123(autoload 'mail-position-on-field "sendmail")
124(autoload 'gnus-buffer-live-p "gnus-util")
125 124
126;;; Header access macros. 125;;; Header access macros.
127 126
@@ -970,8 +969,9 @@ See `find-file-noselect' for the arguments."
970 "Strip all \r's from the current buffer." 969 "Strip all \r's from the current buffer."
971 (nnheader-skeleton-replace "\r")) 970 (nnheader-skeleton-replace "\r"))
972 971
973(defalias 'nnheader-cancel-timer 'cancel-timer) 972(define-obsolete-function-alias 'nnheader-cancel-timer 'cancel-timer "27.1")
974(defalias 'nnheader-cancel-function-timers 'cancel-function-timers) 973(define-obsolete-function-alias 'nnheader-cancel-function-timers
974 'cancel-function-timers "27.1")
975 975
976;; When changing this function, consider changing `pop3-accept-process-output' 976;; When changing this function, consider changing `pop3-accept-process-output'
977;; as well. 977;; as well.
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index b6dbbea74cc..37f6e75b90e 100644
--- a/lisp/gnus/nnmail.el
+++ b/lisp/gnus/nnmail.el
@@ -34,8 +34,6 @@
34(require 'mm-util) 34(require 'mm-util)
35(require 'gnus-int) 35(require 'gnus-int)
36 36
37(autoload 'gnus-add-buffer "gnus")
38(autoload 'gnus-kill-buffer "gnus")
39(autoload 'mail-send-and-exit "sendmail" nil t) 37(autoload 'mail-send-and-exit "sendmail" nil t)
40 38
41(defgroup nnmail nil 39(defgroup nnmail nil
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 9d02773d6f2..ac125c905a5 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -1490,7 +1490,7 @@ This variable is set by `nnmaildir-request-article'.")
1490 'excl) 1490 'excl)
1491 (when (fboundp 'unix-sync) 1491 (when (fboundp 'unix-sync)
1492 (unix-sync)))) ;; no fsync :( 1492 (unix-sync)))) ;; no fsync :(
1493 (nnheader-cancel-timer 24h) 1493 (cancel-timer 24h)
1494 (condition-case err 1494 (condition-case err
1495 (add-name-to-file tmpfile curfile) 1495 (add-name-to-file tmpfile curfile)
1496 (error 1496 (error
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index e2fa1d85a36..0e5057e1a45 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -647,7 +647,7 @@ command whose response triggered the error."
647 (nntp-close-server)) 647 (nntp-close-server))
648 (signal 'quit nil)))) 648 (signal 'quit nil))))
649 (when -timer 649 (when -timer
650 (nnheader-cancel-timer -timer))) 650 (cancel-timer -timer)))
651 nil)) 651 nil))
652 (setq nntp--report-1 nntp-report-n)) 652 (setq nntp--report-1 nntp-report-n))
653 nntp-with-open-group-internal)) 653 nntp-with-open-group-internal))
@@ -1280,7 +1280,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
1280 (signal 'quit nil) 1280 (signal 'quit nil)
1281 nil)))) 1281 nil))))
1282 (when timer 1282 (when timer
1283 (nnheader-cancel-timer timer)) 1283 (cancel-timer timer))
1284 (when (and process 1284 (when (and process
1285 (not (memq (process-status process) '(open run)))) 1285 (not (memq (process-status process) '(open run))))
1286 (with-current-buffer pbuffer 1286 (with-current-buffer pbuffer
@@ -1339,7 +1339,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
1339(defun nntp-async-stop (proc) 1339(defun nntp-async-stop (proc)
1340 (setq nntp-async-process-list (delq proc nntp-async-process-list)) 1340 (setq nntp-async-process-list (delq proc nntp-async-process-list))
1341 (when (and nntp-async-timer (not nntp-async-process-list)) 1341 (when (and nntp-async-timer (not nntp-async-process-list))
1342 (nnheader-cancel-timer nntp-async-timer) 1342 (cancel-timer nntp-async-timer)
1343 (setq nntp-async-timer nil))) 1343 (setq nntp-async-timer nil)))
1344 1344
1345(defun nntp-after-change-function (beg end len) 1345(defun nntp-after-change-function (beg end len)
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 50d69e70de4..91b4104becf 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software 3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, internal 6;; Keywords: help, internal
8;; Package: emacs 7;; Package: emacs
9 8
@@ -104,11 +103,23 @@ and the output should go to `standard-output'.")
104 (with-demoted-errors "while loading: %S" 103 (with-demoted-errors "while loading: %S"
105 (load file 'noerror 'nomessage)))))) 104 (load file 'noerror 'nomessage))))))
106 105
106(defcustom help-enable-completion-auto-load t
107 "Whether completion for Help commands can perform autoloading.
108If non-nil, whenever invoking completion for `describe-function'
109or `describe-variable' load files that might contain definitions
110with the current prefix. The files are chosen according to
111`definition-prefixes'."
112 :type 'boolean
113 :group 'help
114 :version "26.3")
115
107(defun help--symbol-completion-table (string pred action) 116(defun help--symbol-completion-table (string pred action)
108 (let ((prefixes (radix-tree-prefixes (help-definition-prefixes) string))) 117 (when help-enable-completion-auto-load
109 (help--load-prefixes prefixes)) 118 (let ((prefixes (radix-tree-prefixes (help-definition-prefixes) string)))
119 (help--load-prefixes prefixes)))
110 (let ((prefix-completions 120 (let ((prefix-completions
111 (mapcar #'intern (all-completions string definition-prefixes)))) 121 (and help-enable-completion-auto-load
122 (mapcar #'intern (all-completions string definition-prefixes)))))
112 (complete-with-action action obarray string 123 (complete-with-action action obarray string
113 (if pred (lambda (sym) 124 (if pred (lambda (sym)
114 (or (funcall pred sym) 125 (or (funcall pred sym)
diff --git a/lisp/help-macro.el b/lisp/help-macro.el
index a16d1e34b43..9c90d6da148 100644
--- a/lisp/help-macro.el
+++ b/lisp/help-macro.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Lynn Slater <lrs@indetech.com> 5;; Author: Lynn Slater <lrs@indetech.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: Mon Oct 1 11:42:39 1990 6;; Created: Mon Oct 1 11:42:39 1990
8;; Adapted-By: ESR 7;; Adapted-By: ESR
9;; Package: emacs 8;; Package: emacs
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 6cc3f0d4f71..304c45dad3c 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software 3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, internal 6;; Keywords: help, internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/help.el b/lisp/help.el
index 42ff3755650..0677368a4d6 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software 3;; Copyright (C) 1985-1986, 1993-1994, 1998-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, internal 6;; Keywords: help, internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/hexl.el b/lisp/hexl.el
index ee5a9c0fce2..df501dfc68f 100644
--- a/lisp/hexl.el
+++ b/lisp/hexl.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu> 6;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: data 7;; Keywords: data
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el
index 404f448e0d2..17d3dc7d8d7 100644
--- a/lisp/hippie-exp.el
+++ b/lisp/hippie-exp.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Anders Holst <aho@sans.kth.se> 5;; Author: Anders Holst <aho@sans.kth.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Version: 1.6 6;; Version: 1.6
8;; Keywords: abbrev convenience 7;; Keywords: abbrev convenience
9 8
diff --git a/lisp/hl-line.el b/lisp/hl-line.el
index 1c09bc26f68..e4fef214d65 100644
--- a/lisp/hl-line.el
+++ b/lisp/hl-line.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Dave Love <fx@gnu.org> 5;; Author: Dave Love <fx@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 1998-09-13 6;; Created: 1998-09-13
8;; Keywords: faces, frames, emulations 7;; Keywords: faces, frames, emulations
9 8
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 10fd3a698c5..698025e5504 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -3,8 +3,8 @@
3;; Copyright (C) 1992-1994, 1997, 1999, 2001-2019 Free Software 3;; Copyright (C) 1992-1994, 1997, 1999, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Ken Manheimer <klm@i.am> 6;; Author: Ken Manheimer <ken dot manheimer at gmail...>
7;; Maintainer: Ken Manheimer <klm@i.am> 7;; Maintainer: Ken Manheimer <ken dot manheimer at gmail...>
8;; Created: Mar 1993 Ken Manheimer, klm@nist.gov - first release to usenet 8;; Created: Mar 1993 Ken Manheimer, klm@nist.gov - first release to usenet
9;; Keywords: help, abbrev 9;; Keywords: help, abbrev
10 10
diff --git a/lisp/ielm.el b/lisp/ielm.el
index c7a31a23e68..1531415e741 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: David Smith <maa036@lancaster.ac.uk> 5;; Author: David Smith <maa036@lancaster.ac.uk>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 25 Feb 1994 6;; Created: 25 Feb 1994
8;; Keywords: lisp 7;; Keywords: lisp
9 8
diff --git a/lisp/iimage.el b/lisp/iimage.el
index e51108ee28f..17b715a66b9 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: KOSEKI Yoshinori <kose@meadowy.org> 5;; Author: KOSEKI Yoshinori <kose@meadowy.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: multimedia 6;; Keywords: multimedia
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/image.el b/lisp/image.el
index db113020866..6cc2cc39027 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: multimedia 5;; Keywords: multimedia
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 5084fe61eff..6e16e131835 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se> 5;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se>
6;; Lars Lindberg <lli@sypro.cap.se> 6;; Lars Lindberg <lli@sypro.cap.se>
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 8 Feb 1994 7;; Created: 8 Feb 1994
9;; Keywords: tools convenience 8;; Keywords: tools convenience
10 9
diff --git a/lisp/indent.el b/lisp/indent.el
index bf87d6af760..1dbece73d6e 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 1995, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 1995, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Package: emacs 5;; Package: emacs
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/info.el b/lisp/info.el
index c211887a39a..61803950d18 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1986, 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1986, 1992-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: help 5;; Keywords: help
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/informat.el b/lisp/informat.el
index 8108ffe42af..246b3b979b5 100644
--- a/lisp/informat.el
+++ b/lisp/informat.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1986, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1986, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: help 5;; Keywords: help
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/international/isearch-x.el b/lisp/international/isearch-x.el
index 6c2a2dc9b99..c12e7b39a8d 100644
--- a/lisp/international/isearch-x.el
+++ b/lisp/international/isearch-x.el
@@ -8,8 +8,8 @@
8 8
9;; Keywords: i18n, multilingual, isearch 9;; Keywords: i18n, multilingual, isearch
10 10
11;; Author: Kenichi HANDA <handa@etl.go.jp> 11;; Author: Kenichi Handa <handa@gnu.org>
12;; Maintainer: Kenichi HANDA <handa@etl.go.jp> 12;; Maintainer: Kenichi Handa <handa@gnu.org>
13 13
14;; This file is part of GNU Emacs. 14;; This file is part of GNU Emacs.
15 15
diff --git a/lisp/international/iso-ascii.el b/lisp/international/iso-ascii.el
index 395e6c4dcd0..b317b8aad7f 100644
--- a/lisp/international/iso-ascii.el
+++ b/lisp/international/iso-ascii.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Howard Gayle 6;; Author: Howard Gayle
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: i18n 7;; Keywords: i18n
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/international/iso-transl.el b/lisp/international/iso-transl.el
index b573e1e47c5..14da02c73d9 100644
--- a/lisp/international/iso-transl.el
+++ b/lisp/international/iso-transl.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Howard Gayle 6;; Author: Howard Gayle
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: i18n 7;; Keywords: i18n
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/international/ogonek.el b/lisp/international/ogonek.el
index 543f2e33888..fd68137f2b3 100644
--- a/lisp/international/ogonek.el
+++ b/lisp/international/ogonek.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Włodek Bzyl 5;; Author: Włodek Bzyl
6;; Ryszard Kubiak 6;; Ryszard Kubiak
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: i18n 7;; Keywords: i18n
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 3266b93b446..2683118aafe 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -6,9 +6,9 @@
6;; National Institute of Advanced Industrial Science and Technology (AIST) 6;; National Institute of Advanced Industrial Science and Technology (AIST)
7;; Registration Number H14PRO021 7;; Registration Number H14PRO021
8 8
9;; Author: Kenichi HANDA <handa@etl.go.jp> 9;; Author: Kenichi Handa <handa@gnu.org>
10;; Naoto TAKAHASHI <ntakahas@etl.go.jp> 10;; Naoto Takahashi <ntakahas@etl.go.jp>
11;; Maintainer: Kenichi HANDA <handa@etl.go.jp> 11;; Maintainer: Kenichi Handa <handa@gnu.org>
12;; Keywords: mule, multilingual, input method, i18n 12;; Keywords: mule, multilingual, input method, i18n
13 13
14;; This file is part of GNU Emacs. 14;; This file is part of GNU Emacs.
diff --git a/lisp/international/utf7.el b/lisp/international/utf7.el
index 0e67a62aa6b..f22fb8d38bc 100644
--- a/lisp/international/utf7.el
+++ b/lisp/international/utf7.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jon K Hellan <hellan@acm.org> 5;; Author: Jon K Hellan <hellan@acm.org>
6;; Maintainer: bugs@gnus.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index bb29c2914be..5aaeae438a3 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-1997, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-1997, 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu> 5;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: matching 6;; Keywords: matching
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index ee392b349e8..dc1836865b5 100644
--- a/lisp/isearchb.el
+++ b/lisp/isearchb.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 16 Apr 2004 6;; Created: 16 Apr 2004
8;; Version: 1.5 7;; Version: 1.5
9;; Keywords: lisp 8;; Keywords: lisp
diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el
index 3aa84f45b0d..b6ff9f12f1e 100644
--- a/lisp/jka-cmpr-hook.el
+++ b/lisp/jka-cmpr-hook.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Jay K. Adams <jka@ece.cmu.edu> 6;; Author: Jay K. Adams <jka@ece.cmu.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: data 7;; Keywords: data
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el
index 63fb449b48b..8c9dd8abb63 100644
--- a/lisp/jka-compr.el
+++ b/lisp/jka-compr.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Jay K. Adams <jka@ece.cmu.edu> 6;; Author: Jay K. Adams <jka@ece.cmu.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: data 7;; Keywords: data
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/kermit.el b/lisp/kermit.el
index f6ed1fbda1c..77c2cbd4d60 100644
--- a/lisp/kermit.el
+++ b/lisp/kermit.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jeff Norden <jeff@colgate.csnet> 5;; Author: Jeff Norden <jeff@colgate.csnet>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 15 Feb 1988 6;; Created: 15 Feb 1988
8;; Keywords: comm 7;; Keywords: comm
9 8
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index 75d4249423c..564ac5f5921 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -9,7 +9,7 @@
9;; National Institute of Advanced Industrial Science and Technology (AIST) 9;; National Institute of Advanced Industrial Science and Technology (AIST)
10;; Registration Number H13PRO009 10;; Registration Number H13PRO009
11 11
12;; Author: Kenichi Handa <handa@etl.go.jp> 12;; Author: Kenichi Handa <handa@gnu.org>
13;; Keywords: multilingual, Cyrillic, i18n 13;; Keywords: multilingual, Cyrillic, i18n
14 14
15;; This file is part of GNU Emacs. 15;; This file is part of GNU Emacs.
diff --git a/lisp/language/european.el b/lisp/language/european.el
index 8c38175972f..fedbca4eb69 100644
--- a/lisp/language/european.el
+++ b/lisp/language/european.el
@@ -525,7 +525,7 @@ method and applying Turkish case rules for the characters i, I, ı, İ.")))
525 (set-case-syntax ?ı "w" table))) 525 (set-case-syntax ?ı "w" table)))
526 526
527;; Polish ISO 8859-2 environment. 527;; Polish ISO 8859-2 environment.
528;; Maintainer: Wlodek Bzyl <matwb@univ.gda.pl> 528;; Maintainer: Włodek Bzyl <matwb@univ.gda.pl>
529;; Keywords: multilingual, Polish 529;; Keywords: multilingual, Polish
530 530
531(set-language-info-alist 531(set-language-info-alist
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index d63e9b465fa..894a01502c6 100644
--- a/lisp/language/indian.el
+++ b/lisp/language/indian.el
@@ -5,7 +5,7 @@
5;; National Institute of Advanced Industrial Science and Technology (AIST) 5;; National Institute of Advanced Industrial Science and Technology (AIST)
6;; Registration Number H14PRO021 6;; Registration Number H14PRO021
7 7
8;; Maintainer: Kenichi Handa <handa@m17n.org> 8;; Maintainer: Kenichi Handa <handa@gnu.org>
9;; KAWABATA, Taichi <kawabata@m17n.org> 9;; KAWABATA, Taichi <kawabata@m17n.org>
10;; Keywords: multilingual, i18n, Indian 10;; Keywords: multilingual, i18n, Indian
11 11
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el
index e67dd093430..94c6ab98979 100644
--- a/lisp/language/thai-word.el
+++ b/lisp/language/thai-word.el
@@ -4,7 +4,7 @@
4;; National Institute of Advanced Industrial Science and Technology (AIST) 4;; National Institute of Advanced Industrial Science and Technology (AIST)
5;; Registration Number H14PRO021 5;; Registration Number H14PRO021
6 6
7;; Author: Kenichi HANDA <handa@etl.go.jp> 7;; Author: Kenichi Handa <handa@gnu.org>
8 8
9;; Keywords: thai, word break, emacs 9;; Keywords: thai, word break, emacs
10 10
diff --git a/lisp/leim/quail/py-punct.el b/lisp/leim/quail/py-punct.el
index eed70a82eec..49ea66effbb 100644
--- a/lisp/leim/quail/py-punct.el
+++ b/lisp/leim/quail/py-punct.el
@@ -6,7 +6,7 @@
6;; National Institute of Advanced Industrial Science and Technology (AIST) 6;; National Institute of Advanced Industrial Science and Technology (AIST)
7;; Registration Number H14PRO021 7;; Registration Number H14PRO021
8 8
9;; Author: Ken'ichi HANDA <handa@etl.go.jp> 9;; Author: Ken'ichi Handa <handa@gnu.org>
10 10
11;; Keywords: multilingual, input method, Chinese 11;; Keywords: multilingual, input method, Chinese
12 12
diff --git a/lisp/leim/quail/pypunct-b5.el b/lisp/leim/quail/pypunct-b5.el
index 45597a4ef6f..9f4e73c9f05 100644
--- a/lisp/leim/quail/pypunct-b5.el
+++ b/lisp/leim/quail/pypunct-b5.el
@@ -5,7 +5,7 @@
5;; National Institute of Advanced Industrial Science and Technology (AIST) 5;; National Institute of Advanced Industrial Science and Technology (AIST)
6;; Registration Number H14PRO021 6;; Registration Number H14PRO021
7 7
8;; Author: Ken'ichi HANDA <handa@etl.go.jp> 8;; Author: Ken'ichi Handa <handa@gnu.org>
9 9
10;; Keywords: multilingual, input method, Chinese 10;; Keywords: multilingual, input method, Chinese
11 11
diff --git a/lisp/linum.el b/lisp/linum.el
index 0b4b0083ed6..6fe30571c60 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2008-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2008-2019 Free Software Foundation, Inc.
4 4
5;; Author: Markus Triska <markus.triska@gmx.at> 5;; Author: Markus Triska <markus.triska@gmx.at>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience 6;; Keywords: convenience
8;; Version: 0.9x 7;; Version: 0.9x
9 8
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 4e5d8e0f38d..69f2c0bdcc3 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995, 1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eric S. Raymond <esr@snark.thyrsus.com> 5;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 67e8aa7d40a..c43d1476229 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1992, 1994, 2001-2019 Free Software 3;; Copyright (C) 1985-1986, 1992, 1994, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/lpr.el b/lisp/lpr.el
index 436f9e3e021..17a37f15544 100644
--- a/lisp/lpr.el
+++ b/lisp/lpr.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2019 Free Software 3;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: unix 6;; Keywords: unix
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index 1f2c46834ec..7ab97ebffee 100644
--- a/lisp/ls-lisp.el
+++ b/lisp/ls-lisp.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Sebastian Kremer <sk@thp.uni-koeln.de> 5;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
6;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk> 6;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: unix, dired 7;; Keywords: unix, dired
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/macros.el b/lisp/macros.el
index 4b38506d8a5..b9020a299a5 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2019 Free Software 3;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: abbrev 6;; Keywords: abbrev
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/mail/blessmail.el b/lisp/mail/blessmail.el
index 62094bfe2d7..2a2ff3dec14 100644
--- a/lisp/mail/blessmail.el
+++ b/lisp/mail/blessmail.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el
index c637e242c42..2cd6d56b429 100644
--- a/lisp/mail/emacsbug.el
+++ b/lisp/mail/emacsbug.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: K. Shane Hartman 6;; Author: K. Shane Hartman
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: maint mail 7;; Keywords: maint mail
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el
index a90d9c46578..180e32bee4c 100644
--- a/lisp/mail/feedmail.el
+++ b/lisp/mail/feedmail.el
@@ -1657,7 +1657,7 @@ local gurus."
1657(declare-function smtp-via-smtp "ext:smtp" (sender recipients smtp-text-buffer)) 1657(declare-function smtp-via-smtp "ext:smtp" (sender recipients smtp-text-buffer))
1658(defvar smtp-server) 1658(defvar smtp-server)
1659 1659
1660;; FLIM's smtp.el pointed out to me by Kenichi Handa <handa@etl.go.jp> 1660;; FLIM's smtp.el pointed out to me by Kenichi Handa <handa@gnu.org>
1661(defun feedmail-buffer-to-smtp (prepped errors-to addr-listoid) 1661(defun feedmail-buffer-to-smtp (prepped errors-to addr-listoid)
1662 "Function which actually calls smtp-via-smtp to send buffer as e-mail." 1662 "Function which actually calls smtp-via-smtp to send buffer as e-mail."
1663 (feedmail-say-debug ">in-> feedmail-buffer-to-smtp %s" addr-listoid) 1663 (feedmail-say-debug ">in-> feedmail-buffer-to-smtp %s" addr-listoid)
diff --git a/lisp/mail/hashcash.el b/lisp/mail/hashcash.el
index 60689529974..ec17d669f3c 100644
--- a/lisp/mail/hashcash.el
+++ b/lisp/mail/hashcash.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003-2005, 2007-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2005, 2007-2019 Free Software Foundation, Inc.
4 4
5;; Written by: Paul Foley <mycroft@actrix.gen.nz> (1997-2002) 5;; Written by: Paul Foley <mycroft@actrix.gen.nz> (1997-2002)
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail, hashcash 6;; Keywords: mail, hashcash
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index c1e90c3dcb8..e6108066656 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Joe Wells <jbw@cs.bu.edu> 6;; Author: Joe Wells <jbw@cs.bu.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: mail 7;; Keywords: mail
9;; Package: mail-utils 8;; Package: mail-utils
10 9
diff --git a/lisp/mail/mail-utils.el b/lisp/mail/mail-utils.el
index cbcbdfaeb2e..f561c088a2f 100644
--- a/lisp/mail/mail-utils.el
+++ b/lisp/mail/mail-utils.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: mail, news 5;; Keywords: mail, news
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index d59df88c688..17f4f0cba0c 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -4,7 +4,6 @@
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Author: Jamie Zawinski <jwz@lucid.com; now jwz@jwz.org> 6;; Author: Jamie Zawinski <jwz@lucid.com; now jwz@jwz.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Created: 19 Oct 90 7;; Created: 19 Oct 90
9;; Keywords: mail 8;; Keywords: mail
10 9
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el
index 42896c18ebe..68e44f820c7 100644
--- a/lisp/mail/mailalias.el
+++ b/lisp/mail/mailalias.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1987, 1995-1997, 2001-2019 Free Software 3;; Copyright (C) 1985, 1987, 1995-1997, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el
index 10db110c70f..3172c9760f7 100644
--- a/lisp/mail/reporter.el
+++ b/lisp/mail/reporter.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1998, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1998, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: 1993-1998 Barry A. Warsaw 5;; Author: 1993-1998 Barry A. Warsaw
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 19-Apr-1993 6;; Created: 19-Apr-1993
8;; Keywords: maint mail tools 7;; Keywords: maint mail tools
9 8
diff --git a/lisp/mail/rfc822.el b/lisp/mail/rfc822.el
index a53a77e47ee..4cf624cedd5 100644
--- a/lisp/mail/rfc822.el
+++ b/lisp/mail/rfc822.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Richard Mlynarik <mly@eddie.mit.edu> 6;; Author: Richard Mlynarik <mly@eddie.mit.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: mail 7;; Keywords: mail
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 91291b8d330..d0ebf7df479 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1988, 1993-1998, 2000-2019 Free Software 3;; Copyright (C) 1985-1988, 1993-1998, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el
index 01d552469fa..a9ce1e6feee 100644
--- a/lisp/mail/rmailedit.el
+++ b/lisp/mail/rmailedit.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: mail 5;; Keywords: mail
7;; Package: rmail 6;; Package: rmail
8 7
diff --git a/lisp/mail/rmailkwd.el b/lisp/mail/rmailkwd.el
index 9427796a065..ee71ab4f6e4 100644
--- a/lisp/mail/rmailkwd.el
+++ b/lisp/mail/rmailkwd.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1988, 1994, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985, 1988, 1994, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8;; Package: rmail 7;; Package: rmail
9 8
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index af528135ccb..d32147f4af2 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Alexander Pohoyda 5;; Author: Alexander Pohoyda
6;; Alex Schroeder 6;; Alex Schroeder
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: mail 7;; Keywords: mail
9;; Package: rmail 8;; Package: rmail
10 9
diff --git a/lisp/mail/rmailmsc.el b/lisp/mail/rmailmsc.el
index ba0c2ae77c7..4c429358995 100644
--- a/lisp/mail/rmailmsc.el
+++ b/lisp/mail/rmailmsc.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: mail 5;; Keywords: mail
7;; Package: rmail 6;; Package: rmail
8 7
diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el
index 12d37615d6b..d95670849de 100644
--- a/lisp/mail/rmailout.el
+++ b/lisp/mail/rmailout.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1987, 1993-1994, 2001-2019 Free Software 3;; Copyright (C) 1985, 1987, 1993-1994, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8;; Package: rmail 7;; Package: rmail
9 8
diff --git a/lisp/mail/rmailsort.el b/lisp/mail/rmailsort.el
index 4a701038ac8..18185ec6473 100644
--- a/lisp/mail/rmailsort.el
+++ b/lisp/mail/rmailsort.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp> 6;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: mail 7;; Keywords: mail
9;; Package: rmail 8;; Package: rmail
10 9
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index 79a322c1d91..80cfbfd721a 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1993-1996, 2000-2019 Free Software Foundation, 3;; Copyright (C) 1985, 1993-1996, 2000-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8;; Package: rmail 7;; Package: rmail
9 8
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 208ebb68017..0db05570833 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2019 Free Software 3;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index ad69dca8c43..317324613b9 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 1997, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1997, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org> 5;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: February 1993 6;; Created: February 1993
8;; Keywords: mail, news 7;; Keywords: mail, news
9 8
diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el
index bbf3c83c55f..499f16e9d23 100644
--- a/lisp/mail/undigest.el
+++ b/lisp/mail/undigest.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1994, 1996, 2001-2019 Free Software 3;; Copyright (C) 1985-1986, 1994, 1996, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el
index 4d9ad67262a..c409210a0c3 100644
--- a/lisp/mail/unrmail.el
+++ b/lisp/mail/unrmail.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: mail 5;; Keywords: mail
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/makesum.el b/lisp/makesum.el
index 10ad78ea174..847e304e975 100644
--- a/lisp/makesum.el
+++ b/lisp/makesum.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: help 5;; Keywords: help
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/man.el b/lisp/man.el
index d52ca2156d2..feb0e09ab18 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Barry A. Warsaw <bwarsaw@cen.com> 6;; Author: Barry A. Warsaw <bwarsaw@cen.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: help 7;; Keywords: help
9;; Adapted-By: ESR, pot 8;; Adapted-By: ESR, pot
10 9
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 4ff60ed9910..d12cdd731ab 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1995, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1995, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Richard M. Stallman 5;; Author: Richard M. Stallman
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal, mouse 6;; Keywords: internal, mouse
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/misc.el b/lisp/misc.el
index 4cf6cadf650..00807627007 100644
--- a/lisp/misc.el
+++ b/lisp/misc.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1989, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1989, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: convenience 5;; Keywords: convenience
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 8428c1e0139..af53c05f573 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993-1995, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1995, 1999-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: hardware, mouse 5;; Keywords: hardware, mouse
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/msb.el b/lisp/msb.el
index 7a1a338fcc1..b626624fbc9 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1995, 1997-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1995, 1997-2019 Free Software Foundation, Inc.
4 4
5;; Author: Lars Lindberg <lars.lindberg@home.se> 5;; Author: Lars Lindberg <lars.lindberg@home.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 8 Oct 1993 6;; Created: 8 Oct 1993
8;; Lindberg's last update version: 3.34 7;; Lindberg's last update version: 3.34
9;; Keywords: mouse buffer menu 8;; Keywords: mouse buffer menu
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index 23f491db0fc..86788fc69a3 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,7 +1,7 @@
1;;; mwheel.el --- Wheel mouse support 1;;; mwheel.el --- Wheel mouse support
2 2
3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc.
4;; Maintainer: William M. Perry <wmperry@gnu.org> 4;; Maintainer: Bill Perry <wmperry@gnu.org>
5;; Keywords: mouse 5;; Keywords: mouse
6;; Package: emacs 6;; Package: emacs
7 7
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index b0a1e1799f5..81b654c9a9a 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Andy Norman (ange@hplb.hpl.hp.com) 6;; Author: Andy Norman (ange@hplb.hpl.hp.com)
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: comm 7;; Keywords: comm
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index aa31e25fa91..0c63cbd5a45 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995-2019 Free Software Foundation, Inc.
4 4
5;; Author: Denis Howe <dbh@doc.ic.ac.uk> 5;; Author: Denis Howe <dbh@doc.ic.ac.uk>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 03 Apr 1995 6;; Created: 03 Apr 1995
8;; Keywords: hypertext, hypermedia, mouse 7;; Keywords: hypertext, hypermedia, mouse
9 8
diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el
index c25d7873918..d7fd0587475 100644
--- a/lisp/net/goto-addr.el
+++ b/lisp/net/goto-addr.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eric Ding <ericding@alum.mit.edu> 5;; Author: Eric Ding <ericding@alum.mit.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 15 Aug 1995 6;; Created: 15 Aug 1995
8;; Keywords: mh-e, www, mouse, mail 7;; Keywords: mh-e, www, mouse, mail
9 8
diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el
index 75fc7d62211..2df473cf71a 100644
--- a/lisp/net/ldap.el
+++ b/lisp/net/ldap.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998-2019 Free Software Foundation, Inc.
4 4
5;; Author: Oscar Figueiredo <oscar@cpe.fr> 5;; Author: Oscar Figueiredo <oscar@cpe.fr>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: April 1998 6;; Created: April 1998
8;; Keywords: comm 7;; Keywords: comm
9 8
diff --git a/lisp/net/pop3.el b/lisp/net/pop3.el
index 599e2305f77..19114508254 100644
--- a/lisp/net/pop3.el
+++ b/lisp/net/pop3.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1996-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996-2019 Free Software Foundation, Inc.
4 4
5;; Author: Richard L. Pieri <ratinox@peorth.gweep.net> 5;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: mail 6;; Keywords: mail
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/net/socks.el b/lisp/net/socks.el
index 6356707a1db..c9f74190957 100644
--- a/lisp/net/socks.el
+++ b/lisp/net/socks.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 1996-2000, 2002, 2007-2019 Free Software Foundation, 3;; Copyright (C) 1996-2000, 2002, 2007-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Author: William M. Perry <wmperry@gnu.org> 6;; Author: Bill Perry <wmperry@gnu.org>
7;; Dave Love <fx@gnu.org> 7;; Dave Love <fx@gnu.org>
8;; Keywords: comm, firewalls 8;; Keywords: comm, firewalls
9 9
diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el
index cf3634f7d92..465927dfdde 100644
--- a/lisp/net/telnet.el
+++ b/lisp/net/telnet.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: William F. Schelter 6;; Author: William F. Schelter
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: unix, comm 7;; Keywords: unix, comm
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index ab2be080a33..ac706b949ba 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: code extracted from Emacs-20's simple.el 5;; Author: code extracted from Emacs-20's simple.el
6;; Maintainer: Stefan Monnier <monnier@iro.umontreal.ca> 6;; Maintainer: Stefan Monnier <monnier@gnu.org>
7;; Keywords: comment uncomment 7;; Keywords: comment uncomment
8;; Package: emacs 8;; Package: emacs
9 9
diff --git a/lisp/novice.el b/lisp/novice.el
index 3da4e25810a..1da4b71dc95 100644
--- a/lisp/novice.el
+++ b/lisp/novice.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1994, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985-1987, 1994, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal, help 6;; Keywords: internal, help
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/obarray.el b/lisp/obarray.el
index c83d5d47241..fbab506cce3 100644
--- a/lisp/obarray.el
+++ b/lisp/obarray.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2015-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: obarray functions 5;; Keywords: obarray functions
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/obsolete/abbrevlist.el b/lisp/obsolete/abbrevlist.el
index e2bf14f0dc1..dfd7b2b492f 100644
--- a/lisp/obsolete/abbrevlist.el
+++ b/lisp/obsolete/abbrevlist.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1986, 1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1986, 1992, 2001-2019 Free Software Foundation, Inc.
4;; Suggested by a previous version by Gildea. 4;; Suggested by a previous version by Gildea.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: abbrev 6;; Keywords: abbrev
8;; Package: emacs 7;; Package: emacs
9;; Obsolete-since: 24.1 8;; Obsolete-since: 24.1
diff --git a/lisp/obsolete/bruce.el b/lisp/obsolete/bruce.el
index fba54c1ae04..8044a0ef931 100644
--- a/lisp/obsolete/bruce.el
+++ b/lisp/obsolete/bruce.el
@@ -4,7 +4,6 @@
4;; Copyright (C) 1988, 1993, 1997, 2001-2019 Free Software Foundation, 4;; Copyright (C) 1988, 1993, 1997, 2001-2019 Free Software Foundation,
5;; Inc. 5;; Inc.
6 6
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: games 7;; Keywords: games
9;; Created: Jan 1997 8;; Created: Jan 1997
10;; Obsolete-since: 24.3 9;; Obsolete-since: 24.3
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index 5180d4527be..10af6ab95fd 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994-1998, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1998, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Simon Marshall <simon@gnu.org> 5;; Author: Simon Marshall <simon@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: faces files 6;; Keywords: faces files
8;; Version: 3.14 7;; Version: 3.14
9;; Obsolete-since: 22.1 8;; Obsolete-since: 22.1
diff --git a/lisp/obsolete/gs.el b/lisp/obsolete/gs.el
index cfdc9dc67ce..24c9b67abd2 100644
--- a/lisp/obsolete/gs.el
+++ b/lisp/obsolete/gs.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Obsolete-since: 26.1 6;; Obsolete-since: 26.1
8 7
diff --git a/lisp/obsolete/gulp.el b/lisp/obsolete/gulp.el
index bdb3406a3d9..373ee35d8e0 100644
--- a/lisp/obsolete/gulp.el
+++ b/lisp/obsolete/gulp.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Sam Shteingold <shteingd@math.ucla.edu> 5;; Author: Sam Shteingold <shteingd@math.ucla.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: maint 6;; Keywords: maint
8;; Obsolete-since: 25.1 7;; Obsolete-since: 25.1
9 8
diff --git a/lisp/obsolete/info-edit.el b/lisp/obsolete/info-edit.el
index b64e84003fc..e520faf77bb 100644
--- a/lisp/obsolete/info-edit.el
+++ b/lisp/obsolete/info-edit.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1986, 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1986, 1992-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: help 5;; Keywords: help
7;; Obsolete-since: 24.4 6;; Obsolete-since: 24.4
8 7
diff --git a/lisp/obsolete/lazy-lock.el b/lisp/obsolete/lazy-lock.el
index 44f8528b201..51679280023 100644
--- a/lisp/obsolete/lazy-lock.el
+++ b/lisp/obsolete/lazy-lock.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994-1998, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1998, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Simon Marshall <simon@gnu.org> 5;; Author: Simon Marshall <simon@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: faces files 6;; Keywords: faces files
8;; Version: 2.11 7;; Version: 2.11
9;; Obsolete-since: 22.1 8;; Obsolete-since: 22.1
diff --git a/lisp/obsolete/ledit.el b/lisp/obsolete/ledit.el
index 6383a4266d1..91efa29320f 100644
--- a/lisp/obsolete/ledit.el
+++ b/lisp/obsolete/ledit.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: languages 5;; Keywords: languages
7;; Obsolete-since: 24.3 6;; Obsolete-since: 24.3
8 7
diff --git a/lisp/obsolete/levents.el b/lisp/obsolete/levents.el
index 714b3fbb761..f2b081d672d 100644
--- a/lisp/obsolete/levents.el
+++ b/lisp/obsolete/levents.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: emulations 5;; Keywords: emulations
7;; Obsolete-since: 23.2 6;; Obsolete-since: 23.2
8 7
diff --git a/lisp/obsolete/lucid.el b/lisp/obsolete/lucid.el
index d1b702ed556..9d0c5daf5ef 100644
--- a/lisp/obsolete/lucid.el
+++ b/lisp/obsolete/lucid.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993, 1995, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1995, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: emulations 5;; Keywords: emulations
7;; Obsolete-since: 23.2 6;; Obsolete-since: 23.2
8 7
diff --git a/lisp/obsolete/mailpost.el b/lisp/obsolete/mailpost.el
index 2f74faf1d6c..33cc43ccbe2 100644
--- a/lisp/obsolete/mailpost.el
+++ b/lisp/obsolete/mailpost.el
@@ -6,7 +6,6 @@
6;; This file is part of GNU Emacs. 6;; This file is part of GNU Emacs.
7 7
8;; Author: Gary Delp <delp@huey.Udel.Edu> 8;; Author: Gary Delp <delp@huey.Udel.Edu>
9;; Maintainer: emacs-devel@gnu.org
10;; Created: 13 Jan 1986 9;; Created: 13 Jan 1986
11;; Keywords: mail 10;; Keywords: mail
12;; Obsolete-since: 24.3 11;; Obsolete-since: 24.3
diff --git a/lisp/obsolete/meese.el b/lisp/obsolete/meese.el
index 81739dfa6cb..190db94f4b9 100644
--- a/lisp/obsolete/meese.el
+++ b/lisp/obsolete/meese.el
@@ -5,7 +5,6 @@
5 5
6;; This file is part of GNU Emacs. 6;; This file is part of GNU Emacs.
7 7
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: games 8;; Keywords: games
10;; Obsolete-since: 24.4 9;; Obsolete-since: 24.4
11 10
diff --git a/lisp/obsolete/pc-mode.el b/lisp/obsolete/pc-mode.el
index 6d1a456d61a..4908b51259c 100644
--- a/lisp/obsolete/pc-mode.el
+++ b/lisp/obsolete/pc-mode.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1995, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: emulations 5;; Keywords: emulations
7;; Obsolete-since: 24.1 6;; Obsolete-since: 24.1
8 7
diff --git a/lisp/obsolete/rcompile.el b/lisp/obsolete/rcompile.el
index dfa80097b35..53537a09066 100644
--- a/lisp/obsolete/rcompile.el
+++ b/lisp/obsolete/rcompile.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Alon Albert <alon@milcse.rtsg.mot.com> 5;; Author: Alon Albert <alon@milcse.rtsg.mot.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 1993 Oct 6 6;; Created: 1993 Oct 6
8;; Keywords: tools, processes 7;; Keywords: tools, processes
9;; Obsolete-since: 24.4 8;; Obsolete-since: 24.4
diff --git a/lisp/obsolete/sregex.el b/lisp/obsolete/sregex.el
index 884cd3e4e45..ba36f2dcdad 100644
--- a/lisp/obsolete/sregex.el
+++ b/lisp/obsolete/sregex.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997-1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997-1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Bob Glickstein <bobg+sregex@zanshin.com> 5;; Author: Bob Glickstein <bobg+sregex@zanshin.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: extensions 6;; Keywords: extensions
8;; Obsolete-since: 24.1 7;; Obsolete-since: 24.1
9 8
diff --git a/lisp/obsolete/sup-mouse.el b/lisp/obsolete/sup-mouse.el
index 6bd42789253..752ebf59d81 100644
--- a/lisp/obsolete/sup-mouse.el
+++ b/lisp/obsolete/sup-mouse.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1986, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Wolfgang Rupprecht 5;; Author: Wolfgang Rupprecht
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 21 Nov 1986 6;; Created: 21 Nov 1986
8;; Keywords: hardware 7;; Keywords: hardware
9;; Obsolete-since: 24.4 8;; Obsolete-since: 24.4
diff --git a/lisp/obsolete/terminal.el b/lisp/obsolete/terminal.el
index ce6f2309fd3..d0631b32f04 100644
--- a/lisp/obsolete/terminal.el
+++ b/lisp/obsolete/terminal.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Richard Mlynarik <mly@eddie.mit.edu> 6;; Author: Richard Mlynarik <mly@eddie.mit.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Obsolete-since: 24.4 7;; Obsolete-since: 24.4
9;; Keywords: comm, terminals 8;; Keywords: comm, terminals
10 9
diff --git a/lisp/obsolete/yow.el b/lisp/obsolete/yow.el
index 5cbb2ef21e3..eddb3f90296 100644
--- a/lisp/obsolete/yow.el
+++ b/lisp/obsolete/yow.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993-1995, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1995, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Author: Richard Mlynarik 5;; Author: Richard Mlynarik
7;; Keywords: games 6;; Keywords: games
8;; Obsolete-since: 24.4 7;; Obsolete-since: 24.4
diff --git a/lisp/org/org-id.el b/lisp/org/org-id.el
index 6a9d729c0a4..44cc7b2f14d 100644
--- a/lisp/org/org-id.el
+++ b/lisp/org/org-id.el
@@ -83,8 +83,7 @@
83 83
84(defcustom org-id-link-to-org-use-id nil 84(defcustom org-id-link-to-org-use-id nil
85 "Non-nil means storing a link to an Org file will use entry IDs. 85 "Non-nil means storing a link to an Org file will use entry IDs.
86\\<org-mode-map>\ 86\\<org-mode-map>
87
88The variable can have the following values: 87The variable can have the following values:
89 88
90t Create an ID if needed to make a link to the current entry. 89t Create an ID if needed to make a link to the current entry.
diff --git a/lisp/org/org.el b/lisp/org/org.el
index ce6dd24a83b..119d0a2566a 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -863,8 +863,7 @@ depends on, if any."
863 863
864(defcustom org-support-shift-select nil 864(defcustom org-support-shift-select nil
865 "Non-nil means make shift-cursor commands select text when possible. 865 "Non-nil means make shift-cursor commands select text when possible.
866\\<org-mode-map>\ 866\\<org-mode-map>
867
868In Emacs 23, when `shift-select-mode' is on, shifted cursor keys 867In Emacs 23, when `shift-select-mode' is on, shifted cursor keys
869start selecting a region, or enlarge regions started in this way. 868start selecting a region, or enlarge regions started in this way.
870In Org mode, in special contexts, these same keys are used for 869In Org mode, in special contexts, these same keys are used for
@@ -2259,8 +2258,7 @@ See `org-file-apps'.")
2259 ("\\.x?html?\\'" . default) 2258 ("\\.x?html?\\'" . default)
2260 ("\\.pdf\\'" . default)) 2259 ("\\.pdf\\'" . default))
2261 "External applications for opening `file:path' items in a document. 2260 "External applications for opening `file:path' items in a document.
2262\\<org-mode-map>\ 2261\\<org-mode-map>
2263
2264Org mode uses system defaults for different file types, but 2262Org mode uses system defaults for different file types, but
2265you can use this variable to set the application for a given file 2263you can use this variable to set the application for a given file
2266extension. The entries in this list are cons cells where the car identifies 2264extension. The entries in this list are cons cells where the car identifies
diff --git a/lisp/org/ox-publish.el b/lisp/org/ox-publish.el
index 74312bc20f8..9126647e7c3 100644
--- a/lisp/org/ox-publish.el
+++ b/lisp/org/ox-publish.el
@@ -2,7 +2,7 @@
2;; Copyright (C) 2006-2019 Free Software Foundation, Inc. 2;; Copyright (C) 2006-2019 Free Software Foundation, Inc.
3 3
4;; Author: David O'Toole <dto@gnu.org> 4;; Author: David O'Toole <dto@gnu.org>
5;; Maintainer: Carsten Dominik <carsten DOT dominik AT gmail DOT com> 5;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
6;; Keywords: hypermedia, outlines, wp 6;; Keywords: hypermedia, outlines, wp
7 7
8;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/outline.el b/lisp/outline.el
index 74df77b8be7..7783d37e0a6 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1986, 1993-1995, 1997, 2000-2019 Free Software 3;; Copyright (C) 1986, 1993-1995, 1997, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: outlines 6;; Keywords: outlines
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/paren.el b/lisp/paren.el
index 13908d46eef..d00e7d9a812 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: rms@gnu.org 5;; Author: rms@gnu.org
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: languages, faces 6;; Keywords: languages, faces
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el
index e461b37e362..fb310faf4c6 100644
--- a/lisp/play/cookie1.el
+++ b/lisp/play/cookie1.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eric S. Raymond <esr@snark.thyrsus.com> 5;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: games, extensions 6;; Keywords: games, extensions
8;; Created: Mon Mar 22 17:06:26 1993 7;; Created: Mon Mar 22 17:06:26 1993
9 8
diff --git a/lisp/play/dissociate.el b/lisp/play/dissociate.el
index a5880c08847..fc76f2b724d 100644
--- a/lisp/play/dissociate.el
+++ b/lisp/play/dissociate.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: games 5;; Keywords: games
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index b1ab6703a48..e9c78f5e5c4 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2019 Free Software 3;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: games 6;; Keywords: games
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el
index 6d5553b3202..562e5c0ad23 100644
--- a/lisp/play/gomoku.el
+++ b/lisp/play/gomoku.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr> 6;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr>
7;; Maintainer: emacs-devel@gnu.org
8;; Adapted-By: ESR, Daniel Pfeiffer <occitan@esperanto.org> 7;; Adapted-By: ESR, Daniel Pfeiffer <occitan@esperanto.org>
9;; Keywords: games 8;; Keywords: games
10 9
diff --git a/lisp/play/hanoi.el b/lisp/play/hanoi.el
index d762290f0da..1f2e2c0098a 100644
--- a/lisp/play/hanoi.el
+++ b/lisp/play/hanoi.el
@@ -1,7 +1,6 @@
1;;; hanoi.el --- towers of hanoi in Emacs 1;;; hanoi.el --- towers of hanoi in Emacs
2 2
3;; Author: Damon Anton Permezel 3;; Author: Damon Anton Permezel
4;; Maintainer: emacs-devel@gnu.org
5;; Keywords: games 4;; Keywords: games
6 5
7; Author (a) 1985, Damon Anton Permezel 6; Author (a) 1985, Damon Anton Permezel
diff --git a/lisp/play/life.el b/lisp/play/life.el
index 6cce1e5643d..7d9f1475f38 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Kyle Jones <kyleuunet.uu.net> 5;; Author: Kyle Jones <kyleuunet.uu.net>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: games 6;; Keywords: games
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/play/spook.el b/lisp/play/spook.el
index d884c0a2559..c1394a31d7a 100644
--- a/lisp/play/spook.el
+++ b/lisp/play/spook.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1988, 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: games 5;; Keywords: games
7;; Created: May 1987 6;; Created: May 1987
8 7
diff --git a/lisp/play/studly.el b/lisp/play/studly.el
index ff1bf03e118..6d54f6d08a8 100644
--- a/lisp/play/studly.el
+++ b/lisp/play/studly.el
@@ -5,7 +5,6 @@
5 5
6;; This file is part of GNU Emacs. 6;; This file is part of GNU Emacs.
7 7
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: games 8;; Keywords: games
10 9
11;;; Commentary: 10;;; Commentary:
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index e01f1e8ecbe..50f7b4c0093 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -5,7 +5,7 @@
5;; Author: Rolf Ebert <ebert@inf.enst.fr> 5;; Author: Rolf Ebert <ebert@inf.enst.fr>
6;; Markus Heritsch <Markus.Heritsch@studbox.uni-stuttgart.de> 6;; Markus Heritsch <Markus.Heritsch@studbox.uni-stuttgart.de>
7;; Emmanuel Briot <briot@gnat.com> 7;; Emmanuel Briot <briot@gnat.com>
8;; Maintainer: Stephen Leake <stephen_leake@member.fsf.org> 8;; Maintainer: Stephen Leake <stephen_leake@stephe-leake.org>
9;; Keywords: languages ada 9;; Keywords: languages ada
10 10
11;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/asm-mode.el b/lisp/progmodes/asm-mode.el
index c56d16e305e..491b780bd02 100644
--- a/lisp/progmodes/asm-mode.el
+++ b/lisp/progmodes/asm-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1991, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1991, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eric S. Raymond <esr@snark.thyrsus.com> 5;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: tools, languages 6;; Keywords: tools, languages
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index 009f58ea586..74548f643a7 100644
--- a/lisp/progmodes/cc-align.el
+++ b/lisp/progmodes/cc-align.el
@@ -90,26 +90,26 @@ Works with: topmost-intro-cont."
90 90
91(defun c-lineup-gnu-DEFUN-intro-cont (langelem) 91(defun c-lineup-gnu-DEFUN-intro-cont (langelem)
92 "Line up the continuation lines of a DEFUN macro in the Emacs C source. 92 "Line up the continuation lines of a DEFUN macro in the Emacs C source.
93These lines are indented as though they were `knr-argdecl-intro' lines. 93These lines are indented `c-basic-offset' columns, usually from column 0.
94Return nil when we're not in such a construct. 94Return nil when we're not in such a construct.
95 95
96This function is for historical compatibility with how previous CC Modes (5.28 96This function was formally for use in DEFUNs, which used to have knr
97and earlier) indented such lines. 97argument lists. Now (2019-05) it just indents the argument list of the
98DEFUN's function, which would otherwise go to column 0.
98 99
99Here is an example: 100Here is an example:
100 101
101DEFUN (\"forward-char\", Fforward_char, Sforward_char, 0, 1, \"p\", 102DEFUN (\"forward-char\", Fforward_char, Sforward_char, 0, 1, \"p\",
102 doc: /* Move point right N characters (left if N is negative). 103 doc: /* Move point right N characters (left if N is negative).
103On reaching end of buffer, stop and signal error. */) 104On reaching end of buffer, stop and signal error. */)
104 (n) <- c-lineup-gnu-DEFUN-into-cont 105 (Lisp_Object n) <- c-lineup-gnu-DEFUN-into-cont
105 Lisp_Object n; <- c-lineup-gnu-DEFUN-into-cont
106 106
107Works with: topmost-intro-cont." 107Works with: topmost-intro-cont."
108 (save-excursion 108 (save-excursion
109 (let (case-fold-search) 109 (let (case-fold-search)
110 (goto-char (c-langelem-pos langelem)) 110 (goto-char (c-langelem-pos langelem))
111 (if (looking-at "\\<DEFUN\\>") 111 (if (looking-at "\\<DEFUN\\>")
112 (c-calc-offset '(knr-argdecl-intro)))))) 112 c-basic-offset))))
113 113
114(defun c-block-in-arglist-dwim (arglist-start) 114(defun c-block-in-arglist-dwim (arglist-start)
115 ;; This function implements the DWIM to avoid far indentation of 115 ;; This function implements the DWIM to avoid far indentation of
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index 1a67a95927b..ff4ea1a0901 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Alan Mackenzie <acm@muc.de> (originally based on awk-mode.el) 6;; Author: Alan Mackenzie <acm@muc.de> (originally based on awk-mode.el)
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: AWK, cc-mode, unix, languages 7;; Keywords: AWK, cc-mode, unix, languages
9;; Package: cc-mode 8;; Package: cc-mode
10 9
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index c0f044ddfeb..c0433672f98 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -7245,78 +7245,33 @@ comment at the start of cc-engine.el for more info."
7245 (c-depropertize-raw-strings-in-region found-beg (point)))))) 7245 (c-depropertize-raw-strings-in-region found-beg (point))))))
7246 7246
7247(defun c-maybe-re-mark-raw-string () 7247(defun c-maybe-re-mark-raw-string ()
7248 ;; When this function is called, point is immediately after a ". If this " 7248 ;; When this function is called, point is immediately after a " which opens
7249 ;; is the characteristic " of of a raw string delimiter, apply the pertinent 7249 ;; a string. If this " is the characteristic " of of a raw string
7250 ;; `syntax-table' text properties to the entire raw string (when properly 7250 ;; opener, apply the pertinent `syntax-table' text properties to the
7251 ;; terminated) or just the delimiter (otherwise). 7251 ;; entire raw string (when properly terminated) or just the delimiter
7252 ;; (otherwise). In either of these cases, return t, otherwise return nil.
7252 ;; 7253 ;;
7253 ;; If the " is in any way part of a raw string, return non-nil. Otherwise
7254 ;; return nil.
7255 (let ((here (point)) 7254 (let ((here (point))
7256 in-macro macro-end id Rquote found) 7255 in-macro macro-end id Rquote found)
7257 (cond 7256 (when
7258 ((and 7257 (and
7259 (eq (char-before (1- (point))) ?R) 7258 (eq (char-before (1- (point))) ?R)
7260 (looking-at "\\([^ ()\\\n\r\t]\\{0,16\\}\\)(")) 7259 (looking-at "\\([^ ()\\\n\r\t]\\{0,16\\}\\)("))
7261 (save-excursion 7260 (save-excursion
7262 (setq in-macro (c-beginning-of-macro)) 7261 (setq in-macro (c-beginning-of-macro))
7263 (setq macro-end (when in-macro 7262 (setq macro-end (when in-macro
7264 (c-end-of-macro) 7263 (c-end-of-macro)
7265 (point) ;; (min (1+ (point)) (point-max)) 7264 (point) ;; (min (1+ (point)) (point-max))
7266 ))) 7265 )))
7267 (if (not 7266 (when
7267 (not
7268 (c-propertize-raw-string-opener 7268 (c-propertize-raw-string-opener
7269 (match-string-no-properties 1) ; id 7269 (match-string-no-properties 1) ; id
7270 (1- (point)) ; open quote 7270 (1- (point)) ; open quote
7271 (match-end 1) ; open paren 7271 (match-end 1) ; open paren
7272 macro-end)) ; bound (end of macro) or nil. 7272 macro-end)) ; bound (end of macro) or nil.
7273 (goto-char (or macro-end (point-max)))) 7273 (goto-char (or macro-end (point-max))))
7274 t) 7274 t)))
7275 ((save-excursion
7276 (and
7277 (search-backward-regexp ")\\([^ ()\\\n\r\t]\\{0,16\\}\\)\"\\="
7278 (c-point 'bol) t)
7279 (setq id (match-string-no-properties 1))
7280 (let* ((quoted-id (regexp-quote id))
7281 (quoted-id-depth (regexp-opt-depth quoted-id)))
7282 (while
7283 (and
7284 ;; Search back for an opening delimiter with identifier `id'.
7285 ;; A closing delimiter with `id' "blocks" our search.
7286 (search-backward-regexp ; This could be slow.
7287 (concat "\\(R\"" quoted-id "(\\)"
7288 "\\|"
7289 "\\()" quoted-id "\"\\)")
7290 nil t)
7291 (setq found t)
7292 (if (eq (c-in-literal) 'string)
7293 (match-beginning 1)
7294 (match-beginning (+ 2 quoted-id-depth)))))
7295 (and found
7296 (null (c-in-literal))
7297 (match-beginning 1)))
7298 (setq Rquote (point))))
7299 (save-excursion
7300 (goto-char Rquote)
7301 (setq in-macro (c-beginning-of-macro))
7302 (setq macro-end (when in-macro
7303 (c-end-of-macro)
7304 (point))))
7305 (if (or (not in-macro)
7306 (<= here macro-end))
7307 (progn
7308 (c-propertize-raw-string-opener
7309 id (1+ (point)) (match-end 1) macro-end)
7310 (goto-char here)
7311 t)
7312 (goto-char here)
7313 nil))
7314
7315 (t
7316 ;; If the " is in another part of a raw string (whether as part of the
7317 ;; identifier, or in the string itself) the `syntax-table' text
7318 ;; properties on the raw string will be current. So, we can use...
7319 (c-raw-string-pos)))))
7320 7275
7321 7276
7322;; Handling of small scale constructs like types and names. 7277;; Handling of small scale constructs like types and names.
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 1a0d9bdbb70..3930f09392a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -5,7 +5,6 @@
5 5
6;; Authors: Roland McGrath <roland@gnu.org>, 6;; Authors: Roland McGrath <roland@gnu.org>,
7;; Daniel Pfeiffer <occitan@esperanto.org> 7;; Daniel Pfeiffer <occitan@esperanto.org>
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: tools, processes 8;; Keywords: tools, processes
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index ba007d67c0d..fd3eec76090 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -5,7 +5,6 @@
5;; Author: Ilya Zakharevich 5;; Author: Ilya Zakharevich
6;; Bob Olson 6;; Bob Olson
7;; Jonathan Rockway <jon@jrock.us> 7;; Jonathan Rockway <jon@jrock.us>
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: languages, Perl 8;; Keywords: languages, Perl
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index d5803c77bb4..757f0f26072 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Odd Gripenstam <gripenstamol@decus.se> 5;; Author: Odd Gripenstam <gripenstamol@decus.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: DCL editing major-mode languages 6;; Keywords: DCL editing major-mode languages
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 3faec4959bc..0f44487d436 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 4
5;; Author: Gerd Moellmann <gerd@gnu.org> 5;; Author: Gerd Moellmann <gerd@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: C++ tags tools 6;; Keywords: C++ tags tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index cb1b17b4474..d62c1316ee3 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1986, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1986, 1999-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: lisp, languages 5;; Keywords: lisp, languages
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 910c320ab8f..54ca135f277 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -4,7 +4,6 @@
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Author: Roland McGrath <roland@gnu.org> 6;; Author: Roland McGrath <roland@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: tools 7;; Keywords: tools
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 716f40c1f3a..e09aaa3741b 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2007-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2007-2019 Free Software Foundation, Inc.
4 4
5;; Author: Nick Roberts <nickrob@gnu.org> 5;; Author: Nick Roberts <nickrob@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: unix, tools 6;; Keywords: unix, tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 79178c4346e..d094c95fcfb 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Roland McGrath <roland@gnu.org> 6;; Author: Roland McGrath <roland@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: tools, processes 7;; Keywords: tools, processes
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 4306f5daa02..f5680f263b6 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Eric S. Raymond <esr@snark.thyrsus.com> 6;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: unix, tools 7;; Keywords: unix, tools
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index cffb749c3e8..c3ff23558c3 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Thomas Neumann <tom@smart.bo.open.de> 5;; Author: Thomas Neumann <tom@smart.bo.open.de>
6;; Eric S. Raymond <esr@snark.thyrsus.com> 6;; Eric S. Raymond <esr@snark.thyrsus.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Adapted-By: ESR 7;; Adapted-By: ESR
9;; Keywords: unix, tools 8;; Keywords: unix, tools
10 9
diff --git a/lisp/progmodes/mixal-mode.el b/lisp/progmodes/mixal-mode.el
index a759709b5c8..1dd5d51df80 100644
--- a/lisp/progmodes/mixal-mode.el
+++ b/lisp/progmodes/mixal-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2003-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2003-2019 Free Software Foundation, Inc.
4 4
5;; Author: Pieter E.J. Pareit <pieter.pareit@gmail.com> 5;; Author: Pieter E.J. Pareit <pieter.pareit@gmail.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 09 Nov 2002 6;; Created: 09 Nov 2002
8;; Version: 0.1 7;; Version: 0.1
9;; Keywords: languages, Knuth, mix, mixal, asm, mixvm, The Art Of Computer Programming 8;; Keywords: languages, Knuth, mix, mixal, asm, mixvm, The Art Of Computer Programming
diff --git a/lisp/progmodes/modula2.el b/lisp/progmodes/modula2.el
index aa412304c59..087d1f65fd3 100644
--- a/lisp/progmodes/modula2.el
+++ b/lisp/progmodes/modula2.el
@@ -2,7 +2,6 @@
2 2
3;; Author: Michael Schmidt <michael@pbinfo.UUCP> 3;; Author: Michael Schmidt <michael@pbinfo.UUCP>
4;; Tom Perrine <Perrin@LOGICON.ARPA> 4;; Tom Perrine <Perrin@LOGICON.ARPA>
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: languages 5;; Keywords: languages
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index 8a7e24e5ada..4d4e2e1cd45 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at> 5;; Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
6;; John Eaton <jwe@octave.org> 6;; John Eaton <jwe@octave.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: languages 7;; Keywords: languages
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 7cbd30a0d1d..f01d6b6bb2d 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1990, 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1990, 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: William F. Mann 5;; Author: William F. Mann
6;; Maintainer: emacs-devel@gnu.org
7;; Adapted-By: ESR 6;; Adapted-By: ESR
8;; Keywords: languages 7;; Keywords: languages
9 8
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 2b057356b10..bd56d1a7c78 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2013-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index d494efa493a..88ea59b70e2 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -447,14 +447,14 @@ pattern to search for."
447 (read-regexp "Find regexp" (and id (regexp-quote id))))) 447 (read-regexp "Find regexp" (and id (regexp-quote id)))))
448 448
449;;;###autoload 449;;;###autoload
450(defun project-find-file (&optional filename) 450(defun project-find-file ()
451 "Visit a file (with completion) in the current project's roots. 451 "Visit a file (with completion) in the current project's roots.
452The completion default is the filename at point, if one is 452The completion default is the filename at point, if one is
453recognized." 453recognized."
454 (interactive) 454 (interactive)
455 (let* ((pr (project-current t)) 455 (let* ((pr (project-current t))
456 (dirs (project-roots pr))) 456 (dirs (project-roots pr)))
457 (project-find-file-in (or filename (thing-at-point 'filename)) dirs pr))) 457 (project-find-file-in (thing-at-point 'filename) dirs pr)))
458 458
459;;;###autoload 459;;;###autoload
460(defun project-or-external-find-file () 460(defun project-or-external-find-file ()
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 188bc973d99..74e865bd0b8 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -6,7 +6,6 @@
6;; URL: https://github.com/fgallina/python.el 6;; URL: https://github.com/fgallina/python.el
7;; Version: 0.26.1 7;; Version: 0.26.1
8;; Package-Requires: ((emacs "24.1") (cl-lib "1.0")) 8;; Package-Requires: ((emacs "24.1") (cl-lib "1.0"))
9;; Maintainer: emacs-devel@gnu.org
10;; Created: Jul 2010 9;; Created: Jul 2010
11;; Keywords: languages 10;; Keywords: languages
12 11
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 853a3500ee1..8f52a366783 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Daniel Pfeiffer <occitan@esperanto.org> 6;; Author: Daniel Pfeiffer <occitan@esperanto.org>
7;; Version: 2.0f 7;; Version: 2.0f
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: languages, unix 8;; Keywords: languages, unix
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index ffb3d41ab62..31315e229e0 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1994, 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 1998-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Author: Tom Tromey <tromey@redhat.com> 5;; Author: Tom Tromey <tromey@redhat.com>
7;; Chris Lindblad <cjl@lcs.mit.edu> 6;; Chris Lindblad <cjl@lcs.mit.edu>
8;; Keywords: languages tcl modes 7;; Keywords: languages tcl modes
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 62c42d39c6f..7ae47126a5c 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1986-1987, 1989-1990, 2001-2019 Free Software 3;; Copyright (C) 1986-1987, 1989-1990, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: languages, lisp 6;; Keywords: languages, lisp
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el
index be80b4a15b6..2e75e53fc26 100644
--- a/lisp/ps-bdf.el
+++ b/lisp/ps-bdf.el
@@ -9,7 +9,7 @@
9;; National Institute of Advanced Industrial Science and Technology (AIST) 9;; National Institute of Advanced Industrial Science and Technology (AIST)
10;; Registration Number H13PRO009 10;; Registration Number H13PRO009
11 11
12;; Author: Kenichi Handa <handa@m17n.org> 12;; Author: Kenichi Handa <handa@gnu.org>
13;; (according to ack.texi) 13;; (according to ack.texi)
14;; Keywords: wp, BDF, font, PostScript 14;; Keywords: wp, BDF, font, PostScript
15;; Package: ps-print 15;; Package: ps-print
diff --git a/lisp/ps-def.el b/lisp/ps-def.el
index 20631338902..d248556ccda 100644
--- a/lisp/ps-def.el
+++ b/lisp/ps-def.el
@@ -3,8 +3,8 @@
3;; Copyright (C) 2007-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2007-2019 Free Software Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
6;; Kenichi Handa <handa@m17n.org> (multi-byte characters) 6;; Kenichi Handa <handa@gnu.org> (multi-byte characters)
7;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) 7;; Maintainer: Kenichi Handa <handa@gnu.org> (multi-byte characters)
8;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 8;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
9;; Keywords: wp, print, PostScript 9;; Keywords: wp, print, PostScript
10;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre 10;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el
index c88d6d26797..537ba9627d5 100644
--- a/lisp/ps-mule.el
+++ b/lisp/ps-mule.el
@@ -3,8 +3,8 @@
3;; Copyright (C) 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998-2019 Free Software Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 5;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
6;; Kenichi Handa <handa@m17n.org> (multi-byte characters) 6;; Kenichi Handa <handa@gnu.org> (multi-byte characters)
7;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) 7;; Maintainer: Kenichi Handa <handa@gnu.org> (multi-byte characters)
8;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 8;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
9;; Keywords: wp, print, PostScript, multibyte, mule 9;; Keywords: wp, print, PostScript, multibyte, mule
10;; Package: ps-print 10;; Package: ps-print
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 59ac84a3639..d0d9cbe4481 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -5,8 +5,8 @@
5;; Author: Jim Thompson (was <thompson@wg2.waii.com>) 5;; Author: Jim Thompson (was <thompson@wg2.waii.com>)
6;; Jacques Duthen (was <duthen@cegelec-red.fr>) 6;; Jacques Duthen (was <duthen@cegelec-red.fr>)
7;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 7;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
8;; Kenichi Handa <handa@m17n.org> (multi-byte characters) 8;; Kenichi Handa <handa@gnu.org> (multi-byte characters)
9;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) 9;; Maintainer: Kenichi Handa <handa@gnu.org> (multi-byte characters)
10;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 10;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
11;; Keywords: wp, print, PostScript 11;; Keywords: wp, print, PostScript
12;; Version: 7.3.5 12;; Version: 7.3.5
@@ -1405,7 +1405,7 @@ Please send all bug fixes and enhancements to
1405;; prologue code suggestion, for odd/even printing suggestion and for 1405;; prologue code suggestion, for odd/even printing suggestion and for
1406;; `ps-prologue-file' enhancement. 1406;; `ps-prologue-file' enhancement.
1407;; 1407;;
1408;; Thanks to Ken'ichi Handa <handa@m17n.org> for multi-byte buffer handling. 1408;; Thanks to Ken'ichi Handa <handa@gnu.org> for multi-byte buffer handling.
1409;; 1409;;
1410;; Thanks to Matthew O Persico <Matthew.Persico@lazard.com> for line number on 1410;; Thanks to Matthew O Persico <Matthew.Persico@lazard.com> for line number on
1411;; empty columns. 1411;; empty columns.
diff --git a/lisp/ps-samp.el b/lisp/ps-samp.el
index 784b4356b47..99c17c7293e 100644
--- a/lisp/ps-samp.el
+++ b/lisp/ps-samp.el
@@ -5,8 +5,8 @@
5;; Author: Jim Thompson (was <thompson@wg2.waii.com>) 5;; Author: Jim Thompson (was <thompson@wg2.waii.com>)
6;; Jacques Duthen (was <duthen@cegelec-red.fr>) 6;; Jacques Duthen (was <duthen@cegelec-red.fr>)
7;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 7;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
8;; Kenichi Handa <handa@m17n.org> (multi-byte characters) 8;; Kenichi Handa <handa@gnu.org> (multi-byte characters)
9;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) 9;; Maintainer: Kenichi Handa <handa@gnu.org> (multi-byte characters)
10;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com> 10;; Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
11;; Keywords: wp, print, PostScript 11;; Keywords: wp, print, PostScript
12;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre 12;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
diff --git a/lisp/register.el b/lisp/register.el
index 775e1a2cc92..d3825fe8e2a 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1993-1994, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985, 1993-1994, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/replace.el b/lisp/replace.el
index 9d1b7bf747d..00b8be53281 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2019 Free 3;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2019 Free
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Package: emacs 6;; Package: emacs
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/reposition.el b/lisp/reposition.el
index 22f9986efb5..0416845e9cf 100644
--- a/lisp/reposition.el
+++ b/lisp/reposition.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Michael D. Ernst <mernst@theory.lcs.mit.edu> 5;; Author: Michael D. Ernst <mernst@theory.lcs.mit.edu>
6;; Created: Jan 1991 6;; Created: Jan 1991
7;; Maintainer: emacs-devel@gnu.org
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
10 9
diff --git a/lisp/rot13.el b/lisp/rot13.el
index 8f4044deac5..bdb2e4b5048 100644
--- a/lisp/rot13.el
+++ b/lisp/rot13.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Howard Gayle 5;; Author: Howard Gayle
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/lisp/savehist.el b/lisp/savehist.el
index fb3b7483397..84cba61aab5 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997, 2005-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2005-2019 Free Software Foundation, Inc.
4 4
5;; Author: Hrvoje Niksic <hniksic@xemacs.org> 5;; Author: Hrvoje Niksic <hniksic@xemacs.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: minibuffer 6;; Keywords: minibuffer
8;; Version: 24 7;; Version: 24
9 8
diff --git a/lisp/saveplace.el b/lisp/saveplace.el
index 730d31ead25..960cace2069 100644
--- a/lisp/saveplace.el
+++ b/lisp/saveplace.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Karl Fogel <kfogel@red-bean.com> 5;; Author: Karl Fogel <kfogel@red-bean.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: July, 1993 6;; Created: July, 1993
8;; Keywords: bookmarks, placeholders 7;; Keywords: bookmarks, placeholders
9 8
diff --git a/lisp/scroll-bar.el b/lisp/scroll-bar.el
index dc0df7ab3fe..4fc9df84609 100644
--- a/lisp/scroll-bar.el
+++ b/lisp/scroll-bar.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993-1995, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1995, 1999-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: hardware 5;; Keywords: hardware
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el
index 8281edb1720..72127321c99 100644
--- a/lisp/scroll-lock.el
+++ b/lisp/scroll-lock.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2005-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2005-2019 Free Software Foundation, Inc.
4 4
5;; Author: Ralf Angeli <angeli@iwi.uni-sb.de> 5;; Author: Ralf Angeli <angeli@iwi.uni-sb.de>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 2005-06-18 6;; Created: 2005-06-18
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/select.el b/lisp/select.el
index af6bf467e4a..a8adc168f95 100644
--- a/lisp/select.el
+++ b/lisp/select.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/server.el b/lisp/server.el
index 436a44a7e94..f692673d4f1 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: William Sommerfeld <wesommer@athena.mit.edu> 6;; Author: William Sommerfeld <wesommer@athena.mit.edu>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: processes 7;; Keywords: processes
9 8
10;; Changes by peck@sun.com and by rms. 9;; Changes by peck@sun.com and by rms.
diff --git a/lisp/ses.el b/lisp/ses.el
index 73157d6f5f0..7fdacc77c9c 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -3,7 +3,7 @@
3;; Copyright (C) 2002-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2002-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jonathan Yavner <jyavner@member.fsf.org> 5;; Author: Jonathan Yavner <jyavner@member.fsf.org>
6;; Maintainer: Vincent Belaïche <vincentb1@users.sourceforge.net> 6;; Maintainer: Vincent Belaïche <vincentb1@users.sourceforge.net>
7;; Keywords: spreadsheet Dijkstra 7;; Keywords: spreadsheet Dijkstra
8 8
9;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/shell.el b/lisp/shell.el
index 53570272111..6e2ae85fcea 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Olin Shivers <shivers@cs.cmu.edu> 6;; Author: Olin Shivers <shivers@cs.cmu.edu>
7;; Simon Marshall <simon@gnu.org> 7;; Simon Marshall <simon@gnu.org>
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: processes 8;; Keywords: processes
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/simple.el b/lisp/simple.el
index 4454791ad20..c0e8d58c80c 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985-1987, 1993-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985-1987, 1993-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: internal 5;; Keywords: internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/skeleton.el b/lisp/skeleton.el
index bce73d6bfef..1d06b648a20 100644
--- a/lisp/skeleton.el
+++ b/lisp/skeleton.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993-1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Daniel Pfeiffer <occitan@esperanto.org> 5;; Author: Daniel Pfeiffer <occitan@esperanto.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: extensions, abbrev, languages, tools 6;; Keywords: extensions, abbrev, languages, tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/sort.el b/lisp/sort.el
index 6ea1c440605..86cb1804a39 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Howie Kaye 6;; Author: Howie Kaye
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: unix 7;; Keywords: unix
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/soundex.el b/lisp/soundex.el
index 1f1f9caec3d..9e4c79769d0 100644
--- a/lisp/soundex.el
+++ b/lisp/soundex.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Christian Plaunt <chris@bliss.berkeley.edu> 5;; Author: Christian Plaunt <chris@bliss.berkeley.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: matching 6;; Keywords: matching
8;; Created: Sat May 15 14:48:18 1993 7;; Created: Sat May 15 14:48:18 1993
9 8
diff --git a/lisp/startup.el b/lisp/startup.el
index 421a6ea37db..a88118e3b9a 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1992, 1994-2019 Free Software Foundation, 3;; Copyright (C) 1985-1986, 1992, 1994-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 9265b8a52ea..29daaa5690e 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: David Bakhash <cadet@alum.mit.edu> 5;; Author: David Bakhash <cadet@alum.mit.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: lisp, mouse, extensions 6;; Keywords: lisp, mouse, extensions
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/subr.el b/lisp/subr.el
index 05fb9fea68f..c97d9b96bd9 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2019 Free Software 3;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/t-mouse.el b/lisp/t-mouse.el
index 14b292d4414..1f4be160f8e 100644
--- a/lisp/t-mouse.el
+++ b/lisp/t-mouse.el
@@ -1,7 +1,6 @@
1;;; t-mouse.el --- mouse support within the text terminal 1;;; t-mouse.el --- mouse support within the text terminal
2 2
3;; Author: Nick Roberts <nickrob@gnu.org> 3;; Author: Nick Roberts <nickrob@gnu.org>
4;; Maintainer: emacs-devel@gnu.org
5;; Keywords: mouse gpm linux 4;; Keywords: mouse gpm linux
6 5
7;; Copyright (C) 1994-1995, 1998, 2006-2019 Free Software Foundation, 6;; Copyright (C) 1994-1995, 1998, 2006-2019 Free Software Foundation,
diff --git a/lisp/tabify.el b/lisp/tabify.el
index 37cd8fb2fdd..345771e19cd 100644
--- a/lisp/tabify.el
+++ b/lisp/tabify.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Package: emacs 5;; Package: emacs
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/talk.el b/lisp/talk.el
index 0b7d5db01e1..b5c77a9332c 100644
--- a/lisp/talk.el
+++ b/lisp/talk.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1995, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: comm, frames 5;; Keywords: comm, frames
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 599da9ac807..c75fe7c3730 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1990-1991, 1993-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1990-1991, 1993-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jamie Zawinski <jwz@lucid.com> 5;; Author: Jamie Zawinski <jwz@lucid.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 04 Apr 1990 6;; Created: 04 Apr 1990
8;; Keywords: unix 7;; Keywords: unix
9 8
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 28afbec0f49..e3b9c76a5b8 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -1,11 +1,11 @@
1;;; tempo.el --- Flexible template insertion 1;;; tempo.el --- Flexible template insertion -*- lexical-binding: t; -*-
2 2
3;; Copyright (C) 1994-1995, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1995, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: David KÃ¥gedal <davidk@lysator.liu.se> 5;; Author: David KÃ¥gedal <davidk@lysator.liu.se>
6;; Created: 16 Feb 1994 6;; Created: 16 Feb 1994
7;; KÃ¥gedal's last version number: 1.2.4 7;; KÃ¥gedal's last version number: 1.2.4
8;; Keywords: extensions, languages, tools 8;; Keywords: abbrev, extensions, languages, tools
9 9
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
11 11
@@ -152,7 +152,7 @@ setting it to (upcase), for example.")
152(defvar tempo-tags nil 152(defvar tempo-tags nil
153 "An association list with tags and corresponding templates.") 153 "An association list with tags and corresponding templates.")
154 154
155(defvar tempo-local-tags '((tempo-tags . nil)) 155(defvar-local tempo-local-tags '((tempo-tags . nil))
156 "A list of locally installed tag completion lists. 156 "A list of locally installed tag completion lists.
157It is an association list where the car of every element is a symbol 157It is an association list where the car of every element is a symbol
158whose variable value is a template list. The cdr part, if non-nil, 158whose variable value is a template list. The cdr part, if non-nil,
@@ -161,16 +161,16 @@ documentation for the function `tempo-complete-tag' for more info.
161 161
162`tempo-tags' is always in the last position in this list.") 162`tempo-tags' is always in the last position in this list.")
163 163
164(defvar tempo-collection nil 164(defvar-local tempo-collection nil
165 "A collection of all the tags defined for the current buffer.") 165 "A collection of all the tags defined for the current buffer.")
166 166
167(defvar tempo-dirty-collection t 167(defvar-local tempo-dirty-collection t
168 "Indicates if the tag collection needs to be rebuilt.") 168 "Indicates if the tag collection needs to be rebuilt.")
169 169
170(defvar tempo-marks nil 170(defvar-local tempo-marks nil
171 "A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.") 171 "A list of marks to jump to with `\\[tempo-forward-mark]' and `\\[tempo-backward-mark]'.")
172 172
173(defvar tempo-match-finder "\\b\\([[:word:]]+\\)\\=" 173(defvar-local tempo-match-finder "\\b\\([[:word:]]+\\)\\="
174 "The regexp or function used to find the string to match against tags. 174 "The regexp or function used to find the string to match against tags.
175 175
176If `tempo-match-finder' is a string, it should contain a regular 176If `tempo-match-finder' is a string, it should contain a regular
@@ -195,23 +195,15 @@ A list of symbols which are bound to functions that take one argument.
195This function should return something to be sent to `tempo-insert' if 195This function should return something to be sent to `tempo-insert' if
196it recognizes the argument, and nil otherwise.") 196it recognizes the argument, and nil otherwise.")
197 197
198(defvar tempo-named-insertions nil 198(defvar-local tempo-named-insertions nil
199 "Temporary storage for named insertions.") 199 "Temporary storage for named insertions.")
200 200
201(defvar tempo-region-start (make-marker) 201(defvar-local tempo-region-start (make-marker)
202 "Region start when inserting around the region.") 202 "Region start when inserting around the region.")
203 203
204(defvar tempo-region-stop (make-marker) 204(defvar-local tempo-region-stop (make-marker)
205 "Region stop when inserting around the region.") 205 "Region stop when inserting around the region.")
206 206
207;; Make some variables local to every buffer
208
209(make-variable-buffer-local 'tempo-marks)
210(make-variable-buffer-local 'tempo-local-tags)
211(make-variable-buffer-local 'tempo-match-finder)
212(make-variable-buffer-local 'tempo-collection)
213(make-variable-buffer-local 'tempo-dirty-collection)
214
215;;; Functions 207;;; Functions
216 208
217;; 209;;
@@ -268,11 +260,14 @@ The elements in ELEMENTS can be of several types:
268 - `n>': Inserts a newline and indents line. 260 - `n>': Inserts a newline and indents line.
269 - `o': Like `%' but leaves the point before the newline. 261 - `o': Like `%' but leaves the point before the newline.
270 - nil: It is ignored. 262 - nil: It is ignored.
271 - Anything else: It is evaluated and the result is treated as an 263 - Anything else: Each function in `tempo-user-elements' is called
272 element to be inserted. One additional tag is useful for these 264 with it as argument until one of them returns non-nil, and the
273 cases. If an expression returns a list (l foo bar), the elements 265 result is inserted. If all of them return nil, it is evaluated and
274 after `l' will be inserted according to the usual rules. This makes 266 the result is treated as an element to be inserted. One additional
275 it possible to return several elements from one expression." 267 tag is useful for these cases. If an expression returns a list (l
268 foo bar), the elements after `l' will be inserted according to the
269 usual rules. This makes it possible to return several elements
270 from one expression."
276 (let* ((template-name (intern (concat "tempo-template-" 271 (let* ((template-name (intern (concat "tempo-template-"
277 name))) 272 name)))
278 (command-name template-name)) 273 (command-name template-name))
diff --git a/lisp/term/common-win.el b/lisp/term/common-win.el
index b7a778fc004..d7fceb83085 100644
--- a/lisp/term/common-win.el
+++ b/lisp/term/common-win.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1993-1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: terminals 5;; Keywords: terminals
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el
index 09275991cf5..c434ea6b9cb 100644
--- a/lisp/term/pc-win.el
+++ b/lisp/term/pc-win.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: Morten Welinder <terra@diku.dk> 6;; Author: Morten Welinder <terra@diku.dk>
7;; Maintainer: emacs-devel@gnu.org
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
10 9
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 307586f2213..2718aecb9af 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eli Zaretskii 5;; Author: Eli Zaretskii
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: terminals, faces 6;; Keywords: terminals, faces
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index 7a5d3ef7758..de822326fb3 100644
--- a/lisp/textmodes/bib-mode.el
+++ b/lisp/textmodes/bib-mode.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Henry Kautz 5;; Author: Henry Kautz
6;; (according to authors.el) 6;; (according to authors.el)
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: bib 7;; Keywords: bib
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index c285491a305..46dbcfef460 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2019 Free 3;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2019 Free
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: wp 6;; Keywords: wp
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index d18916dfd01..a06f8edd6f8 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Manuel Serrano <Manuel.Serrano@sophia.inria.fr> 5;; Author: Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience 6;; Keywords: convenience
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el
index ff3d2420df4..f351b870261 100644
--- a/lisp/textmodes/makeinfo.el
+++ b/lisp/textmodes/makeinfo.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1991, 1993, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1991, 1993, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Robert J. Chassell 5;; Author: Robert J. Chassell
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: docs convenience 6;; Keywords: docs convenience
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el
index f33d4df4d19..e5964d175dd 100644
--- a/lisp/textmodes/nroff-mode.el
+++ b/lisp/textmodes/nroff-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1994-1995, 1997, 2001-2019 Free Software 3;; Copyright (C) 1985-1986, 1994-1995, 1997, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: wp 6;; Keywords: wp
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el
index 220ef2d7fd6..bc92121599c 100644
--- a/lisp/textmodes/page.el
+++ b/lisp/textmodes/page.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: wp convenience 5;; Keywords: wp convenience
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el
index 92a6b907859..8a1af3af250 100644
--- a/lisp/textmodes/paragraphs.el
+++ b/lisp/textmodes/paragraphs.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2019 Free Software 3;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: wp 6;; Keywords: wp
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index b5208494674..79039bc1980 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 1994, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: K. Shane Hartman 5;; Author: K. Shane Hartman
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience wp 6;; Keywords: convenience wp
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
@@ -625,7 +624,6 @@ Leaves the region surrounding the rectangle."
625(defvar picture-mode-map 624(defvar picture-mode-map
626 (let ((map (make-keymap))) 625 (let ((map (make-keymap)))
627 (define-key map [remap self-insert-command] 'picture-self-insert) 626 (define-key map [remap self-insert-command] 'picture-self-insert)
628 (define-key map [remap self-insert-command] 'picture-self-insert)
629 (define-key map [remap completion-separator-self-insert-command] 627 (define-key map [remap completion-separator-self-insert-command]
630 'picture-self-insert) 628 'picture-self-insert)
631 (define-key map [remap completion-separator-self-insert-autofilling] 629 (define-key map [remap completion-separator-self-insert-autofilling]
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el
index 3ba52e61ea6..03b1b048a16 100644
--- a/lisp/textmodes/refbib.el
+++ b/lisp/textmodes/refbib.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1989, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1989, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Henry Kautz <kautz@research.att.com> 5;; Author: Henry Kautz <kautz@research.att.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: bib, tex 6;; Keywords: bib, tex
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index f13e1d7161d..3d4d0d2b06e 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992, 1996, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 1996, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Ashwin Ram <ashwin@cc.gatech.edu> 5;; Author: Ashwin Ram <ashwin@cc.gatech.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Adapted-By: ESR 6;; Adapted-By: ESR
8;; Keywords: bib 7;; Keywords: bib
9 8
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index 67ecd3ced81..efc11084fe6 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1999-2001, 2003-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2001, 2003-2019 Free Software Foundation, Inc.
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Created: 29 Mar 1999 6;; Created: 29 Mar 1999
8;; Version: 2.0 7;; Version: 2.0
9;; Keywords: data memory todo pim 8;; Keywords: data memory todo pim
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 1b064fb825f..d0586fd9fce 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: James Clark <jjc@jclark.com> 6;; Author: James Clark <jjc@jclark.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Adapted-By: ESR, Daniel Pfeiffer <occitan@esperanto.org>, 7;; Adapted-By: ESR, Daniel Pfeiffer <occitan@esperanto.org>,
9;; F.Potorti@cnuce.cnr.it 8;; F.Potorti@cnuce.cnr.it
10;; Keywords: wp, hypermedia, comm, languages 9;; Keywords: wp, hypermedia, comm, languages
@@ -329,6 +328,24 @@ Any terminating `>' or `/' is not matched.")
329(defvar sgml-font-lock-keywords sgml-font-lock-keywords-1 328(defvar sgml-font-lock-keywords sgml-font-lock-keywords-1
330 "Rules for highlighting SGML code. See also `sgml-tag-face-alist'.") 329 "Rules for highlighting SGML code. See also `sgml-tag-face-alist'.")
331 330
331(defvar-local sgml--syntax-propertize-ppss nil)
332
333(defun sgml--syntax-propertize-ppss (pos)
334 "Return PPSS at POS, fixing the syntax of any lone `>' along the way."
335 (cl-assert (>= pos (car sgml--syntax-propertize-ppss)))
336 (let ((ppss (parse-partial-sexp (car sgml--syntax-propertize-ppss) pos -1
337 nil (cdr sgml--syntax-propertize-ppss))))
338 (while (eq -1 (car ppss))
339 (put-text-property (1- (point)) (point)
340 'syntax-table (string-to-syntax "."))
341 ;; Hack attack: rather than recompute the ppss from
342 ;; (car sgml--syntax-propertize-ppss), we manually "fix it".
343 (setcar ppss 0)
344 (setq ppss (parse-partial-sexp (point) pos -1 nil ppss)))
345 (setcdr sgml--syntax-propertize-ppss ppss)
346 (setcar sgml--syntax-propertize-ppss pos)
347 ppss))
348
332(eval-and-compile 349(eval-and-compile
333 (defconst sgml-syntax-propertize-rules 350 (defconst sgml-syntax-propertize-rules
334 (syntax-propertize-precompile-rules 351 (syntax-propertize-precompile-rules
@@ -345,23 +362,28 @@ Any terminating `>' or `/' is not matched.")
345 ;; the resulting number of calls to syntax-ppss made it too slow 362 ;; the resulting number of calls to syntax-ppss made it too slow
346 ;; (bug#33887), so we're now careful to leave alone any pair 363 ;; (bug#33887), so we're now careful to leave alone any pair
347 ;; of quotes that doesn't hold a < or > char, which is the vast majority. 364 ;; of quotes that doesn't hold a < or > char, which is the vast majority.
348 ("\\(?:\\(?1:\"\\)[^\"<>]*[<>\"]\\|\\(?1:'\\)[^'<>]*[<>']\\)" 365 ("\\(?:\\(?1:\"\\)[^\"<>]*\\|\\(?1:'\\)[^'\"<>]*\\)"
349 (1 (unless (memq (char-before) '(?\' ?\")) 366 (1 (if (eq (char-after) (char-after (match-beginning 0)))
367 (forward-char 1)
350 ;; Be careful to call `syntax-ppss' on a position before the one 368 ;; Be careful to call `syntax-ppss' on a position before the one
351 ;; we're going to change, so as not to need to flush the data we 369 ;; we're going to change, so as not to need to flush the data we
352 ;; just computed. 370 ;; just computed.
353 (if (prog1 (zerop (car (syntax-ppss (match-beginning 0)))) 371 (if (zerop (save-excursion
354 (goto-char (1- (match-end 0)))) 372 (car (sgml--syntax-propertize-ppss
373 (match-beginning 0)))))
355 (string-to-syntax "."))))) 374 (string-to-syntax ".")))))
356 ))) 375 )))
357 376
358(defun sgml-syntax-propertize (start end) 377(defun sgml-syntax-propertize (start end)
359 "Syntactic keywords for `sgml-mode'." 378 "Syntactic keywords for `sgml-mode'."
360 (goto-char start) 379 (setq sgml--syntax-propertize-ppss (cons start (syntax-ppss start)))
380 (cl-assert (>= (cadr sgml--syntax-propertize-ppss) 0))
361 (sgml-syntax-propertize-inside end) 381 (sgml-syntax-propertize-inside end)
362 (funcall 382 (funcall
363 (syntax-propertize-rules sgml-syntax-propertize-rules) 383 (syntax-propertize-rules sgml-syntax-propertize-rules)
364 start end)) 384 start end)
385 ;; Catch any '>' after the last quote.
386 (sgml--syntax-propertize-ppss end))
365 387
366(defun sgml-syntax-propertize-inside (end) 388(defun sgml-syntax-propertize-inside (end)
367 (let ((ppss (syntax-ppss))) 389 (let ((ppss (syntax-ppss)))
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index f27c7058e71..256fac63421 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -590,7 +590,7 @@
590;; attempt of implementing the table feature to Emacs. This greatly 590;; attempt of implementing the table feature to Emacs. This greatly
591;; motivated me to follow through to its completion. 591;; motivated me to follow through to its completion.
592;; 592;;
593;; Kenichi Handa <handa@etl.go.jp> kindly guided me through to 593;; Kenichi Handa <handa@gnu.org> kindly guided me through to
594;; overcome many technical issues while I was struggling with quail 594;; overcome many technical issues while I was struggling with quail
595;; related internationalization problems. 595;; related internationalization problems.
596;; 596;;
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 9c91d27b944..8611b735ba9 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2019 Free 3;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2019 Free
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: tex 6;; Keywords: tex
8 7
9;; Contributions over the years by William F. Schelter, Dick King, 8;; Contributions over the years by William F. Schelter, Dick King,
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 9ccc73ad48a..5a54e0d2d17 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2019 Free Software 3;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: bug-texinfo@gnu.org
7;; Keywords: maint, tex, docs 6;; Keywords: maint, tex, docs
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 71cdcab57ef..54306d2b74c 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Robert J. Chassell 6;; Author: Robert J. Chassell
7;; Date: [See date below for texinfo-version] 7;; Date: [See date below for texinfo-version]
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: maint, tex, docs 8;; Keywords: maint, tex, docs
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index e960e992a89..4f49c7f5d17 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1989-1992, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1989-1992, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Robert J. Chassell 5;; Author: Robert J. Chassell
6;; Maintainer: bug-texinfo@gnu.org
7;; Keywords: maint, tex, docs 6;; Keywords: maint, tex, docs
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el
index e676a5dae20..ac292e463b1 100644
--- a/lisp/textmodes/text-mode.el
+++ b/lisp/textmodes/text-mode.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1992, 1994, 2001-2019 Free Software Foundation, 3;; Copyright (C) 1985, 1992, 1994, 2001-2019 Free Software Foundation,
4;; Inc. 4;; Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: wp 6;; Keywords: wp
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/textmodes/underline.el b/lisp/textmodes/underline.el
index e0bfd24557b..8c904f5d0ec 100644
--- a/lisp/textmodes/underline.el
+++ b/lisp/textmodes/underline.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: wp 5;; Keywords: wp
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 60a20e2d188..e0184a7ccb3 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1991-1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1991-1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mike Williams <mikew@gopher.dosli.govt.nz> 5;; Author: Mike Williams <mikew@gopher.dosli.govt.nz>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: extensions, matching, mouse 6;; Keywords: extensions, matching, mouse
8;; Created: Thu Mar 28 13:48:23 1991 7;; Created: Thu Mar 28 13:48:23 1991
9 8
diff --git a/lisp/thread.el b/lisp/thread.el
index e8f3cc7da6a..3242d1dade6 100644
--- a/lisp/thread.el
+++ b/lisp/thread.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2018-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2018-2019 Free Software Foundation, Inc.
4 4
5;; Author: Gemini Lasswell <gazally@runbox.com> 5;; Author: Gemini Lasswell <gazally@runbox.com>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: thread, tools 6;; Keywords: thread, tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/thumbs.el b/lisp/thumbs.el
index 6a17a756548..dd0491a66a3 100644
--- a/lisp/thumbs.el
+++ b/lisp/thumbs.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca> 5;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: Multimedia 6;; Keywords: Multimedia
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/time.el b/lisp/time.el
index 35157c5e807..c2f60d31bd4 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -3,8 +3,6 @@
3;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2019 Free Software 3;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7
8;; This file is part of GNU Emacs. 6;; This file is part of GNU Emacs.
9 7
10;; GNU Emacs is free software: you can redistribute it and/or modify 8;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 44f04eab87b..bb96b5a46a0 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1994-1996, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1994-1996, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Ilya Zakharevich <ilya@math.mps.ohio-state.edu> 5;; Author: Ilya Zakharevich <ilya@math.mps.ohio-state.edu>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience 6;; Keywords: convenience
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index 37ebb5cbe7c..e42818218e0 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2006-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Keywords: help, internal 5;; Keywords: help, internal
7;; Package: emacs 6;; Package: emacs
8 7
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index 3dd9e341351..29612b36c20 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Dick King <king@reasoning.com> 6;; Author: Dick King <king@reasoning.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: files 7;; Keywords: files
9;; Created: 15 May 86 8;; Created: 15 May 86
10;; Package: emacs 9;; Package: emacs
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index a4cf0f0ec01..dba313453ff 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2001, 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Bill Perry <wmperry@gnu.org> 5;; Author: Bill Perry <wmperry@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: url, vc 6;; Keywords: url, vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/url/url-gw.el b/lisp/url/url-gw.el
index 54360840784..00d784a9b40 100644
--- a/lisp/url/url-gw.el
+++ b/lisp/url/url-gw.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997-1998, 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997-1998, 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Bill Perry <wmperry@gnu.org> 5;; Author: Bill Perry <wmperry@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, data, processes 6;; Keywords: comm, data, processes
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index 4988068293e..9d7837d8a7e 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -23,17 +23,17 @@
23 23
24;;; Code: 24;;; Code:
25 25
26;; (require 'url)
27(require 'url-parse) 26(require 'url-parse)
28;; (require 'url-util)
29(eval-when-compile (require 'mm-decode)) 27(eval-when-compile (require 'mm-decode))
30;; (require 'mailcap)
31(eval-when-compile (require 'subr-x)) 28(eval-when-compile (require 'subr-x))
32;; The following are autoloaded instead of `require'd to avoid eagerly 29;; The following are autoloaded instead of `require'd to avoid eagerly
33;; loading all of URL when turning on url-handler-mode in the .emacs. 30;; loading all of URL when turning on url-handler-mode in the .emacs.
34(autoload 'url-expand-file-name "url-expand" "Convert url to a fully specified url, and canonicalize it.") 31(autoload 'url-expand-file-name "url-expand"
35(autoload 'mm-dissect-buffer "mm-decode" "Dissect the current buffer and return a list of MIME handles.") 32 "Convert URL to a fully specified URL, and canonicalize it.")
36(autoload 'url-scheme-get-property "url-methods" "Get property of a URL SCHEME.") 33(autoload 'mm-dissect-buffer "mm-decode"
34 "Dissect the current buffer and return a list of MIME handles.")
35(autoload 'url-scheme-get-property "url-methods"
36 "Get PROPERTY of a URL SCHEME.")
37 37
38;; Always used after mm-dissect-buffer and defined in the same file. 38;; Always used after mm-dissect-buffer and defined in the same file.
39(declare-function mm-save-part-to-file "mm-decode" (handle file)) 39(declare-function mm-save-part-to-file "mm-decode" (handle file))
@@ -112,15 +112,16 @@
112 (push (cons url-handler-regexp 'url-file-handler) 112 (push (cons url-handler-regexp 'url-file-handler)
113 file-name-handler-alist))) 113 file-name-handler-alist)))
114 114
115(defcustom url-handler-regexp "\\`\\(https?\\|ftp\\|file\\|nfs\\|ssh\\|scp\\|rsync\\|telnet\\)://" 115(defcustom url-handler-regexp
116 "\\`\\(?:https?\\|ftp\\|file\\|nfs\\|ssh\\|scp\\|rsync\\|telnet\\)://"
116 "Regular expression for URLs handled by `url-handler-mode'. 117 "Regular expression for URLs handled by `url-handler-mode'.
117When URL Handler mode is enabled, this regular expression is 118When URL Handler mode is enabled, this regular expression is
118added to `file-name-handler-alist'. 119added to `file-name-handler-alist'.
119 120
120Some valid URL protocols just do not make sense to visit 121Some valid URL protocols just do not make sense to visit
121interactively \(about, data, info, irc, mailto, etc.). This 122interactively (about, data, info, irc, mailto, etc.). This
122regular expression avoids conflicts with local files that look 123regular expression avoids conflicts with local files that look
123like URLs \(Gnus is particularly bad at this)." 124like URLs (Gnus is particularly bad at this)."
124 :group 'url 125 :group 'url
125 :type 'regexp 126 :type 'regexp
126 :version "25.1" 127 :version "25.1"
@@ -144,8 +145,8 @@ like URLs \(Gnus is particularly bad at this)."
144;;;###autoload 145;;;###autoload
145(defun url-file-handler (operation &rest args) 146(defun url-file-handler (operation &rest args)
146 "Function called from the `file-name-handler-alist' routines. 147 "Function called from the `file-name-handler-alist' routines.
147OPERATION is what needs to be done (`file-exists-p', etc). ARGS are 148OPERATION is what needs to be done (`file-exists-p', etc.).
148the arguments that would have been passed to OPERATION." 149ARGS are the arguments that would have been passed to OPERATION."
149 ;; Avoid recursive load. 150 ;; Avoid recursive load.
150 (if (and load-in-progress url-file-handler-load-in-progress) 151 (if (and load-in-progress url-file-handler-load-in-progress)
151 (url-run-real-handler operation args) 152 (url-run-real-handler operation args)
@@ -153,48 +154,46 @@ the arguments that would have been passed to OPERATION."
153 ;; Check, whether there are arguments we want pass to Tramp. 154 ;; Check, whether there are arguments we want pass to Tramp.
154 (if (catch :do 155 (if (catch :do
155 (dolist (url (cons default-directory args)) 156 (dolist (url (cons default-directory args))
156 (and (member 157 (and (stringp url)
157 (url-type (url-generic-parse-url (and (stringp url) url))) 158 (member (url-type (url-generic-parse-url url))
158 url-tramp-protocols) 159 url-tramp-protocols)
159 (throw :do t)))) 160 (throw :do t))))
160 (apply 'url-tramp-file-handler operation args) 161 (apply #'url-tramp-file-handler operation args)
161 ;; Otherwise, let's do the job. 162 ;; Otherwise, let's do the job.
162 (let ((fn (get operation 'url-file-handlers)) 163 (let ((fn (get operation 'url-file-handlers))
163 (val nil) 164 val)
164 (hooked nil)) 165 (if (and (not fn)
165 (if (and (not fn) (intern-soft (format "url-%s" operation))
166 (fboundp (intern-soft (format "url-%s" operation)))) 166 (fboundp (intern-soft (format "url-%s" operation))))
167 (error "Missing URL handler mapping for %s" operation)) 167 (error "Missing URL handler mapping for %s" operation))
168 (if fn 168 (setq val (if fn (save-match-data (apply fn args))
169 (setq hooked t 169 (url-run-real-handler operation args)))
170 val (save-match-data (apply fn args))) 170 (url-debug 'handlers "%s %S%S => %S" (if fn "Hooked" "Real")
171 (setq hooked nil
172 val (url-run-real-handler operation args)))
173 (url-debug 'handlers "%s %S%S => %S" (if hooked "Hooked" "Real")
174 operation args val) 171 operation args val)
175 val))))) 172 val)))))
176 173
177(defun url-file-handler-identity (&rest args) 174(defun url-file-handler-identity (arg &rest _ignored)
178 ;; Identity function 175 ;; Identity function.
179 (car args)) 176 arg)
180 177
181;; These are operations that we can fully support 178;; These are operations that we can fully support.
182(put 'file-readable-p 'url-file-handlers 'url-file-exists-p) 179(put 'file-readable-p 'url-file-handlers #'url-file-exists-p)
183(put 'substitute-in-file-name 'url-file-handlers 'url-file-handler-identity) 180(put 'substitute-in-file-name 'url-file-handlers #'url-file-handler-identity)
184(put 'file-name-absolute-p 'url-file-handlers (lambda (&rest ignored) t)) 181(put 'file-name-absolute-p 'url-file-handlers (lambda (&rest _ignored) t))
185(put 'expand-file-name 'url-file-handlers 'url-handler-expand-file-name) 182(put 'expand-file-name 'url-file-handlers #'url-handler-expand-file-name)
186(put 'directory-file-name 'url-file-handlers 'url-handler-directory-file-name) 183(put 'directory-file-name 'url-file-handlers #'url-handler-directory-file-name)
187(put 'file-name-directory 'url-file-handlers 'url-handler-file-name-directory) 184(put 'file-name-directory 'url-file-handlers #'url-handler-file-name-directory)
188(put 'unhandled-file-name-directory 'url-file-handlers 'url-handler-unhandled-file-name-directory) 185(put 'unhandled-file-name-directory 'url-file-handlers
189(put 'file-remote-p 'url-file-handlers 'url-handler-file-remote-p) 186 #'url-handler-unhandled-file-name-directory)
190;; (put 'file-name-as-directory 'url-file-handlers 'url-handler-file-name-as-directory) 187(put 'file-remote-p 'url-file-handlers #'url-handler-file-remote-p)
188;; (put 'file-name-as-directory 'url-file-handlers
189;; #'url-handler-file-name-as-directory)
191 190
192;; These are operations that we do not support yet (DAV!!!) 191;; These are operations that we do not support yet (DAV!!!)
193(put 'file-writable-p 'url-file-handlers 'ignore) 192(put 'file-writable-p 'url-file-handlers #'ignore)
194(put 'file-symlink-p 'url-file-handlers 'ignore) 193(put 'file-symlink-p 'url-file-handlers #'ignore)
195;; Just like for ange-ftp: let's not waste time trying to look for RCS/foo,v 194;; Just like for ange-ftp: let's not waste time trying to look for RCS/foo,v
196;; files and such since we can't do anything clever with them anyway. 195;; files and such since we can't do anything clever with them anyway.
197(put 'vc-registered 'url-file-handlers 'ignore) 196(put 'vc-registered 'url-file-handlers #'ignore)
198 197
199(defun url-handler-expand-file-name (file &optional base) 198(defun url-handler-expand-file-name (file &optional base)
200 ;; When we see "/foo/bar" in a file whose working dir is "http://bla/bla", 199 ;; When we see "/foo/bar" in a file whose working dir is "http://bla/bla",
@@ -215,7 +214,7 @@ the arguments that would have been passed to OPERATION."
215;; reversible: (f-n-a-d (d-f-n (f-n-a-d X))) == (f-n-a-d X) 214;; reversible: (f-n-a-d (d-f-n (f-n-a-d X))) == (f-n-a-d X)
216(defun url-handler-directory-file-name (dir) 215(defun url-handler-directory-file-name (dir)
217 ;; When there's more than a single /, just don't touch the slashes at all. 216 ;; When there's more than a single /, just don't touch the slashes at all.
218 (if (string-match "//\\'" dir) dir 217 (if (string-suffix-p "//" dir) dir
219 (url-run-real-handler 'directory-file-name (list dir)))) 218 (url-run-real-handler 'directory-file-name (list dir))))
220 219
221(defun url-handler-unhandled-file-name-directory (filename) 220(defun url-handler-unhandled-file-name-directory (filename)
@@ -257,44 +256,42 @@ the arguments that would have been passed to OPERATION."
257 ;; `url-handler-unhandled-file-name-directory'. 256 ;; `url-handler-unhandled-file-name-directory'.
258 nil))) 257 nil)))
259 258
260;; The actual implementation 259;; The actual implementation.
261;;;###autoload 260;;;###autoload
262(defun url-copy-file (url newname &optional ok-if-already-exists 261(defun url-copy-file (url newname &optional ok-if-already-exists &rest _ignored)
263 _keep-time _preserve-uid-gid _preserve-permissions) 262 "Copy URL to NEWNAME. Both arguments must be strings.
264 "Copy URL to NEWNAME. Both args must be strings. 263Signal a `file-already-exists' error if file NEWNAME already
265Signal a `file-already-exists' error if file NEWNAME already exists, 264exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied
266unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. 265and non-nil. An integer as third argument means request
267A number as third arg means request confirmation if NEWNAME already exists. 266confirmation if NEWNAME already exists."
268This is what happens in interactive use with M-x. 267 (and (file-exists-p newname)
269Fourth arg KEEP-TIME non-nil means give the new file the same 268 (or (not ok-if-already-exists)
270last-modified time as the old one. (This works on only some systems.) 269 (and (integerp ok-if-already-exists)
271Args PRESERVE-UID-GID and PRESERVE-PERMISSIONS are ignored. 270 (not (yes-or-no-p
272A prefix arg makes KEEP-TIME non-nil." 271 (format "File %s already exists; copy to it anyway? "
273 (if (and (file-exists-p newname) 272 newname)))))
274 (not ok-if-already-exists)) 273 (signal 'file-already-exists (list "File already exists" newname)))
275 (signal 'file-already-exists (list "File exists" newname))) 274 (let* ((buffer (or (url-retrieve-synchronously url)
276 (let ((buffer (url-retrieve-synchronously url)) 275 (signal 'file-missing
277 (handle nil)) 276 (list "Opening URL"
278 (if (not buffer) 277 "No such file or directory" url))))
279 (signal 'file-missing (list "Opening URL" "No such file or directory" 278 (handle (with-current-buffer buffer
280 url))) 279 (mm-dissect-buffer t))))
281 (with-current-buffer buffer
282 (setq handle (mm-dissect-buffer t)))
283 (let ((mm-attachment-file-modes (default-file-modes))) 280 (let ((mm-attachment-file-modes (default-file-modes)))
284 (mm-save-part-to-file handle newname)) 281 (mm-save-part-to-file handle newname))
285 (kill-buffer buffer) 282 (kill-buffer buffer)
286 (mm-destroy-parts handle))) 283 (mm-destroy-parts handle)))
287(put 'copy-file 'url-file-handlers 'url-copy-file) 284(put 'copy-file 'url-file-handlers #'url-copy-file)
288 285
289;;;###autoload 286;;;###autoload
290(defun url-file-local-copy (url &rest ignored) 287(defun url-file-local-copy (url &rest _ignored)
291 "Copy URL into a temporary file on this machine. 288 "Copy URL into a temporary file on this machine.
292Returns the name of the local copy, or nil, if FILE is directly 289Returns the name of the local copy, or nil, if FILE is directly
293accessible." 290accessible."
294 (let ((filename (make-temp-file "url"))) 291 (let ((filename (make-temp-file "url")))
295 (url-copy-file url filename 'ok-if-already-exists) 292 (url-copy-file url filename 'ok-if-already-exists)
296 filename)) 293 filename))
297(put 'file-local-copy 'url-file-handlers 'url-file-local-copy) 294(put 'file-local-copy 'url-file-handlers #'url-file-local-copy)
298 295
299(defun url-insert (buffer &optional beg end) 296(defun url-insert (buffer &optional beg end)
300 "Insert the body of a URL object. 297 "Insert the body of a URL object.
@@ -330,8 +327,8 @@ This is like `url-insert', but also decodes the current buffer as
330if it had been inserted from a file named URL." 327if it had been inserted from a file named URL."
331 (if visit (setq buffer-file-name url)) 328 (if visit (setq buffer-file-name url))
332 (save-excursion 329 (save-excursion
333 (let* ((start (point)) 330 (let ((start (point))
334 (size-and-charset (url-insert buffer beg end))) 331 (size-and-charset (url-insert buffer beg end)))
335 (kill-buffer buffer) 332 (kill-buffer buffer)
336 (when replace 333 (when replace
337 (delete-region (point-min) start) 334 (delete-region (point-min) start)
@@ -342,10 +339,9 @@ if it had been inserted from a file named URL."
342 (decode-coding-inserted-region (point-min) (point) url 339 (decode-coding-inserted-region (point-min) (point) url
343 visit beg end replace)) 340 visit beg end replace))
344 (let ((inserted (car size-and-charset))) 341 (let ((inserted (car size-and-charset)))
345 (when (fboundp 'after-insert-file-set-coding) 342 (list url (or (and (fboundp 'after-insert-file-set-coding)
346 (let ((insval (after-insert-file-set-coding inserted visit))) 343 (after-insert-file-set-coding inserted visit))
347 (if insval (setq inserted insval)))) 344 inserted))))))
348 (list url inserted)))))
349 345
350;;;###autoload 346;;;###autoload
351(defun url-insert-file-contents (url &optional visit beg end replace) 347(defun url-insert-file-contents (url &optional visit beg end replace)
@@ -356,15 +352,14 @@ if it had been inserted from a file named URL."
356 ;; instead. See bug#17549. 352 ;; instead. See bug#17549.
357 (url-http--insert-file-helper buffer url visit)) 353 (url-http--insert-file-helper buffer url visit))
358 (url-insert-buffer-contents buffer url visit beg end replace))) 354 (url-insert-buffer-contents buffer url visit beg end replace)))
359 355(put 'insert-file-contents 'url-file-handlers #'url-insert-file-contents)
360(put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)
361 356
362(defun url-file-name-completion (url _directory &optional _predicate) 357(defun url-file-name-completion (url _directory &optional _predicate)
363 ;; Even if it's not implemented, it's not an error to ask for completion, 358 ;; Even if it's not implemented, it's not an error to ask for completion,
364 ;; in case it's available (bug#14806). 359 ;; in case it's available (bug#14806).
365 ;; (error "Unimplemented") 360 ;; (error "Unimplemented")
366 url) 361 url)
367(put 'file-name-completion 'url-file-handlers 'url-file-name-completion) 362(put 'file-name-completion 'url-file-handlers #'url-file-name-completion)
368 363
369(defun url-file-name-all-completions (_file _directory) 364(defun url-file-name-all-completions (_file _directory)
370 ;; Even if it's not implemented, it's not an error to ask for completion, 365 ;; Even if it's not implemented, it's not an error to ask for completion,
@@ -372,7 +367,7 @@ if it had been inserted from a file named URL."
372 ;; (error "Unimplemented") 367 ;; (error "Unimplemented")
373 nil) 368 nil)
374(put 'file-name-all-completions 369(put 'file-name-all-completions
375 'url-file-handlers 'url-file-name-all-completions) 370 'url-file-handlers #'url-file-name-all-completions)
376 371
377;; All other handlers map onto their respective backends. 372;; All other handlers map onto their respective backends.
378(defmacro url-handlers-create-wrapper (method args) 373(defmacro url-handlers-create-wrapper (method args)
@@ -382,10 +377,10 @@ if it had been inserted from a file named URL."
382 (or (documentation method t) "No original documentation.")) 377 (or (documentation method t) "No original documentation."))
383 (setq url (url-generic-parse-url url)) 378 (setq url (url-generic-parse-url url))
384 (when (url-type url) 379 (when (url-type url)
385 (funcall (url-scheme-get-property (url-type url) (quote ,method)) 380 (funcall (url-scheme-get-property (url-type url) ',method)
386 ,@(remove '&rest (remove '&optional args))))) 381 ,@(remq '&rest (remq '&optional args)))))
387 (unless (get ',method 'url-file-handlers) 382 (unless (get ',method 'url-file-handlers)
388 (put ',method 'url-file-handlers ',(intern (format "url-%s" method)))))) 383 (put ',method 'url-file-handlers #',(intern (format "url-%s" method))))))
389 384
390(url-handlers-create-wrapper file-exists-p (url)) 385(url-handlers-create-wrapper file-exists-p (url))
391(url-handlers-create-wrapper file-attributes (url &optional id-format)) 386(url-handlers-create-wrapper file-attributes (url &optional id-format))
@@ -396,12 +391,12 @@ if it had been inserted from a file named URL."
396(url-handlers-create-wrapper directory-files (url &optional full match nosort)) 391(url-handlers-create-wrapper directory-files (url &optional full match nosort))
397(url-handlers-create-wrapper file-truename (url &optional counter prev-dirs)) 392(url-handlers-create-wrapper file-truename (url &optional counter prev-dirs))
398 393
399(add-hook 'find-file-hook 'url-handlers-set-buffer-mode) 394(add-hook 'find-file-hook #'url-handlers-set-buffer-mode)
400 395
401(defun url-handlers-set-buffer-mode () 396(defun url-handlers-set-buffer-mode ()
402 "Set correct modes for the current buffer if visiting a remote file." 397 "Set correct modes for the current buffer if visiting a remote file."
403 (and (stringp buffer-file-name) 398 (and buffer-file-name
404 (string-match url-handler-regexp buffer-file-name) 399 (string-match-p url-handler-regexp buffer-file-name)
405 (auto-save-mode 0))) 400 (auto-save-mode 0)))
406 401
407(provide 'url-handlers) 402(provide 'url-handlers)
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 00803a103a0..a11f5147afc 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1999, 2001, 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1999, 2001, 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Bill Perry <wmperry@gnu.org> 5;; Author: Bill Perry <wmperry@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: comm, data, processes 6;; Keywords: comm, data, processes
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index a46e7bb3855..dbcc9a6168c 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Bill Perry <wmperry@gnu.org> 6;; Author: Bill Perry <wmperry@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: comm, data, processes 7;; Keywords: comm, data, processes
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/url/url.el b/lisp/url/url.el
index 5242d42f04c..eafac8a1929 100644
--- a/lisp/url/url.el
+++ b/lisp/url/url.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Bill Perry <wmperry@gnu.org> 6;; Author: Bill Perry <wmperry@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: comm, data, processes, hypermedia 7;; Keywords: comm, data, processes, hypermedia
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/userlock.el b/lisp/userlock.el
index f077bc9ad62..c4178ac42af 100644
--- a/lisp/userlock.el
+++ b/lisp/userlock.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Richard King 5;; Author: Richard King
6;; (according to authors.el) 6;; (according to authors.el)
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: internal 7;; Keywords: internal
9;; Package: emacs 8;; Package: emacs
10 9
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index f9efd44c5c7..5cd4f46ed58 100644
--- a/lisp/vc/add-log.el
+++ b/lisp/vc/add-log.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2019 Free 3;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2019 Free
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: vc tools 6;; Keywords: vc tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/compare-w.el b/lisp/vc/compare-w.el
index 02c08af8b20..2811d4691b7 100644
--- a/lisp/vc/compare-w.el
+++ b/lisp/vc/compare-w.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1986, 1989, 1993, 1997, 2001-2019 Free Software 3;; Copyright (C) 1986, 1989, 1993, 1997, 2001-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: convenience files vc 6;; Keywords: convenience files vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el
index 523be87bc49..bee36592a1a 100644
--- a/lisp/vc/diff.el
+++ b/lisp/vc/diff.el
@@ -5,7 +5,6 @@
5 5
6;; Author: Frank Bresz 6;; Author: Frank Bresz
7;; (according to authors.el) 7;; (according to authors.el)
8;; Maintainer: emacs-devel@gnu.org
9;; Keywords: unix, vc, tools 8;; Keywords: unix, vc, tools
10 9
11;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index 84838135fcc..15f234fda62 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1997-1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1997-1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Martin Lorentzson <emwson@emw.ericsson.se> 5;; Author: Martin Lorentzson <emwson@emw.ericsson.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: vc tools 6;; Keywords: vc tools
8;; Package: vc 7;; Package: vc
9 8
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index ee1646cae5a..3ab8c496408 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -4,7 +4,6 @@
4 4
5;; Author: Dave Love <fx@gnu.org> 5;; Author: Dave Love <fx@gnu.org>
6;; Riccardo Murri <riccardo.murri@gmail.com> 6;; Riccardo Murri <riccardo.murri@gmail.com>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: vc tools 7;; Keywords: vc tools
9;; Created: Sept 2006 8;; Created: Sept 2006
10;; Package: vc 9;; Package: vc
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index 626e190c1e8..cc1845a59f6 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1995, 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 1998-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index c4b327a3f01..579448b31ca 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2008-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2008-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see below for full credits) 5;; Author: FSF (see below for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: vc tools 6;; Keywords: vc tools
8;; Package: vc 7;; Package: vc
9 8
diff --git a/lisp/vc/vc-filewise.el b/lisp/vc/vc-filewise.el
index f05e8efff90..37c71f98641 100644
--- a/lisp/vc/vc-filewise.el
+++ b/lisp/vc/vc-filewise.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 876d824ceac..f1b603b2a93 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2006-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2006-2019 Free Software Foundation, Inc.
4 4
5;; Author: Ivan Kanis 5;; Author: Ivan Kanis
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: vc tools 6;; Keywords: vc tools
8;; Package: vc 7;; Package: vc
9 8
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 07b3d86b518..1871e1e95c5 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-1996, 1998-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 598e98250ac..ee227b19a39 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 4e9f5a025fb..0d27528e515 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index f8475925b02..b708cd41a79 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see vc.el for full credits) 5;; Author: FSF (see vc.el for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Package: vc 6;; Package: vc
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index b992a8ebe09..d9fb8290d2b 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1992-1998, 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1992-1998, 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: FSF (see below for full credits) 5;; Author: FSF (see below for full credits)
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: vc tools 6;; Keywords: vc tools
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index 3e8b6ee838e..7673d9b7b86 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -4,7 +4,6 @@
4;; Inc. 4;; Inc.
5 5
6;; Author: Peter Stephenson <pws@ibmth.df.unipi.it> 6;; Author: Peter Stephenson <pws@ibmth.df.unipi.it>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: virtual cursor, convenience 7;; Keywords: virtual cursor, convenience
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/version.el b/lisp/version.el
index d13d8c31e80..d5bc3eb984a 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1992, 1994-1995, 1999-2019 Free Software 3;; Copyright (C) 1985, 1992, 1994-1995, 1999-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/view.el b/lisp/view.el
index e74ce1e8888..c8d5f0de205 100644
--- a/lisp/view.el
+++ b/lisp/view.el
@@ -4,7 +4,6 @@
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Author: K. Shane Hartman 6;; Author: K. Shane Hartman
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: files 7;; Keywords: files
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/lisp/vt100-led.el b/lisp/vt100-led.el
index d7b5f0a803e..6678f49dfcf 100644
--- a/lisp/vt100-led.el
+++ b/lisp/vt100-led.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 2001-2019 Free Software Foundation, Inc.
4 4
5;; Author: Howard Gayle 5;; Author: Howard Gayle
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: hardware 6;; Keywords: hardware
8 7
9;; This file is part of GNU Emacs. 8;; This file is part of GNU Emacs.
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 2b6464ab986..443a995cb8d 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -308,7 +308,7 @@ names."
308(declare-function w32-version "w32-win" ()) 308(declare-function w32-version "w32-win" ())
309(declare-function w32-read-registry "w32fns" (root key name)) 309(declare-function w32-read-registry "w32fns" (root key name))
310 310
311(defun w32--os-descriptiono () 311(defun w32--os-description ()
312 "Return a string describing the underlying OS and its version." 312 "Return a string describing the underlying OS and its version."
313 (let* ((w32ver (car (w32-version))) 313 (let* ((w32ver (car (w32-version)))
314 (w9x-p (< w32ver 5)) 314 (w9x-p (< w32ver 5))
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index b9f98cdc4c7..713c8575c7d 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1996-1997, 1999-2019 Free Software Foundation, Inc. 3;; Copyright (C) 1996-1997, 1999-2019 Free Software Foundation, Inc.
4;; 4;;
5;; Author: Per Abrahamsen <abraham@dina.kvl.dk> 5;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: extensions 6;; Keywords: extensions
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/window.el b/lisp/window.el
index 2c9d177d0a2..7e6a48460e5 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 1985, 1989, 1992-1994, 2000-2019 Free Software 3;; Copyright (C) 1985, 1989, 1992-1994, 2000-2019 Free Software
4;; Foundation, Inc. 4;; Foundation, Inc.
5 5
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: internal 6;; Keywords: internal
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/lisp/woman.el b/lisp/woman.el
index 39d9b806d27..57354478fb0 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2000-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
4 4
5;; Author: Francis J. Wright <F.J.Wright@qmul.ac.uk> 5;; Author: Francis J. Wright <F.J.Wright@qmul.ac.uk>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: help, unix 6;; Keywords: help, unix
8;; Adapted-By: Eli Zaretskii <eliz@gnu.org> 7;; Adapted-By: Eli Zaretskii <eliz@gnu.org>
9;; Version: 0.551 8;; Version: 0.551
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index e4e2dec3b82..31d409c8389 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2004-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2004-2019 Free Software Foundation, Inc.
4 4
5;; Author: Jan Djärv <jan.h.d@swipnet.se> 5;; Author: Jan Djärv <jan.h.d@swipnet.se>
6;; Maintainer: emacs-devel@gnu.org
7;; Keywords: window, drag, drop 6;; Keywords: window, drag, drop
8;; Package: emacs 7;; Package: emacs
9 8
diff --git a/src/alloc.c b/src/alloc.c
index af4adb3856e..5c5b56d02e9 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6384,7 +6384,7 @@ mark_object (Lisp_Object arg)
6384 do { \ 6384 do { \
6385 CHECK_ALLOCATED (); \ 6385 CHECK_ALLOCATED (); \
6386 CHECK_LIVE (LIVEP); \ 6386 CHECK_LIVE (LIVEP); \
6387 } while (0) \ 6387 } while (false)
6388 6388
6389 /* Check both of the above conditions, for symbols. */ 6389 /* Check both of the above conditions, for symbols. */
6390#define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \ 6390#define CHECK_ALLOCATED_AND_LIVE_SYMBOL() \
@@ -6394,7 +6394,7 @@ mark_object (Lisp_Object arg)
6394 CHECK_ALLOCATED (); \ 6394 CHECK_ALLOCATED (); \
6395 CHECK_LIVE (live_symbol_p); \ 6395 CHECK_LIVE (live_symbol_p); \
6396 } \ 6396 } \
6397 } while (0) \ 6397 } while (false)
6398 6398
6399#else /* not GC_CHECK_MARKED_OBJECTS */ 6399#else /* not GC_CHECK_MARKED_OBJECTS */
6400 6400
diff --git a/src/buffer.c b/src/buffer.c
index 3b5078a175b..209e29f0f19 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5603,17 +5603,17 @@ Use the command `abbrev-mode' to change this variable. */);
5603 doc: /* Non-nil if searches and matches should ignore case. */); 5603 doc: /* Non-nil if searches and matches should ignore case. */);
5604 5604
5605 DEFVAR_PER_BUFFER ("fill-column", &BVAR (current_buffer, fill_column), 5605 DEFVAR_PER_BUFFER ("fill-column", &BVAR (current_buffer, fill_column),
5606 Qfixnump, 5606 Qintegerp,
5607 doc: /* Column beyond which automatic line-wrapping should happen. 5607 doc: /* Column beyond which automatic line-wrapping should happen.
5608Interactively, you can set the buffer local value using \\[set-fill-column]. */); 5608Interactively, you can set the buffer local value using \\[set-fill-column]. */);
5609 5609
5610 DEFVAR_PER_BUFFER ("left-margin", &BVAR (current_buffer, left_margin), 5610 DEFVAR_PER_BUFFER ("left-margin", &BVAR (current_buffer, left_margin),
5611 Qfixnump, 5611 Qintegerp,
5612 doc: /* Column for the default `indent-line-function' to indent to. 5612 doc: /* Column for the default `indent-line-function' to indent to.
5613Linefeed indents to this column in Fundamental mode. */); 5613Linefeed indents to this column in Fundamental mode. */);
5614 5614
5615 DEFVAR_PER_BUFFER ("tab-width", &BVAR (current_buffer, tab_width), 5615 DEFVAR_PER_BUFFER ("tab-width", &BVAR (current_buffer, tab_width),
5616 Qfixnump, 5616 Qintegerp,
5617 doc: /* Distance between tab stops (for display of tab characters), in columns. 5617 doc: /* Distance between tab stops (for display of tab characters), in columns.
5618NOTE: This controls the display width of a TAB character, and not 5618NOTE: This controls the display width of a TAB character, and not
5619the size of an indentation step. 5619the size of an indentation step.
@@ -5784,7 +5784,7 @@ If it is nil, that means don't auto-save this buffer. */);
5784Backing up is done before the first time the file is saved. */); 5784Backing up is done before the first time the file is saved. */);
5785 5785
5786 DEFVAR_PER_BUFFER ("buffer-saved-size", &BVAR (current_buffer, save_length), 5786 DEFVAR_PER_BUFFER ("buffer-saved-size", &BVAR (current_buffer, save_length),
5787 Qfixnump, 5787 Qintegerp,
5788 doc: /* Length of current buffer when last read in, saved or auto-saved. 5788 doc: /* Length of current buffer when last read in, saved or auto-saved.
57890 initially. 57890 initially.
5790-1 means auto-saving turned off until next real save. 5790-1 means auto-saving turned off until next real save.
@@ -5858,7 +5858,7 @@ In addition, a char-table has six extra slots to control the display of:
5858See also the functions `display-table-slot' and `set-display-table-slot'. */); 5858See also the functions `display-table-slot' and `set-display-table-slot'. */);
5859 5859
5860 DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer, left_margin_cols), 5860 DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer, left_margin_cols),
5861 Qfixnump, 5861 Qintegerp,
5862 doc: /* Width in columns of left marginal area for display of a buffer. 5862 doc: /* Width in columns of left marginal area for display of a buffer.
5863A value of nil means no marginal area. 5863A value of nil means no marginal area.
5864 5864
@@ -5866,7 +5866,7 @@ Setting this variable does not take effect until a new buffer is displayed
5866in a window. To make the change take effect, call `set-window-buffer'. */); 5866in a window. To make the change take effect, call `set-window-buffer'. */);
5867 5867
5868 DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer, right_margin_cols), 5868 DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer, right_margin_cols),
5869 Qfixnump, 5869 Qintegerp,
5870 doc: /* Width in columns of right marginal area for display of a buffer. 5870 doc: /* Width in columns of right marginal area for display of a buffer.
5871A value of nil means no marginal area. 5871A value of nil means no marginal area.
5872 5872
@@ -5874,7 +5874,7 @@ Setting this variable does not take effect until a new buffer is displayed
5874in a window. To make the change take effect, call `set-window-buffer'. */); 5874in a window. To make the change take effect, call `set-window-buffer'. */);
5875 5875
5876 DEFVAR_PER_BUFFER ("left-fringe-width", &BVAR (current_buffer, left_fringe_width), 5876 DEFVAR_PER_BUFFER ("left-fringe-width", &BVAR (current_buffer, left_fringe_width),
5877 Qfixnump, 5877 Qintegerp,
5878 doc: /* Width of this buffer's left fringe (in pixels). 5878 doc: /* Width of this buffer's left fringe (in pixels).
5879A value of 0 means no left fringe is shown in this buffer's window. 5879A value of 0 means no left fringe is shown in this buffer's window.
5880A value of nil means to use the left fringe width from the window's frame. 5880A value of nil means to use the left fringe width from the window's frame.
@@ -5883,7 +5883,7 @@ Setting this variable does not take effect until a new buffer is displayed
5883in a window. To make the change take effect, call `set-window-buffer'. */); 5883in a window. To make the change take effect, call `set-window-buffer'. */);
5884 5884
5885 DEFVAR_PER_BUFFER ("right-fringe-width", &BVAR (current_buffer, right_fringe_width), 5885 DEFVAR_PER_BUFFER ("right-fringe-width", &BVAR (current_buffer, right_fringe_width),
5886 Qfixnump, 5886 Qintegerp,
5887 doc: /* Width of this buffer's right fringe (in pixels). 5887 doc: /* Width of this buffer's right fringe (in pixels).
5888A value of 0 means no right fringe is shown in this buffer's window. 5888A value of 0 means no right fringe is shown in this buffer's window.
5889A value of nil means to use the right fringe width from the window's frame. 5889A value of nil means to use the right fringe width from the window's frame.
@@ -5900,12 +5900,12 @@ Setting this variable does not take effect until a new buffer is displayed
5900in a window. To make the change take effect, call `set-window-buffer'. */); 5900in a window. To make the change take effect, call `set-window-buffer'. */);
5901 5901
5902 DEFVAR_PER_BUFFER ("scroll-bar-width", &BVAR (current_buffer, scroll_bar_width), 5902 DEFVAR_PER_BUFFER ("scroll-bar-width", &BVAR (current_buffer, scroll_bar_width),
5903 Qfixnump, 5903 Qintegerp,
5904 doc: /* Width of this buffer's vertical scroll bars in pixels. 5904 doc: /* Width of this buffer's vertical scroll bars in pixels.
5905A value of nil means to use the scroll bar width from the window's frame. */); 5905A value of nil means to use the scroll bar width from the window's frame. */);
5906 5906
5907 DEFVAR_PER_BUFFER ("scroll-bar-height", &BVAR (current_buffer, scroll_bar_height), 5907 DEFVAR_PER_BUFFER ("scroll-bar-height", &BVAR (current_buffer, scroll_bar_height),
5908 Qfixnump, 5908 Qintegerp,
5909 doc: /* Height of this buffer's horizontal scroll bars in pixels. 5909 doc: /* Height of this buffer's horizontal scroll bars in pixels.
5910A value of nil means to use the scroll bar height from the window's frame. */); 5910A value of nil means to use the scroll bar height from the window's frame. */);
5911 5911
@@ -6175,7 +6175,7 @@ Setting this variable is very fast, much faster than scanning all the text in
6175the buffer looking for properties to change. */); 6175the buffer looking for properties to change. */);
6176 6176
6177 DEFVAR_PER_BUFFER ("buffer-display-count", 6177 DEFVAR_PER_BUFFER ("buffer-display-count",
6178 &BVAR (current_buffer, display_count), Qfixnump, 6178 &BVAR (current_buffer, display_count), Qintegerp,
6179 doc: /* A number incremented each time this buffer is displayed in a window. 6179 doc: /* A number incremented each time this buffer is displayed in a window.
6180The function `set-window-buffer' increments it. */); 6180The function `set-window-buffer' increments it. */);
6181 6181
diff --git a/src/character.h b/src/character.h
index 5dff85aed47..cc57a2a7d5c 100644
--- a/src/character.h
+++ b/src/character.h
@@ -558,12 +558,13 @@ enum
558 558
559/* Return a non-outlandish value for the tab width. */ 559/* Return a non-outlandish value for the tab width. */
560 560
561#define SANE_TAB_WIDTH(buf) \ 561#define SANE_TAB_WIDTH(buf) sanitize_tab_width (BVAR (buf, tab_width))
562 sanitize_tab_width (XFIXNAT (BVAR (buf, tab_width))) 562
563INLINE int 563INLINE int
564sanitize_tab_width (EMACS_INT width) 564sanitize_tab_width (Lisp_Object width)
565{ 565{
566 return 0 < width && width <= 1000 ? width : 8; 566 return (FIXNUMP (width) && 0 < XFIXNUM (width) && XFIXNUM (width) <= 1000
567 ? XFIXNUM (width) : 8);
567} 568}
568 569
569/* Return the width of ASCII character C. The width is measured by 570/* Return the width of ASCII character C. The width is measured by
diff --git a/src/data.c b/src/data.c
index 476d28eadbc..c1699aeae73 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1122,20 +1122,21 @@ store_symval_forwarding (lispfwd valcontents, Lisp_Object newval,
1122 int offset = XBUFFER_OBJFWD (valcontents)->offset; 1122 int offset = XBUFFER_OBJFWD (valcontents)->offset;
1123 Lisp_Object predicate = XBUFFER_OBJFWD (valcontents)->predicate; 1123 Lisp_Object predicate = XBUFFER_OBJFWD (valcontents)->predicate;
1124 1124
1125 if (!NILP (newval)) 1125 if (!NILP (newval) && !NILP (predicate))
1126 { 1126 {
1127 if (SYMBOLP (predicate)) 1127 eassert (SYMBOLP (predicate));
1128 Lisp_Object choiceprop = Fget (predicate, Qchoice);
1129 if (!NILP (choiceprop))
1128 { 1130 {
1129 Lisp_Object prop; 1131 if (NILP (Fmemq (newval, choiceprop)))
1130 1132 wrong_choice (choiceprop, newval);
1131 if ((prop = Fget (predicate, Qchoice), !NILP (prop))) 1133 }
1132 { 1134 else
1133 if (NILP (Fmemq (newval, prop))) 1135 {
1134 wrong_choice (prop, newval); 1136 Lisp_Object rangeprop = Fget (predicate, Qrange);
1135 } 1137 if (CONSP (rangeprop))
1136 else if ((prop = Fget (predicate, Qrange), !NILP (prop)))
1137 { 1138 {
1138 Lisp_Object min = XCAR (prop), max = XCDR (prop); 1139 Lisp_Object min = XCAR (rangeprop), max = XCDR (rangeprop);
1139 if (! NUMBERP (newval) 1140 if (! NUMBERP (newval)
1140 || NILP (CALLN (Fleq, min, newval, max))) 1141 || NILP (CALLN (Fleq, min, newval, max)))
1141 wrong_range (min, max, newval); 1142 wrong_range (min, max, newval);
diff --git a/src/dispextern.h b/src/dispextern.h
index e86ea6a02ae..aa80fa653db 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -34,16 +34,45 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
34#ifdef HAVE_XRENDER 34#ifdef HAVE_XRENDER
35# include <X11/extensions/Xrender.h> 35# include <X11/extensions/Xrender.h>
36#endif 36#endif
37
38typedef XColor Emacs_Color;
39typedef Cursor Emacs_Cursor;
40#define No_Cursor (None)
41typedef Pixmap Emacs_Pixmap;
42typedef XRectangle Emacs_Rectangle;
43typedef XGCValues Emacs_GC;
37#else /* !HAVE_X_WINDOWS */ 44#else /* !HAVE_X_WINDOWS */
38 45
39/* X-related stuff used by non-X gui code. */ 46/* XColor-like struct used by non-X code. */
40 47
41typedef struct { 48typedef struct
49{
42 unsigned long pixel; 50 unsigned long pixel;
43 unsigned short red, green, blue; 51 unsigned short red, green, blue;
44 char flags; 52} Emacs_Color;
45 char pad; 53
46} XColor; 54/* Accommodate X's usage of None as a null resource ID. */
55#define No_Cursor (NULL)
56
57/* XRectangle-like struct used by non-X GUI code. */
58typedef struct
59{
60 int x, y;
61 unsigned width, height;
62} Emacs_Rectangle;
63
64/* XGCValues-like struct used by non-X GUI code. */
65typedef struct
66{
67 unsigned long foreground;
68 unsigned long background;
69} Emacs_GC;
70
71/* Mask values to select foreground/background. */
72/* FIXME: The GC handling in w32 really should be redesigned as to not
73 need these. */
74#define GCForeground 0x01
75#define GCBackground 0x02
47 76
48#endif /* HAVE_X_WINDOWS */ 77#endif /* HAVE_X_WINDOWS */
49 78
@@ -63,16 +92,16 @@ xstrcasecmp (char const *a, char const *b)
63#ifdef HAVE_X_WINDOWS 92#ifdef HAVE_X_WINDOWS
64#include <X11/Xresource.h> /* for XrmDatabase */ 93#include <X11/Xresource.h> /* for XrmDatabase */
65typedef struct x_display_info Display_Info; 94typedef struct x_display_info Display_Info;
66typedef XImage * XImagePtr; 95typedef XImage *Emacs_Pix_Container;
67typedef XImagePtr XImagePtr_or_DC; 96typedef XImage *Emacs_Pix_Context;
68#define NativeRectangle XRectangle 97#define NativeRectangle XRectangle
69#endif 98#endif
70 99
71#ifdef HAVE_NTGUI 100#ifdef HAVE_NTGUI
72#include "w32gui.h" 101#include "w32gui.h"
73typedef struct w32_display_info Display_Info; 102typedef struct w32_display_info Display_Info;
74typedef XImage *XImagePtr; 103typedef XImage *Emacs_Pix_Container;
75typedef HDC XImagePtr_or_DC; 104typedef HDC Emacs_Pix_Context;
76#endif 105#endif
77 106
78#ifdef HAVE_NS 107#ifdef HAVE_NS
@@ -80,8 +109,8 @@ typedef HDC XImagePtr_or_DC;
80#define FACE_COLOR_TO_PIXEL(face_color, frame) ns_color_index_to_rgba(face_color, frame) 109#define FACE_COLOR_TO_PIXEL(face_color, frame) ns_color_index_to_rgba(face_color, frame)
81/* Following typedef needed to accommodate the MSDOS port, believe it or not. */ 110/* Following typedef needed to accommodate the MSDOS port, believe it or not. */
82typedef struct ns_display_info Display_Info; 111typedef struct ns_display_info Display_Info;
83typedef Pixmap XImagePtr; 112typedef Emacs_Pixmap Emacs_Pix_Container;
84typedef XImagePtr XImagePtr_or_DC; 113typedef Emacs_Pixmap Emacs_Pix_Context;
85#else 114#else
86#define FACE_COLOR_TO_PIXEL(face_color, frame) face_color 115#define FACE_COLOR_TO_PIXEL(face_color, frame) face_color
87#endif 116#endif
@@ -92,8 +121,7 @@ typedef XImagePtr XImagePtr_or_DC;
92#endif 121#endif
93 122
94#ifndef HAVE_WINDOW_SYSTEM 123#ifndef HAVE_WINDOW_SYSTEM
95typedef int Cursor; 124typedef void *Emacs_Cursor;
96#define No_Cursor (0)
97#endif 125#endif
98 126
99#ifndef NativeRectangle 127#ifndef NativeRectangle
@@ -1040,7 +1068,7 @@ struct glyph_row
1040#ifdef HAVE_WINDOW_SYSTEM 1068#ifdef HAVE_WINDOW_SYSTEM
1041 /* Non-NULL means the current clipping area. This is temporarily 1069 /* Non-NULL means the current clipping area. This is temporarily
1042 set while exposing a region. Coordinates are frame-relative. */ 1070 set while exposing a region. Coordinates are frame-relative. */
1043 XRectangle *clip; 1071 const Emacs_Rectangle *clip;
1044#endif 1072#endif
1045}; 1073};
1046 1074
@@ -1289,7 +1317,7 @@ struct glyph_string
1289 enum glyph_row_area area; 1317 enum glyph_row_area area;
1290 1318
1291 /* Characters to be drawn, and number of characters. */ 1319 /* Characters to be drawn, and number of characters. */
1292 XChar2b *char2b; 1320 unsigned *char2b;
1293 int nchars; 1321 int nchars;
1294 1322
1295 /* A face-override for drawing cursors, mouse face and similar. */ 1323 /* A face-override for drawing cursors, mouse face and similar. */
@@ -1350,7 +1378,7 @@ struct glyph_string
1350 GC gc; 1378 GC gc;
1351#endif 1379#endif
1352#if defined (HAVE_NTGUI) 1380#if defined (HAVE_NTGUI)
1353 XGCValues *gc; 1381 Emacs_GC *gc;
1354 HDC hdc; 1382 HDC hdc;
1355#endif 1383#endif
1356 1384
@@ -1592,8 +1620,11 @@ struct face
1592 1620
1593 /* If non-zero, this is a GC that we can use without modification for 1621 /* If non-zero, this is a GC that we can use without modification for
1594 drawing the characters in this face. */ 1622 drawing the characters in this face. */
1623# ifdef HAVE_X_WINDOWS
1595 GC gc; 1624 GC gc;
1596 1625# else
1626 Emacs_GC *gc;
1627# endif
1597 /* Background stipple or bitmap used for this face. This is 1628 /* Background stipple or bitmap used for this face. This is
1598 an id as returned from load_pixmap. */ 1629 an id as returned from load_pixmap. */
1599 ptrdiff_t stipple; 1630 ptrdiff_t stipple;
@@ -2888,7 +2919,7 @@ struct redisplay_interface
2888 void (*draw_glyph_string) (struct glyph_string *s); 2919 void (*draw_glyph_string) (struct glyph_string *s);
2889 2920
2890 /* Define cursor CURSOR on frame F. */ 2921 /* Define cursor CURSOR on frame F. */
2891 void (*define_frame_cursor) (struct frame *f, Cursor cursor); 2922 void (*define_frame_cursor) (struct frame *f, Emacs_Cursor cursor);
2892 2923
2893 /* Clear the area at (X,Y,WIDTH,HEIGHT) of frame F. */ 2924 /* Clear the area at (X,Y,WIDTH,HEIGHT) of frame F. */
2894 void (*clear_frame_area) (struct frame *f, int x, int y, 2925 void (*clear_frame_area) (struct frame *f, int x, int y,
@@ -2955,7 +2986,7 @@ struct image
2955 struct timespec timestamp; 2986 struct timespec timestamp;
2956 2987
2957 /* Pixmaps of the image. */ 2988 /* Pixmaps of the image. */
2958 Pixmap pixmap, mask; 2989 Emacs_Pixmap pixmap, mask;
2959 2990
2960#ifdef USE_CAIRO 2991#ifdef USE_CAIRO
2961 void *cr_data; 2992 void *cr_data;
@@ -2965,7 +2996,7 @@ struct image
2965 Non-NULL means it and its Pixmap counterpart may be out of sync 2996 Non-NULL means it and its Pixmap counterpart may be out of sync
2966 and the latter is outdated. NULL means the X image has been 2997 and the latter is outdated. NULL means the X image has been
2967 synchronized to Pixmap. */ 2998 synchronized to Pixmap. */
2968 XImagePtr ximg, mask_img; 2999 XImage *ximg, *mask_img;
2969 3000
2970# ifdef HAVE_NATIVE_SCALING 3001# ifdef HAVE_NATIVE_SCALING
2971 /* Picture versions of pixmap and mask for compositing. */ 3002 /* Picture versions of pixmap and mask for compositing. */
@@ -3311,7 +3342,9 @@ extern void handle_tool_bar_click (struct frame *,
3311 int, int, bool, int); 3342 int, int, bool, int);
3312 3343
3313extern void expose_frame (struct frame *, int, int, int, int); 3344extern void expose_frame (struct frame *, int, int, int, int);
3314extern bool gui_intersect_rectangles (XRectangle *, XRectangle *, XRectangle *); 3345extern bool gui_intersect_rectangles (const Emacs_Rectangle *,
3346 const Emacs_Rectangle *,
3347 Emacs_Rectangle *);
3315#endif /* HAVE_WINDOW_SYSTEM */ 3348#endif /* HAVE_WINDOW_SYSTEM */
3316 3349
3317extern void note_mouse_highlight (struct frame *, int, int); 3350extern void note_mouse_highlight (struct frame *, int, int);
@@ -3363,10 +3396,10 @@ extern void image_destroy_bitmap (struct frame *, ptrdiff_t);
3363extern void image_destroy_all_bitmaps (Display_Info *); 3396extern void image_destroy_all_bitmaps (Display_Info *);
3364#ifdef HAVE_X_WINDOWS 3397#ifdef HAVE_X_WINDOWS
3365extern void x_create_bitmap_mask (struct frame *, ptrdiff_t); 3398extern void x_create_bitmap_mask (struct frame *, ptrdiff_t);
3399extern void x_kill_gs_process (Pixmap, struct frame *);
3366#endif 3400#endif
3367extern Lisp_Object image_find_image_file (Lisp_Object); 3401extern Lisp_Object image_find_image_file (Lisp_Object);
3368 3402
3369void x_kill_gs_process (Pixmap, struct frame *);
3370struct image_cache *make_image_cache (void); 3403struct image_cache *make_image_cache (void);
3371void free_image_cache (struct frame *); 3404void free_image_cache (struct frame *);
3372void clear_image_caches (Lisp_Object); 3405void clear_image_caches (Lisp_Object);
@@ -3384,9 +3417,9 @@ ptrdiff_t lookup_image (struct frame *, Lisp_Object);
3384#endif 3417#endif
3385 3418
3386RGB_PIXEL_COLOR image_background (struct image *, struct frame *, 3419RGB_PIXEL_COLOR image_background (struct image *, struct frame *,
3387 XImagePtr_or_DC ximg); 3420 Emacs_Pix_Context img);
3388int image_background_transparent (struct image *, struct frame *, 3421int image_background_transparent (struct image *, struct frame *,
3389 XImagePtr_or_DC mask); 3422 Emacs_Pix_Context mask);
3390 3423
3391int image_ascent (struct image *, struct face *, struct glyph_slice *); 3424int image_ascent (struct image *, struct face *, struct glyph_slice *);
3392 3425
@@ -3410,8 +3443,8 @@ void x_free_colors (struct frame *, unsigned long *, int);
3410 3443
3411void update_face_from_frame_parameter (struct frame *, Lisp_Object, 3444void update_face_from_frame_parameter (struct frame *, Lisp_Object,
3412 Lisp_Object); 3445 Lisp_Object);
3413extern bool tty_defined_color (struct frame *f, const char *, XColor *, bool, 3446extern bool tty_defined_color (struct frame *, const char *, Emacs_Color *,
3414 bool); 3447 bool, bool);
3415 3448
3416Lisp_Object tty_color_name (struct frame *, int); 3449Lisp_Object tty_color_name (struct frame *, int);
3417void clear_face_cache (bool); 3450void clear_face_cache (bool);
diff --git a/src/eval.c b/src/eval.c
index 567c32e0d75..5bba8766373 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -544,8 +544,8 @@ usage: (quote ARG) */)
544 544
545DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0, 545DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0,
546 doc: /* Like `quote', but preferred for objects which are functions. 546 doc: /* Like `quote', but preferred for objects which are functions.
547In byte compilation, `function' causes its argument to be compiled. 547In byte compilation, `function' causes its argument to be handled by
548`quote' cannot do that. 548the byte compiler. `quote' cannot do that.
549usage: (function ARG) */) 549usage: (function ARG) */)
550 (Lisp_Object args) 550 (Lisp_Object args)
551{ 551{
diff --git a/src/fileio.c b/src/fileio.c
index 4ee125d7de2..9e9779967dd 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5802,6 +5802,7 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
5802 && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b) 5802 && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)
5803 && BUF_AUTOSAVE_MODIFF (b) < BUF_MODIFF (b) 5803 && BUF_AUTOSAVE_MODIFF (b) < BUF_MODIFF (b)
5804 /* -1 means we've turned off autosaving for a while--see below. */ 5804 /* -1 means we've turned off autosaving for a while--see below. */
5805 && FIXNUMP (BVAR (b, save_length))
5805 && XFIXNUM (BVAR (b, save_length)) >= 0 5806 && XFIXNUM (BVAR (b, save_length)) >= 0
5806 && (do_handled_files 5807 && (do_handled_files
5807 || NILP (Ffind_file_name_handler (BVAR (b, auto_save_file_name), 5808 || NILP (Ffind_file_name_handler (BVAR (b, auto_save_file_name),
@@ -5815,13 +5816,17 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
5815 && before_time.tv_sec - b->auto_save_failure_time < 1200) 5816 && before_time.tv_sec - b->auto_save_failure_time < 1200)
5816 continue; 5817 continue;
5817 5818
5819 enum { growth_factor = 4 };
5820 verify (BUF_BYTES_MAX <= EMACS_INT_MAX / growth_factor);
5821
5818 set_buffer_internal (b); 5822 set_buffer_internal (b);
5819 if (NILP (Vauto_save_include_big_deletions) 5823 if (NILP (Vauto_save_include_big_deletions)
5820 && (XFIXNAT (BVAR (b, save_length)) * 10 5824 && FIXNUMP (BVAR (b, save_length))
5821 > (BUF_Z (b) - BUF_BEG (b)) * 13)
5822 /* A short file is likely to change a large fraction; 5825 /* A short file is likely to change a large fraction;
5823 spare the user annoying messages. */ 5826 spare the user annoying messages. */
5824 && XFIXNAT (BVAR (b, save_length)) > 5000 5827 && XFIXNAT (BVAR (b, save_length)) > 5000
5828 && (growth_factor * (BUF_Z (b) - BUF_BEG (b))
5829 < (growth_factor - 1) * XFIXNAT (BVAR (b, save_length)))
5825 /* These messages are frequent and annoying for `*mail*'. */ 5830 /* These messages are frequent and annoying for `*mail*'. */
5826 && !NILP (BVAR (b, filename)) 5831 && !NILP (BVAR (b, filename))
5827 && NILP (no_message)) 5832 && NILP (no_message))
diff --git a/src/fns.c b/src/fns.c
index c3202495daf..6b1f7331f55 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1131,10 +1131,8 @@ string the same way whether it is unibyte or multibyte.) */)
1131DEFUN ("string-make-unibyte", Fstring_make_unibyte, Sstring_make_unibyte, 1131DEFUN ("string-make-unibyte", Fstring_make_unibyte, Sstring_make_unibyte,
1132 1, 1, 0, 1132 1, 1, 0,
1133 doc: /* Return the unibyte equivalent of STRING. 1133 doc: /* Return the unibyte equivalent of STRING.
1134Multibyte character codes are converted to unibyte according to 1134Multibyte character codes above 255 are converted to unibyte
1135`nonascii-translation-table' or, if that is nil, `nonascii-insert-offset'. 1135by taking just the low 8 bits of each character's code. */)
1136If the lookup in the translation table fails, this function takes just
1137the low 8 bits of each character. */)
1138 (Lisp_Object string) 1136 (Lisp_Object string)
1139{ 1137{
1140 CHECK_STRING (string); 1138 CHECK_STRING (string);
diff --git a/src/font.h b/src/font.h
index 3720650a2e1..9ca0c97dc52 100644
--- a/src/font.h
+++ b/src/font.h
@@ -647,7 +647,7 @@ struct font_driver
647 the font FONT and the sequence of glyph codes CODE, and store the 647 the font FONT and the sequence of glyph codes CODE, and store the
648 result in METRICS. */ 648 result in METRICS. */
649 void (*text_extents) (struct font *font, 649 void (*text_extents) (struct font *font,
650 unsigned *code, int nglyphs, 650 const unsigned *code, int nglyphs,
651 struct font_metrics *metrics); 651 struct font_metrics *metrics);
652 652
653#ifdef HAVE_WINDOW_SYSTEM 653#ifdef HAVE_WINDOW_SYSTEM
@@ -894,7 +894,7 @@ extern Lisp_Object ftfont_shape (Lisp_Object);
894extern unsigned ftfont_encode_char (struct font *, int); 894extern unsigned ftfont_encode_char (struct font *, int);
895extern void ftfont_close (struct font *); 895extern void ftfont_close (struct font *);
896extern void ftfont_filter_properties (Lisp_Object, Lisp_Object); 896extern void ftfont_filter_properties (Lisp_Object, Lisp_Object);
897extern void ftfont_text_extents (struct font *, unsigned *, int, 897extern void ftfont_text_extents (struct font *, const unsigned *, int,
898 struct font_metrics *); 898 struct font_metrics *);
899extern void syms_of_ftfont (void); 899extern void syms_of_ftfont (void);
900#endif /* HAVE_FREETYPE */ 900#endif /* HAVE_FREETYPE */
diff --git a/src/frame.h b/src/frame.h
index b8aed823afb..fa45a32d6b6 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -1480,7 +1480,7 @@ FRAME_BOTTOM_DIVIDER_WIDTH (struct frame *f)
1480 - FRAME_TOTAL_FRINGE_WIDTH (f) \ 1480 - FRAME_TOTAL_FRINGE_WIDTH (f) \
1481 - FRAME_SCROLL_BAR_AREA_WIDTH (f) \ 1481 - FRAME_SCROLL_BAR_AREA_WIDTH (f) \
1482 - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)) \ 1482 - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)) \
1483 / FRAME_COLUMN_WIDTH (f)) \ 1483 / FRAME_COLUMN_WIDTH (f))
1484 1484
1485#define FRAME_PIXEL_HEIGHT_TO_TEXT_LINES(f, height) \ 1485#define FRAME_PIXEL_HEIGHT_TO_TEXT_LINES(f, height) \
1486 (((height) \ 1486 (((height) \
@@ -1626,7 +1626,7 @@ flush_frame (struct frame *f)
1626#ifdef HAVE_WINDOW_SYSTEM 1626#ifdef HAVE_WINDOW_SYSTEM
1627 1627
1628struct MonitorInfo { 1628struct MonitorInfo {
1629 XRectangle geom, work; 1629 Emacs_Rectangle geom, work;
1630 int mm_width, mm_height; 1630 int mm_width, mm_height;
1631 char *name; 1631 char *name;
1632}; 1632};
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index e7c73eac4d3..9686cec0e8c 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -79,7 +79,6 @@ ftcrfont_glyph_extents (struct font *font,
79 cairo_glyph_t cr_glyph = {.index = glyph}; 79 cairo_glyph_t cr_glyph = {.index = glyph};
80 cairo_text_extents_t extents; 80 cairo_text_extents_t extents;
81 81
82 FT_Activate_Size (ftcrfont_info->ft_size_draw);
83 cairo_scaled_font_glyph_extents (ftcrfont_info->cr_scaled_font, 82 cairo_scaled_font_glyph_extents (ftcrfont_info->cr_scaled_font,
84 &cr_glyph, 1, &extents); 83 &cr_glyph, 1, &extents);
85 cache->lbearing = floor (extents.x_bearing); 84 cache->lbearing = floor (extents.x_bearing);
@@ -118,103 +117,159 @@ ftcrfont_match (struct frame *f, Lisp_Object spec)
118static Lisp_Object 117static Lisp_Object
119ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 118ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
120{ 119{
121 Lisp_Object font_object; 120 FcResult result;
122 121 Lisp_Object val, filename, font_object;
123 FT_UInt size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX)); 122 FcPattern *pat, *match;
123 struct font_info *ftcrfont_info;
124 struct font *font;
125 double size = 0;
126 cairo_font_face_t *font_face;
127 cairo_font_extents_t extents;
128 FT_Face ft_face;
129 FcMatrix *matrix;
130
131 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX));
132 if (! CONSP (val))
133 return Qnil;
134 val = XCDR (val);
135 filename = XCAR (val);
136 size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX));
124 if (size == 0) 137 if (size == 0)
125 size = pixel_size; 138 size = pixel_size;
139
140 block_input ();
141
142 pat = ftfont_entity_pattern (entity, pixel_size);
143 FcConfigSubstitute (NULL, pat, FcMatchPattern);
144 FcDefaultSubstitute (pat);
145 match = FcFontMatch (NULL, pat, &result);
146 ftfont_fix_match (pat, match);
147
148 FcPatternDestroy (pat);
149 font_face = cairo_ft_font_face_create_for_pattern (match);
150 if (!font_face)
151 {
152 unblock_input ();
153 FcPatternDestroy (match);
154 return Qnil;
155 }
156 cairo_matrix_t font_matrix, ctm;
157 cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size);
158 cairo_matrix_init_identity (&ctm);
159 cairo_font_options_t *options = cairo_font_options_create ();
160 cairo_scaled_font_t *scaled_font
161 = cairo_scaled_font_create (font_face, &font_matrix, &ctm, options);
162 cairo_font_face_destroy (font_face);
163 cairo_font_options_destroy (options);
164 unblock_input ();
165
126 font_object = font_build_object (VECSIZE (struct font_info), 166 font_object = font_build_object (VECSIZE (struct font_info),
127 Qftcr, entity, size); 167 Qftcr, entity, size);
168 ASET (font_object, FONT_FILE_INDEX, filename);
169 font = XFONT_OBJECT (font_object);
170 font->pixel_size = size;
171 font->driver = &ftcrfont_driver;
172 font->encoding_charset = font->repertory_charset = -1;
173
174 ftcrfont_info = (struct font_info *) font;
175 ftcrfont_info->cr_scaled_font = scaled_font;
176
177 /* This means that there's no need of transformation. */
178 ftcrfont_info->matrix.xx = 0;
179 if (FcPatternGetMatrix (match, FC_MATRIX, 0, &matrix) == FcResultMatch)
180 {
181 ftcrfont_info->matrix.xx = 0x10000L * matrix->xx;
182 ftcrfont_info->matrix.yy = 0x10000L * matrix->yy;
183 ftcrfont_info->matrix.xy = 0x10000L * matrix->xy;
184 ftcrfont_info->matrix.yx = 0x10000L * matrix->yx;
185 }
186
187 ftcrfont_info->metrics = NULL;
188 ftcrfont_info->metrics_nrows = 0;
189
128 block_input (); 190 block_input ();
129 font_object = ftfont_open2 (f, entity, pixel_size, font_object); 191 cairo_glyph_t stack_glyph;
130 if (FONT_OBJECT_P (font_object)) 192 int n = 0;
193 font->min_width = font->average_width = font->space_width = 0;
194 for (char c = 32; c < 127; c++)
131 { 195 {
132 struct font *font = XFONT_OBJECT (font_object); 196 cairo_glyph_t *glyphs = &stack_glyph;
133 struct font_info *ftcrfont_info = (struct font_info *) font; 197 int num_glyphs = 1;
134 FT_Face ft_face = ftcrfont_info->ft_size->face; 198 cairo_status_t status =
135 199 cairo_scaled_font_text_to_glyphs (ftcrfont_info->cr_scaled_font,
136 font->driver = &ftcrfont_driver; 200 0, 0, &c, 1, &glyphs, &num_glyphs,
137 FT_New_Size (ft_face, &ftcrfont_info->ft_size_draw); 201 NULL, NULL, NULL);
138 FT_Activate_Size (ftcrfont_info->ft_size_draw); 202
139 if (ftcrfont_info->bitmap_strike_index < 0) 203 if (status == CAIRO_STATUS_SUCCESS)
140 FT_Set_Pixel_Sizes (ft_face, 0, font->pixel_size);
141 else
142 FT_Select_Size (ft_face, ftcrfont_info->bitmap_strike_index);
143 cairo_font_face_t *font_face =
144 cairo_ft_font_face_create_for_ft_face (ft_face, 0);
145 cairo_matrix_t font_matrix, ctm;
146 cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size);
147 cairo_matrix_init_identity (&ctm);
148 cairo_font_options_t *options = cairo_font_options_create ();
149 ftcrfont_info->cr_scaled_font =
150 cairo_scaled_font_create (font_face, &font_matrix, &ctm, options);
151 cairo_font_face_destroy (font_face);
152 cairo_font_options_destroy (options);
153 ftcrfont_info->metrics = NULL;
154 ftcrfont_info->metrics_nrows = 0;
155 if (ftcrfont_info->bitmap_strike_index >= 0)
156 { 204 {
157 /* Several members of struct font/font_info set by 205 if (glyphs != &stack_glyph)
158 ftfont_open2 are bogus. Recalculate them with cairo 206 cairo_glyph_free (glyphs);
159 scaled font functions. */ 207 else if (stack_glyph.index)
160 cairo_font_extents_t extents;
161 cairo_scaled_font_extents (ftcrfont_info->cr_scaled_font, &extents);
162 font->ascent = lround (extents.ascent);
163 Lisp_Object val = assq_no_quit (QCminspace,
164 AREF (entity, FONT_EXTRA_INDEX));
165 if (!(CONSP (val) && NILP (XCDR (val))))
166 {
167 font->descent = lround (extents.descent);
168 font->height = font->ascent + font->descent;
169 }
170 else
171 { 208 {
172 font->height = lround (extents.height); 209 int this_width = ftcrfont_glyph_extents (font, stack_glyph.index,
173 font->descent = font->height - font->ascent; 210 NULL);
211
212 if (this_width > 0
213 && (! font->min_width
214 || font->min_width > this_width))
215 font->min_width = this_width;
216 if (c == 32)
217 font->space_width = this_width;
218 font->average_width += this_width;
219 n++;
174 } 220 }
221 }
222 }
223 if (n > 0)
224 font->average_width /= n;
175 225
176 cairo_glyph_t stack_glyph; 226 cairo_scaled_font_extents (ftcrfont_info->cr_scaled_font, &extents);
177 int n = 0; 227 font->ascent = lround (extents.ascent);
178 font->min_width = font->average_width = font->space_width = 0; 228 val = assq_no_quit (QCminspace, AREF (entity, FONT_EXTRA_INDEX));
179 for (char c = 32; c < 127; c++) 229 if (!(CONSP (val) && NILP (XCDR (val))))
180 { 230 {
181 cairo_glyph_t *glyphs = &stack_glyph; 231 font->descent = lround (extents.descent);
182 int num_glyphs = 1; 232 font->height = font->ascent + font->descent;
183 cairo_status_t status = 233 }
184 cairo_scaled_font_text_to_glyphs (ftcrfont_info->cr_scaled_font, 234 else
185 0, 0, &c, 1, 235 {
186 &glyphs, &num_glyphs, 236 font->height = lround (extents.height);
187 NULL, NULL, NULL); 237 font->descent = font->height - font->ascent;
188 238 }
189 if (status == CAIRO_STATUS_SUCCESS)
190 {
191 if (glyphs != &stack_glyph)
192 cairo_glyph_free (glyphs);
193 else
194 {
195 int this_width =
196 ftcrfont_glyph_extents (font, stack_glyph.index, NULL);
197
198 if (this_width > 0
199 && (! font->min_width
200 || font->min_width > this_width))
201 font->min_width = this_width;
202 if (c == 32)
203 font->space_width = this_width;
204 font->average_width += this_width;
205 n++;
206 }
207 }
208 }
209 if (n > 0)
210 font->average_width /= n;
211 239
212 font->underline_position = -1; 240 ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
213 font->underline_thickness = 0; 241 if (XFIXNUM (AREF (entity, FONT_SIZE_INDEX)) == 0)
214 } 242 {
243 int upEM = ft_face->units_per_EM;
244
245 font->underline_position = -ft_face->underline_position * size / upEM;
246 font->underline_thickness = ft_face->underline_thickness * size / upEM;
247 if (font->underline_thickness > 2)
248 font->underline_position -= font->underline_thickness / 2;
249 }
250 else
251 {
252 font->underline_position = -1;
253 font->underline_thickness = 0;
215 } 254 }
255#ifdef HAVE_LIBOTF
256 ftcrfont_info->maybe_otf = (ft_face->face_flags & FT_FACE_FLAG_SFNT) != 0;
257 ftcrfont_info->otf = NULL;
258#endif /* HAVE_LIBOTF */
259 if (ft_face->units_per_EM)
260 ftcrfont_info->bitmap_position_unit = 0;
261 else
262 ftcrfont_info->bitmap_position_unit = (extents.height
263 / ft_face->size->metrics.height);
264 cairo_ft_scaled_font_unlock_face (scaled_font);
265 ftcrfont_info->ft_size = NULL;
216 unblock_input (); 266 unblock_input ();
217 267
268 font->baseline_offset = 0;
269 font->relative_compose = 0;
270 font->default_ascent = 0;
271 font->vertical_centering = false;
272
218 return font_object; 273 return font_object;
219} 274}
220 275
@@ -225,24 +280,63 @@ ftcrfont_close (struct font *font)
225 return; 280 return;
226 281
227 struct font_info *ftcrfont_info = (struct font_info *) font; 282 struct font_info *ftcrfont_info = (struct font_info *) font;
228 int i;
229 283
230 block_input (); 284 block_input ();
231 for (i = 0; i < ftcrfont_info->metrics_nrows; i++) 285#ifdef HAVE_LIBOTF
286 if (ftcrfont_info->otf)
287 {
288 OTF_close (ftcrfont_info->otf);
289 ftcrfont_info->otf = NULL;
290 }
291#endif
292 for (int i = 0; i < ftcrfont_info->metrics_nrows; i++)
232 if (ftcrfont_info->metrics[i]) 293 if (ftcrfont_info->metrics[i])
233 xfree (ftcrfont_info->metrics[i]); 294 xfree (ftcrfont_info->metrics[i]);
234 if (ftcrfont_info->metrics) 295 if (ftcrfont_info->metrics)
235 xfree (ftcrfont_info->metrics); 296 xfree (ftcrfont_info->metrics);
236 FT_Done_Size (ftcrfont_info->ft_size_draw);
237 cairo_scaled_font_destroy (ftcrfont_info->cr_scaled_font); 297 cairo_scaled_font_destroy (ftcrfont_info->cr_scaled_font);
238 unblock_input (); 298 unblock_input ();
299}
300
301static int
302ftcrfont_has_char (Lisp_Object font, int c)
303{
304 if (FONT_ENTITY_P (font))
305 return ftfont_has_char (font, c);
239 306
240 ftfont_close (font); 307 return -1;
308}
309
310static unsigned
311ftcrfont_encode_char (struct font *font, int c)
312{
313 struct font_info *ftcrfont_info = (struct font_info *) font;
314 unsigned code = FONT_INVALID_CODE;
315 unsigned char utf8[MAX_MULTIBYTE_LENGTH];
316 unsigned char *p = utf8;
317 cairo_glyph_t stack_glyph;
318 cairo_glyph_t *glyphs = &stack_glyph;
319 int num_glyphs = 1;
320
321 CHAR_STRING_ADVANCE (c, p);
322 if (cairo_scaled_font_text_to_glyphs (ftcrfont_info->cr_scaled_font, 0, 0,
323 (char *) utf8, p - utf8,
324 &glyphs, &num_glyphs,
325 NULL, NULL, NULL)
326 == CAIRO_STATUS_SUCCESS)
327 {
328 if (glyphs != &stack_glyph)
329 cairo_glyph_free (glyphs);
330 else if (stack_glyph.index)
331 code = stack_glyph.index;
332 }
333
334 return code;
241} 335}
242 336
243static void 337static void
244ftcrfont_text_extents (struct font *font, 338ftcrfont_text_extents (struct font *font,
245 unsigned *code, 339 const unsigned *code,
246 int nglyphs, 340 int nglyphs,
247 struct font_metrics *metrics) 341 struct font_metrics *metrics)
248{ 342{
@@ -280,10 +374,18 @@ ftcrfont_get_bitmap (struct font *font, unsigned int code,
280{ 374{
281 struct font_info *ftcrfont_info = (struct font_info *) font; 375 struct font_info *ftcrfont_info = (struct font_info *) font;
282 376
283 if (ftcrfont_info->bitmap_strike_index < 0) 377 if (ftcrfont_info->bitmap_position_unit)
284 return ftfont_get_bitmap (font, code, bitmap, bits_per_pixel); 378 return -1;
285 379
286 return -1; 380 cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
381 FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
382
383 ftcrfont_info->ft_size = ft_face->size;
384 int result = ftfont_get_bitmap (font, code, bitmap, bits_per_pixel);
385 cairo_ft_scaled_font_unlock_face (scaled_font);
386 ftcrfont_info->ft_size = NULL;
387
388 return result;
287} 389}
288 390
289static int 391static int
@@ -292,25 +394,75 @@ ftcrfont_anchor_point (struct font *font, unsigned int code, int idx,
292{ 394{
293 struct font_info *ftcrfont_info = (struct font_info *) font; 395 struct font_info *ftcrfont_info = (struct font_info *) font;
294 396
295 if (ftcrfont_info->bitmap_strike_index < 0) 397 if (ftcrfont_info->bitmap_position_unit)
296 return ftfont_anchor_point (font, code, idx, x, y); 398 return -1;
297 399
298 return -1; 400 cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
401 FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
402
403 ftcrfont_info->ft_size = ft_face->size;
404 int result = ftfont_anchor_point (font, code, idx, x, y);
405 cairo_ft_scaled_font_unlock_face (scaled_font);
406 ftcrfont_info->ft_size = NULL;
407
408 return result;
299} 409}
300 410
411#ifdef HAVE_LIBOTF
301static Lisp_Object 412static Lisp_Object
302ftcrfont_shape (Lisp_Object lgstring) 413ftcrfont_otf_capability (struct font *font)
303{ 414{
415 struct font_info *ftcrfont_info = (struct font_info *) font;
416 cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
417 FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
418
419 ftcrfont_info->ft_size = ft_face->size;
420 Lisp_Object result = ftfont_otf_capability (font);
421 cairo_ft_scaled_font_unlock_face (scaled_font);
422 ftcrfont_info->ft_size = NULL;
423
424 return result;
425}
426#endif
427
304#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF 428#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
429static Lisp_Object
430ftcrfont_shape (Lisp_Object lgstring)
431{
305 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); 432 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
306 struct font_info *ftcrfont_info = (struct font_info *) font; 433 struct font_info *ftcrfont_info = (struct font_info *) font;
307 434
308 if (ftcrfont_info->bitmap_strike_index < 0) 435 if (ftcrfont_info->bitmap_position_unit)
309 return ftfont_shape (lgstring); 436 return make_fixnum (0);
437
438 cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
439 FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
440
441 ftcrfont_info->ft_size = ft_face->size;
442 Lisp_Object result = ftfont_shape (lgstring);
443 cairo_ft_scaled_font_unlock_face (scaled_font);
444 ftcrfont_info->ft_size = NULL;
445
446 return result;
447}
310#endif 448#endif
311 449
312 return make_fixnum (0); 450#ifdef HAVE_OTF_GET_VARIATION_GLYPHS
451static int
452ftcrfont_variation_glyphs (struct font *font, int c, unsigned variations[256])
453{
454 struct font_info *ftcrfont_info = (struct font_info *) font;
455 cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
456 FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
457
458 ftcrfont_info->ft_size = ft_face->size;
459 int result = ftfont_variation_glyphs (font, c, variations);
460 cairo_ft_scaled_font_unlock_face (scaled_font);
461 ftcrfont_info->ft_size = NULL;
462
463 return result;
313} 464}
465#endif /* HAVE_OTF_GET_VARIATION_GLYPHS */
314 466
315static int 467static int
316ftcrfont_draw (struct glyph_string *s, 468ftcrfont_draw (struct glyph_string *s,
@@ -321,8 +473,6 @@ ftcrfont_draw (struct glyph_string *s,
321 struct font_info *ftcrfont_info = (struct font_info *) s->font; 473 struct font_info *ftcrfont_info = (struct font_info *) s->font;
322 cairo_t *cr; 474 cairo_t *cr;
323 cairo_glyph_t *glyphs; 475 cairo_glyph_t *glyphs;
324 cairo_surface_t *surface;
325 cairo_surface_type_t surface_type;
326 int len = to - from; 476 int len = to - from;
327 int i; 477 int i;
328 478
@@ -341,28 +491,17 @@ ftcrfont_draw (struct glyph_string *s,
341 glyphs = alloca (sizeof (cairo_glyph_t) * len); 491 glyphs = alloca (sizeof (cairo_glyph_t) * len);
342 for (i = 0; i < len; i++) 492 for (i = 0; i < len; i++)
343 { 493 {
344 unsigned code = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8) 494 glyphs[i].index = s->char2b[from + i];
345 | XCHAR2B_BYTE2 (s->char2b + from + i));
346
347 glyphs[i].index = code;
348 glyphs[i].x = x; 495 glyphs[i].x = x;
349 glyphs[i].y = y; 496 glyphs[i].y = y;
350 x += (s->padding_p ? 1 : ftcrfont_glyph_extents (s->font, code, NULL)); 497 x += (s->padding_p ? 1 : ftcrfont_glyph_extents (s->font,
498 glyphs[i].index,
499 NULL));
351 } 500 }
352 501
353 x_set_cr_source_with_gc_foreground (f, s->gc); 502 x_set_cr_source_with_gc_foreground (f, s->gc);
354 cairo_set_scaled_font (cr, ftcrfont_info->cr_scaled_font); 503 cairo_set_scaled_font (cr, ftcrfont_info->cr_scaled_font);
355
356 FT_Activate_Size (ftcrfont_info->ft_size_draw);
357 cairo_show_glyphs (cr, glyphs, len); 504 cairo_show_glyphs (cr, glyphs, len);
358 surface = cairo_get_target (cr);
359 /* XXX: It used to be necessary to flush when exporting. It might
360 be the case that this is no longer necessary. */
361 surface_type = cairo_surface_get_type (surface);
362 if (surface_type != CAIRO_SURFACE_TYPE_XLIB
363 && (surface_type != CAIRO_SURFACE_TYPE_IMAGE
364 || cairo_image_surface_get_format (surface) != CAIRO_FORMAT_ARGB32))
365 cairo_surface_flush (surface);
366 505
367 x_end_cr_clip (f); 506 x_end_cr_clip (f);
368 507
@@ -384,18 +523,20 @@ struct font_driver const ftcrfont_driver =
384 .list_family = ftfont_list_family, 523 .list_family = ftfont_list_family,
385 .open = ftcrfont_open, 524 .open = ftcrfont_open,
386 .close = ftcrfont_close, 525 .close = ftcrfont_close,
387 .has_char = ftfont_has_char, 526 .has_char = ftcrfont_has_char,
388 .encode_char = ftfont_encode_char, 527 .encode_char = ftcrfont_encode_char,
389 .text_extents = ftcrfont_text_extents, 528 .text_extents = ftcrfont_text_extents,
390 .draw = ftcrfont_draw, 529 .draw = ftcrfont_draw,
391 .get_bitmap = ftcrfont_get_bitmap, 530 .get_bitmap = ftcrfont_get_bitmap,
392 .anchor_point = ftcrfont_anchor_point, 531 .anchor_point = ftcrfont_anchor_point,
393#ifdef HAVE_LIBOTF 532#ifdef HAVE_LIBOTF
394 .otf_capability = ftfont_otf_capability, 533 .otf_capability = ftcrfont_otf_capability,
395#endif 534#endif
535#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
396 .shape = ftcrfont_shape, 536 .shape = ftcrfont_shape,
537#endif
397#ifdef HAVE_OTF_GET_VARIATION_GLYPHS 538#ifdef HAVE_OTF_GET_VARIATION_GLYPHS
398 .get_variation_glyphs = ftfont_variation_glyphs, 539 .get_variation_glyphs = ftcrfont_variation_glyphs,
399#endif 540#endif
400 .filter_properties = ftfont_filter_properties, 541 .filter_properties = ftfont_filter_properties,
401 .combining_capability = ftfont_combining_capability, 542 .combining_capability = ftfont_combining_capability,
diff --git a/src/ftfont.c b/src/ftfont.c
index 4770c3c40b3..d8b510d7032 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1079,12 +1079,159 @@ ftfont_list_family (struct frame *f)
1079 return list; 1079 return list;
1080} 1080}
1081 1081
1082void
1083ftfont_fix_match (FcPattern *pat, FcPattern *match)
1084{
1085 /* These values are not used for matching (except antialias), but for
1086 rendering, so make sure they are carried over to the match.
1087 We also put antialias here because most fonts are antialiased, so
1088 the match will have antialias true. */
1089
1090 FcBool b = FcTrue;
1091 int i;
1092 double dpi;
1093
1094 FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b);
1095 if (! b)
1096 {
1097 FcPatternDel (match, FC_ANTIALIAS);
1098 FcPatternAddBool (match, FC_ANTIALIAS, FcFalse);
1099 }
1100 FcPatternGetBool (pat, FC_HINTING, 0, &b);
1101 if (! b)
1102 {
1103 FcPatternDel (match, FC_HINTING);
1104 FcPatternAddBool (match, FC_HINTING, FcFalse);
1105 }
1106#ifndef FC_HINT_STYLE
1107# define FC_HINT_STYLE "hintstyle"
1108#endif
1109 if (FcResultMatch == FcPatternGetInteger (pat, FC_HINT_STYLE, 0, &i))
1110 {
1111 FcPatternDel (match, FC_HINT_STYLE);
1112 FcPatternAddInteger (match, FC_HINT_STYLE, i);
1113 }
1114#ifndef FC_LCD_FILTER
1115 /* Older fontconfig versions don't have FC_LCD_FILTER. */
1116#define FC_LCD_FILTER "lcdfilter"
1117#endif
1118 if (FcResultMatch == FcPatternGetInteger (pat, FC_LCD_FILTER, 0, &i))
1119 {
1120 FcPatternDel (match, FC_LCD_FILTER);
1121 FcPatternAddInteger (match, FC_LCD_FILTER, i);
1122 }
1123 if (FcResultMatch == FcPatternGetInteger (pat, FC_RGBA, 0, &i))
1124 {
1125 FcPatternDel (match, FC_RGBA);
1126 FcPatternAddInteger (match, FC_RGBA, i);
1127 }
1128 if (FcResultMatch == FcPatternGetDouble (pat, FC_DPI, 0, &dpi))
1129 {
1130 FcPatternDel (match, FC_DPI);
1131 FcPatternAddDouble (match, FC_DPI, dpi);
1132 }
1133}
1134
1135void
1136ftfont_add_rendering_parameters (FcPattern *pat, Lisp_Object entity)
1137{
1138 Lisp_Object tail;
1139 int ival;
1140
1141 for (tail = AREF (entity, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail))
1142 {
1143 Lisp_Object key = XCAR (XCAR (tail));
1144 Lisp_Object val = XCDR (XCAR (tail));
1145
1146 if (EQ (key, QCantialias))
1147 FcPatternAddBool (pat, FC_ANTIALIAS, NILP (val) ? FcFalse : FcTrue);
1148 else if (EQ (key, QChinting))
1149 FcPatternAddBool (pat, FC_HINTING, NILP (val) ? FcFalse : FcTrue);
1150 else if (EQ (key, QCautohint))
1151 FcPatternAddBool (pat, FC_AUTOHINT, NILP (val) ? FcFalse : FcTrue);
1152 else if (EQ (key, QChintstyle))
1153 {
1154 if (FIXNUMP (val))
1155 FcPatternAddInteger (pat, FC_HINT_STYLE, XFIXNUM (val));
1156 else if (SYMBOLP (val)
1157 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
1158 FcPatternAddInteger (pat, FC_HINT_STYLE, ival);
1159 }
1160 else if (EQ (key, QCrgba))
1161 {
1162 if (FIXNUMP (val))
1163 FcPatternAddInteger (pat, FC_RGBA, XFIXNUM (val));
1164 else if (SYMBOLP (val)
1165 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
1166 FcPatternAddInteger (pat, FC_RGBA, ival);
1167 }
1168 else if (EQ (key, QClcdfilter))
1169 {
1170 if (FIXNUMP (val))
1171 FcPatternAddInteger (pat, FC_LCD_FILTER, ival = XFIXNUM (val));
1172 else if (SYMBOLP (val)
1173 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
1174 FcPatternAddInteger (pat, FC_LCD_FILTER, ival);
1175 }
1176#ifdef FC_EMBOLDEN
1177 else if (EQ (key, QCembolden))
1178 FcPatternAddBool (pat, FC_EMBOLDEN, NILP (val) ? FcFalse : FcTrue);
1179#endif
1180 }
1181}
1182
1183FcPattern *
1184ftfont_entity_pattern (Lisp_Object entity, int pixel_size)
1185{
1186 Lisp_Object val, filename, idx;
1187 FcPattern *pat;
1188 int i;
1189
1190 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX));
1191 eassert (CONSP (val));
1192 val = XCDR (val);
1193 filename = XCAR (val);
1194 idx = XCDR (val);
1195 pat = FcPatternCreate ();
1196 FcPatternAddInteger (pat, FC_WEIGHT, FONT_WEIGHT_NUMERIC (entity));
1197 i = FONT_SLANT_NUMERIC (entity) - 100;
1198 if (i < 0) i = 0;
1199 FcPatternAddInteger (pat, FC_SLANT, i);
1200 FcPatternAddInteger (pat, FC_WIDTH, FONT_WIDTH_NUMERIC (entity));
1201 FcPatternAddDouble (pat, FC_PIXEL_SIZE, pixel_size);
1202 val = AREF (entity, FONT_FAMILY_INDEX);
1203 if (! NILP (val))
1204 FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) SDATA (SYMBOL_NAME (val)));
1205 val = AREF (entity, FONT_FOUNDRY_INDEX);
1206 if (! NILP (val))
1207 FcPatternAddString (pat, FC_FOUNDRY, (FcChar8 *) SDATA (SYMBOL_NAME (val)));
1208 val = AREF (entity, FONT_SPACING_INDEX);
1209 if (! NILP (val))
1210 FcPatternAddInteger (pat, FC_SPACING, XFIXNUM (val));
1211 val = AREF (entity, FONT_DPI_INDEX);
1212 if (! NILP (val))
1213 {
1214 double dbl = XFIXNUM (val);
1215
1216 FcPatternAddDouble (pat, FC_DPI, dbl);
1217 }
1218 val = AREF (entity, FONT_AVGWIDTH_INDEX);
1219 if (FIXNUMP (val) && XFIXNUM (val) == 0)
1220 FcPatternAddBool (pat, FC_SCALABLE, FcTrue);
1221 /* This is necessary to identify the exact font (e.g. 10x20.pcf.gz
1222 over 10x20-ISO8859-1.pcf.gz). */
1223 FcPatternAddCharSet (pat, FC_CHARSET, ftfont_get_fc_charset (entity));
1224
1225 ftfont_add_rendering_parameters (pat, entity);
1226
1227 FcPatternAddString (pat, FC_FILE, (FcChar8 *) SDATA (filename));
1228 FcPatternAddInteger (pat, FC_INDEX, XFIXNUM (idx));
1229
1230 return pat;
1231}
1082 1232
1083Lisp_Object 1233Lisp_Object
1084ftfont_open2 (struct frame *f, 1234ftfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
1085 Lisp_Object entity,
1086 int pixel_size,
1087 Lisp_Object font_object)
1088{ 1235{
1089 struct font_info *ftfont_info; 1236 struct font_info *ftfont_info;
1090 struct font *font; 1237 struct font *font;
@@ -1092,12 +1239,11 @@ ftfont_open2 (struct frame *f,
1092 FT_Face ft_face; 1239 FT_Face ft_face;
1093 FT_Size ft_size; 1240 FT_Size ft_size;
1094 FT_UInt size; 1241 FT_UInt size;
1095 Lisp_Object val, filename, idx, cache; 1242 Lisp_Object val, filename, idx, cache, font_object;
1096 bool scalable; 1243 bool scalable;
1097 int spacing; 1244 int spacing;
1098 int i; 1245 int i;
1099 double upEM; 1246 double upEM;
1100 FT_Int strike_index = -1;
1101 1247
1102 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX)); 1248 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX));
1103 if (! CONSP (val)) 1249 if (! CONSP (val))
@@ -1126,35 +1272,17 @@ ftfont_open2 (struct frame *f,
1126 size = pixel_size; 1272 size = pixel_size;
1127 if (FT_Set_Pixel_Sizes (ft_face, size, size) != 0) 1273 if (FT_Set_Pixel_Sizes (ft_face, size, size) != 0)
1128 { 1274 {
1129 int min_distance = INT_MAX; 1275 if (cache_data->face_refcount == 0)
1130 bool magnify = true;
1131
1132 for (FT_Int i = 0; i < ft_face->num_fixed_sizes; i++)
1133 {
1134 int distance = ft_face->available_sizes[i].height - (int) size;
1135
1136 /* Prefer down-scaling to upscaling. */
1137 if (magnify == (distance < 0) ? abs (distance) <= min_distance
1138 : magnify)
1139 {
1140 magnify = distance < 0;
1141 min_distance = abs (distance);
1142 strike_index = i;
1143 }
1144 }
1145
1146 if (strike_index < 0 || FT_Select_Size (ft_face, strike_index) != 0)
1147 { 1276 {
1148 if (cache_data->face_refcount == 0) 1277 FT_Done_Face (ft_face);
1149 { 1278 cache_data->ft_face = NULL;
1150 FT_Done_Face (ft_face);
1151 cache_data->ft_face = NULL;
1152 }
1153 return Qnil;
1154 } 1279 }
1280 return Qnil;
1155 } 1281 }
1156 cache_data->face_refcount++; 1282 cache_data->face_refcount++;
1157 1283
1284 font_object = font_build_object (VECSIZE (struct font_info),
1285 Qfreetype, entity, size);
1158 ASET (font_object, FONT_FILE_INDEX, filename); 1286 ASET (font_object, FONT_FILE_INDEX, filename);
1159 font = XFONT_OBJECT (font_object); 1287 font = XFONT_OBJECT (font_object);
1160 ftfont_info = (struct font_info *) font; 1288 ftfont_info = (struct font_info *) font;
@@ -1164,7 +1292,6 @@ ftfont_open2 (struct frame *f,
1164 ftfont_info->maybe_otf = (ft_face->face_flags & FT_FACE_FLAG_SFNT) != 0; 1292 ftfont_info->maybe_otf = (ft_face->face_flags & FT_FACE_FLAG_SFNT) != 0;
1165 ftfont_info->otf = NULL; 1293 ftfont_info->otf = NULL;
1166#endif /* HAVE_LIBOTF */ 1294#endif /* HAVE_LIBOTF */
1167 ftfont_info->bitmap_strike_index = strike_index;
1168 /* This means that there's no need of transformation. */ 1295 /* This means that there's no need of transformation. */
1169 ftfont_info->matrix.xx = 0; 1296 ftfont_info->matrix.xx = 0;
1170 font->pixel_size = size; 1297 font->pixel_size = size;
@@ -1258,31 +1385,6 @@ ftfont_open2 (struct frame *f,
1258 return font_object; 1385 return font_object;
1259} 1386}
1260 1387
1261Lisp_Object
1262ftfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
1263{
1264 Lisp_Object font_object;
1265 FT_UInt size;
1266 size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX));
1267 if (size == 0)
1268 size = pixel_size;
1269 font_object = font_build_object (VECSIZE (struct font_info),
1270 Qfreetype, entity, size);
1271 font_object = ftfont_open2 (f, entity, pixel_size, font_object);
1272 if (FONT_OBJECT_P (font_object))
1273 {
1274 struct font *font = XFONT_OBJECT (font_object);
1275 struct font_info *ftfont_info = (struct font_info *) font;
1276
1277 if (ftfont_info->bitmap_strike_index >= 0)
1278 {
1279 ftfont_close (font);
1280 font_object = Qnil;
1281 }
1282 }
1283 return font_object;
1284}
1285
1286void 1388void
1287ftfont_close (struct font *font) 1389ftfont_close (struct font *font)
1288{ 1390{
@@ -1353,7 +1455,7 @@ ftfont_encode_char (struct font *font, int c)
1353} 1455}
1354 1456
1355void 1457void
1356ftfont_text_extents (struct font *font, unsigned int *code, 1458ftfont_text_extents (struct font *font, const unsigned int *code,
1357 int nglyphs, struct font_metrics *metrics) 1459 int nglyphs, struct font_metrics *metrics)
1358{ 1460{
1359 struct font_info *ftfont_info = (struct font_info *) font; 1461 struct font_info *ftfont_info = (struct font_info *) font;
@@ -2789,6 +2891,14 @@ syms_of_ftfont (void)
2789 /* The boolean-valued font property key specifying the use of leading. */ 2891 /* The boolean-valued font property key specifying the use of leading. */
2790 DEFSYM (QCminspace, ":minspace"); 2892 DEFSYM (QCminspace, ":minspace");
2791 2893
2894 /* Fontconfig's rendering parameters. */
2895 DEFSYM (QChinting, ":hinting");
2896 DEFSYM (QCautohint, ":autohint");
2897 DEFSYM (QChintstyle, ":hintstyle");
2898 DEFSYM (QCrgba, ":rgba");
2899 DEFSYM (QCembolden, ":embolden");
2900 DEFSYM (QClcdfilter, ":lcdfilter");
2901
2792 staticpro (&freetype_font_cache); 2902 staticpro (&freetype_font_cache);
2793 freetype_font_cache = list1 (Qt); 2903 freetype_font_cache = list1 (Qt);
2794 2904
diff --git a/src/ftfont.h b/src/ftfont.h
index adbda49ff1c..7860469491f 100644
--- a/src/ftfont.h
+++ b/src/ftfont.h
@@ -37,10 +37,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
37#endif /* HAVE_LIBOTF */ 37#endif /* HAVE_LIBOTF */
38 38
39extern FcCharSet *ftfont_get_fc_charset (Lisp_Object); 39extern FcCharSet *ftfont_get_fc_charset (Lisp_Object);
40extern Lisp_Object ftfont_open2 (struct frame *f, 40extern void ftfont_fix_match (FcPattern *, FcPattern *);
41 Lisp_Object entity, 41extern void ftfont_add_rendering_parameters (FcPattern *, Lisp_Object);
42 int pixel_size, 42extern FcPattern *ftfont_entity_pattern (Lisp_Object, int);
43 Lisp_Object font_object);
44 43
45/* This struct is shared by the XFT, Freetype, and Cairo font 44/* This struct is shared by the XFT, Freetype, and Cairo font
46 backends. Members up to and including 'matrix' are common, the 45 backends. Members up to and including 'matrix' are common, the
@@ -54,17 +53,14 @@ struct font_info
54#endif /* HAVE_LIBOTF */ 53#endif /* HAVE_LIBOTF */
55 FT_Size ft_size; 54 FT_Size ft_size;
56 int index; 55 int index;
57 /* Index of the bitmap strike used as a fallback for
58 FT_Set_Pixel_Sizes failure. If the value is non-negative, then
59 ft_size is not of the requested size. Otherwise it is -1. */
60 FT_Int bitmap_strike_index;
61 FT_Matrix matrix; 56 FT_Matrix matrix;
62 57
63#ifdef USE_CAIRO 58#ifdef USE_CAIRO
64 cairo_scaled_font_t *cr_scaled_font; 59 cairo_scaled_font_t *cr_scaled_font;
65 /* To prevent cairo from cluttering the activated FT_Size maintained 60 /* Scale factor from the bitmap strike metrics in 1/64 pixels, used
66 in ftfont.c, we activate this special FT_Size before drawing. */ 61 as the hb_position_t value in HarfBuzz, to those in (scaled)
67 FT_Size ft_size_draw; 62 pixels. The value is 0 for scalable fonts. */
63 double bitmap_position_unit;
68 /* Font metrics cache. */ 64 /* Font metrics cache. */
69 struct font_metrics **metrics; 65 struct font_metrics **metrics;
70 short metrics_nrows; 66 short metrics_nrows;
diff --git a/src/ftxfont.c b/src/ftxfont.c
index f9a69c35151..8bce7f10f1e 100644
--- a/src/ftxfont.c
+++ b/src/ftxfont.c
@@ -252,7 +252,7 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
252 struct font *font = s->font; 252 struct font *font = s->font;
253 XPoint p[0x700]; 253 XPoint p[0x700];
254 int n[7]; 254 int n[7];
255 unsigned *code; 255 unsigned *code = s->char2b + from;
256 int len = to - from; 256 int len = to - from;
257 int i; 257 int i;
258 GC *gcs; 258 GC *gcs;
@@ -260,14 +260,9 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
260 260
261 n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0; 261 n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0;
262 262
263 USE_SAFE_ALLOCA;
264 SAFE_NALLOCA (code, 1, len);
265 block_input (); 263 block_input ();
266 if (with_background) 264 if (with_background)
267 ftxfont_draw_background (f, font, s->gc, x, y, s->width); 265 ftxfont_draw_background (f, font, s->gc, x, y, s->width);
268 for (i = 0; i < len; i++)
269 code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8)
270 | XCHAR2B_BYTE2 (s->char2b + from + i));
271 266
272 if (face->gc == s->gc) 267 if (face->gc == s->gc)
273 { 268 {
@@ -312,7 +307,6 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
312 } 307 }
313 308
314 unblock_input (); 309 unblock_input ();
315 SAFE_FREE ();
316 310
317 return len; 311 return len;
318} 312}
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 48233576531..43918dd3da5 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -520,7 +520,7 @@ get_utf8_string (const char *str)
520bool 520bool
521xg_check_special_colors (struct frame *f, 521xg_check_special_colors (struct frame *f,
522 const char *color_name, 522 const char *color_name,
523 XColor *color) 523 Emacs_Color *color)
524{ 524{
525 bool success_p = 0; 525 bool success_p = 0;
526 bool get_bg = strcmp ("gtk_selection_bg_color", color_name) == 0; 526 bool get_bg = strcmp ("gtk_selection_bg_color", color_name) == 0;
diff --git a/src/gtkutil.h b/src/gtkutil.h
index ec899781ca8..229aa08f817 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -166,7 +166,7 @@ extern void xg_free_frame_widgets (struct frame *f);
166extern void xg_set_background_color (struct frame *f, unsigned long bg); 166extern void xg_set_background_color (struct frame *f, unsigned long bg);
167extern bool xg_check_special_colors (struct frame *f, 167extern bool xg_check_special_colors (struct frame *f,
168 const char *color_name, 168 const char *color_name,
169 XColor *color); 169 Emacs_Color *color);
170 170
171extern void xg_set_frame_icon (struct frame *f, 171extern void xg_set_frame_icon (struct frame *f,
172 Pixmap icon_pixmap, 172 Pixmap icon_pixmap,
diff --git a/src/image.c b/src/image.c
index 071b92a741e..699bdfd4fa1 100644
--- a/src/image.c
+++ b/src/image.c
@@ -132,17 +132,17 @@ static unsigned long *colors_in_color_table (int *n);
132#ifdef HAVE_NS 132#ifdef HAVE_NS
133/* Use with images created by ns_image_for_XPM. */ 133/* Use with images created by ns_image_for_XPM. */
134static unsigned long 134static unsigned long
135XGetPixel (XImagePtr ximage, int x, int y) 135XGetPixel (Emacs_Pix_Container image, int x, int y)
136{ 136{
137 return ns_get_pixel (ximage, x, y); 137 return ns_get_pixel (image, x, y);
138} 138}
139 139
140/* Use with images created by ns_image_for_XPM; alpha set to 1; 140/* Use with images created by ns_image_for_XPM; alpha set to 1;
141 pixel is assumed to be in RGB form. */ 141 pixel is assumed to be in RGB form. */
142static void 142static void
143XPutPixel (XImagePtr ximage, int x, int y, unsigned long pixel) 143XPutPixel (Emacs_Pix_Container image, int x, int y, unsigned long pixel)
144{ 144{
145 ns_put_pixel (ximage, x, y, pixel); 145 ns_put_pixel (image, x, y, pixel);
146} 146}
147#endif /* HAVE_NS */ 147#endif /* HAVE_NS */
148 148
@@ -228,7 +228,7 @@ image_create_bitmap_from_data (struct frame *f, char *bits,
228 228
229#ifdef HAVE_NTGUI 229#ifdef HAVE_NTGUI
230 Lisp_Object frame UNINIT; /* The value is not used. */ 230 Lisp_Object frame UNINIT; /* The value is not used. */
231 Pixmap bitmap; 231 Emacs_Pixmap bitmap;
232 bitmap = CreateBitmap (width, height, 232 bitmap = CreateBitmap (width, height,
233 FRAME_DISPLAY_INFO (XFRAME (frame))->n_planes, 233 FRAME_DISPLAY_INFO (XFRAME (frame))->n_planes,
234 FRAME_DISPLAY_INFO (XFRAME (frame))->n_cbits, 234 FRAME_DISPLAY_INFO (XFRAME (frame))->n_cbits,
@@ -412,17 +412,19 @@ typedef void Picture;
412#endif 412#endif
413 413
414static bool image_create_x_image_and_pixmap_1 (struct frame *, int, int, int, 414static bool image_create_x_image_and_pixmap_1 (struct frame *, int, int, int,
415 XImagePtr *, Pixmap *, Picture *); 415 Emacs_Pix_Container *,
416static void image_destroy_x_image (XImagePtr ximg); 416 Emacs_Pixmap *, Picture *);
417static void image_destroy_x_image (Emacs_Pix_Container);
417 418
418#ifdef HAVE_NTGUI 419#ifdef HAVE_NTGUI
419static XImagePtr_or_DC image_get_x_image_or_dc (struct frame *, struct image *, 420static HDC image_get_x_image_or_dc (struct frame *, struct image *,
420 bool, HGDIOBJ *); 421 bool, HGDIOBJ *);
421static void image_unget_x_image_or_dc (struct image *, bool, XImagePtr_or_DC, 422static void image_unget_x_image_or_dc (struct image *, bool,
422 HGDIOBJ); 423 HDC, HGDIOBJ);
423#else 424#else
424static XImagePtr image_get_x_image (struct frame *, struct image *, bool); 425static Emacs_Pix_Container image_get_x_image (struct frame *, struct image *,
425static void image_unget_x_image (struct image *, bool, XImagePtr); 426 bool);
427static void image_unget_x_image (struct image *, bool, Emacs_Pix_Container);
426#define image_get_x_image_or_dc(f, img, mask_p, dummy) \ 428#define image_get_x_image_or_dc(f, img, mask_p, dummy) \
427 image_get_x_image (f, img, mask_p) 429 image_get_x_image (f, img, mask_p)
428#define image_unget_x_image_or_dc(img, mask_p, ximg, dummy) \ 430#define image_unget_x_image_or_dc(img, mask_p, ximg, dummy) \
@@ -436,7 +438,7 @@ static void image_sync_to_pixmaps (struct frame *, struct image *);
436/* Useful functions defined in the section 438/* Useful functions defined in the section
437 `Image type independent image structures' below. */ 439 `Image type independent image structures' below. */
438 440
439static unsigned long four_corners_best (XImagePtr ximg, 441static unsigned long four_corners_best (XImage *ximg,
440 int *corners, 442 int *corners,
441 unsigned long width, 443 unsigned long width,
442 unsigned long height); 444 unsigned long height);
@@ -449,7 +451,7 @@ void
449x_create_bitmap_mask (struct frame *f, ptrdiff_t id) 451x_create_bitmap_mask (struct frame *f, ptrdiff_t id)
450{ 452{
451 Pixmap pixmap, mask; 453 Pixmap pixmap, mask;
452 XImagePtr ximg, mask_img; 454 XImage *ximg, *mask_img;
453 unsigned long width, height; 455 unsigned long width, height;
454 bool result; 456 bool result;
455 unsigned long bg; 457 unsigned long bg;
@@ -1076,10 +1078,10 @@ image_ascent (struct image *img, struct face *face, struct glyph_slice *slice)
1076 1078
1077#ifdef USE_CAIRO 1079#ifdef USE_CAIRO
1078static uint32_t 1080static uint32_t
1079xcolor_to_argb32 (XColor xc) 1081emacs_color_to_argb32 (Emacs_Color *ec)
1080{ 1082{
1081 return ((0xffu << 24) | ((xc.red / 256) << 16) 1083 return ((0xffu << 24) | ((ec->red / 256) << 16)
1082 | ((xc.green / 256) << 8) | (xc.blue / 256)); 1084 | ((ec->green / 256) << 8) | (ec->blue / 256));
1083} 1085}
1084 1086
1085static uint32_t 1087static uint32_t
@@ -1087,11 +1089,11 @@ get_spec_bg_or_alpha_as_argb (struct image *img,
1087 struct frame *f) 1089 struct frame *f)
1088{ 1090{
1089 uint32_t bgcolor = 0; 1091 uint32_t bgcolor = 0;
1090 XColor xbgcolor; 1092 Emacs_Color xbgcolor;
1091 Lisp_Object bg = image_spec_value (img->spec, QCbackground, NULL); 1093 Lisp_Object bg = image_spec_value (img->spec, QCbackground, NULL);
1092 1094
1093 if (STRINGP (bg) && x_parse_color (f, SSDATA (bg), &xbgcolor)) 1095 if (STRINGP (bg) && x_parse_color (f, SSDATA (bg), &xbgcolor))
1094 bgcolor = xcolor_to_argb32 (xbgcolor); 1096 bgcolor = emacs_color_to_argb32 (&xbgcolor);
1095 1097
1096 return bgcolor; 1098 return bgcolor;
1097} 1099}
@@ -1121,10 +1123,10 @@ set_cairo_image_surface (struct image *img, cairo_surface_t *surface)
1121/* Image background colors. */ 1123/* Image background colors. */
1122 1124
1123/* Find the "best" corner color of a bitmap. 1125/* Find the "best" corner color of a bitmap.
1124 On W32, XIMG is assumed to a device context with the bitmap selected. */ 1126 On W32, PIMG is assumed to a device context with the bitmap selected. */
1125 1127
1126static RGB_PIXEL_COLOR 1128static RGB_PIXEL_COLOR
1127four_corners_best (XImagePtr_or_DC ximg, int *corners, 1129four_corners_best (Emacs_Pix_Context pimg, int *corners,
1128 unsigned long width, unsigned long height) 1130 unsigned long width, unsigned long height)
1129{ 1131{
1130 RGB_PIXEL_COLOR corner_pixels[4]; 1132 RGB_PIXEL_COLOR corner_pixels[4];
@@ -1133,19 +1135,19 @@ four_corners_best (XImagePtr_or_DC ximg, int *corners,
1133 1135
1134 if (corners && corners[BOT_CORNER] >= 0) 1136 if (corners && corners[BOT_CORNER] >= 0)
1135 { 1137 {
1136 /* Get the colors at the corner_pixels of ximg. */ 1138 /* Get the colors at the corner_pixels of pimg. */
1137 corner_pixels[0] = GET_PIXEL (ximg, corners[LEFT_CORNER], corners[TOP_CORNER]); 1139 corner_pixels[0] = GET_PIXEL (pimg, corners[LEFT_CORNER], corners[TOP_CORNER]);
1138 corner_pixels[1] = GET_PIXEL (ximg, corners[RIGHT_CORNER] - 1, corners[TOP_CORNER]); 1140 corner_pixels[1] = GET_PIXEL (pimg, corners[RIGHT_CORNER] - 1, corners[TOP_CORNER]);
1139 corner_pixels[2] = GET_PIXEL (ximg, corners[RIGHT_CORNER] - 1, corners[BOT_CORNER] - 1); 1141 corner_pixels[2] = GET_PIXEL (pimg, corners[RIGHT_CORNER] - 1, corners[BOT_CORNER] - 1);
1140 corner_pixels[3] = GET_PIXEL (ximg, corners[LEFT_CORNER], corners[BOT_CORNER] - 1); 1142 corner_pixels[3] = GET_PIXEL (pimg, corners[LEFT_CORNER], corners[BOT_CORNER] - 1);
1141 } 1143 }
1142 else 1144 else
1143 { 1145 {
1144 /* Get the colors at the corner_pixels of ximg. */ 1146 /* Get the colors at the corner_pixels of pimg. */
1145 corner_pixels[0] = GET_PIXEL (ximg, 0, 0); 1147 corner_pixels[0] = GET_PIXEL (pimg, 0, 0);
1146 corner_pixels[1] = GET_PIXEL (ximg, width - 1, 0); 1148 corner_pixels[1] = GET_PIXEL (pimg, width - 1, 0);
1147 corner_pixels[2] = GET_PIXEL (ximg, width - 1, height - 1); 1149 corner_pixels[2] = GET_PIXEL (pimg, width - 1, height - 1);
1148 corner_pixels[3] = GET_PIXEL (ximg, 0, height - 1); 1150 corner_pixels[3] = GET_PIXEL (pimg, 0, height - 1);
1149 } 1151 }
1150 /* Choose the most frequently found color as background. */ 1152 /* Choose the most frequently found color as background. */
1151 for (i = best_count = 0; i < 4; ++i) 1153 for (i = best_count = 0; i < 4; ++i)
@@ -1165,27 +1167,27 @@ four_corners_best (XImagePtr_or_DC ximg, int *corners,
1165 1167
1166/* Return the `background' field of IMG. If IMG doesn't have one yet, 1168/* Return the `background' field of IMG. If IMG doesn't have one yet,
1167 it is guessed heuristically. If non-zero, XIMG is an existing 1169 it is guessed heuristically. If non-zero, XIMG is an existing
1168 XImage object (or device context with the image selected on W32) to 1170 Emacs_Pix_Context object (device context with the image selected on
1169 use for the heuristic. */ 1171 W32) to use for the heuristic. */
1170 1172
1171RGB_PIXEL_COLOR 1173RGB_PIXEL_COLOR
1172image_background (struct image *img, struct frame *f, XImagePtr_or_DC ximg) 1174image_background (struct image *img, struct frame *f, Emacs_Pix_Context pimg)
1173{ 1175{
1174 if (! img->background_valid) 1176 if (! img->background_valid)
1175 /* IMG doesn't have a background yet, try to guess a reasonable value. */ 1177 /* IMG doesn't have a background yet, try to guess a reasonable value. */
1176 { 1178 {
1177 bool free_ximg = !ximg; 1179 bool free_pimg = !pimg;
1178#ifdef HAVE_NTGUI 1180#ifdef HAVE_NTGUI
1179 HGDIOBJ prev; 1181 HGDIOBJ prev;
1180#endif /* HAVE_NTGUI */ 1182#endif /* HAVE_NTGUI */
1181 1183
1182 if (free_ximg) 1184 if (free_pimg)
1183 ximg = image_get_x_image_or_dc (f, img, 0, &prev); 1185 pimg = image_get_x_image_or_dc (f, img, 0, &prev);
1184 1186
1185 img->background = four_corners_best (ximg, img->corners, img->width, img->height); 1187 img->background = four_corners_best (pimg, img->corners, img->width, img->height);
1186 1188
1187 if (free_ximg) 1189 if (free_pimg)
1188 image_unget_x_image_or_dc (img, 0, ximg, prev); 1190 image_unget_x_image_or_dc (img, 0, pimg, prev);
1189 1191
1190 img->background_valid = 1; 1192 img->background_valid = 1;
1191 } 1193 }
@@ -1195,10 +1197,12 @@ image_background (struct image *img, struct frame *f, XImagePtr_or_DC ximg)
1195 1197
1196/* Return the `background_transparent' field of IMG. If IMG doesn't 1198/* Return the `background_transparent' field of IMG. If IMG doesn't
1197 have one yet, it is guessed heuristically. If non-zero, MASK is an 1199 have one yet, it is guessed heuristically. If non-zero, MASK is an
1198 existing XImage object to use for the heuristic. */ 1200 existing Emacs_Pix_Context (XImage* on X) object to use for the
1201 heuristic. */
1199 1202
1200int 1203int
1201image_background_transparent (struct image *img, struct frame *f, XImagePtr_or_DC mask) 1204image_background_transparent (struct image *img, struct frame *f,
1205 Emacs_Pix_Context mask)
1202{ 1206{
1203 if (! img->background_transparent_valid) 1207 if (! img->background_transparent_valid)
1204 /* IMG doesn't have a background yet, try to guess a reasonable value. */ 1208 /* IMG doesn't have a background yet, try to guess a reasonable value. */
@@ -1321,7 +1325,7 @@ static unsigned long
1321image_alloc_image_color (struct frame *f, struct image *img, 1325image_alloc_image_color (struct frame *f, struct image *img,
1322 Lisp_Object color_name, unsigned long dflt) 1326 Lisp_Object color_name, unsigned long dflt)
1323{ 1327{
1324 XColor color; 1328 Emacs_Color color;
1325 unsigned long result; 1329 unsigned long result;
1326 1330
1327 eassert (STRINGP (color_name)); 1331 eassert (STRINGP (color_name));
@@ -2001,7 +2005,7 @@ mark_image_cache (struct image_cache *c)
2001 WIDTH and HEIGHT must both be positive. 2005 WIDTH and HEIGHT must both be positive.
2002 If XIMG is null, assume it is a bitmap. */ 2006 If XIMG is null, assume it is a bitmap. */
2003static bool 2007static bool
2004image_check_image_size (XImagePtr ximg, int width, int height) 2008image_check_image_size (Emacs_Pix_Container ximg, int width, int height)
2005{ 2009{
2006#ifdef HAVE_X_WINDOWS 2010#ifdef HAVE_X_WINDOWS
2007 /* Respect Xlib's limits: it cannot deal with images that have more 2011 /* Respect Xlib's limits: it cannot deal with images that have more
@@ -2035,18 +2039,20 @@ image_check_image_size (XImagePtr ximg, int width, int height)
2035#endif 2039#endif
2036} 2040}
2037 2041
2038/* Create an XImage and a pixmap of size WIDTH x HEIGHT for use on 2042/* Create an Emacs_Pix_Container and a pixmap of size WIDTH x
2039 frame F. Set *XIMG and *PIXMAP to the XImage and Pixmap created. 2043 HEIGHT for use on frame F. Set *PIMG and *PIXMAP to the
2040 Set (*XIMG)->data to a raster of WIDTH x HEIGHT pixels allocated 2044 Emacs_Pix_Container and Emacs_Pixmap created. Set (*PIMG)->data
2041 via xmalloc. Print error messages via image_error if an error 2045 to a raster of WIDTH x HEIGHT pixels allocated via xmalloc. Print
2042 occurs. Value is true if successful. 2046 error messages via image_error if an error occurs. Value is true
2047 if successful.
2043 2048
2044 On W32, a DEPTH of zero signifies a 24 bit image, otherwise DEPTH 2049 On W32, a DEPTH of zero signifies a 24 bit image, otherwise DEPTH
2045 should indicate the bit depth of the image. */ 2050 should indicate the bit depth of the image. */
2046 2051
2047static bool 2052static bool
2048image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int depth, 2053image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int depth,
2049 XImagePtr *ximg, Pixmap *pixmap, Picture *picture) 2054 Emacs_Pix_Container *pimg,
2055 Emacs_Pixmap *pixmap, Picture *picture)
2050{ 2056{
2051#ifdef HAVE_X_WINDOWS 2057#ifdef HAVE_X_WINDOWS
2052 Display *display = FRAME_X_DISPLAY (f); 2058 Display *display = FRAME_X_DISPLAY (f);
@@ -2057,33 +2063,33 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2057 2063
2058 if (depth <= 0) 2064 if (depth <= 0)
2059 depth = DefaultDepthOfScreen (screen); 2065 depth = DefaultDepthOfScreen (screen);
2060 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen), 2066 *pimg = XCreateImage (display, DefaultVisualOfScreen (screen),
2061 depth, ZPixmap, 0, NULL, width, height, 2067 depth, ZPixmap, 0, NULL, width, height,
2062 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0); 2068 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0);
2063 if (*ximg == NULL) 2069 if (*pimg == NULL)
2064 { 2070 {
2065 image_error ("Unable to allocate X image"); 2071 image_error ("Unable to allocate X image");
2066 return 0; 2072 return 0;
2067 } 2073 }
2068 2074
2069 if (! image_check_image_size (*ximg, width, height)) 2075 if (! image_check_image_size (*pimg, width, height))
2070 { 2076 {
2071 image_destroy_x_image (*ximg); 2077 image_destroy_x_image (*pimg);
2072 *ximg = NULL; 2078 *pimg = NULL;
2073 image_error ("Image too large (%dx%d)", 2079 image_error ("Image too large (%dx%d)",
2074 make_fixnum (width), make_fixnum (height)); 2080 make_fixnum (width), make_fixnum (height));
2075 return 0; 2081 return 0;
2076 } 2082 }
2077 2083
2078 /* Allocate image raster. */ 2084 /* Allocate image raster. */
2079 (*ximg)->data = xmalloc ((*ximg)->bytes_per_line * height); 2085 (*pimg)->data = xmalloc ((*pimg)->bytes_per_line * height);
2080 2086
2081 /* Allocate a pixmap of the same size. */ 2087 /* Allocate a pixmap of the same size. */
2082 *pixmap = XCreatePixmap (display, drawable, width, height, depth); 2088 *pixmap = XCreatePixmap (display, drawable, width, height, depth);
2083 if (*pixmap == NO_PIXMAP) 2089 if (*pixmap == NO_PIXMAP)
2084 { 2090 {
2085 image_destroy_x_image (*ximg); 2091 image_destroy_x_image (*pimg);
2086 *ximg = NULL; 2092 *pimg = NULL;
2087 image_error ("Unable to create X pixmap"); 2093 image_error ("Unable to create X pixmap");
2088 return 0; 2094 return 0;
2089 } 2095 }
@@ -2150,10 +2156,10 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2150 if (depth < 16) 2156 if (depth < 16)
2151 palette_colors = 1 << (depth - 1); 2157 palette_colors = 1 << (depth - 1);
2152 2158
2153 *ximg = xmalloc (sizeof (XImage) + palette_colors * sizeof (RGBQUAD)); 2159 *pimg = xmalloc (sizeof (XImage) + palette_colors * sizeof (RGBQUAD));
2154 2160
2155 header = &(*ximg)->info.bmiHeader; 2161 header = &(*pimg)->info.bmiHeader;
2156 memset (&(*ximg)->info, 0, sizeof (BITMAPINFO)); 2162 memset (&(*pimg)->info, 0, sizeof (BITMAPINFO));
2157 header->biSize = sizeof (*header); 2163 header->biSize = sizeof (*header);
2158 header->biWidth = width; 2164 header->biWidth = width;
2159 header->biHeight = -height; /* negative indicates a top-down bitmap. */ 2165 header->biHeight = -height; /* negative indicates a top-down bitmap. */
@@ -2165,10 +2171,10 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2165 /* TODO: fill in palette. */ 2171 /* TODO: fill in palette. */
2166 if (depth == 1) 2172 if (depth == 1)
2167 { 2173 {
2168 (*ximg)->info.bmiColors[0].rgbBlue = 0; 2174 (*pimg)->info.bmiColors[0].rgbBlue = 0;
2169 (*ximg)->info.bmiColors[0].rgbGreen = 0; 2175 (*pimg)->info.bmiColors[0].rgbGreen = 0;
2170 (*ximg)->info.bmiColors[0].rgbRed = 0; 2176 (*pimg)->info.bmiColors[0].rgbRed = 0;
2171 (*ximg)->info.bmiColors[0].rgbReserved = 0; 2177 (*pimg)->info.bmiColors[0].rgbReserved = 0;
2172 /* bmiColors is a variable-length array declared by w32api 2178 /* bmiColors is a variable-length array declared by w32api
2173 headers as bmiColors[1], which triggers a warning under 2179 headers as bmiColors[1], which triggers a warning under
2174 -Warray-bounds; shut that up. */ 2180 -Warray-bounds; shut that up. */
@@ -2176,10 +2182,10 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2176# pragma GCC push_options 2182# pragma GCC push_options
2177# pragma GCC diagnostic ignored "-Warray-bounds" 2183# pragma GCC diagnostic ignored "-Warray-bounds"
2178# endif 2184# endif
2179 (*ximg)->info.bmiColors[1].rgbBlue = 255; 2185 (*pimg)->info.bmiColors[1].rgbBlue = 255;
2180 (*ximg)->info.bmiColors[1].rgbGreen = 255; 2186 (*pimg)->info.bmiColors[1].rgbGreen = 255;
2181 (*ximg)->info.bmiColors[1].rgbRed = 255; 2187 (*pimg)->info.bmiColors[1].rgbRed = 255;
2182 (*ximg)->info.bmiColors[1].rgbReserved = 0; 2188 (*pimg)->info.bmiColors[1].rgbReserved = 0;
2183# if GNUC_PREREQ (4, 4, 0) 2189# if GNUC_PREREQ (4, 4, 0)
2184# pragma GCC pop_options 2190# pragma GCC pop_options
2185# endif 2191# endif
@@ -2189,10 +2195,10 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2189 2195
2190 /* Create a DIBSection and raster array for the bitmap, 2196 /* Create a DIBSection and raster array for the bitmap,
2191 and store its handle in *pixmap. */ 2197 and store its handle in *pixmap. */
2192 *pixmap = CreateDIBSection (hdc, &((*ximg)->info), 2198 *pixmap = CreateDIBSection (hdc, &((*pimg)->info),
2193 (depth < 16) ? DIB_PAL_COLORS : DIB_RGB_COLORS, 2199 (depth < 16) ? DIB_PAL_COLORS : DIB_RGB_COLORS,
2194 /* casting avoids a GCC warning */ 2200 /* casting avoids a GCC warning */
2195 (void **)&((*ximg)->data), NULL, 0); 2201 (void **)&((*pimg)->data), NULL, 0);
2196 2202
2197 /* Realize display palette and garbage all frames. */ 2203 /* Realize display palette and garbage all frames. */
2198 release_frame_dc (f, hdc); 2204 release_frame_dc (f, hdc);
@@ -2204,8 +2210,8 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2204 /* All system errors are < 10000, so the following is safe. */ 2210 /* All system errors are < 10000, so the following is safe. */
2205 XSETINT (errcode, err); 2211 XSETINT (errcode, err);
2206 image_error ("Unable to create bitmap, error code %d", errcode); 2212 image_error ("Unable to create bitmap, error code %d", errcode);
2207 image_destroy_x_image (*ximg); 2213 image_destroy_x_image (*pimg);
2208 *ximg = NULL; 2214 *pimg = NULL;
2209 return 0; 2215 return 0;
2210 } 2216 }
2211 2217
@@ -2217,69 +2223,70 @@ image_create_x_image_and_pixmap_1 (struct frame *f, int width, int height, int d
2217 *pixmap = ns_image_for_XPM (width, height, depth); 2223 *pixmap = ns_image_for_XPM (width, height, depth);
2218 if (*pixmap == 0) 2224 if (*pixmap == 0)
2219 { 2225 {
2220 *ximg = NULL; 2226 *pimg = NULL;
2221 image_error ("Unable to allocate NSImage for XPM pixmap"); 2227 image_error ("Unable to allocate NSImage for XPM pixmap");
2222 return 0; 2228 return 0;
2223 } 2229 }
2224 *ximg = *pixmap; 2230 *pimg = *pixmap;
2225 return 1; 2231 return 1;
2226#endif 2232#endif
2227} 2233}
2228 2234
2229 2235
2230/* Destroy XImage XIMG. Free XIMG->data. */ 2236/* Destroy Emacs_Pix_Container PIMG. Free data associated with PIMG. */
2231 2237
2232static void 2238static void
2233image_destroy_x_image (XImagePtr ximg) 2239image_destroy_x_image (Emacs_Pix_Container pimg)
2234{ 2240{
2235 eassert (input_blocked_p ()); 2241 eassert (input_blocked_p ());
2236 if (ximg) 2242 if (pimg)
2237 { 2243 {
2238#ifdef HAVE_X_WINDOWS 2244#ifdef HAVE_X_WINDOWS
2239 xfree (ximg->data); 2245 xfree (pimg->data);
2240 ximg->data = NULL; 2246 pimg->data = NULL;
2241 XDestroyImage (ximg); 2247 XDestroyImage (pimg);
2242#endif /* HAVE_X_WINDOWS */ 2248#endif /* HAVE_X_WINDOWS */
2243#ifdef HAVE_NTGUI 2249#ifdef HAVE_NTGUI
2244 /* Data will be freed by DestroyObject. */ 2250 /* Data will be freed by DestroyObject. */
2245 ximg->data = NULL; 2251 pimg->data = NULL;
2246 xfree (ximg); 2252 xfree (pimg);
2247#endif /* HAVE_NTGUI */ 2253#endif /* HAVE_NTGUI */
2248#ifdef HAVE_NS 2254#ifdef HAVE_NS
2249 ns_release_object (ximg); 2255 ns_release_object (pimg);
2250#endif /* HAVE_NS */ 2256#endif /* HAVE_NS */
2251 } 2257 }
2252} 2258}
2253 2259
2254 2260
2255/* Put XImage XIMG into pixmap PIXMAP on frame F. WIDTH and HEIGHT 2261/* Put Emacs_Pix_Container PIMG into pixmap PIXMAP on frame F.
2256 are width and height of both the image and pixmap. */ 2262 WIDTH and HEIGHT are width and height of both the image and
2263 pixmap. */
2257 2264
2258static void 2265static void
2259gui_put_x_image (struct frame *f, XImagePtr ximg, Pixmap pixmap, 2266gui_put_x_image (struct frame *f, Emacs_Pix_Container pimg,
2260 int width, int height) 2267 Emacs_Pixmap pixmap, int width, int height)
2261{ 2268{
2262#ifdef HAVE_X_WINDOWS 2269#ifdef HAVE_X_WINDOWS
2263 GC gc; 2270 GC gc;
2264 2271
2265 eassert (input_blocked_p ()); 2272 eassert (input_blocked_p ());
2266 gc = XCreateGC (FRAME_X_DISPLAY (f), pixmap, 0, NULL); 2273 gc = XCreateGC (FRAME_X_DISPLAY (f), pixmap, 0, NULL);
2267 XPutImage (FRAME_X_DISPLAY (f), pixmap, gc, ximg, 0, 0, 0, 0, 2274 XPutImage (FRAME_X_DISPLAY (f), pixmap, gc, pimg, 0, 0, 0, 0,
2268 ximg->width, ximg->height); 2275 pimg->width, pimg->height);
2269 XFreeGC (FRAME_X_DISPLAY (f), gc); 2276 XFreeGC (FRAME_X_DISPLAY (f), gc);
2270#endif /* HAVE_X_WINDOWS */ 2277#endif /* HAVE_X_WINDOWS */
2271 2278
2272#ifdef HAVE_NTGUI 2279#ifdef HAVE_NTGUI
2273#if 0 /* I don't think this is necessary looking at where it is used. */ 2280#if 0 /* I don't think this is necessary looking at where it is used. */
2274 HDC hdc = get_frame_dc (f); 2281 HDC hdc = get_frame_dc (f);
2275 SetDIBits (hdc, pixmap, 0, height, ximg->data, &(ximg->info), DIB_RGB_COLORS); 2282 SetDIBits (hdc, pixmap, 0, height, pimg->data, &(pimg->info), DIB_RGB_COLORS);
2276 release_frame_dc (f, hdc); 2283 release_frame_dc (f, hdc);
2277#endif 2284#endif
2278#endif /* HAVE_NTGUI */ 2285#endif /* HAVE_NTGUI */
2279 2286
2280#ifdef HAVE_NS 2287#ifdef HAVE_NS
2281 eassert (ximg == pixmap); 2288 eassert (pimg == pixmap);
2282 ns_retain_object (ximg); 2289 ns_retain_object (pimg);
2283#endif 2290#endif
2284} 2291}
2285 2292
@@ -2289,7 +2296,7 @@ gui_put_x_image (struct frame *f, XImagePtr ximg, Pixmap pixmap,
2289static bool 2296static bool
2290image_create_x_image_and_pixmap (struct frame *f, struct image *img, 2297image_create_x_image_and_pixmap (struct frame *f, struct image *img,
2291 int width, int height, int depth, 2298 int width, int height, int depth,
2292 XImagePtr *ximg, bool mask_p) 2299 Emacs_Pix_Container *ximg, bool mask_p)
2293{ 2300{
2294 eassert ((!mask_p ? img->pixmap : img->mask) == NO_PIXMAP); 2301 eassert ((!mask_p ? img->pixmap : img->mask) == NO_PIXMAP);
2295 2302
@@ -2302,14 +2309,14 @@ image_create_x_image_and_pixmap (struct frame *f, struct image *img,
2302 picture); 2309 picture);
2303} 2310}
2304 2311
2305/* Put X image XIMG into image IMG on frame F, as a mask if and only 2312/* Put pixel image PIMG into image IMG on frame F, as a mask if and only
2306 if MASK_P. On X, this simply records XIMG on a member of IMG, so 2313 if MASK_P. On X, this simply records PIMG on a member of IMG, so
2307 it can be put into the pixmap afterwards via image_sync_to_pixmaps. 2314 it can be put into the pixmap afterwards via image_sync_to_pixmaps.
2308 On the other platforms, it puts XIMG into the pixmap, then frees 2315 On the other platforms, it puts PIMG into the pixmap, then frees
2309 the X image and its buffer. */ 2316 the pixel image and its buffer. */
2310 2317
2311static void 2318static void
2312image_put_x_image (struct frame *f, struct image *img, XImagePtr ximg, 2319image_put_x_image (struct frame *f, struct image *img, Emacs_Pix_Container ximg,
2313 bool mask_p) 2320 bool mask_p)
2314{ 2321{
2315#ifdef HAVE_X_WINDOWS 2322#ifdef HAVE_X_WINDOWS
@@ -2357,12 +2364,12 @@ image_sync_to_pixmaps (struct frame *f, struct image *img)
2357 currently selected GDI object into *PREV for future restoration by 2364 currently selected GDI object into *PREV for future restoration by
2358 image_unget_x_image_or_dc. */ 2365 image_unget_x_image_or_dc. */
2359 2366
2360static XImagePtr_or_DC 2367static HDC
2361image_get_x_image_or_dc (struct frame *f, struct image *img, bool mask_p, 2368image_get_x_image_or_dc (struct frame *f, struct image *img, bool mask_p,
2362 HGDIOBJ *prev) 2369 HGDIOBJ *prev)
2363{ 2370{
2364 HDC frame_dc = get_frame_dc (f); 2371 HDC frame_dc = get_frame_dc (f);
2365 XImagePtr_or_DC ximg = CreateCompatibleDC (frame_dc); 2372 HDC ximg = CreateCompatibleDC (frame_dc);
2366 2373
2367 release_frame_dc (f, frame_dc); 2374 release_frame_dc (f, frame_dc);
2368 *prev = SelectObject (ximg, !mask_p ? img->pixmap : img->mask); 2375 *prev = SelectObject (ximg, !mask_p ? img->pixmap : img->mask);
@@ -2372,7 +2379,7 @@ image_get_x_image_or_dc (struct frame *f, struct image *img, bool mask_p,
2372 2379
2373static void 2380static void
2374image_unget_x_image_or_dc (struct image *img, bool mask_p, 2381image_unget_x_image_or_dc (struct image *img, bool mask_p,
2375 XImagePtr_or_DC ximg, HGDIOBJ prev) 2382 HDC ximg, HGDIOBJ prev)
2376{ 2383{
2377 SelectObject (ximg, prev); 2384 SelectObject (ximg, prev);
2378 DeleteDC (ximg); 2385 DeleteDC (ximg);
@@ -2381,11 +2388,11 @@ image_unget_x_image_or_dc (struct image *img, bool mask_p,
2381/* Get the X image for IMG on frame F. The resulting X image data 2388/* Get the X image for IMG on frame F. The resulting X image data
2382 should be treated as read-only at least on X. */ 2389 should be treated as read-only at least on X. */
2383 2390
2384static XImagePtr 2391static Emacs_Pix_Container
2385image_get_x_image (struct frame *f, struct image *img, bool mask_p) 2392image_get_x_image (struct frame *f, struct image *img, bool mask_p)
2386{ 2393{
2387#ifdef HAVE_X_WINDOWS 2394#ifdef HAVE_X_WINDOWS
2388 XImagePtr ximg_in_img = !mask_p ? img->ximg : img->mask_img; 2395 XImage *ximg_in_img = !mask_p ? img->ximg : img->mask_img;
2389 2396
2390 if (ximg_in_img) 2397 if (ximg_in_img)
2391 return ximg_in_img; 2398 return ximg_in_img;
@@ -2393,7 +2400,7 @@ image_get_x_image (struct frame *f, struct image *img, bool mask_p)
2393 return XGetImage (FRAME_X_DISPLAY (f), !mask_p ? img->pixmap : img->mask, 2400 return XGetImage (FRAME_X_DISPLAY (f), !mask_p ? img->pixmap : img->mask,
2394 0, 0, img->width, img->height, ~0, ZPixmap); 2401 0, 0, img->width, img->height, ~0, ZPixmap);
2395#elif defined (HAVE_NS) 2402#elif defined (HAVE_NS)
2396 XImagePtr pixmap = !mask_p ? img->pixmap : img->mask; 2403 Emacs_Pix_Container pixmap = !mask_p ? img->pixmap : img->mask;
2397 2404
2398 ns_retain_object (pixmap); 2405 ns_retain_object (pixmap);
2399 return pixmap; 2406 return pixmap;
@@ -2401,10 +2408,10 @@ image_get_x_image (struct frame *f, struct image *img, bool mask_p)
2401} 2408}
2402 2409
2403static void 2410static void
2404image_unget_x_image (struct image *img, bool mask_p, XImagePtr ximg) 2411image_unget_x_image (struct image *img, bool mask_p, Emacs_Pix_Container ximg)
2405{ 2412{
2406#ifdef HAVE_X_WINDOWS 2413#ifdef HAVE_X_WINDOWS
2407 XImagePtr ximg_in_img = !mask_p ? img->ximg : img->mask_img; 2414 XImage *ximg_in_img = !mask_p ? img->ximg : img->mask_img;
2408 2415
2409 if (ximg_in_img) 2416 if (ximg_in_img)
2410 eassert (ximg == ximg_in_img); 2417 eassert (ximg == ximg_in_img);
@@ -4201,7 +4208,7 @@ xpm_load_image (struct frame *f,
4201#ifndef HAVE_NS 4208#ifndef HAVE_NS
4202 bool have_mask = false; 4209 bool have_mask = false;
4203#endif 4210#endif
4204 XImagePtr ximg = NULL, mask_img = NULL; 4211 Emacs_Pix_Container ximg = NULL, mask_img = NULL;
4205 4212
4206#define match() \ 4213#define match() \
4207 LA1 = xpm_scan (&s, end, &beg, &len) 4214 LA1 = xpm_scan (&s, end, &beg, &len)
@@ -4286,7 +4293,7 @@ xpm_load_image (struct frame *f,
4286 char *color, *max_color; 4293 char *color, *max_color;
4287 int key, next_key, max_key = 0; 4294 int key, next_key, max_key = 0;
4288 Lisp_Object symbol_color = Qnil, color_val; 4295 Lisp_Object symbol_color = Qnil, color_val;
4289 XColor cdef; 4296 Emacs_Color cdef;
4290 4297
4291 expect (XPM_TK_STRING); 4298 expect (XPM_TK_STRING);
4292 if (len <= chars_per_pixel || len >= BUFSIZ + chars_per_pixel) 4299 if (len <= chars_per_pixel || len >= BUFSIZ + chars_per_pixel)
@@ -4772,18 +4779,18 @@ static int laplace_matrix[9] = {
4772#define COLOR_INTENSITY(R, G, B) ((2 * (R) + 3 * (G) + (B)) / 6) 4779#define COLOR_INTENSITY(R, G, B) ((2 * (R) + 3 * (G) + (B)) / 6)
4773 4780
4774 4781
4775/* On frame F, return an array of XColor structures describing image 4782/* On frame F, return an array of Emacs_Color structures describing image
4776 IMG->pixmap. Each XColor structure has its pixel color set. RGB_P 4783 IMG->pixmap. Each Emacs_Color structure has its pixel color set. RGB_P
4777 means also fill the red/green/blue members of the XColor 4784 means also fill the red/green/blue members of the Emacs_Color
4778 structures. Value is a pointer to the array of XColors structures, 4785 structures. Value is a pointer to the array of Emacs_Color structures,
4779 allocated with xmalloc; it must be freed by the caller. */ 4786 allocated with xmalloc; it must be freed by the caller. */
4780 4787
4781static XColor * 4788static Emacs_Color *
4782image_to_xcolors (struct frame *f, struct image *img, bool rgb_p) 4789image_to_emacs_colors (struct frame *f, struct image *img, bool rgb_p)
4783{ 4790{
4784 int x, y; 4791 int x, y;
4785 XColor *colors, *p; 4792 Emacs_Color *colors, *p;
4786 XImagePtr_or_DC ximg; 4793 Emacs_Pix_Context ximg;
4787 ptrdiff_t nbytes; 4794 ptrdiff_t nbytes;
4788#ifdef HAVE_NTGUI 4795#ifdef HAVE_NTGUI
4789 HGDIOBJ prev; 4796 HGDIOBJ prev;
@@ -4798,13 +4805,13 @@ image_to_xcolors (struct frame *f, struct image *img, bool rgb_p)
4798 /* Get the X image or create a memory device context for IMG. */ 4805 /* Get the X image or create a memory device context for IMG. */
4799 ximg = image_get_x_image_or_dc (f, img, 0, &prev); 4806 ximg = image_get_x_image_or_dc (f, img, 0, &prev);
4800 4807
4801 /* Fill the `pixel' members of the XColor array. I wished there 4808 /* Fill the `pixel' members of the Emacs_Color array. I wished there
4802 were an easy and portable way to circumvent XGetPixel. */ 4809 were an easy and portable way to circumvent XGetPixel. */
4803 p = colors; 4810 p = colors;
4804 for (y = 0; y < img->height; ++y) 4811 for (y = 0; y < img->height; ++y)
4805 { 4812 {
4806#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) 4813#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI)
4807 XColor *row = p; 4814 Emacs_Color *row = p;
4808 for (x = 0; x < img->width; ++x, ++p) 4815 for (x = 0; x < img->width; ++x, ++p)
4809 p->pixel = GET_PIXEL (ximg, x, y); 4816 p->pixel = GET_PIXEL (ximg, x, y);
4810 if (rgb_p) 4817 if (rgb_p)
@@ -4839,7 +4846,7 @@ image_to_xcolors (struct frame *f, struct image *img, bool rgb_p)
4839 stored in ximg->data. */ 4846 stored in ximg->data. */
4840 4847
4841static void 4848static void
4842XPutPixel (XImagePtr ximg, int x, int y, COLORREF color) 4849XPutPixel (XImage *ximg, int x, int y, COLORREF color)
4843{ 4850{
4844 int width = ximg->info.bmiHeader.biWidth; 4851 int width = ximg->info.bmiHeader.biWidth;
4845 unsigned char * pixel; 4852 unsigned char * pixel;
@@ -4878,16 +4885,16 @@ XPutPixel (XImagePtr ximg, int x, int y, COLORREF color)
4878 4885
4879#endif /* HAVE_NTGUI */ 4886#endif /* HAVE_NTGUI */
4880 4887
4881/* Create IMG->pixmap from an array COLORS of XColor structures, whose 4888/* Create IMG->pixmap from an array COLORS of Emacs_Color structures, whose
4882 RGB members are set. F is the frame on which this all happens. 4889 RGB members are set. F is the frame on which this all happens.
4883 COLORS will be freed; an existing IMG->pixmap will be freed, too. */ 4890 COLORS will be freed; an existing IMG->pixmap will be freed, too. */
4884 4891
4885static void 4892static void
4886image_from_xcolors (struct frame *f, struct image *img, XColor *colors) 4893image_from_emacs_colors (struct frame *f, struct image *img, Emacs_Color *colors)
4887{ 4894{
4888 int x, y; 4895 int x, y;
4889 XImagePtr oimg = NULL; 4896 Emacs_Pix_Container oimg = NULL;
4890 XColor *p; 4897 Emacs_Color *p;
4891 4898
4892 init_color_table (); 4899 init_color_table ();
4893 4900
@@ -4925,8 +4932,8 @@ static void
4925image_detect_edges (struct frame *f, struct image *img, 4932image_detect_edges (struct frame *f, struct image *img,
4926 int *matrix, int color_adjust) 4933 int *matrix, int color_adjust)
4927{ 4934{
4928 XColor *colors = image_to_xcolors (f, img, 1); 4935 Emacs_Color *colors = image_to_emacs_colors (f, img, 1);
4929 XColor *new, *p; 4936 Emacs_Color *new, *p;
4930 int x, y, i, sum; 4937 int x, y, i, sum;
4931 ptrdiff_t nbytes; 4938 ptrdiff_t nbytes;
4932 4939
@@ -4969,7 +4976,7 @@ image_detect_edges (struct frame *f, struct image *img,
4969 for (xx = x - 1; xx < x + 2; ++xx, ++i) 4976 for (xx = x - 1; xx < x + 2; ++xx, ++i)
4970 if (matrix[i]) 4977 if (matrix[i])
4971 { 4978 {
4972 XColor *t = COLOR (colors, xx, yy); 4979 Emacs_Color *t = COLOR (colors, xx, yy);
4973 r += matrix[i] * t->red; 4980 r += matrix[i] * t->red;
4974 g += matrix[i] * t->green; 4981 g += matrix[i] * t->green;
4975 b += matrix[i] * t->blue; 4982 b += matrix[i] * t->blue;
@@ -4983,7 +4990,7 @@ image_detect_edges (struct frame *f, struct image *img,
4983 } 4990 }
4984 4991
4985 xfree (colors); 4992 xfree (colors);
4986 image_from_xcolors (f, img, new); 4993 image_from_emacs_colors (f, img, new);
4987 4994
4988#undef COLOR 4995#undef COLOR
4989} 4996}
@@ -5066,8 +5073,8 @@ image_disable_image (struct frame *f, struct image *img)
5066 /* Color (or grayscale). Convert to gray, and equalize. Just 5073 /* Color (or grayscale). Convert to gray, and equalize. Just
5067 drawing such images with a stipple can look very odd, so 5074 drawing such images with a stipple can look very odd, so
5068 we're using this method instead. */ 5075 we're using this method instead. */
5069 XColor *colors = image_to_xcolors (f, img, 1); 5076 Emacs_Color *colors = image_to_emacs_colors (f, img, 1);
5070 XColor *p, *end; 5077 Emacs_Color *p, *end;
5071 const int h = 15000; 5078 const int h = 15000;
5072 const int l = 30000; 5079 const int l = 30000;
5073 5080
@@ -5080,7 +5087,7 @@ image_disable_image (struct frame *f, struct image *img)
5080 p->red = p->green = p->blue = i2; 5087 p->red = p->green = p->blue = i2;
5081 } 5088 }
5082 5089
5083 image_from_xcolors (f, img, colors); 5090 image_from_emacs_colors (f, img, colors);
5084 } 5091 }
5085 5092
5086 /* Draw a cross over the disabled image, if we must or if we 5093 /* Draw a cross over the disabled image, if we must or if we
@@ -5158,13 +5165,13 @@ static void
5158image_build_heuristic_mask (struct frame *f, struct image *img, 5165image_build_heuristic_mask (struct frame *f, struct image *img,
5159 Lisp_Object how) 5166 Lisp_Object how)
5160{ 5167{
5161 XImagePtr_or_DC ximg; 5168 Emacs_Pix_Context ximg;
5162#ifdef HAVE_NTGUI 5169#ifdef HAVE_NTGUI
5163 HGDIOBJ prev; 5170 HGDIOBJ prev;
5164 char *mask_img; 5171 char *mask_img;
5165 int row_width; 5172 int row_width;
5166#elif !defined HAVE_NS 5173#elif !defined HAVE_NS
5167 XImagePtr mask_img; 5174 Emacs_Pix_Container mask_img;
5168#endif 5175#endif
5169 int x, y; 5176 int x, y;
5170 bool use_img_background; 5177 bool use_img_background;
@@ -5400,7 +5407,7 @@ pbm_load (struct frame *f, struct image *img)
5400 char *contents = NULL; 5407 char *contents = NULL;
5401 char *end, *p; 5408 char *end, *p;
5402#ifndef USE_CAIRO 5409#ifndef USE_CAIRO
5403 XImagePtr ximg; 5410 Emacs_Pix_Container ximg;
5404#endif 5411#endif
5405 5412
5406 specified_file = image_spec_value (img->spec, QCfile, NULL); 5413 specified_file = image_spec_value (img->spec, QCfile, NULL);
@@ -5522,7 +5529,7 @@ pbm_load (struct frame *f, struct image *img)
5522 unsigned long fg = FRAME_FOREGROUND_PIXEL (f); 5529 unsigned long fg = FRAME_FOREGROUND_PIXEL (f);
5523 unsigned long bg = FRAME_BACKGROUND_PIXEL (f); 5530 unsigned long bg = FRAME_BACKGROUND_PIXEL (f);
5524#ifdef USE_CAIRO 5531#ifdef USE_CAIRO
5525 XColor xfg, xbg; 5532 Emacs_Color xfg, xbg;
5526 int fga32, bga32; 5533 int fga32, bga32;
5527#endif 5534#endif
5528 /* Parse the image specification. */ 5535 /* Parse the image specification. */
@@ -5542,7 +5549,7 @@ pbm_load (struct frame *f, struct image *img)
5542 xfg.pixel = fg; 5549 xfg.pixel = fg;
5543 x_query_colors (f, &xfg, 1); 5550 x_query_colors (f, &xfg, 1);
5544 } 5551 }
5545 fga32 = xcolor_to_argb32 (xfg); 5552 fga32 = emacs_color_to_argb32 (&xfg);
5546 5553
5547 if (! fmt[PBM_BACKGROUND].count 5554 if (! fmt[PBM_BACKGROUND].count
5548 || ! STRINGP (fmt[PBM_BACKGROUND].value) 5555 || ! STRINGP (fmt[PBM_BACKGROUND].value)
@@ -5555,7 +5562,7 @@ pbm_load (struct frame *f, struct image *img)
5555 xbg.pixel = bg; 5562 xbg.pixel = bg;
5556 x_query_colors (f, &xbg, 1); 5563 x_query_colors (f, &xbg, 1);
5557 } 5564 }
5558 bga32 = xcolor_to_argb32 (xbg); 5565 bga32 = emacs_color_to_argb32 (&xbg);
5559#else 5566#else
5560 if (fmt[PBM_FOREGROUND].count 5567 if (fmt[PBM_FOREGROUND].count
5561 && STRINGP (fmt[PBM_FOREGROUND].value)) 5568 && STRINGP (fmt[PBM_FOREGROUND].value))
@@ -5700,7 +5707,7 @@ pbm_load (struct frame *f, struct image *img)
5700#else 5707#else
5701 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) 5708 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
5702 /* Casting avoids a GCC warning. */ 5709 /* Casting avoids a GCC warning. */
5703 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 5710 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
5704 5711
5705 /* Put ximg into the image. */ 5712 /* Put ximg into the image. */
5706 image_put_x_image (f, img, ximg, 0); 5713 image_put_x_image (f, img, ximg, 0);
@@ -5795,6 +5802,7 @@ DEF_DLL_FN (png_uint_32, png_get_valid, (png_structp, png_infop, png_uint_32));
5795DEF_DLL_FN (void, png_set_strip_16, (png_structp)); 5802DEF_DLL_FN (void, png_set_strip_16, (png_structp));
5796DEF_DLL_FN (void, png_set_expand, (png_structp)); 5803DEF_DLL_FN (void, png_set_expand, (png_structp));
5797DEF_DLL_FN (void, png_set_gray_to_rgb, (png_structp)); 5804DEF_DLL_FN (void, png_set_gray_to_rgb, (png_structp));
5805DEF_DLL_FN (int, png_set_interlace_handling, (png_structp));
5798DEF_DLL_FN (void, png_set_background, 5806DEF_DLL_FN (void, png_set_background,
5799 (png_structp, png_color_16p, int, int, double)); 5807 (png_structp, png_color_16p, int, int, double));
5800DEF_DLL_FN (png_uint_32, png_get_bKGD, 5808DEF_DLL_FN (png_uint_32, png_get_bKGD,
@@ -5833,6 +5841,7 @@ init_png_functions (void)
5833 LOAD_DLL_FN (library, png_set_strip_16); 5841 LOAD_DLL_FN (library, png_set_strip_16);
5834 LOAD_DLL_FN (library, png_set_expand); 5842 LOAD_DLL_FN (library, png_set_expand);
5835 LOAD_DLL_FN (library, png_set_gray_to_rgb); 5843 LOAD_DLL_FN (library, png_set_gray_to_rgb);
5844 LOAD_DLL_FN (library, png_set_interlace_handling);
5836 LOAD_DLL_FN (library, png_set_background); 5845 LOAD_DLL_FN (library, png_set_background);
5837 LOAD_DLL_FN (library, png_get_bKGD); 5846 LOAD_DLL_FN (library, png_get_bKGD);
5838 LOAD_DLL_FN (library, png_read_update_info); 5847 LOAD_DLL_FN (library, png_read_update_info);
@@ -5868,6 +5877,7 @@ init_png_functions (void)
5868# undef png_set_background 5877# undef png_set_background
5869# undef png_set_expand 5878# undef png_set_expand
5870# undef png_set_gray_to_rgb 5879# undef png_set_gray_to_rgb
5880# undef png_set_interlace_handling
5871# undef png_set_longjmp_fn 5881# undef png_set_longjmp_fn
5872# undef png_set_read_fn 5882# undef png_set_read_fn
5873# undef png_set_sig_bytes 5883# undef png_set_sig_bytes
@@ -5892,6 +5902,7 @@ init_png_functions (void)
5892# define png_set_background fn_png_set_background 5902# define png_set_background fn_png_set_background
5893# define png_set_expand fn_png_set_expand 5903# define png_set_expand fn_png_set_expand
5894# define png_set_gray_to_rgb fn_png_set_gray_to_rgb 5904# define png_set_gray_to_rgb fn_png_set_gray_to_rgb
5905# define png_set_interlace_handling fn_png_set_interlace_handling
5895# define png_set_longjmp_fn fn_png_set_longjmp_fn 5906# define png_set_longjmp_fn fn_png_set_longjmp_fn
5896# define png_set_read_fn fn_png_set_read_fn 5907# define png_set_read_fn fn_png_set_read_fn
5897# define png_set_sig_bytes fn_png_set_sig_bytes 5908# define png_set_sig_bytes fn_png_set_sig_bytes
@@ -6022,7 +6033,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6022 cairo_surface_t *surface; 6033 cairo_surface_t *surface;
6023 uint32_t *dataptr; 6034 uint32_t *dataptr;
6024#else 6035#else
6025 XImagePtr ximg, mask_img = NULL; 6036 Emacs_Pix_Container ximg, mask_img = NULL;
6026#endif 6037#endif
6027 6038
6028 /* Find out what file to load. */ 6039 /* Find out what file to load. */
@@ -6180,7 +6191,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6180 /* png_color_16 *image_bg; */ 6191 /* png_color_16 *image_bg; */
6181 Lisp_Object specified_bg 6192 Lisp_Object specified_bg
6182 = image_spec_value (img->spec, QCbackground, NULL); 6193 = image_spec_value (img->spec, QCbackground, NULL);
6183 XColor color; 6194 Emacs_Color color;
6184 6195
6185 /* If the user specified a color, try to use it; if not, use the 6196 /* If the user specified a color, try to use it; if not, use the
6186 current frame background, ignoring any default background 6197 current frame background, ignoring any default background
@@ -6206,7 +6217,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6206 } 6217 }
6207 } 6218 }
6208 6219
6209 /* Update info structure. */ 6220 png_set_interlace_handling (png_ptr);
6210 png_read_update_info (png_ptr, info_ptr); 6221 png_read_update_info (png_ptr, info_ptr);
6211 6222
6212 /* Get number of channels. Valid values are 1 for grayscale images 6223 /* Get number of channels. Valid values are 1 for grayscale images
@@ -6335,7 +6346,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6335#else 6346#else
6336 /* Maybe fill in the background field while we have ximg handy. 6347 /* Maybe fill in the background field while we have ximg handy.
6337 Casting avoids a GCC warning. */ 6348 Casting avoids a GCC warning. */
6338 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 6349 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
6339 6350
6340 /* Put ximg into the image. */ 6351 /* Put ximg into the image. */
6341 image_put_x_image (f, img, ximg, 0); 6352 image_put_x_image (f, img, ximg, 0);
@@ -6345,7 +6356,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6345 { 6356 {
6346 /* Fill in the background_transparent field while we have the 6357 /* Fill in the background_transparent field while we have the
6347 mask handy. Casting avoids a GCC warning. */ 6358 mask handy. Casting avoids a GCC warning. */
6348 image_background_transparent (img, f, (XImagePtr_or_DC)mask_img); 6359 image_background_transparent (img, f, (Emacs_Pix_Context)mask_img);
6349 6360
6350 image_put_x_image (f, img, mask_img, 1); 6361 image_put_x_image (f, img, mask_img, 1);
6351 } 6362 }
@@ -6765,7 +6776,7 @@ jpeg_load_body (struct frame *f, struct image *img,
6765 int i, ir, ig, ib; 6776 int i, ir, ig, ib;
6766#ifndef USE_CAIRO 6777#ifndef USE_CAIRO
6767 unsigned long *colors; 6778 unsigned long *colors;
6768 XImagePtr ximg = NULL; 6779 Emacs_Pix_Container ximg = NULL;
6769#endif 6780#endif
6770 6781
6771 /* Open the JPEG file. */ 6782 /* Open the JPEG file. */
@@ -6955,7 +6966,7 @@ jpeg_load_body (struct frame *f, struct image *img,
6955 /* Maybe fill in the background field while we have ximg handy. */ 6966 /* Maybe fill in the background field while we have ximg handy. */
6956 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) 6967 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
6957 /* Casting avoids a GCC warning. */ 6968 /* Casting avoids a GCC warning. */
6958 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 6969 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
6959 6970
6960 /* Put ximg into the image. */ 6971 /* Put ximg into the image. */
6961 image_put_x_image (f, img, ximg, 0); 6972 image_put_x_image (f, img, ximg, 0);
@@ -7255,7 +7266,7 @@ tiff_load (struct frame *f, struct image *img)
7255 int width, height, x, y, count; 7266 int width, height, x, y, count;
7256 uint32 *buf; 7267 uint32 *buf;
7257 int rc; 7268 int rc;
7258 XImagePtr ximg; 7269 Emacs_Pix_Container ximg;
7259 tiff_memory_source memsrc; 7270 tiff_memory_source memsrc;
7260 Lisp_Object image; 7271 Lisp_Object image;
7261 7272
@@ -7425,7 +7436,7 @@ tiff_load (struct frame *f, struct image *img)
7425 /* Maybe fill in the background field while we have ximg handy. */ 7436 /* Maybe fill in the background field while we have ximg handy. */
7426 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) 7437 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
7427 /* Casting avoids a GCC warning on W32. */ 7438 /* Casting avoids a GCC warning on W32. */
7428 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 7439 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
7429 7440
7430 /* Put ximg into the image. */ 7441 /* Put ximg into the image. */
7431 image_put_x_image (f, img, ximg, 0); 7442 image_put_x_image (f, img, ximg, 0);
@@ -7813,7 +7824,7 @@ gif_load (struct frame *f, struct image *img)
7813 uint32_t *data32 = (uint32_t *) cairo_image_surface_get_data (surface); 7824 uint32_t *data32 = (uint32_t *) cairo_image_surface_get_data (surface);
7814 if (STRINGP (specified_bg)) 7825 if (STRINGP (specified_bg))
7815 { 7826 {
7816 XColor color; 7827 Emacs_Color color;
7817 if (FRAME_TERMINAL (f)->defined_color_hook 7828 if (FRAME_TERMINAL (f)->defined_color_hook
7818 (f, SSDATA (specified_bg), &color, false, false)) 7829 (f, SSDATA (specified_bg), &color, false, false))
7819 { 7830 {
@@ -7829,7 +7840,7 @@ gif_load (struct frame *f, struct image *img)
7829 } 7840 }
7830#else 7841#else
7831 /* Create the X image and pixmap. */ 7842 /* Create the X image and pixmap. */
7832 XImagePtr ximg; 7843 Emacs_Pix_Container ximg;
7833 if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0)) 7844 if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
7834 { 7845 {
7835 gif_close (gif, NULL); 7846 gif_close (gif, NULL);
@@ -8059,7 +8070,7 @@ gif_load (struct frame *f, struct image *img)
8059 /* Maybe fill in the background field while we have ximg handy. */ 8070 /* Maybe fill in the background field while we have ximg handy. */
8060 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) 8071 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
8061 /* Casting avoids a GCC warning. */ 8072 /* Casting avoids a GCC warning. */
8062 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 8073 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
8063 8074
8064 /* Put ximg into the image. */ 8075 /* Put ximg into the image. */
8065 image_put_x_image (f, img, ximg, 0); 8076 image_put_x_image (f, img, ximg, 0);
@@ -8443,7 +8454,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
8443 size_t image_width, image_height; 8454 size_t image_width, image_height;
8444 MagickBooleanType status; 8455 MagickBooleanType status;
8445#ifndef USE_CAIRO 8456#ifndef USE_CAIRO
8446 XImagePtr ximg; 8457 Emacs_Pix_Container ximg;
8447#endif 8458#endif
8448 int x, y; 8459 int x, y;
8449 MagickWand *image_wand; 8460 MagickWand *image_wand;
@@ -8548,7 +8559,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
8548 8559
8549 /* Retrieve the frame's background color, for use later. */ 8560 /* Retrieve the frame's background color, for use later. */
8550 { 8561 {
8551 XColor bgcolor; 8562 Emacs_Color bgcolor;
8552 Lisp_Object specified_bg; 8563 Lisp_Object specified_bg;
8553 8564
8554 specified_bg = image_spec_value (img->spec, QCbackground, NULL); 8565 specified_bg = image_spec_value (img->spec, QCbackground, NULL);
@@ -9274,7 +9285,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9274 g_object_unref (pixbuf); 9285 g_object_unref (pixbuf);
9275#else 9286#else
9276 /* Try to create a x pixmap to hold the svg pixmap. */ 9287 /* Try to create a x pixmap to hold the svg pixmap. */
9277 XImagePtr ximg; 9288 Emacs_Pix_Container ximg;
9278 if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0)) 9289 if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
9279 { 9290 {
9280 g_object_unref (pixbuf); 9291 g_object_unref (pixbuf);
@@ -9285,7 +9296,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9285 9296
9286 /* Handle alpha channel by combining the image with a background 9297 /* Handle alpha channel by combining the image with a background
9287 color. */ 9298 color. */
9288 XColor background; 9299 Emacs_Color background;
9289 Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL); 9300 Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, NULL);
9290 if (!STRINGP (specified_bg) 9301 if (!STRINGP (specified_bg)
9291 || !FRAME_TERMINAL (f)->defined_color_hook (f, 9302 || !FRAME_TERMINAL (f)->defined_color_hook (f,
@@ -9341,7 +9352,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
9341 9352
9342 /* Maybe fill in the background field while we have ximg handy. 9353 /* Maybe fill in the background field while we have ximg handy.
9343 Casting avoids a GCC warning. */ 9354 Casting avoids a GCC warning. */
9344 IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg); 9355 IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg);
9345 9356
9346 /* Put ximg into the image. */ 9357 /* Put ximg into the image. */
9347 image_put_x_image (f, img, ximg, 0); 9358 image_put_x_image (f, img, ximg, 0);
@@ -9569,7 +9580,7 @@ x_kill_gs_process (Pixmap pixmap, struct frame *f)
9569 img->pixmap. */ 9580 img->pixmap. */
9570 if (x_mutable_colormap (FRAME_X_VISUAL (f))) 9581 if (x_mutable_colormap (FRAME_X_VISUAL (f)))
9571 { 9582 {
9572 XImagePtr ximg; 9583 XImage *ximg;
9573 9584
9574 block_input (); 9585 block_input ();
9575 9586
diff --git a/src/keyboard.c b/src/keyboard.c
index 5f2b7afe6d1..bb4d185c914 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3909,7 +3909,7 @@ kbd_buffer_get_event (KBOARD **kbp,
3909 case END_SESSION_EVENT: 3909 case END_SESSION_EVENT:
3910 case LANGUAGE_CHANGE_EVENT: 3910 case LANGUAGE_CHANGE_EVENT:
3911#endif 3911#endif
3912#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (HAVE_NS) 3912#ifdef HAVE_WINDOW_SYSTEM
3913 case DELETE_WINDOW_EVENT: 3913 case DELETE_WINDOW_EVENT:
3914 case ICONIFY_EVENT: 3914 case ICONIFY_EVENT:
3915 case DEICONIFY_EVENT: 3915 case DEICONIFY_EVENT:
@@ -5283,7 +5283,7 @@ make_lispy_event (struct input_event *event)
5283 5283
5284 switch (event->kind) 5284 switch (event->kind)
5285 { 5285 {
5286#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (HAVE_NS) 5286#ifdef HAVE_WINDOW_SYSTEM
5287 case DELETE_WINDOW_EVENT: 5287 case DELETE_WINDOW_EVENT:
5288 /* Make an event (delete-frame (FRAME)). */ 5288 /* Make an event (delete-frame (FRAME)). */
5289 return list2 (Qdelete_frame, list1 (event->frame_or_window)); 5289 return list2 (Qdelete_frame, list1 (event->frame_or_window));
diff --git a/src/lisp.h b/src/lisp.h
index 876b757bf3f..6db90596899 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2679,7 +2679,7 @@ struct Lisp_Buffer_Objfwd
2679 { 2679 {
2680 enum Lisp_Fwd_Type type; /* = Lisp_Fwd_Buffer_Obj */ 2680 enum Lisp_Fwd_Type type; /* = Lisp_Fwd_Buffer_Obj */
2681 int offset; 2681 int offset;
2682 /* One of Qnil, Qfixnump, Qsymbolp, Qstringp, Qfloatp or Qnumberp. */ 2682 /* One of Qnil, Qintegerp, Qsymbolp, Qstringp, Qfloatp or Qnumberp. */
2683 Lisp_Object predicate; 2683 Lisp_Object predicate;
2684 }; 2684 };
2685 2685
diff --git a/src/macfont.m b/src/macfont.m
index 0ade77e7337..f825e6291d3 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -1639,7 +1639,7 @@ static Lisp_Object macfont_open (struct frame *, Lisp_Object, int);
1639static void macfont_close (struct font *); 1639static void macfont_close (struct font *);
1640static int macfont_has_char (Lisp_Object, int); 1640static int macfont_has_char (Lisp_Object, int);
1641static unsigned macfont_encode_char (struct font *, int); 1641static unsigned macfont_encode_char (struct font *, int);
1642static void macfont_text_extents (struct font *, unsigned int *, int, 1642static void macfont_text_extents (struct font *, const unsigned int *, int,
1643 struct font_metrics *); 1643 struct font_metrics *);
1644static int macfont_draw (struct glyph_string *, int, int, int, int, bool); 1644static int macfont_draw (struct glyph_string *, int, int, int, int, bool);
1645static Lisp_Object macfont_shape (Lisp_Object); 1645static Lisp_Object macfont_shape (Lisp_Object);
@@ -2735,7 +2735,7 @@ macfont_encode_char (struct font *font, int c)
2735} 2735}
2736 2736
2737static void 2737static void
2738macfont_text_extents (struct font *font, unsigned int *code, int nglyphs, 2738macfont_text_extents (struct font *font, const unsigned int *code, int nglyphs,
2739 struct font_metrics *metrics) 2739 struct font_metrics *metrics)
2740{ 2740{
2741 int width, i; 2741 int width, i;
@@ -2818,7 +2818,18 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y,
2818 } 2818 }
2819 } 2819 }
2820 2820
2821 context = [[NSGraphicsContext currentContext] graphicsPort]; 2821#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101000
2822#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
2823 if ([[NSGraphicsContext currentContext] respondsToSelector:@selector(CGContext)])
2824#endif
2825 context = [[NSGraphicsContext currentContext] CGContext];
2826#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
2827 else
2828#endif
2829#endif
2830#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
2831 context = [[NSGraphicsContext currentContext] graphicsPort];
2832#endif
2822 CGContextSaveGState (context); 2833 CGContextSaveGState (context);
2823 2834
2824 if (!CGRectIsNull (background_rect)) 2835 if (!CGRectIsNull (background_rect))
diff --git a/src/msdos.h b/src/msdos.h
index 90ceea8e3d2..3614c94dd0e 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -86,7 +86,6 @@ typedef int GC;
86typedef int Pixmap; 86typedef int Pixmap;
87typedef int Display; 87typedef int Display;
88typedef int Window; 88typedef int Window;
89typedef int XRectangle;
90#define PIX_TYPE unsigned long 89#define PIX_TYPE unsigned long
91#define XDISPLAY 90#define XDISPLAY
92 91
diff --git a/src/nsfont.m b/src/nsfont.m
index 9721e489357..eca97ab86cc 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -945,7 +945,7 @@ nsfont_encode_char (struct font *font, int c)
945 of METRICS. The glyphs are specified by their glyph codes in 945 of METRICS. The glyphs are specified by their glyph codes in
946 CODE (length NGLYPHS). */ 946 CODE (length NGLYPHS). */
947static void 947static void
948nsfont_text_extents (struct font *font, unsigned int *code, 948nsfont_text_extents (struct font *font, const unsigned int *code,
949 int nglyphs, struct font_metrics *metrics) 949 int nglyphs, struct font_metrics *metrics)
950{ 950{
951 struct nsfont_info *font_info = (struct nsfont_info *)font; 951 struct nsfont_info *font_info = (struct nsfont_info *)font;
diff --git a/src/nsgui.h b/src/nsgui.h
index ab6cdff1e5c..c21953593ad 100644
--- a/src/nsgui.h
+++ b/src/nsgui.h
@@ -58,72 +58,23 @@ typedef struct _XCharStruct
58 int descent; 58 int descent;
59} XCharStruct; 59} XCharStruct;
60 60
61/* Fake structure from Xlib.h to represent two-byte characters. */
62#ifndef __OBJC__
63typedef unsigned short unichar;
64#endif
65typedef unichar XChar2b;
66
67#define STORE_XCHAR2B(chp, b1, b2) \
68 (*(chp) = ((XChar2b)((((b1) & 0x00ff) << 8) | ((b2) & 0x00ff))))
69
70#define XCHAR2B_BYTE1(chp) \
71 ((*(chp) & 0xff00) >> 8)
72
73#define XCHAR2B_BYTE2(chp) \
74 (*(chp) & 0x00ff)
75
76/* Used in xdisp.c when comparing faces and frame colors. */ 61/* Used in xdisp.c when comparing faces and frame colors. */
77extern unsigned long ns_color_index_to_rgba(int idx, struct frame *f); 62extern unsigned long ns_color_index_to_rgba(int idx, struct frame *f);
78 63
79/* XXX: xfaces requires these structures, but the question is are we
80 forced to use them? */
81typedef struct _XGCValues
82{
83 unsigned long foreground;
84 unsigned long background;
85#ifdef __OBJC__ 64#ifdef __OBJC__
86 struct ns_font *font; 65typedef id Emacs_Pixmap;
87#else 66#else
88 void *font; 67typedef void *Emacs_Pixmap;
89#endif 68#endif
90} XGCValues;
91
92typedef XGCValues * GC;
93
94#define GCForeground 0x01
95#define GCBackground 0x02
96#define GCFont 0x03
97 69
98#ifdef __OBJC__ 70#ifdef __OBJC__
99typedef id Pixmap; 71typedef NSCursor *Emacs_Cursor;
100#else 72#else
101typedef void *Pixmap; 73typedef void *Emacs_Cursor;
102#endif 74#endif
103 75
104#ifdef __OBJC__
105typedef NSCursor * Cursor;
106#else
107typedef void *Cursor;
108#endif
109
110#define No_Cursor (0)
111
112#ifdef __OBJC__
113typedef NSColor * Color;
114#else
115typedef void * Color;
116#endif
117typedef int Window; 76typedef int Window;
118 77
119
120/* Some sort of attempt to normalize rectangle handling. Seems a bit
121 much for what is accomplished. */
122typedef struct {
123 int x, y;
124 unsigned width, height;
125} XRectangle;
126
127#ifndef __OBJC__ 78#ifndef __OBJC__
128#if defined (__LP64__) && __LP64__ 79#if defined (__LP64__) && __LP64__
129typedef double CGFloat; 80typedef double CGFloat;
@@ -137,13 +88,13 @@ typedef struct _NSRect { NSPoint origin; NSSize size; } NSRect;
137 88
138#define NativeRectangle NSRect 89#define NativeRectangle NSRect
139 90
140#define CONVERT_TO_XRECT(xr, nr) \ 91#define CONVERT_TO_EMACS_RECT(xr, nr) \
141 ((xr).x = (nr).origin.x, \ 92 ((xr).x = (nr).origin.x, \
142 (xr).y = (nr).origin.y, \ 93 (xr).y = (nr).origin.y, \
143 (xr).width = (nr).size.width, \ 94 (xr).width = (nr).size.width, \
144 (xr).height = (nr).size.height) 95 (xr).height = (nr).size.height)
145 96
146#define CONVERT_FROM_XRECT(xr, nr) \ 97#define CONVERT_FROM_EMACS_RECT(xr, nr) \
147 ((nr).origin.x = (xr).x, \ 98 ((nr).origin.x = (xr).x, \
148 (nr).origin.y = (xr).y, \ 99 (nr).origin.y = (xr).y, \
149 (nr).size.width = (xr).width, \ 100 (nr).size.width = (xr).width, \
diff --git a/src/nsimage.m b/src/nsimage.m
index 33236c48d42..0249d22acae 100644
--- a/src/nsimage.m
+++ b/src/nsimage.m
@@ -313,8 +313,8 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
313 if (bmRep == nil || color == nil) 313 if (bmRep == nil || color == nil)
314 return self; 314 return self;
315 315
316 if ([color colorSpaceName] != NSCalibratedRGBColorSpace) 316 if ([color colorSpace] != [NSColorSpace deviceRGBColorSpace])
317 rgbColor = [color colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; 317 rgbColor = [color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]];
318 else 318 else
319 rgbColor = color; 319 rgbColor = color;
320 320
diff --git a/src/nsmenu.m b/src/nsmenu.m
index fd1323344b3..3fe06cda02a 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -668,9 +668,9 @@ ns_activate_menubar (struct frame *f)
668 /* Draw radio buttons and tickboxes. */ 668 /* Draw radio buttons and tickboxes. */
669 if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE || 669 if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE ||
670 wv->button_type == BUTTON_TYPE_RADIO)) 670 wv->button_type == BUTTON_TYPE_RADIO))
671 [item setState: NSOnState]; 671 [item setState: NSControlStateValueOn];
672 else 672 else
673 [item setState: NSOffState]; 673 [item setState: NSControlStateValueOff];
674 674
675 [item setTag: (NSInteger)wv->call_data]; 675 [item setTag: (NSInteger)wv->call_data];
676 } 676 }
@@ -1594,7 +1594,7 @@ ns_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
1594 [cell setBordered: NO]; 1594 [cell setBordered: NO];
1595 [cell setEnabled: NO]; 1595 [cell setEnabled: NO];
1596 [cell setCellAttribute: NSCellIsInsetButton to: 8]; 1596 [cell setCellAttribute: NSCellIsInsetButton to: 8];
1597 [cell setBezelStyle: NSRoundedBezelStyle]; 1597 [cell setBezelStyle: NSBezelStyleRounded];
1598 1598
1599 matrix = [[NSMatrix alloc] initWithFrame: contentRect 1599 matrix = [[NSMatrix alloc] initWithFrame: contentRect
1600 mode: NSHighlightModeMatrix 1600 mode: NSHighlightModeMatrix
@@ -1607,7 +1607,6 @@ ns_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
1607 [matrix autorelease]; 1607 [matrix autorelease];
1608 1608
1609 [[self contentView] addSubview: matrix]; 1609 [[self contentView] addSubview: matrix];
1610 [self setOneShot: YES];
1611 [self setReleasedWhenClosed: YES]; 1610 [self setReleasedWhenClosed: YES];
1612 [self setHidesOnDeactivate: YES]; 1611 [self setHidesOnDeactivate: YES];
1613 return self; 1612 return self;
diff --git a/src/nsselect.m b/src/nsselect.m
index cf36c869eb1..b044fe6f32d 100644
--- a/src/nsselect.m
+++ b/src/nsselect.m
@@ -57,7 +57,7 @@ symbol_to_nsstring (Lisp_Object sym)
57 if (EQ (sym, QCLIPBOARD)) return NSPasteboardNameGeneral; 57 if (EQ (sym, QCLIPBOARD)) return NSPasteboardNameGeneral;
58 if (EQ (sym, QPRIMARY)) return NXPrimaryPboard; 58 if (EQ (sym, QPRIMARY)) return NXPrimaryPboard;
59 if (EQ (sym, QSECONDARY)) return NXSecondaryPboard; 59 if (EQ (sym, QSECONDARY)) return NXSecondaryPboard;
60 if (EQ (sym, QTEXT)) return NSStringPboardType; 60 if (EQ (sym, QTEXT)) return NSPasteboardTypeString;
61 return [NSString stringWithUTF8String: SSDATA (SYMBOL_NAME (sym))]; 61 return [NSString stringWithUTF8String: SSDATA (SYMBOL_NAME (sym))];
62} 62}
63 63
@@ -76,11 +76,11 @@ ns_string_to_symbol (NSString *t)
76 return QPRIMARY; 76 return QPRIMARY;
77 if ([t isEqualToString: NXSecondaryPboard]) 77 if ([t isEqualToString: NXSecondaryPboard])
78 return QSECONDARY; 78 return QSECONDARY;
79 if ([t isEqualToString: NSStringPboardType]) 79 if ([t isEqualToString: NSPasteboardTypeString])
80 return QTEXT; 80 return QTEXT;
81 if ([t isEqualToString: NSFilenamesPboardType]) 81 if ([t isEqualToString: NSFilenamesPboardType])
82 return QFILE_NAME; 82 return QFILE_NAME;
83 if ([t isEqualToString: NSTabularTextPboardType]) 83 if ([t isEqualToString: NSPasteboardTypeTabularText])
84 return QTEXT; 84 return QTEXT;
85 return intern ([t UTF8String]); 85 return intern ([t UTF8String]);
86} 86}
@@ -193,7 +193,7 @@ ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype)
193 else 193 else
194 { 194 {
195 // Used for ns-own-selection-internal. 195 // Used for ns-own-selection-internal.
196 eassert (gtype == NSStringPboardType); 196 eassert (gtype == NSPasteboardTypeString);
197 [pb setString: nsStr forType: gtype]; 197 [pb setString: nsStr forType: gtype];
198 } 198 }
199 [nsStr release]; 199 [nsStr release];
@@ -345,7 +345,7 @@ anything that the functions on `selection-converter-alist' know about. */)
345 } 345 }
346 346
347 /* We only support copy of text. */ 347 /* We only support copy of text. */
348 type = NSStringPboardType; 348 type = NSPasteboardTypeString;
349 target_symbol = ns_string_to_symbol (type); 349 target_symbol = ns_string_to_symbol (type);
350 if (STRINGP (value)) 350 if (STRINGP (value))
351 { 351 {
@@ -472,9 +472,9 @@ nxatoms_of_nsselect (void)
472 [NSNumber numberWithLong:0], NSPasteboardNameGeneral, 472 [NSNumber numberWithLong:0], NSPasteboardNameGeneral,
473 [NSNumber numberWithLong:0], NXPrimaryPboard, 473 [NSNumber numberWithLong:0], NXPrimaryPboard,
474 [NSNumber numberWithLong:0], NXSecondaryPboard, 474 [NSNumber numberWithLong:0], NXSecondaryPboard,
475 [NSNumber numberWithLong:0], NSStringPboardType, 475 [NSNumber numberWithLong:0], NSPasteboardTypeString,
476 [NSNumber numberWithLong:0], NSFilenamesPboardType, 476 [NSNumber numberWithLong:0], NSFilenamesPboardType,
477 [NSNumber numberWithLong:0], NSTabularTextPboardType, 477 [NSNumber numberWithLong:0], NSPasteboardTypeTabularText,
478 nil] retain]; 478 nil] retain];
479} 479}
480 480
diff --git a/src/nsterm.h b/src/nsterm.h
index ffaf809785e..1e56276ca3c 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -872,10 +872,10 @@ struct ns_display_info
872 Lisp_Object rdb; 872 Lisp_Object rdb;
873 873
874 /* The cursor to use for vertical scroll bars. */ 874 /* The cursor to use for vertical scroll bars. */
875 Cursor vertical_scroll_bar_cursor; 875 Emacs_Cursor vertical_scroll_bar_cursor;
876 876
877 /* The cursor to use for horizontal scroll bars. */ 877 /* The cursor to use for horizontal scroll bars. */
878 Cursor horizontal_scroll_bar_cursor; 878 Emacs_Cursor horizontal_scroll_bar_cursor;
879 879
880 /* Information about the range of text currently shown in 880 /* Information about the range of text currently shown in
881 mouse-face. */ 881 mouse-face. */
@@ -931,24 +931,24 @@ struct ns_output
931#endif 931#endif
932 932
933 /* NSCursors are initialized in initFrameFromEmacs. */ 933 /* NSCursors are initialized in initFrameFromEmacs. */
934 Cursor text_cursor; 934 Emacs_Cursor text_cursor;
935 Cursor nontext_cursor; 935 Emacs_Cursor nontext_cursor;
936 Cursor modeline_cursor; 936 Emacs_Cursor modeline_cursor;
937 Cursor hand_cursor; 937 Emacs_Cursor hand_cursor;
938 Cursor hourglass_cursor; 938 Emacs_Cursor hourglass_cursor;
939 Cursor horizontal_drag_cursor; 939 Emacs_Cursor horizontal_drag_cursor;
940 Cursor vertical_drag_cursor; 940 Emacs_Cursor vertical_drag_cursor;
941 Cursor left_edge_cursor; 941 Emacs_Cursor left_edge_cursor;
942 Cursor top_left_corner_cursor; 942 Emacs_Cursor top_left_corner_cursor;
943 Cursor top_edge_cursor; 943 Emacs_Cursor top_edge_cursor;
944 Cursor top_right_corner_cursor; 944 Emacs_Cursor top_right_corner_cursor;
945 Cursor right_edge_cursor; 945 Emacs_Cursor right_edge_cursor;
946 Cursor bottom_right_corner_cursor; 946 Emacs_Cursor bottom_right_corner_cursor;
947 Cursor bottom_edge_cursor; 947 Emacs_Cursor bottom_edge_cursor;
948 Cursor bottom_left_corner_cursor; 948 Emacs_Cursor bottom_left_corner_cursor;
949 949
950 /* NS-specific */ 950 /* NS-specific */
951 Cursor current_pointer; 951 Emacs_Cursor current_pointer;
952 952
953 /* lord knows why Emacs needs to know about our Window ids.. */ 953 /* lord knows why Emacs needs to know about our Window ids.. */
954 Window window_desc, parent_desc; 954 Window window_desc, parent_desc;
@@ -1134,10 +1134,10 @@ extern void ns_set_doc_edited (void);
1134extern bool 1134extern bool
1135ns_defined_color (struct frame *f, 1135ns_defined_color (struct frame *f,
1136 const char *name, 1136 const char *name,
1137 XColor *color_def, bool alloc, 1137 Emacs_Color *color_def, bool alloc,
1138 bool makeIndex); 1138 bool makeIndex);
1139extern void 1139extern void
1140ns_query_color (void *col, XColor *color_def, bool setPixel); 1140ns_query_color (void *col, Emacs_Color *color_def, bool setPixel);
1141 1141
1142#ifdef __OBJC__ 1142#ifdef __OBJC__
1143extern int ns_lisp_to_color (Lisp_Object color, NSColor **col); 1143extern int ns_lisp_to_color (Lisp_Object color, NSColor **col);
@@ -1165,10 +1165,6 @@ extern void ns_release_autorelease_pool (void *);
1165extern const char *ns_get_defaults_value (const char *key); 1165extern const char *ns_get_defaults_value (const char *key);
1166extern void ns_init_locale (void); 1166extern void ns_init_locale (void);
1167 1167
1168#ifdef NS_IMPL_COCOA
1169extern void ns_enable_screen_updates (void);
1170#endif
1171
1172/* in nsmenu */ 1168/* in nsmenu */
1173extern void update_frame_tool_bar (struct frame *f); 1169extern void update_frame_tool_bar (struct frame *f);
1174extern void free_frame_tool_bar (struct frame *f); 1170extern void free_frame_tool_bar (struct frame *f);
@@ -1336,4 +1332,14 @@ enum NSWindowTabbingMode
1336/* Deprecated in macOS 10.13. */ 1332/* Deprecated in macOS 10.13. */
1337#define NSPasteboardNameGeneral NSGeneralPboard 1333#define NSPasteboardNameGeneral NSGeneralPboard
1338#endif 1334#endif
1335
1336#if !defined (NS_IMPL_COCOA) || !defined (MAC_OS_X_VERSION_10_14)
1337/* Deprecated in macOS 10.14. */
1338#define NSPasteboardTypeString NSStringPboardType
1339#define NSPasteboardTypeTabularText NSTabularTextPboardType
1340#define NSPasteboardTypeURL NSURLPboardType
1341#define NSControlStateValueOn NSOnState
1342#define NSControlStateValueOff NSOffState
1343#define NSBezelStyleRounded NSRoundedBezelStyle
1344#endif
1339#endif /* HAVE_NS */ 1345#endif /* HAVE_NS */
diff --git a/src/nsterm.m b/src/nsterm.m
index d688aceca53..0cae5e9d448 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -160,20 +160,28 @@ char const * nstrace_fullscreen_type_name (int fs_type)
160 160
161- (NSColor *)colorUsingDefaultColorSpace 161- (NSColor *)colorUsingDefaultColorSpace
162{ 162{
163 /* FIXMES: We're checking for colorWithSRGBRed here so this will 163 /* FIXME: We're checking for colorWithSRGBRed here so this will only
164 only work in the same place as in the method above. It should 164 work in the same place as in the method above. It should really
165 really be a check whether we're on macOS 10.7 or above. */ 165 be a check whether we're on macOS 10.7 or above. */
166#if defined (NS_IMPL_COCOA) \ 166#if defined (NS_IMPL_COCOA) \
167 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 167 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
168 if (ns_use_srgb_colorspace
169#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 168#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
170 && [NSColor respondsToSelector: 169 if ([NSColor respondsToSelector:
171 @selector(colorWithSRGBRed:green:blue:alpha:)] 170 @selector(colorWithSRGBRed:green:blue:alpha:)])
172#endif 171#endif
173 ) 172 {
174 return [self colorUsingColorSpace: [NSColorSpace sRGBColorSpace]]; 173 if (ns_use_srgb_colorspace)
174 return [self colorUsingColorSpace: [NSColorSpace sRGBColorSpace]];
175 else
176 return [self colorUsingColorSpace: [NSColorSpace deviceRGBColorSpace]];
177 }
178#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
179 else
175#endif 180#endif
181#endif /* NS_IMPL_COCOA && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */
182#if defined (NS_IMPL_GNUSTEP) || MAC_OS_X_VERSION_MIN_REQUIRED < 1070
176 return [self colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; 183 return [self colorUsingColorSpaceName: NSCalibratedRGBColorSpace];
184#endif
177} 185}
178 186
179@end 187@end
@@ -283,9 +291,6 @@ static int ns_window_num = 0;
283static BOOL ns_fake_keydown = NO; 291static BOOL ns_fake_keydown = NO;
284#ifdef NS_IMPL_COCOA 292#ifdef NS_IMPL_COCOA
285static BOOL ns_menu_bar_is_hidden = NO; 293static BOOL ns_menu_bar_is_hidden = NO;
286
287/* The number of times NSDisableScreenUpdates has been called. */
288static int disable_screen_updates_count = 0;
289#endif 294#endif
290/* static int debug_lock = 0; */ 295/* static int debug_lock = 0; */
291 296
@@ -688,40 +693,6 @@ ns_release_autorelease_pool (void *pool)
688} 693}
689 694
690 695
691#ifdef NS_IMPL_COCOA
692/* Disabling screen updates can be used to make several actions appear
693 "atomic" to the end user. It seems some actions can still update
694 the display, though.
695
696 When we re-enable screen updates the number of calls to
697 NSEnableScreenUpdates should match the number to
698 NSDisableScreenUpdates.
699
700 We use these functions to prevent the user seeing a blank frame
701 after it has been resized. ns_set_window_size disables updates and
702 when redisplay completes unwind_redisplay enables them again
703 (bug#30699). */
704
705static void
706ns_disable_screen_updates (void)
707{
708 NSDisableScreenUpdates ();
709 disable_screen_updates_count++;
710}
711
712void
713ns_enable_screen_updates (void)
714/* Re-enable screen updates. Called from unwind_redisplay. */
715{
716 while (disable_screen_updates_count > 0)
717 {
718 NSEnableScreenUpdates ();
719 disable_screen_updates_count--;
720 }
721}
722#endif
723
724
725static BOOL 696static BOOL
726ns_menu_bar_should_be_hidden (void) 697ns_menu_bar_should_be_hidden (void)
727/* True, if the menu bar should be hidden. */ 698/* True, if the menu bar should be hidden. */
@@ -1779,15 +1750,6 @@ ns_set_window_size (struct frame *f,
1779 1750
1780 block_input (); 1751 block_input ();
1781 1752
1782#ifdef NS_IMPL_COCOA
1783 /* To prevent showing the user a blank frame, stop updates being
1784 flushed to the screen until after redisplay has completed. This
1785 breaks live resize (resizing with a mouse), so don't do it if
1786 we're in a live resize loop. */
1787 if (![view inLiveResize])
1788 ns_disable_screen_updates ();
1789#endif
1790
1791 if (pixelwise) 1753 if (pixelwise)
1792 { 1754 {
1793 pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width); 1755 pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
@@ -2327,7 +2289,7 @@ ns_color_index_to_rgba(int idx, struct frame *f)
2327} 2289}
2328 2290
2329void 2291void
2330ns_query_color(void *col, XColor *color_def, bool setPixel) 2292ns_query_color(void *col, Emacs_Color *color_def, bool setPixel)
2331/* -------------------------------------------------------------------------- 2293/* --------------------------------------------------------------------------
2332 Get ARGB values out of NSColor col and put them into color_def. 2294 Get ARGB values out of NSColor col and put them into color_def.
2333 If setPixel, set the pixel to a concatenated version. 2295 If setPixel, set the pixel to a concatenated version.
@@ -2350,7 +2312,7 @@ ns_query_color(void *col, XColor *color_def, bool setPixel)
2350bool 2312bool
2351ns_defined_color (struct frame *f, 2313ns_defined_color (struct frame *f,
2352 const char *name, 2314 const char *name,
2353 XColor *color_def, 2315 Emacs_Color *color_def,
2354 bool alloc, 2316 bool alloc,
2355 bool makeIndex) 2317 bool makeIndex)
2356/* -------------------------------------------------------------------------- 2318/* --------------------------------------------------------------------------
@@ -2378,7 +2340,7 @@ ns_defined_color (struct frame *f,
2378} 2340}
2379 2341
2380static void 2342static void
2381ns_query_frame_background_color (struct frame *f, XColor *bgcolor) 2343ns_query_frame_background_color (struct frame *f, Emacs_Color *bgcolor)
2382/* -------------------------------------------------------------------------- 2344/* --------------------------------------------------------------------------
2383 External (hook): Store F's background color into *BGCOLOR 2345 External (hook): Store F's background color into *BGCOLOR
2384 -------------------------------------------------------------------------- */ 2346 -------------------------------------------------------------------------- */
@@ -2576,7 +2538,7 @@ ns_frame_up_to_date (struct frame *f)
2576 2538
2577 2539
2578static void 2540static void
2579ns_define_frame_cursor (struct frame *f, Cursor cursor) 2541ns_define_frame_cursor (struct frame *f, Emacs_Cursor cursor)
2580/* -------------------------------------------------------------------------- 2542/* --------------------------------------------------------------------------
2581 External (RIF): set frame mouse pointer type. 2543 External (RIF): set frame mouse pointer type.
2582 -------------------------------------------------------------------------- */ 2544 -------------------------------------------------------------------------- */
@@ -4972,7 +4934,7 @@ ns_judge_scroll_bars (struct frame *f)
4972 ========================================================================== */ 4934 ========================================================================== */
4973 4935
4974static void 4936static void
4975ns_free_pixmap (struct frame *_f, Pixmap pixmap) 4937ns_free_pixmap (struct frame *_f, Emacs_Pixmap pixmap)
4976{ 4938{
4977 ns_release_object (pixmap); 4939 ns_release_object (pixmap);
4978} 4940}
@@ -5459,14 +5421,14 @@ ns_term_init (Lisp_Object display_name)
5459 5421
5460 NSTRACE_MSG ("Input/output types"); 5422 NSTRACE_MSG ("Input/output types");
5461 5423
5462 ns_send_types = [[NSArray arrayWithObjects: NSStringPboardType, nil] retain]; 5424 ns_send_types = [[NSArray arrayWithObjects: NSPasteboardTypeString, nil] retain];
5463 ns_return_types = [[NSArray arrayWithObjects: NSStringPboardType, nil] 5425 ns_return_types = [[NSArray arrayWithObjects: NSPasteboardTypeString, nil]
5464 retain]; 5426 retain];
5465 ns_drag_types = [[NSArray arrayWithObjects: 5427 ns_drag_types = [[NSArray arrayWithObjects:
5466 NSStringPboardType, 5428 NSPasteboardTypeString,
5467 NSTabularTextPboardType, 5429 NSPasteboardTypeTabularText,
5468 NSFilenamesPboardType, 5430 NSFilenamesPboardType,
5469 NSURLPboardType, nil] retain]; 5431 NSPasteboardTypeURL, nil] retain];
5470 5432
5471 /* If fullscreen is in init/default-frame-alist, focus isn't set 5433 /* If fullscreen is in init/default-frame-alist, focus isn't set
5472 right for fullscreen windows, so set this. */ 5434 right for fullscreen windows, so set this. */
@@ -8276,6 +8238,9 @@ not_in_argv (NSString *arg)
8276 { 8238 {
8277 return NO; 8239 return NO;
8278 } 8240 }
8241 /* FIXME: NSFilenamesPboardType is deprecated in 10.14, but the
8242 NSURL method can only handle one file at a time. Stick with the
8243 existing code at the moment. */
8279 else if ([type isEqualToString: NSFilenamesPboardType]) 8244 else if ([type isEqualToString: NSFilenamesPboardType])
8280 { 8245 {
8281 NSArray *files; 8246 NSArray *files;
@@ -8370,8 +8335,8 @@ not_in_argv (NSString *arg)
8370 8335
8371 NSTRACE ("[EmacsView writeSelectionToPasteboard:types:]"); 8336 NSTRACE ("[EmacsView writeSelectionToPasteboard:types:]");
8372 8337
8373 /* We only support NSStringPboardType. */ 8338 /* We only support NSPasteboardTypeString. */
8374 if ([types containsObject:NSStringPboardType] == NO) { 8339 if ([types containsObject:NSPasteboardTypeString] == NO) {
8375 return NO; 8340 return NO;
8376 } 8341 }
8377 8342
@@ -8385,7 +8350,7 @@ not_in_argv (NSString *arg)
8385 if (! STRINGP (val)) 8350 if (! STRINGP (val))
8386 return NO; 8351 return NO;
8387 8352
8388 typesDeclared = [NSArray arrayWithObject:NSStringPboardType]; 8353 typesDeclared = [NSArray arrayWithObject:NSPasteboardTypeString];
8389 [pb declareTypes:typesDeclared owner:nil]; 8354 [pb declareTypes:typesDeclared owner:nil];
8390 ns_string_to_pasteboard (pb, val); 8355 ns_string_to_pasteboard (pb, val);
8391 return YES; 8356 return YES;
@@ -9047,10 +9012,12 @@ not_in_argv (NSString *arg)
9047 last_hit_part = horizontal ? scroll_bar_before_handle : scroll_bar_above_handle; break; 9012 last_hit_part = horizontal ? scroll_bar_before_handle : scroll_bar_above_handle; break;
9048 case NSScrollerIncrementPage: 9013 case NSScrollerIncrementPage:
9049 last_hit_part = horizontal ? scroll_bar_after_handle : scroll_bar_below_handle; break; 9014 last_hit_part = horizontal ? scroll_bar_after_handle : scroll_bar_below_handle; break;
9015#if defined (NS_IMPL_GNUSTEP) || MAC_OS_X_VERSION_MIN_REQUIRED < 1070
9050 case NSScrollerDecrementLine: 9016 case NSScrollerDecrementLine:
9051 last_hit_part = horizontal ? scroll_bar_left_arrow : scroll_bar_up_arrow; break; 9017 last_hit_part = horizontal ? scroll_bar_left_arrow : scroll_bar_up_arrow; break;
9052 case NSScrollerIncrementLine: 9018 case NSScrollerIncrementLine:
9053 last_hit_part = horizontal ? scroll_bar_right_arrow : scroll_bar_down_arrow; break; 9019 last_hit_part = horizontal ? scroll_bar_right_arrow : scroll_bar_down_arrow; break;
9020#endif
9054 case NSScrollerKnob: 9021 case NSScrollerKnob:
9055 last_hit_part = horizontal ? scroll_bar_horizontal_handle : scroll_bar_handle; break; 9022 last_hit_part = horizontal ? scroll_bar_horizontal_handle : scroll_bar_handle; break;
9056 case NSScrollerKnobSlot: /* GNUstep-only */ 9023 case NSScrollerKnobSlot: /* GNUstep-only */
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index 8dc69805024..4cb17037c26 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -3432,7 +3432,7 @@ static bool bcmp_translate (re_char *, re_char *, ptrdiff_t,
3432 { \ 3432 { \
3433 d = string2; \ 3433 d = string2; \
3434 dend = end_match_2; \ 3434 dend = end_match_2; \
3435 } \ 3435 }
3436 3436
3437/* Test if at very beginning or at very end of the virtual concatenation 3437/* Test if at very beginning or at very end of the virtual concatenation
3438 of STRING1 and STRING2. If only one string, it's STRING2. */ 3438 of STRING1 and STRING2. If only one string, it's STRING2. */
diff --git a/src/search.c b/src/search.c
index dfbae5c9628..8a0f707b723 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1324,12 +1324,7 @@ search_buffer_non_re (Lisp_Object string, ptrdiff_t pos,
1324 } 1324 }
1325 else 1325 else
1326 { 1326 {
1327 /* Converting multibyte to single-byte. 1327 /* Converting multibyte to single-byte. */
1328
1329 ??? Perhaps this conversion should be done in a special way
1330 by subtracting nonascii-insert-offset from each non-ASCII char,
1331 so that only the multibyte chars which really correspond to
1332 the chosen single-byte character set can possibly match. */
1333 raw_pattern_size = SCHARS (string); 1328 raw_pattern_size = SCHARS (string);
1334 raw_pattern_size_byte = SCHARS (string); 1329 raw_pattern_size_byte = SCHARS (string);
1335 raw_pattern = SAFE_ALLOCA (raw_pattern_size + 1); 1330 raw_pattern = SAFE_ALLOCA (raw_pattern_size + 1);
diff --git a/src/termhooks.h b/src/termhooks.h
index 0962add0817..f1827128f19 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -496,7 +496,7 @@ struct terminal
496 496
497 If MAKEINDEX (on NS), set COLOR_DEF pixel to ARGB. */ 497 If MAKEINDEX (on NS), set COLOR_DEF pixel to ARGB. */
498 bool (*defined_color_hook) (struct frame *f, const char *color_name, 498 bool (*defined_color_hook) (struct frame *f, const char *color_name,
499 XColor *color_def, 499 Emacs_Color *color_def,
500 bool alloc, 500 bool alloc,
501 bool makeIndex); 501 bool makeIndex);
502 502
@@ -515,13 +515,13 @@ struct terminal
515 515
516 /* This hook is called to store the frame's background color into 516 /* This hook is called to store the frame's background color into
517 BGCOLOR. */ 517 BGCOLOR. */
518 void (*query_frame_background_color) (struct frame *f, XColor *bgcolor); 518 void (*query_frame_background_color) (struct frame *f, Emacs_Color *bgcolor);
519 519
520#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) 520#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI)
521 /* On frame F, translate pixel colors to RGB values for the NCOLORS 521 /* On frame F, translate pixel colors to RGB values for the NCOLORS
522 colors in COLORS. Use cached information, if available. */ 522 colors in COLORS. Use cached information, if available. */
523 523
524 void (*query_colors) (struct frame *f, XColor *colors, int ncolors); 524 void (*query_colors) (struct frame *f, Emacs_Color *colors, int ncolors);
525#endif 525#endif
526 /* Return the current position of the mouse. 526 /* Return the current position of the mouse.
527 527
@@ -744,7 +744,7 @@ struct terminal
744 /* Image hooks */ 744 /* Image hooks */
745#ifdef HAVE_WINDOW_SYSTEM 745#ifdef HAVE_WINDOW_SYSTEM
746 /* Free the pixmap PIXMAP on F. */ 746 /* Free the pixmap PIXMAP on F. */
747 void (*free_pixmap) (struct frame *f, Pixmap pixmap); 747 void (*free_pixmap) (struct frame *f, Emacs_Pixmap pixmap);
748 748
749#endif 749#endif
750 750
diff --git a/src/w32fns.c b/src/w32fns.c
index 525642bfaab..bb74fcc1640 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -1174,7 +1174,7 @@ gamma_correct (struct frame *f, COLORREF *color)
1174 If ALLOC is nonzero, allocate a new colormap cell. */ 1174 If ALLOC is nonzero, allocate a new colormap cell. */
1175 1175
1176bool 1176bool
1177w32_defined_color (struct frame *f, const char *color, XColor *color_def, 1177w32_defined_color (struct frame *f, const char *color, Emacs_Color *color_def,
1178 bool alloc_p, bool _makeIndex) 1178 bool alloc_p, bool _makeIndex)
1179{ 1179{
1180 register Lisp_Object tem; 1180 register Lisp_Object tem;
@@ -1248,7 +1248,7 @@ w32_defined_color (struct frame *f, const char *color, XColor *color_def,
1248static int 1248static int
1249w32_decode_color (struct frame *f, Lisp_Object arg, int def) 1249w32_decode_color (struct frame *f, Lisp_Object arg, int def)
1250{ 1250{
1251 XColor cdef; 1251 Emacs_Color cdef;
1252 1252
1253 CHECK_STRING (arg); 1253 CHECK_STRING (arg);
1254 1254
@@ -2247,15 +2247,15 @@ w32_set_z_group (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
2247 2247
2248/* Subroutines for creating a frame. */ 2248/* Subroutines for creating a frame. */
2249 2249
2250Cursor w32_load_cursor (LPCTSTR); 2250HCURSOR w32_load_cursor (LPCTSTR);
2251 2251
2252Cursor 2252HCURSOR
2253w32_load_cursor (LPCTSTR name) 2253w32_load_cursor (LPCTSTR name)
2254{ 2254{
2255 /* Try first to load cursor from application resource. */ 2255 /* Try first to load cursor from application resource. */
2256 Cursor cursor = LoadImage ((HINSTANCE) GetModuleHandle (NULL), 2256 HCURSOR cursor = LoadImage ((HINSTANCE) GetModuleHandle (NULL),
2257 name, IMAGE_CURSOR, 0, 0, 2257 name, IMAGE_CURSOR, 0, 0,
2258 LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_SHARED); 2258 LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_SHARED);
2259 if (!cursor) 2259 if (!cursor)
2260 { 2260 {
2261 /* Then try to load a shared predefined cursor. */ 2261 /* Then try to load a shared predefined cursor. */
@@ -5217,7 +5217,7 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
5217 5217
5218 case WM_EMACS_SETCURSOR: 5218 case WM_EMACS_SETCURSOR:
5219 { 5219 {
5220 Cursor cursor = (Cursor) wParam; 5220 HCURSOR cursor = (HCURSOR) wParam;
5221 f = w32_window_to_frame (dpyinfo, hwnd); 5221 f = w32_window_to_frame (dpyinfo, hwnd);
5222 if (f && cursor) 5222 if (f && cursor)
5223 { 5223 {
@@ -5559,22 +5559,19 @@ w32_icon (struct frame *f, Lisp_Object parms)
5559static void 5559static void
5560w32_make_gc (struct frame *f) 5560w32_make_gc (struct frame *f)
5561{ 5561{
5562 XGCValues gc_values; 5562 Emacs_GC gc_values;
5563 5563
5564 block_input (); 5564 block_input ();
5565 5565
5566 /* Create the GC's of this frame. 5566 /* Create the GC's of this frame.
5567 Note that many default values are used. */ 5567 Note that many default values are used. */
5568 5568
5569 /* Normal video */
5570 gc_values.font = FRAME_FONT (f);
5571
5572 /* Cursor has cursor-color background, background-color foreground. */ 5569 /* Cursor has cursor-color background, background-color foreground. */
5573 gc_values.foreground = FRAME_BACKGROUND_PIXEL (f); 5570 gc_values.foreground = FRAME_BACKGROUND_PIXEL (f);
5574 gc_values.background = f->output_data.w32->cursor_pixel; 5571 gc_values.background = f->output_data.w32->cursor_pixel;
5575 f->output_data.w32->cursor_gc 5572 f->output_data.w32->cursor_gc
5576 = XCreateGC (NULL, FRAME_W32_WINDOW (f), 5573 = XCreateGC (NULL, FRAME_W32_WINDOW (f),
5577 (GCFont | GCForeground | GCBackground), 5574 (GCForeground | GCBackground),
5578 &gc_values); 5575 &gc_values);
5579 5576
5580 /* Reliefs. */ 5577 /* Reliefs. */
@@ -6100,7 +6097,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
6100 doc: /* SKIP: real doc in xfns.c. */) 6097 doc: /* SKIP: real doc in xfns.c. */)
6101 (Lisp_Object color, Lisp_Object frame) 6098 (Lisp_Object color, Lisp_Object frame)
6102{ 6099{
6103 XColor foo; 6100 Emacs_Color foo;
6104 struct frame *f = decode_window_system_frame (frame); 6101 struct frame *f = decode_window_system_frame (frame);
6105 6102
6106 CHECK_STRING (color); 6103 CHECK_STRING (color);
@@ -6115,7 +6112,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
6115 doc: /* SKIP: real doc in xfns.c. */) 6112 doc: /* SKIP: real doc in xfns.c. */)
6116 (Lisp_Object color, Lisp_Object frame) 6113 (Lisp_Object color, Lisp_Object frame)
6117{ 6114{
6118 XColor foo; 6115 Emacs_Color foo;
6119 struct frame *f = decode_window_system_frame (frame); 6116 struct frame *f = decode_window_system_frame (frame);
6120 6117
6121 CHECK_STRING (color); 6118 CHECK_STRING (color);
diff --git a/src/w32font.c b/src/w32font.c
index 848016da1ca..47a33aec35f 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -433,7 +433,7 @@ w32font_encode_char (struct font *font, int c)
433 CODE (length NGLYPHS). Apparently metrics can be NULL, in this 433 CODE (length NGLYPHS). Apparently metrics can be NULL, in this
434 case just return the overall width. */ 434 case just return the overall width. */
435void 435void
436w32font_text_extents (struct font *font, unsigned *code, 436w32font_text_extents (struct font *font, const unsigned *code,
437 int nglyphs, struct font_metrics *metrics) 437 int nglyphs, struct font_metrics *metrics)
438{ 438{
439 int i; 439 int i;
@@ -704,11 +704,23 @@ w32font_draw (struct glyph_string *s, int from, int to,
704 int i; 704 int i;
705 705
706 for (i = 0; i < len; i++) 706 for (i = 0; i < len; i++)
707 ExtTextOutW (s->hdc, x + i, y, options, NULL, 707 {
708 s->char2b + from + i, 1, NULL); 708 WCHAR c = s->char2b[from + i] & 0xFFFF;
709 ExtTextOutW (s->hdc, x + i, y, options, NULL, &c, 1, NULL);
710 }
709 } 711 }
710 else 712 else
711 ExtTextOutW (s->hdc, x, y, options, NULL, s->char2b + from, len, NULL); 713 {
714 /* The number of glyphs in a glyph_string cannot be larger than
715 the maximum value of the 'used' member of a glyph_row, so we
716 are OK using alloca here. */
717 eassert (len <= SHRT_MAX);
718 WCHAR *chars = alloca (len * sizeof (WCHAR));
719 int j;
720 for (j = 0; j < len; j++)
721 chars[j] = s->char2b[from + j] & 0xFFFF;
722 ExtTextOutW (s->hdc, x, y, options, NULL, chars, len, NULL);
723 }
712 724
713 /* Restore clip region. */ 725 /* Restore clip region. */
714 if (s->num_clips > 0) 726 if (s->num_clips > 0)
diff --git a/src/w32font.h b/src/w32font.h
index 65f42a3178d..c7bb7f30570 100644
--- a/src/w32font.h
+++ b/src/w32font.h
@@ -74,7 +74,7 @@ int w32font_open_internal (struct frame *f, Lisp_Object font_entity,
74 int pixel_size, Lisp_Object font_object); 74 int pixel_size, Lisp_Object font_object);
75void w32font_close (struct font *font); 75void w32font_close (struct font *font);
76int w32font_has_char (Lisp_Object entity, int c); 76int w32font_has_char (Lisp_Object entity, int c);
77void w32font_text_extents (struct font *font, unsigned *code, int nglyphs, 77void w32font_text_extents (struct font *font, const unsigned *code, int nglyphs,
78 struct font_metrics *metrics); 78 struct font_metrics *metrics);
79int w32font_draw (struct glyph_string *s, int from, int to, 79int w32font_draw (struct glyph_string *s, int from, int to,
80 int x, int y, bool with_background); 80 int x, int y, bool with_background);
diff --git a/src/w32gui.h b/src/w32gui.h
index 5dcbbd95166..62bad33c19b 100644
--- a/src/w32gui.h
+++ b/src/w32gui.h
@@ -27,41 +27,11 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
27#define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n))) 27#define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n)))
28#define local_free(p) (HeapFree (local_heap, 0, ((LPVOID) (p)))) 28#define local_free(p) (HeapFree (local_heap, 0, ((LPVOID) (p))))
29 29
30/* Emulate X GC's by keeping color and font info in a structure. */ 30typedef HBITMAP Emacs_Pixmap;
31typedef struct _XGCValues
32{
33 COLORREF foreground;
34 COLORREF background;
35 struct font *font;
36} XGCValues;
37
38#define GCForeground 0x01
39#define GCBackground 0x02
40#define GCFont 0x03
41
42typedef HBITMAP Pixmap;
43typedef HBITMAP Bitmap;
44 31
45typedef XGCValues * GC;
46typedef COLORREF Color;
47typedef HWND Window; 32typedef HWND Window;
48typedef HDC Display; /* HDC so it doesn't conflict with xpm lib. */ 33typedef HDC Display; /* HDC so it doesn't conflict with xpm lib. */
49typedef HCURSOR Cursor; 34typedef HCURSOR Emacs_Cursor;
50
51#define No_Cursor (0)
52
53#define XChar2b wchar_t
54
55/* Dealing with bits of wchar_t as if they were an XChar2b. */
56#define STORE_XCHAR2B(chp, byte1, byte2) \
57 ((*(chp)) = ((XChar2b)((((byte1) & 0x00ff) << 8) | ((byte2) & 0x00ff))))
58
59#define XCHAR2B_BYTE1(chp) \
60 (((*(chp)) & 0xff00) >> 8)
61
62#define XCHAR2B_BYTE2(chp) \
63 ((*(chp)) & 0x00ff)
64
65 35
66/* Windows equivalent of XImage. */ 36/* Windows equivalent of XImage. */
67typedef struct _XImage 37typedef struct _XImage
@@ -110,20 +80,15 @@ extern HINSTANCE hinst;
110#define PBaseSize (1L << 8) /* program specified base for incrementing */ 80#define PBaseSize (1L << 8) /* program specified base for incrementing */
111#define PWinGravity (1L << 9) /* program specified window gravity */ 81#define PWinGravity (1L << 9) /* program specified window gravity */
112 82
113typedef struct {
114 int x, y;
115 unsigned width, height;
116} XRectangle;
117
118#define NativeRectangle RECT 83#define NativeRectangle RECT
119 84
120#define CONVERT_TO_XRECT(xr,nr) \ 85#define CONVERT_TO_EMACS_RECT(xr,nr) \
121 ((xr).x = (nr).left, \ 86 ((xr).x = (nr).left, \
122 (xr).y = (nr).top, \ 87 (xr).y = (nr).top, \
123 (xr).width = ((nr).right - (nr).left), \ 88 (xr).width = ((nr).right - (nr).left), \
124 (xr).height = ((nr).bottom - (nr).top)) 89 (xr).height = ((nr).bottom - (nr).top))
125 90
126#define CONVERT_FROM_XRECT(xr,nr) \ 91#define CONVERT_FROM_EMACS_RECT(xr,nr) \
127 ((nr).left = (xr).x, \ 92 ((nr).left = (xr).x, \
128 (nr).top = (xr).y, \ 93 (nr).top = (xr).y, \
129 (nr).right = ((xr).x + (xr).width), \ 94 (nr).right = ((xr).x + (xr).width), \
diff --git a/src/w32term.c b/src/w32term.c
index 435455e1a6d..5726124b0ed 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -85,7 +85,7 @@ static int any_help_event_p;
85extern unsigned int msh_mousewheel; 85extern unsigned int msh_mousewheel;
86 86
87extern int w32_codepage_for_font (char *fontname); 87extern int w32_codepage_for_font (char *fontname);
88extern Cursor w32_load_cursor (LPCTSTR name); 88extern HCURSOR w32_load_cursor (LPCTSTR name);
89 89
90 90
91/* This is display since w32 does not support multiple ones. */ 91/* This is display since w32 does not support multiple ones. */
@@ -166,7 +166,7 @@ int w32_message_fd = -1;
166 166
167static void w32_handle_tool_bar_click (struct frame *, 167static void w32_handle_tool_bar_click (struct frame *,
168 struct input_event *); 168 struct input_event *);
169static void w32_define_cursor (Window, Cursor); 169static void w32_define_cursor (Window, Emacs_Cursor);
170 170
171static void w32_scroll_bar_clear (struct frame *); 171static void w32_scroll_bar_clear (struct frame *);
172static void w32_raise_frame (struct frame *); 172static void w32_raise_frame (struct frame *);
@@ -237,23 +237,21 @@ record_event (char *locus, int type)
237 237
238 238
239static void 239static void
240XChangeGC (void *ignore, XGCValues *gc, unsigned long mask, 240XChangeGC (void *ignore, Emacs_GC *gc, unsigned long mask,
241 XGCValues *xgcv) 241 Emacs_GC *egc)
242{ 242{
243 if (mask & GCForeground) 243 if (mask & GCForeground)
244 gc->foreground = xgcv->foreground; 244 gc->foreground = egc->foreground;
245 if (mask & GCBackground) 245 if (mask & GCBackground)
246 gc->background = xgcv->background; 246 gc->background = egc->background;
247 if (mask & GCFont)
248 gc->font = xgcv->font;
249} 247}
250 248
251XGCValues * 249Emacs_GC *
252XCreateGC (void *ignore, HWND wignore, unsigned long mask, XGCValues *xgcv) 250XCreateGC (void *ignore, HWND wignore, unsigned long mask, Emacs_GC *egc)
253{ 251{
254 XGCValues *gc = xzalloc (sizeof (XGCValues)); 252 Emacs_GC *gc = xzalloc (sizeof (*gc));
255 253
256 XChangeGC (ignore, gc, mask, xgcv); 254 XChangeGC (ignore, gc, mask, egc);
257 255
258 return gc; 256 return gc;
259} 257}
@@ -337,7 +335,7 @@ w32_draw_underwave (struct glyph_string *s, COLORREF color)
337 335
338 int wave_height = 3 * scale_y, wave_length = 2 * scale_x, thickness = scale_y; 336 int wave_height = 3 * scale_y, wave_length = 2 * scale_x, thickness = scale_y;
339 int dx, dy, x0, y0, width, x1, y1, x2, y2, odd, xmax; 337 int dx, dy, x0, y0, width, x1, y1, x2, y2, odd, xmax;
340 XRectangle wave_clip, string_clip, final_clip; 338 Emacs_Rectangle wave_clip, string_clip, final_clip;
341 RECT w32_final_clip, w32_string_clip; 339 RECT w32_final_clip, w32_string_clip;
342 HPEN hp, oldhp; 340 HPEN hp, oldhp;
343 341
@@ -356,14 +354,14 @@ w32_draw_underwave (struct glyph_string *s, COLORREF color)
356 wave_clip.height = wave_height; 354 wave_clip.height = wave_height;
357 355
358 get_glyph_string_clip_rect (s, &w32_string_clip); 356 get_glyph_string_clip_rect (s, &w32_string_clip);
359 CONVERT_TO_XRECT (string_clip, w32_string_clip); 357 CONVERT_TO_EMACS_RECT (string_clip, w32_string_clip);
360 358
361 if (!gui_intersect_rectangles (&wave_clip, &string_clip, &final_clip)) 359 if (!gui_intersect_rectangles (&wave_clip, &string_clip, &final_clip))
362 return; 360 return;
363 361
364 hp = CreatePen (PS_SOLID, thickness, color); 362 hp = CreatePen (PS_SOLID, thickness, color);
365 oldhp = SelectObject (s->hdc, hp); 363 oldhp = SelectObject (s->hdc, hp);
366 CONVERT_FROM_XRECT (final_clip, w32_final_clip); 364 CONVERT_FROM_EMACS_RECT (final_clip, w32_final_clip);
367 w32_set_clip_rectangle (s->hdc, &w32_final_clip); 365 w32_set_clip_rectangle (s->hdc, &w32_final_clip);
368 366
369 /* Draw the waves */ 367 /* Draw the waves */
@@ -396,7 +394,7 @@ w32_draw_underwave (struct glyph_string *s, COLORREF color)
396 394
397/* Draw a hollow rectangle at the specified position. */ 395/* Draw a hollow rectangle at the specified position. */
398static void 396static void
399w32_draw_rectangle (HDC hdc, XGCValues *gc, int x, int y, 397w32_draw_rectangle (HDC hdc, Emacs_GC *gc, int x, int y,
400 int width, int height) 398 int width, int height)
401{ 399{
402 HBRUSH hb, oldhb; 400 HBRUSH hb, oldhb;
@@ -906,38 +904,37 @@ w32_set_cursor_gc (struct glyph_string *s)
906 else 904 else
907 { 905 {
908 /* Cursor on non-default face: must merge. */ 906 /* Cursor on non-default face: must merge. */
909 XGCValues xgcv; 907 Emacs_GC egc;
910 unsigned long mask; 908 unsigned long mask;
911 909
912 xgcv.background = s->f->output_data.w32->cursor_pixel; 910 egc.background = s->f->output_data.w32->cursor_pixel;
913 xgcv.foreground = s->face->background; 911 egc.foreground = s->face->background;
914 912
915 /* If the glyph would be invisible, try a different foreground. */ 913 /* If the glyph would be invisible, try a different foreground. */
916 if (xgcv.foreground == xgcv.background) 914 if (egc.foreground == egc.background)
917 xgcv.foreground = s->face->foreground; 915 egc.foreground = s->face->foreground;
918 if (xgcv.foreground == xgcv.background) 916 if (egc.foreground == egc.background)
919 xgcv.foreground = s->f->output_data.w32->cursor_foreground_pixel; 917 egc.foreground = s->f->output_data.w32->cursor_foreground_pixel;
920 if (xgcv.foreground == xgcv.background) 918 if (egc.foreground == egc.background)
921 xgcv.foreground = s->face->foreground; 919 egc.foreground = s->face->foreground;
922 920
923 /* Make sure the cursor is distinct from text in this face. */ 921 /* Make sure the cursor is distinct from text in this face. */
924 if (xgcv.background == s->face->background 922 if (egc.background == s->face->background
925 && xgcv.foreground == s->face->foreground) 923 && egc.foreground == s->face->foreground)
926 { 924 {
927 xgcv.background = s->face->foreground; 925 egc.background = s->face->foreground;
928 xgcv.foreground = s->face->background; 926 egc.foreground = s->face->background;
929 } 927 }
930 928
931 IF_DEBUG (w32_check_font (s->f, s->font)); 929 IF_DEBUG (w32_check_font (s->f, s->font));
932 xgcv.font = s->font; 930 mask = GCForeground | GCBackground;
933 mask = GCForeground | GCBackground | GCFont;
934 931
935 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) 932 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
936 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, 933 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
937 mask, &xgcv); 934 mask, &egc);
938 else 935 else
939 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc 936 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
940 = XCreateGC (NULL, FRAME_W32_WINDOW (s->f), mask, &xgcv); 937 = XCreateGC (NULL, FRAME_W32_WINDOW (s->f), mask, &egc);
941 938
942 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; 939 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
943 } 940 }
@@ -972,21 +969,20 @@ w32_set_mouse_face_gc (struct glyph_string *s)
972 { 969 {
973 /* Otherwise construct scratch_cursor_gc with values from FACE 970 /* Otherwise construct scratch_cursor_gc with values from FACE
974 but font FONT. */ 971 but font FONT. */
975 XGCValues xgcv; 972 Emacs_GC egc;
976 unsigned long mask; 973 unsigned long mask;
977 974
978 xgcv.background = s->face->background; 975 egc.background = s->face->background;
979 xgcv.foreground = s->face->foreground; 976 egc.foreground = s->face->foreground;
980 IF_DEBUG (w32_check_font (s->f, s->font)); 977 IF_DEBUG (w32_check_font (s->f, s->font));
981 xgcv.font = s->font; 978 mask = GCForeground | GCBackground;
982 mask = GCForeground | GCBackground | GCFont;
983 979
984 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) 980 if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc)
985 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, 981 XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc,
986 mask, &xgcv); 982 mask, &egc);
987 else 983 else
988 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc 984 FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc
989 = XCreateGC (NULL, FRAME_W32_WINDOW (s->f), mask, &xgcv); 985 = XCreateGC (NULL, FRAME_W32_WINDOW (s->f), mask, &egc);
990 986
991 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; 987 s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc;
992 } 988 }
@@ -1101,14 +1097,10 @@ w32_compute_glyph_string_overhangs (struct glyph_string *s)
1101 && s->first_glyph->type == CHAR_GLYPH 1097 && s->first_glyph->type == CHAR_GLYPH
1102 && !s->font_not_found_p) 1098 && !s->font_not_found_p)
1103 { 1099 {
1104 unsigned *code = alloca (sizeof (unsigned) * s->nchars);
1105 struct font *font = s->font; 1100 struct font *font = s->font;
1106 struct font_metrics metrics; 1101 struct font_metrics metrics;
1107 int i;
1108 1102
1109 for (i = 0; i < s->nchars; i++) 1103 font->driver->text_extents (font, s->char2b, s->nchars, &metrics);
1110 code[i] = s->char2b[i];
1111 font->driver->text_extents (font, code, s->nchars, &metrics);
1112 s->right_overhang = (metrics.rbearing > metrics.width 1104 s->right_overhang = (metrics.rbearing > metrics.width
1113 ? metrics.rbearing - metrics.width : 0); 1105 ? metrics.rbearing - metrics.width : 0);
1114 s->left_overhang = metrics.lbearing < 0 ? -metrics.lbearing : 0; 1106 s->left_overhang = metrics.lbearing < 0 ? -metrics.lbearing : 0;
@@ -1353,7 +1345,7 @@ static void
1353w32_draw_glyphless_glyph_string_foreground (struct glyph_string *s) 1345w32_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
1354{ 1346{
1355 struct glyph *glyph = s->first_glyph; 1347 struct glyph *glyph = s->first_glyph;
1356 XChar2b char2b[8]; 1348 unsigned char2b[8];
1357 int x, i, j; 1349 int x, i, j;
1358 bool with_background; 1350 bool with_background;
1359 1351
@@ -1410,16 +1402,12 @@ w32_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
1410 { 1402 {
1411 struct font *font = s->font; 1403 struct font *font = s->font;
1412 int upper_len = (len + 1) / 2; 1404 int upper_len = (len + 1) / 2;
1413 unsigned code;
1414 HFONT old_font; 1405 HFONT old_font;
1415 1406
1416 old_font = SelectObject (s->hdc, FONT_HANDLE (font)); 1407 old_font = SelectObject (s->hdc, FONT_HANDLE (font));
1417 /* It is certain that all LEN characters in STR are ASCII. */ 1408 /* It is certain that all LEN characters in STR are ASCII. */
1418 for (j = 0; j < len; j++) 1409 for (j = 0; j < len; j++)
1419 { 1410 char2b[j] = font->driver->encode_char (font, str[j]) & 0xFFFF;
1420 code = font->driver->encode_char (font, str[j]);
1421 STORE_XCHAR2B (char2b + j, code >> 8, code & 0xFF);
1422 }
1423 font->driver->draw (s, 0, upper_len, 1411 font->driver->draw (s, 0, upper_len,
1424 x + glyph->slice.glyphless.upper_xoff, 1412 x + glyph->slice.glyphless.upper_xoff,
1425 s->ybase + glyph->slice.glyphless.upper_yoff, 1413 s->ybase + glyph->slice.glyphless.upper_yoff,
@@ -1517,7 +1505,7 @@ w32_alloc_lighter_color (struct frame *f, COLORREF *color,
1517 colors in COLORS. On W32, we no longer try to map colors to 1505 colors in COLORS. On W32, we no longer try to map colors to
1518 a palette. */ 1506 a palette. */
1519static void 1507static void
1520w32_query_colors (struct frame *f, XColor *colors, int ncolors) 1508w32_query_colors (struct frame *f, Emacs_Color *colors, int ncolors)
1521{ 1509{
1522 int i; 1510 int i;
1523 1511
@@ -1534,7 +1522,7 @@ w32_query_colors (struct frame *f, XColor *colors, int ncolors)
1534/* Store F's background color into *BGCOLOR. */ 1522/* Store F's background color into *BGCOLOR. */
1535 1523
1536static void 1524static void
1537w32_query_frame_background_color (struct frame *f, XColor *bgcolor) 1525w32_query_frame_background_color (struct frame *f, Emacs_Color *bgcolor)
1538{ 1526{
1539 bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f); 1527 bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f);
1540 w32_query_colors (f, bgcolor, 1); 1528 w32_query_colors (f, bgcolor, 1);
@@ -1551,7 +1539,7 @@ static void
1551w32_setup_relief_color (struct frame *f, struct relief *relief, double factor, 1539w32_setup_relief_color (struct frame *f, struct relief *relief, double factor,
1552 int delta, COLORREF default_pixel) 1540 int delta, COLORREF default_pixel)
1553{ 1541{
1554 XGCValues xgcv; 1542 Emacs_GC egc;
1555 struct w32_output *di = f->output_data.w32; 1543 struct w32_output *di = f->output_data.w32;
1556 unsigned long mask = GCForeground; 1544 unsigned long mask = GCForeground;
1557 COLORREF pixel; 1545 COLORREF pixel;
@@ -1563,22 +1551,21 @@ w32_setup_relief_color (struct frame *f, struct relief *relief, double factor,
1563 /* TODO: Free colors (if using palette)? */ 1551 /* TODO: Free colors (if using palette)? */
1564 1552
1565 /* Allocate new color. */ 1553 /* Allocate new color. */
1566 xgcv.foreground = default_pixel; 1554 egc.foreground = default_pixel;
1567 pixel = background; 1555 pixel = background;
1568 if (w32_alloc_lighter_color (f, &pixel, factor, delta)) 1556 if (w32_alloc_lighter_color (f, &pixel, factor, delta))
1569 xgcv.foreground = relief->pixel = pixel; 1557 egc.foreground = relief->pixel = pixel;
1570 1558
1571 xgcv.font = NULL; /* avoid compiler warnings */
1572 if (relief->gc == 0) 1559 if (relief->gc == 0)
1573 { 1560 {
1574#if 0 /* TODO: stipple */ 1561#if 0 /* TODO: stipple */
1575 xgcv.stipple = dpyinfo->gray; 1562 egc.stipple = dpyinfo->gray;
1576 mask |= GCStipple; 1563 mask |= GCStipple;
1577#endif 1564#endif
1578 relief->gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, &xgcv); 1565 relief->gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, &egc);
1579 } 1566 }
1580 else 1567 else
1581 XChangeGC (NULL, relief->gc, mask, &xgcv); 1568 XChangeGC (NULL, relief->gc, mask, &egc);
1582} 1569}
1583 1570
1584 1571
@@ -1627,7 +1614,7 @@ w32_draw_relief_rect (struct frame *f,
1627 RECT *clip_rect) 1614 RECT *clip_rect)
1628{ 1615{
1629 int i; 1616 int i;
1630 XGCValues gc; 1617 Emacs_GC gc;
1631 HDC hdc = get_frame_dc (f); 1618 HDC hdc = get_frame_dc (f);
1632 1619
1633 if (raised_p) 1620 if (raised_p)
@@ -2286,7 +2273,7 @@ w32_draw_stretch_glyph_string (struct glyph_string *s)
2286 /* Clear rest using the GC of the original non-cursor face. */ 2273 /* Clear rest using the GC of the original non-cursor face. */
2287 if (width < background_width) 2274 if (width < background_width)
2288 { 2275 {
2289 XGCValues *gc = s->face->gc; 2276 Emacs_GC *gc = s->face->gc;
2290 int y = s->y; 2277 int y = s->y;
2291 int w = background_width - width, h = s->height; 2278 int w = background_width - width, h = s->height;
2292 RECT r; 2279 RECT r;
@@ -3429,7 +3416,7 @@ static void w32_horizontal_scroll_bar_report_motion (struct frame **, Lisp_Objec
3429 Lisp_Object *, Lisp_Object *, 3416 Lisp_Object *, Lisp_Object *,
3430 Time *); 3417 Time *);
3431static void 3418static void
3432w32_define_cursor (Window window, Cursor cursor) 3419w32_define_cursor (Window window, Emacs_Cursor cursor)
3433{ 3420{
3434 PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0); 3421 PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0);
3435} 3422}
@@ -5806,7 +5793,7 @@ w32_draw_bar_cursor (struct window *w, struct glyph_row *row,
5806/* RIF: Define cursor CURSOR on frame F. */ 5793/* RIF: Define cursor CURSOR on frame F. */
5807 5794
5808static void 5795static void
5809w32_define_frame_cursor (struct frame *f, Cursor cursor) 5796w32_define_frame_cursor (struct frame *f, Emacs_Cursor cursor)
5810{ 5797{
5811 w32_define_cursor (FRAME_W32_WINDOW (f), cursor); 5798 w32_define_cursor (FRAME_W32_WINDOW (f), cursor);
5812} 5799}
@@ -6947,7 +6934,7 @@ w32_toggle_invisible_pointer (struct frame *f, bool invisible)
6947 ***********************************************************************/ 6934 ***********************************************************************/
6948 6935
6949static void 6936static void
6950w32_free_pixmap (struct frame *_f, Pixmap pixmap) 6937w32_free_pixmap (struct frame *_f, Emacs_Pixmap pixmap)
6951{ 6938{
6952 DeleteObject (pixmap); 6939 DeleteObject (pixmap);
6953} 6940}
@@ -7208,7 +7195,7 @@ w32_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
7208 7195
7209 /* initialize palette with white and black */ 7196 /* initialize palette with white and black */
7210 { 7197 {
7211 XColor color; 7198 Emacs_Color color;
7212 w32_defined_color (0, "white", &color, true, false); 7199 w32_defined_color (0, "white", &color, true, false);
7213 w32_defined_color (0, "black", &color, true, false); 7200 w32_defined_color (0, "black", &color, true, false);
7214 } 7201 }
diff --git a/src/w32term.h b/src/w32term.h
index a03b9fd3311..729e8d0fd49 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -56,7 +56,7 @@ extern BOOL bUseDflt;
56 56
57struct w32_bitmap_record 57struct w32_bitmap_record
58{ 58{
59 Pixmap pixmap; 59 Emacs_Pixmap pixmap;
60 char *file; 60 char *file;
61 HINSTANCE hinst; /* Used to load the file */ 61 HINSTANCE hinst; /* Used to load the file */
62 int refcount; 62 int refcount;
@@ -114,10 +114,10 @@ struct w32_display_info
114 Window root_window; 114 Window root_window;
115 115
116 /* The cursor to use for vertical scroll bars. */ 116 /* The cursor to use for vertical scroll bars. */
117 Cursor vertical_scroll_bar_cursor; 117 HCURSOR vertical_scroll_bar_cursor;
118 118
119 /* The cursor to use for horizontal scroll bars. */ 119 /* The cursor to use for horizontal scroll bars. */
120 Cursor horizontal_scroll_bar_cursor; 120 HCURSOR horizontal_scroll_bar_cursor;
121 121
122 /* Resource data base */ 122 /* Resource data base */
123 const char *rdb; 123 const char *rdb;
@@ -142,7 +142,7 @@ struct w32_display_info
142 int smallest_font_height; 142 int smallest_font_height;
143 143
144 /* Reusable Graphics Context for drawing a cursor in a non-default face. */ 144 /* Reusable Graphics Context for drawing a cursor in a non-default face. */
145 XGCValues *scratch_cursor_gc; 145 Emacs_GC *scratch_cursor_gc;
146 146
147 /* Information about the range of text currently shown in 147 /* Information about the range of text currently shown in
148 mouse-face. */ 148 mouse-face. */
@@ -241,7 +241,7 @@ extern void w32_set_scroll_bar_default_height (struct frame *);
241 241
242extern struct w32_display_info *w32_term_init (Lisp_Object, 242extern struct w32_display_info *w32_term_init (Lisp_Object,
243 char *, char *); 243 char *, char *);
244extern bool w32_defined_color (struct frame *, const char *, XColor *, 244extern bool w32_defined_color (struct frame *, const char *, Emacs_Color *,
245 bool, bool); 245 bool, bool);
246extern int w32_display_pixel_height (struct w32_display_info *); 246extern int w32_display_pixel_height (struct w32_display_info *);
247extern int w32_display_pixel_width (struct w32_display_info *); 247extern int w32_display_pixel_width (struct w32_display_info *);
@@ -308,7 +308,7 @@ struct w32_output
308 HPALETTE old_palette; 308 HPALETTE old_palette;
309 309
310 /* Here are the Graphics Contexts for the default font. */ 310 /* Here are the Graphics Contexts for the default font. */
311 XGCValues *cursor_gc; /* cursor drawing */ 311 Emacs_GC *cursor_gc; /* cursor drawing */
312 312
313 /* The window used for this frame. 313 /* The window used for this frame.
314 May be zero while the frame object is being created 314 May be zero while the frame object is being created
@@ -348,27 +348,27 @@ struct w32_output
348 COLORREF scroll_bar_background_pixel; 348 COLORREF scroll_bar_background_pixel;
349 349
350 /* Descriptor for the cursor in use for this window. */ 350 /* Descriptor for the cursor in use for this window. */
351 Cursor text_cursor; 351 HCURSOR text_cursor;
352 Cursor nontext_cursor; 352 HCURSOR nontext_cursor;
353 Cursor modeline_cursor; 353 HCURSOR modeline_cursor;
354 Cursor hand_cursor; 354 HCURSOR hand_cursor;
355 Cursor hourglass_cursor; 355 HCURSOR hourglass_cursor;
356 Cursor horizontal_drag_cursor; 356 HCURSOR horizontal_drag_cursor;
357 Cursor vertical_drag_cursor; 357 HCURSOR vertical_drag_cursor;
358 Cursor left_edge_cursor; 358 HCURSOR left_edge_cursor;
359 Cursor top_left_corner_cursor; 359 HCURSOR top_left_corner_cursor;
360 Cursor top_edge_cursor; 360 HCURSOR top_edge_cursor;
361 Cursor top_right_corner_cursor; 361 HCURSOR top_right_corner_cursor;
362 Cursor right_edge_cursor; 362 HCURSOR right_edge_cursor;
363 Cursor bottom_right_corner_cursor; 363 HCURSOR bottom_right_corner_cursor;
364 Cursor bottom_edge_cursor; 364 HCURSOR bottom_edge_cursor;
365 Cursor bottom_left_corner_cursor; 365 HCURSOR bottom_left_corner_cursor;
366 366
367 /* Non-zero means hourglass cursor is currently displayed. */ 367 /* Non-zero means hourglass cursor is currently displayed. */
368 unsigned hourglass_p : 1; 368 unsigned hourglass_p : 1;
369 369
370 /* Non-hourglass cursor that is currently active. */ 370 /* Non-hourglass cursor that is currently active. */
371 Cursor current_cursor; 371 HCURSOR current_cursor;
372 372
373 DWORD dwStyle; 373 DWORD dwStyle;
374 374
@@ -388,7 +388,7 @@ struct w32_output
388 /* Relief GCs, colors etc. */ 388 /* Relief GCs, colors etc. */
389 struct relief 389 struct relief
390 { 390 {
391 XGCValues *gc; 391 Emacs_GC *gc;
392 unsigned long pixel; 392 unsigned long pixel;
393 } 393 }
394 black_relief, white_relief; 394 black_relief, white_relief;
@@ -721,7 +721,7 @@ extern void complete_deferred_msg (HWND hwnd, UINT msg, LRESULT result);
721extern BOOL parse_button (int, int, int *, int *); 721extern BOOL parse_button (int, int, int *, int *);
722 722
723extern void w32_sys_ring_bell (struct frame *f); 723extern void w32_sys_ring_bell (struct frame *f);
724extern void w32_query_color (struct frame *, XColor *); 724extern void w32_query_color (struct frame *, Emacs_Color *);
725extern void w32_delete_display (struct w32_display_info *dpyinfo); 725extern void w32_delete_display (struct w32_display_info *dpyinfo);
726 726
727#define FILE_NOTIFICATIONS_SIZE 16384 727#define FILE_NOTIFICATIONS_SIZE 16384
@@ -805,7 +805,7 @@ typedef struct tagTRACKMOUSEEVENT
805struct image; 805struct image;
806struct face; 806struct face;
807 807
808XGCValues *XCreateGC (void *, HWND, unsigned long, XGCValues *); 808Emacs_GC *XCreateGC (void *, HWND, unsigned long, Emacs_GC *);
809 809
810typedef DWORD (WINAPI * ClipboardSequence_Proc) (void); 810typedef DWORD (WINAPI * ClipboardSequence_Proc) (void);
811typedef BOOL (WINAPI * AppendMenuW_Proc) ( 811typedef BOOL (WINAPI * AppendMenuW_Proc) (
diff --git a/src/window.c b/src/window.c
index 30ffad0e513..deeb4f63fe0 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3947,8 +3947,8 @@ set_window_buffer (Lisp_Object window, Lisp_Object buffer,
3947 b->display_error_modiff = 0; 3947 b->display_error_modiff = 0;
3948 3948
3949 /* Update time stamps of buffer display. */ 3949 /* Update time stamps of buffer display. */
3950 if (FIXNUMP (BVAR (b, display_count))) 3950 if (INTEGERP (BVAR (b, display_count)))
3951 bset_display_count (b, make_fixnum (XFIXNUM (BVAR (b, display_count)) + 1)); 3951 bset_display_count (b, Fadd1 (BVAR (b, display_count)));
3952 bset_display_time (b, Fcurrent_time ()); 3952 bset_display_time (b, Fcurrent_time ());
3953 3953
3954 w->window_end_pos = 0; 3954 w->window_end_pos = 0;
@@ -4089,7 +4089,7 @@ displaying that buffer. */)
4089 return Qt; 4089 return Qt;
4090 } 4090 }
4091 4091
4092 if (WINDOWP (object)) 4092 if (WINDOW_LIVE_P (object))
4093 { 4093 {
4094 struct window *w = XWINDOW (object); 4094 struct window *w = XWINDOW (object);
4095 mark_window_display_accurate (object, false); 4095 mark_window_display_accurate (object, false);
diff --git a/src/window.h b/src/window.h
index fdef407041b..6b0f0e5d07c 100644
--- a/src/window.h
+++ b/src/window.h
@@ -595,7 +595,7 @@ wset_next_buffers (struct window *w, Lisp_Object val)
595#define WINDOW_BUFFER(W) \ 595#define WINDOW_BUFFER(W) \
596 (WINDOW_LEAF_P(W) \ 596 (WINDOW_LEAF_P(W) \
597 ? (W)->contents \ 597 ? (W)->contents \
598 : Qnil) \ 598 : Qnil)
599 599
600/* Return the canonical column width of the frame of window W. */ 600/* Return the canonical column width of the frame of window W. */
601#define WINDOW_FRAME_COLUMN_WIDTH(W) \ 601#define WINDOW_FRAME_COLUMN_WIDTH(W) \
@@ -649,7 +649,7 @@ wset_next_buffers (struct window *w, Lisp_Object val)
649#define WINDOW_RIGHTMOST_P(W) \ 649#define WINDOW_RIGHTMOST_P(W) \
650 (WINDOW_RIGHT_PIXEL_EDGE (W) \ 650 (WINDOW_RIGHT_PIXEL_EDGE (W) \
651 == (WINDOW_RIGHT_PIXEL_EDGE \ 651 == (WINDOW_RIGHT_PIXEL_EDGE \
652 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W)))))) \ 652 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W))))))
653 653
654/* True if window W has no other windows below it on its frame (the 654/* True if window W has no other windows below it on its frame (the
655 minibuffer window is not counted in this respect unless W itself is a 655 minibuffer window is not counted in this respect unless W itself is a
@@ -657,13 +657,13 @@ wset_next_buffers (struct window *w, Lisp_Object val)
657#define WINDOW_BOTTOMMOST_P(W) \ 657#define WINDOW_BOTTOMMOST_P(W) \
658 (WINDOW_BOTTOM_PIXEL_EDGE (W) \ 658 (WINDOW_BOTTOM_PIXEL_EDGE (W) \
659 == (WINDOW_BOTTOM_PIXEL_EDGE \ 659 == (WINDOW_BOTTOM_PIXEL_EDGE \
660 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W)))))) \ 660 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W))))))
661 661
662/* True if window W takes up the full width of its frame. */ 662/* True if window W takes up the full width of its frame. */
663#define WINDOW_FULL_WIDTH_P(W) \ 663#define WINDOW_FULL_WIDTH_P(W) \
664 (WINDOW_PIXEL_WIDTH (W) \ 664 (WINDOW_PIXEL_WIDTH (W) \
665 == (WINDOW_PIXEL_WIDTH \ 665 == (WINDOW_PIXEL_WIDTH \
666 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W)))))) \ 666 (XWINDOW (FRAME_ROOT_WINDOW (WINDOW_XFRAME (W))))))
667 667
668/* Width of right divider of window W. */ 668/* Width of right divider of window W. */
669#define WINDOW_RIGHT_DIVIDER_WIDTH(W) \ 669#define WINDOW_RIGHT_DIVIDER_WIDTH(W) \
@@ -1122,7 +1122,7 @@ struct glyph *get_phys_cursor_glyph (struct window *w);
1122 1122
1123/* True if WINDOW is a valid window. */ 1123/* True if WINDOW is a valid window. */
1124#define WINDOW_VALID_P(WINDOW) \ 1124#define WINDOW_VALID_P(WINDOW) \
1125 (WINDOWP (WINDOW) && !NILP (XWINDOW (WINDOW)->contents)) \ 1125 (WINDOWP (WINDOW) && !NILP (XWINDOW (WINDOW)->contents))
1126 1126
1127/* A window of any sort, leaf or interior, is "valid" if its 1127/* A window of any sort, leaf or interior, is "valid" if its
1128 contents slot is non-nil. */ 1128 contents slot is non-nil. */
diff --git a/src/xdisp.c b/src/xdisp.c
index 1aa677fcc78..5f438152341 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -376,17 +376,26 @@ static Lisp_Object list_of_error;
376 || it->s[IT_BYTEPOS (*it)] == '\t')) \ 376 || it->s[IT_BYTEPOS (*it)] == '\t')) \
377 || (IT_BYTEPOS (*it) < ZV_BYTE \ 377 || (IT_BYTEPOS (*it) < ZV_BYTE \
378 && (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' ' \ 378 && (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' ' \
379 || *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t')))) \ 379 || *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t'))))
380 380
381/* Test all the conditions needed to print the fill column indicator. */ 381/* If all the conditions needed to print the fill column indicator are
382#define FILL_COLUMN_INDICATOR_NEEDED(it) \ 382 met, return the (nonnegative) column number, else return a negative
383 Vdisplay_fill_column_indicator \ 383 value. */
384 && (it->continuation_lines_width == 0) \ 384static int
385 && (!NILP (Vdisplay_fill_column_indicator_column)) \ 385fill_column_indicator_column (struct it *it)
386 && FIXNATP (Vdisplay_fill_column_indicator_character) \ 386{
387 && ((EQ (Vdisplay_fill_column_indicator_column, Qt) \ 387 if (Vdisplay_fill_column_indicator
388 && FIXNATP (BVAR (current_buffer, fill_column))) \ 388 && it->continuation_lines_width == 0
389 || (FIXNATP (Vdisplay_fill_column_indicator_column))) 389 && CHARACTERP (Vdisplay_fill_column_indicator_character))
390 {
391 Lisp_Object col = (EQ (Vdisplay_fill_column_indicator_column, Qt)
392 ? BVAR (current_buffer, fill_column)
393 : Vdisplay_fill_column_indicator_column);
394 if (RANGED_FIXNUMP (0, col, INT_MAX))
395 return XFIXNUM (col);
396 }
397 return -1;
398}
390 399
391/* True means print newline to stdout before next mini-buffer message. */ 400/* True means print newline to stdout before next mini-buffer message. */
392 401
@@ -2080,7 +2089,7 @@ frame_to_window_pixel_xy (struct window *w, int *x, int *y)
2080int 2089int
2081get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int n) 2090get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int n)
2082{ 2091{
2083 XRectangle r; 2092 Emacs_Rectangle r;
2084 2093
2085 if (n <= 0) 2094 if (n <= 0)
2086 return 0; 2095 return 0;
@@ -2142,7 +2151,7 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int
2142 take the intersection with the rectangle of the cursor. */ 2151 take the intersection with the rectangle of the cursor. */
2143 if (s->for_overlaps & OVERLAPS_ERASED_CURSOR) 2152 if (s->for_overlaps & OVERLAPS_ERASED_CURSOR)
2144 { 2153 {
2145 XRectangle rc, r_save = r; 2154 Emacs_Rectangle rc, r_save = r;
2146 2155
2147 rc.x = WINDOW_TEXT_TO_FRAME_PIXEL_X (s->w, s->w->phys_cursor.x); 2156 rc.x = WINDOW_TEXT_TO_FRAME_PIXEL_X (s->w, s->w->phys_cursor.x);
2148 rc.y = s->w->phys_cursor.y; 2157 rc.y = s->w->phys_cursor.y;
@@ -2208,7 +2217,7 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int
2208 2217
2209 if (s->row->clip) 2218 if (s->row->clip)
2210 { 2219 {
2211 XRectangle r_save = r; 2220 Emacs_Rectangle r_save = r;
2212 2221
2213 if (! gui_intersect_rectangles (&r_save, s->row->clip, &r)) 2222 if (! gui_intersect_rectangles (&r_save, s->row->clip, &r))
2214 r.width = 0; 2223 r.width = 0;
@@ -2217,8 +2226,8 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int
2217 if ((s->for_overlaps & OVERLAPS_BOTH) == 0 2226 if ((s->for_overlaps & OVERLAPS_BOTH) == 0
2218 || ((s->for_overlaps & OVERLAPS_BOTH) == OVERLAPS_BOTH && n == 1)) 2227 || ((s->for_overlaps & OVERLAPS_BOTH) == OVERLAPS_BOTH && n == 1))
2219 { 2228 {
2220#ifdef CONVERT_FROM_XRECT 2229#ifdef CONVERT_FROM_EMACS_RECT
2221 CONVERT_FROM_XRECT (r, *rects); 2230 CONVERT_FROM_EMACS_RECT (r, *rects);
2222#else 2231#else
2223 *rects = r; 2232 *rects = r;
2224#endif 2233#endif
@@ -2230,10 +2239,10 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int
2230 multiple clipping rectangles, we exclude the row of the glyph 2239 multiple clipping rectangles, we exclude the row of the glyph
2231 string from the clipping rectangle. This is to avoid drawing 2240 string from the clipping rectangle. This is to avoid drawing
2232 the same text on the environment with anti-aliasing. */ 2241 the same text on the environment with anti-aliasing. */
2233#ifdef CONVERT_FROM_XRECT 2242#ifdef CONVERT_FROM_EMACS_RECT
2234 XRectangle rs[2]; 2243 Emacs_Rectangle rs[2];
2235#else 2244#else
2236 XRectangle *rs = rects; 2245 Emacs_Rectangle *rs = rects;
2237#endif 2246#endif
2238 int i = 0, row_y = WINDOW_TO_FRAME_PIXEL_Y (s->w, s->row->y); 2247 int i = 0, row_y = WINDOW_TO_FRAME_PIXEL_Y (s->w, s->row->y);
2239 2248
@@ -2266,9 +2275,9 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int
2266 } 2275 }
2267 2276
2268 n = i; 2277 n = i;
2269#ifdef CONVERT_FROM_XRECT 2278#ifdef CONVERT_FROM_EMACS_RECT
2270 for (i = 0; i < n; i++) 2279 for (i = 0; i < n; i++)
2271 CONVERT_FROM_XRECT (rs[i], rects[i]); 2280 CONVERT_FROM_EMACS_RECT (rs[i], rects[i]);
2272#endif 2281#endif
2273 return n; 2282 return n;
2274 } 2283 }
@@ -13986,12 +13995,6 @@ redisplay_internal (void)
13986#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) 13995#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS)
13987 if (popup_activated ()) 13996 if (popup_activated ())
13988 { 13997 {
13989#ifdef NS_IMPL_COCOA
13990 /* On macOS we may have disabled screen updates due to window
13991 resizing. We should re-enable them so the popup can be
13992 displayed. */
13993 ns_enable_screen_updates ();
13994#endif
13995 return; 13998 return;
13996 } 13999 }
13997#endif 14000#endif
@@ -14794,12 +14797,6 @@ unwind_redisplay (void)
14794{ 14797{
14795 redisplaying_p = false; 14798 redisplaying_p = false;
14796 unblock_buffer_flips (); 14799 unblock_buffer_flips ();
14797#ifdef NS_IMPL_COCOA
14798 /* On macOS we may have disabled screen updates due to window
14799 resizing. When redisplay completes we want to re-enable
14800 them. */
14801 ns_enable_screen_updates ();
14802#endif
14803} 14800}
14804 14801
14805 14802
@@ -20172,18 +20169,11 @@ append_space_for_newline (struct it *it, bool default_face_p)
20172 /* Corner case for when display-fill-column-indicator-mode 20169 /* Corner case for when display-fill-column-indicator-mode
20173 is active and the extra character should be added in the 20170 is active and the extra character should be added in the
20174 same place than the line. */ 20171 same place than the line. */
20175 if ((it->w->pseudo_window_p == 0) 20172 int indicator_column = (it->w->pseudo_window_p == 0
20176 && FILL_COLUMN_INDICATOR_NEEDED(it)) 20173 ? fill_column_indicator_column (it)
20174 : -1);
20175 if (0 <= indicator_column)
20177 { 20176 {
20178 int fill_column_indicator_column = -1;
20179
20180 if (EQ (Vdisplay_fill_column_indicator_column, Qt))
20181 fill_column_indicator_column =
20182 XFIXNAT (BVAR (current_buffer, fill_column));
20183 else
20184 fill_column_indicator_column =
20185 XFIXNAT (Vdisplay_fill_column_indicator_column);
20186
20187 struct font *font = 20177 struct font *font =
20188 default_face->font ? 20178 default_face->font ?
20189 default_face->font : FRAME_FONT (it->f); 20179 default_face->font : FRAME_FONT (it->f);
@@ -20191,18 +20181,19 @@ append_space_for_newline (struct it *it, bool default_face_p)
20191 font->average_width ? 20181 font->average_width ?
20192 font->average_width : font->space_width; 20182 font->average_width : font->space_width;
20193 20183
20194 const int column_x = 20184 int column_x;
20195 char_width * fill_column_indicator_column + 20185 if (!INT_MULTIPLY_WRAPV (indicator_column, char_width,
20196 it->lnum_pixel_width; 20186 &column_x)
20197 20187 && !INT_ADD_WRAPV (it->lnum_pixel_width, column_x,
20198 if (it->current_x == column_x) 20188 &column_x)
20189 && it->current_x == column_x)
20199 { 20190 {
20200 it->c = it->char_to_display = 20191 it->c = it->char_to_display =
20201 XFIXNAT (Vdisplay_fill_column_indicator_character); 20192 XFIXNAT (Vdisplay_fill_column_indicator_character);
20202 it->face_id = 20193 it->face_id =
20203 merge_faces (it->w, Qfill_column_indicator, 20194 merge_faces (it->w, Qfill_column_indicator,
20204 0, saved_face_id); 20195 0, saved_face_id);
20205 face = FACE_FROM_ID(it->f, it->face_id); 20196 face = FACE_FROM_ID (it->f, it->face_id);
20206 goto produce_glyphs; 20197 goto produce_glyphs;
20207 } 20198 }
20208 } 20199 }
@@ -20434,30 +20425,22 @@ extend_face_to_end_of_line (struct it *it)
20434 /* Display fill column indicator if not in modeline or 20425 /* Display fill column indicator if not in modeline or
20435 toolbar and display fill column indicator mode is 20426 toolbar and display fill column indicator mode is
20436 active. */ 20427 active. */
20437 if ((it->w->pseudo_window_p == 0) 20428 int indicator_column = (it->w->pseudo_window_p == 0
20438 && FILL_COLUMN_INDICATOR_NEEDED(it)) 20429 ? fill_column_indicator_column (it)
20430 : -1);
20431 if (0 <= indicator_column)
20439 { 20432 {
20440 int fill_column_indicator_column = -1;
20441
20442 if (EQ (Vdisplay_fill_column_indicator_column, Qt))
20443 fill_column_indicator_column =
20444 XFIXNAT (BVAR (current_buffer, fill_column));
20445 else
20446 fill_column_indicator_column =
20447 XFIXNAT (Vdisplay_fill_column_indicator_column);
20448
20449 struct font *font = 20433 struct font *font =
20450 default_face->font ? default_face->font : FRAME_FONT (f); 20434 default_face->font ? default_face->font : FRAME_FONT (f);
20451 const int char_width = 20435 const int char_width =
20452 font->average_width ? 20436 font->average_width ?
20453 font->average_width : font->space_width; 20437 font->average_width : font->space_width;
20454 20438
20455 const int column_x = 20439 int column_x;
20456 char_width * fill_column_indicator_column + 20440 if (!INT_MULTIPLY_WRAPV (indicator_column, char_width, &column_x)
20457 it->lnum_pixel_width; 20441 && !INT_ADD_WRAPV (it->lnum_pixel_width, column_x, &column_x)
20458 20442 && it->current_x <= column_x
20459 if ((it->current_x <= column_x) 20443 && column_x <= it->last_visible_x)
20460 && (column_x <= it->last_visible_x))
20461 { 20444 {
20462 const char saved_char = it->char_to_display; 20445 const char saved_char = it->char_to_display;
20463 const struct text_pos saved_pos = it->position; 20446 const struct text_pos saved_pos = it->position;
@@ -20637,45 +20620,33 @@ extend_face_to_end_of_line (struct it *it)
20637 it->face_id = face->id; 20620 it->face_id = face->id;
20638 20621
20639 /* Display fill-column indicator if needed. */ 20622 /* Display fill-column indicator if needed. */
20640 if (FILL_COLUMN_INDICATOR_NEEDED(it)) 20623 int indicator_column = fill_column_indicator_column (it);
20624 if (0 <= indicator_column
20625 && INT_ADD_WRAPV (it->lnum_pixel_width, indicator_column,
20626 &indicator_column))
20627 indicator_column = -1;
20628 do
20641 { 20629 {
20642 int fill_column_indicator_column = -1; 20630 int saved_face_id;
20631 bool indicate = it->current_x == indicator_column;
20632 if (indicate)
20633 {
20634 saved_face_id = it->face_id;
20635 it->face_id =
20636 merge_faces (it->w, Qfill_column_indicator, 0, saved_face_id);
20637 it->c = it->char_to_display =
20638 XFIXNAT (Vdisplay_fill_column_indicator_character);
20639 }
20643 20640
20644 /* Vdisplay_fill_column_indicator_column accepts the special 20641 PRODUCE_GLYPHS (it);
20645 value t to use the default fill-column variable. The
20646 conditions are all defined in the macro
20647 FILL_COLUMN_INDICATOR_NEEDED. */
20648 if (EQ (Vdisplay_fill_column_indicator_column, Qt))
20649 fill_column_indicator_column =
20650 XFIXNAT (BVAR (current_buffer, fill_column)) + it->lnum_pixel_width;
20651 else
20652 fill_column_indicator_column =
20653 XFIXNAT (Vdisplay_fill_column_indicator_column) + it->lnum_pixel_width;
20654 20642
20655 do 20643 if (indicate)
20656 { 20644 {
20657 if (it->current_x == fill_column_indicator_column) 20645 it->face_id = saved_face_id;
20658 { 20646 it->c = it->char_to_display = ' ';
20659 const int saved_face_id = it->face_id; 20647 }
20660 it->face_id =
20661 merge_faces (it->w, Qfill_column_indicator, 0, saved_face_id);
20662 it->c = it->char_to_display =
20663 XFIXNAT (Vdisplay_fill_column_indicator_character);
20664 PRODUCE_GLYPHS (it);
20665 it->face_id = saved_face_id;
20666 it->c = it->char_to_display = ' ';
20667 }
20668 else
20669 PRODUCE_GLYPHS (it);
20670 } while (it->current_x <= it->last_visible_x);
20671 } 20648 }
20672 else 20649 while (it->current_x <= it->last_visible_x);
20673 {
20674 do
20675 {
20676 PRODUCE_GLYPHS (it);
20677 } while (it->current_x <= it->last_visible_x);
20678 }
20679 20650
20680 if (WINDOW_RIGHT_MARGIN_WIDTH (it->w) > 0 20651 if (WINDOW_RIGHT_MARGIN_WIDTH (it->w) > 0
20681 && (it->glyph_row->used[RIGHT_MARGIN_AREA] 20652 && (it->glyph_row->used[RIGHT_MARGIN_AREA]
@@ -25914,7 +25885,7 @@ dump_glyph_string (struct glyph_string *s)
25914#endif /* GLYPH_DEBUG */ 25885#endif /* GLYPH_DEBUG */
25915 25886
25916/* Initialize glyph string S. CHAR2B is a suitably allocated vector 25887/* Initialize glyph string S. CHAR2B is a suitably allocated vector
25917 of XChar2b structures for S; it can't be allocated in 25888 of 2-byte unsigned integers for S; it can't be allocated in
25918 init_glyph_string because it must be allocated via `alloca'. W 25889 init_glyph_string because it must be allocated via `alloca'. W
25919 is the window on which S is drawn. ROW and AREA are the glyph row 25890 is the window on which S is drawn. ROW and AREA are the glyph row
25920 and area within the row from which S is constructed. START is the 25891 and area within the row from which S is constructed. START is the
@@ -25944,7 +25915,7 @@ init_glyph_string (struct glyph_string *s,
25944#ifdef HAVE_NTGUI 25915#ifdef HAVE_NTGUI
25945 HDC hdc, 25916 HDC hdc,
25946#endif 25917#endif
25947 XChar2b *char2b, struct window *w, struct glyph_row *row, 25918 unsigned *char2b, struct window *w, struct glyph_row *row,
25948 enum glyph_row_area area, int start, enum draw_glyphs_face hl) 25919 enum glyph_row_area area, int start, enum draw_glyphs_face hl)
25949{ 25920{
25950 memset (s, 0, sizeof *s); 25921 memset (s, 0, sizeof *s);
@@ -26023,7 +25994,7 @@ append_glyph_string (struct glyph_string **head, struct glyph_string **tail,
26023 25994
26024static struct face * 25995static struct face *
26025get_char_face_and_encoding (struct frame *f, int c, int face_id, 25996get_char_face_and_encoding (struct frame *f, int c, int face_id,
26026 XChar2b *char2b, bool display_p) 25997 unsigned *char2b, bool display_p)
26027{ 25998{
26028 struct face *face = FACE_FROM_ID (f, face_id); 25999 struct face *face = FACE_FROM_ID (f, face_id);
26029 unsigned code = 0; 26000 unsigned code = 0;
@@ -26035,7 +26006,8 @@ get_char_face_and_encoding (struct frame *f, int c, int face_id,
26035 if (code == FONT_INVALID_CODE) 26006 if (code == FONT_INVALID_CODE)
26036 code = 0; 26007 code = 0;
26037 } 26008 }
26038 STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF)); 26009 /* Ensure that the code is only 2 bytes wide. */
26010 *char2b = code & 0xFFFF;
26039 26011
26040 /* Make sure X resources of the face are allocated. */ 26012 /* Make sure X resources of the face are allocated. */
26041#ifdef HAVE_X_WINDOWS 26013#ifdef HAVE_X_WINDOWS
@@ -26056,7 +26028,7 @@ get_char_face_and_encoding (struct frame *f, int c, int face_id,
26056 26028
26057static struct face * 26029static struct face *
26058get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph, 26030get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
26059 XChar2b *char2b) 26031 unsigned *char2b)
26060{ 26032{
26061 struct face *face; 26033 struct face *face;
26062 unsigned code = 0; 26034 unsigned code = 0;
@@ -26078,7 +26050,8 @@ get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
26078 code = 0; 26050 code = 0;
26079 } 26051 }
26080 26052
26081 STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF)); 26053 /* Ensure that the code is only 2 bytes wide. */
26054 *char2b = code & 0xFFFF;
26082 return face; 26055 return face;
26083} 26056}
26084 26057
@@ -26087,7 +26060,7 @@ get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
26087 Return true iff FONT has a glyph for C. */ 26060 Return true iff FONT has a glyph for C. */
26088 26061
26089static bool 26062static bool
26090get_char_glyph_code (int c, struct font *font, XChar2b *char2b) 26063get_char_glyph_code (int c, struct font *font, unsigned *char2b)
26091{ 26064{
26092 unsigned code; 26065 unsigned code;
26093 26066
@@ -26098,7 +26071,9 @@ get_char_glyph_code (int c, struct font *font, XChar2b *char2b)
26098 26071
26099 if (code == FONT_INVALID_CODE) 26072 if (code == FONT_INVALID_CODE)
26100 return false; 26073 return false;
26101 STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF)); 26074
26075 /* Ensure that the code is only 2 bytes wide. */
26076 *char2b = code & 0xFFFF;
26102 return true; 26077 return true;
26103} 26078}
26104 26079
@@ -26211,7 +26186,8 @@ fill_gstring_glyph_string (struct glyph_string *s, int face_id,
26211 Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i); 26186 Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i);
26212 unsigned code = LGLYPH_CODE (lglyph); 26187 unsigned code = LGLYPH_CODE (lglyph);
26213 26188
26214 STORE_XCHAR2B ((s->char2b + i), code >> 8, code & 0xFF); 26189 /* Ensure that the code is only 2 bytes wide. */
26190 s->char2b[i] = code & 0xFFFF;
26215 } 26191 }
26216 s->width = composition_gstring_width (lgstring, s->cmp_from, s->cmp_to, NULL); 26192 s->width = composition_gstring_width (lgstring, s->cmp_from, s->cmp_to, NULL);
26217 return glyph - s->row->glyphs[s->area]; 26193 return glyph - s->row->glyphs[s->area];
@@ -26390,17 +26366,16 @@ fill_stretch_glyph_string (struct glyph_string *s, int start, int end)
26390} 26366}
26391 26367
26392static struct font_metrics * 26368static struct font_metrics *
26393get_per_char_metric (struct font *font, XChar2b *char2b) 26369get_per_char_metric (struct font *font, const unsigned *char2b)
26394{ 26370{
26395 static struct font_metrics metrics; 26371 static struct font_metrics metrics;
26396 unsigned code;
26397 26372
26398 if (! font) 26373 if (! font)
26399 return NULL; 26374 return NULL;
26400 code = (XCHAR2B_BYTE1 (char2b) << 8) | XCHAR2B_BYTE2 (char2b); 26375 if (*char2b == FONT_INVALID_CODE)
26401 if (code == FONT_INVALID_CODE)
26402 return NULL; 26376 return NULL;
26403 font->driver->text_extents (font, &code, 1, &metrics); 26377
26378 font->driver->text_extents (font, char2b, 1, &metrics);
26404 return &metrics; 26379 return &metrics;
26405} 26380}
26406 26381
@@ -26418,7 +26393,7 @@ normal_char_ascent_descent (struct font *font, int c, int *ascent, int *descent)
26418 26393
26419 if (FONT_TOO_HIGH (font)) 26394 if (FONT_TOO_HIGH (font))
26420 { 26395 {
26421 XChar2b char2b; 26396 unsigned char2b;
26422 26397
26423 /* Get metrics of C, defaulting to a reasonably sized ASCII 26398 /* Get metrics of C, defaulting to a reasonably sized ASCII
26424 character. */ 26399 character. */
@@ -26465,7 +26440,7 @@ gui_get_glyph_overhangs (struct glyph *glyph, struct frame *f, int *left, int *r
26465 26440
26466 if (glyph->type == CHAR_GLYPH) 26441 if (glyph->type == CHAR_GLYPH)
26467 { 26442 {
26468 XChar2b char2b; 26443 unsigned char2b;
26469 struct face *face = get_glyph_face_and_encoding (f, glyph, &char2b); 26444 struct face *face = get_glyph_face_and_encoding (f, glyph, &char2b);
26470 if (face->font) 26445 if (face->font)
26471 { 26446 {
@@ -26779,7 +26754,7 @@ compute_overhangs_and_x (struct glyph_string *s, int x, bool backward_p)
26779 do \ 26754 do \
26780 { \ 26755 { \
26781 int face_id; \ 26756 int face_id; \
26782 XChar2b *char2b; \ 26757 unsigned *char2b; \
26783 \ 26758 \
26784 face_id = (row)->glyphs[area][START].face_id; \ 26759 face_id = (row)->glyphs[area][START].face_id; \
26785 \ 26760 \
@@ -26808,7 +26783,7 @@ compute_overhangs_and_x (struct glyph_string *s, int x, bool backward_p)
26808 struct face *base_face = FACE_FROM_ID (f, face_id); \ 26783 struct face *base_face = FACE_FROM_ID (f, face_id); \
26809 ptrdiff_t cmp_id = (row)->glyphs[area][START].u.cmp.id; \ 26784 ptrdiff_t cmp_id = (row)->glyphs[area][START].u.cmp.id; \
26810 struct composition *cmp = composition_table[cmp_id]; \ 26785 struct composition *cmp = composition_table[cmp_id]; \
26811 XChar2b *char2b; \ 26786 unsigned *char2b; \
26812 struct glyph_string *first_s = NULL; \ 26787 struct glyph_string *first_s = NULL; \
26813 int n; \ 26788 int n; \
26814 \ 26789 \
@@ -26840,7 +26815,7 @@ compute_overhangs_and_x (struct glyph_string *s, int x, bool backward_p)
26840#define BUILD_GSTRING_GLYPH_STRING(START, END, HEAD, TAIL, HL, X, LAST_X) \ 26815#define BUILD_GSTRING_GLYPH_STRING(START, END, HEAD, TAIL, HL, X, LAST_X) \
26841 do { \ 26816 do { \
26842 int face_id; \ 26817 int face_id; \
26843 XChar2b *char2b; \ 26818 unsigned *char2b; \
26844 Lisp_Object gstring; \ 26819 Lisp_Object gstring; \
26845 \ 26820 \
26846 face_id = (row)->glyphs[area][START].face_id; \ 26821 face_id = (row)->glyphs[area][START].face_id; \
@@ -28433,7 +28408,7 @@ gui_produce_glyphs (struct it *it)
28433 28408
28434 if (it->what == IT_CHARACTER) 28409 if (it->what == IT_CHARACTER)
28435 { 28410 {
28436 XChar2b char2b; 28411 unsigned char2b;
28437 struct face *face = FACE_FROM_ID (it->f, it->face_id); 28412 struct face *face = FACE_FROM_ID (it->f, it->face_id);
28438 struct font *font = face->font; 28413 struct font *font = face->font;
28439 struct font_metrics *pcm = NULL; 28414 struct font_metrics *pcm = NULL;
@@ -28832,7 +28807,7 @@ gui_produce_glyphs (struct it *it)
28832 int lbearing, rbearing; 28807 int lbearing, rbearing;
28833 int i, width, ascent, descent; 28808 int i, width, ascent, descent;
28834 int c; 28809 int c;
28835 XChar2b char2b; 28810 unsigned char2b;
28836 struct font_metrics *pcm; 28811 struct font_metrics *pcm;
28837 ptrdiff_t pos; 28812 ptrdiff_t pos;
28838 28813
@@ -31153,7 +31128,7 @@ Returns the alist element for the first matching AREA in MAP. */)
31153 31128
31154/* Display frame CURSOR, optionally using shape defined by POINTER. */ 31129/* Display frame CURSOR, optionally using shape defined by POINTER. */
31155static void 31130static void
31156define_frame_cursor1 (struct frame *f, Cursor cursor, Lisp_Object pointer) 31131define_frame_cursor1 (struct frame *f, Emacs_Cursor cursor, Lisp_Object pointer)
31157{ 31132{
31158#ifdef HAVE_WINDOW_SYSTEM 31133#ifdef HAVE_WINDOW_SYSTEM
31159 if (!FRAME_WINDOW_P (f)) 31134 if (!FRAME_WINDOW_P (f))
@@ -31205,7 +31180,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
31205 struct window *w = XWINDOW (window); 31180 struct window *w = XWINDOW (window);
31206 struct frame *f = XFRAME (w->frame); 31181 struct frame *f = XFRAME (w->frame);
31207 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); 31182 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
31208 Cursor cursor = No_Cursor; 31183 Emacs_Cursor cursor = No_Cursor;
31209 Lisp_Object pointer = Qnil; 31184 Lisp_Object pointer = Qnil;
31210 int dx, dy, width, height; 31185 int dx, dy, width, height;
31211 ptrdiff_t charpos; 31186 ptrdiff_t charpos;
@@ -31518,7 +31493,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
31518 enum window_part part = ON_NOTHING; 31493 enum window_part part = ON_NOTHING;
31519 Lisp_Object window; 31494 Lisp_Object window;
31520 struct window *w; 31495 struct window *w;
31521 Cursor cursor = No_Cursor; 31496 Emacs_Cursor cursor = No_Cursor;
31522 Lisp_Object pointer = Qnil; /* Takes precedence over cursor! */ 31497 Lisp_Object pointer = Qnil; /* Takes precedence over cursor! */
31523 struct buffer *b; 31498 struct buffer *b;
31524 31499
@@ -32137,7 +32112,7 @@ cancel_mouse_face (struct frame *f)
32137 which intersects rectangle R. R is in window-relative coordinates. */ 32112 which intersects rectangle R. R is in window-relative coordinates. */
32138 32113
32139static void 32114static void
32140expose_area (struct window *w, struct glyph_row *row, XRectangle *r, 32115expose_area (struct window *w, struct glyph_row *row, const Emacs_Rectangle *r,
32141 enum glyph_row_area area) 32116 enum glyph_row_area area)
32142{ 32117{
32143 struct glyph *first = row->glyphs[area]; 32118 struct glyph *first = row->glyphs[area];
@@ -32195,7 +32170,7 @@ expose_area (struct window *w, struct glyph_row *row, XRectangle *r,
32195 true if mouse-face was overwritten. */ 32170 true if mouse-face was overwritten. */
32196 32171
32197static bool 32172static bool
32198expose_line (struct window *w, struct glyph_row *row, XRectangle *r) 32173expose_line (struct window *w, struct glyph_row *row, const Emacs_Rectangle *r)
32199{ 32174{
32200 eassert (row->enabled_p); 32175 eassert (row->enabled_p);
32201 32176
@@ -32230,7 +32205,7 @@ static void
32230expose_overlaps (struct window *w, 32205expose_overlaps (struct window *w,
32231 struct glyph_row *first_overlapping_row, 32206 struct glyph_row *first_overlapping_row,
32232 struct glyph_row *last_overlapping_row, 32207 struct glyph_row *last_overlapping_row,
32233 XRectangle *r) 32208 const Emacs_Rectangle *r)
32234{ 32209{
32235 struct glyph_row *row; 32210 struct glyph_row *row;
32236 32211
@@ -32256,9 +32231,9 @@ expose_overlaps (struct window *w,
32256/* Return true if W's cursor intersects rectangle R. */ 32231/* Return true if W's cursor intersects rectangle R. */
32257 32232
32258static bool 32233static bool
32259phys_cursor_in_rect_p (struct window *w, XRectangle *r) 32234phys_cursor_in_rect_p (struct window *w, const Emacs_Rectangle *r)
32260{ 32235{
32261 XRectangle cr, result; 32236 Emacs_Rectangle cr, result;
32262 struct glyph *cursor_glyph; 32237 struct glyph *cursor_glyph;
32263 struct glyph_row *row; 32238 struct glyph_row *row;
32264 32239
@@ -32416,10 +32391,10 @@ gui_draw_bottom_divider (struct window *w)
32416 mouse-face. */ 32391 mouse-face. */
32417 32392
32418static bool 32393static bool
32419expose_window (struct window *w, XRectangle *fr) 32394expose_window (struct window *w, const Emacs_Rectangle *fr)
32420{ 32395{
32421 struct frame *f = XFRAME (w->frame); 32396 struct frame *f = XFRAME (w->frame);
32422 XRectangle wr, r; 32397 Emacs_Rectangle wr, r;
32423 bool mouse_face_overwritten_p = false; 32398 bool mouse_face_overwritten_p = false;
32424 32399
32425 /* If window is not yet fully initialized, do nothing. This can 32400 /* If window is not yet fully initialized, do nothing. This can
@@ -32578,7 +32553,7 @@ expose_window (struct window *w, XRectangle *fr)
32578 true if the exposure overwrites mouse-face. */ 32553 true if the exposure overwrites mouse-face. */
32579 32554
32580static bool 32555static bool
32581expose_window_tree (struct window *w, XRectangle *r) 32556expose_window_tree (struct window *w, const Emacs_Rectangle *r)
32582{ 32557{
32583 struct frame *f = XFRAME (w->frame); 32558 struct frame *f = XFRAME (w->frame);
32584 bool mouse_face_overwritten_p = false; 32559 bool mouse_face_overwritten_p = false;
@@ -32606,7 +32581,7 @@ expose_window_tree (struct window *w, XRectangle *r)
32606void 32581void
32607expose_frame (struct frame *f, int x, int y, int w, int h) 32582expose_frame (struct frame *f, int x, int y, int w, int h)
32608{ 32583{
32609 XRectangle r; 32584 Emacs_Rectangle r;
32610 bool mouse_face_overwritten_p = false; 32585 bool mouse_face_overwritten_p = false;
32611 32586
32612 TRACE ((stderr, "expose_frame ")); 32587 TRACE ((stderr, "expose_frame "));
@@ -32693,10 +32668,11 @@ expose_frame (struct frame *f, int x, int y, int w, int h)
32693 empty. */ 32668 empty. */
32694 32669
32695bool 32670bool
32696gui_intersect_rectangles (XRectangle *r1, XRectangle *r2, XRectangle *result) 32671gui_intersect_rectangles (const Emacs_Rectangle *r1, const Emacs_Rectangle *r2,
32672 Emacs_Rectangle *result)
32697{ 32673{
32698 XRectangle *left, *right; 32674 const Emacs_Rectangle *left, *right;
32699 XRectangle *upper, *lower; 32675 const Emacs_Rectangle *upper, *lower;
32700 bool intersection_p = false; 32676 bool intersection_p = false;
32701 32677
32702 /* Rearrange so that R1 is the left-most rectangle. */ 32678 /* Rearrange so that R1 is the left-most rectangle. */
diff --git a/src/xfaces.c b/src/xfaces.c
index 5c2414b7b0e..d211ec8c460 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -348,7 +348,7 @@ static void free_face_cache (struct face_cache *);
348static bool merge_face_ref (struct window *w, 348static bool merge_face_ref (struct window *w,
349 struct frame *, Lisp_Object, Lisp_Object *, 349 struct frame *, Lisp_Object, Lisp_Object *,
350 bool, struct named_merge_point *); 350 bool, struct named_merge_point *);
351static int color_distance (XColor *x, XColor *y); 351static int color_distance (Emacs_Color *x, Emacs_Color *y);
352 352
353#ifdef HAVE_WINDOW_SYSTEM 353#ifdef HAVE_WINDOW_SYSTEM
354static void set_font_frame_param (Lisp_Object, Lisp_Object); 354static void set_font_frame_param (Lisp_Object, Lisp_Object);
@@ -513,12 +513,12 @@ x_free_gc (struct frame *f, GC gc)
513#ifdef HAVE_NTGUI 513#ifdef HAVE_NTGUI
514/* W32 emulation of GCs */ 514/* W32 emulation of GCs */
515 515
516static GC 516static Emacs_GC *
517x_create_gc (struct frame *f, unsigned long mask, XGCValues *xgcv) 517x_create_gc (struct frame *f, unsigned long mask, Emacs_GC *egc)
518{ 518{
519 GC gc; 519 Emacs_GC *gc;
520 block_input (); 520 block_input ();
521 gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, xgcv); 521 gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, egc);
522 unblock_input (); 522 unblock_input ();
523 IF_DEBUG (++ngcs); 523 IF_DEBUG (++ngcs);
524 return gc; 524 return gc;
@@ -528,7 +528,7 @@ x_create_gc (struct frame *f, unsigned long mask, XGCValues *xgcv)
528/* Free GC which was used on frame F. */ 528/* Free GC which was used on frame F. */
529 529
530static void 530static void
531x_free_gc (struct frame *f, GC gc) 531x_free_gc (struct frame *f, Emacs_GC *gc)
532{ 532{
533 IF_DEBUG ((--ngcs, eassert (ngcs >= 0))); 533 IF_DEBUG ((--ngcs, eassert (ngcs >= 0)));
534 xfree (gc); 534 xfree (gc);
@@ -539,18 +539,18 @@ x_free_gc (struct frame *f, GC gc)
539#ifdef HAVE_NS 539#ifdef HAVE_NS
540/* NS emulation of GCs */ 540/* NS emulation of GCs */
541 541
542static GC 542static Emacs_GC *
543x_create_gc (struct frame *f, 543x_create_gc (struct frame *f,
544 unsigned long mask, 544 unsigned long mask,
545 XGCValues *xgcv) 545 Emacs_GC *egc)
546{ 546{
547 GC gc = xmalloc (sizeof *gc); 547 Emacs_GC *gc = xmalloc (sizeof *gc);
548 *gc = *xgcv; 548 *gc = *egc;
549 return gc; 549 return gc;
550} 550}
551 551
552static void 552static void
553x_free_gc (struct frame *f, GC gc) 553x_free_gc (struct frame *f, Emacs_GC *gc)
554{ 554{
555 xfree (gc); 555 xfree (gc);
556} 556}
@@ -802,7 +802,7 @@ load_pixmap (struct frame *f, Lisp_Object name)
802 802
803 803
804/*********************************************************************** 804/***********************************************************************
805 X Colors 805 Color Handling
806 ***********************************************************************/ 806 ***********************************************************************/
807 807
808/* Parse RGB_LIST, and fill in the RGB fields of COLOR. 808/* Parse RGB_LIST, and fill in the RGB fields of COLOR.
@@ -810,7 +810,7 @@ load_pixmap (struct frame *f, Lisp_Object name)
810 Return true iff RGB_LIST is OK. */ 810 Return true iff RGB_LIST is OK. */
811 811
812static bool 812static bool
813parse_rgb_list (Lisp_Object rgb_list, XColor *color) 813parse_rgb_list (Lisp_Object rgb_list, Emacs_Color *color)
814{ 814{
815#define PARSE_RGB_LIST_FIELD(field) \ 815#define PARSE_RGB_LIST_FIELD(field) \
816 if (CONSP (rgb_list) && FIXNUMP (XCAR (rgb_list))) \ 816 if (CONSP (rgb_list) && FIXNUMP (XCAR (rgb_list))) \
@@ -835,8 +835,8 @@ parse_rgb_list (Lisp_Object rgb_list, XColor *color)
835 returned in it. */ 835 returned in it. */
836 836
837static bool 837static bool
838tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, 838tty_lookup_color (struct frame *f, Lisp_Object color, Emacs_Color *tty_color,
839 XColor *std_color) 839 Emacs_Color *std_color)
840{ 840{
841 Lisp_Object frame, color_desc; 841 Lisp_Object frame, color_desc;
842 842
@@ -897,7 +897,7 @@ tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color,
897 897
898bool 898bool
899tty_defined_color (struct frame *f, const char *color_name, 899tty_defined_color (struct frame *f, const char *color_name,
900 XColor *color_def, bool alloc, bool _makeIndex) 900 Emacs_Color *color_def, bool alloc, bool _makeIndex)
901{ 901{
902 bool status = true; 902 bool status = true;
903 903
@@ -965,7 +965,7 @@ tty_color_name (struct frame *f, int idx)
965static bool 965static bool
966face_color_gray_p (struct frame *f, const char *color_name) 966face_color_gray_p (struct frame *f, const char *color_name)
967{ 967{
968 XColor color; 968 Emacs_Color color;
969 bool gray_p; 969 bool gray_p;
970 970
971 if (FRAME_TERMINAL (f)->defined_color_hook 971 if (FRAME_TERMINAL (f)->defined_color_hook
@@ -994,7 +994,7 @@ face_color_supported_p (struct frame *f, const char *color_name,
994 bool background_p) 994 bool background_p)
995{ 995{
996 Lisp_Object frame; 996 Lisp_Object frame;
997 XColor not_used; 997 Emacs_Color not_used;
998 998
999 XSETFRAME (frame, f); 999 XSETFRAME (frame, f);
1000 return 1000 return
@@ -1043,7 +1043,7 @@ COLOR must be a valid color name. */)
1043 1043
1044static unsigned long 1044static unsigned long
1045load_color2 (struct frame *f, struct face *face, Lisp_Object name, 1045load_color2 (struct frame *f, struct face *face, Lisp_Object name,
1046 enum lface_attribute_index target_index, XColor *color) 1046 enum lface_attribute_index target_index, Emacs_Color *color)
1047{ 1047{
1048 eassert (STRINGP (name)); 1048 eassert (STRINGP (name));
1049 eassert (target_index == LFACE_FOREGROUND_INDEX 1049 eassert (target_index == LFACE_FOREGROUND_INDEX
@@ -1117,7 +1117,7 @@ unsigned long
1117load_color (struct frame *f, struct face *face, Lisp_Object name, 1117load_color (struct frame *f, struct face *face, Lisp_Object name,
1118 enum lface_attribute_index target_index) 1118 enum lface_attribute_index target_index)
1119{ 1119{
1120 XColor color; 1120 Emacs_Color color;
1121 return load_color2 (f, face, name, target_index, &color); 1121 return load_color2 (f, face, name, target_index, &color);
1122} 1122}
1123 1123
@@ -1134,7 +1134,7 @@ load_face_colors (struct frame *f, struct face *face,
1134 Lisp_Object attrs[LFACE_VECTOR_SIZE]) 1134 Lisp_Object attrs[LFACE_VECTOR_SIZE])
1135{ 1135{
1136 Lisp_Object fg, bg, dfg; 1136 Lisp_Object fg, bg, dfg;
1137 XColor xfg, xbg; 1137 Emacs_Color xfg, xbg;
1138 1138
1139 bg = attrs[LFACE_BACKGROUND_INDEX]; 1139 bg = attrs[LFACE_BACKGROUND_INDEX];
1140 fg = attrs[LFACE_FOREGROUND_INDEX]; 1140 fg = attrs[LFACE_FOREGROUND_INDEX];
@@ -4140,25 +4140,25 @@ prepare_face_for_display (struct frame *f, struct face *face)
4140 4140
4141 if (face->gc == 0) 4141 if (face->gc == 0)
4142 { 4142 {
4143 XGCValues xgcv; 4143 Emacs_GC egc;
4144 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures; 4144 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures;
4145 4145
4146 xgcv.foreground = face->foreground; 4146 egc.foreground = face->foreground;
4147 xgcv.background = face->background; 4147 egc.background = face->background;
4148#ifdef HAVE_X_WINDOWS 4148#ifdef HAVE_X_WINDOWS
4149 xgcv.graphics_exposures = False; 4149 egc.graphics_exposures = False;
4150#endif 4150#endif
4151 4151
4152 block_input (); 4152 block_input ();
4153#ifdef HAVE_X_WINDOWS 4153#ifdef HAVE_X_WINDOWS
4154 if (face->stipple) 4154 if (face->stipple)
4155 { 4155 {
4156 xgcv.fill_style = FillOpaqueStippled; 4156 egc.fill_style = FillOpaqueStippled;
4157 xgcv.stipple = image_bitmap_pixmap (f, face->stipple); 4157 egc.stipple = image_bitmap_pixmap (f, face->stipple);
4158 mask |= GCFillStyle | GCStipple; 4158 mask |= GCFillStyle | GCStipple;
4159 } 4159 }
4160#endif 4160#endif
4161 face->gc = x_create_gc (f, mask, &xgcv); 4161 face->gc = x_create_gc (f, mask, &egc);
4162 if (face->font) 4162 if (face->font)
4163 font_prepare_for_face (f, face); 4163 font_prepare_for_face (f, face);
4164 unblock_input (); 4164 unblock_input ();
@@ -4170,7 +4170,7 @@ prepare_face_for_display (struct frame *f, struct face *face)
4170/* Returns the `distance' between the colors X and Y. */ 4170/* Returns the `distance' between the colors X and Y. */
4171 4171
4172static int 4172static int
4173color_distance (XColor *x, XColor *y) 4173color_distance (Emacs_Color *x, Emacs_Color *y)
4174{ 4174{
4175 /* This formula is from a paper titled `Colour metric' by Thiadmer Riemersma. 4175 /* This formula is from a paper titled `Colour metric' by Thiadmer Riemersma.
4176 Quoting from that paper: 4176 Quoting from that paper:
@@ -4205,7 +4205,7 @@ two lists of the form (RED GREEN BLUE) aforementioned. */)
4205 Lisp_Object metric) 4205 Lisp_Object metric)
4206{ 4206{
4207 struct frame *f = decode_live_frame (frame); 4207 struct frame *f = decode_live_frame (frame);
4208 XColor cdef1, cdef2; 4208 Emacs_Color cdef1, cdef2;
4209 4209
4210 if (!(CONSP (color1) && parse_rgb_list (color1, &cdef1)) 4210 if (!(CONSP (color1) && parse_rgb_list (color1, &cdef1))
4211 && !(STRINGP (color1) 4211 && !(STRINGP (color1)
@@ -4885,8 +4885,8 @@ tty_supports_face_attributes_p (struct frame *f,
4885{ 4885{
4886 int weight, slant; 4886 int weight, slant;
4887 Lisp_Object val, fg, bg; 4887 Lisp_Object val, fg, bg;
4888 XColor fg_tty_color, fg_std_color; 4888 Emacs_Color fg_tty_color, fg_std_color;
4889 XColor bg_tty_color, bg_std_color; 4889 Emacs_Color bg_tty_color, bg_std_color;
4890 unsigned test_caps = 0; 4890 unsigned test_caps = 0;
4891 Lisp_Object *def_attrs = def_face->lface; 4891 Lisp_Object *def_attrs = def_face->lface;
4892 4892
@@ -4988,7 +4988,7 @@ tty_supports_face_attributes_p (struct frame *f,
4988 else 4988 else
4989 /* Make sure the color is really different than the default. */ 4989 /* Make sure the color is really different than the default. */
4990 { 4990 {
4991 XColor def_fg_color; 4991 Emacs_Color def_fg_color;
4992 if (tty_lookup_color (f, def_fg, &def_fg_color, 0) 4992 if (tty_lookup_color (f, def_fg, &def_fg_color, 0)
4993 && (color_distance (&fg_tty_color, &def_fg_color) 4993 && (color_distance (&fg_tty_color, &def_fg_color)
4994 <= TTY_SAME_COLOR_THRESHOLD)) 4994 <= TTY_SAME_COLOR_THRESHOLD))
@@ -5012,7 +5012,7 @@ tty_supports_face_attributes_p (struct frame *f,
5012 else 5012 else
5013 /* Make sure the color is really different than the default. */ 5013 /* Make sure the color is really different than the default. */
5014 { 5014 {
5015 XColor def_bg_color; 5015 Emacs_Color def_bg_color;
5016 if (tty_lookup_color (f, def_bg, &def_bg_color, 0) 5016 if (tty_lookup_color (f, def_bg, &def_bg_color, 0)
5017 && (color_distance (&bg_tty_color, &def_bg_color) 5017 && (color_distance (&bg_tty_color, &def_bg_color)
5018 <= TTY_SAME_COLOR_THRESHOLD)) 5018 <= TTY_SAME_COLOR_THRESHOLD))
diff --git a/src/xfns.c b/src/xfns.c
index c8cc1704a47..4195980d33e 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -653,7 +653,7 @@ gamma_correct (struct frame *f, XColor *color)
653 653
654bool 654bool
655x_defined_color (struct frame *f, const char *color_name, 655x_defined_color (struct frame *f, const char *color_name,
656 XColor *color, bool alloc_p, bool _makeIndex) 656 Emacs_Color *color, bool alloc_p, bool _makeIndex)
657{ 657{
658 bool success_p = false; 658 bool success_p = false;
659 Colormap cmap = FRAME_X_COLORMAP (f); 659 Colormap cmap = FRAME_X_COLORMAP (f);
diff --git a/src/xfont.c b/src/xfont.c
index ff80df407d7..81808e7a62e 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -46,18 +46,20 @@ struct xfont_info
46 46
47/* Prototypes of support functions. */ 47/* Prototypes of support functions. */
48 48
49static XCharStruct *xfont_get_pcm (XFontStruct *, XChar2b *); 49static XCharStruct *xfont_get_pcm (XFontStruct *, unsigned char2b);
50 50
51/* Get metrics of character CHAR2B in XFONT. Value is null if CHAR2B 51/* Get metrics of character CHAR2B in XFONT. Value is null if CHAR2B
52 is not contained in the font. */ 52 is not contained in the font. */
53 53
54static XCharStruct * 54static XCharStruct *
55xfont_get_pcm (XFontStruct *xfont, XChar2b *char2b) 55xfont_get_pcm (XFontStruct *xfont, unsigned char2b)
56{ 56{
57 /* The result metric information. */ 57 /* The result metric information. */
58 XCharStruct *pcm = NULL; 58 XCharStruct *pcm = NULL;
59 const unsigned char byte1 = char2b >> 8;
60 const unsigned char byte2 = char2b & 0xFF;
59 61
60 eassert (xfont && char2b); 62 eassert (xfont);
61 63
62 if (xfont->per_char != NULL) 64 if (xfont->per_char != NULL)
63 { 65 {
@@ -66,13 +68,13 @@ xfont_get_pcm (XFontStruct *xfont, XChar2b *char2b)
66 /* min_char_or_byte2 specifies the linear character index 68 /* min_char_or_byte2 specifies the linear character index
67 corresponding to the first element of the per_char array, 69 corresponding to the first element of the per_char array,
68 max_char_or_byte2 is the index of the last character. A 70 max_char_or_byte2 is the index of the last character. A
69 character with non-zero CHAR2B->byte1 is not in the font. 71 character with non-zero byte1 is not in the font.
70 A character with byte2 less than min_char_or_byte2 or 72 A character with byte2 less than min_char_or_byte2 or
71 greater max_char_or_byte2 is not in the font. */ 73 greater max_char_or_byte2 is not in the font. */
72 if (char2b->byte1 == 0 74 if (byte1 == 0
73 && char2b->byte2 >= xfont->min_char_or_byte2 75 && byte2 >= xfont->min_char_or_byte2
74 && char2b->byte2 <= xfont->max_char_or_byte2) 76 && byte2 <= xfont->max_char_or_byte2)
75 pcm = xfont->per_char + char2b->byte2 - xfont->min_char_or_byte2; 77 pcm = xfont->per_char + byte2 - xfont->min_char_or_byte2;
76 } 78 }
77 else 79 else
78 { 80 {
@@ -89,14 +91,14 @@ xfont_get_pcm (XFontStruct *xfont, XChar2b *char2b)
89 D = max_char_or_byte2 - min_char_or_byte2 + 1 91 D = max_char_or_byte2 - min_char_or_byte2 + 1
90 / = integer division 92 / = integer division
91 \ = integer modulus */ 93 \ = integer modulus */
92 if (char2b->byte1 >= xfont->min_byte1 94 if (byte1 >= xfont->min_byte1
93 && char2b->byte1 <= xfont->max_byte1 95 && byte1 <= xfont->max_byte1
94 && char2b->byte2 >= xfont->min_char_or_byte2 96 && byte2 >= xfont->min_char_or_byte2
95 && char2b->byte2 <= xfont->max_char_or_byte2) 97 && byte2 <= xfont->max_char_or_byte2)
96 pcm = (xfont->per_char 98 pcm = (xfont->per_char
97 + ((xfont->max_char_or_byte2 - xfont->min_char_or_byte2 + 1) 99 + ((xfont->max_char_or_byte2 - xfont->min_char_or_byte2 + 1)
98 * (char2b->byte1 - xfont->min_byte1)) 100 * (byte1 - xfont->min_byte1))
99 + (char2b->byte2 - xfont->min_char_or_byte2)); 101 + (byte2 - xfont->min_char_or_byte2));
100 } 102 }
101 } 103 }
102 else 104 else
@@ -104,8 +106,8 @@ xfont_get_pcm (XFontStruct *xfont, XChar2b *char2b)
104 /* If the per_char pointer is null, all glyphs between the first 106 /* If the per_char pointer is null, all glyphs between the first
105 and last character indexes inclusive have the same 107 and last character indexes inclusive have the same
106 information, as given by both min_bounds and max_bounds. */ 108 information, as given by both min_bounds and max_bounds. */
107 if (char2b->byte2 >= xfont->min_char_or_byte2 109 if (byte2 >= xfont->min_char_or_byte2
108 && char2b->byte2 <= xfont->max_char_or_byte2) 110 && byte2 <= xfont->max_char_or_byte2)
109 pcm = &xfont->max_bounds; 111 pcm = &xfont->max_bounds;
110 } 112 }
111 113
@@ -193,7 +195,6 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct *xfont,
193 { 195 {
194 int c = XFIXNUM (XCAR (chars)); 196 int c = XFIXNUM (XCAR (chars));
195 unsigned code = ENCODE_CHAR (charset, c); 197 unsigned code = ENCODE_CHAR (charset, c);
196 XChar2b char2b;
197 198
198 if (code == CHARSET_INVALID_CODE (charset)) 199 if (code == CHARSET_INVALID_CODE (charset))
199 break; 200 break;
@@ -201,9 +202,7 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct *xfont,
201 continue; 202 continue;
202 if (code >= 0x10000) 203 if (code >= 0x10000)
203 break; 204 break;
204 char2b.byte1 = code >> 8; 205 if (! xfont_get_pcm (xfont, code))
205 char2b.byte2 = code & 0xFF;
206 if (! xfont_get_pcm (xfont, &char2b))
207 break; 206 break;
208 } 207 }
209 return (NILP (chars)); 208 return (NILP (chars));
@@ -216,7 +215,6 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct *xfont,
216 { 215 {
217 int c = XFIXNUM (AREF (chars, i)); 216 int c = XFIXNUM (AREF (chars, i));
218 unsigned code = ENCODE_CHAR (charset, c); 217 unsigned code = ENCODE_CHAR (charset, c);
219 XChar2b char2b;
220 218
221 if (code == CHARSET_INVALID_CODE (charset)) 219 if (code == CHARSET_INVALID_CODE (charset))
222 continue; 220 continue;
@@ -224,9 +222,7 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct *xfont,
224 break; 222 break;
225 if (code >= 0x10000) 223 if (code >= 0x10000)
226 continue; 224 continue;
227 char2b.byte1 = code >> 8; 225 if (xfont_get_pcm (xfont, code))
228 char2b.byte2 = code & 0xFF;
229 if (xfont_get_pcm (xfont, &char2b))
230 break; 226 break;
231 } 227 }
232 return (i >= 0); 228 return (i >= 0);
@@ -801,11 +797,9 @@ xfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
801 else 797 else
802 { 798 {
803 XCharStruct *pcm; 799 XCharStruct *pcm;
804 XChar2b char2b;
805 Lisp_Object val; 800 Lisp_Object val;
806 801
807 char2b.byte1 = 0x00, char2b.byte2 = 0x20; 802 pcm = xfont_get_pcm (xfont, 0x20);
808 pcm = xfont_get_pcm (xfont, &char2b);
809 if (pcm) 803 if (pcm)
810 font->space_width = pcm->width; 804 font->space_width = pcm->width;
811 else 805 else
@@ -823,8 +817,8 @@ xfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
823 { 817 {
824 int width = font->space_width, n = pcm != NULL; 818 int width = font->space_width, n = pcm != NULL;
825 819
826 for (char2b.byte2 = 33; char2b.byte2 <= 126; char2b.byte2++) 820 for (unsigned char2b = 33; char2b <= 126; ++char2b)
827 if ((pcm = xfont_get_pcm (xfont, &char2b)) != NULL) 821 if ((pcm = xfont_get_pcm (xfont, char2b)) != NULL)
828 width += pcm->width, n++; 822 width += pcm->width, n++;
829 if (n > 0) 823 if (n > 0)
830 font->average_width = width / n; 824 font->average_width = width / n;
@@ -934,7 +928,6 @@ xfont_encode_char (struct font *font, int c)
934 XFontStruct *xfont = ((struct xfont_info *) font)->xfont; 928 XFontStruct *xfont = ((struct xfont_info *) font)->xfont;
935 struct charset *charset; 929 struct charset *charset;
936 unsigned code; 930 unsigned code;
937 XChar2b char2b;
938 931
939 charset = CHARSET_FROM_ID (font->encoding_charset); 932 charset = CHARSET_FROM_ID (font->encoding_charset);
940 code = ENCODE_CHAR (charset, c); 933 code = ENCODE_CHAR (charset, c);
@@ -946,13 +939,11 @@ xfont_encode_char (struct font *font, int c)
946 return (ENCODE_CHAR (charset, c) != CHARSET_INVALID_CODE (charset) 939 return (ENCODE_CHAR (charset, c) != CHARSET_INVALID_CODE (charset)
947 ? code : FONT_INVALID_CODE); 940 ? code : FONT_INVALID_CODE);
948 } 941 }
949 char2b.byte1 = code >> 8; 942 return (xfont_get_pcm (xfont, code) ? code : FONT_INVALID_CODE);
950 char2b.byte2 = code & 0xFF;
951 return (xfont_get_pcm (xfont, &char2b) ? code : FONT_INVALID_CODE);
952} 943}
953 944
954static void 945static void
955xfont_text_extents (struct font *font, unsigned int *code, 946xfont_text_extents (struct font *font, const unsigned int *code,
956 int nglyphs, struct font_metrics *metrics) 947 int nglyphs, struct font_metrics *metrics)
957{ 948{
958 XFontStruct *xfont = ((struct xfont_info *) font)->xfont; 949 XFontStruct *xfont = ((struct xfont_info *) font)->xfont;
@@ -961,13 +952,11 @@ xfont_text_extents (struct font *font, unsigned int *code,
961 952
962 for (i = 0, first = true; i < nglyphs; i++) 953 for (i = 0, first = true; i < nglyphs; i++)
963 { 954 {
964 XChar2b char2b;
965 static XCharStruct *pcm; 955 static XCharStruct *pcm;
966 956
967 if (code[i] >= 0x10000) 957 if (code[i] >= 0x10000)
968 continue; 958 continue;
969 char2b.byte1 = code[i] >> 8, char2b.byte2 = code[i] & 0xFF; 959 pcm = xfont_get_pcm (xfont, code[i]);
970 pcm = xfont_get_pcm (xfont, &char2b);
971 if (! pcm) 960 if (! pcm)
972 continue; 961 continue;
973 if (first) 962 if (first)
@@ -1017,7 +1006,7 @@ xfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1017 USE_SAFE_ALLOCA; 1006 USE_SAFE_ALLOCA;
1018 char *str = SAFE_ALLOCA (len); 1007 char *str = SAFE_ALLOCA (len);
1019 for (i = 0; i < len ; i++) 1008 for (i = 0; i < len ; i++)
1020 str[i] = XCHAR2B_BYTE2 (s->char2b + from + i); 1009 str[i] = s->char2b[from + i] & 0xFF;
1021 block_input (); 1010 block_input ();
1022 if (with_background) 1011 if (with_background)
1023 { 1012 {
@@ -1049,21 +1038,51 @@ xfont_draw (struct glyph_string *s, int from, int to, int x, int y,
1049 { 1038 {
1050 if (s->padding_p) 1039 if (s->padding_p)
1051 for (i = 0; i < len; i++) 1040 for (i = 0; i < len; i++)
1052 XDrawImageString16 (display, FRAME_X_DRAWABLE (s->f), 1041 {
1053 gc, x + i, y, s->char2b + from + i, 1); 1042 const unsigned code = s->char2b[from + i];
1043 const XChar2b char2b = { .byte1 = code >> 8,
1044 .byte2 = code & 0xFF };
1045 XDrawImageString16 (display, FRAME_X_DRAWABLE (s->f),
1046 gc, x + i, y, &char2b, 1);
1047 }
1054 else 1048 else
1055 XDrawImageString16 (display, FRAME_X_DRAWABLE (s->f), 1049 {
1056 gc, x, y, s->char2b + from, len); 1050 USE_SAFE_ALLOCA;
1051 const unsigned *code = s->char2b + from;
1052 XChar2b *char2b;
1053 SAFE_NALLOCA (char2b, 1, len);
1054 for (int i = 0; i < len; ++i)
1055 char2b[i] = (XChar2b) { .byte1 = code[i] >> 8,
1056 .byte2 = code[i] & 0xFF };
1057 XDrawImageString16 (display, FRAME_X_DRAWABLE (s->f),
1058 gc, x, y, char2b, len);
1059 SAFE_FREE ();
1060 }
1057 } 1061 }
1058 else 1062 else
1059 { 1063 {
1060 if (s->padding_p) 1064 if (s->padding_p)
1061 for (i = 0; i < len; i++) 1065 for (i = 0; i < len; i++)
1062 XDrawString16 (display, FRAME_X_DRAWABLE (s->f), 1066 {
1063 gc, x + i, y, s->char2b + from + i, 1); 1067 const unsigned code = s->char2b[from + i];
1068 const XChar2b char2b = { .byte1 = code >> 8,
1069 .byte2 = code & 0xFF };
1070 XDrawString16 (display, FRAME_X_DRAWABLE (s->f),
1071 gc, x + i, y, &char2b, 1);
1072 }
1064 else 1073 else
1065 XDrawString16 (display, FRAME_X_DRAWABLE (s->f), 1074 {
1066 gc, x, y, s->char2b + from, len); 1075 USE_SAFE_ALLOCA;
1076 const unsigned *code = s->char2b + from;
1077 XChar2b *char2b;
1078 SAFE_NALLOCA (char2b, 1, len);
1079 for (int i = 0; i < len; ++i)
1080 char2b[i] = (XChar2b) { .byte1 = code[i] >> 8,
1081 .byte2 = code[i] & 0xFF };
1082 XDrawString16 (display, FRAME_X_DRAWABLE (s->f),
1083 gc, x, y, char2b, len);
1084 SAFE_FREE ();
1085 }
1067 } 1086 }
1068 unblock_input (); 1087 unblock_input ();
1069 1088
diff --git a/src/xftfont.c b/src/xftfont.c
index 8a4516f7f91..4f0a0d81d85 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -127,120 +127,18 @@ xftfont_match (struct frame *f, Lisp_Object spec)
127 127
128static FcChar8 ascii_printable[95]; 128static FcChar8 ascii_printable[95];
129 129
130static void
131xftfont_fix_match (FcPattern *pat, FcPattern *match)
132{
133 /* These values are not used for matching (except antialias), but for
134 rendering, so make sure they are carried over to the match.
135 We also put antialias here because most fonts are antialiased, so
136 the match will have antialias true. */
137
138 FcBool b = FcTrue;
139 int i;
140 double dpi;
141
142 FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b);
143 if (! b)
144 {
145 FcPatternDel (match, FC_ANTIALIAS);
146 FcPatternAddBool (match, FC_ANTIALIAS, FcFalse);
147 }
148 FcPatternGetBool (pat, FC_HINTING, 0, &b);
149 if (! b)
150 {
151 FcPatternDel (match, FC_HINTING);
152 FcPatternAddBool (match, FC_HINTING, FcFalse);
153 }
154#ifndef FC_HINT_STYLE
155# define FC_HINT_STYLE "hintstyle"
156#endif
157 if (FcResultMatch == FcPatternGetInteger (pat, FC_HINT_STYLE, 0, &i))
158 {
159 FcPatternDel (match, FC_HINT_STYLE);
160 FcPatternAddInteger (match, FC_HINT_STYLE, i);
161 }
162#ifndef FC_LCD_FILTER
163 /* Older fontconfig versions don't have FC_LCD_FILTER. */
164#define FC_LCD_FILTER "lcdfilter"
165#endif
166 if (FcResultMatch == FcPatternGetInteger (pat, FC_LCD_FILTER, 0, &i))
167 {
168 FcPatternDel (match, FC_LCD_FILTER);
169 FcPatternAddInteger (match, FC_LCD_FILTER, i);
170 }
171 if (FcResultMatch == FcPatternGetInteger (pat, FC_RGBA, 0, &i))
172 {
173 FcPatternDel (match, FC_RGBA);
174 FcPatternAddInteger (match, FC_RGBA, i);
175 }
176 if (FcResultMatch == FcPatternGetDouble (pat, FC_DPI, 0, &dpi))
177 {
178 FcPatternDel (match, FC_DPI);
179 FcPatternAddDouble (match, FC_DPI, dpi);
180 }
181}
182
183static void
184xftfont_add_rendering_parameters (FcPattern *pat, Lisp_Object entity)
185{
186 Lisp_Object tail;
187 int ival;
188
189 for (tail = AREF (entity, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail))
190 {
191 Lisp_Object key = XCAR (XCAR (tail));
192 Lisp_Object val = XCDR (XCAR (tail));
193
194 if (EQ (key, QCantialias))
195 FcPatternAddBool (pat, FC_ANTIALIAS, NILP (val) ? FcFalse : FcTrue);
196 else if (EQ (key, QChinting))
197 FcPatternAddBool (pat, FC_HINTING, NILP (val) ? FcFalse : FcTrue);
198 else if (EQ (key, QCautohint))
199 FcPatternAddBool (pat, FC_AUTOHINT, NILP (val) ? FcFalse : FcTrue);
200 else if (EQ (key, QChintstyle))
201 {
202 if (FIXNUMP (val))
203 FcPatternAddInteger (pat, FC_HINT_STYLE, XFIXNUM (val));
204 else if (SYMBOLP (val)
205 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
206 FcPatternAddInteger (pat, FC_HINT_STYLE, ival);
207 }
208 else if (EQ (key, QCrgba))
209 {
210 if (FIXNUMP (val))
211 FcPatternAddInteger (pat, FC_RGBA, XFIXNUM (val));
212 else if (SYMBOLP (val)
213 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
214 FcPatternAddInteger (pat, FC_RGBA, ival);
215 }
216 else if (EQ (key, QClcdfilter))
217 {
218 if (FIXNUMP (val))
219 FcPatternAddInteger (pat, FC_LCD_FILTER, ival = XFIXNUM (val));
220 else if (SYMBOLP (val)
221 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival))
222 FcPatternAddInteger (pat, FC_LCD_FILTER, ival);
223 }
224#ifdef FC_EMBOLDEN
225 else if (EQ (key, QCembolden))
226 FcPatternAddBool (pat, FC_EMBOLDEN, NILP (val) ? FcFalse : FcTrue);
227#endif
228 }
229}
230
231static Lisp_Object 130static Lisp_Object
232xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 131xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
233{ 132{
234 FcResult result; 133 FcResult result;
235 Display *display = FRAME_X_DISPLAY (f); 134 Display *display = FRAME_X_DISPLAY (f);
236 Lisp_Object val, filename, idx, font_object; 135 Lisp_Object val, filename, font_object;
237 FcPattern *pat = NULL, *match; 136 FcPattern *pat = NULL, *match;
238 struct font_info *xftfont_info = NULL; 137 struct font_info *xftfont_info = NULL;
239 struct font *font; 138 struct font *font;
240 double size = 0; 139 double size = 0;
241 XftFont *xftfont = NULL; 140 XftFont *xftfont = NULL;
242 int spacing; 141 int spacing;
243 int i;
244 XGlyphInfo extents; 142 XGlyphInfo extents;
245 FT_Face ft_face; 143 FT_Face ft_face;
246 FcMatrix *matrix; 144 FcMatrix *matrix;
@@ -250,52 +148,17 @@ xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
250 return Qnil; 148 return Qnil;
251 val = XCDR (val); 149 val = XCDR (val);
252 filename = XCAR (val); 150 filename = XCAR (val);
253 idx = XCDR (val);
254 size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX)); 151 size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX));
255 if (size == 0) 152 if (size == 0)
256 size = pixel_size; 153 size = pixel_size;
257 pat = FcPatternCreate ();
258 FcPatternAddInteger (pat, FC_WEIGHT, FONT_WEIGHT_NUMERIC (entity));
259 i = FONT_SLANT_NUMERIC (entity) - 100;
260 if (i < 0) i = 0;
261 FcPatternAddInteger (pat, FC_SLANT, i);
262 FcPatternAddInteger (pat, FC_WIDTH, FONT_WIDTH_NUMERIC (entity));
263 FcPatternAddDouble (pat, FC_PIXEL_SIZE, pixel_size);
264 val = AREF (entity, FONT_FAMILY_INDEX);
265 if (! NILP (val))
266 FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) SDATA (SYMBOL_NAME (val)));
267 val = AREF (entity, FONT_FOUNDRY_INDEX);
268 if (! NILP (val))
269 FcPatternAddString (pat, FC_FOUNDRY, (FcChar8 *) SDATA (SYMBOL_NAME (val)));
270 val = AREF (entity, FONT_SPACING_INDEX);
271 if (! NILP (val))
272 FcPatternAddInteger (pat, FC_SPACING, XFIXNUM (val));
273 val = AREF (entity, FONT_DPI_INDEX);
274 if (! NILP (val))
275 {
276 double dbl = XFIXNUM (val);
277
278 FcPatternAddDouble (pat, FC_DPI, dbl);
279 }
280 val = AREF (entity, FONT_AVGWIDTH_INDEX);
281 if (FIXNUMP (val) && XFIXNUM (val) == 0)
282 FcPatternAddBool (pat, FC_SCALABLE, FcTrue);
283 /* This is necessary to identify the exact font (e.g. 10x20.pcf.gz
284 over 10x20-ISO8859-1.pcf.gz). */
285 FcPatternAddCharSet (pat, FC_CHARSET, ftfont_get_fc_charset (entity));
286
287 xftfont_add_rendering_parameters (pat, entity);
288
289 FcPatternAddString (pat, FC_FILE, (FcChar8 *) SDATA (filename));
290 FcPatternAddInteger (pat, FC_INDEX, XFIXNUM (idx));
291
292 154
293 block_input (); 155 block_input ();
294 156
157 pat = ftfont_entity_pattern (entity, pixel_size);
295 /* Substitute in values from X resources and XftDefaultSet. */ 158 /* Substitute in values from X resources and XftDefaultSet. */
296 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); 159 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat);
297 match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result); 160 match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result);
298 xftfont_fix_match (pat, match); 161 ftfont_fix_match (pat, match);
299 162
300 FcPatternDestroy (pat); 163 FcPatternDestroy (pat);
301 xftfont = XftFontOpenPattern (display, match); 164 xftfont = XftFontOpenPattern (display, match);
@@ -536,7 +399,7 @@ xftfont_encode_char (struct font *font, int c)
536} 399}
537 400
538static void 401static void
539xftfont_text_extents (struct font *font, unsigned int *code, 402xftfont_text_extents (struct font *font, const unsigned int *code,
540 int nglyphs, struct font_metrics *metrics) 403 int nglyphs, struct font_metrics *metrics)
541{ 404{
542 struct font_info *xftfont_info = (struct font_info *) font; 405 struct font_info *xftfont_info = (struct font_info *) font;
@@ -621,8 +484,7 @@ xftfont_draw (struct glyph_string *s, int from, int to, int x, int y,
621 } 484 }
622 code = alloca (sizeof (FT_UInt) * len); 485 code = alloca (sizeof (FT_UInt) * len);
623 for (i = 0; i < len; i++) 486 for (i = 0; i < len; i++)
624 code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8) 487 code[i] = s->char2b[from + i];
625 | XCHAR2B_BYTE2 (s->char2b + from + i));
626 488
627 if (s->padding_p) 489 if (s->padding_p)
628 for (i = 0; i < len; i++) 490 for (i = 0; i < len; i++)
@@ -696,7 +558,7 @@ xftfont_cached_font_ok (struct frame *f, Lisp_Object font_object,
696 bool ok = false; 558 bool ok = false;
697 int i1, i2, r1, r2; 559 int i1, i2, r1, r2;
698 560
699 xftfont_add_rendering_parameters (pat, entity); 561 ftfont_add_rendering_parameters (pat, entity);
700 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); 562 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat);
701 563
702 r1 = FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b1); 564 r1 = FcPatternGetBool (pat, FC_ANTIALIAS, 0, &b1);
@@ -769,12 +631,6 @@ void
769syms_of_xftfont (void) 631syms_of_xftfont (void)
770{ 632{
771 DEFSYM (Qxft, "xft"); 633 DEFSYM (Qxft, "xft");
772 DEFSYM (QChinting, ":hinting");
773 DEFSYM (QCautohint, ":autohint");
774 DEFSYM (QChintstyle, ":hintstyle");
775 DEFSYM (QCrgba, ":rgba");
776 DEFSYM (QCembolden, ":embolden");
777 DEFSYM (QClcdfilter, ":lcdfilter");
778 634
779 DEFVAR_BOOL ("xft-font-ascent-descent-override", 635 DEFVAR_BOOL ("xft-font-ascent-descent-override",
780 xft_font_ascent_descent_override, 636 xft_font_ascent_descent_override,
diff --git a/src/xterm.c b/src/xterm.c
index 4f4a1d6d02a..559d1b48924 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1599,13 +1599,8 @@ x_compute_glyph_string_overhangs (struct glyph_string *s)
1599 1599
1600 if (s->first_glyph->type == CHAR_GLYPH) 1600 if (s->first_glyph->type == CHAR_GLYPH)
1601 { 1601 {
1602 unsigned *code = alloca (sizeof (unsigned) * s->nchars);
1603 struct font *font = s->font; 1602 struct font *font = s->font;
1604 int i; 1603 font->driver->text_extents (font, s->char2b, s->nchars, &metrics);
1605
1606 for (i = 0; i < s->nchars; i++)
1607 code[i] = (s->char2b[i].byte1 << 8) | s->char2b[i].byte2;
1608 font->driver->text_extents (font, code, s->nchars, &metrics);
1609 } 1604 }
1610 else 1605 else
1611 { 1606 {
@@ -1831,7 +1826,7 @@ static void
1831x_draw_glyphless_glyph_string_foreground (struct glyph_string *s) 1826x_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
1832{ 1827{
1833 struct glyph *glyph = s->first_glyph; 1828 struct glyph *glyph = s->first_glyph;
1834 XChar2b char2b[8]; 1829 unsigned char2b[8];
1835 int x, i, j; 1830 int x, i, j;
1836 1831
1837 /* If first glyph of S has a left box line, start drawing the text 1832 /* If first glyph of S has a left box line, start drawing the text
@@ -1882,14 +1877,10 @@ x_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
1882 if (str) 1877 if (str)
1883 { 1878 {
1884 int upper_len = (len + 1) / 2; 1879 int upper_len = (len + 1) / 2;
1885 unsigned code;
1886 1880
1887 /* It is assured that all LEN characters in STR is ASCII. */ 1881 /* It is assured that all LEN characters in STR is ASCII. */
1888 for (j = 0; j < len; j++) 1882 for (j = 0; j < len; j++)
1889 { 1883 char2b[j] = s->font->driver->encode_char (s->font, str[j]) & 0xFFFF;
1890 code = s->font->driver->encode_char (s->font, str[j]);
1891 STORE_XCHAR2B (char2b + j, code >> 8, code & 0xFF);
1892 }
1893 s->font->driver->draw (s, 0, upper_len, 1884 s->font->driver->draw (s, 0, upper_len,
1894 x + glyph->slice.glyphless.upper_xoff, 1885 x + glyph->slice.glyphless.upper_xoff,
1895 s->ybase + glyph->slice.glyphless.upper_yoff, 1886 s->ybase + glyph->slice.glyphless.upper_yoff,
@@ -8200,7 +8191,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
8200 fit in 81 bytes. So, we must prepare sufficient 8191 fit in 81 bytes. So, we must prepare sufficient
8201 bytes for copy_buffer. 513 bytes (256 chars for 8192 bytes for copy_buffer. 513 bytes (256 chars for
8202 two-byte character set) seems to be a fairly good 8193 two-byte character set) seems to be a fairly good
8203 approximation. -- 2000.8.10 handa@etl.go.jp */ 8194 approximation. -- 2000.8.10 handa@gnu.org */
8204 unsigned char copy_buffer[513]; 8195 unsigned char copy_buffer[513];
8205 unsigned char *copy_bufptr = copy_buffer; 8196 unsigned char *copy_bufptr = copy_buffer;
8206 int copy_bufsiz = sizeof (copy_buffer); 8197 int copy_bufsiz = sizeof (copy_buffer);
@@ -9356,7 +9347,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
9356/* RIF: Define cursor CURSOR on frame F. */ 9347/* RIF: Define cursor CURSOR on frame F. */
9357 9348
9358static void 9349static void
9359x_define_frame_cursor (struct frame *f, Cursor cursor) 9350x_define_frame_cursor (struct frame *f, Emacs_Cursor cursor)
9360{ 9351{
9361 if (!f->pointer_invisible 9352 if (!f->pointer_invisible
9362 && f->output_data.x->current_cursor != cursor) 9353 && f->output_data.x->current_cursor != cursor)
@@ -12161,7 +12152,7 @@ x_check_font (struct frame *f, struct font *font)
12161 ***********************************************************************/ 12152 ***********************************************************************/
12162 12153
12163static void 12154static void
12164x_free_pixmap (struct frame *f, Pixmap pixmap) 12155x_free_pixmap (struct frame *f, Emacs_Pixmap pixmap)
12165{ 12156{
12166 XFreePixmap (FRAME_X_DISPLAY (f), pixmap); 12157 XFreePixmap (FRAME_X_DISPLAY (f), pixmap);
12167} 12158}
diff --git a/src/xterm.h b/src/xterm.h
index 84030d5c25e..ce1443c381c 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -731,8 +731,6 @@ struct x_output
731#endif 731#endif
732}; 732};
733 733
734#define No_Cursor (None)
735
736enum 734enum
737{ 735{
738 /* Values for focus_state, used as bit mask. 736 /* Values for focus_state, used as bit mask.
@@ -1224,7 +1222,8 @@ extern void destroy_frame_xic (struct frame *);
1224extern void xic_set_preeditarea (struct window *, int, int); 1222extern void xic_set_preeditarea (struct window *, int, int);
1225extern void xic_set_statusarea (struct frame *); 1223extern void xic_set_statusarea (struct frame *);
1226extern void xic_set_xfontset (struct frame *, const char *); 1224extern void xic_set_xfontset (struct frame *, const char *);
1227extern bool x_defined_color (struct frame *, const char *, XColor *, bool, bool); 1225extern bool x_defined_color (struct frame *, const char *, Emacs_Color *,
1226 bool, bool);
1228#ifdef HAVE_X_I18N 1227#ifdef HAVE_X_I18N
1229extern void free_frame_xic (struct frame *); 1228extern void free_frame_xic (struct frame *);
1230# if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT 1229# if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT
@@ -1263,15 +1262,6 @@ extern void x_session_close (void);
1263 1262
1264#define FRAME_X_EMBEDDED_P(f) (FRAME_X_OUTPUT(f)->explicit_parent != 0) 1263#define FRAME_X_EMBEDDED_P(f) (FRAME_X_OUTPUT(f)->explicit_parent != 0)
1265 1264
1266#define STORE_XCHAR2B(chp, b1, b2) \
1267 ((chp)->byte1 = (b1), (chp)->byte2 = (b2))
1268
1269#define XCHAR2B_BYTE1(chp) \
1270 ((chp)->byte1)
1271
1272#define XCHAR2B_BYTE2(chp) \
1273 ((chp)->byte2)
1274
1275#define STORE_NATIVE_RECT(nr,rx,ry,rwidth,rheight) \ 1265#define STORE_NATIVE_RECT(nr,rx,ry,rwidth,rheight) \
1276 ((nr).x = (rx), \ 1266 ((nr).x = (rx), \
1277 (nr).y = (ry), \ 1267 (nr).y = (ry), \
diff --git a/test/lisp/autorevert-tests.el b/test/lisp/autorevert-tests.el
index 0cc5b9c4e9d..5024a2daf0a 100644
--- a/test/lisp/autorevert-tests.el
+++ b/test/lisp/autorevert-tests.el
@@ -1,4 +1,4 @@
1;;; auto-revert-tests.el --- Tests of auto-revert 1;;; auto-revert-tests.el --- Tests of auto-revert -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 2015-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 4
@@ -150,7 +150,7 @@ This expects `auto-revert--messages' to be bound by
150 (tramp-dissect-file-name temporary-file-directory) nil 'keep-password) 150 (tramp-dissect-file-name temporary-file-directory) nil 'keep-password)
151 (condition-case err 151 (condition-case err
152 (funcall (ert-test-body ert-test)) 152 (funcall (ert-test-body ert-test))
153 (error (message "%s" err) (signal car err cdr err)))))) 153 (error (message "%s" err) (signal (car err) (cdr err)))))))
154 154
155(ert-deftest auto-revert-test00-auto-revert-mode () 155(ert-deftest auto-revert-test00-auto-revert-mode ()
156 "Check autorevert for a file." 156 "Check autorevert for a file."
@@ -310,8 +310,9 @@ This expects `auto-revert--messages' to be bound by
310 ;; notification should be disabled, falling back to 310 ;; notification should be disabled, falling back to
311 ;; polling. 311 ;; polling.
312 (should (string-match "any text" (buffer-string))) 312 (should (string-match "any text" (buffer-string)))
313 ;; With w32notify, the 'stopped' events are not sent. 313 ;; With w32notify, and on emba, the `stopped' events are not sent.
314 (or (eq file-notify--library 'w32notify) 314 (or (eq file-notify--library 'w32notify)
315 (getenv "EMACS_EMBA_CI")
315 (should-not auto-revert-notify-watch-descriptor)) 316 (should-not auto-revert-notify-watch-descriptor))
316 317
317 ;; Once the file has been recreated, the buffer shall be 318 ;; Once the file has been recreated, the buffer shall be
@@ -435,6 +436,111 @@ This expects `auto-revert--messages' to be bound by
435(auto-revert--deftest-remote auto-revert-test04-auto-revert-mode-dired 436(auto-revert--deftest-remote auto-revert-test04-auto-revert-mode-dired
436 "Check remote autorevert for dired.") 437 "Check remote autorevert for dired.")
437 438
439(defun auto-revert-test--write-file (string file)
440 "Write STRING to FILE."
441 (write-region string nil file nil 'no-message))
442
443(defun auto-revert-test--buffer-string (buffer)
444 "Contents of BUFFER as a string."
445 (with-current-buffer buffer
446 (buffer-string)))
447
448(defun auto-revert-test--wait-for (pred max-wait)
449 "Wait until PRED is true, or MAX-WAIT seconds elapsed."
450 (let ((ct (current-time)))
451 (while (and (< (float-time (time-subtract (current-time) ct)) max-wait)
452 (not (funcall pred)))
453 (read-event nil nil 0.1))))
454
455(defun auto-revert-test--wait-for-buffer-text (buffer string max-wait)
456 "Wait until BUFFER has the contents STRING, or MAX-WAIT seconds elapsed."
457 (auto-revert-test--wait-for
458 (lambda () (string-equal (auto-revert-test--buffer-string buffer) string))
459 max-wait))
460
461(ert-deftest auto-revert-test05-global-notify ()
462 "Test `global-auto-revert-mode' without polling."
463 :tags '(:expensive-test)
464 (skip-unless (or file-notify--library
465 (file-remote-p temporary-file-directory)))
466 (let* ((auto-revert-use-notify t)
467 (auto-revert-avoid-polling t)
468 (was-in-global-auto-revert-mode global-auto-revert-mode)
469 (file-1 (make-temp-file "global-auto-revert-test-1"))
470 (file-2 (make-temp-file "global-auto-revert-test-2"))
471 (file-3 (make-temp-file "global-auto-revert-test-3"))
472 (file-2b (concat file-2 "-b"))
473 buf-1 buf-2 buf-3)
474 (unwind-protect
475 (progn
476 (setq buf-1 (find-file-noselect file-1))
477 (setq buf-2 (find-file-noselect file-2))
478 (auto-revert-test--write-file "1-a" file-1)
479 (should (equal (auto-revert-test--buffer-string buf-1) ""))
480
481 (global-auto-revert-mode 1) ; Turn it on.
482
483 (should (buffer-local-value
484 'auto-revert-notify-watch-descriptor buf-1))
485 (should (buffer-local-value
486 'auto-revert-notify-watch-descriptor buf-2))
487
488 ;; buf-1 should have been reverted immediately when the mode
489 ;; was enabled.
490 (should (equal (auto-revert-test--buffer-string buf-1) "1-a"))
491
492 ;; Alter a file.
493 (auto-revert-test--write-file "2-a" file-2)
494 ;; Allow for some time to handle notification events.
495 (auto-revert-test--wait-for-buffer-text buf-2 "2-a" 1)
496 (should (equal (auto-revert-test--buffer-string buf-2) "2-a"))
497
498 ;; Visit a file, and modify it on disk.
499 (setq buf-3 (find-file-noselect file-3))
500 ;; Newly opened buffers won't be use notification until the
501 ;; first poll cycle; wait for it.
502 (auto-revert-test--wait-for
503 (lambda () (buffer-local-value
504 'auto-revert-notify-watch-descriptor buf-3))
505 (+ auto-revert-interval 1))
506 (should (buffer-local-value
507 'auto-revert-notify-watch-descriptor buf-3))
508 (auto-revert-test--write-file "3-a" file-3)
509 (auto-revert-test--wait-for-buffer-text buf-3 "3-a" 1)
510 (should (equal (auto-revert-test--buffer-string buf-3) "3-a"))
511
512 ;; Delete a visited file, and re-create it with new contents.
513 (delete-file file-1)
514 (sleep-for 0.5)
515 (should (equal (auto-revert-test--buffer-string buf-1) "1-a"))
516 (auto-revert-test--write-file "1-b" file-1)
517 (auto-revert-test--wait-for-buffer-text buf-1 "1-b"
518 (+ auto-revert-interval 1))
519 (should (buffer-local-value
520 'auto-revert-notify-watch-descriptor buf-1))
521
522 ;; Write a buffer to a new file, then modify the new file on disk.
523 (with-current-buffer buf-2
524 (write-file file-2b))
525 (should (equal (auto-revert-test--buffer-string buf-2) "2-a"))
526 (auto-revert-test--write-file "2-b" file-2b)
527 (auto-revert-test--wait-for-buffer-text buf-2 "2-b"
528 (+ auto-revert-interval 1))
529 (should (buffer-local-value
530 'auto-revert-notify-watch-descriptor buf-2)))
531
532 ;; Clean up.
533 (unless was-in-global-auto-revert-mode
534 (global-auto-revert-mode 0)) ; Turn it off.
535 (dolist (buf (list buf-1 buf-2 buf-3))
536 (ignore-errors (kill-buffer buf)))
537 (dolist (file (list file-1 file-2 file-2b file-3))
538 (ignore-errors (delete-file file)))
539 )))
540
541(auto-revert--deftest-remote auto-revert-test04-auto-revert-mode-dired
542 "Test `global-auto-revert-mode' without polling for remote buffers.")
543
438(defun auto-revert-test-all (&optional interactive) 544(defun auto-revert-test-all (&optional interactive)
439 "Run all tests for \\[auto-revert]." 545 "Run all tests for \\[auto-revert]."
440 (interactive "p") 546 (interactive "p")
diff --git a/test/lisp/delim-col-tests.el b/test/lisp/delim-col-tests.el
new file mode 100644
index 00000000000..f2a0377b07b
--- /dev/null
+++ b/test/lisp/delim-col-tests.el
@@ -0,0 +1,181 @@
1;;; delim-col-tests.el --- Tests for delim-col.el -*- lexical-binding: t; -*-
2
3;; Copyright (C) 2019 Free Software Foundation, Inc.
4
5;; Author: Stefan Kangas <stefankangas@gmail.com>
6
7;; This file is part of GNU Emacs.
8
9;; GNU Emacs is free software: you can redistribute it and/or modify
10;; it under the terms of the GNU General Public License as published by
11;; the Free Software Foundation, either version 3 of the License, or
12;; (at your option) any later version.
13
14;; GNU Emacs is distributed in the hope that it will be useful,
15;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;; GNU General Public License for more details.
18
19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
21
22;;; Commentary:
23
24;;; Code:
25
26(require 'ert)
27(require 'delim-col)
28
29(ert-deftest delim-col-tests-delimit-columns ()
30 (with-temp-buffer
31 (insert "a b c\n")
32 (delimit-columns-region (point-min) (point-max))
33 (should (equal (buffer-string) "a, b, c\n")))
34 (with-temp-buffer
35 (insert "a b c d\n"
36 "aaaa bb ccc ddddd\n"
37 "aaa bbb cccc dddd\n"
38 "aa bb ccccccc ddd\n")
39 (delimit-columns-region (point-min) (point-max))
40 (should (equal (buffer-string)
41 (concat "a, b, c, d \n"
42 "aaaa, bb, ccc, ddddd\n"
43 "aaa, bbb, cccc, dddd \n"
44 "aa, bb, ccccccc, ddd \n")))))
45
46(ert-deftest delim-col-tests-delimit-rectangle ()
47 (with-temp-buffer
48 (insert "a b c d\n"
49 "aaaa bb ccc ddddd\n"
50 "aaa bbb cccc dddd\n"
51 "aa bb ccccccc ddd\n")
52 (delimit-columns-rectangle 3 58) ; from first b to last c
53 (should (equal (buffer-string)
54 (concat "a b, c d\n"
55 "aaaa bb, ccc ddddd\n"
56 "aaa bbb, cccc dddd\n"
57 "aa bb, ccccccc ddd\n")))))
58
59(ert-deftest delim-col-tests-delimit-columns-str-separator ()
60 (let ((delimit-columns-str-separator ":"))
61 (with-temp-buffer
62 (insert "a b\n")
63 (delimit-columns-region (point-min) (point-max))
64 (should (equal (buffer-string) "a:b\n")))
65 (with-temp-buffer
66 (insert "a b c d\n"
67 "aa bb cc dd\n")
68 (delimit-columns-rectangle 3 16) ; from first b to last c
69 (should (equal (buffer-string)
70 (concat "a b: c d\n"
71 "aa bb:cc dd\n"))))))
72
73(ert-deftest delim-col-tests-delimit-columns-str-before-after ()
74 (let ((delimit-columns-str-before "[ ")
75 (delimit-columns-str-after " ]"))
76 (with-temp-buffer
77 (insert "a b c\n")
78 (delimit-columns-region (point-min) (point-max))
79 (should (equal (buffer-string) "[ a, b, c ]\n")))
80 (with-temp-buffer
81 (insert "a b c d\n"
82 "aaaa bb ccc ddddd\n"
83 "aaa bbb cccc dddd\n"
84 "aa bb ccccccc ddd\n")
85 (delimit-columns-region (point-min) (point-max))
86 (should (equal (buffer-string)
87 (concat "[ a, b, c, d ]\n"
88 "[ aaaa, bb, ccc, ddddd ]\n"
89 "[ aaa, bbb, cccc, dddd ]\n"
90 "[ aa, bb, ccccccc, ddd ]\n"))))
91 (with-temp-buffer
92 (insert "a b c d\n"
93 "aaaa bb ccc ddddd\n"
94 "aaa bbb cccc dddd\n"
95 "aa bb ccccccc ddd\n")
96 (delimit-columns-rectangle 3 58) ; from first b to last c
97 (should (equal (buffer-string)
98 (concat "a [ b, c ] d\n"
99 "aaaa [ bb, ccc ] ddddd\n"
100 "aaa [ bbb, cccc ] dddd\n"
101 "aa [ bb, ccccccc ] ddd\n"))))))
102
103(ert-deftest delim-col-tests-delimit-colummns-before-after ()
104 (let ((delimit-columns-before "<")
105 (delimit-columns-after ">"))
106 (with-temp-buffer
107 (insert "a b\n")
108 (delimit-columns-region (point-min) (point-max))
109 (should (equal (buffer-string) "<a>, <b>\n")))
110 (with-temp-buffer
111 (insert "a b c d\n"
112 "aa bb cc dd\n")
113 (delimit-columns-rectangle 3 17)
114 (should (equal (buffer-string)
115 (concat "a <b>, <c> d\n"
116 "aa <bb>, <cc> dd\n"))))))
117
118(ert-deftest delim-col-tests-delimit-columns-separator ()
119 (let ((delimit-columns-separator ","))
120 (with-temp-buffer
121 (insert "a,b,c\n")
122 (delimit-columns-region (point-min) (point-max))
123 (should (equal (buffer-string) "a, b, c\n")))))
124
125(ert-deftest delim-col-tests-delimit-columns-format/nil ()
126 (let ((delimit-columns-format nil))
127 (with-temp-buffer
128 (insert "a b\n"
129 "aa bb\n")
130 (delimit-columns-region (point-min) (point-max))
131 (should (equal (buffer-string)
132 (concat "a, b\n"
133 "aa, bb\n"))))
134 (with-temp-buffer
135 (insert "a b c d\n"
136 "aa bb cc dd\n")
137 (delimit-columns-rectangle 3 17) ; from first b to last c
138 (should (equal (buffer-string)
139 (concat "a b, c d\n"
140 "aa bb, cc dd\n"))))))
141
142(ert-deftest delim-col-tests-delimit-columns-format/separator ()
143 (let ((delimit-columns-format 'separator)
144 (delimit-columns-before "<")
145 (delimit-columns-after ">"))
146 (with-temp-buffer
147 (insert "a b\n"
148 "aa bb\n")
149 (delimit-columns-region (point-min) (point-max))
150 (should (equal (buffer-string)
151 (concat "<a> , <b> \n"
152 "<aa>, <bb>\n"))))
153 (with-temp-buffer
154 (insert "a b c d\n"
155 "aa bb cc dd\n")
156 (delimit-columns-rectangle 3 17) ; from first b to last c
157 (should (equal (buffer-string)
158 (concat "a <b> , <c> d\n"
159 "aa <bb>, <cc> dd\n"))))))
160
161(ert-deftest delim-col-tests-delimit-columns-format/padding ()
162 (let ((delimit-columns-format 'padding)
163 (delimit-columns-before "<")
164 (delimit-columns-after ">"))
165 (with-temp-buffer
166 (insert "a b\n"
167 "aa bb\n")
168 (delimit-columns-region (point-min) (point-max))
169 (should (equal (buffer-string)
170 (concat "<a >, <b >\n"
171 "<aa>, <bb>\n"))))
172 (with-temp-buffer
173 (insert "a b c d\n"
174 "aa bb cc dd\n")
175 (delimit-columns-rectangle 3 17) ; from first b to last c
176 (should (equal (buffer-string)
177 (concat "a <b >, <c > d\n"
178 "aa <bb>, <cc> dd\n"))))))
179
180(provide 'delim-col-tests)
181;;; delim-col-tests.el ends here
diff --git a/test/lisp/emacs-lisp/map-tests.el b/test/lisp/emacs-lisp/map-tests.el
index a54af8059b3..5e044d4be81 100644
--- a/test/lisp/emacs-lisp/map-tests.el
+++ b/test/lisp/emacs-lisp/map-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2015-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 4
5;; Author: Nicolas Petton <nicolas@petton.fr> 5;; Author: Nicolas Petton <nicolas@petton.fr>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 4a5919edf02..6f392d616d1 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -107,7 +107,13 @@
107 "ab")) 107 "ab"))
108 (should (equal (and (string-match (rx (or "a" "ab" "abc")) s) 108 (should (equal (and (string-match (rx (or "a" "ab" "abc")) s)
109 (match-string 0 s)) 109 (match-string 0 s))
110 "a")))) 110 "a")))
111 ;; Test zero-argument `or'.
112 (should (equal (rx (or)) regexp-unmatchable)))
113
114(ert-deftest rx-seq ()
115 ;; Test zero-argument `seq'.
116 (should (equal (rx (seq)) "")))
111 117
112(provide 'rx-tests) 118(provide 'rx-tests)
113;; rx-tests.el ends here. 119;; rx-tests.el ends here.
diff --git a/test/lisp/emacs-lisp/seq-tests.el b/test/lisp/emacs-lisp/seq-tests.el
index ef05e2b389d..8f66ba4f92f 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2014-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2014-2019 Free Software Foundation, Inc.
4 4
5;; Author: Nicolas Petton <nicolas@petton.fr> 5;; Author: Nicolas Petton <nicolas@petton.fr>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/emacs-lisp/thunk-tests.el b/test/lisp/emacs-lisp/thunk-tests.el
index caa2c415460..69bfc196383 100644
--- a/test/lisp/emacs-lisp/thunk-tests.el
+++ b/test/lisp/emacs-lisp/thunk-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2015-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
4 4
5;; Author: Nicolas Petton <nicolas@petton.fr> 5;; Author: Nicolas Petton <nicolas@petton.fr>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/help-fns-tests.el b/test/lisp/help-fns-tests.el
index e31ac6a4d48..2e9483074e0 100644
--- a/test/lisp/help-fns-tests.el
+++ b/test/lisp/help-fns-tests.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2014-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2014-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/test/lisp/md4-tests.el b/test/lisp/md4-tests.el
index 9712411419a..56b09c14de5 100644
--- a/test/lisp/md4-tests.el
+++ b/test/lisp/md4-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
4 4
5;; Author: Mark Oteiza <mvoteiza@udel.edu> 5;; Author: Mark Oteiza <mvoteiza@udel.edu>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/org/org-tests.el b/test/lisp/org/org-tests.el
index 4b82aa8382f..33f9e459464 100644
--- a/test/lisp/org/org-tests.el
+++ b/test/lisp/org/org-tests.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2018-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2018-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/test/lisp/soundex-tests.el b/test/lisp/soundex-tests.el
index d8d79b85cea..4de45f9d53a 100644
--- a/test/lisp/soundex-tests.el
+++ b/test/lisp/soundex-tests.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/test/lisp/tempo-tests.el b/test/lisp/tempo-tests.el
new file mode 100644
index 00000000000..6e610ffa6ea
--- /dev/null
+++ b/test/lisp/tempo-tests.el
@@ -0,0 +1,228 @@
1;;; tempo-tests.el --- Test suite for tempo.el -*- lexical-binding: t; -*-
2
3;; Copyright (C) 2019 Free Software Foundation, Inc.
4
5;; Author: Federico Tedin <federicotedin@gmail.com>
6;; Keywords: abbrev
7
8;; This file is part of GNU Emacs.
9
10;; GNU Emacs is free software: you can redistribute it and/or modify
11;; it under the terms of the GNU General Public License as published by
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
14
15;; GNU Emacs is distributed in the hope that it will be useful,
16;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;; GNU General Public License for more details.
19
20;; You should have received a copy of the GNU General Public License
21;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
22
23;;; Code:
24
25(require 'tempo)
26(eval-when-compile (require 'cl-lib))
27
28(ert-deftest tempo-string-element-test ()
29 "Test a template containing a string element."
30 (with-temp-buffer
31 (tempo-define-template "test" '("GNU Emacs Tempo test"))
32 (tempo-insert-template 'tempo-template-test nil)
33 (should (equal (buffer-string) "GNU Emacs Tempo test"))))
34
35(ert-deftest tempo-p-bare-element-test ()
36 "Test a template containing a bare `p' element."
37 (with-temp-buffer
38 (tempo-define-template "test" '("abcde" p))
39 (tempo-insert-template 'tempo-template-test nil)
40 (tempo-forward-mark)
41 (should (equal (point) 6))))
42
43(ert-deftest tempo-r-bare-element-test ()
44 "Test a template containing a bare `r' element."
45 (with-temp-buffer
46 (tempo-define-template "test" '("abcde" r "ghijk"))
47 (insert "F")
48 (set-mark (point))
49 (goto-char (point-min))
50 (tempo-insert-template 'tempo-template-test t)
51 (should (equal (buffer-string) "abcdeFghijk"))))
52
53(ert-deftest tempo-p-element-test ()
54 "Testing template containing a `p' (prompt) element."
55 (with-temp-buffer
56 (tempo-define-template "test" '("hello " (p ">")))
57 (let ((tempo-interactive t))
58 (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world")))
59 (tempo-insert-template 'tempo-template-test nil))
60 (should (equal (buffer-string) "hello world")))))
61
62(ert-deftest tempo-P-element-test ()
63 "Testing template containing a `P' (prompt) element."
64 (with-temp-buffer
65 (tempo-define-template "test" '("hello " (P ">")))
66 ;; By default, `tempo-interactive' is nil, `P' should ignore this.
67 (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world")))
68 (tempo-insert-template 'tempo-template-test nil))
69 (should (equal (buffer-string) "hello world"))))
70
71(ert-deftest tempo-r-element-test ()
72 "Testing template containing an `r' (with prompt) element."
73 (with-temp-buffer
74 (tempo-define-template "test" '("abcde" (r ">") "ghijk"))
75 (let ((tempo-interactive t))
76 (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "F")))
77 (tempo-insert-template 'tempo-template-test nil))
78 (should (equal (buffer-string) "abcdeFghijk")))))
79
80(ert-deftest tempo-s-element-test ()
81 "Testing template containing an `s' element."
82 (with-temp-buffer
83 (tempo-define-template "test" '("hello " (p ">" P1) " " (s P1)))
84 (let ((tempo-interactive t))
85 (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world!")))
86 (tempo-insert-template 'tempo-template-test nil))
87 (should (equal (buffer-string) "hello world! world!")))))
88
89(ert-deftest tempo-&-element-test ()
90 "Testing template containing an `&' element."
91 (tempo-define-template "test" '(& "test"))
92 (with-temp-buffer
93 (insert " ")
94 (tempo-insert-template 'tempo-template-test nil)
95 (should (equal (buffer-string) " test")))
96 (with-temp-buffer
97 (insert "hello")
98 (tempo-insert-template 'tempo-template-test nil)
99 (should (equal (buffer-string) "hello\ntest"))))
100
101(ert-deftest tempo-%-element-test ()
102 "Testing template containing an `%' element."
103 (tempo-define-template "test" '("test" %))
104 (with-temp-buffer
105 (tempo-insert-template 'tempo-template-test nil)
106 (should (equal (buffer-string) "test")))
107 (with-temp-buffer
108 (insert "hello")
109 (goto-char (point-min))
110 (tempo-insert-template 'tempo-template-test nil)
111 (should (equal (buffer-string) "test\nhello"))))
112
113(ert-deftest tempo-n-element-test ()
114 "Testing template containing an `n' element."
115 (tempo-define-template "test" '("test" n "test"))
116 (with-temp-buffer
117 (tempo-insert-template 'tempo-template-test nil)
118 (should (equal (buffer-string) "test\ntest"))))
119
120(ert-deftest tempo-n>-element-test ()
121 "Testing template containing an `n>' element."
122 (tempo-define-template "test" '("(progn" n> "(list 1 2 3))"))
123 (with-temp-buffer
124 (emacs-lisp-mode)
125 (tempo-insert-template 'tempo-template-test nil)
126 ;; Tempo should have inserted two spaces before (list 1 2 3)
127 (should (equal (buffer-string) "(progn\n (list 1 2 3))"))))
128
129(ert-deftest tempo->-element-test ()
130 "Testing template containing a `>' element."
131 (with-temp-buffer
132 (emacs-lisp-mode)
133 (insert "(progn\n)")
134 (backward-char)
135 (tempo-define-template "test" '("(list 1 2 3)" >))
136 (tempo-insert-template 'tempo-template-test nil)
137 ;; Tempo should have inserted two spaces before (list 1 2 3)
138 (should (equal (buffer-string) "(progn\n (list 1 2 3))"))))
139
140(ert-deftest tempo-r>-bare-element-test ()
141 "Testing template containing a bare `r>' element."
142 (with-temp-buffer
143 (tempo-define-template "test" '("(progn" n r> ")"))
144 (emacs-lisp-mode)
145 (insert "(list 1 2 3)")
146 (set-mark (point))
147 (goto-char (point-min))
148 (tempo-insert-template 'tempo-template-test t)
149 ;; Tempo should have inserted two spaces before (list 1 2 3)
150 (should (equal (buffer-string) "(progn\n (list 1 2 3))"))))
151
152(ert-deftest tempo-r>-element-test ()
153 "Testing template containing an `r>' (with prompt) element."
154 (tempo-define-template "test" '("(progn" n (r> ":") ")"))
155 (with-temp-buffer
156 ;; Test on-region use
157 (emacs-lisp-mode)
158 (insert "(list 1 2 3)")
159 (set-mark (point))
160 (goto-char (point-min))
161 (tempo-insert-template 'tempo-template-test t)
162 (should (equal (buffer-string) "(progn\n (list 1 2 3))")))
163 (with-temp-buffer
164 ;; Test interactive use
165 (emacs-lisp-mode)
166 (let ((tempo-interactive t))
167 (cl-letf (((symbol-function 'read-string) (lambda (&rest _) " (list 1 2 3)")))
168 (tempo-insert-template 'tempo-template-test nil))
169 (should (equal (buffer-string) "(progn\n (list 1 2 3))")))))
170
171(ert-deftest tempo-o-element-test ()
172 "Testing template containing an `o' element."
173 (with-temp-buffer
174 (tempo-define-template "test" '("test" o))
175 (insert "hello")
176 (goto-char (point-min))
177 (tempo-insert-template 'tempo-template-test nil)
178 (should (equal (buffer-string) "test\nhello"))
179 (should (equal (point) 5))))
180
181(ert-deftest tempo-nil-element-test ()
182 "Testing template with nil elements."
183 (with-temp-buffer
184 (tempo-define-template "test" '("Hello," nil " World!"))
185 (tempo-insert-template 'tempo-template-test nil)
186 (should (equal (buffer-string) "Hello, World!"))))
187
188(ert-deftest tempo-eval-element-test ()
189 "Testing template with Emacs Lisp expressions."
190 (with-temp-buffer
191 (tempo-define-template "test" '((int-to-string (+ 1 1)) "=" (concat "1" "+1")))
192 (tempo-insert-template 'tempo-template-test nil)
193 (should (equal (buffer-string) "2=1+1"))))
194
195(ert-deftest tempo-l-element-test ()
196 "Testing template containing an `l' element."
197 (with-temp-buffer
198 (tempo-define-template "test" '("list: " (l "1, " "2, " (int-to-string (+ 1 2)))))
199 (tempo-insert-template 'tempo-template-test nil)
200 (should (equal (buffer-string) "list: 1, 2, 3"))))
201
202(ert-deftest tempo-tempo-user-elements-test ()
203 "Testing a template with elements for `tempo-user-elements'."
204 (with-temp-buffer
205 (make-local-variable 'tempo-user-elements)
206 (add-to-list 'tempo-user-elements (lambda (x) (int-to-string (* x x))))
207 (tempo-define-template "test" '(1 " " 2 " " 3 " " 4))
208 (tempo-insert-template 'tempo-template-test nil)
209 (should (equal (buffer-string) "1 4 9 16"))))
210
211(ert-deftest tempo-expand-tag-test ()
212 "Testing expansion of a template with a tag."
213 (with-temp-buffer
214 (tempo-define-template "test" '("Hello, World!") "hello")
215 (insert "hello")
216 (tempo-complete-tag)
217 (should (equal (buffer-string) "Hello, World!"))))
218
219(ert-deftest tempo-expand-partial-tag-test ()
220 "Testing expansion of a template with a tag, with a partial match."
221 (with-temp-buffer
222 (tempo-define-template "test" '("Hello, World!") "hello")
223 (insert "hel")
224 (tempo-complete-tag)
225 (should (equal (buffer-string) "Hello, World!"))))
226
227(provide 'tempo-tests)
228;;; tempo-tests.el ends here
diff --git a/test/lisp/textmodes/sgml-mode-tests.el b/test/lisp/textmodes/sgml-mode-tests.el
index a900e8dcf22..1b8965e3440 100644
--- a/test/lisp/textmodes/sgml-mode-tests.el
+++ b/test/lisp/textmodes/sgml-mode-tests.el
@@ -165,6 +165,10 @@ The point is set to the beginning of the buffer."
165 (sgml-mode) 165 (sgml-mode)
166 (insert "a\"b <tag>c'd</tag>") 166 (insert "a\"b <tag>c'd</tag>")
167 (should (= 1 (car (syntax-ppss (1- (point-max)))))) 167 (should (= 1 (car (syntax-ppss (1- (point-max))))))
168 (should (= 0 (car (syntax-ppss (point-max)))))
169 (erase-buffer)
170 (insert "<tag>c>d</tag>")
171 (should (= 1 (car (syntax-ppss (1- (point-max))))))
168 (should (= 0 (car (syntax-ppss (point-max))))))) 172 (should (= 0 (car (syntax-ppss (point-max)))))))
169 173
170(provide 'sgml-mode-tests) 174(provide 'sgml-mode-tests)
diff --git a/test/lisp/vc/diff-mode-tests.el b/test/lisp/vc/diff-mode-tests.el
index 676d461076b..d809b64634f 100644
--- a/test/lisp/vc/diff-mode-tests.el
+++ b/test/lisp/vc/diff-mode-tests.el
@@ -1,7 +1,6 @@
1;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 1;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
2 2
3;; Author: Dima Kogan <dima@secretsauce.net> 3;; Author: Dima Kogan <dima@secretsauce.net>
4;; Maintainer: emacs-devel@gnu.org
5 4
6;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
7 6
diff --git a/test/lisp/vc/smerge-mode-tests.el b/test/lisp/vc/smerge-mode-tests.el
index 032afa9dc24..67f64689220 100644
--- a/test/lisp/vc/smerge-mode-tests.el
+++ b/test/lisp/vc/smerge-mode-tests.el
@@ -1,7 +1,5 @@
1;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 1;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
2 2
3;; Maintainer: emacs-devel@gnu.org
4
5;; This file is part of GNU Emacs. 3;; This file is part of GNU Emacs.
6 4
7;; GNU Emacs is free software: you can redistribute it and/or modify 5;; GNU Emacs is free software: you can redistribute it and/or modify
diff --git a/test/lisp/vc/vc-bzr-tests.el b/test/lisp/vc/vc-bzr-tests.el
index 8fa16cdccb1..04c869ed935 100644
--- a/test/lisp/vc/vc-bzr-tests.el
+++ b/test/lisp/vc/vc-bzr-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2011-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2011-2019 Free Software Foundation, Inc.
4 4
5;; Author: Glenn Morris <rgm@gnu.org> 5;; Author: Glenn Morris <rgm@gnu.org>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/vc/vc-hg-tests.el b/test/lisp/vc/vc-hg-tests.el
index 1bdc3204c03..7fc84610a01 100644
--- a/test/lisp/vc/vc-hg-tests.el
+++ b/test/lisp/vc/vc-hg-tests.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2016-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
4 4
5;; Author: Dmitry Gutov <dgutov@yandex.ru> 5;; Author: Dmitry Gutov <dgutov@yandex.ru>
6;; Maintainer: emacs-devel@gnu.org
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
9 8
diff --git a/test/lisp/xdg-tests.el b/test/lisp/xdg-tests.el
index 9c815065b2a..b8bd606ec11 100644
--- a/test/lisp/xdg-tests.el
+++ b/test/lisp/xdg-tests.el
@@ -2,7 +2,6 @@
2 2
3;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6;; Author: Mark Oteiza <mvoteiza@udel.edu> 5;; Author: Mark Oteiza <mvoteiza@udel.edu>
7 6
8;; This file is part of GNU Emacs. 7;; This file is part of GNU Emacs.
diff --git a/test/manual/biditest.el b/test/manual/biditest.el
index d813642f780..f257910877b 100644
--- a/test/manual/biditest.el
+++ b/test/manual/biditest.el
@@ -3,7 +3,6 @@
3;; Copyright (C) 2013-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
4 4
5;; Author: Eli Zaretskii 5;; Author: Eli Zaretskii
6;; Maintainer: emacs-devel@gnu.org
7;; Package: emacs 6;; Package: emacs
8 7
9;; This program is free software: you can redistribute it and/or modify 8;; This program is free software: you can redistribute it and/or modify
diff --git a/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el b/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
index 250aeb1cf26..30ad34099b7 100644
--- a/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
+++ b/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
@@ -4,7 +4,6 @@
4;; Software Foundation, Inc. 4;; Software Foundation, Inc.
5 5
6;; Author: Roland McGrath <roland@gnu.org> 6;; Author: Roland McGrath <roland@gnu.org>
7;; Maintainer: emacs-devel@gnu.org
8;; Keywords: tools 7;; Keywords: tools
9 8
10;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
diff --git a/test/src/lcms-tests.el b/test/src/lcms-tests.el
index f1d1110283d..d92ebcbeab5 100644
--- a/test/src/lcms-tests.el
+++ b/test/src/lcms-tests.el
@@ -2,8 +2,6 @@
2 2
3;; Copyright (C) 2017-2019 Free Software Foundation, Inc. 3;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
4 4
5;; Maintainer: emacs-devel@gnu.org
6
7;; This file is part of GNU Emacs. 5;; This file is part of GNU Emacs.
8 6
9;; GNU Emacs is free software: you can redistribute it and/or modify 7;; GNU Emacs is free software: you can redistribute it and/or modify