]> code.delx.au - gnu-emacs/commitdiff
Merge branch 'master' into cairo
authorJan D <jan.h.d@swipnet.se>
Sat, 23 May 2015 10:28:54 +0000 (12:28 +0200)
committerJan D <jan.h.d@swipnet.se>
Sat, 23 May 2015 10:28:54 +0000 (12:28 +0200)
214 files changed:
.gitignore
CONTRIBUTE
ChangeLog.2
Makefile.in
admin/charsets/Makefile [deleted file]
admin/charsets/Makefile.in [new file with mode: 0644]
admin/charsets/mapconv
admin/charsets/mapfiles/PTCP154
admin/notes/unicode
build-aux/gitlog-to-changelog
build-aux/gitlog-to-emacslog
configure.ac
doc/lispref/display.texi
doc/lispref/frames.texi
doc/lispref/nonascii.texi
doc/lispref/positions.texi
doc/lispref/windows.texi
doc/misc/erc.texi
etc/NEWS
lib-src/emacsclient.c
lib-src/etags.c
lisp/ChangeLog.16
lisp/allout-widgets.el
lisp/allout.el
lisp/autorevert.el
lisp/calc/calc-aent.el
lisp/calc/calc-yank.el
lisp/calc/calc.el
lisp/calculator.el
lisp/calendar/calendar.el
lisp/calendar/diary-lib.el
lisp/calendar/solar.el
lisp/calendar/todo-mode.el
lisp/cedet/ede/auto.el
lisp/cedet/ede/files.el
lisp/cedet/semantic/mru-bookmark.el
lisp/cedet/semantic/symref.el
lisp/cedet/semantic/tag.el
lisp/cedet/srecode/cpp.el
lisp/cedet/srecode/texi.el
lisp/cus-edit.el
lisp/dired-aux.el
lisp/dired.el
lisp/dirtrack.el
lisp/emacs-lisp/advice.el
lisp/emacs-lisp/autoload.el
lisp/emacs-lisp/byte-opt.el
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/check-declare.el
lisp/emacs-lisp/checkdoc.el
lisp/emacs-lisp/cl-generic.el
lisp/emacs-lisp/cl-indent.el
lisp/emacs-lisp/cl-macs.el
lisp/emacs-lisp/debug.el
lisp/emacs-lisp/edebug.el
lisp/emacs-lisp/elint.el
lisp/emacs-lisp/generator.el
lisp/emacs-lisp/lisp-mode.el
lisp/emacs-lisp/lisp.el
lisp/emacs-lisp/package.el
lisp/emacs-lisp/subr-x.el
lisp/emacs-lisp/syntax.el
lisp/emulation/viper-util.el
lisp/erc/erc-backend.el
lisp/erc/erc-ezbounce.el
lisp/erc/erc-pcomplete.el
lisp/erc/erc.el
lisp/eshell/em-term.el
lisp/eshell/esh-arg.el
lisp/eshell/esh-io.el
lisp/eshell/esh-mode.el
lisp/eshell/esh-util.el
lisp/face-remap.el
lisp/facemenu.el
lisp/faces.el
lisp/files.el
lisp/forms.el
lisp/gnus/canlock.el
lisp/gnus/deuglify.el
lisp/gnus/gnus-art.el
lisp/gnus/gnus-cus.el
lisp/gnus/gnus-group.el
lisp/gnus/gnus-sum.el
lisp/gnus/message.el
lisp/gnus/nndoc.el
lisp/gnus/nnmaildir.el
lisp/gnus/rfc2047.el
lisp/hippie-exp.el
lisp/ibuffer.el
lisp/icomplete.el
lisp/ido.el
lisp/ielm.el
lisp/info.el
lisp/language/tv-util.el
lisp/ldefs-boot.el
lisp/leim/quail/cyrillic.el
lisp/leim/quail/ethiopic.el
lisp/leim/quail/hebrew.el
lisp/leim/quail/thai.el
lisp/linum.el
lisp/ls-lisp.el
lisp/mail/mailabbrev.el
lisp/mail/mailalias.el
lisp/mail/sendmail.el
lisp/mail/supercite.el
lisp/mail/uudecode.el
lisp/minibuffer.el
lisp/net/ange-ftp.el
lisp/net/dbus.el
lisp/net/network-stream.el
lisp/net/rcirc.el
lisp/net/rlogin.el
lisp/net/secrets.el
lisp/net/soap-client.el
lisp/net/telnet.el
lisp/net/tramp-adb.el
lisp/net/tramp-cmds.el
lisp/net/tramp-compat.el
lisp/net/tramp-gvfs.el
lisp/net/tramp-sh.el
lisp/net/tramp-smb.el
lisp/net/tramp.el
lisp/obsolete/xesam.el
lisp/org/ob-ruby.el
lisp/org/org-agenda.el
lisp/org/org-bbdb.el
lisp/org/org-capture.el
lisp/org/org-compat.el
lisp/org/org-gnus.el
lisp/org/org-macs.el
lisp/org/org-protocol.el
lisp/org/org.el
lisp/org/ox-html.el
lisp/org/ox-odt.el
lisp/org/ox-texinfo.el
lisp/play/handwrite.el
lisp/progmodes/ada-xref.el
lisp/progmodes/cc-defs.el
lisp/progmodes/cc-engine.el
lisp/progmodes/cc-fonts.el
lisp/progmodes/cc-guess.el
lisp/progmodes/compile.el
lisp/progmodes/cperl-mode.el
lisp/progmodes/gdb-mi.el
lisp/progmodes/idlw-shell.el
lisp/progmodes/idlwave.el
lisp/progmodes/python.el
lisp/progmodes/ruby-mode.el
lisp/progmodes/verilog-mode.el
lisp/ps-print.el
lisp/recentf.el
lisp/ses.el
lisp/simple.el
lisp/skeleton.el
lisp/subr.el
lisp/term/tvi970.el
lisp/term/w32console.el
lisp/textmodes/artist.el
lisp/textmodes/bibtex.el
lisp/textmodes/ispell.el
lisp/textmodes/makeinfo.el
lisp/textmodes/rst.el
lisp/textmodes/tildify.el
lisp/type-break.el
lisp/vc/compare-w.el
lisp/vc/ediff-util.el
lisp/vc/log-edit.el
lisp/vc/log-view.el
lisp/vc/vc-annotate.el
lisp/vc/vc-bzr.el
lisp/vc/vc-git.el
lisp/vc/vc.el
lisp/wid-edit.el
lisp/widget.el
lisp/windmove.el
lisp/window.el
lisp/woman.el
lisp/xt-mouse.el
src/buffer.c
src/cmds.c
src/font.c
src/frame.c
src/gnutls.c
src/keyboard.c
src/keymap.c
src/nsfns.m
src/w32fns.c
src/w32heap.c
src/w32term.c
src/xdisp.c
src/xfns.c
src/xterm.c
test/automated/cl-generic-tests.el
test/automated/compile-tests.el
test/automated/data/decompress/foo.gz [moved from test/automated/data/decompress/foo-gzipped with 100% similarity]
test/automated/data/package/newer-versions/simple-single-1.4.el
test/automated/file-notify-tests.el
test/automated/package-test.el
test/automated/sgml-mode-tests.el [new file with mode: 0644]
test/automated/subr-tests.el [new file with mode: 0644]
test/automated/zlib-tests.el
test/etags/CTAGS.good
test/etags/ETAGS.good_1
test/etags/ETAGS.good_2
test/etags/ETAGS.good_3
test/etags/ETAGS.good_4
test/etags/ETAGS.good_5
test/etags/Makefile
test/etags/c-src/dostorture.c [deleted file]
test/etags/cp-src/c.C
test/etags/html-src/algrthms.html
test/etags/html-src/index.shtml
test/etags/html-src/software.html
test/etags/html-src/softwarelibero.html

index 618249c8defde443cea9631a2ed91c2f9c1a1acd..df9dc8b110ca187d418c1684071cfaa7c63c6a3e 100644 (file)
@@ -40,7 +40,6 @@ Info.plist
 InfoPlist.strings
 Makefile
 makefile
-!admin/charsets/Makefile
 !etc/refcards/Makefile
 !test/automated/data/flymake/Makefile
 !test/indent/Makefile
index bf23155426164cc607a99287a95a35a91369d2d1..7e697ddd89a51f9452a3279d75212092657956cb 100644 (file)
@@ -96,6 +96,9 @@ messages:
 - Commit messages should not contain the "Signed-off-by:" lines that
   are used in some other projects.
 
+- Any lines of the commit message that start with "; " are omitted
+  from the generated ChangeLog.
+
 - Explaining the rationale for a design choice is best done in comments
   in the source code.  However, sometimes it is useful to describe just
   the rationale for a change; that can be done in the commit message
index d1c9477f1461a9e9ac9a643e96ca30f592a27779..b75a665b11391f4181c03922a032230e5f352c33 100644 (file)
@@ -1,3 +1,604 @@
+2015-05-17  Johan Bockgård  <bojohan@gnu.org>
+
+       Fix integer-valued `mouse-highlight' (Bug#20590)
+       * src/xterm.c (handle_one_xevent) [USE_GTK]: Fix ifdef scope.
+
+2015-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       MS-Windows followup for ASCIIfication of curved quotes
+       * lisp/term/w32console.el (terminal-init-w32console): Repeat the
+       test for curved quotes being displayable, after switching the
+       terminal encoding.  (Bug#20545)
+
+2015-05-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fixes
+
+2015-05-17  Jan D  <jan.h.d@swipnet.se>
+
+       Add comment that x_shift_glyphs_for_insert is never called.
+       * xterm.c (x_shift_glyphs_for_insert, x_redisplay_interface): Add
+       comment that this function is never called.
+
+2015-05-16  Glenn Morris  <rgm@gnu.org>
+
+       * src/lisp.mk: Remove from repository and generate at build-time.
+       * src/Makefile.in (lisp.mk): New rule to generate from loadup.el.
+       (shortlisp_filter): New variable.
+       (emacs$(EXEEXT), $(etc)/DOC): Depend on lisp.mk.
+       (distclean): Remove lisp.mk.
+       * Makefile.in ($(MAKEFILE_NAME)): No longer depend on src/lisp.mk.
+       * lisp/loadup.el: Tweak layout to make it easier to parse.
+       * make-dist: Do not distribute src/lisp.mk.
+
+2015-05-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Display shorter dates in Git annotate output
+       * lisp/vc/vc-git.el (vc-git-annotate-command): Use the short date
+       format (when not overridden with vc-git-annotate-switches).
+       (vc-git-annotate-time): Support the short format, as well as ISO
+       8601 that has been used until now (bug#5428).
+
+2015-05-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       ASCIIfy curved quotes on displays lacking them
+       * lisp/international/mule-cmds.el (set-locale-environment):
+       If curved quotes don't work, display straight ASCII approximations
+       (Bug#20545).
+
+2015-05-16  Glenn Morris  <rgm@gnu.org>
+
+       Small src/Makefile simplification.
+       * src/lisp.mk (shortlisp): Rename from lisp, remove $lispsource prefix.
+       * src/Makefile.in (lisp): Derive from shortlisp.
+       ($(etc)/DOC): Use $shortlisp rather than parsing lisp.mk.
+
+2015-05-16  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/help-mode.el (help-go-forward): Doc fix.
+       (Bug#20577)
+
+       * doc/lispref/debugging.texi (Profiling): Improve indexing.
+       (Bug#20576)
+
+2015-05-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use `unless' to have one fewer `not'
+       * lisp/vc/vc-git.el (vc-git-resolve-when-done): Use `unless' to
+       have one fewer `not'.
+
+       Remove redundant :group declarations from vc-git.el
+       * lisp/vc/vc-git.el (vc-git-diff-switches)
+       (vc-git-annotate-switches, vc-git-resolve-conflicts)
+       (vc-git-program, vc-git-root-log-format): Remove the redundant
+       :group declarations.
+
+2015-05-16  Nicolas Petton  <nicolas@petton.fr>
+
+       Removes the predicate from lisp-complete-symbol (Bug#20456)
+       * lisp/emacs-lisp/lisp.el (lisp-complete-symbol): Do not use predicate
+       and remove it from the docstring.
+
+2015-05-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add new option vc-git-resolve-conflicts
+       * lisp/vc/vc-git.el (vc-git-resolve-conflicts): New variable.
+       (vc-git-find-file-hook): Add to after-save-hook only when the
+       above is non-nil.
+       (vc-git-resolve-when-done): Update to honor the new variable.
+       (Bug#20292)
+
+2015-05-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs
+
+2015-05-16  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/tabulated-list.el: Don't error on nil header-string
+       (tabulated-list-init-header): Document new behavior.
+       (tabulated-list-print-fake-header): No nothing if
+       `tabulated-list--header-string' is nil.
+       (tabulated-list--header-string): Add a docstring.
+       * doc/lispref/modes.texi (Tabulated List Mode): Document it.
+       * etc/NEWS: Document it.
+
+2015-05-15  Leo Liu  <sdl.web@gmail.com>
+
+       Revert "Fix cps--gensym"
+       * lisp/emacs-lisp/generator.el (cps--gensym): Revert commit
+         fbda511ab8069d0115eafca411a43353b85431b1 on 2015-05-14.
+
+2015-05-15  Glenn Morris  <rgm@gnu.org>
+
+       Replace AC_SUBST_FILE in configure with include in Makefiles.
+       * configure.ac (DEPDIR, MKDEPDIR, deps_frag, lwlib_deps_frag)
+       (oldxmenu_deps_frag, lisp_frag): Remove output variables/files.
+       (AUTO_DEPEND): New output variable.
+       * lwlib/Makefile.in (AUTO_DEPEND): New, set by configure.
+       (DEPFLAGS, MKDEPDIR): Set directly via conditional.
+       (lwlib_deps_frag): Replace by conditional include.
+       * lwlib/autodeps.mk: Remove file.
+       * oldXMenu/Makefile.in (AUTO_DEPEND): New, set by configure.
+       (DEPFLAGS, MKDEPDIR): Set directly via conditional.
+       (oldxmenu_deps_frag): Replace by conditional include.
+       * oldXMenu/autodeps.mk: Remove file.
+       * src/Makefile.in (AUTO_DEPEND): New, set by configure.
+       (DEPFLAGS, MKDEPDIR): Set directly via conditional.
+       (lisp_frag): Replace by an include.
+       (deps_frag): Replace by conditional include.
+       * src/autodeps.mk: Remove file.
+
+       Tweak japanese.el's loading of dependencies.
+       * lisp/loadup.el: Explicitly load cp51932 and eucjp-ms.
+       * lisp/language/japanese.el: Use require rather than load.
+       * lisp/international/cp51932.el, lisp/international/eucjp-ms.el:
+       Provide a feature.
+       * admin/charsets/eucjp-ms.awk, admin/charsets/cp51932.awk:
+       Provide a feature in the generated file.
+
+2015-05-15  Jan D  <jan.h.d@swipnet.se>
+
+       Fix NS warnings.
+       * nsmenu.m (ns_popup_dialog)
+       * nsimage.m (initFromXBM:width:height:fg:bg:)
+       * nsfns.m (Fx_create_frame): Remove unused variables.
+       (Fns_read_file_name): Initialize fname, remove ret.
+       * nsterm.m (ns_draw_window_cursor): Handle DEFAULT_CURSOR in switch.
+       (ns_get_color, ns_set_horizontal_scroll_bar, keyDown): Remove unused
+       variable.
+       (init): Add parantesis in if.
+       (ns_create_terminal): Assign set_horizontal_scroll_bar_hook.
+
+2015-05-15  Jan Djärv  <jan.h.d@swipnet.se>
+
+       Fix a enum conversion warning in macfont.m
+       * src/macfont.h (CharacterCollection): Typedef to NSCharacterCollection.
+       (MAC_CHARACTER_COLLECTION_*): Use the NS variants.
+
+2015-05-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Support de-alt dictionary with Aspell.
+       * lisp/textmodes/ispell.el (ispell-aspell-find-dictionary):
+       Support Aspell dictionaries with names like "de-alt".  (Bug#20581)
+
+2015-05-15  Jan Djärv  <jan.h.d@swipnet.se>
+
+       cus-start.el: Add ns-confirm-quit.
+       * cus-start.el: Add ns-confirm-quit.
+
+       Fix warnings on OSX 10.10.
+       * nsfns.m (MODAL_OK_RESPONSE): New define for different OSX versions.
+       (Fns_read_file_name): Check against MODAL_OK_RESPONSE.
+       (compute_tip_xy): Use convertRectToScreen for OSX >= 10.7
+       * nsmenu.m (initWithContentRect:styleMask:backing:defer:)
+       * nsimage.m (allocInitFromFile, setPixmapData): Only call
+       setScalesWhenResized for OSX < 10.6.
+       * nsterm.h (EmacsScroller): Declare scrollerWidth.
+       * nsterm.m (ns_copy_bits): New function that does not use deprecated
+       NSCopyBits.
+       (ns_scroll_run, ns_shift_glyphs_for_insert): Call ns_copy_bits.
+       (runAlertPanel): New function.
+       (applicationShouldTerminate:): Call runAlertPanel.
+       (initFrameFromEmacs, toggleFullScreen:): Only call useOptimizedDrawing
+       for OSX < 10.10.
+       (initFrameFromEmacs:): Only call allocateGState for OSX < 10.10.
+       (windowWillUseStandardFrame:defaultFrame:): Cast arg to abs to int.
+       (draggingEntered:): Returns NSDragOperation.
+       (scrollerWidth): Use scrollerWidthForControlSize for OSX >= 10.7.
+
+2015-05-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Don't ensure-init during startup
+       (package--init-file-ensured): New variable.
+       (package-initialize, package--ensure-init-file): Use it.
+
+2015-05-15  Jan Djärv  <jan.h.d@swipnet.se>
+
+       Honor :fore/background for XBM on NS (Bug#14969).
+       * nsterm.h (EmacsImage): Add xbm_fg, remove initFromSkipXBM,
+       initFromXBM takes bg, fg args, remove flip arg.
+       (ns_image_from_XBM): Add bg, fg args.
+       * image.c (x_create_bitmap_from_data)
+       (Create_Pixmap_From_Bitmap_Data): ns_image_from_XBM takes bg, fg args.
+       * nsimage.m (ns_image_from_XBM): Add fg, bg args, pass to initFromXBM.
+       Remove flip arg.
+       (initFromSkipXBM): Move code to initFromXBM.
+       (initFromXBM): Actually set fg and bg, instead of playing alpha games.
+       Use fg, bg from args (Bug#14969).  Remove if (length) section, was always
+       false.
+       Remove bit flipping (bitPat, swt), generated incorrect images when
+       width/height wasn't a multiple of 8.
+       (setXBMColor:): Modify planes by comparing to saved xbm_fg.
+       * nsterm.m (ns_draw_fringe_bitmap): initFromXBM takes fg, bg args, remove
+       flip arg.
+
+2015-05-15  Artur Malabarba  <bruce.connor.am@gmail.com>
+
+       * lisp/emacs-lisp/package.el: Be more careful with the init file
+       (package--ensure-init-file): Check that user-init-file is set,
+       exists, is readable, and is writable.  (Bug#20584)
+       Also expand the docstring.
+
+2015-05-14  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Sync with upstream verilog-mode revision 6232468
+       * lisp/progmodes/verilog-mode.el (verilog-font-lock-grouping-keywords-face)
+       (verilog-highlight-grouping-keywords): Fix use of face when
+       `verilog-highlight-grouping-keywords' set.  Reported by Jeff
+       Pompa.
+       (verilog-auto-reset): Fix AUTORESET to ignore member resets if
+       parent is reset, bug906. Reported by Ken Schmidt.
+       (verilog-auto-inout-module): Add fourth regexp argument to
+       AUTOINOUTMODULE and AUTOINOUTCOMP for signals to not match,
+       bug856. Reported by John Tillema.
+       (verilog-auto-inst-port): Fix AUTOINST interfaces to not show
+       modport if signal attachment is itself a modport.  Reported by
+       Matthew Lovell.
+       (verilog-auto-reset, verilog-auto-sense-sigs): Fix AUTORESET with
+       always_comb and always_latch, bug844.  Reported by Greg Hilton.
+       (verilog-at-constraint-p, verilog-beg-of-statement-1): Fix hanging
+       with many curly-bracket pairs, bug663.
+       (verilog-set-auto-endcomments): Fix end comments for functions of
+       type void, etc.  Reported by Alex Reed.
+       (verilog-do-indent): Fix electric tab deleting form-feeds.  Note
+       caused by indent-line-to deleting tabls pre 24.5.
+       (verilog-nameable-item-re): Fix nameable items that can have an
+       end-identifier to include endchecker, endgroup, endprogram,
+       endproperty, and endsequence.  Reported by Alex Reed.
+       (verilog-label-be): When auto-commenting a buffer, consider
+       auto-comments on all known keywords (not just a subset thereof).
+       Reported by Alex Reed.
+       (verilog-auto-end-comment-lines-re)
+       (verilog-end-block-ordered-re, verilog-set-auto-endcomments):
+       Automatically comment property/endproperty blocks to match other
+       similar blocks like sequence/endsequence, function/endfunction,
+       etc. Reported by Alex Reed.
+       (verilog-set-auto-endcomments): Detect the function- or task-name
+       when auto-commenting blocks that lack an explicit
+       portlist. Reported by Alex Reed.
+       (verilog-auto, verilog-auto-insert-last): Add AUTOINSERTLAST to
+       allow post-AUTO user fixups, bug826. Reported by Dennis
+       Muhlestein.
+       (verilog-no-indent-begin-re): When `verilog-indent-begin-after-if'
+       is nil, fix indenting initial/final to match always statements,
+       bug825. Reported by Tim Clapp.
+       (verilog-extended-complete-re): Fix indentation of DPI-C imports
+       with c_identifiers, and DPI-C imports, bug557. Reported by ZeDong
+       Mao and Jason Forkey.
+       (verilog-read-decls): Fix parsing typed interfaces.  Fix
+       AUTOINOUTMODPORT missing types.  Reported by Stephan Bourduas.
+       Fix localparam not being ignored in AUTOINSTPARAM,
+       bug889. Reported by Shannon Hill.
+       (verilog-auto-output-every): Add regexp to AUTOOUTPUTEVERY,
+       bug793.  Reported by Pierre-David Pfister.
+       (verilog-auto-arg-format, verilog-auto-arg-ports): Add
+       verilog-auto-arg-format to support newlines in AUTOARG. Reported
+       by Jie Xiao.
+       (verilog-batch-execute-func): Do not batch re-auto files loaded by
+       Local Variables. Fix printing "no changes to be saved" with
+       verilog-batch. Reported by Dan Dever.
+       (verilog-auto-inout-module): Fix AUTOINOUTMODULE not inserting
+       interface-only modules, bug721.  Reported by Dean Hoyt.
+       Author: Alex Reed <acreed4@gmail.com>
+       * lisp/progmodes/verilog-mode.el (verilog-beg-of-statement): Don't
+       treat '<keyword>:<identifier>' as the start of a labeled
+       statement, bug905.  Reported by Enzo Chi.
+       (verilog-directive-re, verilog-compiler-directives)
+       (verilog-keywords): Match full set of IEEE 2012-1800 compiler
+       directives (plus some extras) when determining indentation, bug
+       901.  Reported by Bernd Beuster.
+       (verilog-at-constraint-p): Fix indentation of coverpoint bins if
+       iff expression doesn't start with word-character, bug900.
+       (verilog-optional-signed-range-re, verilog-optional-signed-re):
+       Fix incorrect indentation/alignment of unsigned declarations,
+       bug897.
+       (verilog-looking-back, verilog-in-attribute-p): Fix labling of
+       always constructs, bug895.
+       (verilog-calc-1): Fix verilog-mode constraint indentation,
+       bug324. Reported by Eric Mastromarchi.
+       (verilog-beg-of-statement): Fix indenting for some forms of
+       constraintsm bug433.  Reported by Brad Parker.  Fix indentation of
+       continued assignment incorrect if first line ends with ']',
+       bug437. Reported by Dan Dever.  Fix indention of cover inside an
+       ifdef, bug 862. Reported by Bernd Beuster Fix labeling do-while
+       blocks, bug842.
+       (verilog-preprocessor-re): Fix fork/end UNMATCHED warning,
+       bug859. Reported by Kaushal Modi.
+       (verilog-set-auto-endcomments): Fix endlabel end comments, bug888.
+       (verilog-backward-token): Fix indenting sensitivity lists with
+       named events, bug840.  Reed.
+       (verilog-no-indent-begin-re): Fix `verilog-indent-begin-after-if'
+       nil not honoring 'forever', 'foreach', and 'do' keywords.
+
+2015-05-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Check for invalid GTK+ monitor scales
+       * src/gtkutil.c (xg_get_gdk_scale): Return 1 for invalid scales,
+       INT_MAX for too-large scales.  All callers changed to assume the
+       result is valid (Bug#20432).
+       (xg_frame_set_char_size, xg_update_scrollbar_pos):
+       Calculate scale only if needed.
+       show ASCII approximations instead.
+
+2015-05-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix daemon crashes when linum-mode is turned on early on
+       * src/window.c (Fwindow_end): Don't try calling display engine
+       functions on initial-frame frame.  (Bug#20565)
+
+       Fix selective diff browsing in Ediff
+       * lisp/vc/ediff-util.el (ediff-focus-on-regexp-matches): Go to the
+       beginning of the region before searching for the
+       ediff-regexp-focus-* regexps.  (Bug#20568)
+
+2015-05-14  Jan D  <jan.h.d@swipnet.se>
+
+       Fixes Bug#20142.
+       * gtkutil.c (delete_cb): Don't send delete event here, it does arrive
+       in the main loop, even for Gtk 3 (Bug#20142).
+
+       Don't access display after i/o error (Bug#19147).
+       * xterm.c (x_connection_closed): Add third arg ioerror.
+       If ioerror, set display to 0 (Bug#19147).
+       (x_error_quitter): Call x_connection_closed with third arg false.
+       (x_io_error_quitter): Call x_connection_closed with third arg true.
+
+       Handle GTK_SCALE, fixes Bug#20432.
+       * gtkutil.c (xg_get_gdk_scale): New function.
+       (xg_frame_set_char_size)
+       (x_wm_set_size_hint, xg_get_default_scrollbar_width)
+       (xg_get_default_scrollbar_height)
+       (xg_update_horizontal_scrollbar_pos): Take GTK_SCALE in to account
+       when setting sizes (Bug#20432).
+
+2015-05-13  Leo Liu  <sdl.web@gmail.com>
+
+       Fix cps--gensym
+       * lisp/emacs-lisp/generator.el (cps--gensym): Fix.
+
+2015-05-13  Glenn Morris  <rgm@gnu.org>
+
+       Fix bootstrap (void function cl-member).
+       * lisp/emacs-lisp/cl-lib.el: Load cl-seq if no cl-loaddefs file.
+       * lisp/emacs-lisp/cl-seq.el: Provide a feature.
+
+2015-05-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/loadup.el ("emacs-lisp/cl-generic"): Preload
+       * src/lisp.mk (lisp): Add emacs-lisp/cl-generic.elc.
+       * lisp/emacs-lisp/cl-generic.el (cl-generic-define-method):
+       Avoid defalias for closures which are not immutable.
+       (cl--generic-prefill-dispatchers): New macro.  Use it to prefill the
+       dispatchers table with various entries.
+       * lisp/emacs-lisp/ert.el (emacs-lisp-mode-hook):
+       * lisp/emacs-lisp/seq.el (emacs-lisp-mode-hook): Use add-hook.
+
+2015-05-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve tagging of C bindings in DEFVAR_*
+       * src/Makefile.in (TAGS): Add --regex options to tag the C binding
+       from DEFVAR_*.
+
+2015-05-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/editfns.c (Fformat): Fix use-after-free bug (Bug#20548).
+
+2015-05-12  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/progmodes/tcl.el (tcl-filter):
+       Handle comint-prompt-read-only like gud.el does.  (Bug#20549)
+
+       Add basic VC push support.
+       * lisp/vc/vc.el (vc-push): New autoloaded command.
+       * lisp/vc/vc-hooks.el (vc-prefix-map, vc-menu-map): Add vc-push.
+       * lisp/vc/vc-bzr.el (vc-bzr--pushpull): New, factored from vc-bzr-pull.
+       (vc-bzr-pull): Reimplement using vc-bzr--pushpull.
+       (vc-bzr-push): New.
+       * lisp/vc/vc-git.el (vc-git--pushpull): New, factored from vc-git-pull.
+       (vc-git-pull): Reimplement using vc-git--pushpull.
+       (vc-git-push): New.
+       * lisp/vc/vc-hg.el (vc-hg--pushpull): New, factored from vc-hg-pull.
+       (vc-hg-pull, vc-hg-push): Reimplement using vc-hg--pushpull.
+       * doc/emacs/maintaining.texi (Pulling / Pushing):
+       Rename from "VC Pull".  Mention pushing.
+       (VC With A Merging VCS, VC Change Log): Update xrefs.
+       (Branches): Update menu.
+       * doc/emacs/emacs.texi: Update menu.
+       * etc/NEWS: Mention this.
+
+2015-05-12  Nicolas Petton  <nicolas@petton.fr>
+
+       Improve the seq pcase pattern and the `seq-let' macro
+       * lisp/emacs-lisp/seq.el: The pcase pattern now matches only if the
+       object is a sequence, and binds each element of ARGS to the
+       corresponding element of the sequence.
+
+2015-05-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix tags created from DEFVAR_* declarations in C
+       * src/Makefile.in (TAGS): Improve the --regex argument to etags,
+       to make tags extracted from DEFVAR_* declarations more accurate.
+
+       Add a test suite for etags
+       * test/etags/: New test suite, adapted from
+       http://fly.isti.cnr.it/pub/software/unix/etags-regression-test.tar.bz2,
+       whose original author is Francesco Potortì <pot@gnu.org>.
+
+       Fix tagging of symbols in C enumerations
+       * lib-src/etags.c (consider_token): Don't tag symbols in
+       expressions that assign values to enum constants.  See
+       http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00291.html
+       for details.
+       (C_entries): Reset fvdef to fvnone after processing a preprocessor
+       conditional and after a comma outside of parentheses.
+
+2015-05-12  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/url/url-handlers.el (url-file-name-completion)
+       (url-file-name-all-completions): Silence compiler.
+
+       * lisp/emacs-lisp/chart.el (chart-axis-draw): Replace obsolete alias.
+
+       * lisp/play/dunnet.el (dun-dos-boot-msg): Fix time.  (Bug#20554)
+
+2015-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el: Add dispatch on &context arguments
+       (cl--generic-mandatory-args): Remove.
+       (cl--generic-split-args): New function.
+       (cl-generic-define, cl--generic-lambda): Use it.
+       (cl-generic-define-method): Use it as well, and add support for
+       context args.
+       (cl--generic-get-dispatcher): Handle &context dispatch.
+       (cl--generic-cache-miss): `dispatch-arg' can now be a context expression.
+       (cl--generic-dispatchers): Pre-fill.
+       * test/automated/cl-generic-tests.el (sm-generic-test-12-context): New test.
+
+2015-05-11  Glenn Morris  <rgm@gnu.org>
+
+       * make-dist: Abort if "make ChangeLog" fails.  Add "--no-changelog".
+
+2015-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/term/xterm.el: Fix xterm-paste handling for rxvt
+       * lisp/term/rxvt.el: Require term/xterm.
+       (rxvt-function-map): Use xterm-rxvt-function-map.
+       (rxvt-standard-colors): Move before first use.
+       (terminal-init-rxvt): Use xterm--push-map and xterm-register-default-colors.
+       (rxvt-rgb-convert-to-16bit, rxvt-register-default-colors): Remove.
+       * lisp/term/xterm.el (xterm-rxvt-function-map): New var.
+       Move shared bindings between rxvt and xterm to it.
+       (xterm-function-map): Use it.  Move the xterm-paste binding to
+       xterm-rxvt-function-map (bug#20444).
+       (xterm-standard-colors): Move before first use.
+       (xterm--push-map): New function.
+       (xterm-register-default-colors): Take standard colors as argument.
+       (terminal-init-xterm): Use it.  Adjust call to
+       xterm-register-default-colors.
+
+2015-05-11  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/term/x-win.el: Quieten --without-x compilation.
+       (x-own-selection-internal, x-disown-selection-internal)
+       (x-selection-owner-p, x-selection-exists-p, x-get-selection-internal):
+       Declare.
+
+       * Makefile.in (emacslog): Remove srcdir.
+       (ChangeLog): Update for the above.
+
+2015-05-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Spelling fix
+
+2015-05-10  Fabián Ezequiel Gallina  <fgallina@gnu.org>
+
+       python.el: better limit for looking-back calls
+       * lisp/progmodes/python.el (python-shell-accept-process-output):
+       Use last comint prompt start as limit for looking-back.
+
+2015-05-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       CEDET (srecode-insert-fcn): Fix use of oref on a class
+       * lisp/cedet/srecode/insert.el (srecode-insert-fcn): Fix use of oref on
+       a class.  Reported by Pierre Lorenzon.
+       (srecode-template-inserter-point): Remove declaration.
+
+       CEDET (srecode-create-dictionary): Avoid obsolete object name
+       * lisp/cedet/srecode/dictionary.el (srecode-create-dictionary):
+       Don't use a symbol as an object name.  Reported by Pierre Lorenzon.
+
+2015-05-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       C-x 8 shorthands for curved quotes, Euro, etc.
+       Although C-x 8 lets you insert arbitrary Unicode characters,
+       it's awkward to use this to insert commonly used symbols such as curved
+       quotes, the Euro symbol, etc.  This patch adds simpler sequences for
+       characters commonly found in English text and in basic math.
+       For example, assuming the Alt key works on your keyboard and iso-transl
+       is loaded, one can now type "A-[" instead of "A-RET LEFT SIN TAB RET"
+       to get the character "‘" (U+2018 LEFT SINGLE QUOTATION MARK).
+       (Bug#20499)
+       * doc/emacs/mule.texi (Unibyte Mode):
+       A few other printing characters now work too.
+       * etc/NEWS: Document this.
+       * lisp/international/iso-transl.el (iso-transl-char-map):
+       Also support the following characters:
+       ‐ ‑ ‒ – — ― ‘ ’ “ ” † ‡ • ′ ″ € № ← → ↔ − ≈ ≠ ≤ ≥
+
+2015-05-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add xref-find-regexp
+       * lisp/progmodes/xref.el (xref-find-function): Describe the
+       `matches' action.
+       (xref-find-regexp): New command, using it.
+       (xref-collect-references): Rename to xref-collect-matches.
+       (xref--collect-reference): Rename to xref--collect-match.
+       (xref-collect-matches, xref--collect-match): Accept new argument,
+       KIND.  Update accordingly.
+       (xref--regexp-to-extended): New function.
+       * lisp/progmodes/elisp-mode.el (elisp-xref-find): Support the
+       `matches' action.
+       (elisp--xref-find-matches): Accept new argument.  Resolve a FIXME.
+       * lisp/progmodes/etags.el (etags-xref-find):
+       Support the `matches' action.
+       (etags--xref-find-matches): New function.
+
+2015-05-10  Glenn Morris  <rgm@gnu.org>
+
+       * Makefile.in: Fixes for recent change-history changes.
+       (change-history-nocommit): Update footer regexp.
+       Ensure output script stays executable.
+
+2015-05-10  Nicolas Petton  <nicolas@petton.fr>
+
+       New version of `seq-let' based on a pcase pattern
+       * lisp/emacs-lisp/seq.el (seq-let): Define the macro in terms of a
+       pcase pattern if `pcase-defmacro' is defined (Emacs>=25.1).
+
+2015-05-10  Przemysław Wojnowski  <esperanto@cumego.com>
+
+       Add basic HTML5 tags and a template
+       * lisp/textmodes/sgml-mode.el: Basic HTML5 support.
+       (html-tag-alist): Add HTML5 tags.
+       (html-tag-help): Add new tags descriptions.
+       (html-navigational-links): Template for nav links.
+       (html-html5-template): Template for a HTML5 page.
+
+2015-05-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       semantic/symref/grep: Don't use word boundaries
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-perform-search): Instead of wrapping input in
+       word boundaries, check that the characters before and after are
+       not word constituents.
+
+       semantic/symref/grep: Support regexp search
+       * lisp/cedet/semantic/symref.el
+       (semantic-symref-hit-to-tag-via-buffer): Don't regexp-quote when
+       the search type is regexp.
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-perform-search): Support the regexp search type.
+       Pass -E to Grep when it's used.
+
+       semantic-symref-regexp: Allow to input an arbitrary string
+       * lisp/cedet/semantic/symref/list.el (semantic-symref-regexp):
+       Allow to input an arbitrary string interactively.
+
+       Remove tag-symbol-match-p from etags-xref-find-definitions-tag-order
+       * lisp/progmodes/etags.el (etags-xref-find-definitions-tag-order):
+       Remove tag-symbol-match-p from the default value
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00292.html).
+
+       Declare find-tag obsolete
+       * lisp/progmodes/etags.el (find-tag): Declare obsolete in favor of
+       xref-find-definitions.
+
+2015-05-10  Jan D  <jan.h.d@swipnet.se>
+
+       Draw composite string correctly (Bug#20537).
+       * nsterm.m (ns_draw_composite_glyph_string_foreground): New function.
+       (ns_draw_glyph_string): Call it (Bug#20537).
+
 2015-05-09  Eli Zaretskii  <eliz@gnu.org>
 
        Avoid infloop in ERC
index eec6d313524908db6a4105b97b46b2eb7e0ebe58..9790dbd7b1058b4b5ac9b10d32aef471ce7a75af 100644 (file)
@@ -831,7 +831,7 @@ clean_dirs = $(mostlyclean_dirs) nextstep
 $(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
 
 clean: $(clean_dirs:=_clean)
-       for dir in test/automated; do \
+       for dir in test/automated admin/charsets; do \
          [ ! -d $$dir ] || $(MAKE) -C $$dir clean; \
        done
        -rm -f *.tmp etc/*.tmp*
@@ -856,8 +856,10 @@ distclean_dirs = $(clean_dirs) leim lisp
 
 $(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
 
+maybeclean_dirs = test/automated admin/grammars admin/unidata admin/charsets
+
 distclean: $(distclean_dirs:=_distclean)
-       for dir in test/automated admin/grammars admin/unidata; do \
+       for dir in ${maybeclean_dirs}; do \
          [ ! -d $$dir ] || $(MAKE) -C $$dir distclean; \
        done
        ${top_distclean}
@@ -868,7 +870,7 @@ distclean: $(distclean_dirs:=_distclean)
 $(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean)))
 
 bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
-       for dir in test/automated admin/grammars admin/unidata; do \
+       for dir in ${maybeclean_dirs}; do \
          [ ! -d $$dir ] || $(MAKE) -C $$dir bootstrap-clean; \
        done
        [ ! -f config.log ] || mv -f config.log config.log~
@@ -896,7 +898,7 @@ maintainer_clean_dirs = src leim lisp
 $(foreach dir,$(maintainer_clean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean)))
 
 maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
-       for dir in test/automated admin/grammars admin/unidata; do \
+       for dir in ${maybeclean_dirs}; do \
          [ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \
        done
        ${top_maintainer_clean}
@@ -910,6 +912,7 @@ maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
 $(foreach dir,$(SUBDIR),$(eval $(call submake_template,$(dir),extraclean)))
 
 ## FIXME this is busted because most of these do not have extraclean rules.
+## Also it is missing things that do have such rules.
 extraclean: $(SUBDIR:=_extraclean)
        ${top_maintainer_clean}
        -rm -f config-tmp-*
diff --git a/admin/charsets/Makefile b/admin/charsets/Makefile
deleted file mode 100644 (file)
index e5cf250..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-# Makefile -- Makefile to generate charset maps in etc/charsets.
-# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-#   National Institute of Advanced Industrial Science and Technology (AIST)
-#   Registration Number H13PRO009
-#
-# This file is part of GNU Emacs.
-
-# GNU Emacs is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# GNU Emacs is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-# Commentary:
-
-#  If your system doesn't have the directory /usr/share/i18n/charmaps,
-#  get the source of the latest glibc, gzip all the charmap files in
-#  the directory "localedate/charmaps", and set the variable
-#  GLIBC_CHARMAPS to that directory.
-
-GLIBC_CHARMAPS=/usr/share/i18n/charmaps
-
-CHARSETS = ${ISO8859} ${IBM} ${CODEPAGE} ${CJK} ${MISC} ${MULE}
-
-# Note: We can not prepend "ISO-" to these map files because of file
-# name limits on DOS.
-ISO8859 = \
-       8859-2.map 8859-3.map 8859-4.map 8859-5.map 8859-6.map 8859-7.map \
-       8859-8.map 8859-9.map 8859-10.map 8859-11.map 8859-13.map 8859-14.map \
-       8859-15.map 8859-16.map
-
-IBM = \
-       IBM037.map IBM038.map \
-       IBM256.map IBM273.map IBM274.map IBM275.map IBM277.map IBM278.map \
-       IBM280.map IBM281.map IBM284.map IBM285.map IBM290.map IBM297.map \
-       IBM420.map IBM423.map IBM424.map IBM437.map IBM500.map IBM850.map \
-       IBM851.map IBM852.map IBM855.map IBM856.map IBM857.map IBM860.map \
-       IBM861.map IBM862.map IBM863.map IBM864.map IBM865.map IBM866.map \
-       IBM868.map IBM869.map IBM870.map IBM871.map IBM874.map IBM875.map \
-       IBM880.map IBM891.map IBM903.map IBM904.map IBM905.map IBM918.map \
-       IBM1004.map IBM1026.map IBM1047.map
-
-CODEPAGE = \
-       CP737.map CP775.map CP1125.map\
-       CP1250.map CP1251.map CP1252.map CP1253.map CP1254.map \
-       CP1255.map CP1256.map CP1257.map CP1258.map \
-       CP10007.map \
-       CP720.map CP858.map
-
-CJK =   GB2312.map GBK.map GB180302.map GB180304.map \
-       BIG5.map BIG5-HKSCS.map\
-       CNS-1.map CNS-2.map CNS-3.map CNS-4.map CNS-5.map CNS-6.map CNS-7.map \
-       CNS-F.map \
-       JISX0201.map JISX0208.map JISX0212.map JISX2131.map JISX2132.map \
-       JISC6226.map CP932-2BYTE.map JISX213A.map\
-       KSC5601.map KSC5636.map JOHAB.map
-
-MISC =  KOI-8.map KOI8-R.map KOI8-U.map KOI8-T.map ALTERNATIVNYJ.map \
-       MIK.map PTCP154.map \
-       TIS-620.map VISCII.map VSCII.map VSCII-2.map\
-       KA-PS.map KA-ACADEMY.map \
-       HP-ROMAN8.map NEXTSTEP.map MACINTOSH.map EBCDICUK.map EBCDICUS.map \
-       stdenc.map symbol.map \
-       CP949-2BYTE.map \
-       BIG5-1.map BIG5-2.map
-
-# Emacs-mule charsets.
-MULE = MULE-ethiopic.map MULE-ipa.map MULE-is13194.map \
-       MULE-sisheng.map MULE-tibetan.map \
-       MULE-lviscii.map MULE-uviscii.map
-
-TRANS_TABLE = cp51932.el eucjp-ms.el
-SED_SCRIPT = jisx2131-filter
-
-all: ${CHARSETS} ${TRANS_TABLE}
-
-AWK = gawk
-
-# Rules for each charset
-
-VSCII.map: ${GLIBC_CHARMAPS}/TCVN5712-1.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[0-9a-f].[  ]/' GLIBC-1 compact.awk > $@
-
-VSCII-2.map: ${GLIBC_CHARMAPS}/TCVN5712-1.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[2-7a-f].[  ]/' GLIBC-1 compact.awk \
-         | sed 's/0x20-0x7F.*/0x00-0x7F 0x0000/' > $@
-
-ALTERNATIVNYJ.map: IBM866.map
-       # Generating $@...
-       @echo "# Modified from IBM866.map according to the chart at" > $@
-       @echo "# http://www.cyrillic.com/ref/cyrillic/koi-8alt.html," >> $@
-       @echo "# with guesses for the Unicodes of the glyphs." >> $@
-       @sed -e '1 d' \
-            -e '/0xF2/ s/ .*/ 0x2019/' \
-            -e '/0xF3/ s/ .*/ 0x2018/' \
-            -e '/0xF4/ s/ .*/ 0x0301/' \
-            -e '/0xF5/ s/ .*/ 0x0300/' \
-            -e '/0xF6/ s/ .*/ 0x203A/' \
-            -e '/0xF7/ s/ .*/ 0x2039/' \
-            -e '/0xF8/ s/ .*/ 0x2191/' \
-            -e '/0xF9/ s/ .*/ 0x2193/' \
-            -e '/0xFA/ s/ .*/ 0x00B1/' \
-            -e '/0xFB/ s/ .*/ 0x00F7/' < $< >> $@
-
-MIK.map: mapfiles/bulgarian-mik.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '1,$$' CZYBORRA compact.awk > $@
-
-PTCP154.map: mapfiles/PTCP154 mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^0x/' IANA compact.awk > $@
-
-stdenc.map: mapfiles/stdenc.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^[0-9A-Fa-f]/' UNICODE compact.awk > $@
-
-symbol.map: mapfiles/symbol.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^[0-9A-Fa-f]/' UNICODE compact.awk > $@
-
-CP720.map: mapfiles/CP720.map
-       # Generating $@...
-       @cp $< $@
-
-CP858.map: mapfiles/CP858.map
-       # Generating $@...
-       @cp $< $@
-
-CP949-2BYTE.map: ${GLIBC_CHARMAPS}/CP949.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[89a-f]/' GLIBC-2 compact.awk > $@
-
-GB2312.map: ${GLIBC_CHARMAPS}/GB2312.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2-7 compact.awk > $@
-
-GBK.map: ${GLIBC_CHARMAPS}/GBK.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[89a-f]/' GLIBC-2 compact.awk > $@
-
-GB180302.map: ${GLIBC_CHARMAPS}/GB18030.gz mapconv gb180302.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x..\/x..[    ]/' GLIBC-2 gb180302.awk > $@
-
-GB180304.map: GB180302.map gb180304.awk
-       # Generating $@...
-       @$(AWK) -f gb180304.awk < $< > $@
-
-JISX0201.map: ${GLIBC_CHARMAPS}/JIS_X0201.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[0-9]/' GLIBC-1 compact.awk > $@
-       @echo "# Generated by hand" >> $@
-       @echo "0xA1-0xDF 0xFF61" >> $@
-
-JISX0208.map: ${GLIBC_CHARMAPS}/EUC-JP.gz mapconv
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2-7 \
-         | sed 's/0x2015/0x2014/' > $@
-
-JISX0212.map: ${GLIBC_CHARMAPS}/EUC-JP.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x8f/ s,/x8f,,' GLIBC-2-7 compact.awk > $@
-
-jisx2131-filter: mapfiles/JISX213A.map
-       @sed -n -e '/^#/d' -e 's,.*0x\([0-9A-Z]*\)$$,/0x0*\1$$/d,p' < $< > $@
-
-JISX2131.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz mapconv jisx2131-filter
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2-7 \
-         | sed -f jisx2131-filter \
-         | sed -e 's/0x2015/0x2014/' -e 's/0x2299/0x29BF/' > $@
-
-JISX2132.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz mapconv
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x8f/ s,/x8f,,' GLIBC-2-7 > $@
-
-JISX213A.map: mapfiles/JISX213A.map
-       # Generating $@
-       @cp $<  $@
-
-CP932-2BYTE.map: mapfiles/CP932.TXT mapconv cp932.awk
-       # Generating $@...
-       @./mapconv $< '/^0x[89A-F][0-9A-F][0-9A-F]/' UNICODE2 cp932.awk > $@
-
-cp51932.el: CP932-2BYTE.map cp51932.awk
-       @$(AWK) -f cp51932.awk < CP932-2BYTE.map > $@
-
-eucjp-ms.el: ${GLIBC_CHARMAPS}/EUC-JP-MS.gz eucjp-ms.awk
-       @zcat $< | $(AWK) -f eucjp-ms.awk > $@
-
-JISC6226.map: mapfiles/Uni2JIS mapconv kuten.awk
-       # Generating $@...
-# As Uni2JIS doesn't contain mappings of characters added to Unicode
-# recently, we add them manually here (including one correction for
-# U+005C vs U+FF3C).  These changes are based on bogytech's blog at
-# http://bogytech.blogspot.jp/search/label/emacs.
-       @./mapconv $< '/^[^#].*0-/' YASUOKA kuten.awk \
-         | sed -e '/0x2140/s/005C/FF3C/' \
-               -e '$$ a 0x3442 0x3D4E' \
-               -e '$$ a 0x374E 0x25874' \
-               -e '$$ a 0x3764 0x28EF6' \
-               -e '$$ a 0x513D 0x2F80F' \
-               -e '$$ a 0x7045 0x9724' > $@
-
-KSC5601.map: ${GLIBC_CHARMAPS}/EUC-KR.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2-7 compact.awk > $@
-
-BIG5.map: ${GLIBC_CHARMAPS}/BIG5.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2 > $@
-
-BIG5-1.map: BIG5.map mapconv big5.awk
-       # Generating $@...
-       @echo "# Generated from $<" > $@
-       @sed -n -e '/0xa140/,/0xc8fe/p' < $< | gawk -f big5.awk >> $@
-
-BIG5-2.map: BIG5.map mapconv big5.awk
-       # Generating $@...
-       @echo "# Generated from $<" > $@
-       @sed -n -e '/0xc940/,$$ p' < $< | gawk -f big5.awk >> $@
-
-BIG5-HKSCS.map: ${GLIBC_CHARMAPS}/BIG5-HKSCS.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[89a-f].\//' GLIBC-2 compact.awk > $@
-
-JOHAB.map: ${GLIBC_CHARMAPS}/JOHAB.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[89a-f]/' GLIBC-2 compact.awk > $@
-
-CNS-1.map: ${GLIBC_CHARMAPS}/EUC-TW.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x[a-f]/' GLIBC-2-7 compact.awk > $@
-
-# CNS-1.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-#      # Generating $@...
-#      @./mapconv $< '/^C1/' KANJI-DATABASE compact.awk > $@
-
-CNS-2.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C2/' KANJI-DATABASE compact.awk > $@
-
-CNS-3.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C3/' KANJI-DATABASE compact.awk > $@
-
-CNS-4.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C4/' KANJI-DATABASE compact.awk > $@
-
-CNS-5.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C5/' KANJI-DATABASE compact.awk > $@
-
-CNS-6.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C6/' KANJI-DATABASE compact.awk > $@
-
-CNS-7.map: mapfiles/cns2ucsdkw.txt mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^C7/' KANJI-DATABASE compact.awk > $@
-
-CNS-F.map: ${GLIBC_CHARMAPS}/EUC-TW.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*\/x8e\/xaf/ s,/x8e/xaf,,' GLIBC-2-7 compact.awk > $@
-
-# General target to produce map files for mule charsets.
-MULE-%.map: mapfiles/MULE-%.map
-       # Generating $@...
-       @cp $< $@
-
-# General target to produce map files for ISO-8859, GEORGIAN, and
-# EBCDIC charsets.  We can not use the original file name because of
-# file name limit on DOS.  "KA" is ISO 639 language code for Georgian.
-
-8859-%.map: ${GLIBC_CHARMAPS}/ISO-8859-%.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x/' GLIBC-1 compact.awk > $@
-
-KA-%.map: ${GLIBC_CHARMAPS}/GEORGIAN-%.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x/' GLIBC-1 compact.awk > $@
-
-EBCDIC%.map: ${GLIBC_CHARMAPS}/EBCDIC-%.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x/' GLIBC-1 compact.awk > $@
-
-# General target to produce map files for single-byte charsets.
-
-%.map: ${GLIBC_CHARMAPS}/%.gz mapconv compact.awk
-       # Generating $@...
-       @./mapconv $< '/^<.*[   ]\/x/' GLIBC-1 compact.awk > $@
-
-install:
-       @for f in ${CHARSETS}; do \
-         if test -r $$f; then \
-           if ! cmp -s $$f ../../etc/charsets/$$f; then \
-             echo updating $$f; \
-             cp $$f ../../etc/charsets; \
-           fi; \
-         fi; \
-       done
-       @for f in ${TRANS_TABLE}; do \
-         if test -r $$f; then \
-           if ! cmp -s $$f ../../lisp/international/$$f; then \
-             echo updating $$f; \
-             cp $$f ../../lisp/international; \
-           fi; \
-         fi; \
-       done
-
-# Clear files that are automatically generated.
-clean:
-       rm -f ${CHARSETS} ${TRANS_TABLE} ${SED_SCRIPT}
-
diff --git a/admin/charsets/Makefile.in b/admin/charsets/Makefile.in
new file mode 100644 (file)
index 0000000..0b96cd1
--- /dev/null
@@ -0,0 +1,335 @@
+### @configure_input@
+
+# Copyright (C) 2015 Free Software Foundation, Inc.
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+#   National Institute of Advanced Industrial Science and Technology (AIST)
+#   Registration Number H13PRO009
+#
+# This file is part of GNU Emacs.
+
+# GNU Emacs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU Emacs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# Generate charset maps in etc/charsets.
+
+#  If your system doesn't have the directory /usr/share/i18n/charmaps,
+#  get the source of the latest glibc, gzip all the charmap files in
+#  the directory "localedate/charmaps", and set the variable
+#  GLIBC_CHARMAPS to that directory.
+
+SHELL = @SHELL@
+
+AWK = @AWK@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+
+charsetdir = ${top_srcdir}/etc/charsets
+lispintdir = ${top_srcdir}/lisp/international
+mapfiledir = ${srcdir}/mapfiles
+
+GLIBC_CHARMAPS=/usr/share/i18n/charmaps
+
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 =
+
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+
+# Note: We can not prepend "ISO-" to these map files because of file
+# name limits on DOS.
+ISO8859 = \
+       8859-2.map 8859-3.map 8859-4.map 8859-5.map 8859-6.map 8859-7.map \
+       8859-8.map 8859-9.map 8859-10.map 8859-11.map 8859-13.map 8859-14.map \
+       8859-15.map 8859-16.map
+
+IBM = \
+       IBM037.map IBM038.map \
+       IBM256.map IBM273.map IBM274.map IBM275.map IBM277.map IBM278.map \
+       IBM280.map IBM281.map IBM284.map IBM285.map IBM290.map IBM297.map \
+       IBM420.map IBM423.map IBM424.map IBM437.map IBM500.map IBM850.map \
+       IBM851.map IBM852.map IBM855.map IBM856.map IBM857.map IBM860.map \
+       IBM861.map IBM862.map IBM863.map IBM864.map IBM865.map IBM866.map \
+       IBM868.map IBM869.map IBM870.map IBM871.map IBM874.map IBM875.map \
+       IBM880.map IBM891.map IBM903.map IBM904.map IBM905.map IBM918.map \
+       IBM1004.map IBM1026.map IBM1047.map
+
+CODEPAGE = \
+       CP737.map CP775.map CP1125.map\
+       CP1250.map CP1251.map CP1252.map CP1253.map CP1254.map \
+       CP1255.map CP1256.map CP1257.map CP1258.map \
+       CP10007.map \
+       CP720.map CP858.map
+
+CJK =   GB2312.map GBK.map GB180302.map GB180304.map \
+       BIG5.map BIG5-HKSCS.map\
+       CNS-1.map CNS-2.map CNS-3.map CNS-4.map CNS-5.map CNS-6.map CNS-7.map \
+       CNS-F.map \
+       JISX0201.map JISX0208.map JISX0212.map JISX2131.map JISX2132.map \
+       JISC6226.map CP932-2BYTE.map JISX213A.map\
+       KSC5601.map KSC5636.map JOHAB.map
+
+MISC =  KOI-8.map KOI8-R.map KOI8-U.map KOI8-T.map ALTERNATIVNYJ.map \
+       MIK.map PTCP154.map \
+       TIS-620.map VISCII.map VSCII.map VSCII-2.map\
+       KA-PS.map KA-ACADEMY.map \
+       HP-ROMAN8.map NEXTSTEP.map MACINTOSH.map EBCDICUK.map EBCDICUS.map \
+       stdenc.map symbol.map \
+       CP949-2BYTE.map \
+       BIG5-1.map BIG5-2.map
+
+# Emacs-mule charsets.
+MULE = MULE-ethiopic.map MULE-ipa.map MULE-is13194.map \
+       MULE-sisheng.map MULE-tibetan.map \
+       MULE-lviscii.map MULE-uviscii.map
+
+SED_SCRIPT = jisx2131-filter
+
+TRANS_TABLE = cp51932.el eucjp-ms.el
+TRANS_TABLE := $(addprefix ${lispintdir}/,${TRANS_TABLE})
+
+CHARSETS = ${ISO8859} ${IBM} ${CODEPAGE} ${CJK} ${MISC} ${MULE}
+CHARSETS := $(addprefix ${charsetdir}/,${CHARSETS})
+
+## Those charsets whose source is not in GLIBC_CHARMAPS.
+LOCAL = MIK.map PTCP154.map stdenc.map symbol.map CP720.map CP858.map \
+  JISX213A.map CP932-2BYTE.map JISC6226.map \
+  CNS-2.map CNS-3.map CNS-4.map CNS-5.map CNS-6.map CNS-7.map \
+  ${MULE}
+LOCAL := $(addprefix ${charsetdir}/,${LOCAL})
+
+
+.PHONY: all local
+
+all: ${CHARSETS} ${TRANS_TABLE}
+local: ${LOCAL} ${lispintdir}/cp51932.el
+
+## Rules for each charset.
+
+mapconv = ${srcdir}/mapconv
+run_mapconv = AWK=${AWK} ${srcdir}/mapconv
+big5 = ${srcdir}/big5.awk
+compact = ${srcdir}/compact.awk
+cp51932 = ${srcdir}/cp51932.awk
+cp932 = ${srcdir}/cp932.awk
+eucjp_ms = ${srcdir}/eucjp-ms.awk
+gb180302 = ${srcdir}/gb180302.awk
+gb180304 = ${srcdir}/gb180304.awk
+kuten = ${srcdir}/kuten.awk
+
+## Short aliases, eg VSCII.map = ${charsetdir}/VSCII.map
+define map_template
+ .PHONY: $(notdir ${1})
+ $(notdir ${1}): ${1}
+endef
+
+$(foreach mfile,${CHARSETS} ${TRANS_TABLE},$(eval $(call map_template,$(mfile))))
+
+${charsetdir}/VSCII.map: ${GLIBC_CHARMAPS}/TCVN5712-1.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[0-9a-f].[  ]/' GLIBC-1 ${compact} > $@
+
+${charsetdir}/VSCII-2.map: ${GLIBC_CHARMAPS}/TCVN5712-1.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[2-7a-f].[  ]/' GLIBC-1 ${compact} \
+         | sed 's/0x20-0x7F.*/0x00-0x7F 0x0000/' > $@
+
+${charsetdir}/ALTERNATIVNYJ.map: ${charsetdir}/IBM866.map
+       ${AM_V_GEN}(echo "# Modified from $(notdir $<) according to the chart at" && \
+         echo "# http://www.cyrillic.com/ref/cyrillic/koi-8alt.html," && \
+         echo "# with guesses for the Unicodes of the glyphs." && \
+         sed -e '1 d' \
+            -e '/0xF2/ s/ .*/ 0x2019/' \
+            -e '/0xF3/ s/ .*/ 0x2018/' \
+            -e '/0xF4/ s/ .*/ 0x0301/' \
+            -e '/0xF5/ s/ .*/ 0x0300/' \
+            -e '/0xF6/ s/ .*/ 0x203A/' \
+            -e '/0xF7/ s/ .*/ 0x2039/' \
+            -e '/0xF8/ s/ .*/ 0x2191/' \
+            -e '/0xF9/ s/ .*/ 0x2193/' \
+            -e '/0xFA/ s/ .*/ 0x00B1/' \
+            -e '/0xFB/ s/ .*/ 0x00F7/' < $< ) > $@
+
+${charsetdir}/MIK.map: ${mapfiledir}/bulgarian-mik.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '1,$$' CZYBORRA ${compact} > $@
+
+${charsetdir}/PTCP154.map: ${mapfiledir}/PTCP154 ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^0x/' IANA ${compact} > $@
+
+${charsetdir}/stdenc.map: ${mapfiledir}/stdenc.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^[0-9A-Fa-f]/' UNICODE ${compact} > $@
+
+${charsetdir}/symbol.map: ${mapfiledir}/symbol.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^[0-9A-Fa-f]/' UNICODE ${compact} > $@
+
+${charsetdir}/CP720.map: ${mapfiledir}/CP720.map
+       ${AM_V_GEN}cp $< $@
+
+${charsetdir}/CP858.map: ${mapfiledir}/CP858.map
+       ${AM_V_GEN}cp $< $@
+
+${charsetdir}/CP949-2BYTE.map: ${GLIBC_CHARMAPS}/CP949.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[89a-f]/' GLIBC-2 ${compact} > $@
+
+${charsetdir}/GB2312.map: ${GLIBC_CHARMAPS}/GB2312.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2-7 ${compact} > $@
+
+${charsetdir}/GBK.map: ${GLIBC_CHARMAPS}/GBK.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[89a-f]/' GLIBC-2 ${compact} > $@
+
+${charsetdir}/GB180302.map: ${GLIBC_CHARMAPS}/GB18030.gz ${mapconv} ${gb180302}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x..\/x..[    ]/' GLIBC-2 ${gb180302} > $@
+
+${charsetdir}/GB180304.map: ${charsetdir}/GB180302.map ${gb180304}
+       ${AM_V_GEN}$(AWK) -f ${gb180304} < $< > $@
+
+${charsetdir}/JISX0201.map: ${GLIBC_CHARMAPS}/JIS_X0201.gz ${mapconv} ${compact}
+       ${AM_V_GEN}(${mapconv} $< '/^<.*[       ]\/x[0-9]/' GLIBC-1 ${compact} && \
+         echo "# Generated by hand" && \
+         echo "0xA1-0xDF 0xFF61" ) > $@
+
+${charsetdir}/JISX0208.map: ${GLIBC_CHARMAPS}/EUC-JP.gz ${mapconv}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2-7 \
+         | sed 's/0x2015/0x2014/' > $@
+
+${charsetdir}/JISX0212.map: ${GLIBC_CHARMAPS}/EUC-JP.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x8f/ s,/x8f,,' GLIBC-2-7 ${compact} > $@
+
+jisx2131-filter: ${mapfiledir}/JISX213A.map
+       ${AM_V_at}sed -n -e '/^#/d' -e 's,.*0x\([0-9A-Z]*\)$$,/0x0*\1$$/d,p' < $< > $@
+
+${charsetdir}/JISX2131.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv} jisx2131-filter
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2-7 \
+         | sed -f jisx2131-filter \
+         | sed -e 's/0x2015/0x2014/' -e 's/0x2299/0x29BF/' > $@
+
+${charsetdir}/JISX2132.map: ${GLIBC_CHARMAPS}/EUC-JISX0213.gz ${mapconv}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x8f/ s,/x8f,,' GLIBC-2-7 > $@
+
+${charsetdir}/JISX213A.map: ${mapfiledir}/JISX213A.map
+       ${AM_V_GEN}cp $< $@
+
+${charsetdir}/CP932-2BYTE.map: ${mapfiledir}/CP932.TXT ${mapconv} ${cp932}
+       ${AM_V_GEN}${run_mapconv} $< '/^0x[89A-F][0-9A-F][0-9A-F]/' UNICODE2 ${cp932} > $@
+
+${lispintdir}/cp51932.el: ${charsetdir}/CP932-2BYTE.map ${cp51932}
+       ${AM_V_GEN}$(AWK) -f ${cp51932} < $< > $@
+
+${lispintdir}/eucjp-ms.el: ${GLIBC_CHARMAPS}/EUC-JP-MS.gz ${eucjp_ms}
+       ${AM_V_GEN}gunzip -c $< | $(AWK) -f ${eucjp_ms} > $@
+
+# As Uni2JIS doesn't contain mappings of characters added to Unicode
+# recently, we add them manually here (including one correction for
+# U+005C vs U+FF3C).  These changes are based on bogytech's blog at
+# http://bogytech.blogspot.jp/search/label/emacs.
+${charsetdir}/JISC6226.map: ${mapfiledir}/Uni2JIS ${mapconv} ${kuten}
+       ${AM_V_GEN}(${run_mapconv} $< '/^[^#].*0-/' YASUOKA ${kuten} \
+         | sed -e '/0x2140/s/005C/FF3C/' && \
+         echo '0x3442 0x3D4E' && echo '0x374E 0x25874' && \
+         echo '0x3764 0x28EF6' && echo '0x513D 0x2F80F' && \
+         echo '0x7045 0x9724' ) > $@
+
+${charsetdir}/KSC5601.map: ${GLIBC_CHARMAPS}/EUC-KR.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2-7 ${compact} > $@
+
+${charsetdir}/BIG5.map: ${GLIBC_CHARMAPS}/BIG5.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2 > $@
+
+${charsetdir}/BIG5-1.map: ${charsetdir}/BIG5.map ${mapconv} ${big5}
+       ${AM_V_GEN}(echo "# Generated from $(notdir $<)" && \
+         sed -n -e '/0xa140/,/0xc8fe/p' < $< | $(AWK) -f ${big5} ) > $@
+
+${charsetdir}/BIG5-2.map: ${charsetdir}/BIG5.map ${mapconv} ${big5}
+       ${AM_V_GEN}(echo "# Generated from $(notdir $<)" && \
+         sed -n -e '/0xc940/,$$ p' < $< | $(AWK) -f ${big5} ) > $@
+
+${charsetdir}/BIG5-HKSCS.map: ${GLIBC_CHARMAPS}/BIG5-HKSCS.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[89a-f].\//' GLIBC-2 ${compact} > $@
+
+${charsetdir}/JOHAB.map: ${GLIBC_CHARMAPS}/JOHAB.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[89a-f]/' GLIBC-2 ${compact} > $@
+
+${charsetdir}/CNS-1.map: ${GLIBC_CHARMAPS}/EUC-TW.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x[a-f]/' GLIBC-2-7 ${compact} > $@
+
+# ${charsetdir}/CNS-1.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+#      ${AM_V_GEN}${run_mapconv} $< '/^C1/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-2.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C2/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-3.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C3/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-4.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C4/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-5.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C5/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-6.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C6/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-7.map: ${mapfiledir}/cns2ucsdkw.txt ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^C7/' KANJI-DATABASE ${compact} > $@
+
+${charsetdir}/CNS-F.map: ${GLIBC_CHARMAPS}/EUC-TW.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*\/x8e\/xaf/ s,/x8e/xaf,,' GLIBC-2-7 ${compact} > $@
+
+# General target to produce map files for mule charsets.
+${charsetdir}/MULE-%.map: ${mapfiledir}/MULE-%.map
+       ${AM_V_GEN}cp $< $@
+
+# General target to produce map files for ISO-8859, GEORGIAN, and
+# EBCDIC charsets.  We can not use the original file name because of
+# file name limit on DOS.  "KA" is ISO 639 language code for Georgian.
+
+${charsetdir}/8859-%.map: ${GLIBC_CHARMAPS}/ISO-8859-%.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x/' GLIBC-1 ${compact} > $@
+
+${charsetdir}/KA-%.map: ${GLIBC_CHARMAPS}/GEORGIAN-%.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x/' GLIBC-1 ${compact} > $@
+
+${charsetdir}/EBCDIC%.map: ${GLIBC_CHARMAPS}/EBCDIC-%.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x/' GLIBC-1 ${compact} > $@
+
+# General target to produce map files for single-byte charsets.
+
+${charsetdir}/%.map: ${GLIBC_CHARMAPS}/%.gz ${mapconv} ${compact}
+       ${AM_V_GEN}${run_mapconv} $< '/^<.*[    ]\/x/' GLIBC-1 ${compact} > $@
+
+
+.PHONY: clean bootstrap-clean distclean maintainer-clean extraclean totalclean
+
+clean:
+       rm -f ${SED_SCRIPT}
+
+bootstrap-clean: clean
+
+distclean: clean
+       rm -f Makefile
+
+maintainer-clean: distclean
+
+## Do not remove these files, even in a bootstrap.  They rarely change.
+extraclean:
+       rm -f ${LOCAL} ${TRANS_TABLE}
+
+totalclean: extraclean
+       rm -f ${CHARSETS}
index 8433d222b8db43adaaa369fac69b26bfbfe8d1d6..245dce114a09e33eaf55a5050ec11ec79c5eaa32 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+# Copyright (C) 2015 Free Software Foundation, Inc.
+
 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
 #   Registration Number H13PRO009
 #      GLIBC-1 GLIBC-2 GLIBC-2-7 CZYBORRA IANA UNICODE UNICODE2 YASUOKA
 #   $4: awk script
 
-FILE="admin/charsets/$1"
-BASE=`basename $1 .gz`
+## So that eg [A-F] as used by KANJI-DATABASE branch below works as expected.
+## Otherwise with LANG=en_US.utf8, CNS-6.map was generated with a
+## bogus entry.  By experiment, LC_COLLATE=C was not enough.
+export LC_ALL=C
+
+BASE=`expr "$1" : '.*/\(.*\)' '|' "$1"` # basename
+FILE="admin/charsets/mapfiles/$BASE"
+BASE=`expr "$BASE" : '\(.*\)\.gz$' '|' "$BASE"` # remove any .gz suffix
+AWK=${AWK:-awk}
 
 case "$3" in
     GLIBC*)
@@ -69,7 +78,7 @@ fi
 
 if [ -n "$4" ] ; then
     if [ -f "$4" ] ; then
-       AWKPROG="gawk -f $4"
+       AWKPROG="$AWK -f $4"
     else
        echo "Awk program does not exist: $4"
        exit 1
@@ -81,20 +90,20 @@ fi
 if [ "$3" = "GLIBC-1" ] ; then
     # Source format is:
     #   <UYYYY>        /xXX
-    zcat $1 | sed -n -e "$2 p" \
+    gunzip -c $1 | sed -n -e "${2}p" \
        | sed -e 's,<U\([^>]*\)>[       ]*/x\(..\).*,0x\2 0x\1,' \
        | sort | ${AWKPROG}
 elif [ "$3" = "GLIBC-2" ] ; then
     # Source format is:
     #   <UYYYY>        /xXX/xZZ
-    zcat $1 | sed -n -e "$2 p" \
+    gunzip -c $1 | sed -n -e "${2}p" \
        | sed -e 's,<U\([^>]*\)>[       ]*/x\(..\)/x\(..\).*,0x\2\3 0x\1,' \
        | sort | ${AWKPROG}
 elif [ "$3" = "GLIBC-2-7" ] ; then
     # Source format is:
     #   <UYYYY>        /xXX/xZZ
     # We must drop MSBs of XX and ZZ
-    zcat $1 | sed -n -e "$2 p" \
+    gunzip -c $1 | sed -n -e "${2}p" \
        | sed -e 's/xa/x2/g' -e 's/xb/x3/g' -e 's/xc/x4/g' \
              -e 's/xd/x5/g' -e 's/xe/x6/g' -e 's/xf/x7/g' \
              -e 's,<U\([^>]*\)>[       ]*/x\(..\)/x\(..\).*,0x\2\3 0x\1,' \
@@ -102,13 +111,13 @@ elif [ "$3" = "GLIBC-2-7" ] ; then
 elif [ "$3" = "CZYBORRA" ] ; then
     # Source format is:
     #   =XX    U+YYYY
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/=\(..\)[^U]*U+\([0-9A-F]*\).*/0x\1 0x\2/' \
        | sort | ${AWKPROG}
 elif [ "$3" = "IANA" ] ; then
     # Source format is:
     #   0xXX   0xYYYY
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/\(0x[0-9A-Fa-f]*\)[^0]*\(0x[0-9A-Fa-f]*\).*/\1 \2/' \
        | sort | ${AWKPROG}
 elif [ "$3" = "UNICODE" ] ; then
@@ -116,25 +125,25 @@ elif [ "$3" = "UNICODE" ] ; then
     #   YYYY   XX
     # We perform reverse sort to prefer the first one in the
     # duplicated mappings (e.g. 0x20->U+0020, 0x20->U+00A0).
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/\([0-9A-F]*\)[^0-9A-F]*\([0-9A-F]*\).*/0x\2 0x\1/' \
        | sort -r
 elif [ "$3" = "UNICODE2" ] ; then
     # Source format is:
     #   0xXXXX 0xYYYY  # ...
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/\([0-9A-Fx]*\)[^0]*\([0-9A-Fx]*\).*/\1 \2/' \
        | ${AWKPROG} | sort -n -k 4,4
 elif [ "$3" = "YASUOKA" ] ; then
     # Source format is:
     # YYYY     0-XXXX (XXXX is a Kuten code)
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/\([0-9A-F]*\)[^0]*0-\([0-9]*\).*/0x\2 0x\1/' \
        | sort | ${AWKPROG}
 elif [ "$3" = "KANJI-DATABASE" ] ; then
     # Source format is:
     # C?-XXXX U+YYYYY .....
-    sed -n -e "$p" < $1 \
+    sed -n -e "${2}p" < $1 \
        | sed -e 's/...\(....\) U+\([0-9A-F]*\).*/0x\1 0x\2/' \
        | sort | ${AWKPROG}
 else
index 1d76058db84768abc0695c6ed8e11f3f92fa969c..ab493e577dda1c38022f8c6b8bc96ef2f3bae8d1 100644 (file)
@@ -288,4 +288,4 @@ e-mail: auskov&idc.kz
 Intended usage:\r
 COMMON\r
 \r
-(record created 2002-09-27)
\ No newline at end of file
+(record created 2002-09-27)\r
index 028bcc187af2a5c4a7887917aa5ba832e51e88ee..ebec417193fb5ce1f3f8e63f2b47f626fd43570d 100644 (file)
@@ -245,6 +245,25 @@ nontrivial changes to the build process.
        lisp/leim/quail/ethiopic.el
        lisp/leim/quail/tibetan.el
 
+ * binary files
+
+     These files contain binary data, and are not text files.
+     Some of the entries in this list are patterns, and stand for any
+     files with the listed extension.
+
+       *.gz
+       *.icns
+       *.ico
+       *.pbm
+       *.pdf
+       *.png
+       *.sig
+       etc/e/eterm-color
+       etc/package-keyring.gpg
+       msdos/emacs.pif
+       nextstep/GNUstep/Emacs.base/Resources/emacs.tiff
+       nt/icons/hand.cur
+
 \f
 This file is part of GNU Emacs.
 
index ad7c2739cbc52b80124ee7aaed1a32c884bd064d..9abb693dabee577fd4579c8544bb70cad0e412ca 100755 (executable)
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
     if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2015-05-08 06:05'; # UTC
+my $VERSION = '2015-05-19 01:37'; # UTC
 # The definition above must lie within the first 8 lines in order
 # for the Emacs time-stamp write hook (at end) to update it.
 # If you change this file with Emacs, please let the write hook
@@ -74,6 +74,7 @@ OPTIONS:
                   the default is to convert all log entries.
    --until=DATE convert only the logs older than DATE.
    --ignore-matching=PAT ignore commit messages whose first lines match PAT.
+   --ignore-line=PAT ignore lines of commit messages that match PAT.
    --format=FMT set format string for commit subject and body;
                   see 'man git-log' for the list of format metacharacters;
                   the default is '%s%n%b%n'
@@ -228,6 +229,7 @@ sub git_dir_option($)
   my $append_dot = 0;
   my $cluster = 1;
   my $ignore_matching;
+  my $ignore_line;
   my $strip_tab = 0;
   my $strip_cherry_pick = 0;
   my $srcdir;
@@ -242,6 +244,7 @@ sub git_dir_option($)
      'append-dot' => \$append_dot,
      'cluster!' => \$cluster,
      'ignore-matching=s' => \$ignore_matching,
+     'ignore-line=s' => \$ignore_line,
      'strip-tab' => \$strip_tab,
      'strip-cherry-pick' => \$strip_cherry_pick,
      'srcdir=s' => \$srcdir,
@@ -349,6 +352,12 @@ sub git_dir_option($)
       if (! (defined $ignore_matching
              && @line && $line[0] =~ /$ignore_matching/))
         {
+          if (defined $ignore_line && @line)
+            {
+              @line = grep ! /$ignore_line/, @line;
+              while ($line[$#line] =~ /^\s*$/) { pop @line; }
+            }
+
           # Record whether there are two or more paragraphs.
           my $multi_paragraph = grep /^\s*$/, @line;
 
index e38f8969bfe0b132de41c02e98e30b1efafbb1e7..d1b1af9b538a9a555457c8618431765047aa3370 100755 (executable)
@@ -23,7 +23,7 @@ LC_ALL=C
 export LC_ALL
 
 # The newest revision that should not appear in the generated ChangeLog.
-gen_origin=d2c7e14ac3bd2b517d35a86255c28d5b6d779451
+gen_origin=f89080d18dd64e0c92c5f3d206182d65f23eafeb
 force=
 output=ChangeLog
 nmax=2
@@ -58,7 +58,7 @@ test -d .git || {
 
 # Use Gnulib's packaged ChangeLog generator.
 ./build-aux/gitlog-to-changelog --ignore-matching='^; ' \
-  --format='%B' \
+  --ignore-line='^; ' --format='%B' \
   "$gen_origin.." >"ChangeLog.tmp" || exit
 
 if test -s "ChangeLog.tmp"; then
index fff3db90e50bd621e1f347354534741e5c4a1f8e..a9fe0952b164892017e3c4369f99016bde9cee9e 100644 (file)
@@ -5271,7 +5271,8 @@ fi
 
 dnl The admin/ directory used to be excluded from tarfiles.
 if test -d $srcdir/admin; then
-  SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES admin/unidata/Makefile admin/grammars/Makefile"
+  SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES admin/charsets/Makefile admin/unidata/Makefile admin/grammars/Makefile"
+  AC_CONFIG_FILES([admin/charsets/Makefile])
   AC_CONFIG_FILES([admin/unidata/Makefile])
   AC_CONFIG_FILES([admin/grammars/Makefile])
 fi                              dnl -d admin
index d5d9bb5f66db4b8e770f66173b06464f6d6f3d90..b12995be6ede13389b5526b1db5df9035118bb47 100644 (file)
@@ -3304,6 +3304,9 @@ fontset, whose short name is @samp{fontset-default}.
 @var{character} may be a script name.  In that case, use
 @var{font-spec} for all character in the charsets.
 
+@var{font-spec} may be a font-spec object created by the function
+@code{font-spec} (@pxref{Low-Level Font}).
+
 @var{font-spec} may be a cons; @code{(@var{family} . @var{registry})},
 where @var{family} is a family name of a font (possibly including a
 foundry name at the head), @var{registry} is a registry name of a font
@@ -3311,6 +3314,12 @@ foundry name at the head), @var{registry} is a registry name of a font
 
 @var{font-spec} may be a font name string.
 
+@var{font-spec} may be @code{nil}, which explicitly specifies that
+there's no font for the specified @var{character}.  This is useful,
+for example, to avoid expensive system-wide search for fonts for
+characters that have no glyphs, like those from the Unicode Private
+Use Area (PUA).
+
 The optional argument @var{add}, if non-@code{nil}, specifies how to
 add @var{font-spec} to the font specifications previously set.  If it
 is @code{prepend}, @var{font-spec} is prepended.  If it is
@@ -6614,7 +6623,8 @@ Display a box containing the Unicode codepoint of the character, in
 hexadecimal notation.
 
 @item an @acronym{ASCII} string
-Display a box containing that string.
+Display a box containing that string.  The string should contain at
+most 6 @acronym{ASCII} characters.
 
 @item a cons cell @code{(@var{graphical} . @var{text})}
 Display with @var{graphical} on graphical displays, and with
@@ -6625,7 +6635,8 @@ must be one of the display methods described above.
 @noindent
 The @code{thin-space}, @code{empty-box}, @code{hex-code}, and
 @acronym{ASCII} string display methods are drawn with the
-@code{glyphless-char} face.
+@code{glyphless-char} face.  On text terminals, a box is emulated by
+square brackets, @samp{[]}.
 
 The char-table has one extra slot, which determines how to display any
 character that cannot be displayed with any available font, or cannot
index e19472e3ca3fc3b802de70f2a3e9dd44233f4e3e..ddf81f3e805cab24f78e1150d5c9c296ba0af18f 100644 (file)
@@ -659,6 +659,16 @@ Some window managers ignore program-specified positions.  If you want to
 be sure the position you specify is not ignored, specify a
 non-@code{nil} value for the @code{user-position} parameter as well.
 
+If the window manager refuses to align a frame at the left or top screen
+edge, combining position notation and @code{user-position} as in
+
+@example
+(modify-frame-parameters
+  nil '((user-position . t) (left . (+ -4))))
+@end example
+
+may help to override that.
+
 @vindex top, a frame parameter
 @item top
 The screen position of the top (or bottom) edge, in pixels, with respect
@@ -1624,7 +1634,8 @@ tooltip, it first runs the hook @code{delete-frame-functions} (each
 function gets one argument, @var{frame}).  By default, @var{frame} is
 the selected frame.
 
-A frame cannot be deleted if its minibuffer is used by other frames.
+A frame cannot be deleted as long as its minibuffer serves as surrogate
+minibuffer for another frame (@pxref{Minibuffers and Frames}).
 Normally, you cannot delete a frame if all other frames are invisible,
 but if @var{force} is non-@code{nil}, then you are allowed to do so.
 @end deffn
@@ -1700,12 +1711,18 @@ you can get it with @code{minibuffer-window} (@pxref{Definition of
 minibuffer-window}).
 
 @cindex frame without a minibuffer
-However, you can also create a frame with no minibuffer.  Such a frame
-must use the minibuffer window of some other frame.  When you create the
-frame, you can explicitly specify the minibuffer window to use (in some
-other frame).  If you don't, then the minibuffer is found in the frame
-which is the value of the variable @code{default-minibuffer-frame}.  Its
-value should be a frame that does have a minibuffer.
+@cindex surrogate minibuffer frame
+However, you can also create a frame without a minibuffer.  Such a frame
+must use the minibuffer window of some other frame.  That other frame
+will serve as @dfn{surrogate minibuffer frame} for this frame and cannot
+be deleted via @code{delete-frame} (@pxref{Deleting Frames}) as long as
+this frame is live.
+
+When you create the frame, you can explicitly specify the minibuffer
+window to use (in some other frame).  If you don't, then the minibuffer
+is found in the frame which is the value of the variable
+@code{default-minibuffer-frame}.  Its value should be a frame that does
+have a minibuffer.
 
 If you use a minibuffer-only frame, you might want that frame to raise
 when you enter the minibuffer.  If so, set the variable
index 28f90d9567ac713b358aa8f8a753f51765883320..f16018417debcb91bae227691bf17a1b28e2c161 100644 (file)
@@ -540,8 +540,8 @@ property is used for bidirectional display.
 
 @item old-name
 Corresponds to the Unicode @code{Unicode_1_Name} property.  The value
-is a string.  Unassigned codepoints, and characters that have no value
-for this property, the value is @code{nil}.
+is a string.  For unassigned codepoints, and characters that have no
+value for this property, the value is @code{nil}.
 
 @item iso-10646-comment
 Corresponds to the Unicode @code{ISO_Comment} property.  The value is
index e7c79d5824185a236bf3896b62b7b6d1b98e9c40..c972bbb2e43a02ad9cb46e08dfe94079b44c2ef8 100644 (file)
@@ -350,10 +350,11 @@ would move to.
 @deffn Command forward-line &optional count
 @cindex beginning of line
 This function moves point forward @var{count} lines, to the beginning of
-the line.  If @var{count} is negative, it moves point
-@minus{}@var{count} lines backward, to the beginning of a line.  If
-@var{count} is zero, it moves point to the beginning of the current
-line.  If @var{count} is @code{nil}, that means 1.
+the line following that.  If @var{count} is negative, it moves point
+@minus{}@var{count} lines backward, to the beginning of a line
+preceding that.  If @var{count} is zero, it moves point to the
+beginning of the current line.  If @var{count} is @code{nil}, that
+means 1.
 
 If @code{forward-line} encounters the beginning or end of the buffer (or
 of the accessible portion) before finding that many lines, it sets point
@@ -362,7 +363,11 @@ there.  No error is signaled.
 @code{forward-line} returns the difference between @var{count} and the
 number of lines actually moved.  If you attempt to move down five lines
 from the beginning of a buffer that has only three lines, point stops at
-the end of the last line, and the value will be 2.
+the end of the last line, and the value will be 2.  As an explicit
+exception, if the last accessible line is non-empty, but has no
+newline (e.g., if the buffer ends without a newline), the function
+sets point to the end of that line, and the value returned by the
+function counts that line as one line successfully moved.
 
 In an interactive call, @var{count} is the numeric prefix argument.
 @end deffn
index 6da3582ddd163b23366426acb20ee54771d27d40..b2bc637800808398820419cb94c72eda62e153e7 100644 (file)
@@ -2005,16 +2005,49 @@ list---both the global buffer list and the selected frame's buffer
 list (@pxref{Buffer List}).  However, this is not done if the
 optional argument @var{norecord} is non-@code{nil}.
 
-Sometimes, @code{switch-to-buffer} may be unable to display the buffer
-in the selected window.  This happens if the selected window is a
-minibuffer window, or if the selected window is strongly dedicated to
-its buffer (@pxref{Dedicated Windows}).  In that case, the command
-normally tries to display the buffer in some other window, by invoking
-@code{pop-to-buffer} (see below).  However, if the optional argument
-@var{force-same-window} is non-@code{nil}, it signals an error
-instead.
+Sometimes, the selected window may not be suitable for displaying the
+buffer.  This happens if the selected window is a minibuffer window, or
+if the selected window is strongly dedicated to its buffer
+(@pxref{Dedicated Windows}).  In such cases, the command normally tries
+to display the buffer in some other window, by invoking
+@code{pop-to-buffer} (see below).
+
+If the optional argument @var{force-same-window} is non-@code{nil} and
+the selected window is not suitable for displaying the buffer, this
+function always signals an error when called non-interactively.  In
+interactive use, if the selected window is a minibuffer window, this
+function will try to use some other window instead.  If the selected
+window is strongly dedicated to its buffer, the option
+@code{switch-to-buffer-in-dedicated-window} described next can be used
+to proceed.
 @end deffn
 
+@defopt switch-to-buffer-in-dedicated-window
+This option, if non-@code{nil}, allows @code{switch-to-buffer} to
+proceed when called interactively and the selected window is strongly
+dedicated to its buffer.
+
+The following values are respected:
+
+@table @code
+@item nil
+Disallows switching and signals an error as in non-interactive use.
+
+@item prompt
+Prompts the user whether to allow switching.
+
+@item pop
+Invokes @code{pop-to-buffer} to proceed.
+
+@item t
+Marks the selected window as non-dedicated and proceeds.
+@end table
+
+When called non-interactively, @code{switch-to-buffer} always signals an
+error when the selected window is dedicated to its buffer and
+@var{force-same-window} is non-@code{nil}.
+@end defopt
+
 By default, @code{switch-to-buffer} shows the buffer at its position of
 @code{point}.  This behavior can be tuned using the following option.
 
index 9e570da3d1da0387c9ad96574128055bf5c7d938..56aea0c3184cc9cae0bdfede14a52e7d06d3639e 100644 (file)
@@ -753,6 +753,26 @@ If non, @code{nil}, this is a list of IRC message types to hide, e.g.:
 @end example
 @end defopt
 
+@defopt erc-network-hide-list
+If non, @code{nil}, this is a list of IRC networks and message types
+to hide, e.g.:
+
+@example
+(setq erc-network-hide-list (("freenode" "JOIN" "PART" "QUIT")
+("OFTC" "JOIN" "PART""))
+@end example
+@end defopt
+
+@defopt erc-channel-hide-list
+If non, @code{nil}, this is a list of IRC channels and message types
+to hide, e.g.:
+
+@example
+(setq erc-channel-hide-list (("#erc" "JOIN" "PART" "QUIT")
+("#emacs" "NICK"))
+@end example
+@end defopt
+
 @defopt erc-lurker-hide-list
 Like @code{erc-hide-list}, but only applies to messages sent by
 lurkers.  The function @code{erc-lurker-p} determines whether a given
index fdd0c874bada4f577139e8a1666d1032ca4eadb8..7ad85bae5b23c78da567683dcd132a429508fc8d 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -165,7 +165,7 @@ buffers to allow certain parts of the text to be writable.
 ** A new function `directory-files-recursively' returns all matching
 files (recursively) under a directory.
 
-** The new `directory-name-p' can be used to check whether a file
+** The new function `directory-name-p' can be used to check whether a file
 name (as returned from, for instance, `file-name-all-completions' is
 a directory file name.  It returns non-nil if the last character in
 the name is a forward slash.
@@ -249,6 +249,13 @@ Unicode standards.
 
 ** The `save-place' variable is replaced by a `save-place-mode'.
 
+** ERC
+
+*** Hide message types by network or channel. `erc-hide-list' will
+hide all messages of the specified type, where `erc-network-hide-list'
+and `erc-channel-hide-list' will only hide the specified message types
+for the respective specified targets.
+
 ** Midnight-mode
 *** `midnight-mode' is a proper minor mode.
 *** clean-buffer-*-regexps can now specify buffers via predicate functions.
@@ -585,8 +592,8 @@ nil to disable this.
 fitting for use in money calculations; factorial works with
 non-integer inputs.
 
-** HideIfDef mode now support full C/C++ expressions, argumented macro expansions
-interactive macro evaluation and automatic scanning of #defined symbols.
+** HideIfDef mode now support full C/C++ expressions, argumented macro expansions,
+interactive macro evaluation and automatic scanning of #defined symbols.
 
 *** New custom variable `hide-ifdef-header-regexp' to define C/C++ header file
 name patterns. Default case-insensitive .h, .hh, .hpp and .hxx.
@@ -675,6 +682,20 @@ command line's password prompt.
 *** The new built-in command `clear' can scroll window contents out of sight.
 If provided with an optional non-nil argument, the scrollback contents will be cleared.
 
+*** New buffer syntax '#<buffer-name>', which is equivalent to
+'#<buffer buffer-name>'.  This shorthand makes interacting with
+buffers from eshell more convenient.  Custom variable
+`eshell-buffer-shorthand', which has been broken for a while, has been
+removed.
+
+*** By default, eshell "visual" program buffers (created by
+`eshell-visual-commands' and similar custom vars) are no longer killed
+when their processes die.  This fixes issues with short-lived commands
+and makes visual programs more useful in general.  For example, if
+"git log" is a visual command, it will always show the visual command
+buffer, even if the "git log" process dies.  For the old behavior,
+make the new option `eshell-destroy-buffer-when-process-dies' non-nil.
+
 ** Browse-url
 
 *** Support for the Conkeror web browser.
@@ -720,6 +741,10 @@ a typographically-correct documents.
 \f
 * Incompatible Lisp Changes in Emacs 25.1
 
+** The optional `predicate' argument of `lisp-complete-symbol' no longer
+has any effect.  (This change was made in Emacs 24.4 but was not
+advertised at the time.)
+
 ** `indirect-function' does not signal `void-function' any more.
 This is mostly a bug-fix, since this change was missed back in 24.4 when
 symbol-function was changed not to signal `void-function' any more.
@@ -737,7 +762,7 @@ If you want the old behavior of calling the function in the buffer
 from which the minibuffer was entered, call it with the new argument
 `switch-buffer'.
 
-** window-configurations no longer record the buffers's marks.
+** window-configurations no longer record the buffers' marks.
 
 ** inhibit-modification-hooks now also inhibits lock-file checks, as well as
 active region handling.
@@ -942,6 +967,11 @@ fullwidth frames, the behavior may depend on the toolkit used.
 windows without "fixing" it.  It's supported by `fit-window-to-buffer',
 `temp-buffer-resize-mode' and `display-buffer'.
 
++++
+** New option `switch-to-buffer-in-dedicated-window' allows to customize
+how `switch-to-buffer' proceeds interactively when the selected window
+is strongly dedicated to its buffer.
+
 ** Tearoff menus and detachable toolbars for Gtk+ has been removed.
 Those features have been deprecated in Gtk+ for a long time.
 
index 806275f5b1d90fb8fb038cbfa1a22c5cab238ab0..357ebc736abe1619aa282bc72ffd616702cac4b4 100644 (file)
@@ -107,13 +107,13 @@ char *w32_getenv (char *);
 /* Name used to invoke this program.  */
 const char *progname;
 
-/* The second argument to main. */
+/* The second argument to main.  */
 char **main_argv;
 
 /* Nonzero means don't wait for a response from Emacs.  --no-wait.  */
 int nowait = 0;
 
-/* Nonzero means don't print messages for successful operations.  --quiet. */
+/* Nonzero means don't print messages for successful operations.  --quiet.  */
 int quiet = 0;
 
 /* Nonzero means args are expressions to be evaluated.  --eval.  */
@@ -131,7 +131,7 @@ const char *alt_display = NULL;
 /* The parent window ID, if we are opening a frame via XEmbed.  */
 char *parent_id = NULL;
 
-/* Nonzero means open a new Emacs frame on the current terminal. */
+/* Nonzero means open a new Emacs frame on the current terminal.  */
 int tty = 0;
 
 /* If non-NULL, the name of an editor to fallback to if the server
@@ -148,7 +148,7 @@ const char *server_file = NULL;
 int emacs_pid = 0;
 
 /* If non-NULL, a string that should form a frame parameter alist to
-   be used for the new frame */
+   be used for the new frame */
 const char *frame_parameters = NULL;
 
 static _Noreturn void print_help_and_exit (void);
index 7bacbd3e61933aaef41a5d77fe876b41f519a75a..28729da87200a86aeb3e040984909c0f642b90d7 100644 (file)
@@ -116,6 +116,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
 # undef HAVE_NTGUI
 # undef  DOS_NT
 # define DOS_NT
+# define O_CLOEXEC O_NOINHERIT
 #endif /* WINDOWSNT */
 
 #include <unistd.h>
@@ -125,6 +126,7 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
 #include <sysstdio.h>
 #include <ctype.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <binary-io.h>
@@ -336,6 +338,7 @@ static char *absolute_filename (char *, char *);
 static char *absolute_dirname (char *, char *);
 static bool filename_is_absolute (char *f);
 static void canonicalize_filename (char *);
+static char *etags_mktmp (void);
 static void linebuffer_init (linebuffer *);
 static void linebuffer_setlen (linebuffer *, int);
 static void *xmalloc (size_t);
@@ -1437,7 +1440,7 @@ process_file_name (char *file, language *lang)
   fdesc *fdp;
   compressor *compr;
   char *compressed_name, *uncompressed_name;
-  char *ext, *real_name;
+  char *ext, *real_name, *tmp_name;
   int retval;
 
   canonicalize_filename (file);
@@ -1522,9 +1525,20 @@ process_file_name (char *file, language *lang)
     }
   if (real_name == compressed_name)
     {
-      char *cmd = concat (compr->command, " ", real_name);
-      inf = popen (cmd, "r" FOPEN_BINARY);
-      free (cmd);
+      tmp_name = etags_mktmp ();
+      if (!tmp_name)
+       inf = NULL;
+      else
+       {
+         char *cmd1 = concat (compr->command, " ", real_name);
+         char *cmd = concat (cmd1, " > ", tmp_name);
+         free (cmd1);
+         if (system (cmd) == -1)
+           inf = NULL;
+         else
+           inf = fopen (tmp_name, "r" FOPEN_BINARY);
+         free (cmd);
+       }
     }
   else
     inf = fopen (real_name, "r" FOPEN_BINARY);
@@ -1536,10 +1550,12 @@ process_file_name (char *file, language *lang)
 
   process_file (inf, uncompressed_name, lang);
 
+  retval = fclose (inf);
   if (real_name == compressed_name)
-    retval = pclose (inf);
-  else
-    retval = fclose (inf);
+    {
+      remove (tmp_name);
+      free (tmp_name);
+    }
   if (retval < 0)
     pfatal (file);
 
@@ -1707,9 +1723,6 @@ find_entries (FILE *inf)
        }
     }
 
-  /* We rewind here, even if inf may be a pipe.  We fail if the
-     length of the first line is longer than the pipe block size,
-     which is unlikely. */
   rewind (inf);
 
   /* Else try to guess the language given the case insensitive file name. */
@@ -1734,8 +1747,6 @@ find_entries (FILE *inf)
       if (old_last_node == last_node)
        /* No Fortran entries found.  Try C. */
        {
-         /* We do not tag if rewind fails.
-            Only the file name will be recorded in the tags file. */
          rewind (inf);
          curfdp->lang = get_language_from_langname (cplusplus ? "c++" : "c");
          find_entries (inf);
@@ -5015,8 +5026,6 @@ TEX_mode (FILE *inf)
       TEX_opgrp = '<';
       TEX_clgrp = '>';
     }
-  /* If the input file is compressed, inf is a pipe, and rewind may fail.
-     No attempt is made to correct the situation. */
   rewind (inf);
 }
 
@@ -6344,6 +6353,51 @@ etags_getcwd (void)
   return path;
 }
 
+/* Return a newly allocated string containing a name of a temporary file.  */
+static char *
+etags_mktmp (void)
+{
+  const char *tmpdir = getenv ("TMPDIR");
+  const char *slash = "/";
+
+#if MSDOS || defined (DOS_NT)
+  if (!tmpdir)
+    tmpdir = getenv ("TEMP");
+  if (!tmpdir)
+    tmpdir = getenv ("TMP");
+  if (!tmpdir)
+    tmpdir = ".";
+  if (tmpdir[strlen (tmpdir) - 1] == '/'
+      || tmpdir[strlen (tmpdir) - 1] == '\\')
+    slash = "";
+#else
+  if (!tmpdir)
+    tmpdir = "/tmp";
+  if (tmpdir[strlen (tmpdir) - 1] == '/')
+    slash = "";
+#endif
+
+  char *templt = concat (tmpdir, slash, "etXXXXXX");
+  int fd = mkostemp (templt, O_CLOEXEC);
+  if (fd < 0)
+    {
+      free (templt);
+      templt = NULL;
+    }
+  else
+    close (fd);
+
+#if defined (DOS_NT)
+  /* The file name will be used in shell redirection, so it needs to have
+     DOS-style backslashes, or else the Windows shell will barf.  */
+  char *p;
+  for (p = templt; *p; p++)
+    if (*p == '/')
+      *p = '\\';
+#endif
+  return templt;
+}
+
 /* Return a newly allocated string containing the file name of FILE
    relative to the absolute directory DIR (which should end with a slash). */
 static char *
@@ -6484,7 +6538,6 @@ static void
 canonicalize_filename (register char *fn)
 {
   register char* cp;
-  char sep = '/';
 
 #ifdef DOS_NT
   /* Canonicalize drive letter case.  */
@@ -6492,19 +6545,33 @@ canonicalize_filename (register char *fn)
   if (fn[0] != '\0' && fn[1] == ':' && ISUPPER (fn[0]))
     fn[0] = lowcase (fn[0]);
 
-  sep = '\\';
-#endif
+  /* Collapse multiple forward- and back-slashes into a single forward
+     slash. */
+  for (cp = fn; *cp != '\0'; cp++, fn++)
+    if (*cp == '/' || *cp == '\\')
+      {
+       *fn = '/';
+       while (cp[1] == '/' || cp[1] == '\\')
+         cp++;
+      }
+    else
+      *fn = *cp;
 
-  /* Collapse multiple separators into a single slash. */
+#else  /* !DOS_NT */
+
+  /* Collapse multiple slashes into a single slash. */
   for (cp = fn; *cp != '\0'; cp++, fn++)
-    if (*cp == sep)
+    if (*cp == '/')
       {
        *fn = '/';
-       while (cp[1] == sep)
+       while (cp[1] == '/')
          cp++;
       }
     else
       *fn = *cp;
+
+#endif /* !DOS_NT */
+
   *fn = '\0';
 }
 
index 457c1511af85ab4cd97af1cb115c2be30cdbb1bc..bc5267aadba8c93147cbbfa952228c04b760faa2 100644 (file)
        * mouse.el (mouse-yank-primarY): Look for frame-type w32, not
        system-type windows-nt.
 
-       * server.el (server-create-window-system-frame): Look for window
-       type.
+       * server.el (server-create-window-system-frame): Look for window type.
        (server-proces-filter): Only force a window system when windows-nt
        _and_ w32.  Explain why.
 
index 164cd3192ac278700560a387209961a6da8f2aaa..3c71a810bfb86f1b2ad87a2e71c8ed8d6051261a 100644 (file)
@@ -348,7 +348,7 @@ to `allout-body-modification-handler', and is always reset by
 images with lists containing the name of the icon directory (as
 found on the `load-path') and the icon name.
 
-Set this variable to `nil' to empty the cache, and have it replenish from the
+Set this variable to nil to empty the cache, and have it replenish from the
 filesystem.")
 ;;;_    = allout-widgets-unset-inhibit-read-only
 (defvar allout-widgets-unset-inhibit-read-only nil
index 2cdac99f90a8ed7e863c4ac3fe4010b7c00c3dbe..dcdd35eb488ae6ba928dd8189e8e2a8704a12a54 100644 (file)
@@ -322,7 +322,7 @@ With value nil, inhibit any automatic allout-mode activation."
   "Default allout outline layout specification.
 
 This setting specifies the outline exposure to use when
-`allout-layout' has the local value `t'.  This docstring describes the
+`allout-layout' has the local value t.  This docstring describes the
 layout specifications.
 
 A list value specifies a default layout for the current buffer,
@@ -933,7 +933,7 @@ followed by the equivalent of `(allout-expose-topic 0 : -1 -1 0)'.
 \(This is the layout used for the allout.el source file.)
 
 `allout-default-layout' describes the specification format.
-`allout-layout' can additionally have the value `t', in which
+`allout-layout' can additionally have the value t, in which
 case the value of `allout-default-layout' is used.")
 (make-variable-buffer-local 'allout-layout)
 ;;;###autoload
index 357916c6b4d7dcacb7431a618f1c3e713b96c6ec..2ff7c0115f347f26afcb990474766987e91d892b 100644 (file)
@@ -1,4 +1,4 @@
-;;; autorevert.el --- revert buffers when files on disk change
+;;; autorevert.el --- revert buffers when files on disk change  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997-1999, 2001-2015 Free Software Foundation, Inc.
 
@@ -95,7 +95,7 @@
 ;; mode.  For example, the following line will activate Auto-Revert
 ;; Mode in all C mode buffers:
 ;;
-;; (add-hook 'c-mode-hook 'turn-on-auto-revert-mode)
+;; (add-hook 'c-mode-hook #'turn-on-auto-revert-mode)
 
 ;;; Code:
 
@@ -260,10 +260,9 @@ buffers.  CPU usage depends on the version control system."
   :type 'boolean
   :version "22.1")
 
-(defvar global-auto-revert-ignore-buffer nil
+(defvar-local global-auto-revert-ignore-buffer nil
   "When non-nil, Global Auto-Revert Mode will not revert this buffer.
 This variable becomes buffer local when set in any fashion.")
-(make-variable-buffer-local 'global-auto-revert-ignore-buffer)
 
 (defcustom auto-revert-remote-files nil
   "If non-nil remote files are also reverted."
@@ -315,9 +314,9 @@ the list of old buffers.")
   "Position of last known end of file.")
 
 (add-hook 'find-file-hook
-         (lambda ()
-           (set (make-local-variable 'auto-revert-tail-pos)
-                (nth 7 (file-attributes buffer-file-name)))))
+         (lambda ()
+           (setq-local auto-revert-tail-pos
+                        (nth 7 (file-attributes buffer-file-name)))))
 
 (defvar auto-revert-notify-watch-descriptor-hash-list
   (make-hash-table :test 'equal)
@@ -326,15 +325,13 @@ Hash key is a watch descriptor, hash value is a list of buffers
 which are related to files being watched and carrying the same
 default directory.")
 
-(defvar auto-revert-notify-watch-descriptor nil
+(defvar-local auto-revert-notify-watch-descriptor nil
   "The file watch descriptor active for the current buffer.")
-(make-variable-buffer-local 'auto-revert-notify-watch-descriptor)
 (put 'auto-revert-notify-watch-descriptor 'permanent-local t)
 
-(defvar auto-revert-notify-modified-p nil
+(defvar-local auto-revert-notify-modified-p nil
   "Non-nil when file has been modified on the file system.
 This has been reported by a file notification event.")
-(make-variable-buffer-local 'auto-revert-notify-modified-p)
 
 ;; Functions:
 
@@ -370,7 +367,7 @@ without being changed in the part that is already in the buffer."
   "Turn on Auto-Revert Mode.
 
 This function is designed to be added to hooks, for example:
-  (add-hook 'c-mode-hook 'turn-on-auto-revert-mode)"
+  (add-hook 'c-mode-hook #'turn-on-auto-revert-mode)"
   (auto-revert-mode 1))
 
 
@@ -420,8 +417,8 @@ Perform a full revert? ")
       ;; else we might reappend our own end when we save
       (add-hook 'before-save-hook (lambda () (auto-revert-tail-mode 0)) nil t)
       (or (local-variable-p 'auto-revert-tail-pos) ; don't lose prior position
-         (set (make-local-variable 'auto-revert-tail-pos)
-              (nth 7 (file-attributes buffer-file-name))))
+         (setq-local auto-revert-tail-pos
+                      (nth 7 (file-attributes buffer-file-name))))
       ;; let auto-revert-mode set up the mechanism for us if it isn't already
       (or auto-revert-mode
          (let ((auto-revert-tail-mode t))
@@ -434,7 +431,7 @@ Perform a full revert? ")
   "Turn on Auto-Revert Tail mode.
 
 This function is designed to be added to hooks, for example:
-  (add-hook 'my-logfile-mode-hook 'turn-on-auto-revert-tail-mode)"
+  (add-hook 'my-logfile-mode-hook #'turn-on-auto-revert-tail-mode)"
   (auto-revert-tail-mode 1))
 
 
@@ -495,7 +492,7 @@ will use an up-to-date value of `auto-revert-interval'"
           (ignore-errors
             (file-notify-rm-watch auto-revert-notify-watch-descriptor)))))
      auto-revert-notify-watch-descriptor-hash-list)
-    (remove-hook 'kill-buffer-hook 'auto-revert-notify-rm-watch))
+    (remove-hook 'kill-buffer-hook #'auto-revert-notify-rm-watch))
   (setq auto-revert-notify-watch-descriptor nil
        auto-revert-notify-modified-p nil))
 
@@ -508,7 +505,7 @@ will use an up-to-date value of `auto-revert-interval'"
          (file-symlink-p (or buffer-file-name default-directory)))
 
       ;; Fallback to file checks.
-      (set (make-local-variable 'auto-revert-use-notify) nil)
+      (setq-local auto-revert-use-notify nil)
 
     (when (not auto-revert-notify-watch-descriptor)
       (setq auto-revert-notify-watch-descriptor
@@ -530,10 +527,10 @@ will use an up-to-date value of `auto-revert-interval'"
                   (gethash auto-revert-notify-watch-descriptor
                            auto-revert-notify-watch-descriptor-hash-list))
             auto-revert-notify-watch-descriptor-hash-list)
-           (add-hook (make-local-variable 'kill-buffer-hook)
-                     'auto-revert-notify-rm-watch))
+           (add-hook 'kill-buffer-hook
+                     #'auto-revert-notify-rm-watch nil t))
        ;; Fallback to file checks.
-       (set (make-local-variable 'auto-revert-use-notify) nil)))))
+       (setq-local auto-revert-use-notify nil)))))
 
 ;; If we have file notifications, we want to update the auto-revert buffers
 ;; immediately when a notification occurs. Since file updates can happen very
index 23de53e0f0c6fd8e7a74086419607c7370f92547..cc048ebc223c856f58631d05749056c605e0ea39 100644 (file)
@@ -1034,7 +1034,7 @@ in Calc algebraic input.")
 
 (defun math-restore-placeholders (x)
   "Replace placeholders by the proper characters in the symbol x.
-This includes `#' for `_' and `'' for `%'.
+This includes ‘#’ for ‘_’ and ‘'’ for ‘%’.
 If the current Calc language does not use placeholders, return nil."
   (if (or (memq calc-language calc-lang-allow-underscores)
           (memq calc-language calc-lang-allow-percentsigns))
index 726a7202a8ade78aedf2f04389eeabd6d63e02c6..923df5d577f1531d452c7f4172ab51157b78bbdd 100644 (file)
@@ -149,7 +149,7 @@ as well as set the contents of the Emacs register REGISTER to TEXT."
   "Return the CALCVAL portion of the contents of the Calc register REG,
 unless the TEXT portion doesn't match the contents of the Emacs register REG,
 in which case either return the contents of the Emacs register (if it is
-text) or `nil'."
+text) or nil."
   (let ((cval (cdr (assq reg calc-register-alist)))
         (val (cdr (assq reg register-alist))))
     (if (stringp val)
index 1cc11b48ac3c87976c7d5f2a345432b8c8368ccc..52ed5d7eb3d0fa78cfa59db541faade005b10774 100644 (file)
@@ -2034,7 +2034,7 @@ See calc-keypad for details."
 ;; (YEAR MONTH DAY math-date-from-gregorian-dt(YEAR MONTH DAY)) for speed.
 (defcustom calc-gregorian-switch nil
   "The first day the Gregorian calendar is used by Calc's date forms.
-This is `nil' (the default) if the Gregorian calendar is the only one used.
+This is nil (the default) if the Gregorian calendar is the only one used.
 Otherwise, it should be a list `(YEAR MONTH DAY)' when Calc begins to use
 the Gregorian calendar; Calc will use the Julian calendar for earlier dates.
 The dates in which different regions of the world began to use the
index 0aef07b1750160a680f94f1f23a167af025d27b4..4027887fb0789f599e1de13ab349cb5640d5cbf5 100644 (file)
@@ -1203,10 +1203,10 @@ arguments."
     ;; f is an expression
     (let ((TX (and X (calculator-truncate X)))
           (TY (and Y (calculator-truncate Y)))
-          (DX (if (and X calculator-deg) (/ (* X pi) 180) X))
+          (DX (if (and X calculator-deg) (degrees-to-radians X) X))
           (L  calculator-saved-list)
           (fF `(calculator-funcall ',f x y))
-          (fD `(if calculator-deg (/ (* x 180) float-pi) x)))
+          (fD `(if calculator-deg (* radians-to-degrees x) x)))
       (eval `(cl-flet ((F (&optional x y) ,fF) (D (x) ,fD))
                (let ((X ,X) (Y ,Y) (DX ,DX) (TX ,TX) (TY ,TY) (L ',L))
                  ,f))
index e42a0100696d325766fba740a760141ea511c849..1612f48a0193e3a25f1fcaf3b00b89e7179545ac 100644 (file)
@@ -2182,7 +2182,7 @@ in `calendar-month-name-array'.  These abbreviations are used in
 the calendar menu entries, and can also be used in the diary
 file.  Do not include a trailing `.' in the strings specified in
 this variable, though you may use such in the diary file.  By
-default, each string is the first ``calendar-abbrev-length'
+default, each string is the first `calendar-abbrev-length'
 characters of the corresponding full name."
  :group 'calendar
  :set-after '(calendar-abbrev-length calendar-month-name-array)
index 29364b55b6c8235358137438cc57a38947fab381..d5bd26a9277112827b6b2ea3eb92582d002a3362 100644 (file)
@@ -104,9 +104,9 @@ are: `string', `symbol', `int', `tnil', `stringtnil.'"
                        (choice (const string :tag "A string")
                                (const symbol :tag "A symbol")
                                (const int :tag "An integer")
-                               (const tnil :tag "`t' or `nil'")
+                               (const tnil :tag "t or nil")
                                (const stringtnil
-                                      :tag "A string, `t', or `nil'"))))
+                                      :tag "A string, t, or nil"))))
   :group 'diary)
 
 (defcustom diary-glob-file-regexp-prefix "^\\#"
@@ -1671,7 +1671,7 @@ DAY MONTH YEAR in the European style).
 
   %%(diary-date MONTH DAY YEAR &optional MARK) text
     Entry applies if date is MONTH, DAY, YEAR.  DAY, MONTH, and YEAR can
-    be a list of integers, `t' (meaning all values), or an integer.
+    be a list of integers, t (meaning all values), or an integer.
 
   %%(diary-float MONTH DAYNAME N &optional DAY MARK) text
     Entry will appear on the Nth DAYNAME after/before MONTH DAY.
@@ -1679,7 +1679,7 @@ DAY MONTH YEAR in the European style).
     If N>0, use the Nth DAYNAME after MONTH DAY.
     If N<0, use the Nth DAYNAME before MONTH DAY.
     DAY defaults to 1 if N>0, and MONTH's last day otherwise.
-    MONTH can be a list of months, a single month, or `t' to
+    MONTH can be a list of months, a single month, or t to
     specify all months.
 
   %%(diary-block M1 D1 Y1 M2 D2 Y2 &optional MARK) text
@@ -1814,7 +1814,7 @@ form used internally by the calendar and diary."
 (defun diary-date (month day year &optional mark)
   "Specific date(s) diary entry.
 Entry applies if date is MONTH, DAY, YEAR.  Each parameter can be a
-list of integers, `t' (meaning all values), or an integer.  The order
+list of integers, t (meaning all values), or an integer.  The order
 of the input parameters changes according to `calendar-date-style'
 \(e.g. to DAY MONTH YEAR in the European style).
 
@@ -1863,7 +1863,7 @@ DAYNAME=0 means Sunday, DAYNAME=1 means Monday, and so on.
 If N>0, use the Nth DAYNAME after MONTH DAY.
 If N<0, use the Nth DAYNAME before MONTH DAY.
 DAY defaults to 1 if N>0, and MONTH's last day otherwise.
-MONTH can be a list of months, an integer, or `t' (meaning all months).
+MONTH can be a list of months, an integer, or t (meaning all months).
 Optional MARK specifies a face or single-character string to use when
 highlighting the day in the calendar."
   ;; This is messy because the diary entry may apply, but the date on which it
index 25a24eeffeb4cf567ac87b2f1f348f73d09bf987..a2f9d58585a189b5d1ab82abd72e600f0053c5c7 100644 (file)
@@ -346,7 +346,7 @@ If SUNRISE-FLAG is non-nil, only calculate longitude and inclination."
                                    (solar-cosine-degrees (* 2 l)))
                                 (* -0.5 y y  (solar-sin-degrees (* 4 l)))
                                 (* -1.25 ecc ecc (solar-sin-degrees (* 2 m)))))
-                       3.1415926535))))
+                       float-pi))))
     (list app i time-eq nut)))
 
 (defun solar-ephemeris-correction (year)
index bb9316c81d76333a42efa3fc5f1337941abc9a48..7369ec28c290b25673f9f17feef8f167786fd9f3 100644 (file)
@@ -5443,7 +5443,7 @@ dynamically create item insertion commands.")
 The list consists of item insertion parameters that can be passed
 as insertion command arguments in fixed positions.  If a position
 in the list is not occupied by the corresponding parameter, it is
-occupied by `nil'."
+occupied by nil."
   (let* ((arg (list (car todo-insert-item--args)))
         (args (nconc (cdr todo-insert-item--args)
                      (list (car (todo-insert-item--argsleft
index 7e8df6b89afc7f7238cb5dcb9537cfad5976282d..482632f294a4fa8510b2ae423cf95ce48174796f 100644 (file)
@@ -86,7 +86,7 @@ into memory.")
      ;; If the thing to match is stored in a config file.
      ((stringp fc)
       (when (file-exists-p fc)
-       (let ((matchstring 
+       (let ((matchstring
               (if (slot-boundp dirmatch 'configdatastash)
                   (oref dirmatch configdatastash)
                 nil)))
@@ -123,7 +123,7 @@ into memory.")
                   (not (= (match-end 0) (length file))))
               )
          )))
-     
+
      ;; Add new matches here
      ;; ((stringp somenewslot ...)
      ;;   )
@@ -155,9 +155,9 @@ into memory.")
 Specifying this matcher object will allow EDE to perform a complex
 check without loading the project.
 
-NOTE: If you use dirmatch, you may need to set :root-only to `nil'.
+NOTE: If you use dirmatch, you may need to set :root-only to nil.
 While it may be a root based project, all subdirs will happen to return
-true for the dirmatch, so for scanning purposes, set it to `nil'.") 
+true for the dirmatch, so for scanning purposes, set it to nil.")
    (proj-root :initarg :proj-root
              :type function
              :documentation "A function symbol to call for the project root.
@@ -280,7 +280,7 @@ added.  Possible values are:
     (if f
        (and f (file-exists-p f))
       (let ((dirmatch (oref this proj-root-dirmatch)))
-       (cond 
+       (cond
         ((stringp dirmatch)
          nil) ; <- do something here - maybe obsolete the option?
         ((ede-project-autoload-dirmatch-p dirmatch)
@@ -312,7 +312,7 @@ NOTE: Do not call this - it should only be called from `ede-load-project-file'."
 
 
 
-;;; -------- Old Methods 
+;;; -------- Old Methods
 ;; See if we can do without them.
 
 ;; @FIXME - delete from loaddefs to remove this.
index 1922337feb0ffc74d10fbbc8d22a059c8eb01175..4ba823adeee9ce859c3f1c8d06badd337a3b6265 100644 (file)
@@ -41,7 +41,7 @@
 (declare-function ede-locate-flush-hash "ede/locate")
 
 (defvar ede--disable-inode nil
-  "Set to 't' to simulate systems w/out inode support.")
+  "Set to t to simulate systems w/out inode support.")
 
 ;;; Code:
 ;;;###autoload
index b75408f6a9d367a345ac1b7fff778baad7ac4290..b2a2c8c7619d3f2fbc59707dc8e7854a19197405 100644 (file)
@@ -207,7 +207,7 @@ The resulting bookmark is then sorted within the ring."
       )))
 
 (defun semantic-mrub-cache-flush-fcn ()
-  "Function called in the `semantic-before-toplevel-cache-flush-hook`.
+  "Function called in the `semantic-before-toplevel-cache-flush-hook'.
 Cause tags in the ring to become unlinked."
   (let* ((ring (oref semantic-mru-bookmark-ring ring))
         (len (ring-length ring))
index 2c5e3ba1805e1f0a8d95017cf2b732e5a1880eca..ca5dd7dd073a6cfcba8def9e3a5e2916950c390a 100644 (file)
@@ -351,7 +351,7 @@ until the next command is executed."
   (setq semantic-symref-recently-opened-buffers nil)
   (remove-hook 'post-command-hook 'semantic-symref-cleanup-recent-buffers-fcn)
   )
-  
+
 (cl-defmethod semantic-symref-result-get-tags ((result semantic-symref-result)
                                            &optional open-buffers)
   "Get the list of tags from the symref result RESULT.
@@ -512,7 +512,7 @@ buffers that were opened."
    (searchtype :initarg :searchtype
                :type symbol
                :documentation "The type of search to do.
-Values could be `symbol, `regexp, 'tagname, or 'completion.")
+Values could be 'symbol, 'regexp, 'tagname, or 'completion.")
    (searchscope :initarg :searchscope
                :type symbol
                :documentation
index 3ad192b8b8fb5228a65d2241012175e3f22256a1..545ca914d19793a208856aa7698c73b9f1d8c2ef 100644 (file)
@@ -621,7 +621,7 @@ buffer, the originating buffer file name is kept in the `:filename'
 property of the copied tag.
 If KEEP-FILE is a string, and the originating buffer is NOT available,
 then KEEP-FILE is stored on the `:filename' property.
-This runs the tag hook `unlink-copy-hook`."
+This runs the tag hook `unlink-copy-hook'."
   ;; Right now, TAG is a list.
   (let ((copy (semantic-tag-clone tag name)))
 
@@ -958,7 +958,7 @@ Return nil if TAG is not of class 'alias."
   "Return a list of components for TAG.
 A Component is a part of TAG which itself may be a TAG.
 Examples include the elements of a structure in a
-tag of class `type, or the list of arguments to a
+tag of class 'type, or the list of arguments to a
 tag of class 'function."
   )
 
index ec92ae30ba6bbbd22a71687d6efcefb3f6b6edd4..e77e05c40b96530a676254f07b55df8f92c3895e 100644 (file)
@@ -84,7 +84,7 @@ HEADER - Shown section if in a header file."
 ;;;###autoload
 (defun srecode-semantic-handle-:cpp (dict)
   "Add macros into the dictionary DICT based on the current c file.
-Calls `srecode-semantic-handle-:c.
+Calls `srecode-semantic-handle-:c'.
 Also adds the following:
  - nothing -"
   (srecode-semantic-handle-:c dict)
index 5c3f21c32a2ddcf862bd56e099963a5d251911e9..be75f3765c1b4da68220cda99fe6daff2a1c6ffd 100644 (file)
@@ -241,11 +241,11 @@ This is to take advantage of TeXinfo's markup symbols."
 For instances where CLASS is the class being referenced, do not Xref
 that class.
 
`function' => @dfn{function}
`variable' => @code{variable}
`class'    => @code{class} @xref{class}
`unknown'  => @code{unknown}
- \"text\"     => ``text''
function   => @dfn{function}
variable   => @code{variable}
class      => @code{class} @xref{class}
unknown    => @code{unknown}
+ \" text \"   => `` text ''
  'quoteme   => @code{quoteme}
  non-nil    => non-@code{nil}
  t          => @code{t}
index 9f57d0da24a3d6ccf4057f37c2abbe6e6265858b..1d9a9d6d42663e46fb457b9d4c900c22323cf401 100644 (file)
@@ -1965,7 +1965,7 @@ Each entry is of the form (STATE MAGIC FACE ITEM-DESC [ GROUP-DESC ]), where
 
 STATE is one of the following symbols:
 
-`nil'
+nil
    For internal use, should never occur.
 `unknown'
    For internal use, should never occur.
index 4dcb519b039e09f9d159b132cf55366ec5449239..18a3c887aadb193a20f911b3e47c8c393a0e2b2f 100644 (file)
@@ -2257,7 +2257,7 @@ of marked files.  If KILL-ROOT is non-nil, kill DIRNAME as well."
   ;;   components are string-lessp.
   ;; Thus ("/usr/" "/usr/bin") and ("/usr/a/" "/usr/b/") are tree-lessp.
   ;; string-lessp could arguably be replaced by file-newer-than-file-p
-  ;;   if dired-actual-switches contained `t'.
+  ;;   if dired-actual-switches contained t.
   (setq dir1 (file-name-as-directory dir1)
        dir2 (file-name-as-directory dir2))
   (let ((components-1 (dired-split "/" dir1))
index ca13900f6818f2ab7946a3c2afa705912cf81df6..e523b9412950842888157ad2485103b4834f8384 100644 (file)
@@ -3889,7 +3889,7 @@ Ask means pop up a menu for the user to select one of copy, move or link."
 \f
 ;;; Start of automatically extracted autoloads.
 \f
-;;;### (autoloads nil "dired-aux" "dired-aux.el" "8820677763cb69eef827e38b86d35f47")
+;;;### (autoloads nil "dired-aux" "dired-aux.el" "45867cb96abef86d29a9850ee2113cf2")
 ;;; Generated autoloads from dired-aux.el
 
 (autoload 'dired-diff "dired-aux" "\
index d1957a259b188ad768c20333e028a7a064d77a91..d1c46dd85503957e007336c43cceb77ad3c022ca 100644 (file)
@@ -51,7 +51,7 @@
 ;; which matches your prompt up to and including the pathname part.
 ;; The second is a number which tells which regular expression group to
 ;; match to extract only the pathname.  If you use a multi-line prompt,
-;; add 't' as a third element.  Note that some of the functions in
+;; add t as a third element.  Note that some of the functions in
 ;; 'comint.el' assume a single-line prompt (eg, comint-bol).
 ;;
 ;; Determining this information may take some experimentation.  Using
index 212ae909866dcdc3bd2fa8aa06fe3257e23fa487..907f03bde45dc02afe9a8347837d16dc9208a597 100644 (file)
@@ -2149,7 +2149,6 @@ the cache-id will clear the cache."
 
 (defun ad-arglist (definition)
   "Return the argument list of DEFINITION."
-  (require 'help-fns)
   (help-function-arglist
    (if (or (macrop definition) (ad-advice-p definition))
        (cdr definition)
@@ -2474,8 +2473,6 @@ Example: `(ad-map-arglists '(a &rest args) '(w x y z))' will return
                       (capitalize (symbol-name class))
                       (ad-advice-name advice)))))))
 
-(require 'help-fns)        ;For help-split-fundoc and help-add-fundoc-usage.
-
 (defun ad--make-advised-docstring (function &optional style)
   "Construct a documentation string for the advised FUNCTION.
 Concatenate the original documentation with the documentation
index 206d5bb44346ad816f4ded79576595bb51067b5b..a6fefebf3f54505e2dd7eed1cd1034406390a306 100644 (file)
@@ -32,7 +32,6 @@
 
 (require 'lisp-mode)                   ;for `doc-string-elt' properties.
 (require 'lisp-mnt)
-(require 'help-fns)                    ;for help-add-fundoc-usage.
 (eval-when-compile (require 'cl-lib))
 
 (defvar generated-autoload-file nil
index 06a11063025d8299c8a91a55878ea1b9004dcc3b..30147931adc78e0c7329e36b0dbc59534df516bd 100644 (file)
               (cons fn args)))))))
 
 (defun byte-optimize-all-constp (list)
-  "Non-nil if all elements of LIST satisfy `macroexp-const-p"
+  "Non-nil if all elements of LIST satisfy `macroexp-const-p'."
   (let ((constant t))
     (while (and list constant)
       (unless (macroexp-const-p (car list))
         window-left-child window-left-column window-margins window-minibuffer-p
         window-next-buffers window-next-sibling window-new-normal
         window-new-total window-normal-size window-parameter window-parameters
-        window-parent window-pixel-edges window-point window-prev-buffers 
+        window-parent window-pixel-edges window-point window-prev-buffers
         window-prev-sibling window-redisplay-end-trigger window-scroll-bars
         window-start window-text-height window-top-child window-top-line
         window-total-height window-total-width window-use-time window-vscroll
index 67744c69b14594f53e323facf3f1a26d3fced137..efd43898b60c3c1350a27466d07ecf31150a6994 100644 (file)
@@ -348,7 +348,7 @@ else the global value will be modified."
 ;;;###autoload
 (defun byte-compile-enable-warning (warning)
   "Change `byte-compile-warnings' to enable WARNING.
-If `byte-compile-warnings' is `t', do nothing.  Otherwise, if the
+If `byte-compile-warnings' is t, do nothing.  Otherwise, if the
 first element is `not', remove WARNING, else add it.
 Normally you should let-bind `byte-compile-warnings' before calling this,
 else the global value will be modified."
index 7269b83b61917fec0b18473d8dd6bc35ecb19e24..ecdb6d8983c0ed2f1333088783f19291350f08ec 100644 (file)
@@ -98,7 +98,7 @@ don't know how to recognize (e.g. some macros)."
                  (stringp (setq fnfile (nth 2 form)))
                  (setq fnfile (check-declare-locate fnfile
                                                     (expand-file-name file)))
-                 ;; Use `t' to distinguish unspecified arglist from empty one.
+                 ;; Use t to distinguish unspecified arglist from empty one.
                  (or (eq t (setq arglist (if (> len 3)
                                              (nth 3 form)
                                            t)))
index 777fed082d9b7b04ce5e6232de0ba8f1863a9e2b..18361c8888f5f145f763d86f622765586c2f3732 100644 (file)
@@ -1615,8 +1615,8 @@ function,command,variable,option or symbol." ms1))))))
            (or
             ;; * The documentation string for a variable that is a
             ;;   yes-or-no flag should start with words such as Non-nil
-            ;;   means..., to make it clear that all non-`nil' values are
-            ;;   equivalent and indicate explicitly what `nil' and non-`nil'
+            ;;   means..., to make it clear that all non-nil values are
+            ;;   equivalent and indicate explicitly what nil and non-nil
             ;;   mean.
             ;; * If a user option variable records a true-or-false
             ;;   condition, give it a name that ends in `-flag'.
@@ -2405,7 +2405,7 @@ Argument END is the maximum bounds to search in."
 According to the documentation for the function `error', the error list
 should not end with a period, and should start with a capital letter.
 The function `y-or-n-p' has similar constraints.
-Argument TYPE specifies the type of question, such as `error or `y-or-n-p."
+Argument TYPE specifies the type of question, such as `error' or `y-or-n-p'."
   ;; If type is nil, then attempt to derive it.
   (if (not type)
       (save-excursion
@@ -2613,9 +2613,12 @@ function called to create the messages."
                     (count-lines (point-min) (or point (point-min))))
                    ": " msg)))
     (with-current-buffer (get-buffer checkdoc-diagnostic-buffer)
-      (goto-char (point-max))
-      (let ((inhibit-read-only t))
-        (apply #'insert text)))))
+      (let ((inhibit-read-only t)
+            (pt (point-max)))
+        (goto-char pt)
+        (apply #'insert text)
+        (when noninteractive
+          (warn (buffer-substring pt (point-max))))))))
 
 (defun checkdoc-show-diagnostics ()
   "Display the checkdoc diagnostic buffer in a temporary window."
index a2716ef87eed921bfb8a22c7787dc0f7df242e9b..b3c127f48f748c332dc1a13a458b36198c676e52 100644 (file)
@@ -237,14 +237,19 @@ BODY, if present, is used as the body of a default method.
                (`(,spec-args . ,_) (cl--generic-split-args args))
                (mandatory (mapcar #'car spec-args))
                (apo (assq :argument-precedence-order options)))
-    (setf (cl--generic-dispatches generic) nil)
+    (unless (fboundp name)
+      ;; If the generic function was fmakunbound, throw away previous methods.
+      (setf (cl--generic-dispatches generic) nil)
+      (setf (cl--generic-method-table generic) nil))
     (when apo
       (dolist (arg (cdr apo))
         (let ((pos (memq arg mandatory)))
           (unless pos (error "%S is not a mandatory argument" arg))
-          (push (list (- (length mandatory) (length pos)))
-                (cl--generic-dispatches generic)))))
-    (setf (cl--generic-method-table generic) nil)
+          (let* ((argno (- (length mandatory) (length pos)))
+                 (dispatches (cl--generic-dispatches generic))
+                 (dispatch (or (assq argno dispatches) (list argno))))
+            (setf (cl--generic-dispatches generic)
+                  (cons dispatch (delq dispatch dispatches)))))))
     (setf (cl--generic-options generic) options)
     (cl--generic-make-function generic)))
 
@@ -438,16 +443,14 @@ which case this method will be invoked when the argument is `eql' to VAL.
           ;; the generic function.
           current-load-list)
       ;; For aliases, cl--generic-name gives us the actual name.
-      (funcall
-       (if purify-flag
-           ;; BEWARE!  Don't purify this function definition, since that leads
-           ;; to memory corruption if the hash-tables it holds are modified
-           ;; (the GC doesn't trace those pointers).
-           #'fset
-         ;; But do use `defalias' in the normal case, so that it interacts
-         ;; properly with nadvice, e.g. for tracing/debug-on-entry.
-         #'defalias)
-       (cl--generic-name generic) gfun))))
+      (let ((purify-flag
+             ;; BEWARE!  Don't purify this function definition, since that leads
+             ;; to memory corruption if the hash-tables it holds are modified
+             ;; (the GC doesn't trace those pointers).
+             nil))
+        ;; But do use `defalias', so that it interacts properly with nadvice,
+        ;; e.g. for tracing/debug-on-entry.
+        (defalias (cl--generic-name generic) gfun)))))
 
 (defmacro cl--generic-with-memoization (place &rest code)
   (declare (indent 1) (debug t))
@@ -525,7 +528,7 @@ which case this method will be invoked when the argument is `eql' to VAL.
           (progn
             (while (and dispatches
                         (let ((x (nth 1 (car dispatches))))
-                          ;; No need to dispatch for `t' specializers.
+                          ;; No need to dispatch for t specializers.
                           (or (null x) (equal x cl--generic-t-generalizer))))
               (setq dispatches (cdr dispatches)))
             (pop dispatches))))
@@ -701,10 +704,15 @@ methods.")
       #'cl--generic-standard-method-combination)
 
 (cl-defmethod cl-generic-generalizers (specializer)
-  "Support for the catch-all `t' specializer."
+  "Support for the catch-all t specializer."
   (if (eq specializer t) (list cl--generic-t-generalizer)
     (error "Unknown specializer %S" specializer)))
 
+(eval-when-compile
+  ;; This macro is brittle and only really important in order to be
+  ;; able to preload cl-generic without also preloading the byte-compiler,
+  ;; So we use `eval-when-compile' so as not keep it available longer than
+  ;; strictly needed.
 (defmacro cl--generic-prefill-dispatchers (arg-or-context specializer)
   (unless (integerp arg-or-context)
     (setq arg-or-context `(&context . ,arg-or-context)))
@@ -722,7 +730,7 @@ methods.")
                        ,@(cl-generic-generalizers ',specializer)
                        ,cl--generic-t-generalizer)))
        ;; (message "Prefilling for %S with \n%S" dispatch ',fun)
-       (puthash dispatch ',fun cl--generic-dispatchers))))
+       (puthash dispatch ',fun cl--generic-dispatchers)))))
 
 (cl-defmethod cl-generic-combine-methods (generic methods)
   "Standard support for :after, :before, :around, and `:extra NAME' qualifiers."
@@ -796,8 +804,6 @@ Can only be used from within the lexical body of a primary or around method."
         specializers qualifiers
         (cl--generic-method-table (cl--generic generic)))))
 
-(defalias 'cl-method-qualifiers 'cl--generic-method-qualifiers)
-
 ;;; Add support for describe-function
 
 (defun cl--generic-search-method (met-name)
@@ -850,6 +856,9 @@ Can only be used from within the lexical body of a primary or around method."
 
 (add-hook 'help-fns-describe-function-functions #'cl--generic-describe)
 (defun cl--generic-describe (function)
+  ;; Supposedly this is called from help-fns, so help-fns should be loaded at
+  ;; this point.
+  (declare-function help-fns-short-filename "help-fns" (filename))
   (let ((generic (if (symbolp function) (cl--generic function))))
     (when generic
       (require 'help-mode)              ;Needed for `help-function-def' button!
index 5e75406cf22637efe718b5fecf3dfd43c6ebe010..57da7159d5c2f777c43783815110cffe14ff8fc3 100644 (file)
@@ -140,13 +140,13 @@ If non-nil, alignment is done with the first parameter
 
 (defcustom lisp-indent-backquote-substitution-mode t
   "How to indent substitutions in backquotes.
-If `t', the default, indent substituted forms normally.
-If `nil', do not apply special indentation rule to substituted
+If t, the default, indent substituted forms normally.
+If nil, do not apply special indentation rule to substituted
 forms.  If `corrected', subtract the `,' or `,@' from the form
 column, indenting as if this character sequence were not present.
 In any case, do not backtrack beyond a backquote substitution.
 
-Until Emacs 25.1, the `nil' behavior was hard-wired."
+Until Emacs 25.1, the nil behavior was hard-wired."
   :version "25.1"
   :type '(choice (const corrected) (const nil) (const t))
   :group 'lisp-indent)
index 5bab84ed312aa962c1408eb2bc15ea2bbc39b6d1..27d3da3dca49e1eaba3a4941b407fc665f02ec30 100644 (file)
@@ -294,7 +294,6 @@ FORM is of the form (ARGS . BODY)."
                       ;; apparently harmless computation, so it should not
                       ;; touch the match-data.
                       (save-match-data
-                        (require 'help-fns)
                         (cons (help-add-fundoc-usage
                                (if (stringp (car header)) (pop header))
                                ;; Be careful with make-symbol and (back)quote,
index 9d32ba241debb9a078088f3857a4383cfb51870f..77d6332feee63981d7bf56cf914141aa07012d3a 100644 (file)
@@ -54,7 +54,7 @@ the middle is discarded, and just the beginning and end are displayed."
 The value affects the behavior of operations on any window
 previously showing the debugger buffer.
 
-`nil' means that if its window is not deleted when exiting the
+nil means that if its window is not deleted when exiting the
   debugger, invoking `switch-to-prev-buffer' will usually show
   the debugger buffer again.
 
index 98fb7e9888c7f06f446bc980398cafad2100d075..b5da3cc21747d3a29d726735ead1ac29861c256d 100644 (file)
@@ -600,7 +600,7 @@ list of a symbol.")
 (defun edebug-get-form-data-entry (pnt &optional end-point)
   ;; Find the edebug form data entry which is closest to PNT.
   ;; If END-POINT is supplied, match must be exact.
-  ;; Return `nil' if none found.
+  ;; Return nil if none found.
   (let ((rest edebug-form-data)
        closest-entry
        (closest-dist 999999))  ;; Need maxint here.
index 317e5a6fd3f58645e3c9f679ec43abdb28c03466..fc66c82c81df971cbd8e2f8043a7f68da43c5615 100644 (file)
@@ -46,8 +46,6 @@
 
 ;;; Code:
 
-(require 'help-fns)
-
 (defgroup elint nil
   "Linting for Emacs Lisp."
   :prefix "elint-"
index 8251682590e5f662b58001eb753e2149b2c1b1d9..08e1b7c27a9c5531ed7f291ed549ea00914328ec 100644 (file)
@@ -90,7 +90,7 @@
   ;; Change this function to use `cl-gensym' if you want the generated
   ;; code to be easier to read and debug.
   ;; (cl-gensym (apply #'format fmt args))
-  `(make-symbol ,fmt))
+  `(progn (ignore ,@args) (make-symbol ,fmt)))
 
 (defvar cps--dynamic-wrappers '(identity)
   "List of transformer functions to apply to atomic forms we
@@ -308,14 +308,14 @@ don't yield.")
                           collect (if (symbolp binding)
                                       (list binding nil)
                                     binding)))
-             (temps (cl-loop for (var value-form) in bindings
+             (temps (cl-loop for (var _value-form) in bindings
                        collect (cps--add-binding var))))
         (cps--transform-1
          `(let* ,(append
-                  (cl-loop for (var value-form) in bindings
+                  (cl-loop for (_var value-form) in bindings
                      for temp in temps
                      collect (list temp value-form))
-                  (cl-loop for (var binding) in bindings
+                  (cl-loop for (var _binding) in bindings
                      for temp in temps
                      collect (list var temp)))
             ,@body)
@@ -704,7 +704,7 @@ of values.  Callers can retrieve each value using `iter-next'."
 
 (defun iter-next (iterator &optional yield-result)
   "Extract a value from an iterator.
-YIELD-RESULT becomes the return value of `iter-yield` in the
+YIELD-RESULT becomes the return value of `iter-yield' in the
 context of the generator.
 
 This routine raises the `iter-end-of-sequence' condition if the
index 108d5ccb0e300f6a9b4b427bb23216fa52691029..6facf576055213037f5be707320380ba51387a70 100644 (file)
                              (match-beginning 0)))))
          (throw 'found t))))))
 
-(pcase-let
-    ((`(,vdefs ,tdefs
-        ,el-defs-re ,cl-defs-re
-        ,el-kws-re  ,cl-kws-re
-        ,el-errs-re ,cl-errs-re)
-      (eval-when-compile
-        (let ((lisp-fdefs '("defmacro" "defsubst" "defun"))
-              (lisp-vdefs '("defvar"))
-              (lisp-kw '("cond" "if" "while" "let" "let*" "progn" "prog1"
-                         "prog2" "lambda" "unwind-protect" "condition-case"
-                         "when" "unless" "with-output-to-string"
-                         "ignore-errors" "dotimes" "dolist" "declare"))
-              (lisp-errs '("warn" "error" "signal"))
-              ;; Elisp constructs.  Now they are update dynamically
-              ;; from obarray but they are also used for setting up
-              ;; the keywords for Common Lisp.
-              (el-fdefs '("define-advice" "defadvice" "defalias"
-                          "define-derived-mode" "define-minor-mode"
-                          "define-generic-mode" "define-global-minor-mode"
-                          "define-globalized-minor-mode" "define-skeleton"
-                          "define-widget"))
-              (el-vdefs '("defconst" "defcustom" "defvaralias" "defvar-local"
-                          "defface"))
-              (el-tdefs '("defgroup" "deftheme"))
-              (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive"
-                       "pcase-lambda" "pcase-let" "pcase-let*" "save-restriction"
-                       "save-excursion" "save-selected-window"
-                       ;; "eval-after-load" "eval-next-after-load"
-                       "save-window-excursion" "save-current-buffer"
-                       "save-match-data" "combine-after-change-calls"
-                       "condition-case-unless-debug" "track-mouse"
-                       "eval-and-compile" "eval-when-compile" "with-case-table"
-                       "with-category-table" "with-coding-priority"
-                       "with-current-buffer" "with-demoted-errors"
-                       "with-electric-help" "with-eval-after-load"
-                       "with-file-modes"
-                       "with-local-quit" "with-no-warnings"
-                       "with-output-to-temp-buffer" "with-selected-window"
-                       "with-selected-frame" "with-silent-modifications"
-                       "with-syntax-table" "with-temp-buffer" "with-temp-file"
-                       "with-temp-message" "with-timeout"
-                       "with-timeout-handler"))
-              (el-errs '("user-error"))
-              ;; Common-Lisp constructs supported by EIEIO.  FIXME: namespace.
-              (eieio-fdefs '("defgeneric" "defmethod"))
-              (eieio-tdefs '("defclass"))
-              (eieio-kw '("with-slots"))
-              ;; Common-Lisp constructs supported by cl-lib.
-              (cl-lib-fdefs '("defmacro" "defsubst" "defun" "defmethod"))
-              (cl-lib-tdefs '("defstruct" "deftype"))
-              (cl-lib-kw '("progv" "eval-when" "case" "ecase" "typecase"
-                           "etypecase" "ccase" "ctypecase" "loop" "do" "do*"
-                           "the" "locally" "proclaim" "declaim" "letf" "go"
-                           ;; "lexical-let" "lexical-let*"
-                           "symbol-macrolet" "flet" "flet*" "destructuring-bind"
-                           "labels" "macrolet" "tagbody" "multiple-value-bind"
-                           "block" "return" "return-from"))
-              (cl-lib-errs '("assert" "check-type"))
-              ;; Common-Lisp constructs not supported by cl-lib.
-              (cl-fdefs '("defsetf" "define-method-combination"
-                          "define-condition" "define-setf-expander"
-                          ;; "define-function"??
-                          "define-compiler-macro" "define-modify-macro"))
-              (cl-vdefs '("define-symbol-macro" "defconstant" "defparameter"))
-              (cl-tdefs '("defpackage" "defstruct" "deftype"))
-              (cl-kw '("prog" "prog*" "handler-case" "handler-bind"
-                       "in-package" "restart-case" ;; "inline"
-                       "restart-bind" "break" "multiple-value-prog1"
-                       "compiler-let" "with-accessors" "with-compilation-unit"
-                       "with-condition-restarts" "with-hash-table-iterator"
-                       "with-input-from-string" "with-open-file"
-                       "with-open-stream" "with-package-iterator"
-                       "with-simple-restart" "with-standard-io-syntax"))
-              (cl-errs '("abort" "cerror")))
-
-          (list (append lisp-vdefs el-vdefs cl-vdefs)
-                (append el-tdefs eieio-tdefs cl-tdefs cl-lib-tdefs
-                        (mapcar (lambda (s) (concat "cl-" s)) cl-lib-tdefs))
-
-                ;; Elisp and Common Lisp definers.
-                (regexp-opt (append lisp-fdefs lisp-vdefs
-                                    el-fdefs el-vdefs el-tdefs
-                                    (mapcar (lambda (s) (concat "cl-" s))
-                                            (append cl-lib-fdefs cl-lib-tdefs))
-                                    eieio-fdefs eieio-tdefs)
-                            t)
-                (regexp-opt (append lisp-fdefs lisp-vdefs
-                                    cl-lib-fdefs cl-lib-tdefs
-                                    eieio-fdefs eieio-tdefs
-                                    cl-fdefs cl-vdefs cl-tdefs)
-                            t)
-
-                ;; Elisp and Common Lisp keywords.
-                (regexp-opt (append
-                             lisp-kw el-kw eieio-kw
-                             (cons "go" (mapcar (lambda (s) (concat "cl-" s))
-                                                (remove "go" cl-lib-kw))))
-                            t)
-                (regexp-opt (append lisp-kw cl-kw eieio-kw cl-lib-kw)
-                            t)
-
-                ;; Elisp and Common Lisp "errors".
-                (regexp-opt (append (mapcar (lambda (s) (concat "cl-" s))
-                                            cl-lib-errs)
-                                    lisp-errs el-errs)
-                            t)
-                (regexp-opt (append lisp-errs cl-lib-errs cl-errs) t))))))
-
-  (dolist (v vdefs)
-    (put (intern v) 'lisp-define-type 'var))
-  (dolist (v tdefs)
-    (put (intern v) 'lisp-define-type 'type))
-
-  (define-obsolete-variable-alias 'lisp-font-lock-keywords-1
-    'lisp-el-font-lock-keywords-1 "24.4")
-  (defconst lisp-el-font-lock-keywords-1
-    `( ;; Definitions.
-      (,(concat "(" el-defs-re "\\_>"
-                ;; Any whitespace and defined object.
-                "[ \t']*"
-               "\\(([ \t']*\\)?" ;; An opening paren.
-                "\\(\\(setf\\)[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
-       (1 font-lock-keyword-face)
-       (3 (let ((type (get (intern-soft (match-string 1)) 'lisp-define-type)))
-           (cond ((eq type 'var) font-lock-variable-name-face)
-                 ((eq type 'type) font-lock-type-face)
-                 ;; If match-string 2 is non-nil, we encountered a
-                 ;; form like (defalias (intern (concat s "-p"))),
-                 ;; unless match-string 4 is also there.  Then its a
-                 ;; defmethod with (setf foo) as name.
-                 ((or (not (match-string 2))  ;; Normal defun.
-                      (and (match-string 2)   ;; Setf method.
-                           (match-string 4))) font-lock-function-name-face)))
-         nil t))
-      ;; Emacs Lisp autoload cookies.  Supports the slightly different
-      ;; forms used by mh-e, calendar, etc.
-      ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend))
-    "Subdued level highlighting for Emacs Lisp mode.")
-
-  (defconst lisp-cl-font-lock-keywords-1
-    `( ;; Definitions.
-      (,(concat "(" cl-defs-re "\\_>"
-                ;; Any whitespace and defined object.
-                "[ \t']*"
-               "\\(([ \t']*\\)?" ;; An opening paren.
-                "\\(\\(setf\\)[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
-       (1 font-lock-keyword-face)
-       (3 (let ((type (get (intern-soft (match-string 1)) 'lisp-define-type)))
-            (cond ((eq type 'var) font-lock-variable-name-face)
-                  ((eq type 'type) font-lock-type-face)
-                  ((or (not (match-string 2))  ;; Normal defun.
-                      (and (match-string 2)   ;; Setf function.
-                           (match-string 4))) font-lock-function-name-face)))
-          nil t)))
-    "Subdued level highlighting for Lisp modes.")
-
-  (define-obsolete-variable-alias 'lisp-font-lock-keywords-2
-    'lisp-el-font-lock-keywords-2 "24.4")
-  (defconst lisp-el-font-lock-keywords-2
-    (append
-     lisp-el-font-lock-keywords-1
-     `( ;; Regexp negated char group.
-       ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
-       ;; Control structures.  Common Lisp forms.
-       (lisp--el-match-keyword . 1)
-       ;; Exit/Feature symbols as constants.
-       (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>"
-                 "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
-        (1 font-lock-keyword-face)
-        (2 font-lock-constant-face nil t))
-       ;; Erroneous structures.
-       (,(concat "(" el-errs-re "\\_>")
-        (1 font-lock-warning-face))
-       ;; Words inside \\[] tend to be for `substitute-command-keys'.
-       ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]"
-        (1 font-lock-constant-face prepend))
-       ;; Words inside `' tend to be symbol names.
-       ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
-        (1 font-lock-constant-face prepend))
-       ;; Constant values.
-       ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
-       ;; ELisp and CLisp `&' keywords as types.
-       ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
-       ;; ELisp regexp grouping constructs
-       (,(lambda (bound)
-           (catch 'found
-             ;; The following loop is needed to continue searching after matches
-             ;; that do not occur in strings.  The associated regexp matches one
-             ;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'.  `\\\\' has been included to
-             ;; avoid highlighting, for example, `\\(' in `\\\\('.
-             (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
-               (unless (match-beginning 2)
-                 (let ((face (get-text-property (1- (point)) 'face)))
-                   (when (or (and (listp face)
-                                  (memq 'font-lock-string-face face))
-                             (eq 'font-lock-string-face face))
-                     (throw 'found t)))))))
-        (1 'font-lock-regexp-grouping-backslash prepend)
-        (3 'font-lock-regexp-grouping-construct prepend))
-       ;; This is too general -- rms.
-       ;; A user complained that he has functions whose names start with `do'
-       ;; and that they get the wrong color.
-       ;; ;; CL `with-' and `do-' constructs
-       ;;("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
-       (lisp--match-hidden-arg
-        (0 '(face font-lock-warning-face
-             help-echo "Hidden behind deeper element; move to another line?")))
-       ))
-    "Gaudy level highlighting for Emacs Lisp mode.")
-
-  (defconst lisp-cl-font-lock-keywords-2
-    (append
-     lisp-cl-font-lock-keywords-1
-     `( ;; Regexp negated char group.
-       ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
-       ;; Control structures.  Common Lisp forms.
-       (,(concat "(" cl-kws-re "\\_>") . 1)
-       ;; Exit/Feature symbols as constants.
-       (,(concat "(\\(catch\\|throw\\|provide\\|require\\)\\_>"
-                 "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
-        (1 font-lock-keyword-face)
-        (2 font-lock-constant-face nil t))
-       ;; Erroneous structures.
-       (,(concat "(" cl-errs-re "\\_>")
-        (1 font-lock-warning-face))
-       ;; Words inside `' tend to be symbol names.
-       ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
-        (1 font-lock-constant-face prepend))
-       ;; Constant values.
-       ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
-       ;; ELisp and CLisp `&' keywords as types.
-       ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
-       ;; This is too general -- rms.
-       ;; A user complained that he has functions whose names start with `do'
-       ;; and that they get the wrong color.
-       ;; ;; CL `with-' and `do-' constructs
-       ;;("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
-       (lisp--match-hidden-arg
-        (0 '(face font-lock-warning-face
-             help-echo "Hidden behind deeper element; move to another line?")))
-       ))
-    "Gaudy level highlighting for Lisp modes."))
+(let-when-compile
+    ((lisp-fdefs '("defmacro" "defsubst" "defun"))
+     (lisp-vdefs '("defvar"))
+     (lisp-kw '("cond" "if" "while" "let" "let*" "progn" "prog1"
+                "prog2" "lambda" "unwind-protect" "condition-case"
+                "when" "unless" "with-output-to-string"
+                "ignore-errors" "dotimes" "dolist" "declare"))
+     (lisp-errs '("warn" "error" "signal"))
+     ;; Elisp constructs.  Now they are update dynamically
+     ;; from obarray but they are also used for setting up
+     ;; the keywords for Common Lisp.
+     (el-fdefs '("define-advice" "defadvice" "defalias"
+                 "define-derived-mode" "define-minor-mode"
+                 "define-generic-mode" "define-global-minor-mode"
+                 "define-globalized-minor-mode" "define-skeleton"
+                 "define-widget"))
+     (el-vdefs '("defconst" "defcustom" "defvaralias" "defvar-local"
+                 "defface"))
+     (el-tdefs '("defgroup" "deftheme"))
+     (el-kw '("while-no-input" "letrec" "pcase" "pcase-exhaustive"
+              "pcase-lambda" "pcase-let" "pcase-let*" "save-restriction"
+              "save-excursion" "save-selected-window"
+              ;; "eval-after-load" "eval-next-after-load"
+              "save-window-excursion" "save-current-buffer"
+              "save-match-data" "combine-after-change-calls"
+              "condition-case-unless-debug" "track-mouse"
+              "eval-and-compile" "eval-when-compile" "with-case-table"
+              "with-category-table" "with-coding-priority"
+              "with-current-buffer" "with-demoted-errors"
+              "with-electric-help" "with-eval-after-load"
+              "with-file-modes"
+              "with-local-quit" "with-no-warnings"
+              "with-output-to-temp-buffer" "with-selected-window"
+              "with-selected-frame" "with-silent-modifications"
+              "with-syntax-table" "with-temp-buffer" "with-temp-file"
+              "with-temp-message" "with-timeout"
+              "with-timeout-handler"))
+     (el-errs '("user-error"))
+     ;; Common-Lisp constructs supported by EIEIO.  FIXME: namespace.
+     (eieio-fdefs '("defgeneric" "defmethod"))
+     (eieio-tdefs '("defclass"))
+     (eieio-kw '("with-slots"))
+     ;; Common-Lisp constructs supported by cl-lib.
+     (cl-lib-fdefs '("defmacro" "defsubst" "defun" "defmethod"))
+     (cl-lib-tdefs '("defstruct" "deftype"))
+     (cl-lib-kw '("progv" "eval-when" "case" "ecase" "typecase"
+                  "etypecase" "ccase" "ctypecase" "loop" "do" "do*"
+                  "the" "locally" "proclaim" "declaim" "letf" "go"
+                  ;; "lexical-let" "lexical-let*"
+                  "symbol-macrolet" "flet" "flet*" "destructuring-bind"
+                  "labels" "macrolet" "tagbody" "multiple-value-bind"
+                  "block" "return" "return-from"))
+     (cl-lib-errs '("assert" "check-type"))
+     ;; Common-Lisp constructs not supported by cl-lib.
+     (cl-fdefs '("defsetf" "define-method-combination"
+                 "define-condition" "define-setf-expander"
+                 ;; "define-function"??
+                 "define-compiler-macro" "define-modify-macro"))
+     (cl-vdefs '("define-symbol-macro" "defconstant" "defparameter"))
+     (cl-tdefs '("defpackage" "defstruct" "deftype"))
+     (cl-kw '("prog" "prog*" "handler-case" "handler-bind"
+              "in-package" "restart-case" ;; "inline"
+              "restart-bind" "break" "multiple-value-prog1"
+              "compiler-let" "with-accessors" "with-compilation-unit"
+              "with-condition-restarts" "with-hash-table-iterator"
+              "with-input-from-string" "with-open-file"
+              "with-open-stream" "with-package-iterator"
+              "with-simple-restart" "with-standard-io-syntax"))
+     (cl-errs '("abort" "cerror")))
+  (let ((vdefs (eval-when-compile
+                 (append lisp-vdefs el-vdefs cl-vdefs)))
+        (tdefs (eval-when-compile
+                 (append el-tdefs eieio-tdefs cl-tdefs cl-lib-tdefs
+                         (mapcar (lambda (s) (concat "cl-" s)) cl-lib-tdefs))))
+        ;; Elisp and Common Lisp definers.
+        (el-defs-re (eval-when-compile
+                      (regexp-opt (append lisp-fdefs lisp-vdefs
+                                          el-fdefs el-vdefs el-tdefs
+                                          (mapcar (lambda (s) (concat "cl-" s))
+                                                  (append cl-lib-fdefs cl-lib-tdefs))
+                                          eieio-fdefs eieio-tdefs)
+                                  t)))
+        (cl-defs-re (eval-when-compile
+                      (regexp-opt (append lisp-fdefs lisp-vdefs
+                                          cl-lib-fdefs cl-lib-tdefs
+                                          eieio-fdefs eieio-tdefs
+                                          cl-fdefs cl-vdefs cl-tdefs)
+                                  t)))
+        ;; Elisp and Common Lisp keywords.
+        ;; (el-kws-re (eval-when-compile
+        ;;              (regexp-opt (append
+        ;;                           lisp-kw el-kw eieio-kw
+        ;;                           (cons "go" (mapcar (lambda (s) (concat "cl-" s))
+        ;;                                              (remove "go" cl-lib-kw))))
+        ;;                          t)))
+        (cl-kws-re (eval-when-compile
+                     (regexp-opt (append lisp-kw cl-kw eieio-kw cl-lib-kw)
+                                 t)))
+        ;; Elisp and Common Lisp "errors".
+        (el-errs-re (eval-when-compile
+                      (regexp-opt (append (mapcar (lambda (s) (concat "cl-" s))
+                                                  cl-lib-errs)
+                                          lisp-errs el-errs)
+                                  t)))
+        (cl-errs-re (eval-when-compile
+                      (regexp-opt (append lisp-errs cl-lib-errs cl-errs) t))))
+    (dolist (v vdefs)
+      (put (intern v) 'lisp-define-type 'var))
+    (dolist (v tdefs)
+      (put (intern v) 'lisp-define-type 'type))
+
+    (define-obsolete-variable-alias 'lisp-font-lock-keywords-1
+        'lisp-el-font-lock-keywords-1 "24.4")
+    (defconst lisp-el-font-lock-keywords-1
+      `( ;; Definitions.
+        (,(concat "(" el-defs-re "\\_>"
+                  ;; Any whitespace and defined object.
+                  "[ \t']*"
+                  "\\(([ \t']*\\)?" ;; An opening paren.
+                  "\\(\\(setf\\)[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
+          (1 font-lock-keyword-face)
+          (3 (let ((type (get (intern-soft (match-string 1)) 'lisp-define-type)))
+               (cond ((eq type 'var) font-lock-variable-name-face)
+                     ((eq type 'type) font-lock-type-face)
+                     ;; If match-string 2 is non-nil, we encountered a
+                     ;; form like (defalias (intern (concat s "-p"))),
+                     ;; unless match-string 4 is also there.  Then its a
+                     ;; defmethod with (setf foo) as name.
+                     ((or (not (match-string 2)) ;; Normal defun.
+                          (and (match-string 2)  ;; Setf method.
+                               (match-string 4))) font-lock-function-name-face)))
+             nil t))
+        ;; Emacs Lisp autoload cookies.  Supports the slightly different
+        ;; forms used by mh-e, calendar, etc.
+        ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend))
+      "Subdued level highlighting for Emacs Lisp mode.")
+
+    (defconst lisp-cl-font-lock-keywords-1
+      `( ;; Definitions.
+        (,(concat "(" cl-defs-re "\\_>"
+                  ;; Any whitespace and defined object.
+                  "[ \t']*"
+                  "\\(([ \t']*\\)?" ;; An opening paren.
+                  "\\(\\(setf\\)[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
+          (1 font-lock-keyword-face)
+          (3 (let ((type (get (intern-soft (match-string 1)) 'lisp-define-type)))
+               (cond ((eq type 'var) font-lock-variable-name-face)
+                     ((eq type 'type) font-lock-type-face)
+                     ((or (not (match-string 2)) ;; Normal defun.
+                          (and (match-string 2)  ;; Setf function.
+                               (match-string 4))) font-lock-function-name-face)))
+             nil t)))
+      "Subdued level highlighting for Lisp modes.")
+
+    (define-obsolete-variable-alias 'lisp-font-lock-keywords-2
+        'lisp-el-font-lock-keywords-2 "24.4")
+    (defconst lisp-el-font-lock-keywords-2
+      (append
+       lisp-el-font-lock-keywords-1
+       `( ;; Regexp negated char group.
+         ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
+         ;; Control structures.  Common Lisp forms.
+         (lisp--el-match-keyword . 1)
+         ;; Exit/Feature symbols as constants.
+         (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>"
+                   "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
+           (1 font-lock-keyword-face)
+           (2 font-lock-constant-face nil t))
+         ;; Erroneous structures.
+         (,(concat "(" el-errs-re "\\_>")
+           (1 font-lock-warning-face))
+         ;; Words inside \\[] tend to be for `substitute-command-keys'.
+         ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]"
+          (1 font-lock-constant-face prepend))
+         ;; Words inside `' tend to be symbol names.
+         ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
+          (1 font-lock-constant-face prepend))
+         ;; Constant values.
+         ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
+         ;; ELisp and CLisp `&' keywords as types.
+         ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
+         ;; ELisp regexp grouping constructs
+         (,(lambda (bound)
+             (catch 'found
+               ;; The following loop is needed to continue searching after matches
+               ;; that do not occur in strings.  The associated regexp matches one
+               ;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'.  `\\\\' has been included to
+               ;; avoid highlighting, for example, `\\(' in `\\\\('.
+               (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
+                 (unless (match-beginning 2)
+                   (let ((face (get-text-property (1- (point)) 'face)))
+                     (when (or (and (listp face)
+                                    (memq 'font-lock-string-face face))
+                               (eq 'font-lock-string-face face))
+                       (throw 'found t)))))))
+           (1 'font-lock-regexp-grouping-backslash prepend)
+           (3 'font-lock-regexp-grouping-construct prepend))
+         ;; This is too general -- rms.
+         ;; A user complained that he has functions whose names start with `do'
+         ;; and that they get the wrong color.
+         ;; ;; CL `with-' and `do-' constructs
+         ;;("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
+         (lisp--match-hidden-arg
+          (0 '(face font-lock-warning-face
+               help-echo "Hidden behind deeper element; move to another line?")))
+         ))
+      "Gaudy level highlighting for Emacs Lisp mode.")
+
+    (defconst lisp-cl-font-lock-keywords-2
+      (append
+       lisp-cl-font-lock-keywords-1
+       `( ;; Regexp negated char group.
+         ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
+         ;; Control structures.  Common Lisp forms.
+         (,(concat "(" cl-kws-re "\\_>") . 1)
+         ;; Exit/Feature symbols as constants.
+         (,(concat "(\\(catch\\|throw\\|provide\\|require\\)\\_>"
+                   "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
+           (1 font-lock-keyword-face)
+           (2 font-lock-constant-face nil t))
+         ;; Erroneous structures.
+         (,(concat "(" cl-errs-re "\\_>")
+           (1 font-lock-warning-face))
+         ;; Words inside `' tend to be symbol names.
+         ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
+          (1 font-lock-constant-face prepend))
+         ;; Constant values.
+         ("\\_<:\\(?:\\sw\\|\\s_\\)+\\_>" 0 font-lock-builtin-face)
+         ;; ELisp and CLisp `&' keywords as types.
+         ("\\_<\\&\\(?:\\sw\\|\\s_\\)+\\_>" . font-lock-type-face)
+         ;; This is too general -- rms.
+         ;; A user complained that he has functions whose names start with `do'
+         ;; and that they get the wrong color.
+         ;; ;; CL `with-' and `do-' constructs
+         ;;("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 font-lock-keyword-face)
+         (lisp--match-hidden-arg
+          (0 '(face font-lock-warning-face
+               help-echo "Hidden behind deeper element; move to another line?")))
+         ))
+      "Gaudy level highlighting for Lisp modes.")))
 
 (define-obsolete-variable-alias 'lisp-font-lock-keywords
   'lisp-el-font-lock-keywords "24.4")
index d401b31671904ce09d65851266d54c47e2f90cec..7b7b48c66dec2a56f4727dca05e8de79a61b7746 100644 (file)
@@ -746,9 +746,10 @@ The context determines which symbols are considered.  If the
 symbol starts just after an open-parenthesis, only symbols with
 function definitions are considered.  Otherwise, all symbols with
 function definitions, values or properties are considered."
-  (declare (obsolete completion-at-point "24.4"))
+  (declare (obsolete completion-at-point "24.4")
+           (advertised-calling-convention () "25.1"))
   (interactive)
-  (let* ((data (lisp-completion-at-point))
+  (let* ((data (elisp-completion-at-point))
          (plist (nthcdr 3 data)))
     (if (null data)
         (minibuffer-message "Nothing to complete")
index 55fa962719d41fd99aacc866fcbaa82ed39aa3b2..b96518df502b9ef92d7a46a0035b29e038a56a89 100644 (file)
@@ -341,7 +341,7 @@ This variable is fed automatically by Emacs when installing a new package.
 This variable is used by `package-autoremove' to decide
 which packages are no longer needed.
 You can use it to (re)install packages on other machines
-by running `package-user-selected-packages-install'.
+by running `package-install-selected-packages'.
 
 To check if a package is contained in this list here, use
 `package--user-selected-p', as it may populate the variable with
@@ -350,8 +350,9 @@ a sane initial value."
 
 (defcustom package-menu-async t
   "If non-nil, package-menu will use async operations when possible.
-This includes refreshing archive contents as well as installing
-packages."
+Currently, only the refreshing of archive contents supports
+asynchronous operations.  Package transactions are still done
+synchronously."
   :type 'boolean
   :version "25.1")
 
@@ -1646,21 +1647,25 @@ These are packages which are neither contained in
              unless (memq p needed)
              collect p)))
 
-(defun package--used-elsewhere-p (pkg-desc &optional pkg-list)
+(defun package--used-elsewhere-p (pkg-desc &optional pkg-list all)
   "Non-nil if PKG-DESC is a dependency of a package in PKG-LIST.
 Return the first package found in PKG-LIST of which PKG is a
-dependency.
+dependency.  If ALL is non-nil, return all such packages instead.
 
 When not specified, PKG-LIST defaults to `package-alist'
 with PKG-DESC entry removed."
   (unless (string= (package-desc-status pkg-desc) "obsolete")
-    (let ((pkg (package-desc-name pkg-desc)))
-      (cl-loop with alist = (or pkg-list
-                                (remove (assq pkg package-alist)
-                                        package-alist))
-               for p in alist thereis
-               (and (memq pkg (mapcar #'car (package-desc-reqs (cadr p))))
-                    (car p))))))
+    (let* ((pkg (package-desc-name pkg-desc))
+           (alist (or pkg-list
+                      (remove (assq pkg package-alist)
+                              package-alist))))
+      (if all
+          (cl-loop for p in alist
+                   if (assq pkg (package-desc-reqs (cadr p)))
+                   collect (cadr p))
+        (cl-loop for p in alist thereis
+                 (and (assq pkg (package-desc-reqs (cadr p)))
+                      (cadr p)))))))
 
 (defun package--sort-deps-in-alist (package only)
   "Return a list of dependencies for PACKAGE sorted by dependency.
@@ -1708,31 +1713,26 @@ if all the in-between dependencies are also in PACKAGE-LIST."
   "Return the archive containing the package NAME."
   (cdr (assoc (package-desc-archive desc) package-archives)))
 
-(defun package-install-from-archive (pkg-desc &optional async callback)
-  "Download and install a tar package.
-If ASYNC is non-nil, perform the download asynchronously.
-If CALLBACK is non-nil, call it with no arguments once the
-operation is done."
+(defun package-install-from-archive (pkg-desc)
+  "Download and install a tar package."
   ;; This won't happen, unless the archive is doing something wrong.
   (when (eq (package-desc-kind pkg-desc) 'dir)
     (error "Can't install directory package from archive"))
   (let* ((location (package-archive-base pkg-desc))
          (file (concat (package-desc-full-name pkg-desc)
                        (package-desc-suffix pkg-desc))))
-    (package--with-work-buffer-async location file async
+    (package--with-work-buffer location file
       (if (or (not package-check-signature)
               (member (package-desc-archive pkg-desc)
                       package-unsigned-archives))
           ;; If we don't care about the signature, unpack and we're
           ;; done.
-          (progn (let ((save-silently    async)
-                       (inhibit-message  async))
-                   (package-unpack pkg-desc))
-                 (funcall callback))
+          (let ((save-silently t))
+            (package-unpack pkg-desc))
         ;; If we care, check it and *then* write the file.
         (let ((content (buffer-string)))
           (package--check-signature
-           location file content async
+           location file content nil
            ;; This function will be called after signature checking.
            (lambda (&optional good-sigs)
              (unless (or good-sigs (eq package-check-signature 'allow-unsigned))
@@ -1742,8 +1742,7 @@ operation is done."
                  (package-desc-name pkg-desc)))
              ;; Signature checked, unpack now.
              (with-temp-buffer (insert content)
-                               (let ((save-silently    async)
-                                     (inhibit-message  async))
+                               (let ((save-silently t))
                                  (package-unpack pkg-desc)))
              ;; Here the package has been installed successfully, mark it as
              ;; signed if appropriate.
@@ -1759,9 +1758,7 @@ operation is done."
                (setf (package-desc-signed pkg-desc) t)
                ;; Update the new (activated) pkg-desc as well.
                (when-let ((pkg-descs (cdr (assq (package-desc-name pkg-desc) package-alist))))
-                 (setf (package-desc-signed (car pkg-descs)) t)))
-             (when (functionp callback)
-               (funcall callback)))))))))
+                 (setf (package-desc-signed (car pkg-descs)) t))))))))))
 
 (defun package-installed-p (package &optional min-version)
   "Return true if PACKAGE, of MIN-VERSION or newer, is installed.
@@ -1782,25 +1779,13 @@ If PACKAGE is a package-desc object, MIN-VERSION is ignored."
      ;; Also check built-in packages.
      (package-built-in-p package min-version))))
 
-(defun package-download-transaction (packages &optional async callback)
+(defun package-download-transaction (packages)
   "Download and install all the packages in PACKAGES.
 PACKAGES should be a list of package-desc.
-If ASYNC is non-nil, perform the downloads asynchronously.
-If CALLBACK is non-nil, call it with no arguments once the
-entire operation is done.
-
 This function assumes that all package requirements in
 PACKAGES are satisfied, i.e. that PACKAGES is computed
 using `package-compute-transaction'."
-  (cond
-   (packages (package-install-from-archive
-              (car packages)
-              async
-              (lambda ()
-                (package-download-transaction (cdr packages))
-                (when (functionp callback)
-                  (funcall callback)))))
-   (callback (funcall callback))))
+  (mapc #'package-install-from-archive packages))
 
 (defun package--ensure-init-file ()
   "Ensure that the user's init file has `package-initialize'.
@@ -1853,16 +1838,13 @@ add a call to it along with some explanatory comments."
   (setq package--init-file-ensured t))
 
 ;;;###autoload
-(defun package-install (pkg &optional dont-select async callback)
+(defun package-install (pkg &optional dont-select)
   "Install the package PKG.
 PKG can be a package-desc or the package name of one the available packages
 in an archive in `package-archives'.  Interactively, prompt for its name.
 
 If called interactively or if DONT-SELECT nil, add PKG to
 `package-selected-packages'.
-If ASYNC is non-nil, perform the downloads asynchronously.
-If CALLBACK is non-nil, call it with no arguments once the
-entire operation is done.
 
 If PKG is a package-desc and it is already installed, don't try
 to install it but still mark it as selected."
@@ -1895,9 +1877,8 @@ to install it but still mark it as selected."
                   (package-compute-transaction (list pkg)
                                                (package-desc-reqs pkg)))
               (package-compute-transaction () (list (list pkg))))))
-      (package-download-transaction transaction async callback)
-    (message "`%s' is already installed" (package-desc-full-name pkg))
-    (funcall callback)))
+      (package-download-transaction transaction)
+    (message "`%s' is already installed" (package-desc-full-name pkg))))
 
 (defun package-strip-rcs-id (str)
   "Strip RCS version ID from the version string STR.
@@ -2027,7 +2008,7 @@ If NOSAVE is non-nil, the package is not removed from
            ;; Don't delete packages used as dependency elsewhere.
            (error "Package `%s' is used by `%s' as dependency, not deleting"
                   (package-desc-full-name pkg-desc)
-                  pkg-used-elsewhere-by))
+                  (package-desc-name pkg-used-elsewhere-by)))
           (t
            (delete-directory dir t t)
            ;; Remove NAME-VERSION.signed file.
@@ -2127,6 +2108,7 @@ will be deleted."
          (name (if desc (package-desc-name desc) pkg))
          (pkg-dir (if desc (package-desc-dir desc)))
          (reqs (if desc (package-desc-reqs desc)))
+         (required-by (if desc (package--used-elsewhere-p desc nil 'all)))
          (version (if desc (package-desc-version desc)))
          (archive (if desc (package-desc-archive desc)))
          (extras (and desc (package-desc-extras desc)))
@@ -2168,7 +2150,14 @@ will be deleted."
              (insert "'"))
            (if signed
                (insert ".")
-             (insert " (unsigned).")))
+             (insert " (unsigned)."))
+           (when (and (package-desc-p desc)
+                      (not required-by)
+                      (package-installed-p desc))
+             (insert " ")
+             (package-make-button "Delete"
+                                  'action #'package-delete-button-action
+                                  'package-desc desc)))
           (incompatible-reason
            (insert (propertize "Incompatible" 'face font-lock-warning-face)
                    " because it depends on ")
@@ -2212,6 +2201,19 @@ will be deleted."
             (help-insert-xref-button text 'help-package name)
             (insert reason)))
         (insert "\n")))
+    (when required-by
+      (insert (propertize "Required by" 'font-lock-face 'bold) ": ")
+      (let ((first t))
+        (dolist (pkg required-by)
+          (let ((text (package-desc-full-name pkg)))
+            (cond (first (setq first nil))
+                  ((>= (+ 2 (current-column) (length text))
+                       (window-width))
+                   (insert ",\n               "))
+                  (t (insert ", ")))
+            (help-insert-xref-button text 'help-package
+                                     (package-desc-name pkg))))
+        (insert "\n")))
     (insert "    " (propertize "Summary" 'font-lock-face 'bold)
             ": " (if desc (package-desc-summary desc)) "\n")
     (when homepage
@@ -2299,6 +2301,14 @@ will be deleted."
       (revert-buffer nil t)
       (goto-char (point-min)))))
 
+(defun package-delete-button-action (button)
+  (let ((pkg-desc (button-get button 'package-desc)))
+    (when (y-or-n-p (format "Delete package `%s'? "
+                      (package-desc-full-name pkg-desc)))
+      (package-delete pkg-desc)
+      (revert-buffer nil t)
+      (goto-char (point-min)))))
+
 (defun package-keyword-button-action (button)
   (let ((pkg-keyword (button-get button 'package-keyword)))
     (package-show-package-list t (list pkg-keyword))))
@@ -2390,12 +2400,17 @@ will be deleted."
 (defvar package-menu--new-package-list nil
   "List of newly-available packages since `list-packages' was last called.")
 
+(defvar package-menu--transaction-status nil
+  "Mode-line status of ongoing package transaction.")
+
 (define-derived-mode package-menu-mode tabulated-list-mode "Package Menu"
   "Major mode for browsing a list of packages.
 Letters do not insert themselves; instead, they are commands.
 \\<package-menu-mode-map>
 \\{package-menu-mode-map}"
-  (setq mode-line-process '(package--downloads-in-progress ":Loading"))
+  (setq mode-line-process '((package--downloads-in-progress ":Loading")
+                            (package-menu--transaction-status
+                             package-menu--transaction-status)))
   (setq tabulated-list-format
         `[("Package" 18 package-menu--name-predicate)
           ("Version" 13 nil)
@@ -2885,57 +2900,77 @@ prompt (see `package-menu--prompt-transaction-p')."
    (t (format "package `%s'"
         (package-desc-full-name (car packages))))))
 
-(defun package-menu--prompt-transaction-p (install delete)
-  "Prompt the user about installing INSTALL and deleting DELETE.
-INSTALL and DELETE are lists of `package-desc'.  Either may be
-nil, but not both."
+(defun package-menu--prompt-transaction-p (delete install upgrade)
+  "Prompt the user about DELETE, INSTALL, and UPGRADE.
+DELETE, INSTALL, and UPGRADE are lists of `package-desc' objects.
+Either may be nil, but not all."
+  (y-or-n-p
+   (concat
+    (when delete "Delete ")
+    (package-menu--list-to-prompt delete)
+    (when (and delete install)
+      (if upgrade "; " "; and "))
+    (when install "Install ")
+    (package-menu--list-to-prompt install)
+    (when (and upgrade (or install delete)) "; and ")
+    (when upgrade "Upgrade ")
+    (package-menu--list-to-prompt upgrade)
+    "? ")))
+
+(defun package-menu--partition-transaction (install delete)
+  "Return an alist describing an INSTALL DELETE transaction.
+Alist contains three entries, upgrade, delete, and install, each
+with a list of package names.
+
+The upgrade entry contains any `package-desc' objects in INSTALL
+whose name coincides with an object in DELETE.  The delete and
+the install entries are the same as DELETE and INSTALL with such
+objects removed."
   (let* ((upg (cl-intersection install delete :key #'package-desc-name))
          (ins (cl-set-difference install upg :key #'package-desc-name))
          (del (cl-set-difference delete upg :key #'package-desc-name)))
-    (y-or-n-p
-     (concat
-      (when del "Delete ")
-      (package-menu--list-to-prompt del)
-      (when (and del ins)
-        (if upg "; " "; and "))
-      (when ins "Install ")
-      (package-menu--list-to-prompt ins)
-      (when (and upg (or ins del)) "; and ")
-      (when upg "Upgrade ")
-      (package-menu--list-to-prompt upg)
-      "? "))))
-
-(defun package-menu--perform-transaction (install-list delete-list &optional async)
-  "Install packages in INSTALL-LIST and delete DELETE-LIST.
-If ASYNC is non-nil, perform the installation downloads
-asynchronously."
-  ;; While there are packages to install, call `package-install' on
-  ;; the next one and defer deletion to the callback function.
+    `((delete . ,del) (install . ,ins) (upgrade . ,upg))))
+
+(defun package-menu--perform-transaction (install-list delete-list)
+  "Install packages in INSTALL-LIST and delete DELETE-LIST."
   (if install-list
-      (let* ((pkg (car install-list))
-             (rest (cdr install-list))
-             ;; Don't mark as selected if it's a new version of an
-             ;; installed package.
-             (dont-mark (and (not (package-installed-p pkg))
-                             (package-installed-p
-                              (package-desc-name pkg)))))
-        (package-install
-         pkg dont-mark async
-         (lambda () (package-menu--perform-transaction rest delete-list async))))
-    (let ((inhibit-message async))
-      ;; Once there are no more packages to install, proceed to
-      ;; deletion.
+      (let ((status-format (format ":Installing %%d/%d"
+                             (length install-list)))
+            (i 0)
+            (package-menu--transaction-status))
+        (dolist (pkg install-list)
+          (setq package-menu--transaction-status
+                (format status-format (cl-incf i)))
+          (force-mode-line-update)
+          (redisplay 'force)
+          ;; Don't mark as selected, `package-menu-execute' already
+          ;; does that.
+          (package-install pkg 'dont-select)))
+    ;; Once there are no more packages to install, proceed to
+    ;; deletion.
+    (let ((package-menu--transaction-status ":Deleting"))
+      (force-mode-line-update)
+      (redisplay 'force)
       (dolist (elt (package--sort-by-dependence delete-list))
         (condition-case-unless-debug err
-            (package-delete elt)
-          (error (message (cadr err))))))
-    (message "Transaction done")
-    (when package-selected-packages
-      (when-let ((removable (package--removable-packages)))
-        (message "These %d packages are no longer needed, type `M-x package-autoremove' to remove them (%s)"
-          (length removable)
-          (mapconcat #'symbol-name removable ", "))))
-    (package-menu--post-refresh)))
+            (let ((inhibit-message t))
+              (package-delete elt nil 'nosave))
+          (error (message (cadr err))))))))
+
+(defun package--update-selected-packages (add remove)
+  "Update the `package-selected-packages' list according to ADD and REMOVE.
+ADD and REMOVE must be disjoint lists of package names (or
+`package-desc' objects) to be added and removed to the selected
+packages list, respectively."
+  (dolist (p add)
+    (cl-pushnew (if (package-desc-p p) (package-desc-name p) p)
+                package-selected-packages))
+  (dolist (p remove)
+    (setq package-selected-packages
+          (remove (if (package-desc-p p) (package-desc-name p) p)
+                  package-selected-packages)))
+  (when (or add remove)
+    (package--save-selected-packages package-selected-packages)))
 
 (defun package-menu-execute (&optional noquery)
   "Perform marked Package Menu actions.
@@ -2960,12 +2995,30 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm."
         (forward-line)))
     (unless (or delete-list install-list)
       (user-error "No operations specified"))
-    (when (or noquery
-              (package-menu--prompt-transaction-p install-list delete-list))
-      (message "Transaction started")
-      ;; This calls `package-menu--generate' after everything's done.
-      (package-menu--perform-transaction
-       install-list delete-list package-menu-async))))
+    (let-alist (package-menu--partition-transaction install-list delete-list)
+      (when (or noquery
+                (package-menu--prompt-transaction-p .delete .install .upgrade))
+        (let ((message-template
+               (concat "Package menu: Operation %s ["
+                       (when .delete  (format "Delet__ %s" (length .delete)))
+                       (when (and .delete .install) "; ")
+                       (when .install (format "Install__ %s" (length .install)))
+                       (when (and .upgrade (or .install .delete)) "; ")
+                       (when .upgrade (format "Upgrad__ %s" (length .upgrade)))
+                       "]")))
+          (message (replace-regexp-in-string "__" "ing" message-template) "started")
+          ;; Packages being upgraded are not marked as selected.
+          (package--update-selected-packages .install .delete)
+          (package-menu--perform-transaction install-list delete-list)
+          (when package-selected-packages
+            (if-let ((removable (package--removable-packages)))
+                (message "Package menu: Operation finished.  %d packages %s"
+                  (length removable)
+                  "are no longer needed, type `M-x package-autoremove' to remove them")
+              (message (replace-regexp-in-string "__" "ed" message-template)
+                "finished"))))
+        ;; This calls `package-menu--generate'.
+        (package-menu--post-refresh)))))
 
 (defun package-menu--version-predicate (A B)
   (let ((vA (or (aref (cadr A) 1)  '(0)))
index bd178faa4affb80922ff55a10fe84e9633b5ba4d..e6d451ac62eff01bcf1239e6eb04ec12c0f9b957 100644 (file)
@@ -140,6 +140,10 @@ to bind a single value, BINDINGS can just be a plain tuple."
   (declare (indent 1) (debug if-let))
   (list 'if-let bindings (macroexp-progn body)))
 
+(defsubst hash-table-empty-p (hash-table)
+  "Check whether HASH-TABLE is empty (has 0 elements)."
+  (zerop (hash-table-count hash-table)))
+
 (defsubst hash-table-keys (hash-table)
   "Return a list of keys in HASH-TABLE."
   (let ((keys '()))
index 81ef7a6fbf377f0467f215ae08631b58955e0e2e..05dd7d57503b147aecf931f0c3e2492db4ccf0c5 100644 (file)
@@ -574,7 +574,7 @@ running the hook."
 
 ;; (defun buffer-syntactic-context (&optional buffer)
 ;;   "Syntactic context at point in BUFFER.
-;; Either of `string', `comment' or `nil'.
+;; Either of `string', `comment' or nil.
 ;; This is an XEmacs compatibility function."
 ;;   (with-current-buffer (or buffer (current-buffer))
 ;;     (syntax-ppss-context (syntax-ppss))))
index 59f47525e55dd2f5c8f1add1e15758b23bf20153..c4dc569efb39c4df0781fd545cacf531fb501abb 100644 (file)
@@ -1301,7 +1301,7 @@ Usually contains ` ', linefeed, TAB or formfeed.")
     ))
 
 ;; SYMBOL is used because customize requires it, but it is ignored, unless it
-;; is `nil'.  If nil, use setq.
+;; is nil.  If nil, use setq.
 (defun viper-set-syntax-preference (&optional symbol value)
   "Set Viper syntax preference.
 If called interactively or if SYMBOL is nil, sets syntax preference in current
index 8ce199fbcbb02a57762073333f3e85caca66073f..ee81113d208f1be891f9d1df9a052a6549952c69 100644 (file)
@@ -652,7 +652,7 @@ EVENT is the message received from the closed connection process."
                          (run-at-time erc-server-reconnect-timeout nil
                                       #'erc-process-sentinel-2
                                       event buffer)
-                       (error (concat "`erc-server-reconnect-timeout`"
+                       (error (concat "`erc-server-reconnect-timeout'"
                                       " must be a number")))))))))))
 
 (defun erc-process-sentinel-1 (event buffer)
index 5f91be8c89959937b14e7532bd5fd37eefbf56d0..de2a2ff6e764578e7b4d9a183117fba1b5854b92 100644 (file)
@@ -78,7 +78,7 @@ The alist's format is as follows:
 (defun erc-ezb-get-login (server port)
   "Return an appropriate EZBounce login for SERVER and PORT.
 Look up entries in `erc-ezb-login-alist'. If the username or password
-in the alist is `nil', prompt for the appropriate values."
+in the alist is nil, prompt for the appropriate values."
   (let ((login (cdr (assoc (cons server port) erc-ezb-login-alist))))
     (when login
       (let ((username (car login))
index 7f901edfb8fb295cf5c2537389112870f4a02326..e46ac68b2594f76c08f54b97ca794d2196a4c89d 100644 (file)
@@ -33,7 +33,7 @@
 ;;
 ;; If you want nickname completions ordered such that the most recent
 ;; speakers are listed first, set
-;; `erc-pcomplete-order-nickname-completions' to `t'.
+;; `erc-pcomplete-order-nickname-completions' to t.
 ;;
 ;; See CREDITS for other contributors.
 ;;
index cf422f1cfc551d7d1827265bc3c68eda12861eb9..ad5e1a2468e7e60a0f426536a04318341dcaabd0 100644 (file)
@@ -1,3 +1,4 @@
+
 ;; erc.el --- An Emacs Internet Relay Chat client  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997-2015 Free Software Foundation, Inc.
@@ -12,6 +13,7 @@
 ;;               Kelvin White (kwhite@gnu.org)
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: IRC, chat, client, Internet
+
 ;; Version: 5.3
 
 ;; This file is part of GNU Emacs.
 ;; * http://sv.gnu.org/projects/erc/
 ;; * http://www.emacswiki.org/cgi-bin/wiki/ERC
 
+
+
 ;; As of 2006-06-13, ERC development is now hosted on Savannah
 ;; (http://sv.gnu.org/projects/erc).  I invite everyone who wants to
 ;; hack on it to contact me <mwolson@gnu.org> in order to get write
 ;; access to the shared Arch archive.
 
-;; Installation:
-
-;; Put erc.el in your load-path, and put (require 'erc) in your .emacs.
-
 ;; Configuration:
 
 ;; Use M-x customize-group RET erc RET to get an overview
@@ -258,11 +258,25 @@ If nil, only \"> \" will be shown."
           (repeat :inline t :tag "Others" (string :tag "IRC Message Type"))))
 
 (defcustom erc-hide-list nil
-  "List of IRC type messages to hide.
+  "A global list of IRC message types to hide.
 A typical value would be '(\"JOIN\" \"PART\" \"QUIT\")."
   :group 'erc-ignore
   :type 'erc-message-type)
 
+(defcustom erc-network-hide-list nil
+  "A list of IRC networks to hide message types from.
+A typical value would be '((\"freenode\" \"MODE\")
+(\"OFTC\" \"JOIN\" \"QUIT\"))."
+  :group 'erc-ignore
+  :type 'erc-message-type)
+
+(defcustom erc-channel-hide-list nil
+  "A list of IRC channels to hide message types from.
+A typical value would be '((\"#emacs\" \"QUIT\" \JOIN\")
+(\"#erc\" \"NICK\")."
+  :group 'erc-ignore
+  :type 'erc-message-type)
+
 (defvar erc-session-password nil
   "The password used for the current session.")
 (make-variable-buffer-local 'erc-session-password)
@@ -2616,15 +2630,36 @@ otherwise `erc-server-announced-name'.  SERVER is matched against
                erc-common-server-suffixes))
         erc-server-announced-name)))
 
+(defun erc-add-targets (scope target-list)
+  (let ((targets
+        (mapcar (lambda (targets) (member scope targets)) target-list)))
+    (cdr (apply 'append (delete nil targets)))))
+
 (defun erc-hide-current-message-p (parsed)
   "Predicate indicating whether the parsed ERC response PARSED should be hidden.
 
 Messages are always hidden if the message type of PARSED appears in
-`erc-hide-list'.  In addition, messages whose type is a member of
-`erc-lurker-hide-list' are hidden if `erc-lurker-p' returns true."
+`erc-hide-list'. Message types that appear in `erc-network-hide-list'
+or `erc-channel-hide-list' are are only hidden if the target matches
+the network or channel in the list. In addition, messages whose type
+is a member of `erc-lurker-hide-list' are hidden if `erc-lurker-p'
+returns non-nil."
   (let* ((command (erc-response.command parsed))
-         (sender (car (erc-parse-user (erc-response.sender parsed)))))
+         (sender (car (erc-parse-user (erc-response.sender parsed))))
+         (channel (nth 1 (erc-response.command-args parsed)))
+         (network (or (and (fboundp 'erc-network-name) (erc-network-name))
+                     (erc-shorten-server-name
+                      (or erc-server-announced-name
+                          erc-session-server))))
+        (current-hide-list
+         (when erc-network-hide-list
+           (erc-add-targets network erc-network-hide-list)))
+        (current-hide-list
+         (apply 'append current-hide-list
+                (when erc-channel-hide-list
+                  (erc-add-targets channel erc-channel-hide-list)))))
     (or (member command erc-hide-list)
+        (member command current-hide-list)
         (and (member command erc-lurker-hide-list) (erc-lurker-p sender)))))
 
 (defun erc-display-message (parsed type buffer msg &rest args)
@@ -4150,7 +4185,7 @@ See also `erc-display-error-notice'."
                                    ;; server's setting if we haven't
                                    ;; established a connection yet
                                    (- 9 (length erc-nick-uniquifier))))
-                                erc-nick-uniquifier)))
+                               erc-nick-uniqifier)))
       (erc-cmd-NICK newnick)
       (erc-display-error-notice
        nil
index 4a6ac23544951c2f4f4a173846b5459097660522..9ac281372cfe3d1cad5f298054b126867e19c131 100644 (file)
@@ -132,6 +132,13 @@ character to the invoked process."
   :type 'boolean
   :group 'eshell-term)
 
+(defcustom eshell-destroy-buffer-when-process-dies nil
+  "If non-nil, term buffers are destroyed after their processes die.
+WARNING: Setting this to non-nil may result in unexpected
+behavior for short-lived processes, see bug#18108."
+  :type 'boolean
+  :group 'eshell-term)
+
 ;;; Internal Variables:
 
 (defvar eshell-parent-buffer)
@@ -190,20 +197,24 @@ allowed."
   nil)
 
 ;; Process sentinels receive two arguments.
-(defun eshell-term-sentinel (proc _string)
-  "Destroy the buffer visiting PROC."
-  (let ((proc-buf (process-buffer proc)))
-    (when (and proc-buf (buffer-live-p proc-buf)
-              (not (eq 'run (process-status proc)))
-              (= (process-exit-status proc) 0))
-      (if (eq (current-buffer) proc-buf)
-         (let ((buf (and (boundp 'eshell-parent-buffer)
-                         eshell-parent-buffer
-                         (buffer-live-p eshell-parent-buffer)
-                         eshell-parent-buffer)))
-           (if buf
-               (switch-to-buffer buf))))
-      (kill-buffer proc-buf))))
+(defun eshell-term-sentinel (proc msg)
+  "Clean up the buffer visiting PROC.
+If `eshell-destroy-buffer-when-process-dies' is non-nil, destroy
+the buffer."
+  (term-sentinel proc msg) ;; First call the normal term sentinel.
+  (when eshell-destroy-buffer-when-process-dies
+    (let ((proc-buf (process-buffer proc)))
+      (when (and proc-buf (buffer-live-p proc-buf)
+                 (not (eq 'run (process-status proc)))
+                 (= (process-exit-status proc) 0))
+        (if (eq (current-buffer) proc-buf)
+            (let ((buf (and (boundp 'eshell-parent-buffer)
+                            eshell-parent-buffer
+                            (buffer-live-p eshell-parent-buffer)
+                            eshell-parent-buffer)))
+              (if buf
+                  (switch-to-buffer buf))))
+        (kill-buffer proc-buf)))))
 
 ;; jww (1999-09-17): The code below will allow Eshell to send input
 ;; characters directly to the currently running interactive process.
index a5f697f037aa046845e1af558f7b87164d4c5009..49ba72735da83fae2fcbdba1e347ed5cd6ff1da5 100644 (file)
@@ -357,22 +357,31 @@ after are both returned."
          (goto-char (1+ end)))))))
 
 (defun eshell-parse-special-reference ()
-  "Parse a special syntax reference, of the form '#<type arg>'."
-  (if (and (not eshell-current-argument)
-          (not eshell-current-quoted)
-          (looking-at "#<\\(buffer\\|process\\)\\s-"))
-      (let ((here (point)))
-       (goto-char (match-end 0))
-       (let* ((buffer-p (string= (match-string 1) "buffer"))
-              (end (eshell-find-delimiter ?\< ?\>)))
-         (if (not end)
-             (throw 'eshell-incomplete ?\<)
-           (if (eshell-arg-delimiter (1+ end))
-               (prog1
-                   (list (if buffer-p 'get-buffer-create 'get-process)
-                         (buffer-substring-no-properties (point) end))
-                 (goto-char (1+ end)))
-             (ignore (goto-char here))))))))
+  "Parse a special syntax reference, of the form '#<args>'.
+
+args           := `type' `whitespace' `arbitrary-args' | `arbitrary-args'
+type           := \"buffer\" or \"process\"
+arbitrary-args := any string of characters.
+
+If the form has no 'type', the syntax is parsed as if 'type' were
+\"buffer\"."
+  (when (and (not eshell-current-argument)
+             (not eshell-current-quoted)
+             (looking-at "#<\\(\\(buffer\\|process\\)\\s-\\)?"))
+    (let ((here (point)))
+      (goto-char (match-end 0)) ;; Go to the end of the match.
+      (let ((buffer-p (if (match-string 1)
+                          (string= (match-string 2) "buffer")
+                        t)) ;; buffer-p is non-nil by default.
+            (end (eshell-find-delimiter ?\< ?\>)))
+        (when (not end)
+          (throw 'eshell-incomplete ?\<))
+        (if (eshell-arg-delimiter (1+ end))
+            (prog1
+                (list (if buffer-p 'get-buffer-create 'get-process)
+                      (buffer-substring-no-properties (point) end))
+              (goto-char (1+ end)))
+          (ignore (goto-char here)))))))
 
 (defun eshell-parse-delimiter ()
   "Parse an argument delimiter, which is essentially a command operator."
index 7dfc39f3202ff1a71bedc4424027cccb1c5fde5b..dc731bc928a0db30b9fa9ca54682a85c706cf7ed 100644 (file)
 ;; consistent with most shells.  Therefore, only unique features are
 ;; mentioned here.
 ;;
+;;;_* Redirect to a Buffer or Process
+;;
+;; Buffers and processes can be named with '#<buffer buffer-name>' and
+;; '#<process process-name>', respectively. As a shorthand,
+;; '#<buffer-name>' without the explicit "buffer" arg is equivalent to
+;; '#<buffer buffer-name>'.
+;;
+;;   echo hello > #<buffer *scratch*> # Overwrite '*scratch*' with 'hello'.
+;;   echo hello > #<*scratch*>        # Same as the command above.
+;;
+;;   echo hello > #<process shell> # Pipe "hello" into the shell process.
+;;
 ;;;_* Insertion
 ;;
 ;; To insert at the location of point in a buffer, use '>>>':
@@ -98,19 +110,6 @@ other buffers) ."
   :type 'integer
   :group 'eshell-io)
 
-(defcustom eshell-buffer-shorthand nil
-  "If non-nil, a symbol name can be used for a buffer in redirection.
-If nil, redirecting to a buffer requires buffer name syntax.  If this
-variable is set, redirection directly to Lisp symbols will be
-impossible.
-
-Example:
-
-  echo hello > '*scratch*  ; works if `eshell-buffer-shorthand' is t
-  echo hello > #<buffer *scratch*>  ; always works"
-  :type 'boolean
-  :group 'eshell-io)
-
 (defcustom eshell-print-queue-size 5
   "The size of the print queue, for doing buffered printing.
 This is basically a speed enhancement, to avoid blocking the Lisp code
@@ -355,21 +354,14 @@ it defaults to `insert'."
                   (goto-char (point-max))))
            (point-marker))))))
 
-   ((or (bufferp target)
-       (and (boundp 'eshell-buffer-shorthand)
-            (symbol-value 'eshell-buffer-shorthand)
-            (symbolp target)
-            (not (memq target '(t nil)))))
-    (let ((buf (if (bufferp target)
-                  target
-                (get-buffer-create
-                 (symbol-name target)))))
-      (with-current-buffer buf
-       (cond ((eq mode 'overwrite)
-              (erase-buffer))
-             ((eq mode 'append)
-              (goto-char (point-max))))
-       (point-marker))))
+
+   ((bufferp target)
+    (with-current-buffer target
+      (cond ((eq mode 'overwrite)
+             (erase-buffer))
+            ((eq mode 'append)
+             (goto-char (point-max))))
+      (point-marker)))
 
    ((functionp target) nil)
 
index 222e801301b478da958a1d4a0f9ec4b14d1bf237..0dac47806907819b4f523c695a69f65676c25cc9 100644 (file)
@@ -206,7 +206,7 @@ This is used by `eshell-watch-for-password-prompt'."
 
 ;; Internal Variables:
 
-;; these are only set to `nil' initially for the sake of the
+;; these are only set to nil initially for the sake of the
 ;; byte-compiler, when compiling other files which `require' this one
 (defvar eshell-mode nil)
 (defvar eshell-mode-map nil)
index 697f97e04605de670d3f37e07a3491fbb9ae1fc8..170779fc5cdf7c4f45c0372d8c63f8a32ed72f76 100644 (file)
@@ -33,7 +33,7 @@
 ;;; User Variables:
 
 (defcustom eshell-stringify-t t
-  "If non-nil, the string representation of t is 't'.
+  "If non-nil, the string representation of t is \"t\".
 If nil, t will be represented only in the exit code of the function,
 and not printed as a string.  This causes Lisp functions to behave
 similarly to external commands, as far as successful result output."
index 3ec074b55993e8dbaca27893b7ae10f0dac3db0e..93eec5bd13c555094011376656765ddf01ef2ecd 100644 (file)
@@ -187,7 +187,7 @@ of face attribute/value pairs, like in a `face' text property.
 
 If SPECS is empty, call `face-remap-reset-base' to use the normal
 definition of FACE as the base remapping; note that this is
-different from SPECS containing a single value `nil', which means
+different from SPECS containing a single value nil, which means
 not to inherit from the global definition of FACE at all."
   (while (and (consp specs) (not (null (car specs))) (null (cdr specs)))
     (setq specs (car specs)))
index 2c246b44d546a079eb34158c57eb80f87d1f8602..3d5894309dffe9c8fc3d2e7ac7bba173e9a0bc5c 100644 (file)
@@ -458,7 +458,7 @@ These special properties include `invisible', `intangible' and `read-only'."
 
 (defcustom list-colors-sort nil
   "Color sort order for `list-colors-display'.
-`nil' means default implementation-dependent order (defined in `x-colors').
+nil means default implementation-dependent order (defined in `x-colors').
 `name' sorts by color name.
 `rgb' sorts by red, green, blue components.
 `(rgb-dist . COLOR)' sorts by the RGB distance to the specified color.
index 54e444b730ad01dc6d69e10f640008de94946eac..9c087c99d56c0f01d0bbd593f97c8d21cf7957ef 100644 (file)
@@ -619,7 +619,7 @@ VALUE must be a string specifying the font family
 `:foundry'
 
 VALUE must be a string specifying the font foundry,
-e.g. ``adobe''.  If a font foundry is specified, wild-cards `*'
+e.g., \"adobe\".  If a font foundry is specified, wild-cards `*'
 and `?' are allowed.
 
 `:width'
@@ -892,7 +892,7 @@ where COLOR is a string or `foreground-color', and STYLE is either
 foreground color.  :style may be omitted, which means to use a line.
 
 FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' to ``unspecify'' underlining."
+Use `set-face-attribute' to \"unspecify\" underlining."
   (interactive (read-face-and-attribute :underline))
   (set-face-attribute face frame :underline underline))
 
@@ -905,7 +905,7 @@ Use `set-face-attribute' to ``unspecify'' underlining."
 INVERSE-VIDEO-P non-nil means FACE displays explicitly in inverse video.
 INVERSE-VIDEO-P nil means FACE explicitly is not in inverse video.
 FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' to ``unspecify'' the inverse video attribute."
+Use `set-face-attribute' to \"unspecify\" the inverse video attribute."
   (interactive
    (let ((list (read-face-and-attribute :inverse-video)))
      (list (car list) (if (cadr list) t))))
@@ -2042,7 +2042,7 @@ Value is the new parameter list."
   "Create and return a frame with frame parameters PARAMETERS.
 If PARAMETERS specify a frame name, handle X geometry resources
 for that name.  If PARAMETERS includes a `reverse' parameter, or
-the X resource ``reverseVideo'' is present, handle that."
+the X resource \"reverseVideo\" is present, handle that."
   (setq parameters (x-handle-named-frame-geometry parameters))
   (let* ((params (copy-tree parameters))
         (visibility-spec (assq 'visibility parameters))
index ef6ac7b8c9239dff7bfe1c9a49a77a9d0d49f3ca..d82ff5e865f00399d80c3b3260df7b2ff7972c59 100644 (file)
@@ -1092,14 +1092,14 @@ Tip: You can use this expansion of remote identifier components
 
 (defcustom remote-file-name-inhibit-cache 10
   "Whether to use the remote file-name cache for read access.
-When `nil', never expire cached values (caution)
-When `t', never use the cache (safe, but may be slow)
+When nil, never expire cached values (caution)
+When t, never use the cache (safe, but may be slow)
 A number means use cached values for that amount of seconds since caching.
 
 The attributes of remote files are cached for better performance.
 If they are changed outside of Emacs's control, the cached values
 become invalid, and must be reread.  If you are sure that nothing
-other than Emacs changes the files, you can set this variable to `nil'.
+other than Emacs changes the files, you can set this variable to nil.
 
 If a remote file is checked regularly, it might be a good idea to
 let-bind this variable to a value less than the interval between
index aa57a667ae758918bf1e47f96376595749b5cf54..bccb4a05756ee9d1892aaef5bb21ee4e86e16858 100644 (file)
@@ -1755,7 +1755,7 @@ Otherwise enables edit mode if the visited file is writable."
 With ARG: store the record after the current one.
 If `forms-new-record-filter' contains the name of a function,
 it is called to fill (some of) the fields with default values.
-If `forms-insert-after is non-nil, the default behavior is to insert
+If `forms-insert-after' is non-nil, the default behavior is to insert
 after the current record."
 
   (interactive "P")
index 4082b8723d1533381c9a5d19c4b5bf5a026eb209..6ebd53380876994f2fdc7b9ba19e149734f5ba93 100644 (file)
@@ -35,8 +35,9 @@
 ;; Verifying Cancel-Lock is mainly a function of news servers, however,
 ;; you can verify your own article using the command `canlock-verify' in
 ;; the (raw) article buffer.  You will be prompted for the password for
-;; each time if the option `canlock-password' or `canlock-password-for-
-;; verify' is nil.  Note that setting these options is a bit unsafe.
+;; each time if the option `canlock-password' or
+;; `canlock-password-for-verify' is nil.  Note that setting these
+;; options is a bit unsafe.
 
 ;;; Code:
 
index 331b99b86524dba28ba40fbc6f1d107bdfe92b0a..b2a725b54029f7a97f1d1c660864ed26bffc0bc2 100644 (file)
@@ -78,7 +78,7 @@
 ;; `gnus-outlook-deuglify-unwrap-stop-chars'.  Setting this to ".?!"
 ;; inhibits unwrapping if the cited line ends with a full stop,
 ;; question mark or exclamation mark.  Note that this variable
-;; defaults to `nil', triggering a few false positives but generally
+;; defaults to nil, triggering a few false positives but generally
 ;; giving you better results.
 ;;
 ;; Unwrapping works on every level of citation.  Thus you will be able
 ;; > Bye, John
 ;;
 ;; Repairing the attribution line will be done by function
-;; `gnus-article-outlook-repair-attribution which calls other function that
+;; `gnus-article-outlook-repair-attribution' which calls other function that
 ;; try to recognize and repair broken attribution lines.  See variable
 ;; `gnus-outlook-deuglify-attrib-cut-regexp' for stuff that should be
 ;; cut off from the beginning of an attribution line and variable
 ;; Rearranging the article so that the cited text appears above the
 ;; new text will be done by function
 ;; `gnus-article-outlook-rearrange-citation'.  This function calls
-;; `gnus-article-outlook-repair-attribution to find and repair an attribution
+;; `gnus-article-outlook-repair-attribution' to find and repair an attribution
 ;; line.
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; As I said before there may (or will) be a few false positives on
 ;; unwrapping cited lines with `gnus-article-outlook-unwrap-lines'.
 ;;
-;; `gnus-article-outlook-repair-attribution will only fix the first
+;; `gnus-article-outlook-repair-attribution' will only fix the first
 ;; attribution line found in the article.  Furthermore it fixed to
 ;; certain kinds of attributions.  And there may be horribly many
 ;; false positives, vanishing lines and so on -- so don't trust your
 ;; eyes.  Again I recommend manual invocation.
 ;;
 ;; `gnus-article-outlook-rearrange-citation' carries all the limitations of
-;; `gnus-article-outlook-repair-attribution.
+;; `gnus-article-outlook-repair-attribution'.
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
index 989a4247800a29405b5ca5c09caf4039f0fe5e62..7630afbdcf47e9b37c2cc86a18ccafba8353d1bf 100644 (file)
@@ -1256,7 +1256,7 @@ how to control what it hides."
   :type gnus-article-treat-custom)
 
 (defcustom gnus-treat-strip-list-identifiers 'head
-  "Strip list identifiers from `gnus-list-identifiers`.
+  "Strip list identifiers from `gnus-list-identifiers'.
 Valid values are nil, t, `head', `first', `last', an integer or a
 predicate.  See Info node `(gnus)Customizing Articles'."
   :version "21.1"
@@ -1735,7 +1735,7 @@ regexp."
     (modify-syntax-entry ?` " " table)
     table)
   "Syntax table used in article mode buffers.
-Initialized from `text-mode-syntax-table.")
+Initialized from `text-mode-syntax-table'.")
 
 (defvar gnus-save-article-buffer nil)
 
index 9271322f4ab605835677bb53bf5e8fbf798ebbd7..93b7a1ba6353f6ae66c1d00b70de2964890aa037 100644 (file)
@@ -272,7 +272,7 @@ DOC is a documentation string for the parameter.")
                (repeat (list (string :format "%v" :tag "File name"))))
        "Which score files to use when using score to select articles to fetch.
 
-    `nil'
+    nil
          All articles will be scored to zero (0).
 
     `file'
index ff839d7f18c10a802ad64699e49526f7524e88e8..dbeada286b74dd6e674ed6a785556e78dfac2635 100644 (file)
@@ -3285,7 +3285,7 @@ mail messages or news articles in files that have numeric names."
 
    Rights is a string listing a (possibly empty) set of alphanumeric
    characters, each character listing a set of operations which is being
-   controlled.  Letters are reserved for ``standard'' rights, listed
+   controlled.  Letters are reserved for \"standard\" rights, listed
    below.  Digits are reserved for implementation or site defined rights.
 
    l - lookup (mailbox is visible to LIST/LSUB commands)
index 1d8ad8e6acb7112569e2646650807290d7746f7a..37a707ebe640f76f892bdf714b79d90edd827da3 100644 (file)
@@ -4376,7 +4376,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
      ;; The last case ignores an existing entry, except it adds any
      ;; additional Xrefs (in case the two articles came from different
      ;; servers.
-     ;; Also sets `header' to `nil' meaning that the `dependencies'
+     ;; Also sets `header' to nil meaning that the `dependencies'
      ;; table was *not* modified.
      (t
       (mail-header-set-xref
index 8bb0a78a4463f68d22f7855fe0a85487c0c0b1f4..9e813e6dfd1d9ee7a04f77c1753c5b45714afe10 100644 (file)
@@ -1123,7 +1123,7 @@ e.g. using `gnus-posting-styles':
 
 (defcustom message-cite-style nil
   "*The overall style to be used when yanking cited text.
-Value is either `nil' (no variable overrides) or a let-style list
+Value is either nil (no variable overrides) or a let-style list
 of pairs (VARIABLE VALUE) that will be bound in
 `message-yank-original' to do the quoting.
 
index c62697b6939cf74f0d23cbd28d03ced9bff94020..70d803faf541391eef92a8f2df1bf3db10ee1684 100644 (file)
@@ -199,7 +199,7 @@ from the document.")
 ;; lines in the body.  For MIME dissections only, ARTICLE-INSERT [5] and
 ;; SUMMARY-INSERT [6] give headers to insert for full article or summary line
 ;; generation, respectively.  Other headers usually follow directly from the
-;; buffer.  Value `nil' means no insert.
+;; buffer.  Value nil means no insert.
 (defvoo nndoc-dissection-alist nil)
 (defvoo nndoc-prepare-body-function nil)
 (defvoo nndoc-generate-head-function nil)
index 21fa5b37aa465de582e7fc5411153c8b1ed25797..da3d5460c2bfdcbb257add860dd2de79ceb86da4 100644 (file)
@@ -84,13 +84,13 @@ Some of the FLAGS correspond to Gnus marks.")
 
 (defsubst nnmaildir--mark-to-flag (mark)
   "Find the Maildir flag that corresponds to MARK (an atom).
-Return a character, or `nil' if not found.
+Return a character, or nil if not found.
 See `nnmaildir-flag-mark-mapping'."
   (car (rassq mark nnmaildir-flag-mark-mapping)))
 
 (defsubst nnmaildir--flag-to-mark (flag)
   "Find the Gnus mark that corresponds to FLAG (a character).
-Return an atom, or `nil' if not found.
+Return an atom, or nil if not found.
 See `nnmaildir-flag-mark-mapping'."
   (cdr (assq flag nnmaildir-flag-mark-mapping)))
 
index b2520b26af97c3dc3a619df4ac89f00c418e7030..ea558d75a20b2df2904a58a6fe363e32fe36a98a 100644 (file)
@@ -1136,7 +1136,7 @@ other than `\"' and `\\' in quoted strings."
          ;; `decode-coding-string' in Emacs offers a third optional
          ;; arg NOCOPY to avoid consing a new string if the decoding
          ;; is "trivial".  Unfortunately it currently doesn't
-         ;; consider anything else than a `nil' coding system
+         ;; consider anything else than a nil coding system
          ;; trivial.
          ;; `rfc2047-decode-string' is called multiple times for each
          ;; article during summary buffer generation, and we really
index b167671ab0b1e7ea303f6759730707f581e79bd2..a19ff32f1daf00e3cff8e393881d7bfd5dd69c4c 100644 (file)
 ;;      from the kill ring.  May be good if you don't know how far up in
 ;;      the kill-ring the required entry is, and don't want to mess with
 ;;      "Choose Next Paste".
-;;    `try-complete-lisp-symbol' : like `lisp-complete-symbol', but goes
+;;    `try-complete-lisp-symbol' : like `elisp-completion-at-point', but goes
 ;;      through all possibilities instead of completing what is unique.
 ;;      Might be tedious (usually a lot of possible completions) and
-;;      since its function is much like `lisp-complete-symbol', which
+;;      since its function is much like `completion-at-point', which
 ;;      already has a key of its own, you might want to remove this.
 ;;    `try-complete-lisp-symbol-partially' : To insert in the list just
 ;;      before `try-complete-lisp-symbol' for those who first want to get
index f15e150f5d428b283dc05e037e5b274783a0deb2..c426976b29cad4e5bdf3189713088e6bec67fead 100644 (file)
@@ -1908,9 +1908,9 @@ the buffer object itself and the current mark symbol."
                     ;; Kill the line if the buffer is dead
                     'kill)))
              ;; A given mapping function should return:
-             ;; `nil' if it chose not to affect the buffer
+             ;; nil if it chose not to affect the buffer
              ;; `kill' means the remove line from the buffer list
-             ;; `t' otherwise
+             ;; t otherwise
              (cl-incf ibuffer-map-lines-total)
              (cond ((null result)
                     (forward-line 1))
index ee2811228524106fad74c59eab9df4df677702bb..b1894ca5874ee45370ecdffb9ec113d4e0b39a42 100644 (file)
@@ -149,16 +149,26 @@ icompletion is occurring."
 (defvar icomplete-minibuffer-map
   (let ((map (make-sparse-keymap)))
     (define-key map [?\M-\t] 'minibuffer-force-complete)
-    (define-key map [?\C-j]  'minibuffer-force-complete-and-exit)
+    (define-key map [?\C-j]  'icomplete-force-complete-and-exit)
     (define-key map [?\C-.]  'icomplete-forward-completions)
     (define-key map [?\C-,]  'icomplete-backward-completions)
     map)
   "Keymap used by `icomplete-mode' in the minibuffer.")
 
+(defun icomplete-force-complete-and-exit ()
+  "Complete the minibuffer and exit.
+Use the first of the matches if there are any displayed, and use
+the default otherwise."
+  (interactive)
+  (if (or icomplete-show-matches-on-no-input
+          (> (icomplete--field-end) (icomplete--field-beg)))
+      (minibuffer-force-complete-and-exit)
+    (minibuffer-complete-and-exit)))
+
 (defun icomplete-forward-completions ()
   "Step forward completions by one entry.
 Second entry becomes the first and can be selected with
-`minibuffer-force-complete-and-exit'."
+`icomplete-force-complete-and-exit'."
   (interactive)
   (let* ((beg (icomplete--field-beg))
          (end (icomplete--field-end))
@@ -171,7 +181,7 @@ Second entry becomes the first and can be selected with
 (defun icomplete-backward-completions ()
   "Step backward completions by one entry.
 Last entry becomes the first and can be selected with
-`minibuffer-force-complete-and-exit'."
+`icomplete-force-complete-and-exit'."
   (interactive)
   (let* ((beg (icomplete--field-beg))
          (end (icomplete--field-end))
index 60a59d6e99d3fbbd2fe799c7e82f46955243f84d..b97f72ce9400b533198305199fb5be31a1c16d9f 100644 (file)
@@ -377,7 +377,7 @@ use either \\[customize] or the function `ido-mode'."
   '("\\` ")
   "List of regexps or functions matching buffer names to ignore.
 For example, traditional behavior is not to list buffers whose names begin
-with a space, for which the regexp is `\\` '.  See the source file for
+with a space, for which the regexp is ‘\\` ’.  See the source file for
 example functions that filter buffer names."
   :type '(repeat (choice regexp function))
   :group 'ido)
@@ -386,7 +386,7 @@ example functions that filter buffer names."
   '("\\`CVS/" "\\`#" "\\`.#" "\\`\\.\\./" "\\`\\./")
   "List of regexps or functions matching file names to ignore.
 For example, traditional behavior is not to list files whose names begin
-with a #, for which the regexp is `\\`#'.  See the source file for
+with a #, for which the regexp is ‘\\`#’.  See the source file for
 example functions that filter filenames."
   :type '(repeat (choice regexp function))
   :group 'ido)
index be877eb250ab0f420dff51826fd88ff52a1d4b66..3c9908ac3622728f88089d71ebf10a9d3519e0ac 100644 (file)
@@ -511,7 +511,7 @@ evaluations respectively.  If the working buffer is another IELM
 buffer, then the values in the working buffer are used.  The variables
 `*1', `*2' and `*3', yield the process buffer values.
 
-If, at the start of evaluation, `standard-output' is `t' (the
+If, at the start of evaluation, `standard-output' is t (the
 default), `standard-output' is set to a special function that
 causes output to be directed to the ielm buffer.
 `standard-output' is restored after evaluation unless explicitly
index 05574ae11f529395a2442da9ed575248db64e0ab..d63581911c55e8b3e543301434dd0df0aeceed31 100644 (file)
@@ -303,7 +303,7 @@ when you hit the end of the current node."
   "If non-nil, hide the tag and section reference in *note and * menu items.
 If value is non-nil but not `hide', also replaces the \"*note\" with \"see\".
 If value is non-nil but not t or `hide', the reference section is still shown.
-`nil' completely disables this feature.  If this is non-nil, you might
+nil completely disables this feature.  If this is non-nil, you might
 want to set `Info-refill-paragraphs'."
   :version "22.1"
   :type '(choice (const :tag "No hiding" nil)
index 400856d1aa3c129024207d41163c6dcf55f1bb09..ba1ee6688256ea241c716bd0456b72c2c37a93cd 100644 (file)
@@ -34,7 +34,7 @@
                    (combining-vowel . "ꪴꪰꪲꪳꪷꪸꪾ")
                    (combining-tone . "꪿꫁")
                    (misc . "-"))))
-    ;; Set all TaiViet characters to `t'.
+    ;; Set all TaiViet characters to t.
     (set-char-table-range table (cons #xaa80 #xaac2) t)
     (set-char-table-range table (cons #xaadb #xaadf) t)
     ;; Overwrite it for special characters.
index 0d1940cf2482d842820c905db977ae66f1fb850e..a52a19ecb5e928c54064ee5619012df72a021a10 100644 (file)
@@ -27708,7 +27708,7 @@ Convert space before point into a hard space if the context is right.
 
 If
  * character before point is a space character,
- * character before that has “w” character syntax (i.e. it's a word
+ * character before that has \"w\" character syntax (i.e. it's a word
    constituent),
  * `tildify-space-pattern' matches when `looking-back' (no more than 10
    characters) from before the space character, and
index 08d53ea721c46f97fcdd617745e5b99d4277d6cd..7caa5ecbc1d90972caea947d6b3066667741f2d9 100644 (file)
@@ -1244,8 +1244,8 @@ Unicode based."
 This phonetic layout replaces all the Latin letters with Bulgarian
 \(Cyrillic) letters based on similarities in their pronunciation or look.
 
-Note that, since the letters 'щ', 'ь', 'ю' and 'я' are attached to the
-']', '\', '`' and '[' keys respectively, Caps Lock does not affect them."
+Note that, since the letters ‘щ’, ‘ь’, ‘ю’ and ‘я’ are attached to the
+‘]’, ‘\’, ‘`’ and ‘[’ keys respectively, Caps Lock does not affect them."
 nil t t t t nil nil nil nil nil t)
 
 ;;  Ю  1! 2@ 3№ 4$ 5% 6€ 7§ 8* 9( 0) -– =+ ьѝ
index d99f649e5e7e9f71ec89b2604621394f8976275f..7a1cddfff23b4e7c559abbe964ef6d9d23011818 100644 (file)
@@ -49,8 +49,8 @@ C-F9 or `M-x ethio-toggle-space'
   Toggles space characters for keyboard input.  The current mode is
   indicated in mode-line, whether by `_' (ASCII space) or `፡'
   (Ethiopic colon-like word separator).  Even in the `፡' mode, an
-  ASCII space is inserted if the point is preceded by `an Ethiopic
-  punctuation followed by zero or more ASCII spaces'.
+  ASCII space is inserted if the point is preceded by an Ethiopic
+  punctuation char that is followed by zero or more ASCII spaces.
 
 S-F5 or `M-x ethio-toggle-punctuation'
   Toggles ASCII punctuation and Ethiopic punctuation for keyboard input.
index fe06b27a92213f378672639878322ea9ed66b02a..5d63e4040a8bb8a0260db22570cbfd0712d91bc5 100644 (file)
@@ -113,8 +113,8 @@ Only Hebrew-related characters are considered.
 
 Based on latest draft of SI-1452 keyboard layout.
 Only Hebrew-related characters are considered.
'`' is used to switch levels instead of Alt-Gr.
-Geresh is mapped to '`k'.
‘`’ is used to switch levels instead of Alt-Gr.
+Geresh is mapped to ‘`k’.
 " nil t t t t nil nil nil nil nil t)
 
 (quail-define-rules
@@ -603,8 +603,8 @@ Not suitable for modern Hebrew input.
 
 Based on Society of Biblical Literature's SIL keyboard layout.
 Phonetic and not suitable for modern Hebrew input.
'`' is used to switch levels instead of Alt-Gr.
- Euro Sign (€) is mapped to 'Z'.
‘`’ is used to switch levels instead of Alt-Gr.
+ Euro Sign (€) is mapped to ‘Z’.
 " nil t t t t nil nil nil nil nil t)
 
 (quail-define-rules
index 3717104264335e7abf5a4f08a21a5d60cfe563e3..2554686b9a67cf96e7bfeb52e2b39fe677bd106c 100644 (file)
@@ -46,9 +46,9 @@
  "Thai Kesmanee input method with TIS620 keyboard layout
 
 The difference from the ordinal Thai keyboard:
-    '฿' and '๏' are assigned to '\\' and '|' respectively,
-    'ฃ' and 'ฅ' are assigned to '`' and '~' respectively,
-    Don't know where to assign characters '๚' and '๛'."
+    ‘฿’ and ‘๏’ are assigned to ‘\\’ and ‘|’ respectively,
+    ‘ฃ’ and ‘ฅ’ are assigned to ‘`’ and ‘~’ respectively,
+    Don't know where to assign characters ‘๚’ and ‘๛’."
  nil t t t t nil nil nil nil nil t)
 
 (thai-generate-quail-map
index 2aac13ab9b03a24d2d528931d99df66da6c03835..7b6a3ea4e42829bd19dfd9ff64eabd6dae41ea55 100644 (file)
@@ -62,7 +62,7 @@ See also `linum-before-numbering-hook'."
 
 (defcustom linum-eager t
   "Whether line numbers should be updated after each command.
-The conservative setting `nil' might miss some buffer changes,
+The conservative setting nil might miss some buffer changes,
 and you have to scroll or press \\[recenter-top-bottom] to update the numbers."
   :group 'linum
   :type 'boolean)
index c3d5705531e22f897dc8f9b6ac2778df1ba0d41d..0ddae24d5778c56f9e02e2b0546404b7656f5757 100644 (file)
@@ -669,7 +669,7 @@ SWITCHES is a list of characters.  Default sorting is alphabetic."
                ))))
   ;; Finally reverse file alist if necessary.
   ;; (eq below MUST compare `(not (memq ...))' to force comparison of
-  ;; `t' or `nil', rather than list tails!)
+  ;; t or nil, rather than list tails!)
   (if (eq (eq (not (memq ?U switches)) ; unsorted order is reversed
              (not (memq ?r switches))) ; reversed sort order requested
          ls-lisp-dirs-first)           ; already reversed
index 2f349b99bb60fd1ecbe512b19c3c63931cf752ca..f974f2083dcba891562872aaa0518758b6436819 100644 (file)
@@ -603,7 +603,7 @@ In other respects, this behaves like `end-of-buffer', which see."
 (eval-after-load "sendmail"
   '(progn
      (define-key mail-mode-map "\C-c\C-a" 'mail-abbrev-insert-alias)
-     (define-key mail-mode-map "\e\t"  ; like lisp-complete-symbol
+     (define-key mail-mode-map "\e\t"  ; like completion-at-point
        'mail-abbrev-complete-alias)))
 
 ;;(define-key mail-mode-map "\C-n" 'mail-abbrev-next-line)
index 48329167bf1279a5ea456110612b95ebd024d8b1..577cec0fd86fd07ca899e9b3e7982974fd9badb4 100644 (file)
@@ -77,7 +77,7 @@ If not on matching header, `mail-complete-function' gets called instead."
 ;;;###autoload
 (defcustom mail-complete-style 'angles
   "Specifies how \\[mail-complete] formats the full name when it completes.
-If `nil', they contain just the return address like:
+If nil, they contain just the return address like:
        king@grassland.com
 If `parens', they look like:
        king@grassland.com (Elvis Parsley)
index 9fa7aa5a6f24b51b4c28d69a0d912dbffc8fa0ea..ddd8697dcd60384b8898eac2ef37a9a72fa55713 100644 (file)
@@ -58,7 +58,7 @@
 (defcustom mail-from-style 'default
   "Specifies how \"From:\" fields look.
 
-If `nil', they contain just the return address like:
+If nil, they contain just the return address like:
        king@grassland.com
 If `parens', they look like:
        king@grassland.com (Elvis Parsley)
index cf3aac1a3177fe906ab8ea46a6fc804bad7db93e..56158cc156c849a72d3949f50c6201dbf470c59a 100644 (file)
@@ -886,10 +886,10 @@ Action can be one of: View, Modify, Add, or Delete."
 
 (defun sc-attribs-%@-addresses (from &optional delim)
   "Extract the author's email terminus from email address FROM.
-Match addresses of the style ``name%[stuff].'' when called with DELIM
-of \"%\" and addresses of the style ``[stuff]name@[stuff]'' when
+Match addresses of the style \"name%[stuff].\" when called with DELIM
+of \"%\" and addresses of the style \"[stuff]name@[stuff]\" when
 called with DELIM \"@\".  If DELIM is nil or not provided, matches
-addresses of the style ``name''."
+addresses of the style \"name\"."
   (and (string-match (concat "[-[:alnum:]_.]+" delim) from 0)
        (substring from
                  (match-beginning 0)
@@ -897,7 +897,7 @@ addresses of the style ``name''."
 
 (defun sc-attribs-!-addresses (from)
   "Extract the author's email terminus from email address FROM.
-Match addresses of the style ``[stuff]![stuff]...!name[stuff].''"
+Match addresses of the style \"[stuff]![stuff]...!name[stuff].\""
   (let ((eos (length from))
        (mstart (string-match "![-[:alnum:]_.]+\\([^-![:alnum:]_.]\\|$\\)"
                              from 0))
@@ -907,7 +907,7 @@ Match addresses of the style ``[stuff]![stuff]...!name[stuff].''"
 
 (defun sc-attribs-<>-addresses (from)
   "Extract the author's email terminus from email address FROM.
-Match addresses of the style ``<name[stuff]>.''"
+Match addresses of the style \"<name[stuff]>.\""
   (and (string-match "<\\(.*\\)>" from)
        (match-string 1 from)))
 
index 419aefbdad05cce584426c84b68eb872fc36e98e..c1e3439a5dedfa66fbd62ad4bb899ac15e49af56 100644 (file)
@@ -102,7 +102,7 @@ used is specified by `uudecode-decoder-program'."
        (let ((cdir default-directory)
              (default-process-coding-system
                (if (featurep 'xemacs)
-                   ;; In XEmacs, `nil' is not a valid coding system.
+                   ;; In XEmacs, nil is not a valid coding system.
                    '(binary . binary)
                  nil)))
          (unwind-protect
index 538bd974256afa96e8d6d87612e28aa1e116d383..60b89b6d5212004eed23072c8f7297f0a0eaa0c9 100644 (file)
@@ -1241,16 +1241,12 @@ scroll the window of possible completions."
 (defun minibuffer-force-complete-and-exit ()
   "Complete the minibuffer with first of the matches and exit."
   (interactive)
-  (if (and (eq (minibuffer-prompt-end) (point-max))
-           minibuffer-default)
-      ;; Use the provided default if there's one (bug#17545).
-      (minibuffer-complete-and-exit)
-    (minibuffer-force-complete)
-    (completion--complete-and-exit
-     (minibuffer-prompt-end) (point-max) #'exit-minibuffer
-     ;; If the previous completion completed to an element which fails
-     ;; test-completion, then we shouldn't exit, but that should be rare.
-     (lambda () (minibuffer-message "Incomplete")))))
+  (minibuffer-force-complete)
+  (completion--complete-and-exit
+   (minibuffer-prompt-end) (point-max) #'exit-minibuffer
+   ;; If the previous completion completed to an element which fails
+   ;; test-completion, then we shouldn't exit, but that should be rare.
+   (lambda () (minibuffer-message "Incomplete"))))
 
 (defun minibuffer-force-complete (&optional start end)
   "Complete the minibuffer to an exact match.
index 52153ad8322765d8a6a582b0609f966b40f2e637..1f893a72f8ee00c5e87389262da9342cd542f494 100644 (file)
 ;;
 ;;    "^$*$ *"
 ;;
-;; 9) Set the variable ange-ftp-gateway-program-interactive to 't' to let
+;; 9) Set the variable ange-ftp-gateway-program-interactive to t to let
 ;;    ange-ftp know that it has to "hand-hold" the login to the gateway
 ;;    machine.
 ;;
index 474a48ff276c4481a15179bc70ea55ecd733f93d..8f7754137cbb4be105dd1afaa19c888c57ffbf5e 100644 (file)
@@ -813,7 +813,7 @@ discovering the still incomplete interface."
   "Unregister OBJECT from D-Bus.
 OBJECT must be the result of a preceding `dbus-register-method',
 `dbus-register-property' or `dbus-register-signal' call.  It
-returns `t' if OBJECT has been unregistered, `nil' otherwise.
+returns t if OBJECT has been unregistered, nil otherwise.
 
 When OBJECT identifies the last method or property, which is
 registered for the respective service, Emacs releases its
@@ -1092,7 +1092,7 @@ well formed."
 (defun dbus-list-activatable-names (&optional bus)
   "Return the D-Bus service names which can be activated as list.
 If BUS is left nil, `:system' is assumed.  The result is a list
-of strings, which is `nil' when there are no activatable service
+of strings, which is nil when there are no activatable service
 names at all."
   (dbus-ignore-errors
     (dbus-call-method
@@ -1101,7 +1101,7 @@ names at all."
 
 (defun dbus-list-names (bus)
   "Return the service names registered at D-Bus BUS.
-The result is a list of strings, which is `nil' when there are no
+The result is a list of strings, which is nil when there are no
 registered service names at all.  Well known names are strings
 like \"org.freedesktop.DBus\".  Names starting with \":\" are
 unique names for services."
@@ -1119,7 +1119,7 @@ A service has a known name if it doesn't start with \":\"."
 
 (defun dbus-list-queued-owners (bus service)
   "Return the unique names registered at D-Bus BUS and queued for SERVICE.
-The result is a list of strings, or `nil' when there are no
+The result is a list of strings, or nil when there are no
 queued name owners service names at all."
   (dbus-ignore-errors
     (dbus-call-method
@@ -1128,7 +1128,7 @@ queued name owners service names at all."
 
 (defun dbus-get-name-owner (bus service)
   "Return the name owner of SERVICE registered at D-Bus BUS.
-The result is either a string, or `nil' if there is no name owner."
+The result is either a string, or nil if there is no name owner."
   (dbus-ignore-errors
     (dbus-call-method
      bus dbus-service-dbus dbus-path-dbus
@@ -1145,7 +1145,7 @@ apply
 
   \(member service \(dbus-list-known-names bus))"
   ;; "Ping" raises a D-Bus error if SERVICE does not exist.
-  ;; Otherwise, it returns silently with `nil'.
+  ;; Otherwise, it returns silently with nil.
   (condition-case nil
       (not
        (if (natnump timeout)
@@ -1335,7 +1335,7 @@ object can contain \"annotation\" children."
 (defun dbus-introspect-get-annotation-names
   (bus service path interface &optional name)
   "Return all annotation names as list of strings.
-If NAME is `nil', the annotations are children of INTERFACE,
+If NAME is nil, the annotations are children of INTERFACE,
 otherwise NAME must be a \"method\", \"signal\", or \"property\"
 object, where the annotations belong to."
   (let ((object
@@ -1352,7 +1352,7 @@ object, where the annotations belong to."
 (defun dbus-introspect-get-annotation
   (bus service path interface name annotation)
   "Return ANNOTATION as XML object.
-If NAME is `nil', ANNOTATION is a child of INTERFACE, otherwise
+If NAME is nil, ANNOTATION is a child of INTERFACE, otherwise
 NAME must be the name of a \"method\", \"signal\", or
 \"property\" object, where the ANNOTATION belongs to."
   (let ((elt (xml-get-children
@@ -1376,7 +1376,7 @@ NAME must be the name of a \"method\", \"signal\", or
   "Return a list of all argument names as list of strings.
 NAME must be a \"method\" or \"signal\" object.
 
-Argument names are optional, the function can return `nil'
+Argument names are optional, the function can return nil
 therefore, even if the method or signal has arguments."
   (let ((object
         (or (dbus-introspect-get-method bus service path interface name)
@@ -1404,9 +1404,9 @@ element of the list returned by `dbus-introspect-get-argument-names'."
   (bus service path interface name &optional direction)
   "Return signature of a `method' or `signal', represented by NAME, as string.
 If NAME is a `method', DIRECTION can be either \"in\" or \"out\".
-If DIRECTION is `nil', \"in\" is assumed.
+If DIRECTION is nil, \"in\" is assumed.
 
-If NAME is a `signal', and DIRECTION is non-`nil', DIRECTION must
+If NAME is a `signal', and DIRECTION is non-nil, DIRECTION must
 be \"out\"."
   ;; For methods, we use "in" as default direction.
   (let ((object (or (dbus-introspect-get-method
@@ -1440,7 +1440,7 @@ be \"out\"."
 (defun dbus-get-property (bus service path interface property)
   "Return the value of PROPERTY of INTERFACE.
 It will be checked at BUS, SERVICE, PATH.  The result can be any
-valid D-Bus value, or `nil' if there is no PROPERTY."
+valid D-Bus value, or nil if there is no PROPERTY."
   (dbus-ignore-errors
    ;; "Get" returns a variant, so we must use the `car'.
    (car
@@ -1451,7 +1451,7 @@ valid D-Bus value, or `nil' if there is no PROPERTY."
 (defun dbus-set-property (bus service path interface property value)
   "Set value of PROPERTY of INTERFACE to VALUE.
 It will be checked at BUS, SERVICE, PATH.  When the value has
-been set successful, the result is VALUE.  Otherwise, `nil' is
+been set successful, the result is VALUE.  Otherwise, nil is
 returned."
   (dbus-ignore-errors
    ;; "Set" requires a variant.
@@ -1465,7 +1465,7 @@ returned."
   "Return all properties of INTERFACE at BUS, SERVICE, PATH.
 The result is a list of entries.  Every entry is a cons of the
 name of the property, and its value.  If there are no properties,
-`nil' is returned."
+nil is returned."
   (dbus-ignore-errors
     ;; "GetAll" returns "a{sv}".
     (let (result)
index 0104fa7dd120916fec7535f7de7016c10e5ec159..1eb5342009ca90193284c6ca444b0704a6420c5c 100644 (file)
@@ -121,7 +121,7 @@ values:
 
 :client-certificate should either be a list where the first
   element is the certificate key file name, and the second
-  element is the certificate file name itself, or `t', which
+  element is the certificate file name itself, or t, which
   means that `auth-source' will be queried for the key and the
   certificate.  This parameter will only be used when doing TLS
   or STARTTLS connections.
index 11db7a2cab23c28e75a19885706629d16757796e..852d2941f0bec64cbb6d3d68fc86a4ccad30e6e0 100644 (file)
@@ -1372,7 +1372,7 @@ if ARG is omitted or nil."
     (t         . "%fp*** %fs%n %r %m"))
   "An alist of formats used for printing responses.
 The format is looked up using the response-type as a key;
-if no match is found, the default entry (with a key of `t') is used.
+if no match is found, the default entry (with a key of t) is used.
 
 The entry's value part should be a string, which is inserted with
 the of the following escape sequences replaced by the described values:
index d075820830321bf0bf498f30f6551b637ef634b4..e71179b6b89ca78e2d00e0e979c92c970020dad8 100644 (file)
@@ -235,14 +235,14 @@ variable."
   "Do remote or local directory tracking, or disable entirely.
 
 If called with no prefix argument or a unspecified prefix argument (just
-``\\[universal-argument]'' with no number) do remote directory tracking via
+`\\[universal-argument]' with no number) do remote directory tracking via
 ange-ftp.  If called as a function, give it no argument.
 
 If called with a negative prefix argument, disable directory tracking
 entirely.
 
 If called with a positive, numeric prefix argument, e.g.
-``\\[universal-argument] 1 M-x rlogin-directory-tracking-mode\'',
+`\\[universal-argument] 1 M-x rlogin-directory-tracking-mode',
 then do directory tracking but assume the remote filesystem is the same as
 the local system.  This only works in general if the remote machine and the
 local one share the same directories (e.g. through NFS)."
index 56cbec4ea7594360500ab81ec2ddbf41d15d3c66..c4102a18cefc696a70db3847930bea07b7b2c6e0 100644 (file)
@@ -85,7 +85,7 @@
 ;; temporarily.  This shall be preferred over creation of a persistent
 ;; collection, when the information shall not live longer than Emacs.
 ;; The session collection can be addressed either by the string
-;; "session", or by `nil', whenever a collection parameter is needed.
+;; "session", or by nil, whenever a collection parameter is needed.
 
 ;; As already said, a collection is a group of secret items.  A secret
 ;; item has a label, the "secret" (which is a string), and a set of
@@ -418,7 +418,7 @@ returned, and it will be stored in `secrets-session-path'."
 (defun secrets-prompt-handler (&rest args)
   "Handler for signals emitted by `secrets-interface-prompt'."
   ;; An empty object path is always identified as `secrets-empty-path'
-  ;; or `nil'.  Either we set it explicitly, or it is returned by the
+  ;; or nil.  Either we set it explicitly, or it is returned by the
   ;; "Completed" signal.
   (if (car args) ;; dismissed
       (setq secrets-prompt-signal (list secrets-empty-path))
index b19a432ee5378e478bfadc6ec10243d82066d0d7..77405740917a9c06d51cbe242b0f71dc0f5b5985 100644 (file)
@@ -490,7 +490,7 @@ elements named \"foo\" exist in the WSDL you could use:
 
   (soap-wsdl-get \"foo\" WSDL 'soap-message-p)
 
-If USE-LOCAL-ALIAS-TABLE is not nil, `soap-local-xmlns` will be
+If USE-LOCAL-ALIAS-TABLE is not nil, `soap-local-xmlns' will be
 used to resolve the namespace alias."
   (let ((alias-table (soap-wsdl-alias-table wsdl))
         namespace element-name element)
index f844f83d7167f420e430645077dcd161c9fae7bd..6d9f408d5ca9dc631fff9a71611e251c56197b53 100644 (file)
@@ -237,7 +237,7 @@ Normally input is edited in Emacs and sent a line at a time."
 (define-derived-mode telnet-mode comint-mode "Telnet"
   "This mode is for using telnet (or rsh) from a buffer to another host.
 It has most of the same commands as comint-mode.
-There is a variable ``telnet-interrupt-string'' which is the character
+There is a variable `telnet-interrupt-string' which is the character
 sent to try to stop execution of a job on the remote host.
 Data is sent to the remote host when RET is typed."
   (set (make-local-variable 'window-point-insertion-type) t)
index a92ca4df51c562dc4ca75bdd5c8127fe1e8988cc..7c509e1d098d0f71ab5e35a40f67386f8574bc69 100644 (file)
@@ -850,9 +850,9 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
       (when tmpinput (delete-file tmpinput))
 
       ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to `nil', no remote file will be changed
+      ;; Emacs 23.2.  If set to nil, no remote file will be changed
       ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value 't'.
+      ;; value t.
       (unless (and (boundp 'process-file-side-effects)
                   (not (symbol-value 'process-file-side-effects)))
         (tramp-flush-directory-property v ""))
index d45c0aad1426b2ba6032fb7753a2669d79ea34f5..89baaa444a77aea11d00039e3e395b87e51e51a3 100644 (file)
@@ -157,7 +157,7 @@ This includes password cache, file cache, connection cache, buffers."
   (interactive "P")
   (if arg (insert tramp-version) (message tramp-version)))
 
-;; Make the `reporter` functionality available for making bug reports about
+;; Make the "reporter" functionality available for making bug reports about
 ;; the package. A most useful piece of code.
 
 (autoload 'reporter-submit-bug-report "reporter")
index 3ec90ca556f1616ede0373072441029782706a2a..e68c81cfa70d123615e2a4757b5d029399e0ba70 100644 (file)
     (setq byte-compile-not-obsolete-vars '(directory-sep-char)))
 
   ;; `remote-file-name-inhibit-cache' has been introduced with Emacs 24.1.
-  ;; Besides `t', `nil', and integer, we use also timestamps (as
+  ;; Besides t, nil, and integer, we use also timestamps (as
   ;; returned by `current-time') internally.
   (unless (boundp 'remote-file-name-inhibit-cache)
     (defvar remote-file-name-inhibit-cache nil))
@@ -459,7 +459,7 @@ element is not omitted."
   (delete "" (split-string string pattern)))
 
 (defun tramp-compat-process-running-p (process-name)
-  "Returns `t' if system process PROCESS-NAME is running for `user-login-name'."
+  "Returns t if system process PROCESS-NAME is running for `user-login-name'."
   (when (stringp process-name)
     (cond
      ;; GNU Emacs 22 on w32.
index 5988a284c6eef47e15a85ad12bee9a39770de19a..215e39d04c30cbfae0c3c8d33368612635ef0e3f 100644 (file)
@@ -1563,7 +1563,7 @@ connection if a previous connection has died for some reason."
 (defun tramp-gvfs-send-command (vec command &rest args)
   "Send the COMMAND with its ARGS to connection VEC.
 COMMAND is usually a command from the gvfs-* utilities.
-`call-process' is applied, and it returns `t' if the return code is zero."
+`call-process' is applied, and it returns t if the return code is zero."
   (with-current-buffer (tramp-get-connection-buffer vec)
     (tramp-gvfs-maybe-open-connection vec)
     (erase-buffer)
index 3f006e84dc1ff1c0eb40183463ce1fe1fc0d0a83..acb97e880b42660743b03578cd6407c384207e52 100644 (file)
@@ -1558,7 +1558,7 @@ be non-negative integers."
        (progn
          (tramp-set-file-property v localname "file-acl" acl-string)
          t)
-      ;; In case of errors, we return `nil'.
+      ;; In case of errors, we return nil.
       (tramp-set-file-property v localname "file-acl-string" 'undef)
       nil)))
 
@@ -3103,9 +3103,9 @@ the result will be a local, non-Tramp, file name."
       (when tmpinput (delete-file tmpinput))
 
       ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to `nil', no remote file will be changed
+      ;; Emacs 23.2.  If set to nil, no remote file will be changed
       ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value `t'.
+      ;; value t.
       (unless (and (boundp 'process-file-side-effects)
                   (not (symbol-value 'process-file-side-effects)))
         (tramp-flush-directory-property v ""))
@@ -4973,8 +4973,8 @@ function waits for output unless NOOUTPUT is set."
   (vec command &optional subshell dont-suppress-err)
   "Run COMMAND and check its exit status.
 Sends `echo $?' along with the COMMAND for checking the exit status.
-If COMMAND is nil, just sends `echo $?'.  Returns `t' if the exit
-status is 0, and `nil' otherwise.
+If COMMAND is nil, just sends `echo $?'.  Returns t if the exit
+status is 0, and nil otherwise.
 
 If the optional argument SUBSHELL is non-nil, the command is
 executed in a subshell, ie surrounded by parentheses.  If
@@ -5551,7 +5551,7 @@ If no corresponding command is found, nil is returned.
 Otherwise, either a string is returned which contains a `%s' mark
 to be used for the respective input or output file; or a Lisp
 function cell is returned to be applied on a buffer."
-  ;; We must catch the errors, because we want to return `nil', when
+  ;; We must catch the errors, because we want to return nil, when
   ;; no inline coding is found.
   (ignore-errors
     (let ((coding
index 14360b96fe64a87dfcf88fc4243af1bef098917e..c4f0f1f500a2cf6452d1bf4419a7ddc8180f296b 100644 (file)
@@ -1242,9 +1242,9 @@ target of the symlink differ."
        (kill-buffer (tramp-get-connection-property v "process-buffer" nil)))
 
       ;; `process-file-side-effects' has been introduced with GNU
-      ;; Emacs 23.2.  If set to `nil', no remote file will be changed
+      ;; Emacs 23.2.  If set to nil, no remote file will be changed
       ;; by `program'.  If it doesn't exist, we assume its default
-      ;; value `t'.
+      ;; value t.
       (unless (and (boundp 'process-file-side-effects)
                   (not (symbol-value 'process-file-side-effects)))
        (tramp-flush-directory-property v ""))
index 10bb76983aae3e7615fadf6331eca7bddfc32bf3..95f54490cac597788fec48b5a508b97b3cdcd1da 100644 (file)
@@ -300,8 +300,8 @@ are fit for gateways must have `tramp-default-port' at least.
 
 Notes:
 
-When using `su' or `sudo' the phrase `open connection to a remote
-host' sounds strange, but it is used nevertheless, for consistency.
+When using `su' or `sudo' the phrase \"open connection to a remote
+host\" sounds strange, but it is used nevertheless, for consistency.
 No connection is opened to a remote host, but `su' or `sudo' is
 started on the local host.  You should specify a remote host
 `localhost' or the name of the local host.  Another host name is
@@ -1034,7 +1034,7 @@ The timeout does not include the time reading a password."
 This is necessary as self defense mechanism, in order to avoid
 yo-yo connection attempts when the remote host is unavailable.
 
-A value of 0 or `nil' suppresses this check.  This might be
+A value of 0 or nil suppresses this check.  This might be
 necessary, when several out-of-order copy operations are
 performed, or when several asynchronous processes will be started
 in a short time frame.  In those cases it is recommended to
@@ -1049,8 +1049,8 @@ A remote directory might have changed its contents.  In order to
 make it visible during file name completion in the minibuffer,
 Tramp flushes its cache and rereads the directory contents when
 more than `tramp-completion-reread-directory-timeout' seconds
-have been gone since last remote command execution.  A value of `t'
-would require an immediate reread during filename completion, `nil'
+have been gone since last remote command execution.  A value of t
+would require an immediate reread during filename completion, nil
 means to use always cached values for the directory contents."
   :group 'tramp
   :type '(choice (const nil) (const t) integer))
@@ -3314,7 +3314,7 @@ User is always nil."
 
 (defun tramp-handle-unhandled-file-name-directory (_filename)
   "Like `unhandled-file-name-directory' for Tramp files."
-  ;; Starting with Emacs 23, we must simply return `nil'.  But we must
+  ;; Starting with Emacs 23, we must simply return nil.  But we must
   ;; keep backward compatibility, also with XEmacs.  "~/" cannot be
   ;; returned, because there might be machines without a HOME
   ;; directory (like hydra).
@@ -3737,7 +3737,7 @@ Example:
 
   (tramp-equal-remote \"/ssh::/etc\" \"/<your host name>:/home\")
 
-would yield `t'.  On the other hand, the following check results in nil:
+would yield t.  On the other hand, the following check results in nil:
 
   (tramp-equal-remote \"/sudo::/etc\" \"/su::/etc\")"
   (and (tramp-tramp-file-p file1)
index 4ee8c6f1b0f661dd2d11b61dc222d9c4161820c1..39dd6a241f2486c77fc9041e00f8bc67211bf4a5 100644 (file)
@@ -378,7 +378,7 @@ If PROPERTY is not existing, retrieve it from ENGINE first."
 (defun xesam-search-engines ()
   "Return Xesam search engines, stored in `xesam-search-engines'.
 The first search engine is the name owner of `xesam-service-search'.
-If there is no registered search engine at all, the function returns `nil'."
+If there is no registered search engine at all, the function returns nil."
   (let ((services (dbus-ignore-errors
                    (dbus-list-queued-owners
                     :session xesam-service-search)))
index 7e09d6d78be411e30855be9af191a6239ff6645d..8dee01a5389e2155482d3145f9353b01e8d5a0bc 100644 (file)
@@ -58,7 +58,7 @@
   :type 'string)
 
 (defcustom org-babel-ruby-nil-to 'hline
-  "Replace 'nil' in ruby tables with this before returning."
+  "Replace nil in ruby tables with this before returning."
   :group 'org-babel
   :version "24.4"
   :package-version '(Org . "8.0")
index 8f7611fd1ff30553507c50a4fc55e9b1e8b75f16..65696b21d71310cf537187748bb2eb8c184a91cc 100644 (file)
@@ -6642,7 +6642,7 @@ The modified list may contain inherited tags, and tags matched by
 
 LIST is the list of agenda items formatted by `org-agenda-list'.
 NDAYS is the span of the current agenda view.
-TODAYP is `t' when the current agenda view is on today."
+TODAYP is t when the current agenda view is on today."
   (catch 'exit
     (cond ((not org-agenda-use-time-grid) (throw 'exit list))
          ((and todayp (member 'today (car org-agenda-time-grid))))
index a0711cc006b564e55c85e6b31ec43a3840a8e1dd..c489385019907c06d86ea11d0f7cb1a3630bae72 100644 (file)
@@ -37,7 +37,7 @@
 ;; the diary using bbdb-anniv.el.
 ;;
 ;; Put the following in /somewhere/at/home/diary.org and make sure
-;; that this file is in `org-agenda-files`
+;; that this file is in `org-agenda-files'.
 ;;
 ;; %%(org-bbdb-anniversaries)
 ;;
index 7f1f7ed8af12a11d6e98df6892a260f3ce1898f7..64e30152a5bd7d6a7757b935cfb575fa2e1c5e05 100644 (file)
@@ -201,7 +201,7 @@ properties are:
 
  :clock-resume       Start the interrupted clock when finishing the capture.
                      Note that :clock-keep has precedence over :clock-resume.
-                     When setting both to `t', the current clock will run and
+                     When setting both to t, the current clock will run and
                      the previous one will not be resumed.
 
  :unnarrowed         Do not narrow the target buffer, simply show the
index 9c92903314a505a6405438aa0da9c0a4180753e4..d3c477e7f3f981c16578d052cd298d5246f21fb3 100644 (file)
@@ -241,7 +241,7 @@ ignored in this case."
   (or window (selected-window)))
 
 (defun org-number-sequence (from &optional to inc)
-  "Call `number-sequence or emulate it."
+  "Call `number-sequence' or emulate it."
   (if (fboundp 'number-sequence)
       (number-sequence from to inc)
     (if (or (not to) (= from to))
index 880994a8fa9fcb4e3e5cda87b092fd3aa28465ab..8b616f0a0ffeab81ad5b1e23c2fee861c19475f9 100644 (file)
@@ -60,7 +60,7 @@ Normally, this translation is done by querying the IMAP server,
 which is usually very fast.  Unfortunately, some (maybe badly
 configured) IMAP servers don't support this operation quickly.
 So if following a link to a Gnus article takes ages, try setting
-this variable to `t'."
+this variable to t."
   :group 'org-link-store
   :version "24.1"
   :type 'boolean)
index db09909f40450006c2500ae6280ee87ebc90d624..ea8e7b532aabd2608ae5188502bb59457a35c10f 100644 (file)
@@ -55,7 +55,7 @@
      ,@body))
 
 (defmacro org-called-interactively-p (&optional kind)
-  (declare (debug (&optional ("quote" symbolp)))) ;Why not just `t'?
+  (declare (debug (&optional ("quote" symbolp)))) ;Why not just t?
   (if (featurep 'xemacs)
       `(interactive-p)
     (if (or (> emacs-major-version 23)
index eeefc8da52875b7dc846fbf10aed4c50b355daed..d0750f7d63945a3c9c77e51c171af8704e1c41af 100644 (file)
@@ -561,7 +561,7 @@ as filename."
         (let ((fname  (expand-file-name (car var))))
           (setq fname (org-protocol-check-filename-for-protocol
                       fname (member var flist)  client))
-          (if (eq fname t) ;; greedy? We need the `t' return value.
+          (if (eq fname t) ;; greedy? We need the t return value.
               (progn
                 (ad-set-arg 0 nil)
                 (throw 'greedy t))
index 54924a9964a5f1e0036f4a683621ade57ee02b2a..29ef8efb640865ca55946c706e2eed28f932419f 100644 (file)
@@ -595,7 +595,7 @@ XEmacs user should have this variable set to nil, because
 (defcustom org-loop-over-headlines-in-active-region nil
   "Shall some commands act upon headlines in the active region?
 
-When set to `t', some commands will be performed in all headlines
+When set to t, some commands will be performed in all headlines
 within the active region.
 
 When set to `start-level', some commands will be performed in all
@@ -1452,7 +1452,7 @@ changed by an edit command."
 (defcustom org-remove-highlights-with-change t
   "Non-nil means any change to the buffer will remove temporary highlights.
 Such highlights are created by `org-occur' and `org-clock-display'.
-When nil, `C-c C-c needs to be used to get rid of the highlights.
+When nil, `C-c C-c' needs to be used to get rid of the highlights.
 The highlights created by `org-preview-latex-fragment' always need
 `C-c C-c' to be removed."
   :group 'org-sparse-trees
@@ -1575,7 +1575,7 @@ See the manual for examples."
   "Non-nil means Org will display descriptive links.
 E.g. [[http://orgmode.org][Org website]] will be displayed as
 \"Org Website\", hiding the link itself and just displaying its
-description.  When set to `nil', Org will display the full links
+description.  When set to nil, Org will display the full links
 literally.
 
 You can interactively set the value of this variable by calling
@@ -11558,7 +11558,7 @@ go to the location where the last refiling operation has put the subtree.
 With a numeric prefix argument of `2', refile to the running clock.
 
 With a numeric prefix argument of `3', emulate `org-refile-keep'
-being set to `t' and copy to the target location, don't move it.
+being set to t and copy to the target location, don't move it.
 Beware that keeping refiled entries may result in duplicated ID
 properties.
 
@@ -12077,7 +12077,7 @@ This is a list of abbreviation keys and values.  The value gets inserted
 if you type `<' followed by the key and then press the completion key,
 usually `M-TAB'.  %file will be replaced by a file name after prompting
 for the file using completion.  The cursor will be placed at the position
-of the `?` in the template.
+of the `?' in the template.
 There are two templates for each key, the first uses the original Org syntax,
 the second uses Emacs Muse-like syntax tags.  These Muse-like tags become
 the default when the /org-mtags.el/ module has been loaded.  See also the
@@ -15541,7 +15541,7 @@ and the new value.")
 
 (defun org-entry-put (pom property value)
   "Set PROPERTY to VALUE for entry at point-or-marker POM.
-If the value is `nil', it is converted to the empty string.
+If the value is nil, it is converted to the empty string.
 If it is not a string, an error is raised."
   (cond ((null value) (setq value ""))
        ((not (stringp value))
@@ -17749,7 +17749,7 @@ If no number is found, the return value is 0."
 (defcustom org-image-actual-width t
   "Should we use the actual width of images when inlining them?
 
-When set to `t', always use the image width.
+When set to t, always use the image width.
 
 When set to a number, use imagemagick (when available) to set
 the image's width to this value.
@@ -17776,7 +17776,7 @@ This requires Emacs >= 24.1, build with imagemagick support."
 
 (defcustom org-agenda-inhibit-startup nil
   "Inhibit startup when preparing agenda buffers.
-When this variable is `t', the initialization of the Org agenda
+When this variable is t, the initialization of the Org agenda
 buffers is inhibited: e.g. the visibility state is not set, the
 tables are not re-aligned, etc."
   :type 'boolean
index 36984b5cc3736750a8c49837a5d244c9c3e40fce..144b58b9bc852702c4bcbf40c072ab50db51d364 100644 (file)
@@ -711,7 +711,7 @@ t              Synonym for `mathjax'."
 When `org-mode' is exporting an `org-mode' file to HTML, links to
 non-html files are directly put into a href tag in HTML.
 However, links to other Org-mode files (recognized by the
-extension `.org.) should become links to the corresponding html
+extension `.org') should become links to the corresponding html
 file, assuming that the linked `org-mode' file will also be
 converted to HTML.
 When nil, the links still point to the plain `.org' file."
index 6c74fb3eabd169cc8e98c22d18dbed5df3547609..f1ef90e169bcfcc287abb3cc87e9c9fd422e1360 100644 (file)
@@ -847,7 +847,7 @@ TABLE-CELL-STYLE-SELECTOR := `use-first-row-styles'       |
                              `use-banding-rows-styles'    |
                              `use-banding-columns-styles' |
                              `use-first-row-styles'
-ON-OR-OFF                 := `t' | `nil'
+ON-OR-OFF                 := t | nil
 
 For example, with the following configuration
 
@@ -3261,7 +3261,7 @@ contextual information."
   "Retrieve styles applicable to a table cell.
 R and C are (zero-based) row and column numbers of the table
 cell.  STYLE-SPEC is an entry in `org-odt-table-styles'
-applicable to the current table.  It is `nil' if the table is not
+applicable to the current table.  It is nil if the table is not
 associated with any style attributes.
 
 Return a cons of (TABLE-CELL-STYLE-NAME . PARAGRAPH-STYLE-NAME).
index 0c81b62061812e82f594e4076b77cbb6e6c86a2b..26f58ad662ac718796eb6a7f8bcc889e2d9b26b5 100644 (file)
 (defcustom org-texinfo-coding-system nil
   "Default document encoding for Texinfo output.
 
-If `nil' it will default to `buffer-file-coding-system'."
+If nil it will default to `buffer-file-coding-system'."
   :group 'org-export-texinfo
   :type 'coding-system)
 
index 32ea66307173e8ce1005ddc4d232ee81d3be0b85..62a8fe4bb0b64f2e974b7d9b49f71bdfcaa4ca19 100644 (file)
@@ -279,7 +279,7 @@ Variables: `handwrite-linespace'     (default 12)
     (handwrite-set-pagenumber-on)))
 
 (defun handwrite-10pt ()
-  "Specify 10-point output for `handwrite.
+  "Specify 10-point output for `handwrite'.
 This sets `handwrite-fontsize' to 10 and finds correct
 values for `handwrite-linespace' and `handwrite-numlines'."
   (interactive)
@@ -290,7 +290,7 @@ values for `handwrite-linespace' and `handwrite-numlines'."
 
 
 (defun handwrite-11pt ()
-  "Specify 11-point output for `handwrite.
+  "Specify 11-point output for `handwrite'.
 This sets `handwrite-fontsize' to 11 and finds correct
 values for `handwrite-linespace' and `handwrite-numlines'."
   (interactive)
@@ -300,7 +300,7 @@ values for `handwrite-linespace' and `handwrite-numlines'."
   (message "Handwrite output size set to 11 points"))
 
 (defun handwrite-12pt ()
-  "Specify 12-point output for `handwrite.
+  "Specify 12-point output for `handwrite'.
 This sets `handwrite-fontsize' to 12 and finds correct
 values for `handwrite-linespace' and `handwrite-numlines'."
   (interactive)
@@ -310,7 +310,7 @@ values for `handwrite-linespace' and `handwrite-numlines'."
   (message "Handwrite output size set to 12 points"))
 
 (defun handwrite-13pt ()
-  "Specify 13-point output for `handwrite.
+  "Specify 13-point output for `handwrite'.
 This sets `handwrite-fontsize' to 13 and finds correct
 values for `handwrite-linespace' and `handwrite-numlines'."
   (interactive)
index 6b611e6f99b15ec5ea32e698e06a93441affccf6..771dc2a3da1f74a249954726e11a405412a12f43 100644 (file)
@@ -954,7 +954,7 @@ Return new value of PROJECT."
        (append (mapcar 'directory-file-name compilation-search-path)
                ada-search-directories))
 
-  ;; return 't', for decent display in message buffer when called interactively
+  ;; return t, for decent display in message buffer when called interactively
   t)
 
 (defun ada-find-references (&optional pos arg local-only)
index d0beab1d48555e6696a2fc05f32fe579e51b77b7..fd4bfb3b921a81aa0bb38b58b87799238e9de431 100644 (file)
@@ -1983,7 +1983,7 @@ system."
 
 (defvar c-lang-const-expansion nil)
 
-;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading`
+;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading'
 ;; from cc-bytecomp to make it available at loadtime.  This is the same
 ;; mechanism used in cc-mode.el for `c-populate-syntax-table'.
 (defalias 'cc-bytecomp-compiling-or-loading
@@ -2017,10 +2017,10 @@ The second argument can optionally be a docstring.  The rest of the
 arguments are one or more repetitions of LANG VAL where LANG specifies
 the language(s) that VAL applies to.  LANG is the name of the
 language, i.e. the mode name without the \"-mode\" suffix, or a list
-of such language names, or `t' for all languages.  VAL is a form to
+of such language names, or t for all languages.  VAL is a form to
 evaluate to get the value.
 
-If LANG isn't `t' or one of the core languages in CC Mode, it must
+If LANG isn't t or one of the core languages in CC Mode, it must
 have been declared with `c-add-language'.
 
 Neither NAME, LANG nor VAL are evaluated directly - they should not be
@@ -2030,7 +2030,7 @@ VAL to evaluate parts of it directly.
 When VAL is evaluated for some language, that language is temporarily
 made current so that `c-lang-const' without an explicit language can
 be used inside VAL to refer to the value of a language constant in the
-same language.  That is particularly useful if LANG is `t'.
+same language.  That is particularly useful if LANG is t.
 
 VAL is not evaluated right away but rather when the value is requested
 with `c-lang-const'.  Thus it's possible to use `c-lang-const' inside
@@ -2365,7 +2365,7 @@ fallback definition for all modes, to break the cycle).")
 
 (defun c-find-assignment-for-mode (source-pos mode match-any-lang _name)
   ;; Find the first assignment entry that applies to MODE at or after
-  ;; SOURCE-POS.  If MATCH-ANY-LANG is non-nil, entries with `t' as
+  ;; SOURCE-POS.  If MATCH-ANY-LANG is non-nil, entries with t as
   ;; the language list are considered to match, otherwise they don't.
   ;; On return SOURCE-POS is updated to point to the next assignment
   ;; after the returned one.  If no assignment is found,
index 823d795b6de8af248e2792f2b3ebd1cd2ed61e7a..06b03a24bd6f927d1ea28a6676b6edd3270fdcb2 100644 (file)
@@ -7972,7 +7972,7 @@ comment at the start of cc-engine.el for more info."
   ;; This should be called with point inside an argument list.
   ;;
   ;; Only one level of enclosing parentheses is considered, so for
-  ;; instance `nil' is returned when in a function call within an asm
+  ;; instance nil is returned when in a function call within an asm
   ;; operand.
   ;;
   ;; This function might do hidden buffer changes.
index 44172b05a56f3e64d2cd7ec0633bd142e449eb1f..ad564f7c3dfee2a2a171aed95255cbf9635c03c9 100644 (file)
@@ -1772,8 +1772,8 @@ on level 2 only and so aren't combined with `c-complex-decl-matchers'."
 ;;                    "\\|"
 ;;                    (c-lang-const c-symbol-key)
 ;;                    "\\)")
-;;            `((c-font-lock-declarators limit t nil) ; That `nil' says use `font-lock-variable-name-face';
-;;                                     ; `t' would mean `font-lock-function-name-face'.
+;;            `((c-font-lock-declarators limit t nil) ; That nil says use `font-lock-variable-name-face';
+;;                                     ; t would mean `font-lock-function-name-face'.
 ;;              (progn
 ;;                (c-put-char-property (match-beginning 0) 'c-type
 ;;                                     'c-decl-id-start)
index 20534737d8aeb326d11b6488f62c53ceb63476a8..ba23a75ff2203082807a7a71e838f7b9188d09fb 100644 (file)
@@ -91,7 +91,7 @@ The offset of a line included in the indent information returned by
 (defcustom c-guess-region-max 50000
   "The maximum region size for examining indent information with `c-guess'.
 It takes a long time to examine indent information from a large region;
-this option helps you limit that time. `nil' means no limit."
+this option helps you limit that time. nil means no limit."
   :version "24.1"
   :type 'integer
   :group 'c)
@@ -465,7 +465,7 @@ the absolute file name of the file if STYLE-NAME is nil."
 (defun c-guess-dump-guessed-style (&optional printer)
   "Show the guessed style.
 `pp' is used to print the style but if PRINTER is given,
-PRINTER is used instead. If PRINTER is not `nil', it
+PRINTER is used instead. If PRINTER is not nil, it
 is called with one argument, the guessed style."
   (interactive)
   (let ((style (c-guess-make-style c-guess-guessed-basic-offset
index 9d36e91cf8f49e1a378b0e09eeabbde9bbe84619..a58e393779ade066e7f8c74d33b0ed4522b8ce9a 100644 (file)
@@ -216,7 +216,7 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
     ;; due to matching filenames via \\(.*?\\).  This might be faster.
     (maven
      ;; Maven is a popular free software build tool for Java.
-     "\\([^ \n]\\(?:[^\n :]\\| [^-/\n]\\|:[^ \n]\\)*?\\):\\[\\([0-9]+\\),\\([0-9]+\\)\\] " 1 2 3)
+     "\\(\\[WARNING\\] *\\)?\\([^ \n]\\(?:[^\n :]\\| [^-/\n]\\|:[^ \n]\\)*?\\):\\[\\([0-9]+\\),\\([0-9]+\\)\\] " 2 3 4 (1))
 
     (jikes-line
      "^ *\\([0-9]+\\)\\.[ \t]+.*\n +\\(<-*>\n\\*\\*\\* \\(?:Error\\|Warnin\\(g\\)\\)\\)"
index 2acfc104cf3fdcdf5daf37b7975377e51f36d552..d6f6f3b25b0fa8ef3d279bc7fe4788512f53ef9e 100644 (file)
@@ -282,7 +282,7 @@ This is in addition to cperl-continued-statement-offset."
 
 (defcustom cperl-indent-wrt-brace t
   "*Non-nil means indent statements in if/etc block relative brace, not if/etc.
-Versions 5.2 ... 5.20 behaved as if this were `nil'."
+Versions 5.2 ... 5.20 behaved as if this were nil."
   :type 'boolean
   :group 'cperl-indentation-details)
 
index 486d67297a9cd6fc36b268d2bb5b13ffd402e6fa..4af8ac6971edf3439ea00f4fb3a34b9226895ef7 100644 (file)
@@ -2376,9 +2376,9 @@ Sets `gdb-thread-number' to new id."
   (let* ((result (gdb-json-string output-field))
          (thread-id (bindat-get-field result 'id)))
     (gdb-setq-thread-number thread-id)
-    ;; Typing `thread N` in GUD buffer makes GDB emit `^done` followed
-    ;; by `=thread-selected` notification. `^done` causes `gdb-update`
-    ;; as usually. Things happen to fast and second call (from
+    ;; Typing `thread N' in GUD buffer makes GDB emit `^done' followed
+    ;; by `=thread-selected' notification. `^done' causes `gdb-update'
+    ;; as usually. Things happen too fast and second call (from
     ;; gdb-thread-selected handler) gets cut off by our beloved
     ;; pending triggers.
     ;; Solution is `gdb-wait-for-pending' macro: it guarantees that its
index 02a8ec8a5608ff12e85b61d829bbe9d536f64f23..23f9d4af8c9217e642d597608325a5e7a96a7249 100644 (file)
@@ -229,7 +229,7 @@ to set this option to nil."
 
 (defcustom idlwave-shell-file-name-chars "~/A-Za-z0-9+:_.$#%={}\\- "
   "The characters allowed in file names, as a string.
-Used for file name completion.  Must not contain `'', `,' and `\"'
+Used for file name completion.  Must not contain ‘'’, ‘,’ and ‘\"’
 because these are used as separators by IDL."
   :group 'idlwave-shell-general-setup
   :type 'string)
@@ -2638,7 +2638,7 @@ If ENABLE is non-nil, enable them instead."
 (defun idlwave-shell-break-in ()
   "Look for a module name near point and set a break point for it.
 The command looks for an identifier near point and sets a breakpoint
-for the first line of the corresponding module.  If MODULE is `t', set
+for the first line of the corresponding module.  If MODULE is t, set
 in the current routine."
   (interactive)
   (let* ((module (idlwave-fix-module-if-obj_new (idlwave-what-module)))
index 7e269cb60f0625d96fbf859ea62dce18f573498d..44d84d65810ee3737876c70b2173cb50a1c1e6cb 100644 (file)
@@ -1837,7 +1837,7 @@ The main features of this mode are
 5. Code Templates and Abbreviations
    --------------------------------
    Many Abbreviations are predefined to expand to code fragments and templates.
-   The abbreviations start generally with a `\\`.  Some examples:
+   The abbreviations start generally with a `\\'.  Some examples:
 
    \\pr        PROCEDURE template
    \\fu        FUNCTION template
@@ -2047,7 +2047,7 @@ If optional argument RESERVED is non-nil then the expansion
 consists of reserved words, which will be capitalized if
 `idlwave-reserved-word-upcase' is non-nil.
 Otherwise, the abbrev will be capitalized if `idlwave-abbrev-change-case'
-is non-nil, unless its value is \`down in which case the abbrev will be
+is non-nil, unless its value is `down' in which case the abbrev will be
 made into all lowercase.
 Returns non-nil if abbrev is left expanded."
   (if (idlwave-quoted)
@@ -8162,7 +8162,7 @@ demand _EXTRA in the keyword list."
                               class
                               (idlwave-routines)) 'do-link))))))
 
-    ;; If the class is `t', combine all keywords of all methods NAME
+    ;; If the class is t, combine all keywords of all methods NAME
     (when (eq class t)
       (mapc (lambda (entry)
              (and
index 4b0a028faa3aa3d3e533a4391d50f4338e965285..d45d082c40ab2c3f11f71b49e924ca76fa831f9c 100644 (file)
@@ -3216,7 +3216,7 @@ With argument MSG show activation/deactivation message."
            (concat
             "Your `python-shell-interpreter' doesn't seem to "
             "support readline, yet `python-shell-completion-native' "
-            (format "was `t' and %S is not part of the "
+            (format "was t and %S is not part of the "
                     (file-name-nondirectory python-shell-interpreter))
             "`python-shell-completion-native-disabled-interpreters' "
             "list.  Native completions have been disabled locally. "))
index 0e2f66e5bc577b1be5a5f90c177981382a1c8a0d..21ad1021c9e1dce8bef66f225d0676f2584f87b8 100644 (file)
@@ -287,7 +287,7 @@ Only has effect when `ruby-use-smie' is nil."
   :group 'ruby
   :safe 'booleanp)
 
-;; FIXME Woefully under documented.  What is the point of the last `t'?.
+;; FIXME Woefully under documented.  What is the point of the last t?.
 (defcustom ruby-deep-indent-paren '(?\( ?\[ ?\] t)
   "Deep indent lists in parenthesis when non-nil.
 The value t means continuous line.
index a1ad49e9a2ce45926fec236ee37c94d39799760e..4b0cb0f6fd8891d3622cbdd1cacd840a179d321f 100644 (file)
@@ -519,8 +519,8 @@ take you to the next lint error."
 
 (defvar verilog-tool 'verilog-linter
   "Which tool to use for building compiler-command.
-Either nil, `verilog-linter, `verilog-compiler,
-`verilog-coverage, `verilog-preprocessor, or `verilog-simulator.
+Either nil, `verilog-linter', `verilog-compiler',
+`verilog-coverage', `verilog-preprocessor', or `verilog-simulator'.
 Alternatively use the \"Choose Compilation Action\" menu.  See
 `verilog-set-compile-command' for more information.")
 
@@ -1674,7 +1674,7 @@ If third arg START is non-nil, start search at that index in STRING."
 
 (defsubst verilog-string-replace-matches (from-string to-string fixedcase literal string)
   "Replace occurrences of FROM-STRING with TO-STRING.
-FIXEDCASE and LITERAL as in `replace-match`.  STRING is what to replace.
+FIXEDCASE and LITERAL as in `replace-match'.  STRING is what to replace.
 The case (verilog-string-replace-matches \"o\" \"oo\" nil nil \"foobar\")
 will break, as the o's continuously replace.  xa -> x works ok though."
   ;; Hopefully soon to an Emacs built-in
@@ -5201,7 +5201,7 @@ becomes:
 (defun verilog-preprocess (&optional command filename)
   "Preprocess the buffer, similar to `compile', but put output in Verilog-Mode.
 Takes optional COMMAND or defaults to `verilog-preprocessor', and
-FILENAME to find directory to run in, or defaults to `buffer-file-name`."
+FILENAME to find directory to run in, or defaults to `buffer-file-name'."
   (interactive
    (list
     (let ((default (verilog-expand-command verilog-preprocessor)))
@@ -12648,7 +12648,7 @@ driver/monitor using AUTOINST in the testbench."
 (defun verilog-auto-insert-lisp ()
   "Expand AUTOINSERTLISP statements, as part of \\[verilog-auto].
 The Lisp code provided is called before other AUTOS are expanded,
-and the Lisp code generally will call `insert` to insert text
+and the Lisp code generally will call `insert' to insert text
 into the current file beginning on the line after the
 AUTOINSERTLISP.
 
@@ -12713,7 +12713,7 @@ text:
 (defun verilog-auto-insert-last ()
   "Expand AUTOINSERTLAST statements, as part of \\[verilog-auto].
 The Lisp code provided is called after all other AUTOS have been
-expanded, and the Lisp code generally will call `insert` to
+expanded, and the Lisp code generally will call `insert' to
 insert text into the current file beginning on the line after the
 AUTOINSERTLAST.
 
index 0a2c214690fbff5a76574c6be5cfcff07bf497dc..e76b332ee3ca21c05eceeda05ec3fa5a310c1681 100644 (file)
@@ -809,7 +809,7 @@ Please send all bug fixes and enhancements to
 ;; on next page.  Visually, valid values are (the character `+' at right of
 ;; each column indicates that a line is printed):
 ;;
-;;                `nil'        `follow'        `full'        `full-follow'
+;;                 nil         `follow'        `full'        `full-follow'
 ;; Current Page --------     -----------     ---------     ----------------
 ;;             1  XXXXX +   1  XXXXXXXX +   1  XXXXXX +   1  XXXXXXXXXXXXX +
 ;;             2  XXXXX +   2  XXXXXXXX +   2  XXXXXX +   2  XXXXXXXXXXXXX +
@@ -2117,7 +2117,7 @@ See also documentation for `ps-zebra-stripes' and `ps-zebra-stripe-height'."
 Visually, valid values are (the character `+' at right of each column indicates
 that a line is printed):
 
-                  `nil'        `follow'        `full'        `full-follow'
+                   nil         `follow'        `full'        `full-follow'
    Current Page --------     -----------     ---------     ----------------
                1  XXXXX +   1  XXXXXXXX +   1  XXXXXX +   1  XXXXXXXXXXXXX +
                2  XXXXX +   2  XXXXXXXX +   2  XXXXXX +   2  XXXXXXXXXXXXX +
index 37937ec1be1d0fb2c6d559018543389b458fdf90..89c1517e7f64693701b35235f081ed171b464813 100644 (file)
@@ -294,7 +294,7 @@ They are successively passed a file name to transform it."
             (function :tag "Other function")))))
 
 (defcustom recentf-show-file-shortcuts-flag t
-  "Whether to show ``[N]'' for the Nth item up to 10.
+  "Whether to show \"[N]\" for the Nth item up to 10.
 If non-nil, `recentf-open-files' will show labels for keys that can be
 used as shortcuts to open the Nth file."
   :group 'recentf
index e986015845055575a28df08b792bce395228ad67..e625e4ed59392cf66adba9e348b37f9ce562228c 100644 (file)
@@ -172,7 +172,7 @@ Each function is called with ARG=1."
                "\C-c\C-s"    ses-insert-ses-range
                [S-mouse-3]   ses-insert-range-click
                [C-S-mouse-3] ses-insert-ses-range-click
-               "\M-\C-i"     lisp-complete-symbol))
+               "\M-\C-i"     lisp-complete-symbol)) ; FIXME obsolete
        (newmap (make-sparse-keymap)))
     (set-keymap-parent newmap minibuffer-local-map)
     (while keys
@@ -2276,7 +2276,7 @@ to are recalculated first."
     (when (and (< col (1- ses--numcols)) ;;Last column can't spill over, anyway
               (eq (ses-cell-value row (1+ col)) '*skip*))
       ;; This cell has spill-over.  We'll momentarily pretend the following cell
-      ;; has a `t' in it.
+      ;; has a t in it.
       (cl-progv
          (list (ses-cell-symbol row (1+ col)))
          '(t)
@@ -3528,11 +3528,11 @@ execution anyway.  Always returns t if `safe-functions' is t."
 ;;----------------------------------------------------------------------------
 
 (defun ses--clean-! (&rest x)
-  "Clean by `delq' list X from any occurrence of `nil' or `*skip*'."
+  "Clean by `delq' list X from any occurrence of nil or `*skip*'."
   (delq nil (delq '*skip* x)))
 
 (defun ses--clean-_ (x y)
-  "Clean list X  by replacing by Y any occurrence of `nil' or `*skip*'.
+  "Clean list X  by replacing by Y any occurrence of nil or `*skip*'.
 
 This will change X by making `setcar' on its cons cells."
   (let ((ret x) ret-elt)
index dfd92dcdc05237648faafa8e7cc2e5e7b84947a4..49a95aea4a801be1328dbe2aee32d5bd8c5a4454 100644 (file)
@@ -3488,9 +3488,9 @@ value passed."
 (defvar process-file-side-effects t
   "Whether a call of `process-file' changes remote files.
 
-By default, this variable is always set to `t', meaning that a
+By default, this variable is always set to t, meaning that a
 call of `process-file' could potentially change any file on a
-remote host.  When set to `nil', a file handler could optimize
+remote host.  When set to nil, a file handler could optimize
 its behavior with respect to remote file attribute caching.
 
 You should only ever change this variable with a let-binding;
@@ -6675,7 +6675,7 @@ beyond `current-fill-column' automatically breaks the line at a
 previous space.
 
 When `auto-fill-mode' is on, the `auto-fill-function' variable is
-non-`nil'.
+non-nil.
 
 The value of `normal-auto-fill-function' specifies the function to use
 for `auto-fill-function' when turning Auto Fill mode on."
@@ -8232,7 +8232,7 @@ version and use the one distributed with Emacs."))
 Each element has the form (PACKAGE SYMBOL REGEXP STRING).
 PACKAGE is either a regular expression to match file names, or a
 symbol (a feature name), like for `with-eval-after-load'.
-SYMBOL is either the name of a string variable, or `t'.  Upon
+SYMBOL is either the name of a string variable, or t.  Upon
 loading PACKAGE, if SYMBOL is t or matches REGEXP, display a
 warning using STRING as the message.")
 
index 84b0e0a57543b1a192ddfab9fdb54bf6bbdb411f..1363422dcc286b350da3d76a1a13a7d4e25d9987 100644 (file)
@@ -502,8 +502,9 @@ Pairing is also prohibited if we are right after a quoting character
 such as backslash.
 
 If a match is found in `skeleton-pair-alist', that is inserted, else
-the defaults are used.  These are (), [], {}, <> and `' for the
-symmetrical ones, and the same character twice for the others."
+the defaults are used.  These are (), [], {}, <> and (grave
+accent, apostrophe) for the paired ones, and the same character
+twice for the others."
   (interactive "*P")
   (if (or arg (not skeleton-pair))
       (self-insert-command (prefix-numeric-value arg))
index 9c56e51bc967796924a45da114d8947ce13fb9d6..b9a847d76e8c5f968350ea5fe2ba41aac9a09ae2 100644 (file)
@@ -1502,6 +1502,19 @@ All symbols are bound before the VALUEFORMs are evalled."
      ,@(mapcar (lambda (binder) `(setq ,@binder)) binders)
      ,@body))
 
+(defmacro let-when-compile (bindings &rest body)
+  "Like `let', but allow for compile time optimization.
+Use BINDINGS as in regular `let', but in BODY each usage should
+be wrapped in `eval-when-compile'.
+This will generate compile-time constants from BINDINGS."
+  (declare (indent 1) (debug let))
+  (cl-progv (mapcar #'car bindings)
+      (mapcar (lambda (x) (eval (cadr x))) bindings)
+    (macroexpand-all
+     (macroexp-progn
+      body)
+     macroexpand-all-environment)))
+
 (defmacro with-wrapper-hook (hook args &rest body)
   "Run BODY, using wrapper functions from HOOK with additional ARGS.
 HOOK is an abnormal hook.  Each hook function in HOOK \"wraps\"
index 3571b488e7db8d04f5c1dd9853f4ef2306461210..c1f5928bebe53672935a22eb45a719150d77a6bb 100644 (file)
@@ -105,11 +105,11 @@ With a prefix argument ARG, enable the mode if ARG is positive,
 and disable it otherwise.  If called from Lisp, enable the mode
 if ARG is omitted or nil.
 
-In ``alternate keypad mode'', the keys send distinct escape
+In alternate keypad mode, the keys send distinct escape
 sequences, meaning that they can have their own bindings,
 independent of the normal number keys.
 
-When disabled, the terminal enters ``numeric keypad mode'', in
+When disabled, the terminal enters numeric keypad mode, in
 which the keypad's keys act as ordinary digits."
   :variable (terminal-parameter nil 'tvi970-keypad-numeric)
   (send-string-to-terminal
index a7056cd5edf0cd7f758d286fae8be2589feeddca..29ab2f16e1c38d44558e358516da4d42152633f5 100644 (file)
        (when oem-cs-p
          (set-keyboard-coding-system oem-code-page-coding)
          (set-terminal-coding-system
-          (if oem-o-cs-p oem-code-page-output-coding oem-code-page-coding))))
+          (if oem-o-cs-p oem-code-page-output-coding oem-code-page-coding))
+          ;; Since we changed the terminal encoding, we need to repeat
+          ;; the test for Unicode quotes being displayable.
+          (dolist (char-repl
+                   '((?‘ . [?\']) (?’ . [?\']) (?“ . [?\"]) (?” . [?\"])))
+            (when (not (char-displayable-p (car char-repl)))
+              (or standard-display-table
+                  (setq standard-display-table (make-display-table)))
+              (aset standard-display-table (car char-repl) (cdr char-repl))))))
   (let* ((colors w32-tty-standard-colors)
          (color (car colors)))
     (tty-color-clear)
index 930c39c82ccc905938fa25167215df943ddf9671..14cf402a971622e4e8d9e58c1b1831ff04e50811 100644 (file)
@@ -298,7 +298,7 @@ during the flood-fill."
 (defcustom artist-ellipse-right-char ?\)
   "Character to use at the rightmost position when drawing narrow ellipses.
 
-In this figure, it is the right parenthesis (the ``)'' character):
+In this figure, it is the right parenthesis (the \")\" character):
              -----
             (     )
              -----"
@@ -309,7 +309,7 @@ In this figure, it is the right parenthesis (the ``)'' character):
 (defcustom artist-ellipse-left-char ?\(
   "Character to use at the leftmost position when drawing narrow ellipses.
 
-In this figure, it is the left parenthesis (the ``('' character):
+In this figure, it is the left parenthesis (the \"(\" character):
              -----
             (     )
              -----"
@@ -331,7 +331,7 @@ Accept this many characters cutting off a line and still treat
 it as one line.
 Example:
  If `artist-vaporize-fuzziness' is 2, then those will be recognized as
- lines from A to B (provided you start vaporizing them at the ``*''):
+ lines from A to B (provided you start vaporizing them at the \"*\"):
                          /
             A----*------/-----------B
                       \\/
@@ -342,7 +342,7 @@ Example:
                       \\/ /
             A----*----/\\/----------B
                      / /\\
- (in fact, only the left part [between the A and the leftmost ``/''
+ (in fact, only the left part [between the A and the leftmost \"/\"
  crossing the line] will be vaporized)."
   :group 'artist
   :type 'integer)
@@ -397,8 +397,8 @@ Example:
   ;; This is a defvar, not a defcustom, since the custom
   ;; package shows lists of characters as a lists of integers,
   ;; which is confusing
-  "Characters (``color'') to use when spraying.
-They should be ordered from the ``lightest'' to the ``heaviest''
+  "Characters (\"color\") to use when spraying.
+They should be ordered from the \"lightest\" to the \"heaviest\"
 since spraying replaces a light character with the next heavier one.")
 
 
@@ -1275,7 +1275,7 @@ Drawing with the mouse:
                * Cut copies, then clears the rectangle/square.
 
                * When drawing lines or poly-lines, you can set arrows.
-                 See below under ``Arrows'' for more info.
+                 See below under \"Arrows\" for more info.
 
                * The mode line shows the currently selected drawing operation.
                  In addition, if it has an asterisk (*) at the end, you
@@ -1383,8 +1383,8 @@ Variables
  artist-vaporize-fuzziness      Tolerance when recognizing lines
  artist-spray-interval          Seconds between repeated sprayings
  artist-spray-radius            Size of the spray-area
- artist-spray-chars             The spray-``color''
- artist-spray-new-chars         Initial spray-``color''
+ artist-spray-chars             The spray-\"color\"
+ artist-spray-new-chars         Initial spray-\"color\"
 
 Hooks
 
@@ -2020,7 +2020,7 @@ The replacement is used to convert tabs and new-lines to spaces."
 (defsubst artist-replace-string (string &optional see-thru)
   "Replace contents at point with STRING.
 With optional argument SEE-THRU set to non-nil, text in the buffer
-``shines thru'' blanks in the STRING."
+\"shines thru\" blanks in the STRING."
   (let ((char-list (append string nil))        ; convert the string to a list
        (overwrite-mode 'overwrite-mode-textual)
        (fill-column 32765)             ; Large :-)
@@ -2385,7 +2385,7 @@ in the coord."
 ;; Pretend we are plotting a pixel. Instead we just list it
 ;;
 (defmacro artist-put-pixel (point-list x y)
-  "In POINT-LIST, store a ``pixel'' at coord X,Y."
+  "In POINT-LIST, store a \"pixel\" at coord X,Y."
   `(setq ,point-list
         (append ,point-list (list (artist-new-coord ,x ,y)))))
 
@@ -2928,7 +2928,7 @@ This is done by calling the function specified by
 `artist-text-renderer-function', which must return a list of strings,
 to be inserted in the buffer.
 
-Text already in the buffer ``shines thru'' blanks in the rendered text."
+Text already in the buffer \"shines thru\" blanks in the rendered text."
   (let* ((input-text (read-string "Type text to render: "))
         (rendered-text (artist-funcall artist-text-renderer-function input-text)))
     (artist-text-insert-see-thru x y rendered-text)))
@@ -2958,7 +2958,7 @@ Blanks in the rendered text overwrite any text in the buffer."
 Returns a list of points.  Each point is on the form (X1 . Y1)."
   (let ((points))
     (while (> n 0)
-      (let* ((angle (* (random 359) (/ float-pi 180)))
+      (let* ((angle (degrees-to-radians (random 359)))
             (dist  (random radius))
             (point (cons (round (* dist (cos angle)))
                          (round (* dist (sin angle))))))
index 10edefc9d3e1359e50cbf57a4a86eb232b2014bf..9d6d19e6e1e6a705dab620e633412fc23d151fbb 100644 (file)
@@ -4338,10 +4338,10 @@ Correct and validate again.\n"
             (goto-char (point-min))
             (forward-line 2)) ; first error message
           (display-buffer err-buf)
-          nil) ; return `nil' (i.e., buffer is invalid)
+          nil) ; return nil (i.e., buffer is invalid)
       (message "%s is syntactically correct"
                (if mark-active "Region" "Buffer"))
-      t))) ; return `t' (i.e., buffer is valid)
+      t))) ; return t (i.e., buffer is valid)
 
 (defun bibtex-validate-globally (&optional strings)
   "Check for duplicate keys in `bibtex-files'.
@@ -4395,9 +4395,9 @@ Return t if test was successful, nil otherwise."
             (goto-char (point-min))
             (forward-line 2)) ; first error message
           (display-buffer err-buf)
-          nil) ; return `nil' (i.e., buffer is invalid)
+          nil) ; return nil (i.e., buffer is invalid)
       (message "No duplicate keys.")
-      t))) ; return `t' (i.e., buffer is valid)
+      t))) ; return t (i.e., buffer is valid)
 
 (defun bibtex-next-field (begin &optional comma)
   "Move point to end of text of next BibTeX field or entry head.
index f67fae8bcfad84b69532a211d5bdb24f987db061..b0fcb1724f5c6dcce7a03903f57a7d4316f5739a 100644 (file)
@@ -1076,7 +1076,7 @@ of `ispell-dictionary-base-alist' elements."
                                    ispell-aspell-data-dir ))
             ;; Try xx.dat first, strip out variant, country code, etc,
             ;; then try xx_YY.dat (without stripping country code),
-             ;; then try xx-alt.dat, for deu-alt etc.
+            ;; then try xx-alt.dat, for de-alt etc.
             (dolist (tmp-regexp (list "^[[:alpha:]]+"
                                       "^[[:alpha:]_]+"
                                        "^[[:alpha:]]+-\\(alt\\|old\\)"))
@@ -3402,7 +3402,7 @@ Must be called after `ispell-buffer-local-parsing' due to dependence on mode."
 
 (defun ispell-ignore-fcc (start end)
   "Delete the Fcc: message header when large attachments are included.
-Return value `nil' if file with large attachments is saved.
+Return value nil if file with large attachments is saved.
 This can be used to avoid multiple questions for multiple large attachments.
 Returns point to starting location afterwards."
   (let ((result t))
@@ -3900,7 +3900,7 @@ Otherwise, it must be a function which is called to get the limit.")
 
 (defun ispell-mime-multipartp (&optional limit)
   "Return multipart message start boundary or nil if none."
-  ;; caller must ensure `case-fold-search' is set to `t'
+  ;; caller must ensure `case-fold-search' is set to t
   (and
    (re-search-forward
     "Content-Type: *multipart/\\([^ \t\n]*;[ \t]*[\n]?[ \t]*\\)+boundary="
index d62929b95b55f2edc886124da4ae0a49bc22c0b8..b9b72ea644ff71657e5499ac7cf4143bdd5a5daa 100644 (file)
@@ -66,7 +66,7 @@ The name of the file is appended to this string, separated by a space."
   "String containing options for running `makeinfo'.
 Do not include `--footnote-style' or `--paragraph-indent';
 the proper way to specify those is with the Texinfo commands
-`@footnotestyle` and `@paragraphindent'."
+`@footnotestyle' and `@paragraphindent'."
   :type 'string
   :group 'makeinfo)
 
index cda9703ea6b4bb09ffb35c022b2bad2e9c5488b2..9d3f2a92d4b24954835bdbd5b862707d8c046afe 100644 (file)
@@ -528,7 +528,7 @@ argument list for `rst-re'.")
 
 (defvar rst-re-alist) ; Forward declare to use it in `rst-re'.
 
-;; FIXME: Use `sregex` or `rx` instead of re-inventing the wheel.
+;; FIXME: Use `sregex' or `rx' instead of re-inventing the wheel.
 (rst-testcover-add-compose 'rst-re)
 ;; testcover: ok.
 (defun rst-re (&rest args)
@@ -1512,8 +1512,8 @@ PFXARG (alternate behavior).
 
 This function is a bit of a swiss knife.  It is meant to adjust
 the adornments of a section title in reStructuredText.  It tries
-to deal with all the possible cases gracefully and to do `the
-right thing' in all cases.
+to deal with all the possible cases gracefully and to do \"the
+right thing\" in all cases.
 
 See the documentations of `rst-adjust-adornment-work' and
 `rst-promote-region' for full details.
@@ -3571,8 +3571,8 @@ of your own."
     ;;        properties on comments and literal blocks so they are *not*
     ;;        inline fontified.  See (elisp)Search-based Fontification.
 
-    ;; FIXME: And / or use `syntax-propertize` functions as in `octave-mod.el`
-    ;;        and other V24 modes.  May make `font-lock-extend-region`
+    ;; FIXME: And / or use `syntax-propertize' functions as in `octave-mod.el'
+    ;;        and other V24 modes.  May make `font-lock-extend-region'
     ;;        superfluous.
 
     ;; `Comments`_
@@ -3952,11 +3952,11 @@ string)) to be used for converting the document."
   :package-version "1.2.0")
 (rst-testcover-defcustom)
 
-;; FIXME: Must be `defcustom`.
+;; FIXME: Must be defcustom.
 (defvar rst-compile-primary-toolset 'html
   "The default tool-set for `rst-compile'.")
 
-;; FIXME: Must be `defcustom`.
+;; FIXME: Must be defcustom.
 (defvar rst-compile-secondary-toolset 'latex
   "The default tool-set for `rst-compile' with a prefix argument.")
 
@@ -4035,7 +4035,7 @@ buffer, if the region is not selected."
      (cadr (assq 'pseudoxml rst-compile-toolsets))
      standard-output)))
 
-;; FIXME: Should be `defcustom`.
+;; FIXME: Should be defcustom.
 (defvar rst-pdf-program "xpdf"
   "Program used to preview PDF files.")
 
@@ -4052,7 +4052,7 @@ buffer, if the region is not selected."
     ;; output.
     ))
 
-;; FIXME: Should be `defcustom` or use something like `browse-url`.
+;; FIXME: Should be defcustom or use something like `browse-url'.
 (defvar rst-slides-program "firefox"
   "Program used to preview S5 slides.")
 
index 0eae67ae83ac41149add7d767b5e5be1d3f70532..4e385a0fbd3fd542d64636f0ec672c21932f0ad6 100644 (file)
@@ -431,7 +431,7 @@ current `case-fold-search' setting."
 
 If
  * character before point is a space character,
- * character before that has “w” character syntax (i.e. it's a word
+ * character before that has \"w\" character syntax (i.e. it's a word
    constituent),
  * `tildify-space-pattern' matches when `looking-back' (no more than 10
    characters) from before the space character, and
index a5a31c9ffd1dd3e920e0089e8fd1774513c28de5..5a12f02f87656650de05f3d200b4b9c08e021292 100644 (file)
@@ -45,7 +45,7 @@
 
 ;; If you find echo area messages annoying and would prefer to see messages
 ;; in the mode line instead, do M-x type-break-mode-line-message-mode
-;; or set the variable of the same name to `t'.
+;; or set the variable of the same name to t.
 
 ;; This program can truly cons up a storm because of all the calls to
 ;; `current-time' (which always returns fresh conses).  I'm dismayed by
index 07c07682186244dc42a8c6d9bb1ae7fc5668880f..5b923697241e564b853ba3b1c6316e9ed84a775b 100644 (file)
@@ -88,7 +88,7 @@ regexp containing some field separator or a newline, depending on
 the nature of the difference units separator.  The variable can
 be made buffer-local.
 
-If the value of this variable is `nil' (option \"No sync\"), then
+If the value of this variable is nil (option \"No sync\"), then
 no synchronization is performed, and the function `ding' is called
 to beep or flash the screen when points are mismatched."
   :type '(choice function regexp (const :tag "No sync" nil))
index 260366e242a3de98fdadc92c61c1792b4a3e7879..26bba40b4b402047b1672f81a5ef4487acacb788 100644 (file)
@@ -3988,7 +3988,7 @@ and mail it to the address above.
 Please read this first:
 ----------------------
 
-Some ``bugs'' may actually be no bugs at all.  For instance, if you are
+Some \"bugs\" may actually be no bugs at all.  For instance, if you are
 reporting that certain difference regions are not matched as you think they
 should, this is most likely due to the way Unix diff program decides what
 constitutes a difference region.  Ediff is an Emacs interface to diff, and
index 08ae998200b881f8755c2eb9443a84afbd9bf463..d59549772c0805a3356587ee23a997ca53b40b12 100644 (file)
@@ -167,7 +167,7 @@ can be obtained from `log-edit-files'."
 
 (defvar log-edit-changelog-full-paragraphs t
   "If non-nil, include full ChangeLog paragraphs in the log.
-This may be set in the ``local variables'' section of a ChangeLog, to
+This may be set in the \"local variables\" section of a ChangeLog, to
 indicate the policy for that ChangeLog.
 
 A ChangeLog paragraph is a bunch of log text containing no blank lines;
index 042ea131a97b0eefad2b8a702c747740dcf8802b..19bbc45f927cb6e9214c51f7a6d3ab505f0eeec2 100644 (file)
@@ -404,7 +404,9 @@ This calls `log-view-expanded-log-entry-function' to do the work."
              (unless (and pos (log-view-inside-comment-p pos))
                (error "Broken markup in `log-view-toggle-entry-display'"))
              (delete-region pos
-                            (next-single-property-change pos 'log-view-comment))
+                             (or
+                              (next-single-property-change pos 'log-view-comment)
+                              (point-max)))
              (put-text-property beg (1+ beg) 'log-view-entry-expanded nil)
              (if (< opoint pos)
                  (goto-char opoint)))
@@ -469,7 +471,10 @@ It assumes that a log entry starts with a line matching
        ((looking-back "Show 2X entries    Show unlimited entries"
                       (line-beginning-position))
        (setq looping nil)
-       (forward-line -1))))))
+       (forward-line -1))
+       ;; There are no buttons if we've turned on unlimited entries.
+       ((eobp)
+        (setq looping nil))))))
 
 (defun log-view-end-of-defun (&optional arg)
   "Move forward to the next Log View entry.
index 8bcea5f164dbf178d4658d7c17adf24d4f5dcef7..3a50c9b6a2d1eaff8060bacda8498fa50fa4e1cc 100644 (file)
@@ -175,7 +175,6 @@ List of factors, used to expand/compress the time scale.  See `vc-annotate'."
     (define-key m "p" 'vc-annotate-prev-revision)
     (define-key m "w" 'vc-annotate-working-revision)
     (define-key m "v" 'vc-annotate-toggle-annotation-visibility)
-    (define-key m "v" 'vc-annotate-toggle-annotation-visibility)
     (define-key m "\C-m" 'vc-annotate-goto-line)
     m)
   "Local keymap used for VC-Annotate mode.")
@@ -583,17 +582,15 @@ the file in question, search for the log entry required and move point."
        (setq prev-rev
              (vc-call-backend vc-annotate-backend 'previous-revision
                                (if filediff fname nil) rev))
-       (if (not prev-rev)
-           (message "Cannot diff from any revision prior to %s" rev)
-          (vc-diff-internal
-           t
-           ;; The value passed here should follow what
-           ;; `vc-deduce-fileset' returns.
-           (list vc-annotate-backend
-                 (if filediff
-                     (list fname)
-                   nil))
-           prev-rev rev))))))
+       (vc-diff-internal
+         t
+         ;; The value passed here should follow what
+         ;; `vc-deduce-fileset' returns.
+         (list vc-annotate-backend
+               (if filediff
+                   (list fname)
+                 nil))
+         prev-rev rev)))))
 
 (defun vc-annotate-show-diff-revision-at-line ()
   "Visit the diff of the revision at line from its previous revision."
@@ -605,7 +602,10 @@ the file in question, search for the log entry required and move point."
   (interactive)
   (when (eq 'file (vc-call-backend vc-annotate-backend 'revision-granularity))
     (error "The %s backend does not support changeset diffs" vc-annotate-backend))
-  (vc-annotate-show-diff-revision-at-line-internal nil))
+  ;; Make sure `diff-goto-source' will be able to find all files.
+  (let ((default-directory (vc-call-backend vc-annotate-backend
+                                            'root default-directory)))
+    (vc-annotate-show-diff-revision-at-line-internal nil)))
 
 (defun vc-annotate-warp-revision (revspec &optional file)
   "Annotate the revision described by REVSPEC.
index c9508251c8d8185ee1379d3324b18c9eb8a95499..5f8dd0bf0e894448eb7970d0d725384d924a104f 100644 (file)
@@ -34,7 +34,7 @@
 ;; ==========
 
 ;; When editing a symlink and *both* the symlink and its target
-;; are bzr-versioned, `vc-bzr` presently runs `bzr status` on the
+;; are bzr-versioned, `vc-bzr' presently runs `bzr status' on the
 ;; symlink, thereby not detecting whether the actual contents
 ;; (that is, the target contents) are changed.
 
index cbf3da3003fe2e7cff74f19c50ec476bbfe70c3f..e3cd5d4e3dcaa5fbd62ac173823dba61e5e42a1c 100644 (file)
@@ -960,14 +960,13 @@ or BRANCH^ (where \"^\" can be repeated)."
 
 (defun vc-git-expanded-log-entry (revision)
   (with-temp-buffer
-    (apply 'vc-git-command t nil nil (list "log" revision "-1"))
+    (apply 'vc-git-command t nil nil (list "log" revision "-1" "--"))
     (goto-char (point-min))
     (unless (eobp)
       ;; Indent the expanded log entry.
       (indent-region (point-min) (point-max) 2)
       (buffer-string))))
 
-
 (defun vc-git-region-history (file buffer lfrom lto)
   (vc-git-command buffer 'async nil "log" "-p" ;"--follow" ;FIXME: not supported?
                   (format "-L%d,%d:%s" lfrom lto (file-relative-name file))))
@@ -1019,12 +1018,18 @@ or BRANCH^ (where \"^\" can be repeated)."
 
 (defun vc-git-diff (files &optional rev1 rev2 buffer async)
   "Get a difference report using Git between two revisions of FILES."
-  (let (process-file-side-effects)
+  (let (process-file-side-effects
+        (command "diff-tree"))
+    (if rev2
+        ;; Diffing against the empty tree.
+        (unless rev1 (setq rev1 "4b825dc642cb6eb9a060e54bf8d69288fbee4904"))
+      (setq command "diff-index")
+      (unless rev1 (setq rev1 "HEAD")))
     (if vc-git-diff-switches
         (apply #'vc-git-command (or buffer "*vc-diff*")
               (if async 'async 1)
               files
-               (if (and rev1 rev2) "diff-tree" "diff-index")
+               command
                "--exit-code"
                (append (vc-switches 'git 'diff)
                        (list "-p" (or rev1 "HEAD") rev2 "--")))
@@ -1033,7 +1038,7 @@ or BRANCH^ (where \"^\" can be repeated)."
                       (concat "diff "
                               (mapconcat 'identity
                                          (vc-switches nil 'diff) " "))
-                      (or rev1 "HEAD") rev2 "--"))))
+                      rev1 rev2 "--"))))
 
 (defun vc-git-revision-table (_files)
   ;; What about `files'?!?  --Stef
@@ -1061,7 +1066,7 @@ or BRANCH^ (where \"^\" can be repeated)."
 (declare-function vc-annotate-convert-time "vc-annotate" (&optional time))
 
 (defun vc-git-annotate-time ()
-  (and (re-search-forward "^[0-9a-f]+[^()]+(.*?\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\) \\(:?\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\) \\([-+0-9]+\\)\\)? *[0-9]+) " nil t)
+  (and (re-search-forward "^[0-9a-f^]+[^()]+(.*?\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\) \\(:?\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\) \\([-+0-9]+\\)\\)? *[0-9]+) " nil t)
        (vc-annotate-convert-time
         (apply #'encode-time (mapcar (lambda (match)
                                        (if (match-beginning match)
@@ -1072,7 +1077,7 @@ or BRANCH^ (where \"^\" can be repeated)."
 (defun vc-git-annotate-extract-revision-at-line ()
   (save-excursion
     (beginning-of-line)
-    (when (looking-at "\\([0-9a-f^][0-9a-f]+\\) \\(\\([^(]+\\) \\)?")
+    (when (looking-at "\\^?\\([0-9a-f]+\\) \\(\\([^(]+\\) \\)?")
       (let ((revision (match-string-no-properties 1)))
        (if (match-beginning 2)
            (let ((fname (match-string-no-properties 3)))
index d5d0abe6517775bf69e6d2ffc254d38c5a9c2cef..1bd04e13430bac75f6944d549f1097750c0a873f 100644 (file)
 ;;   BUFFER is nil.  If ASYNC is non-nil, run asynchronously.  If REV1
 ;;   and REV2 are non-nil, report differences from REV1 to REV2.  If
 ;;   REV1 is nil, use the working revision (as found in the
-;;   repository) as the older revision; if REV2 is nil, use the
+;;   repository) as the older revision if REV2 is nil as well;
+;;   otherwise, diff against an empty tree.  If REV2 is nil, use the
 ;;   current working-copy contents as the newer revision.  This
 ;;   function should pass the value of (vc-switches BACKEND 'diff) to
 ;;   the backend command.  It should return a status of either 0 (no
index 0a9578391e0e686da7644d66667e3b444983fd40..d09214b42a35dd9f0918d9604c5dd7b717dfc8a6 100644 (file)
@@ -3319,7 +3319,7 @@ It reads a directory name from an editable text field."
            ;; Avoid a confusing end-of-file error.
            (skip-syntax-forward "\\s-")
            (if (eobp)
-               (setq err "Empty sexp -- use `nil'?")
+               (setq err "Empty sexp -- use nil?")
              (unless (widget-apply widget :match (read (current-buffer)))
                (setq err (widget-get widget :type-error))))
            ;; Allow whitespace after expression.
index 539f91e63a0549bb846e18a419b0ca94e757733f..d62f7ffd8d1b2f1552f76e00c7f9b34fa0edb8b2 100644 (file)
@@ -85,7 +85,7 @@ create identical widgets:
 The third argument DOC is a documentation string for the widget."
   ;;
   (unless (or (null doc) (stringp doc))
-    (error "widget documentation must be `nil' or a string."))
+    (error "widget documentation must be nil or a string."))
   (put name 'widget-type (cons class args))
   (put name 'widget-documentation (purecopy doc))
   name)
index c461a00740ab64b3827463ca685261af746f9dbf..1df74a2d271455cb962af6c030c976985cfb7a67 100644 (file)
@@ -488,8 +488,8 @@ If no window is at direction DIR, an error is signaled."
 
 
 ;;; end-user functions
-;; these are all simple interactive wrappers to `windmove-do-
-;; window-select', meant to be bound to keys.
+;; these are all simple interactive wrappers to
+;; `windmove-do-window-select', meant to be bound to keys.
 
 ;;;###autoload
 (defun windmove-left (&optional arg)
index 49b7e2cc55df46748ea8b9f8b312d5ee7376d542..fad9b2f69fa719f4dcaeceb3ea69b702bb31a189 100644 (file)
@@ -4311,7 +4311,7 @@ one.  If non-nil, reset `quit-restore' parameter to nil.
 Optional second argument BURY-OR-KILL tells how to proceed with
 the buffer of WINDOW.  The following values are handled:
 
-`nil' means to not handle the buffer in a particular way.  This
+nil means to not handle the buffer in a particular way.  This
   means that if WINDOW is not deleted by this function, invoking
   `switch-to-prev-buffer' will usually show the buffer again.
 
@@ -6884,6 +6884,33 @@ the selected window or never appeared in it before, or if
   :group 'windows
   :version "24.3")
 
+(defcustom switch-to-buffer-in-dedicated-window nil
+  "Allow switching to buffer in strongly dedicated windows.
+If non-nil, allow `switch-to-buffer' to proceed when called
+interactively and the selected window is strongly dedicated to
+its buffer.
+
+The following values are recognized:
+
+nil - disallow switching; signal an error
+
+prompt - prompt user whether to allow switching
+
+pop - perform `pop-to-buffer' instead
+
+t - undedicate selected window and switch
+
+When called non-interactively, `switch-to-buffer' always signals
+an error when the selected window is dedicated to its buffer and
+FORCE-SAME-WINDOW is non-nil."
+  :type '(choice
+         (const :tag "Disallow" nil)
+         (const :tag "Prompt" prompt)
+         (const :tag "Pop" pop)
+         (const :tag "Allow" t))
+  :group 'windows
+  :version "25.1")
+
 (defun switch-to-buffer (buffer-or-name &optional norecord force-same-window)
   "Display buffer BUFFER-OR-NAME in the selected window.
 
@@ -6891,10 +6918,12 @@ WARNING: This is NOT the way to work on another buffer temporarily
 within a Lisp program!  Use `set-buffer' instead.  That avoids
 messing with the window-buffer correspondences.
 
-If the selected window cannot display the specified
-buffer (e.g. if it is a minibuffer window or strongly dedicated
-to another buffer), call `pop-to-buffer' to select the buffer in
-another window.
+If the selected window cannot display the specified buffer
+because it is a minibuffer window or strongly dedicated to
+another buffer, call `pop-to-buffer' to select the buffer in
+another window.  In interactive use, if the selected window is
+strongly dedicated to its buffer, the value of the option
+`switch-to-buffer-in-dedicated-window' specifies how to proceed.
 
 If called interactively, read the buffer name using the
 minibuffer.  The variable `confirm-nonexistent-file-or-buffer'
@@ -6911,8 +6940,9 @@ at the front of the buffer list, and do not make the window
 displaying it the most recently selected one.
 
 If optional argument FORCE-SAME-WINDOW is non-nil, the buffer
-must be displayed in the selected window; if that is impossible,
-signal an error rather than calling `pop-to-buffer'.
+must be displayed in the selected window when called
+non-interactively; if that is impossible, signal an error rather
+than calling `pop-to-buffer'.
 
 The option `switch-to-buffer-preserve-window-point' can be used
 to make the buffer appear at its last position in the selected
@@ -6920,7 +6950,25 @@ window.
 
 Return the buffer switched to."
   (interactive
-   (list (read-buffer-to-switch "Switch to buffer: ") nil 'force-same-window))
+   (let ((force-same-window
+          (cond
+           ((window-minibuffer-p) nil)
+           ((not (eq (window-dedicated-p) t)) 'force-same-window)
+           ((pcase switch-to-buffer-in-dedicated-window
+              (`nil (user-error
+                     "Cannot switch buffers in a dedicated window"))
+              (`prompt
+               (if (y-or-n-p
+                    (format "Window is dedicated to %s; undedicate it"
+                            (window-buffer)))
+                   (progn
+                     (set-window-dedicated-p nil nil)
+                     'force-same-window)
+                 (user-error
+                  "Cannot switch buffers in a dedicated window")))
+              (`pop nil)
+              (_ (set-window-dedicated-p nil nil) 'force-same-window))))))
+     (list (read-buffer-to-switch "Switch to buffer: ") nil force-same-window)))
   (let ((buffer (window-normalize-buffer-to-switch-to buffer-or-name)))
     (cond
      ;; Don't call set-window-buffer if it's not needed since it
@@ -8059,7 +8107,7 @@ This function is responsible for combining the sizes of the
 displayed windows and returning a cons (WIDTH . HEIGHT)
 describing the width and height with which Emacs will call
 `set-process-window-size' for that process.  If the function
-returns `nil', Emacs does not call `set-process-window-size'.
+returns nil, Emacs does not call `set-process-window-size'.
 
 This function is called with the process buffer as the current
 buffer and with two arguments: the process and a list of windows
index 611ba7436520e9b2683418dcbbe2e1703531089e..75c3d2e3822a2dc751f3ab3ab944f5ef654037b6 100644 (file)
 
 ;; The WoMan menu provides an option to make a contents menu for the
 ;; current man page (using imenu).  Alternatively, if you set the
-;; variable `woman-imenu' to `t' then WoMan will do it automatically
+;; variable `woman-imenu' to t then WoMan will do it automatically
 ;; for every man page.  The menu title is the value of the variable
 ;; `woman-imenu-title', which is "CONTENTS" by default.  By default,
 ;; the menu shows manual sections and subsections, but you can change
 ;; Howard Melman made (essentially) the following suggestions, which
 ;; are slightly different from the expression that I currently use.
 ;; You may prefer one of Howard's suggestions, which I think assume
-;; that `case-fold-search' is `t' (which it is by default):
+;; that `case-fold-search' is t (which it is by default):
 
 ;; (setq woman-imenu-generic-expression
 ;;       '((nil "^\\(   \\)?\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 2)))
 ;; This is modeled on the byte-compiler.  It logs all files formatted
 ;; by WoMan, and if WoMan finds anything that it cannot handle then it
 ;; writes a warning to this buffer.  If the variable `woman-show-log'
-;; is non-nil (by default it is `nil') then WoMan automatically
+;; is non-nil (by default it is nil) then WoMan automatically
 ;; displays this buffer.  Many WoMan warnings can be completely
 ;; ignored, because they are reporting the fact that WoMan has ignored
 ;; requests that it is correct to ignore.  In some future version this
 
 ;; Uninterpreted ?roff requests can optionally be left in the
 ;; formatted buffer to indicate precisely where they occur by
-;; resetting the variable `woman-ignore' to `nil' (by default it is
-;; `t').
+;; resetting the variable `woman-ignore' to nil (by default it is
+;; t).
 
 ;; Automatic initiation of woman decoding
 
 ;; CASE-DEPENDENCE OF FILENAMES.  By default, WoMan ignores case in
 ;; file pathnames only when it seems appropriate.  MS-Windows users
 ;; who want complete case independence should set the NTEmacs variable
-;; `w32-downcase-file-names' to `t' and use all lower case when
+;; `w32-downcase-file-names' to t and use all lower case when
 ;; setting WoMan file paths.
 
 ;; (1) INCOMPATIBLE CHANGE!  WoMan no longer uses a persistent topic
index f8ae73c7b75fee8f4bc80ffc6b8ae908ac4ff70d..2bb71549564e38aacc125524fbf35ae0d165a522 100644 (file)
@@ -321,21 +321,21 @@ Enables basic mouse tracking, mouse motion events and finally
 extended tracking on terminals that support it. The following
 escape sequences are understood by modern xterms:
 
-\"\\e[?1000h\" `Basic mouse mode´: Enables reports for mouse
+\"\\e[?1000h\" \"Basic mouse mode\": Enables reports for mouse
             clicks. There is a limit to the maximum row/column
             position (<= 223), which can be reported in this
             basic mode.
 
-\"\\e[?1002h\" `Mouse motion mode´: Enables reports for mouse
+\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse
             motion events during dragging operations.
 
-\"\\e[?1005h\" `UTF-8 coordinate extension`: Enables an extension
+\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an extension
             to the basic mouse mode, which uses UTF-8
             characters to overcome the 223 row/column limit. This
             extension may conflict with non UTF-8 applications or
             non UTF-8 locales.
 
-\"\\e[?1006h\" `SGR coordinate extension´: Enables a newer
+\"\\e[?1006h\" \"SGR coordinate extension\": Enables a newer
             alternative extension to the basic mouse mode, which
             overcomes the 223 row/column limit without the
             drawbacks of the UTF-8 coordinate extension.
index b09676c438dd08bcc14779c0edd598f9adfde677..c78d08c53d289a160af78b3bcc23e4bd1c9c4d12 100644 (file)
@@ -1467,15 +1467,15 @@ DEFUN ("other-buffer", Fother_buffer, Sother_buffer, 0, 3, 0,
 Buffers not visible in windows are preferred to visible buffers, unless
 optional second argument VISIBLE-OK is non-nil.  Ignore the argument
 BUFFER unless it denotes a live buffer.  If the optional third argument
-FRAME is non-nil, use that frame's buffer list instead of the selected
-frame's buffer list.
+FRAME specifies a live frame, then use that frame's buffer list instead
+of the selected frame's buffer list.
 
 The buffer is found by scanning the selected or specified frame's buffer
 list first, followed by the list of all buffers.  If no other buffer
 exists, return the buffer `*scratch*' (creating it if necessary).  */)
   (Lisp_Object buffer, Lisp_Object visible_ok, Lisp_Object frame)
 {
-  struct frame *f = decode_any_frame (frame);
+  struct frame *f = decode_live_frame (frame);
   Lisp_Object tail = f->buffer_list, pred = f->buffer_predicate;
   Lisp_Object buf, notsogood = Qnil;
 
@@ -6106,7 +6106,7 @@ An entry of the form POSITION indicates that point was at the buffer
 location given by the integer.  Undoing an entry of this form places
 point at POSITION.
 
-Entries with value `nil' mark undo boundaries.  The undo command treats
+Entries with value nil mark undo boundaries.  The undo command treats
 the changes between two undo boundaries as a single step to be undone.
 
 If the value of the variable is t, undo information is not recorded.  */);
index b590805ea8aac7c4c57b4345bd48c00ad5734e06..6f9982eebb28781ec18161eef84686949a5dfc97 100644 (file)
@@ -110,10 +110,17 @@ DEFUN ("forward-line", Fforward_line, Sforward_line, 0, 1, "^p",
 Precisely, if point is on line I, move to the start of line I + N
 \("start of line" in the logical order).
 If there isn't room, go as far as possible (no error).
+
 Returns the count of lines left to move.  If moving forward,
-that is N - number of lines moved; if backward, N + number moved.
-With positive N, a non-empty line at the end counts as one line
-successfully moved (for the return value).  */)
+that is N minus number of lines moved; if backward, N plus number
+moved.
+
+Exception: With positive N, a non-empty line at the end of the
+buffer, or of its accessible portion, counts as one line
+successfully moved (for the return value).  This means that the
+function will move point to the end of such a line and will count
+it as a line moved across, even though there is no next line to
+go to its beginning.  */)
   (Lisp_Object n)
 {
   ptrdiff_t opoint = PT, pos, pos_byte, shortage, count;
index 603e998ed3f29fb953517056c5ef6e41e6ac43c6..2ccfd15d43691e07327995a541fc53386893bec2 100644 (file)
@@ -3822,17 +3822,17 @@ They are the same as face attributes of the same name.  See
 
 `:foundry'
 
-VALUE must be a string or a symbol specifying the font foundry, e.g. ``misc''.
+VALUE must be a string or a symbol specifying the font foundry, e.g. `misc'.
 
 `:adstyle'
 
 VALUE must be a string or a symbol specifying the additional
-typographic style information of a font, e.g. ``sans''.
+typographic style information of a font, e.g. `sans'.
 
 `:registry'
 
 VALUE must be a string or a symbol specifying the charset registry and
-encoding of a font, e.g. ``iso8859-1''.
+encoding of a font, e.g. `iso8859-1'.
 
 `:size'
 
@@ -3866,7 +3866,7 @@ required OpenType features.
   GSUB: List of OpenType GSUB feature tag symbols, or nil if none required.
   GPOS: List of OpenType GPOS feature tag symbols, or nil if none required.
 
-GSUB and GPOS may contain `nil' element.  In such a case, the font
+GSUB and GPOS may contain nil elements.  In such a case, the font
 must not have any of the remaining elements.
 
 For instance, if the VALUE is `(thai nil nil (mark))', the font must
@@ -5011,7 +5011,7 @@ build_style_table (const struct table_entry *entry, int nelement)
 static Lisp_Object Vfont_log_deferred;
 
 /* Prepend the font-related logging data in Vfont_log if it is not
-   `t'.  ACTION describes a kind of font-related action (e.g. listing,
+   t.  ACTION describes a kind of font-related action (e.g. listing,
    opening), ARG is the argument for the action, and RESULT is the
    result of the action.  */
 void
index 22086552ea3aaee329e05675ec8f2369ef0065fe..478bb00337b5307e085ae7864bfd9cdacbd58e46 100644 (file)
@@ -1823,9 +1823,10 @@ DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
        doc: /* Delete FRAME, permanently eliminating it from use.
 FRAME defaults to the selected frame.
 
-A frame may not be deleted if its minibuffer is used by other frames.
-Normally, you may not delete a frame if all other frames are invisible,
-but if the second optional argument FORCE is non-nil, you may do so.
+A frame may not be deleted if its minibuffer serves as surrogate
+minibuffer for another frame.  Normally, you may not delete a frame if
+all other frames are invisible, but if the second optional argument
+FORCE is non-nil, you may do so.
 
 This function runs `delete-frame-functions' before actually
 deleting the frame, unless the frame is a tooltip.
@@ -5151,7 +5152,7 @@ a non-nil value in your init file.  */);
 If this option is nil, setting font, menu bar, tool bar, internal
 borders, fringes or scroll bars of a specific frame may resize the frame
 in order to preserve the number of columns or lines it displays.  If
-this option is `t', no such resizing is done.  Note that the size of
+this option is t, no such resizing is done.  Note that the size of
 fullscreen and maximized frames, the height of fullheight frames and the
 width of fullwidth frames never change implicitly.
 
@@ -5167,14 +5168,14 @@ Changing any of the parameters `scroll-bar-width', `scroll-bar-height',
 window.  This means, for example, that removing vertical scroll bars on
 a frame containing several side by side windows will shrink the frame
 width by the width of one scroll bar provided this option is nil and
-keep it unchanged if this option is either `t' or a list containing
+keep it unchanged if this option is either t or a list containing
 `vertical-scroll-bars'.
 
 The default value is '(tool-bar-lines) on Lucid, Motif and Windows
 \(which means that adding/removing a tool bar does not change the frame
 height), nil on all other window systems including GTK+ (which means
 that changing any of the parameters listed above may change the size of
-the frame), and `t' otherwise (which means the frame size never changes
+the frame), and t otherwise (which means the frame size never changes
 implicitly when there's no window system support).
 
 Note that when a frame is not large enough to accommodate a change of
index 9b8ae2bd1a875a64953c2bc53d3ef0d94ccdeca0..9c2d86ecdfca80b4a5a732431ba7a81e86ed7953 100644 (file)
@@ -1181,7 +1181,7 @@ gnutls_certificate_set_verify_flags.
 instead.
 
 :verify-error is a list of symbols to express verification checks or
-`t' to do all checks.  Currently it can contain `:trustfiles' and
+t to do all checks.  Currently it can contain `:trustfiles' and
 `:hostname' to verify the certificate or the hostname respectively.
 
 :min-prime-bits is the minimum accepted number of bits the client will
index 77f7fb9789843704d6c96813e938f2d3a20e453d..eb66c445559e2d01d0b712f87e1fc425ac67f466 100644 (file)
@@ -1702,7 +1702,8 @@ adjust_point_for_property (ptrdiff_t last_pt, bool modified)
       if (check_display
          && PT > BEGV && PT < ZV
          && !NILP (val = get_char_property_and_overlay
-                             (make_number (PT), Qdisplay, Qnil, &overlay))
+                             (make_number (PT), Qdisplay, selected_window,
+                              &overlay))
          && display_prop_intangible_p (val, overlay, PT, PT_BYTE)
          && (!OVERLAYP (overlay)
              ? get_property_and_range (PT, Qdisplay, &val, &beg, &end, Qnil)
index d10c00489d104631175f5892d905b08570d1ef82..e9898051dc725933eba3d733cf540abba50e315c 100644 (file)
@@ -498,7 +498,7 @@ access_keymap_1 (Lisp_Object map, Lisp_Object idx,
            if (INTEGERP (idx) && (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0)
              {
                val = Faref (binding, idx);
-               /* `nil' has a special meaning for char-tables, so
+               /* nil has a special meaning for char-tables, so
                   we use something else to record an explicitly
                   unbound entry.  */
                if (NILP (val))
@@ -849,7 +849,7 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object idx, Lisp_Object def)
            if (NATNUMP (idx) && !(XFASTINT (idx) & CHAR_MODIFIER_MASK))
              {
                Faset (elt, idx,
-                      /* `nil' has a special meaning for char-tables, so
+                      /* nil has a special meaning for char-tables, so
                          we use something else to record an explicitly
                          unbound entry.  */
                       NILP (def) ? Qt : def);
index 8a3c6ccf2b0c148b484a90674da0d199ff68577c..6a2e2ff14a43cdafaeaa0f26debc8e5e67db6323 100644 (file)
@@ -749,7 +749,7 @@ ns_implicitly_set_icon_type (struct frame *f)
        chain = XCDR (chain))
     {
       elt = XCAR (chain);
-      /* special case: 't' means go by file type */
+      /* special case: t means go by file type */
       if (SYMBOLP (elt) && EQ (elt, Qt) && SSDATA (f->name)[0] == '/')
         {
           NSString *str
@@ -2836,13 +2836,13 @@ elements (all size values are in pixels).
 
 - `title-bar-height' is the height of the title bar of FRAME.
 
-- `menu-bar-external' if `t' means the menu bar is external (not
+- `menu-bar-external' if t means the menu bar is external (not
   included in the inner edges of FRAME).
 
 - `menu-bar-size' is a cons of the width and height of the menu bar of
   FRAME.
 
-- `tool-bar-external' if `t' means the tool bar is external (not
+- `tool-bar-external' if t means the tool bar is external (not
   included in the inner edges of FRAME).
 
 - `tool-bar-side' tells tells on which side the tool bar on FRAME is and
index b9d7bd4d75b0e57f65f2612a8b82466d3a7e7020..3a6fa6240567e8b11b74117451b5d1f473d15aaf 100644 (file)
@@ -7535,13 +7535,13 @@ elements (all size values are in pixels).
 
 - `title-bar-height' is the height of the title bar of FRAME.
 
-- `menu-bar-external' if `t' means the menu bar is by default external
+- `menu-bar-external' if t means the menu bar is by default external
   (not included in the inner size of FRAME).
 
 - `menu-bar-size' is a cons of the width and height of the menu bar of
   FRAME.
 
-- `tool-bar-external' if `t' means the tool bar is by default external
+- `tool-bar-external' if t means the tool bar is by default external
   (not included in the inner size of FRAME).
 
 - `tool-bar-side' tells tells on which side the tool bar on FRAME is by
index ee0eb161502e448f80e1931d7d9b0375f7f406f3..47ffec1c30383d9981d7104ce1227fbb2914e654 100644 (file)
@@ -115,9 +115,9 @@ typedef struct _RTL_HEAP_PARAMETERS {
    to build only the first bootstrap-emacs.exe with the large size,
    and reset that to a lower value afterwards.  */
 #if defined _WIN64 || defined WIDE_EMACS_INT
-# define DUMPED_HEAP_SIZE (18*1024*1024)
+# define DUMPED_HEAP_SIZE (19*1024*1024)
 #else
-# define DUMPED_HEAP_SIZE (11*1024*1024)
+# define DUMPED_HEAP_SIZE (12*1024*1024)
 #endif
 
 static unsigned char dumped_data[DUMPED_HEAP_SIZE];
index d415b13f715ff77b092ab594f1b9283c75ca0334..089c43c8a26d625659fb4f60f52e2433311ecebd 100644 (file)
@@ -1410,7 +1410,7 @@ x_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
 
       if (glyph->u.glyphless.method == GLYPHLESS_DISPLAY_ACRONYM)
        {
-         if (len > 1
+         if (len > 0
              && CHAR_TABLE_P (Vglyphless_char_display)
              && (CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (Vglyphless_char_display))
                  >= 1))
index c2f0b747c6ea2bc72fa3f999de035299053de237..87f110e667d4e6d55f6a39c2c8da30f7e0113a13 100644 (file)
@@ -4899,6 +4899,20 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object,
     {
       start_pos = *position;
       *position = display_prop_end (it, object, start_pos);
+      /* If the display property comes from an overlay, don't consider
+        any potential stop_charpos values before the end of that
+        overlay.  Since display_prop_end will happily find another
+        'display' property coming from some other overlay or text
+        property on buffer positions before this overlay's end, we
+        need to ignore them, or else we risk displaying this
+        overlay's display string/image twice.  */
+      if (!NILP (overlay))
+       {
+         ptrdiff_t ovendpos = OVERLAY_POSITION (OVERLAY_END (overlay));
+
+         if (ovendpos > CHARPOS (*position))
+           SET_TEXT_POS (*position, ovendpos, CHAR_TO_BYTE (ovendpos));
+       }
     }
   value = Qnil;
 
@@ -29145,6 +29159,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
     }
 
   /* Change the mouse face according to what is under X/Y.  */
+  bool mouse_face_shown = false;
   if (STRINGP (string))
     {
       mouse_face = Fget_text_property (pos, Qmouse_face, string);
@@ -29267,13 +29282,18 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
                                                                glyph->face_id,
                                                                true);
          show_mouse_face (hlinfo, DRAW_MOUSE_FACE);
+         mouse_face_shown = true;
 
          if (NILP (pointer))
            pointer = Qhand;
        }
-      else if ((area == ON_MODE_LINE) || (area == ON_HEADER_LINE))
-       clear_mouse_face (hlinfo);
     }
+
+  /* If mouse-face doesn't need to be shown, clear any existing
+     mouse-face.  */
+  if ((area == ON_MODE_LINE || area == ON_HEADER_LINE) && !mouse_face_shown)
+    clear_mouse_face (hlinfo);
+
 #ifdef HAVE_WINDOW_SYSTEM
   if (FRAME_WINDOW_P (f))
     define_frame_cursor1 (f, cursor, pointer);
index 80c214a7a566f1e0667c08f70a597a840f966fa0..5ac58e9c7e0919bf93550e5fa30619ad32aa9a95 100644 (file)
@@ -4320,13 +4320,13 @@ elements (all size values are in pixels).
 
 - `title-bar-height' is the height of the title bar of FRAME.
 
-- `menu-bar-external' if `t' means the menu bar is external (not
+- `menu-bar-external' if t means the menu bar is external (not
   included in the inner edges of FRAME).
 
 - `menu-bar-size' is a cons of the width and height of the menu bar of
   FRAME.
 
-- `tool-bar-external' if `t' means the tool bar is external (not
+- `tool-bar-external' if t means the tool bar is external (not
   included in the inner edges of FRAME).
 
 - `tool-bar-side' tells tells on which side the tool bar on FRAME is and
index 4590e34fe8b313ce3859e648617c57462e87cc2c..3734fbfee92a0b251efefc080fe09c7dbe2e94e8 100644 (file)
@@ -7847,17 +7847,18 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
       f = any;
 
-#if ! defined (USE_GTK)
       /* If mouse-highlight is an integer, input clears out
         mouse highlighting.  */
       if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
+#if ! defined (USE_GTK)
          && (f == 0
-             || !EQ (f->tool_bar_window, hlinfo->mouse_face_window)))
+             || !EQ (f->tool_bar_window, hlinfo->mouse_face_window))
+#endif
+         )
         {
           clear_mouse_face (hlinfo);
           hlinfo->mouse_face_hidden = true;
         }
-#endif
 
 #if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS
       if (f == 0)
@@ -12256,7 +12257,7 @@ static struct redisplay_interface x_redisplay_interface =
     x_draw_window_cursor,
     x_draw_vertical_window_border,
     x_draw_window_divider,
-    x_shift_glyphs_for_insert, /* Never called, se comment in function.  */
+    x_shift_glyphs_for_insert, /* Never called; see comment in function.  */
     x_show_hourglass,
     x_hide_hourglass
   };
index a6035d1cba2d01fc7c51e9f0c25bec5676a1c0d2..2703b44dee52574e689cd2264234f36eea90f22f 100644 (file)
 (eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at run-time.
 (require 'cl-generic)
 
+(fmakunbound 'cl--generic-1)
 (cl-defgeneric cl--generic-1 (x y))
 (cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
 
 (ert-deftest cl-generic-test-00 ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
   (should (equal (cl--generic-1 'a 'b) '(a . b))))
 
 (ert-deftest cl-generic-test-01-eql ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
   (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
@@ -54,6 +57,7 @@
 (cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
 
 (ert-deftest cl-generic-test-02-struct ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
   (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
@@ -91,6 +95,7 @@
     (should (equal x '(3 2 1)))))
 
 (ert-deftest cl-generic-test-04-overlapping-tagcodes ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 ((y t) z) (list y z))
   (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
   (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
 
 (ert-deftest cl-generic-test-05-alias ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (defalias 'cl--generic-2 #'cl--generic-1)
   (cl-defmethod cl--generic-1 ((y t) z) (list y z))
   (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
 
 (ert-deftest cl-generic-test-06-multiple-dispatch ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 (x y) (list x y))
   (cl-defmethod cl--generic-1 (_x (_y integer))
   (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
 
 (ert-deftest cl-generic-test-07-apo ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y)
     (:documentation "My doc.") (:argument-precedence-order y x))
   (cl-defmethod cl--generic-1 (x y) (list x y))
 
 (ert-deftest cl-generic-test-08-after/before ()
   (let ((log ()))
+    (fmakunbound 'cl--generic-1)
     (cl-defgeneric cl--generic-1 (x y))
     (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
     (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
 (defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
 
 (ert-deftest cl-generic-test-09-advice ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 (x y) (list x y))
   (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
   (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
 
 (ert-deftest cl-generic-test-10-weird ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x &rest r) "My doc.")
   (cl-defmethod cl--generic-1 (x &rest r) (cons x r))
   ;; This kind of definition is not valid according to CLHS, but it does show
   (should (equal (cl--generic-1 1 2) '("integer" 2 1))))
 
 (ert-deftest cl-generic-test-11-next-method-p ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y)
     (list x y (cl-next-method-p)))
     (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
   (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
 
-(ert-deftest sm-generic-test-12-context ()
+(ert-deftest cl-generic-test-12-context ()
+  (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 ())
-  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t)))   'is-t)
-  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil))) 'is-nil)
-  (cl-defmethod cl--generic-1 () 'other)
+  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t)))
+    (list 'is-t (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil)))
+    (list 'is-nil (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 () 'any)
   (should (equal (list (let ((overwrite-mode t))   (cl--generic-1))
                        (let ((overwrite-mode nil)) (cl--generic-1))
                        (let ((overwrite-mode 1))   (cl--generic-1)))
-                 '(is-t is-nil other))))
+                 '((is-t any) (is-nil any) any))))
+
+(ert-deftest cl-generic-test-13-head ()
+  (fmakunbound 'cl--generic-1)
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
+  (cl-defmethod cl--generic-1 ((_x (head 4)) _y)
+    (cons "quatre" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (head 5)) _y)
+    (cons "cinq" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (head 6)) y)
+    (cons "six" (cl-call-next-method 'a y)))
+  (should (equal (cl--generic-1 'a nil) '(a)))
+  (should (equal (cl--generic-1 '(4) nil) '("quatre" (4))))
+  (should (equal (cl--generic-1 '(5) nil) '("cinq" (5))))
+  (should (equal (cl--generic-1 '(6) nil) '("six" a))))
 
 (provide 'cl-generic-tests)
 ;;; cl-generic-tests.el ends here
index 24c4fdec14e581524c1eb7c9fba871eee26de74f..0c383f7c7b630cacfe6ecdc1111bbf22980389bc 100644 (file)
     ("makepp: bla bla `/foo/bar.c' and `/foo/bar.h'" 35 nil nil "/foo/bar.h")
     ;; maven
     ("FooBar.java:[111,53] no interface expected here"
-     1 53 111 "FooBar.java")
+     1 53 111 "FooBar.java" 2)
     ("  [ERROR] /Users/cinsk/hello.java:[651,96] ';' expected"
-     15 96 651 "/Users/cinsk/hello.java") ;Bug#11517.
+     15 96 651 "/Users/cinsk/hello.java" 2) ;Bug#11517.
+    ("[WARNING] /foo/bar/Test.java:[27,43] unchecked conversion"
+     11 43 27 "/foo/bar/Test.java" 1) ;Bug#20556
     ;; mips-1 mips-2
     ("TrimMask (255) in solomon.c may be indistinguishable from TrimMasks (93) in solomo.c due to truncation"
      11 nil 255 "solomon.c")
@@ -335,6 +337,7 @@ END-LINE, if that matched.")
            (col  (nth 2 test))
            (line (nth 3 test))
            (file (nth 4 test))
+            (type (nth 5 test))
            end-col end-line)
        (if (consp col)
            (setq end-col (cdr col) col (car col)))
@@ -342,13 +345,15 @@ END-LINE, if that matched.")
            (setq end-line (cdr line) line (car line)))
        (and (equal (compilation--loc->col loc) col)
             (equal (compilation--loc->line loc) line)
-            (or (not file) 
+             (or (not file)
                  (equal (caar (compilation--loc->file-struct loc)) file))
             (or (null end-col)
                 (equal (car (cadr (nth 2 (compilation--loc->file-struct loc))))
                        end-col))
             (equal (car (nth 2 (compilation--loc->file-struct loc)))
-                   (or end-line line)))))))
+                    (or end-line line))
+             (or (null type)
+                 (equal type (compilation--message->type msg))))))))
 
 (ert-deftest compile-test-error-regexps ()
   "Test the `compilation-error-regexp-alist' regexps.
index 7d8178c05a5897dee34daa2c72117d36bfc9abe2..7b1c00c06db0263bd34e46d0198e3fb65f08e0c6 100644 (file)
@@ -19,7 +19,7 @@
 
 (defcustom simple-single-super-sunday nil
   "How great is this?
-Default changed to `nil'."
+Default changed to nil."
   :type 'boolean
   :group 'simple-single
   :package-version "1.4")
index 8e3a7918c807684939df865c4a6f7c9a4b65aa0d..46d287fe60dff203de4f92b441115c2143e4755f 100644 (file)
@@ -72,7 +72,7 @@
 (defun file-notify--test-local-enabled ()
   "Whether local file notification is enabled.
 This is needed for local `temporary-file-directory' only, in the
-remote case we return always `t'."
+remote case we return always t."
   (or file-notify--library
       (file-remote-p temporary-file-directory)))
 
index ed2e3cf25aa83a083fb6141f3b685afb16f482f6..677bfa613fc27f8e7162c699d9d13a75bd75ec48 100644 (file)
           ,@(if upload-base
                 '((package-test-archive-upload-base (make-temp-file "pkg-archive-base-" t))
                   (package-archive-upload-base package-test-archive-upload-base))
-              (list (cl-gensym)))) ;; Dummy value so `let' doesn't try to bind `nil'
+              (list (cl-gensym)))) ;; Dummy value so `let' doesn't try to bind nil
      (let ((buf (get-buffer "*Packages*")))
        (when (buffer-live-p buf)
          (kill-buffer buf)))
diff --git a/test/automated/sgml-mode-tests.el b/test/automated/sgml-mode-tests.el
new file mode 100644 (file)
index 0000000..eeb5c7d
--- /dev/null
@@ -0,0 +1,135 @@
+;;; sgml-mode-tests.el --- Tests for sgml-mode
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Przemysław Wojnowski <esperanto@cumego.com>
+;; Keywords: tests
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'sgml-mode)
+(require 'ert)
+
+(defmacro sgml-with-content (content &rest body)
+  "Insert CONTENT into a temporary `sgml-mode' buffer and execute BODY on it.
+The point is set to the beginning of the buffer."
+  `(with-temp-buffer
+     (sgml-mode)
+     (insert ,content)
+     (goto-char (point-min))
+     ,@body))
+
+;;; sgml-delete-tag
+
+(ert-deftest sgml-delete-tag-should-not-delete-tags-when-wrong-args ()
+  "Don't delete tag, when number of tags to delete is not positive number."
+  (let ((content "<p>Valar Morghulis</p>"))
+    (sgml-with-content
+     content
+     (sgml-delete-tag -1)
+     (should (string= content (buffer-string)))
+     (sgml-delete-tag 0)
+     (should (string= content (buffer-string))))))
+
+(ert-deftest sgml-delete-tag-should-delete-tags-n-times ()
+  ;; Delete only 1, when 1 available:
+  (sgml-with-content
+   "<br />"
+   (sgml-delete-tag 1)
+   (should (string= "" (buffer-string))))
+  ;; Delete from position on whitespaces before tag:
+  (sgml-with-content
+   " \t\n<br />"
+   (sgml-delete-tag 1)
+   (should (string= "" (buffer-string))))
+  ;; Delete from position on tag:
+  (sgml-with-content
+   "<br />"
+   (goto-char 3)
+   (sgml-delete-tag 1)
+   (should (string= "" (buffer-string))))
+  ;; Delete one by one:
+  (sgml-with-content
+   "<h1><p>You know nothing, Jon Snow.</p></h1>"
+   (sgml-delete-tag 1)
+   (should (string= "<p>You know nothing, Jon Snow.</p>" (buffer-string)))
+   (sgml-delete-tag 1)
+   (should (string= "You know nothing, Jon Snow." (buffer-string))))
+  ;; Delete 2 at a time, when 2 available:
+  (sgml-with-content
+   "<h1><p>You know nothing, Jon Snow.</p></h1>"
+   (sgml-delete-tag 2)
+   (should (string= "You know nothing, Jon Snow." (buffer-string)))))
+
+(ert-deftest sgml-delete-tag-should-delete-unclosed-tag ()
+  (sgml-with-content
+   "<ul><li>Keep your stones connected.</ul>"
+   (goto-char 5)                   ; position on "li" tag
+   (sgml-delete-tag 1)
+   (should (string= "<ul>Keep your stones connected.</ul>" (buffer-string)))))
+
+(ert-deftest sgml-delete-tag-should-signal-error-for-malformed-tags ()
+  (let ((content "<h1><h2>Drakaris!</h1></h2>"))
+    ;; Delete outside tag:
+    (sgml-with-content
+     content
+     (sgml-delete-tag 1)
+     (should (string= "<h2>Drakaris!</h2>" (buffer-string))))
+    ;; Delete inner tag:
+    (sgml-with-content
+     content
+     (goto-char 5)                   ; position the inner tag
+     (sgml-delete-tag 1)
+     (should (string= "<h1>Drakaris!</h1>" (buffer-string))))))
+
+(ert-deftest sgml-delete-tag-should-signal-error-when-deleting-too-much ()
+  (let ((content "<emph>Drakaris!</emph>"))
+    ;; No tags to delete:
+    (sgml-with-content
+     "Drakaris!"
+     (should-error (sgml-delete-tag 1) :type 'error)
+     (should (string= "Drakaris!" (buffer-string))))
+    ;; Trying to delete 2 tags, when only 1 available:
+    (sgml-with-content
+     content
+     (should-error (sgml-delete-tag 2) :type 'error)
+     (should (string= "Drakaris!" (buffer-string))))
+    ;; Trying to delete a tag, but not on/before a tag:
+    (sgml-with-content
+     content
+     (goto-char 7)                     ; D in Drakaris
+     (should-error (sgml-delete-tag 1) :type 'error)
+     (should (string= content (buffer-string))))
+    ;; Trying to delete a tag from position outside tag:
+    (sgml-with-content
+     content
+     (goto-char (point-max))
+     (should-error (sgml-delete-tag 1) :type 'error)
+     (should (string= content (buffer-string))))))
+
+(ert-deftest sgml-delete-tag-bug-8203-should-not-delete-apostrophe ()
+  :expected-result :failed
+  (sgml-with-content
+   "<title>Winter is comin'</title>"
+   (sgml-delete-tag 1)
+   (should (string= "Winter is comin'" (buffer-string)))))
+
+(provide 'sgml-mode-tests)
+;;; sgml-mode-tests.el ends here
diff --git a/test/automated/subr-tests.el b/test/automated/subr-tests.el
new file mode 100644 (file)
index 0000000..d29efc6
--- /dev/null
@@ -0,0 +1,64 @@
+;;; subr-tests.el --- Tests for subr.el
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Oleh Krehel <ohwoeowho@gmail.com>
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+
+(ert-deftest let-when-compile ()
+  ;; good case
+  (should (equal (macroexpand '(let-when-compile ((foo (+ 2 3)))
+                                (setq bar (eval-when-compile (+ foo foo)))
+                                (setq boo (eval-when-compile (* foo foo)))))
+                 '(progn
+                   (setq bar (quote 10))
+                   (setq boo (quote 25)))))
+  ;; bad case: `eval-when-compile' omitted, byte compiler should catch this
+  (should (equal (macroexpand
+                  '(let-when-compile ((foo (+ 2 3)))
+                    (setq bar (+ foo foo))
+                    (setq boo (eval-when-compile (* foo foo)))))
+                 '(progn
+                   (setq bar (+ foo foo))
+                   (setq boo (quote 25)))))
+  ;; something practical
+  (should (equal (macroexpand
+                  '(let-when-compile ((keywords '("true" "false")))
+                    (font-lock-add-keywords
+                     'c++-mode
+                     `((,(eval-when-compile
+                           (format "\\<%s\\>" (regexp-opt keywords)))
+                         0 font-lock-keyword-face)))))
+                 '(font-lock-add-keywords
+                   (quote c++-mode)
+                   (list
+                    (cons (quote
+                           "\\<\\(?:\\(?:fals\\|tru\\)e\\)\\>")
+                     (quote
+                      (0 font-lock-keyword-face))))))))
+
+(provide 'subr-tests)
+;;; subr-tests.el ends here
index 671860182a1236ca5ce290c7302c284d1732cc81..c6c084dd69f8e76a9755e1749340eef45bb08787 100644 (file)
@@ -35,7 +35,7 @@
             (with-temp-buffer
               (set-buffer-multibyte nil)
               (insert-file-contents-literally
-               (expand-file-name "foo-gzipped" zlib-tests-data-directory))
+               (expand-file-name "foo.gz" zlib-tests-data-directory))
               (zlib-decompress-region (point-min) (point-max))
               (buffer-string))
             "foo\n"))))
index 1a885cc95faddc2ae9a7b233cb1f45e1b37e239c..d747265bcf3fcaa9cdf185feefda64e644d4c551 100644 (file)
@@ -47,7 +47,6 @@ $user_comment_lc      php-src/lce_functions.php       115
 (a-forth-constant      forth-src/test-forth.fth        /^constant (a-forth-constant$/
 (another-forth-word    forth-src/test-forth.fth        /^: (another-forth-word) ( -- )$/
 +      tex-src/texinfo.tex     /^\\def+{{\\tt \\char 43}}$/
-.PRECIOUS      Makefile        /^.PRECIOUS: ETAGS.good CTAGS.good$/
 /.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
 /.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
 /.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/
@@ -244,7 +243,6 @@ A::operator+        cp-src/c.C      /^  A operator+(A& a) {};$/
 A::rosso       cp-src/c.C      40
 A::verde       cp-src/c.C      40
 A::~A  cp-src/c.C      /^A::~A() {}$/
-ADASRC Makefile        /^ADASRC=$(addprefix .\/ada-src\/,etags-test-for.ada 2/
 ADDRESS        c-src/emacs/src/gmalloc.c       /^#define ADDRESS(B)    ((void *) (((B) - 1) * BLOCKSIZ/
 ALIGNOF_STRUCT_LISP_VECTOR     c-src/emacs/src/lisp.h  1378
 ALLOCATED_BEFORE_DUMPING       c-src/emacs/src/gmalloc.c       /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/
@@ -254,7 +252,6 @@ AND y-src/cccp.c    11
 ANSIC  c-src/h.h       84
 ANSIC  c-src/h.h       85
 AREF   c-src/emacs/src/lisp.h  /^AREF (Lisp_Object array, ptrdiff_t idx)$/
-ARGS   Makefile        /^ARGS=- < srclist$/
 ARITH_EQUAL    c-src/emacs/src/lisp.h  3498
 ARITH_GRTR     c-src/emacs/src/lisp.h  3501
 ARITH_GRTR_OR_EQUAL    c-src/emacs/src/lisp.h  3503
@@ -267,7 +264,6 @@ ARRAY_MARK_FLAG     c-src/emacs/src/lisp.h  768
 ASCII_CHAR_P   c-src/emacs/src/lisp.h  /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/
 ASET   c-src/emacs/src/lisp.h  /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/
 ASIZE  c-src/emacs/src/lisp.h  /^ASIZE (Lisp_Object array)$/
-ASRC   Makefile        /^ASRC=$(addprefix .\/a-src\/,empty.zz empty.zz.gz)$/
 AST_Array::AST_Array   cp-src/c.C      /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/
 AST_ConcreteType::AST_ConcreteType     cp-src/c.C      /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/
 AST_Root       cp-src/c.C      92
@@ -465,13 +461,9 @@ CONSTYPE_PURE      c-src/emacs/src/lisp.h  3739
 CONS_TO_INTEGER        c-src/emacs/src/lisp.h  /^#define CONS_TO_INTEGER(cons, type, var)                              \\$/
 CONVERT_CHARSTRING_TO_VALUE    pas-src/common.pas      /^procedure CONVERT_CHARSTRING_TO_VALUE;(*($/
 CPPFLAGS       make-src/Makefile       49
-CPSRC  Makefile        /^CPSRC=$(addprefix .\/cp-src\/,c.C burton.cpp burton./
-CSRC   Makefile        /^CSRC=$(addprefix .\/c-src\/,abbrev.c .\/\/c.c torture./
-CTAGS  Makefile        /^CTAGS: FRC ${infiles}$/
 CTAGS  c-src/etags.c   146
 CTAGS  c-src/etags.c   147
 CTAGS  c-src/etags.c   149
-CTAGS_PROG     Makefile        /^CTAGS_PROG=..\/..\/lib-src\/ctags$/
 C_AUTO c-src/etags.c   2198
 C_EXT  c-src/etags.c   2193
 C_JAVA c-src/etags.c   2197
@@ -580,7 +572,6 @@ Debug       cp-src/functions.cpp    /^void Debug ( int lineno, int level, char* func , c/
 DisposeANameList       pas-src/common.pas      /^procedure DisposeANameList( $/
 DisposeNameList        pas-src/common.pas      /^procedure DisposeNameList;$/
 ELEM_I c-src/h.h       3
-ELSRC  Makefile        /^ELSRC=$(addprefix .\/el-src\/,TAGTEST.EL emacs\/lisp\//
 EMACS_INT      c-src/emacs/src/lisp.h  91
 EMACS_INT      c-src/emacs/src/lisp.h  96
 EMACS_INT      c-src/emacs/src/lisp.h  103
@@ -610,12 +601,9 @@ ENUM_BF    c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : CHAR_BIT;$/
 ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : CHAR_BIT;$/
 EQ     c-src/emacs/src/lisp.h  /^# define EQ(x, y) lisp_h_EQ (x, y)$/
 EQUAL  y-src/cccp.c    12
-ERLSRC Makefile        /^ERLSRC=$(addprefix .\/erl-src\/,gs_dialog.erl)$/
 ERROR  y-src/parse.y   303
 ERROR  parse.y 303
 ERROR  y-src/cccp.c    9
-ETAGS  Makefile        /^ETAGS: FRC ${infiles}$/
-ETAGS_PROG     Makefile        /^ETAGS_PROG=..\/..\/lib-src\/etags$/
 EXFUN  c-src/emacs/src/lisp.h  /^#define EXFUN(fnname, maxargs) \\$/
 EXTERNALLY_VISIBLE     c-src/emacs/src/keyboard.c      3497
 EXTERNALLY_VISIBLE     c-src/emacs/src/keyboard.c      4372
@@ -638,13 +626,10 @@ FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h  /^#define FIXNUM_OVERFLOW_P(i) \\$/
 FIXNUM_OVERFLOW_P      c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_O/
 FLOATP c-src/emacs/src/lisp.h  /^# define FLOATP(x) lisp_h_FLOATP (x)$/
 FLOAT_TO_STRING_BUFSIZE        c-src/emacs/src/lisp.h  3927
-FORTHSRC       Makefile        /^FORTHSRC=$(addprefix .\/forth-src\/,test-forth.fth)$/
 FOR_EACH_ALIST_VALUE   c-src/emacs/src/lisp.h  /^#define FOR_EACH_ALIST_VALUE(head_var, list_var, v/
 FOR_EACH_TAIL  c-src/emacs/src/lisp.h  /^#define FOR_EACH_TAIL(hare, list, tortoise, n)        \\$/
 FRAMEP c-src/emacs/src/lisp.h  /^FRAMEP (Lisp_Object a)$/
-FRC    Makefile        /^FRC:;$/
 FREEFLOOD      c-src/emacs/src/gmalloc.c       1858
-FSRC   Makefile        /^FSRC=$(addprefix .\/f-src\/,entry.for entry.strange_/
 FUN0   y-src/parse.y   /^yylex FUN0()$/
 FUN0   parse.y /^yylex FUN0()$/
 FUN1   y-src/parse.y   /^yyerror FUN1(char *, s)$/
@@ -735,7 +720,6 @@ HASH_TABLE_SIZE     c-src/emacs/src/lisp.h  /^HASH_TABLE_SIZE (struct Lisp_Hash_Table
 HASH_VALUE     c-src/emacs/src/lisp.h  /^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/
 HAVE_NTGUI     c-src/etags.c   116
 HEAP   c-src/emacs/src/gmalloc.c       131
-HTMLSRC        Makefile        /^HTMLSRC=$(addprefix .\/html-src\/,softwarelibero.htm/
 HTML_help      c-src/etags.c   584
 HTML_labels    c-src/etags.c   /^HTML_labels (FILE *inf)$/
 HTML_suffixes  c-src/etags.c   582
@@ -851,7 +835,6 @@ LTGT        cp-src/MDiagArray2.h    35
 LTGT   cp-src/MDiagArray2.h    39
 LTGT   cp-src/MDiagArray2.h    42
 LTGT   cp-src/MDiagArray2.h    144
-LUASRC Makefile        /^LUASRC=$(addprefix .\/lua-src\/,allegro.lua)$/
 L_CELL y-src/parse.c   10
 L_CONST        y-src/parse.c   13
 L_FN0  y-src/parse.c   14
@@ -938,7 +921,6 @@ Lua_suffixes        c-src/etags.c   598
 MAGICBYTE      c-src/emacs/src/gmalloc.c       1856
 MAGICFREE      c-src/emacs/src/gmalloc.c       1855
 MAGICWORD      c-src/emacs/src/gmalloc.c       1854
-MAKESRC        Makefile        /^MAKESRC=$(addprefix .\/make-src\/,Makefile)$/
 MALLOCFLOOD    c-src/emacs/src/gmalloc.c       1857
 MANY   c-src/emacs/src/lisp.h  2833
 MARKERP        c-src/emacs/src/lisp.h  /^# define MARKERP(x) lisp_h_MARKERP (x)$/
@@ -1016,7 +998,6 @@ NILP       c-src/emacs/src/lisp.h  /^# define NILP(x) lisp_h_NILP (x)$/
 NIL_IS_ZERO    c-src/emacs/src/lisp.h  1515
 NONPOINTER_BITS        c-src/emacs/src/lisp.h  78
 NONPOINTER_BITS        c-src/emacs/src/lisp.h  80
-NONSRCS        Makefile        /^NONSRCS=.\/f-src\/entry.strange .\/erl-src\/lists.erl /
 NONSRCS        make-src/Makefile       35
 NOTEQUAL       y-src/cccp.c    13
 NULL   cccp.y  51
@@ -1033,20 +1014,14 @@ NewLayerSet     lua-src/allegro.lua     /^function NewLayerSet (name)$/
 NewNameString  pas-src/common.pas      /^procedure NewNameString; (* (var NSP: NameStringPo/
 NmStrToErrStr  pas-src/common.pas      /^function NmStrToErrStr;(*($/
 NmStrToInteger pas-src/common.pas      /^function NmStrToInteger; (* (Str : NameString) : i/
-OBJCPPSRC      Makefile        /^OBJCPPSRC=$(addprefix .\/objcpp-src\/,SimpleCalc.H S/
-OBJCSRC        Makefile        /^OBJCSRC=$(addprefix .\/objc-src\/,Subprocess.h Subpr/
 OPENBUTTON     objc-src/PackInsp.m     47
-OPTIONS        Makefile        /^OPTIONS=--members --declarations --regex=@regexfil/
 OR     y-src/cccp.c    10
 OVERLAYP       c-src/emacs/src/lisp.h  /^OVERLAYP (Lisp_Object x)$/
 Objc_help      c-src/etags.c   613
 Objc_suffixes  c-src/etags.c   609
 OperatorFun    c-src/h.h       88
 Overview       tex-src/gzip.texi       /^@node Overview, Sample, Copying, Top$/
-PASSRC Makefile        /^PASSRC=$(addprefix .\/pas-src\/,common.pas)$/
 PDT    c-src/h.h       /^  Date 04 May 87 235311 PDT (Mon)$/
-PERLSRC        Makefile        /^PERLSRC=$(addprefix .\/perl-src\/,htlmify-cystic yag/
-PHPSRC Makefile        /^PHPSRC=$(addprefix .\/php-src\/,lce_functions.php pt/
 PHP_functions  c-src/etags.c   /^PHP_functions (FILE *inf)$/
 PHP_help       c-src/etags.c   639
 PHP_suffixes   c-src/etags.c   637
@@ -1059,13 +1034,13 @@ POReader        php-src/lce_functions.php       163
 POReader       php-src/lce_functions.php       /^      function POReader($domain, $filename)$/
 PRINT_UNDOCUMENTED_OPTIONS_HELP        c-src/etags.c   804
 PROCESSP       c-src/emacs/src/lisp.h  /^PROCESSP (Lisp_Object a)$/
-PROLSRC        Makefile        /^PROLSRC=$(addprefix .\/prol-src\/,ordsets.prolog nat/
 PROP   c-src/emacs/src/keyboard.c      /^#define PROP(IDX) AREF (tool_bar_item_properties, /
 PROP   c-src/emacs/src/keyboard.c      8379
 PROTECT_MALLOC_STATE   c-src/emacs/src/gmalloc.c       /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/
 PROTECT_MALLOC_STATE   c-src/emacs/src/gmalloc.c       /^#define PROTECT_MALLOC_STATE(PROT)    \/* empty *\/$/
 PRTPKG f-src/entry.for /^      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/
 PRTPKG f-src/entry.strange_suffix      /^      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/
+PRTPKG f-src/entry.strange     /^      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/
 PSEUDO c-src/sysdep.h  /^#define       PSEUDO(name, syscall_name, args)                                      /
 PSEUDOVECSIZE  c-src/emacs/src/lisp.h  /^#define PSEUDOVECSIZE(type, nonlispfield)                     \\$/
 PSEUDOVECTORP  c-src/emacs/src/lisp.h  /^PSEUDOVECTORP (Lisp_Object a, int code)$/
@@ -1076,7 +1051,6 @@ PSEUDOVECTOR_REST_MASK    c-src/emacs/src/lisp.h  814
 PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h  808
 PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h  809
 PSEUDOVECTOR_TYPEP     c-src/emacs/src/lisp.h  /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/
-PSSRC  Makefile        /^PSSRC=$(addprefix .\/ps-src\/,rfc1245.ps)$/
 PS_functions   c-src/etags.c   /^PS_functions (FILE *inf)$/
 PS_help        c-src/etags.c   649
 PS_suffixes    c-src/etags.c   647
@@ -1101,7 +1075,6 @@ PVEC_TERMINAL     c-src/emacs/src/lisp.h  790
 PVEC_TYPE_MASK c-src/emacs/src/lisp.h  819
 PVEC_WINDOW    c-src/emacs/src/lisp.h  786
 PVEC_WINDOW_CONFIGURATION      c-src/emacs/src/lisp.h  791
-PYTSRC Makefile        /^PYTSRC=$(addprefix .\/pyt-src\/,server.py)$/
 PackageInspector       objc-src/PackInsp.h     /^@interface PackageInspector:WMInspector$/
 Pascal_functions       c-src/etags.c   /^Pascal_functions (FILE *inf)$/
 Pascal_help    c-src/etags.c   621
@@ -1192,7 +1165,6 @@ RECC_UNIBYTE      c-src/emacs/src/regex.h 617
 RECC_UPPER     c-src/emacs/src/regex.h 612
 RECC_WORD      c-src/emacs/src/regex.h 610
 RECC_XDIGIT    c-src/emacs/src/regex.h 614
-REGEX  Makefile        /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/
 REGS_FIXED     c-src/emacs/src/regex.h 378
 REGS_REALLOCATE        c-src/emacs/src/regex.h 377
 REGS_UNALLOCATED       c-src/emacs/src/regex.h 376
@@ -1267,7 +1239,6 @@ RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332
 RE_UNMATCHED_RIGHT_PAREN_ORD   c-src/emacs/src/regex.h 136
 RSH    y-src/cccp.c    17
 RTE/s  ada-src/2ataspri.adb    /^   package RTE renames Interfaces.C.POSIX_RTE;$/
-RUN    Makefile        /^RUN=$/
 Range  cp-src/Range.h  35
 Range::Range   cp-src/Range.h  /^  Range (void)$/
 Range::Range   cp-src/Range.h  /^  Range (const Range& r)$/
@@ -1328,6 +1299,7 @@ SDTrefSkipSpaces  pas-src/common.pas      /^procedure SDTrefSkipSpaces;$/
 SDTrefStringToRec      pas-src/common.pas      /^procedure SDTrefStringToRec (* ($/
 SETPRT f-src/entry.for /^       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, D/
 SETPRT f-src/entry.strange_suffix      /^       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, D/
+SETPRT f-src/entry.strange     /^       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, D/
 SET_SYMBOL_BLV c-src/emacs/src/lisp.h  /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/
 SET_SYMBOL_FWD c-src/emacs/src/lisp.h  /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/
 SET_SYMBOL_VAL c-src/emacs/src/lisp.h  /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/
@@ -1344,7 +1316,6 @@ SPECPDL_UNWIND    c-src/emacs/src/lisp.h  2944
 SPECPDL_UNWIND_INT     c-src/emacs/src/lisp.h  2946
 SPECPDL_UNWIND_PTR     c-src/emacs/src/lisp.h  2945
 SPECPDL_UNWIND_VOID    c-src/emacs/src/lisp.h  2947
-SRCS   Makefile        /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/
 SREF   c-src/emacs/src/lisp.h  /^SREF (Lisp_Object string, ptrdiff_t index)$/
 SSDATA c-src/emacs/src/lisp.h  /^SSDATA (Lisp_Object string)$/
 SSET   c-src/emacs/src/lisp.h  /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/
@@ -1419,7 +1390,6 @@ TAS_Cell/t        ada-src/2ataspri.ads    /^   type TAS_Cell is$/
 TCB_Ptr/t      ada-src/2ataspri.ads    /^   type TCB_Ptr is access all Task_Control_Block;$/
 TERMINALP      c-src/emacs/src/lisp.h  /^TERMINALP (Lisp_Object a)$/
 TEST   php-src/ptest.php       1
-TEXSRC Makefile        /^TEXSRC=$(addprefix .\/tex-src\/,testenv.tex gzip.tex/
 TEXTAGS        make-src/Makefile       204
 TEXTAGS        make-src/Makefile       219
 TEX_LESC       c-src/etags.c   4986
@@ -1604,7 +1574,6 @@ XUNTAG    c-src/emacs/src/lisp.h  /^XUNTAG (Lisp_Object a, int type)$/
 XWINDOW        c-src/emacs/src/lisp.h  /^XWINDOW (Lisp_Object a)$/
 Y      c-src/h.h       100
 YACC   c-src/etags.c   2199
-YSRC   Makefile        /^YSRC=$(addprefix .\/y-src\/,parse.y parse.c atest.y /
 YYABORT        /usr/share/bison/bison.simple   153
 YYABORT        /usr/share/bison/bison.simple   153
 YYACCEPT       /usr/share/bison/bison.simple   152
@@ -2574,7 +2543,7 @@ b c-src/h.h       41
 b      c-src/h.h       103
 b      c-src/h.h       104
 backslash=0    tex-src/texinfo.tex     /^\\let\\indexbackslash=0  %overridden during \\printin/
-bar    c-src//c.c      /^void bar() {while(0) {}}$/
+bar    c-src/c.c       /^void bar() {while(0) {}}$/
 bar    c.c     143
 bar    c-src/h.h       19
 bas_syn        prol-src/natded.prolog  /^bas_syn(n(_)).$/
@@ -2667,7 +2636,6 @@ cat       c-src/h.h       81
 cat    prol-src/natded.prolog  /^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/
 cat_atoms      prol-src/natded.prolog  /^cat_atoms(A1,A2,A3):-$/
 cccccccccc     c-src/h.h       115
-cdiff  Makefile        /^cdiff: CTAGS.good CTAGS ${infiles}$/
 cdr    c-src/emacs/src/lisp.h  1159
 cell   y-src/parse.y   278
 cgrep  html-src/software.html  /^cgrep$/
@@ -2677,7 +2645,6 @@ char_bits c-src/emacs/src/lisp.h  2443
 char_table_specials    c-src/emacs/src/lisp.h  1692
 charset_unibyte        c-src/emacs/src/regex.h 410
 chartonmstr    pas-src/common.pas      /^function chartonmstr; (*($/
-check  Makefile        /^check:$/
 checkQuotation php-src/lce_functions.php       /^      function checkQuotation($str)$/
 check_cons_list        c-src/emacs/src/lisp.h  /^#  define check_cons_list() lisp_h_check_cons_list/
 checkhdr       c-src/emacs/src/gmalloc.c       /^checkhdr (const struct hdr *hdr)$/
@@ -2846,7 +2813,6 @@ echo_message_buffer       c-src/emacs/src/keyboard.c      171
 echo_now       c-src/emacs/src/keyboard.c      /^echo_now (void)$/
 echo_truncate  c-src/emacs/src/keyboard.c      /^echo_truncate (ptrdiff_t nchars)$/
 echoing        c-src/emacs/src/keyboard.c      154
-ediff% Makefile        /^ediff%: ETAGS.good% ETAGS ${infiles}$/
 editItem       pyt-src/server.py       /^    def editItem(self):$/
 editsite       pyt-src/server.py       /^    def editsite(self, site):$/
 edituser       pyt-src/server.py       /^    def edituser(self, user):$/
@@ -2918,7 +2884,7 @@ expression_value  cccp.y  68
 expression_value       y-src/cccp.y    68
 extras c-src/emacs/src/lisp.h  1603
 extvar c-src/h.h       109
-f      c-src//c.c      /^T f(){if(x){}$/
+f      c-src/c.c       /^T f(){if(x){}$/
 f      c.c     145
 f      c.c     156
 f      c.c     168
@@ -3002,7 +2968,7 @@ foo       f-src/entry.strange     /^       character*(*) function foo()$/
 foo    php-src/ptest.php       /^foo()$/
 foo::f cp-src/c.C      /^     void f() {}$/
 foo::x cp-src/c.C      80
-foobar c-src//c.c      /^int foobar() {;}$/
+foobar c-src/c.c       /^int foobar() {;}$/
 foobar c.c     /^extern void foobar (void) __attribute__ ((section /
 foobar2        c-src/h.h       20
 foobar2_       c-src/h.h       16
@@ -3124,7 +3090,7 @@ hybrid_get_current_dir_name       c-src/emacs/src/gmalloc.c       /^hybrid_get_current_dir_n
 hybrid_malloc  c-src/emacs/src/gmalloc.c       /^hybrid_malloc (size_t size)$/
 hybrid_realloc c-src/emacs/src/gmalloc.c       /^hybrid_realloc (void *ptr, size_t size)$/
 hypothetical_mem       prol-src/natded.prolog  /^hypothetical_mem(fi(N),Ass,_):-$/
-i      c-src//c.c      2
+i      c-src/c.c       2
 i      c.c     169
 i      c-src/emacs/src/lisp.h  567
 i      c-src/emacs/src/lisp.h  4673
@@ -3145,7 +3111,6 @@ inattribute       c-src/etags.c   2400
 index  c-src/emacs/src/lisp.h  1856
 infabsdir      c-src/etags.c   206
 infabsname     c-src/etags.c   205
-infiles        Makefile        /^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/
 infname        c-src/etags.c   204
 info   c-src/emacs/src/gmalloc.c       157
 infoPanel:     objcpp-src/SimpleCalc.M /^- infoPanel:sender$/
@@ -3183,7 +3148,7 @@ integertonmstr    pas-src/common.pas      /^function integertonmstr; (* (TheInteger : in
 intensity1     f-src/entry.for /^     & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
 intensity1     f-src/entry.strange_suffix      /^     & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
 intensity1     f-src/entry.strange     /^     & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
-interface_locate       c-src//c.c      /^interface_locate(void)$/
+interface_locate       c-src/c.c       /^interface_locate(void)$/
 intern c-src/emacs/src/lisp.h  /^intern (const char *str)$/
 intern_c_string        c-src/emacs/src/lisp.h  /^intern_c_string (const char *str)$/
 internal_last_event_frame      c-src/emacs/src/keyboard.c      228
@@ -3615,9 +3580,7 @@ not_bol   c-src/emacs/src/regex.h 391
 not_eol        c-src/emacs/src/regex.h 394
 not_single_kboard_state        c-src/emacs/src/keyboard.c      /^not_single_kboard_state (KBOARD *kboard)$/
 notag2 c-src/torture.c 26
-notag2 c-src/dostorture.c      26
 notag4 c-src/torture.c 45
-notag4 c-src/dostorture.c      45
 notinname      c-src/etags.c   /^#define notinname(c)  (_nin[CHAR (c)]) \/* c is not /
 npending       c-src/emacs/src/keyboard.c      7244
 ntool_bar_items        c-src/emacs/src/keyboard.c      7974
@@ -3772,11 +3735,8 @@ post     pyt-src/server.py       /^    def post(self):$/
 post   pyt-src/server.py       /^    def post(self):$/
 pot_etags_version      c-src/etags.c   81
 pp1    c-src/torture.c /^int pp1($/
-pp1    c-src/dostorture.c      /^int pp1($/
 pp2    c-src/torture.c /^pp2$/
-pp2    c-src/dostorture.c      /^pp2$/
 pp3    c-src/torture.c /^pp3(int bar)$/
-pp3    c-src/dostorture.c      /^pp3(int bar)$/
 pp_bas_cat     prol-src/natded.prolog  /^pp_bas_cat(Cat):-$/
 pp_cat prol-src/natded.prolog  /^pp_cat(Syn:Sem):-$/
 pp_exp prol-src/natded.prolog  /^pp_exp('NIL'):-$/
@@ -3901,7 +3861,6 @@ regex     make-src/Makefile       216
 regex  make-src/Makefile       219
 regex_t        c-src/emacs/src/regex.h 416
 regex_tag_multiline    c-src/etags.c   /^regex_tag_multiline (void)$/
-regexfile      Makefile        /^regexfile: Makefile$/
 regexp c-src/etags.c   256
 regexp c-src/etags.c   268
 registerAction:        objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/
@@ -4053,7 +4012,6 @@ specbind_tag      c-src/emacs/src/lisp.h  2943
 specbinding    c-src/emacs/src/lisp.h  2955
 specialsymbol  prol-src/natded.prolog  /^specialsymbol(C1,C2,S):-$/
 splitexp       prol-src/natded.prolog  /^splitexp(E,E,('NIL','NIL')):-!.$/
-srclist        Makefile        /^srclist: Makefile$/
 ss3    c.c     255
 sss1   c.c     252
 sss2   c.c     253
@@ -4155,18 +4113,12 @@ tag-re-match-p  el-src/emacs/lisp/progmodes/etags.el    /^(defun tag-re-match-p (re)
 tag-symbol-match-p     el-src/emacs/lisp/progmodes/etags.el    /^(defun tag-symbol-match-p (tag)$/
 tag-word-match-p       el-src/emacs/lisp/progmodes/etags.el    /^(defun tag-word-match-p (tag)$/
 tag1   c-src/torture.c /^(*tag1 (sig, handler)) ()$/
-tag1   c-src/dostorture.c      /^(*tag1 (sig, handler)) ()$/
 tag1   c-src/h.h       110
 tag2   c-src/torture.c /^(*tag2 (sig, handler)) ()$/
-tag2   c-src/dostorture.c      /^(*tag2 (sig, handler)) ()$/
 tag3   c-src/torture.c /^(*tag3 (int sig, void (*handler) (int))) (int)$/
-tag3   c-src/dostorture.c      /^(*tag3 (int sig, void (*handler) (int))) (int)$/
 tag4   c-src/torture.c /^(*tag4 (int sig, void (*handler) (int))) (int)$/
-tag4   c-src/dostorture.c      /^(*tag4 (int sig, void (*handler) (int))) (int)$/
 tag5   c-src/torture.c /^tag5 (handler, arg)$/
-tag5   c-src/dostorture.c      /^tag5 (handler, arg)$/
 tag6   c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/
-tag6   c-src/dostorture.c      /^tag6 (void (*handler) (void *), void *arg)$/
 tag_or_ch      c-src/emacs/src/lisp.h  3026
 taggedfname    c-src/etags.c   207
 tags-add-tables        el-src/emacs/lisp/progmodes/etags.el    /^(defcustom tags-add-tables 'ask-user$/
@@ -4419,7 +4371,6 @@ xref-location-line        el-src/emacs/lisp/progmodes/etags.el    /^(cl-defmethod xref-loc
 xref-location-marker   el-src/emacs/lisp/progmodes/etags.el    /^(cl-defmethod xref-location-marker ((l xref-etags-/
 xref-make-etags-location       el-src/emacs/lisp/progmodes/etags.el    /^(defun xref-make-etags-location (tag-info file)$/
 xrnew  c-src/etags.c   /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/
-xx     Makefile        /^xx="this line is here because of a fontlock bug$/
 y-get-selection-internal       c.c     /^      Fy_get_selection_internal, Sy_get_selection_/
 yyalloc        /usr/share/bison/bison.simple   83
 yyalloc        /usr/share/bison/bison.simple   83
index 6762bf30b44e3e2307bc45e2479f5147e7b0848e..cabcd2c41a146afba75cc64d9f111e98d22bec16 100644 (file)
@@ -1,46 +1,4 @@
 \f
-Makefile,683
-ADASRC=\7f1,0
-ASRC=\7f2,91
-CSRC=\7f3,139
-CPSRC=\7f7,410
-ELSRC=\7f10,584
-ERLSRC=\7f11,654
-FORTHSRC=\7f12,699
-FSRC=\7f13,749
-HTMLSRC=\7f14,821
-LUASRC=\7f16,950
-MAKESRC=\7f17,993
-OBJCSRC=\7f18,1035
-OBJCPPSRC=\7f19,1116
-PASSRC=\7f20,1179
-PERLSRC=\7f21,1221
-PHPSRC=\7f22,1291
-PSSRC=\7f23,1363
-PROLSRC=\7f24,1403
-PYTSRC=\7f25,1465
-TEXSRC=\7f26,1506
-YSRC=\7f27,1585
-SRCS=\7f28,1650
-NONSRCS=\7f32,1902
-ETAGS_PROG=\7f34,1976
-CTAGS_PROG=\7f35,2007
-REGEX=\7f37,2039
-xx=\7f38,2085
-RUN=\7f40,2134
-OPTIONS=\7f42,2140
-ARGS=\7f43,2192
-infiles \7f45,2210
-check:\7fcheck\ 147,2272
-ediff%:\7fediff%\ 155,2575
-cdiff:\7fcdiff\ 158,2676
-ETAGS:\7fETAGS\ 161,2773
-CTAGS:\7fCTAGS\ 164,2843
-srclist:\7fsrclist\ 167,2921
-regexfile:\7fregexfile\ 171,3012
-.PRECIOUS:\7f.PRECIOUS\ 177,3189
-FRC:\7fFRC\ 179,3223
-\f
 ada-src/etags-test-for.ada,1969
    type LL_Task_Procedure_Access \7fLL_Task_Procedure_Access/t\ 11,0
    function Body_Required\7fBody_Required/f\ 13,78
@@ -621,19 +579,6 @@ char                       **tab_fill(\7ftab_fill\ 170,1129
 int                    tab_delete_first(\7f91,1638
 int                    tab_count_words(\7f103,1820
 \f
-c-src/dostorture.c,197
-(*tag1 \7ftag1\ 118,451
-#define notag2 \7f26,552
-(*tag2 \7ftag2\ 129,629
-(*tag3 \7ftag3\ 139,771
-#define notag4 \7f45,860
-(*tag4 \7ftag4\ 148,954
-tag5 \7f57,1080
-tag6 \7f66,1207
-int pp1(\7f74,1316
-pp2\7f87,1418
-pp3(\7f100,1517
-\f
 c-src/emacs/src/gmalloc.c,3539
 #define USE_PTHREAD\7f25,1002
 #undef get_current_dir_name\7f33,1126
@@ -2298,10 +2243,12 @@ f-src/entry.strange_suffix,172
      & intensity1(\7f577,12231
        character*(*) function foo(\7f579,12307
 \f
-f-src/entry.strange,103
-       ENTRY  MSGSEL \7f193,4382
-     & intensity1(\7f375,8135
-       character*(*) function foo(\7f377,8211
+f-src/entry.strange,172
+      LOGICAL FUNCTION PRTPKG \7f3,75
+       ENTRY  SETPRT \7f194,3866
+       ENTRY  MSGSEL \7f395,8478
+     & intensity1(\7f577,12231
+       character*(*) function foo(\7f579,12307
 \f
 forth-src/test-forth.fth,408
 : a-forth-word \7f20,301
@@ -2317,44 +2264,44 @@ constant (a-forth-constant\7f(a-forth-constant\ 138,628
 code assemby-code-word \7f43,685
 : a-forth-word \7f50,870
 \f
-html-src/softwarelibero.html,198
-Cos'è il software libero?\7f4,38
-Licenze d'uso di un programma\7flicenze\ 165,2474
-Sfatiamo alcuni miti\7f138,6064
-Il movimento open source\7foss\ 1191,7968
-Impatto pratico del software libero\7fimpatto\ 1231,9986
+html-src/softwarelibero.html,200
+Cos'è il software libero?\7f4,38
+Licenze d'uso di un programma\7flicenze\ 165,2500
+Sfatiamo alcuni miti\7f138,6118
+Il movimento open source\7foss\ 1191,8037
+Impatto pratico del software libero\7fimpatto\ 1231,10066
 \f
 html-src/index.shtml,104
 &nbsp;\7f8,281
-In evidenza\7f15,446
-Comunicati e iniziative\7f32,974
-Ultime notizie dall'associazione\7f63,2027
+In evidenza\7f15,447
+Comunicati e iniziative\7f32,976
+Ultime notizie dall'associazione\7f63,2030
 \f
 html-src/algrthms.html,467
-Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,276
-Description\7falgorithms\ 110,477
-Generating the Data\7fgenalgorithm\ 148,1953
-Convolutionally\7fconalgorithm\ 155,2463
-Next\7fstatetable\ 1262,11331
-Output\7foutputtable\ 1350,13571
-Mapping the Channel Symbols\7fmapping\ 1433,15786
-Adding Noise to the\7faddnoise\ 1439,16174
-Quantizing the Received\7fquantizing\ 1469,18637
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,271
+Description\7falgorithms\ 110,472
+Generating the Data\7fgenalgorithm\ 148,1948
+Convolutionally\7fconalgorithm\ 155,2458
+Next\7fstatetable\ 1262,11326
+Output\7foutputtable\ 1350,13566
+Mapping the Channel Symbols\7fmapping\ 1433,15781
+Adding Noise to the\7faddnoise\ 1439,16169
+Quantizing the Received\7fquantizing\ 1469,18632
 \f
-html-src/software.html,438
-Francesco Potortì Software Page\7f9,280
-Software that I wrote for supporting my research activity\7fsimulation\ 136,1400
-MTG\7fmtg\ 141,1484
-Fracas\7ffracas\ 165,2626
-GaliLEO\7fgalileo\ 1101,4234
-Leasqr\7fleasqr\ 1114,4679
-Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6067
-Etags\7fetags\ 1148,6182
-checkiso\7f161,6731
-cgrep\7f178,7549
-debian-bug.el\7fdebian-bug\ 1190,7981
-tcpdump\7f205,8566
-Links to interesting software\7flinks\ 1216,8893
+html-src/software.html,439
+Francesco Potortì Software Page\7f9,280
+Software that I wrote for supporting my research activity\7fsimulation\ 136,1398
+MTG\7fmtg\ 141,1482
+Fracas\7ffracas\ 165,2624
+GaliLEO\7fgalileo\ 1101,4232
+Leasqr\7fleasqr\ 1114,4677
+Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6065
+Etags\7fetags\ 1148,6180
+checkiso\7f161,6729
+cgrep\7f178,7547
+debian-bug.el\7fdebian-bug\ 1190,7979
+tcpdump\7f205,8564
+Links to interesting software\7flinks\ 1216,8891
 \f
 lua-src/allegro.lua,400
 local function get_layer_by_name \7f7,175
@@ -3730,7 +3677,7 @@ Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\7f
 \global\def={\7f=\ 13306,107486
 \def\normalbackslash{\7f\normalbackslash\ 13320,107868
 \f
-c-src//c.c,76
+c-src/c.c,76
 T f(\7f1,0
 }T i;\7f2,14
 void bar(\7f5,69
index 32b58d87984d3ecbaacab99aeec1cd8b311a03e4..5d4f7061e0a585f08f7fe9792a3876dcc8b4284f 100644 (file)
@@ -1,46 +1,4 @@
 \f
-Makefile,683
-ADASRC=\7f1,0
-ASRC=\7f2,91
-CSRC=\7f3,139
-CPSRC=\7f7,410
-ELSRC=\7f10,584
-ERLSRC=\7f11,654
-FORTHSRC=\7f12,699
-FSRC=\7f13,749
-HTMLSRC=\7f14,821
-LUASRC=\7f16,950
-MAKESRC=\7f17,993
-OBJCSRC=\7f18,1035
-OBJCPPSRC=\7f19,1116
-PASSRC=\7f20,1179
-PERLSRC=\7f21,1221
-PHPSRC=\7f22,1291
-PSSRC=\7f23,1363
-PROLSRC=\7f24,1403
-PYTSRC=\7f25,1465
-TEXSRC=\7f26,1506
-YSRC=\7f27,1585
-SRCS=\7f28,1650
-NONSRCS=\7f32,1902
-ETAGS_PROG=\7f34,1976
-CTAGS_PROG=\7f35,2007
-REGEX=\7f37,2039
-xx=\7f38,2085
-RUN=\7f40,2134
-OPTIONS=\7f42,2140
-ARGS=\7f43,2192
-infiles \7f45,2210
-check:\7fcheck\ 147,2272
-ediff%:\7fediff%\ 155,2575
-cdiff:\7fcdiff\ 158,2676
-ETAGS:\7fETAGS\ 161,2773
-CTAGS:\7fCTAGS\ 164,2843
-srclist:\7fsrclist\ 167,2921
-regexfile:\7fregexfile\ 171,3012
-.PRECIOUS:\7f.PRECIOUS\ 177,3189
-FRC:\7fFRC\ 179,3223
-\f
 ada-src/etags-test-for.ada,1969
    type LL_Task_Procedure_Access \7fLL_Task_Procedure_Access/t\ 11,0
    function Body_Required\7fBody_Required/f\ 13,78
@@ -688,19 +646,6 @@ char                       **tab_fill(\7ftab_fill\ 170,1129
 int                    tab_delete_first(\7f91,1638
 int                    tab_count_words(\7f103,1820
 \f
-c-src/dostorture.c,197
-(*tag1 \7ftag1\ 118,451
-#define notag2 \7f26,552
-(*tag2 \7ftag2\ 129,629
-(*tag3 \7ftag3\ 139,771
-#define notag4 \7f45,860
-(*tag4 \7ftag4\ 148,954
-tag5 \7f57,1080
-tag6 \7f66,1207
-int pp1(\7f74,1316
-pp2\7f87,1418
-pp3(\7f100,1517
-\f
 c-src/emacs/src/gmalloc.c,6643
 #define USE_PTHREAD\7f25,1002
 #undef get_current_dir_name\7f33,1126
@@ -2865,10 +2810,12 @@ f-src/entry.strange_suffix,172
      & intensity1(\7f577,12231
        character*(*) function foo(\7f579,12307
 \f
-f-src/entry.strange,103
-       ENTRY  MSGSEL \7f193,4382
-     & intensity1(\7f375,8135
-       character*(*) function foo(\7f377,8211
+f-src/entry.strange,172
+      LOGICAL FUNCTION PRTPKG \7f3,75
+       ENTRY  SETPRT \7f194,3866
+       ENTRY  MSGSEL \7f395,8478
+     & intensity1(\7f577,12231
+       character*(*) function foo(\7f579,12307
 \f
 forth-src/test-forth.fth,408
 : a-forth-word \7f20,301
@@ -2884,44 +2831,44 @@ constant (a-forth-constant\7f(a-forth-constant\ 138,628
 code assemby-code-word \7f43,685
 : a-forth-word \7f50,870
 \f
-html-src/softwarelibero.html,198
-Cos'è il software libero?\7f4,38
-Licenze d'uso di un programma\7flicenze\ 165,2474
-Sfatiamo alcuni miti\7f138,6064
-Il movimento open source\7foss\ 1191,7968
-Impatto pratico del software libero\7fimpatto\ 1231,9986
+html-src/softwarelibero.html,200
+Cos'è il software libero?\7f4,38
+Licenze d'uso di un programma\7flicenze\ 165,2500
+Sfatiamo alcuni miti\7f138,6118
+Il movimento open source\7foss\ 1191,8037
+Impatto pratico del software libero\7fimpatto\ 1231,10066
 \f
 html-src/index.shtml,104
 &nbsp;\7f8,281
-In evidenza\7f15,446
-Comunicati e iniziative\7f32,974
-Ultime notizie dall'associazione\7f63,2027
+In evidenza\7f15,447
+Comunicati e iniziative\7f32,976
+Ultime notizie dall'associazione\7f63,2030
 \f
 html-src/algrthms.html,467
-Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,276
-Description\7falgorithms\ 110,477
-Generating the Data\7fgenalgorithm\ 148,1953
-Convolutionally\7fconalgorithm\ 155,2463
-Next\7fstatetable\ 1262,11331
-Output\7foutputtable\ 1350,13571
-Mapping the Channel Symbols\7fmapping\ 1433,15786
-Adding Noise to the\7faddnoise\ 1439,16174
-Quantizing the Received\7fquantizing\ 1469,18637
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,271
+Description\7falgorithms\ 110,472
+Generating the Data\7fgenalgorithm\ 148,1948
+Convolutionally\7fconalgorithm\ 155,2458
+Next\7fstatetable\ 1262,11326
+Output\7foutputtable\ 1350,13566
+Mapping the Channel Symbols\7fmapping\ 1433,15781
+Adding Noise to the\7faddnoise\ 1439,16169
+Quantizing the Received\7fquantizing\ 1469,18632
 \f
-html-src/software.html,438
-Francesco Potortì Software Page\7f9,280
-Software that I wrote for supporting my research activity\7fsimulation\ 136,1400
-MTG\7fmtg\ 141,1484
-Fracas\7ffracas\ 165,2626
-GaliLEO\7fgalileo\ 1101,4234
-Leasqr\7fleasqr\ 1114,4679
-Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6067
-Etags\7fetags\ 1148,6182
-checkiso\7f161,6731
-cgrep\7f178,7549
-debian-bug.el\7fdebian-bug\ 1190,7981
-tcpdump\7f205,8566
-Links to interesting software\7flinks\ 1216,8893
+html-src/software.html,439
+Francesco Potortì Software Page\7f9,280
+Software that I wrote for supporting my research activity\7fsimulation\ 136,1398
+MTG\7fmtg\ 141,1482
+Fracas\7ffracas\ 165,2624
+GaliLEO\7fgalileo\ 1101,4232
+Leasqr\7fleasqr\ 1114,4677
+Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6065
+Etags\7fetags\ 1148,6180
+checkiso\7f161,6729
+cgrep\7f178,7547
+debian-bug.el\7fdebian-bug\ 1190,7979
+tcpdump\7f205,8564
+Links to interesting software\7flinks\ 1216,8891
 \f
 lua-src/allegro.lua,400
 local function get_layer_by_name \7f7,175
@@ -4299,7 +4246,7 @@ Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\7f
 \global\def={\7f=\ 13306,107486
 \def\normalbackslash{\7f\normalbackslash\ 13320,107868
 \f
-c-src//c.c,76
+c-src/c.c,76
 T f(\7f1,0
 }T i;\7f2,14
 void bar(\7f5,69
index 644ffe49df400d6b5f49a2b6cca3b9fb78cf4a8b..1d8e34ad3e7fdaafdbaa16db6dbe4ef15f3fe782 100644 (file)
@@ -1,46 +1,4 @@
 \f
-Makefile,683
-ADASRC=\7f1,0
-ASRC=\7f2,91
-CSRC=\7f3,139
-CPSRC=\7f7,410
-ELSRC=\7f10,584
-ERLSRC=\7f11,654
-FORTHSRC=\7f12,699
-FSRC=\7f13,749
-HTMLSRC=\7f14,821
-LUASRC=\7f16,950
-MAKESRC=\7f17,993
-OBJCSRC=\7f18,1035
-OBJCPPSRC=\7f19,1116
-PASSRC=\7f20,1179
-PERLSRC=\7f21,1221
-PHPSRC=\7f22,1291
-PSSRC=\7f23,1363
-PROLSRC=\7f24,1403
-PYTSRC=\7f25,1465
-TEXSRC=\7f26,1506
-YSRC=\7f27,1585
-SRCS=\7f28,1650
-NONSRCS=\7f32,1902
-ETAGS_PROG=\7f34,1976
-CTAGS_PROG=\7f35,2007
-REGEX=\7f37,2039
-xx=\7f38,2085
-RUN=\7f40,2134
-OPTIONS=\7f42,2140
-ARGS=\7f43,2192
-infiles \7f45,2210
-check:\7fcheck\ 147,2272
-ediff%:\7fediff%\ 155,2575
-cdiff:\7fcdiff\ 158,2676
-ETAGS:\7fETAGS\ 161,2773
-CTAGS:\7fCTAGS\ 164,2843
-srclist:\7fsrclist\ 167,2921
-regexfile:\7fregexfile\ 171,3012
-.PRECIOUS:\7f.PRECIOUS\ 177,3189
-FRC:\7fFRC\ 179,3223
-\f
 ada-src/etags-test-for.ada,1969
    type LL_Task_Procedure_Access \7fLL_Task_Procedure_Access/t\ 11,0
    function Body_Required\7fBody_Required/f\ 13,78
@@ -690,19 +648,6 @@ char                       **tab_fill(\7ftab_fill\ 170,1129
 int                    tab_delete_first(\7f91,1638
 int                    tab_count_words(\7f103,1820
 \f
-c-src/dostorture.c,197
-(*tag1 \7ftag1\ 118,451
-#define notag2 \7f26,552
-(*tag2 \7ftag2\ 129,629
-(*tag3 \7ftag3\ 139,771
-#define notag4 \7f45,860
-(*tag4 \7ftag4\ 148,954
-tag5 \7f57,1080
-tag6 \7f66,1207
-int pp1(\7f74,1316
-pp2\7f87,1418
-pp3(\7f100,1517
-\f
 c-src/emacs/src/gmalloc.c,4207
 #define USE_PTHREAD\7f25,1002
 #undef get_current_dir_name\7f33,1126
@@ -2615,10 +2560,12 @@ f-src/entry.strange_suffix,172
      & intensity1(\7f577,12231
        character*(*) function foo(\7f579,12307
 \f
-f-src/entry.strange,103
-       ENTRY  MSGSEL \7f193,4382
-     & intensity1(\7f375,8135
-       character*(*) function foo(\7f377,8211
+f-src/entry.strange,172
+      LOGICAL FUNCTION PRTPKG \7f3,75
+       ENTRY  SETPRT \7f194,3866
+       ENTRY  MSGSEL \7f395,8478
+     & intensity1(\7f577,12231
+       character*(*) function foo(\7f579,12307
 \f
 forth-src/test-forth.fth,408
 : a-forth-word \7f20,301
@@ -2634,44 +2581,44 @@ constant (a-forth-constant\7f(a-forth-constant\ 138,628
 code assemby-code-word \7f43,685
 : a-forth-word \7f50,870
 \f
-html-src/softwarelibero.html,198
-Cos'è il software libero?\7f4,38
-Licenze d'uso di un programma\7flicenze\ 165,2474
-Sfatiamo alcuni miti\7f138,6064
-Il movimento open source\7foss\ 1191,7968
-Impatto pratico del software libero\7fimpatto\ 1231,9986
+html-src/softwarelibero.html,200
+Cos'è il software libero?\7f4,38
+Licenze d'uso di un programma\7flicenze\ 165,2500
+Sfatiamo alcuni miti\7f138,6118
+Il movimento open source\7foss\ 1191,8037
+Impatto pratico del software libero\7fimpatto\ 1231,10066
 \f
 html-src/index.shtml,104
 &nbsp;\7f8,281
-In evidenza\7f15,446
-Comunicati e iniziative\7f32,974
-Ultime notizie dall'associazione\7f63,2027
+In evidenza\7f15,447
+Comunicati e iniziative\7f32,976
+Ultime notizie dall'associazione\7f63,2030
 \f
 html-src/algrthms.html,467
-Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,276
-Description\7falgorithms\ 110,477
-Generating the Data\7fgenalgorithm\ 148,1953
-Convolutionally\7fconalgorithm\ 155,2463
-Next\7fstatetable\ 1262,11331
-Output\7foutputtable\ 1350,13571
-Mapping the Channel Symbols\7fmapping\ 1433,15786
-Adding Noise to the\7faddnoise\ 1439,16174
-Quantizing the Received\7fquantizing\ 1469,18637
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,271
+Description\7falgorithms\ 110,472
+Generating the Data\7fgenalgorithm\ 148,1948
+Convolutionally\7fconalgorithm\ 155,2458
+Next\7fstatetable\ 1262,11326
+Output\7foutputtable\ 1350,13566
+Mapping the Channel Symbols\7fmapping\ 1433,15781
+Adding Noise to the\7faddnoise\ 1439,16169
+Quantizing the Received\7fquantizing\ 1469,18632
 \f
-html-src/software.html,438
-Francesco Potortì Software Page\7f9,280
-Software that I wrote for supporting my research activity\7fsimulation\ 136,1400
-MTG\7fmtg\ 141,1484
-Fracas\7ffracas\ 165,2626
-GaliLEO\7fgalileo\ 1101,4234
-Leasqr\7fleasqr\ 1114,4679
-Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6067
-Etags\7fetags\ 1148,6182
-checkiso\7f161,6731
-cgrep\7f178,7549
-debian-bug.el\7fdebian-bug\ 1190,7981
-tcpdump\7f205,8566
-Links to interesting software\7flinks\ 1216,8893
+html-src/software.html,439
+Francesco Potortì Software Page\7f9,280
+Software that I wrote for supporting my research activity\7fsimulation\ 136,1398
+MTG\7fmtg\ 141,1482
+Fracas\7ffracas\ 165,2624
+GaliLEO\7fgalileo\ 1101,4232
+Leasqr\7fleasqr\ 1114,4677
+Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6065
+Etags\7fetags\ 1148,6180
+checkiso\7f161,6729
+cgrep\7f178,7547
+debian-bug.el\7fdebian-bug\ 1190,7979
+tcpdump\7f205,8564
+Links to interesting software\7flinks\ 1216,8891
 \f
 lua-src/allegro.lua,400
 local function get_layer_by_name \7f7,175
@@ -4074,7 +4021,7 @@ Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\7f
 \global\def={\7f=\ 13306,107486
 \def\normalbackslash{\7f\normalbackslash\ 13320,107868
 \f
-c-src//c.c,76
+c-src/c.c,76
 T f(\7f1,0
 }T i;\7f2,14
 void bar(\7f5,69
index 5d31c366437c08b6679463d697e2157a7f681aba..30ea7dcb6f7a5bc3059f5a81af3d85c28665cc7d 100644 (file)
@@ -1,46 +1,4 @@
 \f
-Makefile,683
-ADASRC=\7f1,0
-ASRC=\7f2,91
-CSRC=\7f3,139
-CPSRC=\7f7,410
-ELSRC=\7f10,584
-ERLSRC=\7f11,654
-FORTHSRC=\7f12,699
-FSRC=\7f13,749
-HTMLSRC=\7f14,821
-LUASRC=\7f16,950
-MAKESRC=\7f17,993
-OBJCSRC=\7f18,1035
-OBJCPPSRC=\7f19,1116
-PASSRC=\7f20,1179
-PERLSRC=\7f21,1221
-PHPSRC=\7f22,1291
-PSSRC=\7f23,1363
-PROLSRC=\7f24,1403
-PYTSRC=\7f25,1465
-TEXSRC=\7f26,1506
-YSRC=\7f27,1585
-SRCS=\7f28,1650
-NONSRCS=\7f32,1902
-ETAGS_PROG=\7f34,1976
-CTAGS_PROG=\7f35,2007
-REGEX=\7f37,2039
-xx=\7f38,2085
-RUN=\7f40,2134
-OPTIONS=\7f42,2140
-ARGS=\7f43,2192
-infiles \7f45,2210
-check:\7fcheck\ 147,2272
-ediff%:\7fediff%\ 155,2575
-cdiff:\7fcdiff\ 158,2676
-ETAGS:\7fETAGS\ 161,2773
-CTAGS:\7fCTAGS\ 164,2843
-srclist:\7fsrclist\ 167,2921
-regexfile:\7fregexfile\ 171,3012
-.PRECIOUS:\7f.PRECIOUS\ 177,3189
-FRC:\7fFRC\ 179,3223
-\f
 ada-src/etags-test-for.ada,1969
    type LL_Task_Procedure_Access \7fLL_Task_Procedure_Access/t\ 11,0
    function Body_Required\7fBody_Required/f\ 13,78
@@ -645,19 +603,6 @@ char                       **tab_fill(\7ftab_fill\ 170,1129
 int                    tab_delete_first(\7f91,1638
 int                    tab_count_words(\7f103,1820
 \f
-c-src/dostorture.c,197
-(*tag1 \7ftag1\ 118,451
-#define notag2 \7f26,552
-(*tag2 \7ftag2\ 129,629
-(*tag3 \7ftag3\ 139,771
-#define notag4 \7f45,860
-(*tag4 \7ftag4\ 148,954
-tag5 \7f57,1080
-tag6 \7f66,1207
-int pp1(\7f74,1316
-pp2\7f87,1418
-pp3(\7f100,1517
-\f
 c-src/emacs/src/gmalloc.c,3539
 #define USE_PTHREAD\7f25,1002
 #undef get_current_dir_name\7f33,1126
@@ -2462,10 +2407,12 @@ f-src/entry.strange_suffix,172
      & intensity1(\7f577,12231
        character*(*) function foo(\7f579,12307
 \f
-f-src/entry.strange,103
-       ENTRY  MSGSEL \7f193,4382
-     & intensity1(\7f375,8135
-       character*(*) function foo(\7f377,8211
+f-src/entry.strange,172
+      LOGICAL FUNCTION PRTPKG \7f3,75
+       ENTRY  SETPRT \7f194,3866
+       ENTRY  MSGSEL \7f395,8478
+     & intensity1(\7f577,12231
+       character*(*) function foo(\7f579,12307
 \f
 forth-src/test-forth.fth,408
 : a-forth-word \7f20,301
@@ -2481,44 +2428,44 @@ constant (a-forth-constant\7f(a-forth-constant\ 138,628
 code assemby-code-word \7f43,685
 : a-forth-word \7f50,870
 \f
-html-src/softwarelibero.html,198
-Cos'è il software libero?\7f4,38
-Licenze d'uso di un programma\7flicenze\ 165,2474
-Sfatiamo alcuni miti\7f138,6064
-Il movimento open source\7foss\ 1191,7968
-Impatto pratico del software libero\7fimpatto\ 1231,9986
+html-src/softwarelibero.html,200
+Cos'è il software libero?\7f4,38
+Licenze d'uso di un programma\7flicenze\ 165,2500
+Sfatiamo alcuni miti\7f138,6118
+Il movimento open source\7foss\ 1191,8037
+Impatto pratico del software libero\7fimpatto\ 1231,10066
 \f
 html-src/index.shtml,104
 &nbsp;\7f8,281
-In evidenza\7f15,446
-Comunicati e iniziative\7f32,974
-Ultime notizie dall'associazione\7f63,2027
+In evidenza\7f15,447
+Comunicati e iniziative\7f32,976
+Ultime notizie dall'associazione\7f63,2030
 \f
 html-src/algrthms.html,467
-Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,276
-Description\7falgorithms\ 110,477
-Generating the Data\7fgenalgorithm\ 148,1953
-Convolutionally\7fconalgorithm\ 155,2463
-Next\7fstatetable\ 1262,11331
-Output\7foutputtable\ 1350,13571
-Mapping the Channel Symbols\7fmapping\ 1433,15786
-Adding Noise to the\7faddnoise\ 1439,16174
-Quantizing the Received\7fquantizing\ 1469,18637
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,271
+Description\7falgorithms\ 110,472
+Generating the Data\7fgenalgorithm\ 148,1948
+Convolutionally\7fconalgorithm\ 155,2458
+Next\7fstatetable\ 1262,11326
+Output\7foutputtable\ 1350,13566
+Mapping the Channel Symbols\7fmapping\ 1433,15781
+Adding Noise to the\7faddnoise\ 1439,16169
+Quantizing the Received\7fquantizing\ 1469,18632
 \f
-html-src/software.html,438
-Francesco Potortì Software Page\7f9,280
-Software that I wrote for supporting my research activity\7fsimulation\ 136,1400
-MTG\7fmtg\ 141,1484
-Fracas\7ffracas\ 165,2626
-GaliLEO\7fgalileo\ 1101,4234
-Leasqr\7fleasqr\ 1114,4679
-Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6067
-Etags\7fetags\ 1148,6182
-checkiso\7f161,6731
-cgrep\7f178,7549
-debian-bug.el\7fdebian-bug\ 1190,7981
-tcpdump\7f205,8566
-Links to interesting software\7flinks\ 1216,8893
+html-src/software.html,439
+Francesco Potortì Software Page\7f9,280
+Software that I wrote for supporting my research activity\7fsimulation\ 136,1398
+MTG\7fmtg\ 141,1482
+Fracas\7ffracas\ 165,2624
+GaliLEO\7fgalileo\ 1101,4232
+Leasqr\7fleasqr\ 1114,4677
+Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6065
+Etags\7fetags\ 1148,6180
+checkiso\7f161,6729
+cgrep\7f178,7547
+debian-bug.el\7fdebian-bug\ 1190,7979
+tcpdump\7f205,8564
+Links to interesting software\7flinks\ 1216,8891
 \f
 lua-src/allegro.lua,400
 local function get_layer_by_name \7f7,175
@@ -3894,7 +3841,7 @@ Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\7f
 \global\def={\7f=\ 13306,107486
 \def\normalbackslash{\7f\normalbackslash\ 13320,107868
 \f
-c-src//c.c,76
+c-src/c.c,76
 T f(\7f1,0
 }T i;\7f2,14
 void bar(\7f5,69
index c7357d083f50eac641c1797c836a23f5a57b6994..dfa261b44fb59eedfabf98ec6daf553954643222 100644 (file)
@@ -1,46 +1,4 @@
 \f
-Makefile,683
-ADASRC=\7f1,0
-ASRC=\7f2,91
-CSRC=\7f3,139
-CPSRC=\7f7,410
-ELSRC=\7f10,584
-ERLSRC=\7f11,654
-FORTHSRC=\7f12,699
-FSRC=\7f13,749
-HTMLSRC=\7f14,821
-LUASRC=\7f16,950
-MAKESRC=\7f17,993
-OBJCSRC=\7f18,1035
-OBJCPPSRC=\7f19,1116
-PASSRC=\7f20,1179
-PERLSRC=\7f21,1221
-PHPSRC=\7f22,1291
-PSSRC=\7f23,1363
-PROLSRC=\7f24,1403
-PYTSRC=\7f25,1465
-TEXSRC=\7f26,1506
-YSRC=\7f27,1585
-SRCS=\7f28,1650
-NONSRCS=\7f32,1902
-ETAGS_PROG=\7f34,1976
-CTAGS_PROG=\7f35,2007
-REGEX=\7f37,2039
-xx=\7f38,2085
-RUN=\7f40,2134
-OPTIONS=\7f42,2140
-ARGS=\7f43,2192
-infiles \7f45,2210
-check:\7fcheck\ 147,2272
-ediff%:\7fediff%\ 155,2575
-cdiff:\7fcdiff\ 158,2676
-ETAGS:\7fETAGS\ 161,2773
-CTAGS:\7fCTAGS\ 164,2843
-srclist:\7fsrclist\ 167,2921
-regexfile:\7fregexfile\ 171,3012
-.PRECIOUS:\7f.PRECIOUS\ 177,3189
-FRC:\7fFRC\ 179,3223
-\f
 ada-src/etags-test-for.ada,1969
    type LL_Task_Procedure_Access \7fLL_Task_Procedure_Access/t\ 11,0
    function Body_Required\7fBody_Required/f\ 13,78
@@ -781,19 +739,6 @@ char                       **tab_fill(\7ftab_fill\ 170,1129
 int                    tab_delete_first(\7f91,1638
 int                    tab_count_words(\7f103,1820
 \f
-c-src/dostorture.c,197
-(*tag1 \7ftag1\ 118,451
-#define notag2 \7f26,552
-(*tag2 \7ftag2\ 129,629
-(*tag3 \7ftag3\ 139,771
-#define notag4 \7f45,860
-(*tag4 \7ftag4\ 148,954
-tag5 \7f57,1080
-tag6 \7f66,1207
-int pp1(\7f74,1316
-pp2\7f87,1418
-pp3(\7f100,1517
-\f
 c-src/emacs/src/gmalloc.c,7311
 #define USE_PTHREAD\7f25,1002
 #undef get_current_dir_name\7f33,1126
@@ -3346,10 +3291,12 @@ f-src/entry.strange_suffix,172
      & intensity1(\7f577,12231
        character*(*) function foo(\7f579,12307
 \f
-f-src/entry.strange,103
-       ENTRY  MSGSEL \7f193,4382
-     & intensity1(\7f375,8135
-       character*(*) function foo(\7f377,8211
+f-src/entry.strange,172
+      LOGICAL FUNCTION PRTPKG \7f3,75
+       ENTRY  SETPRT \7f194,3866
+       ENTRY  MSGSEL \7f395,8478
+     & intensity1(\7f577,12231
+       character*(*) function foo(\7f579,12307
 \f
 forth-src/test-forth.fth,408
 : a-forth-word \7f20,301
@@ -3365,44 +3312,44 @@ constant (a-forth-constant\7f(a-forth-constant\ 138,628
 code assemby-code-word \7f43,685
 : a-forth-word \7f50,870
 \f
-html-src/softwarelibero.html,198
-Cos'è il software libero?\7f4,38
-Licenze d'uso di un programma\7flicenze\ 165,2474
-Sfatiamo alcuni miti\7f138,6064
-Il movimento open source\7foss\ 1191,7968
-Impatto pratico del software libero\7fimpatto\ 1231,9986
+html-src/softwarelibero.html,200
+Cos'è il software libero?\7f4,38
+Licenze d'uso di un programma\7flicenze\ 165,2500
+Sfatiamo alcuni miti\7f138,6118
+Il movimento open source\7foss\ 1191,8037
+Impatto pratico del software libero\7fimpatto\ 1231,10066
 \f
 html-src/index.shtml,104
 &nbsp;\7f8,281
-In evidenza\7f15,446
-Comunicati e iniziative\7f32,974
-Ultime notizie dall'associazione\7f63,2027
+In evidenza\7f15,447
+Comunicati e iniziative\7f32,976
+Ultime notizie dall'associazione\7f63,2030
 \f
 html-src/algrthms.html,467
-Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,276
-Description\7falgorithms\ 110,477
-Generating the Data\7fgenalgorithm\ 148,1953
-Convolutionally\7fconalgorithm\ 155,2463
-Next\7fstatetable\ 1262,11331
-Output\7foutputtable\ 1350,13571
-Mapping the Channel Symbols\7fmapping\ 1433,15786
-Adding Noise to the\7faddnoise\ 1439,16174
-Quantizing the Received\7fquantizing\ 1469,18637
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms\7f7,271
+Description\7falgorithms\ 110,472
+Generating the Data\7fgenalgorithm\ 148,1948
+Convolutionally\7fconalgorithm\ 155,2458
+Next\7fstatetable\ 1262,11326
+Output\7foutputtable\ 1350,13566
+Mapping the Channel Symbols\7fmapping\ 1433,15781
+Adding Noise to the\7faddnoise\ 1439,16169
+Quantizing the Received\7fquantizing\ 1469,18632
 \f
-html-src/software.html,438
-Francesco Potortì Software Page\7f9,280
-Software that I wrote for supporting my research activity\7fsimulation\ 136,1400
-MTG\7fmtg\ 141,1484
-Fracas\7ffracas\ 165,2626
-GaliLEO\7fgalileo\ 1101,4234
-Leasqr\7fleasqr\ 1114,4679
-Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6067
-Etags\7fetags\ 1148,6182
-checkiso\7f161,6731
-cgrep\7f178,7549
-debian-bug.el\7fdebian-bug\ 1190,7981
-tcpdump\7f205,8566
-Links to interesting software\7flinks\ 1216,8893
+html-src/software.html,439
+Francesco Potortì Software Page\7f9,280
+Software that I wrote for supporting my research activity\7fsimulation\ 136,1398
+MTG\7fmtg\ 141,1482
+Fracas\7ffracas\ 165,2624
+GaliLEO\7fgalileo\ 1101,4232
+Leasqr\7fleasqr\ 1114,4677
+Free software that I wrote for the GNU project or for my personal or work\7fgnu\ 1142,6065
+Etags\7fetags\ 1148,6180
+checkiso\7f161,6729
+cgrep\7f178,7547
+debian-bug.el\7fdebian-bug\ 1190,7979
+tcpdump\7f205,8564
+Links to interesting software\7flinks\ 1216,8891
 \f
 lua-src/allegro.lua,400
 local function get_layer_by_name \7f7,175
@@ -4807,7 +4754,7 @@ Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %\7f
 \global\def={\7f=\ 13306,107486
 \def\normalbackslash{\7f\normalbackslash\ 13320,107868
 \f
-c-src//c.c,76
+c-src/c.c,76
 T f(\7f1,0
 }T i;\7f2,14
 void bar(\7f5,69
index a0914e45204505c62b9016d303bb51876d5f97ff..99ad41ebaab38e0c6b2e856648409858e6163130 100644 (file)
@@ -1,7 +1,7 @@
 ADASRC=$(addprefix ./ada-src/,etags-test-for.ada 2ataspri.adb 2ataspri.ads waroquiers.ada)
 ASRC=$(addprefix ./a-src/,empty.zz empty.zz.gz)
 CSRC=$(addprefix ./c-src/,abbrev.c .//c.c torture.c getopt.h etags.c\
- exit.c exit.strange_suffix sysdep.h tab.c dostorture.c\
+ exit.c exit.strange_suffix sysdep.h tab.c\
  emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c emacs/src/lisp.h\
  machsyscalls.c machsyscalls.h fail.c a/b/b.c) ../etags/c-src/h.h
 CPSRC=$(addprefix ./cp-src/,c.C burton.cpp burton.cpp\
@@ -25,7 +25,7 @@ PROLSRC=$(addprefix ./prol-src/,ordsets.prolog natded.prolog)
 PYTSRC=$(addprefix ./pyt-src/,server.py)
 TEXSRC=$(addprefix ./tex-src/,testenv.tex gzip.texi texinfo.tex nonewline.tex)
 YSRC=$(addprefix ./y-src/,parse.y parse.c atest.y cccp.c cccp.y)
-SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
+SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
      ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
      ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
      ${TEXSRC} ${YSRC}
@@ -44,6 +44,9 @@ ARGS=- < srclist
 
 infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile
 
+.PHONY: check cdiff ETAGS CTAGS
+# Can't make ediff_1 through ediff_5 .PHONY, as they're implicit.
+
 check:
        @$(MAKE) OPTIONS='--no-members' ediff_1
        @$(MAKE) OPTIONS='--declarations --no-members' ediff_2
@@ -58,10 +61,10 @@ ediff%: ETAGS.good% ETAGS ${infiles}
 cdiff: CTAGS.good CTAGS ${infiles}
        diff -u --suppress-common-lines --width=80 CTAGS.good CTAGS
 
-ETAGS: FRC ${infiles}
+ETAGS: ${infiles}
        ${RUN} ${ETAGS_PROG} ${OPTIONS} -o $@ ${ARGS}
 
-CTAGS: FRC ${infiles}
+CTAGS: ${infiles}
        ${RUN} ${CTAGS_PROG} -o $@ --regex=@regexfile ${ARGS}
 
 srclist: Makefile
@@ -70,10 +73,6 @@ srclist: Makefile
 
 regexfile: Makefile
        @echo ' -- This is for GNU Emacs source files' > regexfile
-       @echo '${REGEX}' >> regexfile
-       @echo '{c}${REGEX}\\1/m' >> regexfile
+       @printf '%s\n' '${REGEX}' >> regexfile
+       @printf '%s\n' '{c}${REGEX}\\1/m' >> regexfile
        @echo "regexfile remade"
-
-.PRECIOUS: ETAGS.good CTAGS.good
-
-FRC:;
diff --git a/test/etags/c-src/dostorture.c b/test/etags/c-src/dostorture.c
deleted file mode 100644 (file)
index 5190734..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Date: Thu, 05 Aug 1993 20:28:03 +0200\r
-   From: "Tom R.Hageman" <tom@basil.icce.rug.nl>\r
-   Subject: more etags torture;-) [etags 7.3 patch#3]\r
-   To: pot@CNUCE.CNR.IT\r
-\r
-   Hi,\r
-\r
-   This test file illustrates some more problems with etags (7.3):\r
-\r
-\r
-   1. parentheses are confusing,\r
-   2. preprocessor directives can disrupt other state machines. */\r
-\r
-/* A small torture test for etags. */\r
-\r
-/* The classic parenthesis nightmare, based on signal(). */\r
-void\r
-(*tag1 (sig, handler)) ()\r
-  int sig;\r
-  void (*handler) ();\r
-{\r
-  (*handler)(sig);\r
-  return handler;\r
-}\r
-\r
-#define notag2 void\r
-/* The classic, with user-defined return type. */\r
-notag2\r
-(*tag2 (sig, handler)) ()\r
-  int sig;\r
-  void (*handler) ();\r
-{\r
-  (*handler)(sig);\r
-  return handler;\r
-}\r
-\r
-/* The classic, in ANSI C style. */\r
-void\r
-(*tag3 (int sig, void (*handler) (int))) (int)\r
-{\r
-  (*handler)(sig);\r
-  return handler;\r
-}\r
-\r
-#define notag4 void\r
-/* The classic, with user-defined return type, in ANSI C style. */\r
-notag4\r
-(*tag4 (int sig, void (*handler) (int))) (int)\r
-{\r
-  (*handler)(sig);\r
-  return handler;\r
-}\r
-\r
-\r
-/* A less tortuous example. */\r
-void\r
-tag5 (handler, arg)\r
-void (*handler)();\r
-void *arg;\r
-{\r
-  (*handler)(arg);\r
-}\r
-\r
-/* A less tortuous example, in ANSI C style. */\r
-void\r
-tag6 (void (*handler) (void *), void *arg)\r
-{\r
-  (*handler)(arg);\r
-}\r
-\r
-\r
-/* Interfering preprocessing torture */\r
-\r
-int pp1(\r
-#if (__STDC__)\r
-       int\r
-#endif\r
-       bar)\r
-#if (!__STDC__)\r
-     int bar;\r
-#endif\r
-{\r
-  return bar;\r
-}\r
-\r
-int\r
-pp2\r
-#if __STDC__\r
-  (int bar)\r
-#else\r
-  (bar)\r
-    int bar;\r
-#endif\r
-{\r
-  return bar;\r
-}\r
-\r
-int\r
-#if __STDC__\r
-pp3(int bar)\r
-#else\r
-pp3(bar)\r
-  int bar;\r
-#endif\r
-{\r
-  return bar;\r
-}\r
index 2c5f7e01fac374b4e6dcb4ee83381e0eb87e46a1..dae933a9a054af838498003e2717346458c5131b 100644 (file)
@@ -51,7 +51,7 @@ int A<int>::f(A<int>* x) {}
 A<float,B<int> > A<B<float>,int>::f(A<int>* x) {}
 template <class C, int n> class AT { C t[n]; };
 class AU { T x; };
-class B<int> { void f() {} };\r
+class B<int> { void f() {} };
 const A::B::T& abt = abc;
 class A { class B { int f(); }; };
 class A {
index 322dafa5054b5c1b0b2cca3974cd47ade7331a21..f051505263c2ade0c7760325d6aa829111c52b59 100644 (file)
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">\r
-<html>\r
-<head>\r
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\r
-   <meta name="Author" content="Chip Fleming">\r
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (Win95; U) [Netscape]">\r
-   <title>Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms</title>\r
-</head>\r
-<body>\r
-<a NAME="algorithms"></a><b><font face="Arial"><font size=+1>Description\r
-of the Algorithms&nbsp; (Part 1)</font></font></b>\r
-<p>&nbsp;The steps involved in simulating a communication channel using\r
-convolutional encoding and Viterbi decoding are as follows:\r
-<ul>\r
-<li>\r
-<a href="#genalgorithm">Generate the data</a> to be transmitted through\r
-the channel-result is binary data bits</li>\r
-\r
-<li>\r
-<a href="#conalgorithm">Convolutionally encode</a> the data-result is channel\r
-symbols</li>\r
-\r
-<li>\r
-<a href="#mapping">Map the one/zero channel symbols</a> onto an antipodal\r
-baseband signal, producing transmitted channel symbols</li>\r
-\r
-<li>\r
-<a href="#addnoise">Add noise</a> to the transmitted channel symbols-result\r
-is received channel symbols</li>\r
-\r
-<li>\r
-<a href="#quantizing">Quantize</a> the received channel levels-one bit\r
-quantization is called hard-decision, and two to n bit quantization is\r
-called soft-decision (n is usually three or four)</li>\r
-\r
-<li>\r
-<a href="algrthms2.html">Perform Viterbi decoding</a> on the quantized\r
-received channel symbols-result is again binary data bits</li>\r
-\r
-<li>\r
-Compare the decoded data bits to the transmitted data bits and count the\r
-number of errors.</li>\r
-</ul>\r
-<i>Many of you will notice that I left out the steps of modulating the\r
-channel symbols onto a transmitted carrier, and then demodulating the received\r
-carrier to recover the channel symbols. You're right, but we can accurately\r
-model the effects of AWGN even though we bypass those steps.</i>\r
-<p><a NAME="genalgorithm"></a><b><i><font face="Arial">Generating the Data</font></i></b>\r
-<p>Generating the data to be transmitted through the channel can be accomplished\r
-quite simply by using a random number generator. One that produces a uniform\r
-distribution of numbers on the interval 0 to a maximum value is provided\r
-in C: <tt>rand ()</tt>. Using this function, we can say that any value\r
-less than half of the maximum value is a zero; any value greater than or\r
-equal to half of the maximum value is a one.\r
-<p><a NAME="conalgorithm"></a><b><i><font face="Arial">Convolutionally\r
-Encoding the Data</font></i></b>\r
-<p>Convolutionally encoding the data is accomplished using a shift register\r
-and associated combinatorial logic that performs modulo-two addition. (A\r
-shift register is merely a chain of flip-flops wherein the output of the\r
-nth flip-flop is tied to the input of the (n+1)th flip-flop. Every time\r
-the active edge of the clock occurs, the input to the flip-flop is clocked\r
-through to the output, and thus the data are shifted over one stage.) The\r
-combinatorial logic is often in the form of cascaded exclusive-or gates.\r
-As a reminder, exclusive-or gates are two-input, one-output gates often\r
-represented by the logic symbol shown below,\r
-<center>\r
-<p><img SRC="figs/xor_gate.gif" ALT="exclusive-or gate symbol" height=64 width=93></center>\r
-\r
-<p>that implement the following truth-table:\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<center><table BORDER CELLPADDING=7 WIDTH="218" >\r
-<tr>\r
-<td VALIGN=TOP WIDTH="28%">\r
-<center><b><tt>Input A</tt></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="27%">\r
-<center><b><tt>Input B</tt></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="45%">\r
-<center><b><tt>Output</tt></b>\r
-<p><b><tt>(A xor B)</tt></b></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="28%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="27%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="45%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="28%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="27%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="45%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="28%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="27%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="45%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="28%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="27%">\r
-<center><tt>1</tt></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="45%">\r
-<center><tt>0</tt></center>\r
-</td>\r
-</tr>\r
-</table></center>\r
-\r
-<p>The exclusive-or gate performs modulo-two addition of its inputs. When\r
-you cascade q two-input exclusive-or gates, with the output of the first\r
-one feeding one of the inputs of the second one, the output of the second\r
-one feeding one of the inputs of the third one, etc., the output of the\r
-last one in the chain is the modulo-two sum of the q + 1 inputs.\r
-<p>Another way to illustrate the modulo-two adder, and the way that is\r
-most commonly used in textbooks, is as a circle with a + symbol inside,\r
-thus:\r
-<center>\r
-<p><img SRC="figs/ringsum.gif" ALT="modulo-two adder symbol" height=48 width=48></center>\r
-\r
-<p>Now that we have the two basic components of the convolutional encoder\r
-(flip-flops comprising the shift register and exclusive-or gates comprising\r
-the associated modulo-two adders) defined, let's look at a picture of a\r
-convolutional encoder for a rate 1/2, K = 3, m = 2 code:\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<br>\r
-<center>\r
-<p><img SRC="figs/ce_7_5_a.gif" ALT="rate 1/2 K = 3 (7, 5) convolutional encoder" height=232 width=600></center>\r
-\r
-<p>In this encoder, data bits are provided at a rate of k bits per second.\r
-Channel symbols are output at a rate of n = 2k symbols per second. The\r
-input bit is stable during the encoder cycle. The encoder cycle starts\r
-when an input clock edge occurs. When the input clock edge occurs, the\r
-output of the left-hand flip-flop is clocked into the right-hand flip-flop,\r
-the previous input bit is clocked into the left-hand flip-flop, and a new\r
-input bit becomes available. Then the outputs of the upper and lower modulo-two\r
-adders become stable. The output selector (SEL A/B block) cycles through\r
-two states-in the first state, it selects and outputs the output of the\r
-upper modulo-two adder; in the second state, it selects and outputs the\r
-output of the lower modulo-two adder.\r
-<p>The encoder shown above encodes the K = 3, (7, 5) convolutional code.\r
-The octal numbers 7 and 5 represent the code generator polynomials, which\r
-when read in binary (111<sub>2</sub> and 101<sub>2</sub>) correspond to\r
-the shift register connections to the upper and lower modulo-two adders,\r
-respectively. This code has been determined to be the "best" code for rate\r
-1/2, K = 3. It is the code I will use for the remaining discussion and\r
-examples, for reasons that will become readily apparent when we get into\r
-the Viterbi decoder algorithm.\r
-<p>Let's look at an example input data stream, and the corresponding output\r
-data stream:\r
-<p>Let the input sequence be 010111001010001<sub>2</sub>.\r
-<p>Assume that the outputs of both of the flip-flops in the shift register\r
-are initially cleared, i.e. their outputs are zeroes. The first clock cycle\r
-makes the first input bit, a zero, available to the encoder. The flip-flop\r
-outputs are both zeroes. The inputs to the modulo-two adders are all zeroes,\r
-so the output of the encoder is 00<sub>2</sub>.\r
-<p>The second clock cycle makes the second input bit available to the encoder.\r
-The left-hand flip-flop clocks in the previous bit, which was a zero, and\r
-the right-hand flip-flop clocks in the zero output by the left-hand flip-flop.\r
-The inputs to the top modulo-two adder are 100<sub>2</sub>, so the output\r
-is a one. The inputs to the bottom modulo-two adder are 10<sub>2</sub>,\r
-so the output is also a one. So the encoder outputs 11<sub>2</sub> for\r
-the channel symbols.\r
-<p>The third clock cycle makes the third input bit, a zero, available to\r
-the encoder. The left-hand flip-flop clocks in the previous bit, which\r
-was a one, and the right-hand flip-flop clocks in the zero from two bit-times\r
-ago. The inputs to the top modulo-two adder are 010<sub>2</sub>, so the\r
-output is a one. The inputs to the bottom modulo-two adder are 00<sub>2</sub>,\r
-so the output is zero. So the encoder outputs 10<sub>2</sub> for the channel\r
-symbols.\r
-<p>And so on. The timing diagram shown below illustrates the process:\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<br>\r
-<center>\r
-<p><img SRC="figs/ce_td.gif" ALT="timing diagram for rate 1/2 convolutional encoder" height=322 width=600></center>\r
-\r
-<p><br>\r
-<br>\r
-<br>\r
-<p>After all of the inputs have been presented to the encoder, the output\r
-sequence will be:\r
-<p>00 11 10 00 01 10 01 11 11 10 00 10 11 00 11<sub>2</sub>.\r
-<p>Notice that I have paired the encoder outputs-the first bit in each\r
-pair is the output of the upper modulo-two adder; the second bit in each\r
-pair is the output of the lower modulo-two adder.\r
-<p>You can see from the structure of the rate 1/2 K = 3 convolutional encoder\r
-and from the example given above that each input bit has an effect on three\r
-successive pairs of output symbols. That is an extremely important point\r
-and that is what gives the convolutional code its error-correcting power.\r
-The reason why will become evident when we get into the Viterbi decoder\r
-algorithm.\r
-<p>Now if we are only going to send the 15 data bits given above, in order\r
-for the last bit to affect three pairs of output symbols, we need to output\r
-two more pairs of symbols. This is accomplished in our example encoder\r
-by clocking the convolutional encoder flip-flops two ( = m) more times,\r
-while holding the input at zero. This is called "flushing" the encoder,\r
-and results in two more pairs of output symbols. The final binary output\r
-of the encoder is thus 00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10\r
-11<sub>2</sub>. If we don't perform the flushing operation, the last m\r
-bits of the message have less error-correction capability than the first\r
-through (m - 1)th bits had. This is a pretty important thing to remember\r
-if you're going to use this FEC technique in a burst-mode environment.\r
-So's the step of clearing the shift register at the beginning of each burst.\r
-The encoder must start in a known state and end in a known state for the\r
-decoder to be able to reconstruct the input data sequence properly.\r
-<p>Now, let's look at the encoder from another perspective. You can think\r
-of the encoder as a simple state machine. The example encoder has two bits\r
-of memory, so there are four possible states. Let's give the left-hand\r
-flip-flop a binary weight of 2<sup>1</sup>, and the right-hand flip-flop\r
-a binary weight of 2<sup>0</sup>. Initially, the encoder is in the all-zeroes\r
-state. If the first input bit is a zero, the encoder stays in the all zeroes\r
-state at the next clock edge. But if the input bit is a one, the encoder\r
-transitions to the 10<sub>2</sub> state at the next clock edge. Then, if\r
-the next input bit is zero, the encoder transitions to the 01<sub>2</sub>\r
-state, otherwise, it transitions to the 11<sub>2</sub> state. The following\r
-table gives the next state given the current state and the input, with\r
-the states given in binary:\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%"><font face="Arial"><font size=-1>&nbsp;</font></font></td>\r
-\r
-<td VALIGN=TOP COLSPAN="2" WIDTH="67%">\r
-<center><a NAME="statetable"></a><b><font face="Arial"><font size=-1>Next\r
-State, if&nbsp;</font></font></b></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Current State</font></font></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Input = 0:</font></font></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Input = 1:</font></font></b></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-</tr>\r
-</table></center>\r
-\r
-<br>&nbsp;\r
-<p>The above table is often called a state transition table. We'll refer\r
-to it as the <tt>next state</tt> table.<tt> </tt>Now let us look at a table\r
-that lists the channel output symbols, given the current state and the\r
-input data, which we'll refer to as the <tt>output</tt> table:\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%"></td>\r
-\r
-<td VALIGN=TOP COLSPAN="2" WIDTH="67%">\r
-<center><a NAME="outputtable"></a><b><font face="Arial"><font size=-1>Output\r
-Symbols, if</font></font></b></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Current State</font></font></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Input = 0:</font></font></b></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><b><font face="Arial"><font size=-1>Input = 1:</font></font></b></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>00</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-</tr>\r
-\r
-<tr>\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>11</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>01</font></font></center>\r
-</td>\r
-\r
-<td VALIGN=TOP WIDTH="33%">\r
-<center><font face="Arial"><font size=-1>10</font></font></center>\r
-</td>\r
-</tr>\r
-</table></center>\r
-\r
-<br>&nbsp;\r
-<p>You should now see that with these two tables, you can completely describe\r
-the behavior of the example rate 1/2, K = 3 convolutional encoder. Note\r
-that both of these tables have 2<sup>(K - 1)</sup> rows, and 2<sup>k</sup>\r
-columns, where K is the constraint length and k is the number of bits input\r
-to the encoder for each cycle. These two tables will come in handy when\r
-we start discussing the Viterbi decoder algorithm.\r
-<p><a NAME="mapping"></a><b><i><font face="Arial">Mapping the Channel Symbols\r
-to Signal Levels</font></i></b>\r
-<p>Mapping the one/zero output of the convolutional encoder onto an antipodal\r
-baseband signaling scheme is simply a matter of translating zeroes to +1s\r
-and ones to -1s. This can be accomplished by performing the operation y\r
-= 1 - 2x on each convolutional encoder output symbol.\r
-<p><a NAME="addnoise"></a><b><i><font face="Arial">Adding Noise to the\r
-Transmitted Symbols</font></i></b>\r
-<p>Adding noise to the transmitted channel symbols produced by the convolutional\r
-encoder involves generating Gaussian random numbers, scaling the numbers\r
-according to the desired energy per symbol to noise density ratio, E<sub>s</sub>/N<sub>0</sub>,\r
-and adding the scaled Gaussian random numbers to the channel symbol values.\r
-<p>For the uncoded channel, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>,\r
-since there is one channel symbol per bit.&nbsp; However, for the coded\r
-channel, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub> + 10log<sub>10</sub>(k/n).&nbsp;\r
-For example, for rate 1/2 coding, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>\r
-+ 10log<sub>10</sub>(1/2) = E<sub>b</sub>/N<sub>0</sub> - 3.01 dB.&nbsp;\r
-Similarly, for rate 2/3 coding, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>\r
-+ 10log<sub>10</sub>(2/3) = E<sub>b</sub>/N<sub>0</sub> - 1.76 dB.\r
-<p>The Gaussian random number generator is the only interesting part of\r
-this task. C only provides a uniform random number generator, <tt>rand()</tt>.\r
-In order to obtain Gaussian random numbers, we take advantage of relationships\r
-between uniform, Rayleigh, and Gaussian distributions:\r
-<p>Given a uniform random variable U, a Rayleigh random variable R can\r
-be obtained by:\r
-<p><img SRC="figs/eqn01.gif" ALT="equation for Rayleigh random deviate given uniform random deviate" height=30 width=297 align=ABSCENTER>\r
-<p>where&nbsp;<img SRC="figs/eqn02.gif" height=24 width=24 align=ABSCENTER>is\r
-the variance of the Rayleigh random variable, and given R and a second\r
-uniform random variable V, two Gaussian random variables G and H can be\r
-obtained by\r
-<p><i>G</i> = <i>R</i> cos <i>U</i> and <i>H</i> = <i>R</i> sin <i>V</i>.\r
-<p>In the AWGN channel, the signal is corrupted by additive noise, n(t),\r
-which has the power spectrum <i>No</i>/2 watts/Hz. The variance&nbsp;<img SRC="figs/eqn02.gif" ALT="variance" height=24 width=24 align=ABSBOTTOM>of\r
-this noise is equal to&nbsp;<img SRC="figs/eqn03.gif" ALT="noise density div by two" height=22 width=38 align=TEXTTOP>.\r
-If we set the energy per symbol <i>E<sub>s</sub></i> equal to 1, then&nbsp;<img SRC="figs/eqn04.gif" ALT="equation relating variance to SNR" height=28 width=110 align=ABSBOTTOM>.\r
-So&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given SNR" height=28 width=139 align=ABSCENTER>.\r
-<p><a NAME="quantizing"></a><b><i><font face="Arial">Quantizing the Received\r
-Channel Symbols</font></i></b>\r
-<p>An ideal Viterbi decoder would work with infinite precision, or at least\r
-with floating-point numbers. In practical systems, we quantize the received\r
-channel symbols with one or a few bits of precision in order to reduce\r
-the complexity of the Viterbi decoder, not to mention the circuits that\r
-precede it. If the received channel symbols are quantized to one-bit precision\r
-(&lt; 0V = 1, <u>></u> 0V = 0), the result is called hard-decision data.\r
-If the received channel symbols are quantized with more than one bit of\r
-precision, the result is called soft-decision data. A Viterbi decoder with\r
-soft decision data inputs quantized to three or four bits of precision\r
-can perform about 2 dB better than one working with hard-decision inputs.\r
-The usual quantization precision is three bits. More bits provide little\r
-additional improvement.\r
-<p>The selection of the quantizing levels is an important design decision\r
-because it can have a significant effect on the performance of the link.\r
-The following is a very brief explanation of one way to set those levels.\r
-Let's assume our received signal levels in the absence of noise are -1V\r
-= 1, +1V = 0. With noise, our received signal has mean +/- 1 and standard\r
-deviation&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given SNR" height=28 width=139 align=ABSCENTER>.\r
-Let's use a uniform, three-bit quantizer having the input/output relationship\r
-shown in the figure below, where D is a decision level that we will calculate\r
-shortly:\r
-<center>\r
-<p><img SRC="figs/quantize.gif" ALT="8-level quantizer function plot" height=342 width=384></center>\r
-\r
-<p>The decision level, D, can be calculated according to the formula&nbsp;<img SRC="figs/eqn06.gif" ALT="equation for quantizer decision level" height=28 width=228 align=ABSCENTER>,\r
-where E<sub>s</sub>/N<sub>0</sub> is the energy per symbol to noise density\r
-ratio<i>. (The above figure was redrawn from Figure 2 of Advanced Hardware\r
-Architecture's ANRS07-0795, "Soft Decision Thresholds and Effects on Viterbi\r
-Performance". See the </i><a href="fecbiblio.html">bibliography</a><i>&nbsp;\r
-for a link to their web pages.)</i>\r
-<p>Click <a href="algrthms2.html">here</a> to proceed to the description\r
-of the Viterbi decoding algorithm itself...\r
-<p>Or click on one of the links below to go to the beginning of that section:\r
-<p>&nbsp;<a href="tutorial.html">Introduction</a>\r
-<br>&nbsp;<a href="algrthms2.html">Description of the Algorithms&nbsp;\r
-(Part 2)</a>\r
-<br>&nbsp;<a href="examples.html">Simulation Source Code Examples</a>\r
-<br>&nbsp;<a href="simrslts.html">Example Simulation Results</a>\r
-<br>&nbsp;<a href="fecbiblio.html">Bibliography</a>\r
-<br>&nbsp;<a href="tutorial.html#specapps">About Spectrum Applications...</a>\r
-<br>&nbsp;\r
-<br>&nbsp;\r
-<br>\r
-<br>\r
-<center>\r
-<p><img SRC="figs/stripe.gif" height=6 width=600></center>\r
-\r
-</body>\r
-</html>\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+   <meta name="Author" content="Chip Fleming">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (Win95; U) [Netscape]">
+   <title>Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms</title>
+</head>
+<body>
+<a NAME="algorithms"></a><b><font face="Arial"><font size=+1>Description
+of the Algorithms&nbsp; (Part 1)</font></font></b>
+<p>&nbsp;The steps involved in simulating a communication channel using
+convolutional encoding and Viterbi decoding are as follows:
+<ul>
+<li>
+<a href="#genalgorithm">Generate the data</a> to be transmitted through
+the channel-result is binary data bits</li>
+
+<li>
+<a href="#conalgorithm">Convolutionally encode</a> the data-result is channel
+symbols</li>
+
+<li>
+<a href="#mapping">Map the one/zero channel symbols</a> onto an antipodal
+baseband signal, producing transmitted channel symbols</li>
+
+<li>
+<a href="#addnoise">Add noise</a> to the transmitted channel symbols-result
+is received channel symbols</li>
+
+<li>
+<a href="#quantizing">Quantize</a> the received channel levels-one bit
+quantization is called hard-decision, and two to n bit quantization is
+called soft-decision (n is usually three or four)</li>
+
+<li>
+<a href="algrthms2.html">Perform Viterbi decoding</a> on the quantized
+received channel symbols-result is again binary data bits</li>
+
+<li>
+Compare the decoded data bits to the transmitted data bits and count the
+number of errors.</li>
+</ul>
+<i>Many of you will notice that I left out the steps of modulating the
+channel symbols onto a transmitted carrier, and then demodulating the received
+carrier to recover the channel symbols. You're right, but we can accurately
+model the effects of AWGN even though we bypass those steps.</i>
+<p><a NAME="genalgorithm"></a><b><i><font face="Arial">Generating the Data</font></i></b>
+<p>Generating the data to be transmitted through the channel can be accomplished
+quite simply by using a random number generator. One that produces a uniform
+distribution of numbers on the interval 0 to a maximum value is provided
+in C: <tt>rand ()</tt>. Using this function, we can say that any value
+less than half of the maximum value is a zero; any value greater than or
+equal to half of the maximum value is a one.
+<p><a NAME="conalgorithm"></a><b><i><font face="Arial">Convolutionally
+Encoding the Data</font></i></b>
+<p>Convolutionally encoding the data is accomplished using a shift register
+and associated combinatorial logic that performs modulo-two addition. (A
+shift register is merely a chain of flip-flops wherein the output of the
+nth flip-flop is tied to the input of the (n+1)th flip-flop. Every time
+the active edge of the clock occurs, the input to the flip-flop is clocked
+through to the output, and thus the data are shifted over one stage.) The
+combinatorial logic is often in the form of cascaded exclusive-or gates.
+As a reminder, exclusive-or gates are two-input, one-output gates often
+represented by the logic symbol shown below,
+<center>
+<p><img SRC="figs/xor_gate.gif" ALT="exclusive-or gate symbol" height=64 width=93></center>
+
+<p>that implement the following truth-table:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLPADDING=7 WIDTH="218" >
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><b><tt>Input A</tt></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><b><tt>Input B</tt></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><b><tt>Output</tt></b>
+<p><b><tt>(A xor B)</tt></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>0</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>1</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>1</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>0</tt></center>
+</td>
+</tr>
+</table></center>
+
+<p>The exclusive-or gate performs modulo-two addition of its inputs. When
+you cascade q two-input exclusive-or gates, with the output of the first
+one feeding one of the inputs of the second one, the output of the second
+one feeding one of the inputs of the third one, etc., the output of the
+last one in the chain is the modulo-two sum of the q + 1 inputs.
+<p>Another way to illustrate the modulo-two adder, and the way that is
+most commonly used in textbooks, is as a circle with a + symbol inside,
+thus:
+<center>
+<p><img SRC="figs/ringsum.gif" ALT="modulo-two adder symbol" height=48 width=48></center>
+
+<p>Now that we have the two basic components of the convolutional encoder
+(flip-flops comprising the shift register and exclusive-or gates comprising
+the associated modulo-two adders) defined, let's look at a picture of a
+convolutional encoder for a rate 1/2, K = 3, m = 2 code:
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<center>
+<p><img SRC="figs/ce_7_5_a.gif" ALT="rate 1/2 K = 3 (7, 5) convolutional encoder" height=232 width=600></center>
+
+<p>In this encoder, data bits are provided at a rate of k bits per second.
+Channel symbols are output at a rate of n = 2k symbols per second. The
+input bit is stable during the encoder cycle. The encoder cycle starts
+when an input clock edge occurs. When the input clock edge occurs, the
+output of the left-hand flip-flop is clocked into the right-hand flip-flop,
+the previous input bit is clocked into the left-hand flip-flop, and a new
+input bit becomes available. Then the outputs of the upper and lower modulo-two
+adders become stable. The output selector (SEL A/B block) cycles through
+two states-in the first state, it selects and outputs the output of the
+upper modulo-two adder; in the second state, it selects and outputs the
+output of the lower modulo-two adder.
+<p>The encoder shown above encodes the K = 3, (7, 5) convolutional code.
+The octal numbers 7 and 5 represent the code generator polynomials, which
+when read in binary (111<sub>2</sub> and 101<sub>2</sub>) correspond to
+the shift register connections to the upper and lower modulo-two adders,
+respectively. This code has been determined to be the "best" code for rate
+1/2, K = 3. It is the code I will use for the remaining discussion and
+examples, for reasons that will become readily apparent when we get into
+the Viterbi decoder algorithm.
+<p>Let's look at an example input data stream, and the corresponding output
+data stream:
+<p>Let the input sequence be 010111001010001<sub>2</sub>.
+<p>Assume that the outputs of both of the flip-flops in the shift register
+are initially cleared, i.e. their outputs are zeroes. The first clock cycle
+makes the first input bit, a zero, available to the encoder. The flip-flop
+outputs are both zeroes. The inputs to the modulo-two adders are all zeroes,
+so the output of the encoder is 00<sub>2</sub>.
+<p>The second clock cycle makes the second input bit available to the encoder.
+The left-hand flip-flop clocks in the previous bit, which was a zero, and
+the right-hand flip-flop clocks in the zero output by the left-hand flip-flop.
+The inputs to the top modulo-two adder are 100<sub>2</sub>, so the output
+is a one. The inputs to the bottom modulo-two adder are 10<sub>2</sub>,
+so the output is also a one. So the encoder outputs 11<sub>2</sub> for
+the channel symbols.
+<p>The third clock cycle makes the third input bit, a zero, available to
+the encoder. The left-hand flip-flop clocks in the previous bit, which
+was a one, and the right-hand flip-flop clocks in the zero from two bit-times
+ago. The inputs to the top modulo-two adder are 010<sub>2</sub>, so the
+output is a one. The inputs to the bottom modulo-two adder are 00<sub>2</sub>,
+so the output is zero. So the encoder outputs 10<sub>2</sub> for the channel
+symbols.
+<p>And so on. The timing diagram shown below illustrates the process:
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<center>
+<p><img SRC="figs/ce_td.gif" ALT="timing diagram for rate 1/2 convolutional encoder" height=322 width=600></center>
+
+<p><br>
+<br>
+<br>
+<p>After all of the inputs have been presented to the encoder, the output
+sequence will be:
+<p>00 11 10 00 01 10 01 11 11 10 00 10 11 00 11<sub>2</sub>.
+<p>Notice that I have paired the encoder outputs-the first bit in each
+pair is the output of the upper modulo-two adder; the second bit in each
+pair is the output of the lower modulo-two adder.
+<p>You can see from the structure of the rate 1/2 K = 3 convolutional encoder
+and from the example given above that each input bit has an effect on three
+successive pairs of output symbols. That is an extremely important point
+and that is what gives the convolutional code its error-correcting power.
+The reason why will become evident when we get into the Viterbi decoder
+algorithm.
+<p>Now if we are only going to send the 15 data bits given above, in order
+for the last bit to affect three pairs of output symbols, we need to output
+two more pairs of symbols. This is accomplished in our example encoder
+by clocking the convolutional encoder flip-flops two ( = m) more times,
+while holding the input at zero. This is called "flushing" the encoder,
+and results in two more pairs of output symbols. The final binary output
+of the encoder is thus 00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10
+11<sub>2</sub>. If we don't perform the flushing operation, the last m
+bits of the message have less error-correction capability than the first
+through (m - 1)th bits had. This is a pretty important thing to remember
+if you're going to use this FEC technique in a burst-mode environment.
+So's the step of clearing the shift register at the beginning of each burst.
+The encoder must start in a known state and end in a known state for the
+decoder to be able to reconstruct the input data sequence properly.
+<p>Now, let's look at the encoder from another perspective. You can think
+of the encoder as a simple state machine. The example encoder has two bits
+of memory, so there are four possible states. Let's give the left-hand
+flip-flop a binary weight of 2<sup>1</sup>, and the right-hand flip-flop
+a binary weight of 2<sup>0</sup>. Initially, the encoder is in the all-zeroes
+state. If the first input bit is a zero, the encoder stays in the all zeroes
+state at the next clock edge. But if the input bit is a one, the encoder
+transitions to the 10<sub>2</sub> state at the next clock edge. Then, if
+the next input bit is zero, the encoder transitions to the 01<sub>2</sub>
+state, otherwise, it transitions to the 11<sub>2</sub> state. The following
+table gives the next state given the current state and the input, with
+the states given in binary:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >
+<tr>
+<td VALIGN=TOP WIDTH="33%"><font face="Arial"><font size=-1>&nbsp;</font></font></td>
+
+<td VALIGN=TOP COLSPAN="2" WIDTH="67%">
+<center><a NAME="statetable"></a><b><font face="Arial"><font size=-1>Next
+State, if&nbsp;</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Current State</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 0:</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 1:</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+</table></center>
+
+<br>&nbsp;
+<p>The above table is often called a state transition table. We'll refer
+to it as the <tt>next state</tt> table.<tt> </tt>Now let us look at a table
+that lists the channel output symbols, given the current state and the
+input data, which we'll refer to as the <tt>output</tt> table:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >
+<tr>
+<td VALIGN=TOP WIDTH="33%"></td>
+
+<td VALIGN=TOP COLSPAN="2" WIDTH="67%">
+<center><a NAME="outputtable"></a><b><font face="Arial"><font size=-1>Output
+Symbols, if</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Current State</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 0:</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 1:</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+</table></center>
+
+<br>&nbsp;
+<p>You should now see that with these two tables, you can completely describe
+the behavior of the example rate 1/2, K = 3 convolutional encoder. Note
+that both of these tables have 2<sup>(K - 1)</sup> rows, and 2<sup>k</sup>
+columns, where K is the constraint length and k is the number of bits input
+to the encoder for each cycle. These two tables will come in handy when
+we start discussing the Viterbi decoder algorithm.
+<p><a NAME="mapping"></a><b><i><font face="Arial">Mapping the Channel Symbols
+to Signal Levels</font></i></b>
+<p>Mapping the one/zero output of the convolutional encoder onto an antipodal
+baseband signaling scheme is simply a matter of translating zeroes to +1s
+and ones to -1s. This can be accomplished by performing the operation y
+= 1 - 2x on each convolutional encoder output symbol.
+<p><a NAME="addnoise"></a><b><i><font face="Arial">Adding Noise to the
+Transmitted Symbols</font></i></b>
+<p>Adding noise to the transmitted channel symbols produced by the convolutional
+encoder involves generating Gaussian random numbers, scaling the numbers
+according to the desired energy per symbol to noise density ratio, E<sub>s</sub>/N<sub>0</sub>,
+and adding the scaled Gaussian random numbers to the channel symbol values.
+<p>For the uncoded channel, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>,
+since there is one channel symbol per bit.&nbsp; However, for the coded
+channel, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub> + 10log<sub>10</sub>(k/n).&nbsp;
+For example, for rate 1/2 coding, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>
++ 10log<sub>10</sub>(1/2) = E<sub>b</sub>/N<sub>0</sub> - 3.01 dB.&nbsp;
+Similarly, for rate 2/3 coding, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub>
++ 10log<sub>10</sub>(2/3) = E<sub>b</sub>/N<sub>0</sub> - 1.76 dB.
+<p>The Gaussian random number generator is the only interesting part of
+this task. C only provides a uniform random number generator, <tt>rand()</tt>.
+In order to obtain Gaussian random numbers, we take advantage of relationships
+between uniform, Rayleigh, and Gaussian distributions:
+<p>Given a uniform random variable U, a Rayleigh random variable R can
+be obtained by:
+<p><img SRC="figs/eqn01.gif" ALT="equation for Rayleigh random deviate given uniform random deviate" height=30 width=297 align=ABSCENTER>
+<p>where&nbsp;<img SRC="figs/eqn02.gif" height=24 width=24 align=ABSCENTER>is
+the variance of the Rayleigh random variable, and given R and a second
+uniform random variable V, two Gaussian random variables G and H can be
+obtained by
+<p><i>G</i> = <i>R</i> cos <i>U</i> and <i>H</i> = <i>R</i> sin <i>V</i>.
+<p>In the AWGN channel, the signal is corrupted by additive noise, n(t),
+which has the power spectrum <i>No</i>/2 watts/Hz. The variance&nbsp;<img SRC="figs/eqn02.gif" ALT="variance" height=24 width=24 align=ABSBOTTOM>of
+this noise is equal to&nbsp;<img SRC="figs/eqn03.gif" ALT="noise density div by two" height=22 width=38 align=TEXTTOP>.
+If we set the energy per symbol <i>E<sub>s</sub></i> equal to 1, then&nbsp;<img SRC="figs/eqn04.gif" ALT="equation relating variance to SNR" height=28 width=110 align=ABSBOTTOM>.
+So&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given SNR" height=28 width=139 align=ABSCENTER>.
+<p><a NAME="quantizing"></a><b><i><font face="Arial">Quantizing the Received
+Channel Symbols</font></i></b>
+<p>An ideal Viterbi decoder would work with infinite precision, or at least
+with floating-point numbers. In practical systems, we quantize the received
+channel symbols with one or a few bits of precision in order to reduce
+the complexity of the Viterbi decoder, not to mention the circuits that
+precede it. If the received channel symbols are quantized to one-bit precision
+(&lt; 0V = 1, <u>></u> 0V = 0), the result is called hard-decision data.
+If the received channel symbols are quantized with more than one bit of
+precision, the result is called soft-decision data. A Viterbi decoder with
+soft decision data inputs quantized to three or four bits of precision
+can perform about 2 dB better than one working with hard-decision inputs.
+The usual quantization precision is three bits. More bits provide little
+additional improvement.
+<p>The selection of the quantizing levels is an important design decision
+because it can have a significant effect on the performance of the link.
+The following is a very brief explanation of one way to set those levels.
+Let's assume our received signal levels in the absence of noise are -1V
+= 1, +1V = 0. With noise, our received signal has mean +/- 1 and standard
+deviation&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given SNR" height=28 width=139 align=ABSCENTER>.
+Let's use a uniform, three-bit quantizer having the input/output relationship
+shown in the figure below, where D is a decision level that we will calculate
+shortly:
+<center>
+<p><img SRC="figs/quantize.gif" ALT="8-level quantizer function plot" height=342 width=384></center>
+
+<p>The decision level, D, can be calculated according to the formula&nbsp;<img SRC="figs/eqn06.gif" ALT="equation for quantizer decision level" height=28 width=228 align=ABSCENTER>,
+where E<sub>s</sub>/N<sub>0</sub> is the energy per symbol to noise density
+ratio<i>. (The above figure was redrawn from Figure 2 of Advanced Hardware
+Architecture's ANRS07-0795, "Soft Decision Thresholds and Effects on Viterbi
+Performance". See the </i><a href="fecbiblio.html">bibliography</a><i>&nbsp;
+for a link to their web pages.)</i>
+<p>Click <a href="algrthms2.html">here</a> to proceed to the description
+of the Viterbi decoding algorithm itself...
+<p>Or click on one of the links below to go to the beginning of that section:
+<p>&nbsp;<a href="tutorial.html">Introduction</a>
+<br>&nbsp;<a href="algrthms2.html">Description of the Algorithms&nbsp;
+(Part 2)</a>
+<br>&nbsp;<a href="examples.html">Simulation Source Code Examples</a>
+<br>&nbsp;<a href="simrslts.html">Example Simulation Results</a>
+<br>&nbsp;<a href="fecbiblio.html">Bibliography</a>
+<br>&nbsp;<a href="tutorial.html#specapps">About Spectrum Applications...</a>
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<br>
+<center>
+<p><img SRC="figs/stripe.gif" height=6 width=600></center>
+
+</body>
+</html>
index 24f269f035f509c8db3bf4c082a5ca2c873a51a6..6d8cd85885587e0722889ac4ee676bae8f7e7694 100644 (file)
@@ -8,7 +8,7 @@
 <H3>&nbsp;</H3>        <!-- un po' di spazio in cima -->
 
 <!--
-     La rubrica "in evidenza" va commentata se non c'è niente di serio
+     La rubrica "in evidenza" va commentata se non c'è niente di serio
      da mettere in evidenza
  -->
 <H2>
@@ -23,7 +23,7 @@
   sostenere il <a href="/altri/cortiana.shtml">disegno di legge</a> sul
   software libero dal titolo "<i>Norme in materia di pluralismo
   informatico sulla adozione e la diffusione del software libero e sulla
-  portabilità dei documenti informatici nella Pubblica
+  portabilità dei documenti informatici nella Pubblica
   Amministrazione</i>" (XIV Legislatura Atto Senato n. 1188).<P>
 
 </ul>
@@ -42,7 +42,7 @@
     ottenere l'esenzione dal bollilno SIAE per la distribuzione di
     software libero a titolo oneroso o gratuito.  <A
     HREF="/altri/semenzato-pieroni.shtml">Qui</A> il disegno di legge
-    Semenzato Pieroni sul diritto d'autore.  E non è finita.
+    Semenzato Pieroni sul diritto d'autore.  E non è finita.
 
   <p></p><li>
     <a href="/altri/adeos.shtml">Salutiamo</a> l'arrivo di ADEOS, kernel
index 4d174c63b07b62d3ad54a905405ea6ad57a4f622..b5de1e6d686756a8f3be30caf9ac482f79f9add2 100644 (file)
@@ -6,14 +6,14 @@
     P    { text-indent: 0; text-align: justify }
     DD   { text-indent: 0; text-align: justify }
   --></STYLE>
-  <TITLE>Francesco Potortì Software Page</TITLE>
+  <TITLE>Francesco Potortì Software Page</TITLE>
   <LINK  REV="made" HREF="mailto:F.Potorti@cnuce.cnr.it">
-  <META NAME="description" CONTENT="Home page of Francesco Potortì.">
+  <META NAME="description" CONTENT="Home page of Francesco Potortì.">
   <META NAME="keywords"
-        CONTENT="Potorti Potortì Potorti' Potorti`
+        CONTENT="Potorti Potortì Potorti' Potorti`
                 satellites MTG fracas simulator LEO MEO GEO
                 GNU emacs etags checkiso debian-bug">
-  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
 </HEAD><BODY>
 
 <CENTER>
index 7aa74c55bd0c7438f07b4a1e5a0ada7dfe6cdbef..159432908d227591fec710c85cc2d979cff28528 100644 (file)
@@ -1,27 +1,27 @@
 <DIV LANG="it" ALIGN="justify">
 
 <H2>
-  Cos'è il software libero?
+  Cos'è il software libero?
 </H2>
 
 <P>
   Il concetto di software libero discende naturalmente da quello di
-  libertà di scambio di idee e di informazioni.  Negli ambienti
-  scientifici, quest'ultimo principio è tenuto in alta considerazione
-  per la fecondità che ha dimostrato; ad esso infatti è generalmente
+  libertà di scambio di idee e di informazioni.  Negli ambienti
+  scientifici, quest'ultimo principio è tenuto in alta considerazione
+  per la fecondità che ha dimostrato; ad esso infatti è generalmente
   attribuita molta parte dell'eccezionale ed imprevedibile crescita del
   sapere negli ultimi tre secoli.
 </P>
 <P>
-  La libertà di scambio di idee non è tuttavia una questione puramente
-  pratica: essa è anche alla base dei concetti di libertà di pensiero e
-  di espressione.  Analogamente alle idee, il software è immateriale, e
-  può essere riprodotto e trasmesso facilmente.  In modo simile a quanto
+  La libertà di scambio di idee non è tuttavia una questione puramente
+  pratica: essa è anche alla base dei concetti di libertà di pensiero e
+  di espressione.  Analogamente alle idee, il software è immateriale, e
+  può essere riprodotto e trasmesso facilmente.  In modo simile a quanto
   avviene per le idee, parte essenziale del processo che sostiene la
-  crescita e l'evoluzione del software è la sua libera diffusione.  Ed
-  ogni giorno di più, come le idee, il software permea il tessuto
+  crescita e l'evoluzione del software è la sua libera diffusione.  Ed
+  ogni giorno di più, come le idee, il software permea il tessuto
   sociale e lo influenza, produce effetti etici, economici, politici e
-  in un senso più generale culturali.
+  in un senso più generale culturali.
 </P>
 <P>
   Fu Richard M. Stallman, nei primi anni Ottanta, a formalizzare per la
   href="http://www.it.gnu.org/philosophy/free-sw.it.html">definizione</A>
   di Stallman, che da subito assurse al ruolo di definizione per
   eccellenza di software libero, assume la forma di quattro principi di
-  libertà:
+  libertà:
 </P>
 <P>
 <DL>
-  <DT>Libertà 0, o libertà fondamentale:
-    <DD>La libertà di eseguire il programma per qualunque scopo, senza
+  <DT>Libertà 0, o libertà fondamentale:
+    <DD>La libertà di eseguire il programma per qualunque scopo, senza
     vincoli sul suo utilizzo.
 
-  <DT>Libertà 1:
-    <DD>La libertà di studiare il funzionamento del programma, e
+  <DT>Libertà 1:
+    <DD>La libertà di studiare il funzionamento del programma, e
     di adattarlo alle proprie esigenze.
 
-  <DT>Libertà 2:
-    <DD>La libertà di redistribuire copie del programma.
+  <DT>Libertà 2:
+    <DD>La libertà di redistribuire copie del programma.
 
-  <DT>Libertà 3:
-    <DD>La libertà di migliorare il programma, e di distribuirne
+  <DT>Libertà 3:
+    <DD>La libertà di migliorare il programma, e di distribuirne
     i miglioramenti.
 </DL>
 </P>
 <P>
-  Il software distribuito con una licenza che rispetti questi principi è
+  Il software distribuito con una licenza che rispetti questi principi è
   detto <Q><EM>software libero</EM></Q> (in inglese <Q><EM>free
   software</EM></Q>).  Nel 1984 Richard M. Stallman <A TITLE="storia
   del progetto GNU"
   HREF="http://www.it.gnu.org/gnu/thegnuproject.it.html">diede vita al
   progetto GNU</A>, con lo scopo di tradurre in pratica il concetto di
-  software libero, e creò la <Q>Free Software Foundation</Q> per
+  software libero, e creò la <Q>Free Software Foundation</Q> per
   dare supporto logistico, legale ed economico al progetto GNU.
 </P>
 
 </A></H3>
 
 <P>
-  La <EM>licenza d'uso</EM> è un documento legale generalmente
+  La <EM>licenza d'uso</EM> è un documento legale generalmente
   distribuito assieme a ogni programma. Essa, appoggiandosi alle norme
   sul diritto d'autore, specifica diritti e doveri di chi riceve tale
   programma.
 </P>
 <P>
   Gran parte delle licenze comunemente usate sono <EM>proprietarie</EM>,
-  cioè non libere, in quanto non garantiscono le quattro libertà. Quasi
+  cioè non libere, in quanto non garantiscono le quattro libertà. Quasi
   sempre tali licenze non consentono infatti la libera copia del
-  programma, né la sua modifica.  Spesso, se il programma è installato
+  programma, né la sua modifica.  Spesso, se il programma è installato
   sul computer di casa, la licenza impedisce persino di installarlo sul
   proprio portatile (per utilizzare il programma fuori casa); se il
-  programma è utilizzato in uno studio professionale, non consente di
+  programma è utilizzato in uno studio professionale, non consente di
   tenerlo installato su un computer di riserva, nel caso che quello
   principale si guasti.
 </P>
   TITLE="traduzione della licenza GNU GPL"
   HREF="http://softwarelibero.it/gnudoc/gpl.it.txt">GNU GPL</A>)</EM>,
   al contrario, concede all'utente del programma tutte e quattro le
-  libertà suddette.  Inoltre si occupa anche di proteggerle: chi
+  libertà suddette.  Inoltre si occupa anche di proteggerle: chi
   modifichi un programma protetto da GPL e lo distribuisca con tali
-  modifiche, deve distribuirlo sotto licenza GPL.  È grazie a questo
-  tipo di protezione che la GPL è attualmente la licenza più usata per
+  modifiche, deve distribuirlo sotto licenza GPL.  È grazie a questo
+  tipo di protezione che la GPL è attualmente la licenza più usata per
   il software libero.
 </P>
 <P>
   Con un gioco di parole, il nome dato a questo tipo di protezione
-  è <EM>permesso d'autore</EM> (in inglese <A TITLE="definizione di
+  è <EM>permesso d'autore</EM> (in inglese <A TITLE="definizione di
   copyleft (inglese)" LANG="en"
   HREF="http://www.it.gnu.org/copyleft/copyleft.html"><EM>copyleft</EM></A>):
-  è il criterio che prevede che le modifiche ad un programma possano
+  è il criterio che prevede che le modifiche ad un programma possano
   essere distribuite solo con la stessa licenza del programma originale.
   Le licenze proprietarie usano le norme sul diritto d'autore (copyright
-  in inglese) per togliere libertà agli utenti di un programma; il
-  permesso d'autore usa le stesse norme per garantire quelle libertà e
+  in inglese) per togliere libertà agli utenti di un programma; il
+  permesso d'autore usa le stesse norme per garantire quelle libertà e
   per proteggerle.
 </P>
 <P>
-  La GNU GPL non è unica nel suo genere.  Diverse <A TITLE="lista di
+  La GNU GPL non è unica nel suo genere.  Diverse <A TITLE="lista di
   licenze libere e non"
   HREF="http://www.it.gnu.org/licenses/license-list.it.html">altre
-  licenze</A> garantiscono le quattro libertà e si possono pertanto
+  licenze</A> garantiscono le quattro libertà e si possono pertanto
   qualificare come licenze per il software libero.  Fra queste, merita
   una speciale menzione per la sua diffusione la <A TITLE="la licenza
   BSD (in inglese)" LANG="en"
   HREF="http://www.freebsd.org/copyright/license.html">licenza BSD</A>,
-  la cui principale differenza dalla GPL è che, non essendo basata sul
+  la cui principale differenza dalla GPL è che, non essendo basata sul
   permesso d'autore, non ha fra i propri obiettivi quello di proteggere
-  la libertà del software cui è applicata.  Chi infatti modifichi un
-  programma protetto da BSD, può distribuirlo con le modifiche usando
+  la libertà del software cui è applicata.  Chi infatti modifichi un
+  programma protetto da BSD, può distribuirlo con le modifiche usando
   qualunque licenza.
 </P>
 <P>
   Sia BSD che GPL hanno pro e contro.  La licenza GPL riflette l'idea
-  della cooperazione: se io concedo ad altri la libertà di modificare e
+  della cooperazione: se io concedo ad altri la libertà di modificare e
   redistribuire il mio programma, costoro sono tenuti a concedere le
-  stesse libertà sulle loro modifiche.  Il problema è che alcuni vedono
+  stesse libertà sulle loro modifiche.  Il problema è che alcuni vedono
   questo vincolo come un'imposizione ingenerosa, se non addirittura una
   restrizione insopportabile.  La licenza BSD riflette l'idea del dono
-  liberale: chiunque può fare ciò che meglio crede del mio programma.
-  Il problema è che questo significa che chiunque può redistribuire
+  liberale: chiunque può fare ciò che meglio crede del mio programma.
+  Il problema è che questo significa che chiunque può redistribuire
   anche in forma chiusa con una licenza proprietaria un programma BSD
-  modificato, impedendo così ai propri acquirenti di modificarlo e
+  modificato, impedendo così ai propri acquirenti di modificarlo e
   redistribuirlo a loro volta.
 </P>
 
 <P>
 <DL>
 
-  <DT>Il software libero è gratuito
+  <DT>Il software libero è gratuito
 
-    <DD>È falso: la libertà del software non ha nulla a che vedere con
-    il suo prezzo.  Benché gran parte del software libero più diffuso
+    <DD>È falso: la libertà del software non ha nulla a che vedere con
+    il suo prezzo.  Benché gran parte del software libero più diffuso
     sia distribuito gratuitamente, ci sono programmatori che vivono
     della vendita e della manutenzione dei programmi liberi da loro
     creati.
 
-  <DT>Il software gratuito è libero
+  <DT>Il software gratuito è libero
 
-    <DD>È falso.  Molti programmi proprietari vengono distribuiti
+    <DD>È falso.  Molti programmi proprietari vengono distribuiti
     gratuitamente.
 
-  <DT>Il software libero è privo di copyright
+  <DT>Il software libero è privo di copyright
 
-    <DD>È falso.  Benché si possa rinunciare al copyright su un proprio
-    programma e renderlo così di pubblico dominio, la gran parte del
-    software libero è distribuito con una licenza.  Per esempio, sono
+    <DD>È falso.  Benché si possa rinunciare al copyright su un proprio
+    programma e renderlo così di pubblico dominio, la gran parte del
+    software libero è distribuito con una licenza.  Per esempio, sono
     licenze di copyright la licenza BSD e la GNU GPL, anche se per
     qualificare quest'ultima spesso si parla di permesso d'autore
     (copyleft).
   amministrazione, ma anche nei paesi poveri, ridurrebbe i costi
   relativi al software
 
-    <DD>Potrebbe essere vero, ma una seria valutazione dei costi è molto
+    <DD>Potrebbe essere vero, ma una seria valutazione dei costi è molto
     difficile.  Qualunque tipo di software, se usato in ambito non
     domestico, ha dei costi di manutenzione che sono solitamente
     maggiori del suo prezzo di acquisto.  I motivi per sostenere l'uso
     del software libero, specie in ambiti pubblici, riguardano anzitutto
-    la libertà, non il prezzo.
+    la libertà, non il prezzo.
 
 <!-- Discorso inadatto ad un documento introduttivo
   <DT>Chi scrive un programma libero lo deve pubblicare su Internet
 
-    <DD>È una falsa argomentazione spesso usata per scoraggiare
+    <DD>È una falsa argomentazione spesso usata per scoraggiare
     un'azienda dall'uso di una licenza libera per i suoi programmi.
     Sia gli autori che gli acquirenti di un programma libero hanno il
     diritto di distribuirlo a titolo oneroso o gratuito, ma non hanno
 </A></H3>
 
 <P>
-  Nel 1998 Bruce Perens, Eric Raymond e altre personalità nel campo del
-  software libero si convinsero che i principi di libertà associati ad
+  Nel 1998 Bruce Perens, Eric Raymond e altre personalità nel campo del
+  software libero si convinsero che i principi di libertà associati ad
   esso fossero malvisti nel mondo degli affari, a causa della loro
-  carica ideologica.  Decisero perciò di evitare accuratamente ogni
+  carica ideologica.  Decisero perciò di evitare accuratamente ogni
   riferimento a considerazioni politiche o di principio, e di lanciare
   una campagna di promozione del software libero che ne mettesse in luce
   i numerosi <A TITLE="un discorso di Robert Chassell di FSF"
   HREF="http://softwarelibero.it/altri/economia-sl.shtml">vantaggi
-  pratici</A>, come la facilità di adattamento, l'affidabilità, la
-  sicurezza, la conformità agli standard, l'indipendenza dai singoli
+  pratici</A>, come la facilità di adattamento, l'affidabilità, la
+  sicurezza, la conformità agli standard, l'indipendenza dai singoli
   fornitori.  A tal fine scrissero la <Q><A TITLE="la definizione di
   Open Source (in inglese)" LANG="en"
   HREF="http://www.opensource.org/docs/definition.html">Open Source
   HREF="http://opensource.org/"><EM>open source</EM></A>.
 </P>
 <P>
-  Il movimento open source fu un successo, e contribuì a sdoganare il
+  Il movimento open source fu un successo, e contribuì a sdoganare il
   concetto di software libero in campo aziendale, dove era guardato con
-  sospetto o condiscendenza.  Un esempio di questo successo è
+  sospetto o condiscendenza.  Un esempio di questo successo è
   l'atteggiamento dell'IBM, l'azienda che ha fatto di gran lunga i
   maggiori investimenti nel campo del software libero, la quale parla
   esclusivamente di open source, mai di software libero.
 </P>
 <P>
-  La voluta neutralità del movimento open source verso gli aspetti
-  etici e politici del software libero è la caratteristica sostanziale
+  La voluta neutralità del movimento open source verso gli aspetti
+  etici e politici del software libero è la caratteristica sostanziale
   che lo distingue dalla filosofia del software libero, che al contrario
   pone l'accento sulle motivazioni ideali.  Parlare di software libero
-  piuttosto che di open source è una questione politica piuttosto che
+  piuttosto che di open source è una questione politica piuttosto che
   pratica; i due movimenti concordano infatti sulle licenze considerate
   accettabili, ed hanno obiettivi e mezzi comuni.
 </P>
   La <A TITLE="usi commerciali del software libero, di Alessandro
   Rubini"
   HREF="http://www.it.gnu.org/philosophy/software-libre-commercial-viability.it.html">rilevanza
-  economica</A> del software libero è ancora molto ridotta, ma è in
+  economica</A> del software libero è ancora molto ridotta, ma è in
   fortissima crescita ormai da alcuni anni, e tutto consente di supporre
   che tale crescita <A TITLE="prospettive del software libero, gruppo di
   studio dell'UE"
   tecnici ed economici</A> del software libero.
 </P>
 <P>
-  Ad oggi, il software libero è ampiamente diffuso in ambito accademico,
+  Ad oggi, il software libero è ampiamente diffuso in ambito accademico,
   industriale e fra gli appassionati di calcolatori, soprattutto grazie
   ai sistemi GNU/Linux.  Questi sistemi liberi sono disponibili a costi
   molto bassi, ben inferiori a quelli di analoghi sistemi proprietari.
   buona cultura di base nel campo del software.
 </P>
 <P>
-  In ambito accademico viene molto apprezzata la possibilità di
+  In ambito accademico viene molto apprezzata la possibilità di
   personalizzare ogni parte del sistema, visto che i programmi liberi
-  sono liberamente modificabili (libertà numero uno).  In ambito
-  industriale, si apprezza l'affidabilità dei sistemi liberi, dovuta al
+  sono liberamente modificabili (libertà numero uno).  In ambito
+  industriale, si apprezza l'affidabilità dei sistemi liberi, dovuta al
   fatto che quando un utente corregge un errore in un programma
-  solitamente rende disponibile la correzione agli altri utenti (libertà
+  solitamente rende disponibile la correzione agli altri utenti (libertà
   numero tre).  Gli appassionati di calcolatori apprezzano lo spirito di
   condivisione esistente fra gli utenti di software libero.
 </P>
 <P>
   Ma le implicazioni dell'uso del software libero non sono soltanto
-  tecniche ed economiche, perché il software da tempo ormai è avviato ad
-  occupare un ruolo di primo piano nella nostra vita quotidiana, ed è
-  destinato a cambiare in maniera profonda la società.
+  tecniche ed economiche, perché il software da tempo ormai è avviato ad
+  occupare un ruolo di primo piano nella nostra vita quotidiana, ed è
+  destinato a cambiare in maniera profonda la società.
 </P>
 <P>
-  È per queste ragioni che la nostra libertà futura dipenderà anche
-  dalla capacità di ognuno di noi di controllare il software.  È per
-  queste ragioni che ai tradizionali principi di libertà sessuale, di
-  culto, di movimento, di espressione deve essere affiancata la libertà
-  del software.  È per queste ragioni che la nostra libertà futura
-  dipenderà anche dall'uso di software libero.
+  È per queste ragioni che la nostra libertà futura dipenderà anche
+  dalla capacità di ognuno di noi di controllare il software.  È per
+  queste ragioni che ai tradizionali principi di libertà sessuale, di
+  culto, di movimento, di espressione deve essere affiancata la libertà
+  del software.  È per queste ragioni che la nostra libertà futura
+  dipenderà anche dall'uso di software libero.
 </P>
 
 <P>
   <EM>scritto da <A TITLE="pot@softwarelibero.it"
-  HREF="mailto:pot@softwarelibero.it">Francesco Potortì</A> per l'<A
+  HREF="mailto:pot@softwarelibero.it">Francesco Potortì</A> per l'<A
   TITLE="il sito dell'Associazione Software Libero"
   HREF="http://softwarelibero.it/">Associazione Software
   Libero</A></EM>
 </P>
 <HR NOSHADE>
 <P>
-  Copyright &copy; 2002 Francesco Potortì
+  Copyright &copy; 2002 Francesco Potortì
   <BR>
   Ultima versione ipertestuale disponibile su <A TITLE="versione
   stampabile"
@@ -305,7 +305,7 @@ time-stamp-active: t
 time-stamp-time-zone: "GMT"
 time-stamp-format: "%:y-%02m-%02d"
 time-stamp-line-limit: 30
-time-stamp-start: "ultima\\s-+modifica\\s-+è\\s-+del\\s-+"
+time-stamp-start: "ultima\\s-+modifica\\s-+è\\s-+del\\s-+"
 time-stamp-end: "\\."
 End:
 -->