Paul Eggert [Fri, 29 May 2015 19:42:59 +0000 (12:42 -0700)]
Merge from gnulib
This incorporates the following (Bug#20681):
2015-05-29 acl-permissions: Fix build on Mac OS X and older AIX
2015-05-29 acl-permissions: Fix build on Solaris and Cygwin
* lib/set-permissions.c: Copy from gnulib.
Paul Eggert [Fri, 29 May 2015 04:45:55 +0000 (21:45 -0700)]
Change package test to look for curved quotes
* test/automated/package-test.el (package-test-describe-package)
(package-test-signed): Search for curved single quotes as well as
for grave accent and apostrophe.
Samer Masterson [Thu, 28 May 2015 21:30:31 +0000 (14:30 -0700)]
Show files when `initial-buffer-choice' is non-nil
* startup.el (command-line-1): When Emacs is given a file as an
argument and `initial-buffer-choice' is non-nil, display both the file
and `initial-buffer-choice'. For more than one file, show
`initial-buffer-choice' and *Buffer List*. Refactor display-changing
commands out of the command line arg parser.
(initial-buffer-choice): Clarify docstring.
Eli Zaretskii [Thu, 28 May 2015 18:44:23 +0000 (21:44 +0300)]
Fix last commit
* nt/gnulib.mk (libgnu_a_SOURCES): Add get-permissions.c back.
(gnulib module qcopy-acl): Add back, as it is harmless. This
minimizes differences wrt lib/gnulib.mk.
Eli Zaretskii [Thu, 28 May 2015 17:40:51 +0000 (20:40 +0300)]
Fix the MS-Windows build as followup to gnulib update
* nt/gnulib.mk (libgnu_a_SOURCES): Remove get-permissions.c and
set-permissions.c, as they don't compile on MinGW.
(gnulib module qcopy-acl): Remove, as it needs set-permissions.c.
Paul Eggert [Thu, 28 May 2015 08:19:34 +0000 (01:19 -0700)]
Revert my change to gnus-art.el
* lisp/gnus/gnus-art.el (gnus-button-alist): Revert last change.
It wasn't that important, and it caused a Gnus build to fail. See:
http://www.randomsample.de:4456/builders/emacs-devel/builds/734
Paul Eggert [Thu, 28 May 2015 07:46:59 +0000 (00:46 -0700)]
New minor mode Electric Quote
This lets you easily insert quotes ‘like this’ by typing
quotes `like this', and similarly you can easily insert
quotes “like this” by typing quotes ``like this'' (Bug#20545).
* doc/emacs/basic.texi (Inserting Text):
* doc/emacs/modes.texi (Minor Modes):
* etc/NEWS: Document it.
* doc/emacs/text.texi (Quotation Marks): New section.
* lisp/electric.el (electric-quote-comment)
(electric-quote-string, electric-quote-paragraph):
New custom vars.
(electric--insertable-p)
(electric-quote-post-self-insert-function): New functions.
(electric-quote-mode, electric-quote-local-mode): New minor modes.
* lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
Add curved single quotes to electric-pair-text-pairs.
Set electric-quote-string in this buffer.
Paul Eggert [Thu, 28 May 2015 07:06:13 +0000 (00:06 -0700)]
substitute-command-keys now curves quotes
So, for example, it turns "`abc'" into "‘abc’" (Bug#20385).
* doc/lispref/help.texi (Keys in Documentation):
* etc/NEWS: Document this.
* src/doc.c (Fsubstitute_command_keys): Implement it.
Paul Eggert [Thu, 28 May 2015 00:46:15 +0000 (17:46 -0700)]
Merge from gnulib
This incorporates:
2015-05-27 qacl: Reimplement qset_acl and qcopy_acl (Bug#20666)
2015-05-27 file-has-acl: Split feature tests again (Bug#20667)
2015-05-27 string: fix build failure on BSD/OSX with FORTIFY_SOURCE
2015-05-26 stdio: limit __gnu_printf__ witness to gcc 4.4+
2015-05-26 inttypes: force correct mingw PRIdMAX even without <stdio.h>
2015-05-26 stdio: fix probe on mingw under gcc 5.1
* admin/merge-gnulib (GNULIB_MODULES):
Replace qacl with qcopy-acl, since we don't need the rest of qacl.
* doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h:
* lib/inttypes.in.h, lib/qcopy-acl.c, lib/qset-acl.c:
* lib/string.in.h, m4/acl.m4, m4/stdio_h.m4:
Get latest versions from gnulib.
* lib/get-permissions.c, lib/set-permissions.c: New files.
* lib/gnulib.mk, m4/gnulib-comp.m4:
Regenerate.
* nt/gnulib.mk: Merge lib/gnulib.mk changes by hand.
Artur Malabarba [Tue, 26 May 2015 08:57:17 +0000 (09:57 +0100)]
* lisp/emacs-lisp/package.el: Don't erase tags on refresh
(package-menu--post-refresh): Call `tabulated-list-print' with the
UPDATE argument. This only affects the refresh action, the revert
action still erases tags.
(package-menu-get-status): Change `assq' to `assoc'.
(package-menu--mark-upgrades-1): New function.
(package-menu--mark-upgrades-pending): New variable.
(package-menu-mark-upgrades): Use them to delay marking until
after refresh is done.
(package-menu--post-refresh): Call mark-upgrades-1 if
mark-upgrades-pending is non-nil.
Michael Albinus [Wed, 27 May 2015 13:47:16 +0000 (15:47 +0200)]
Improve tramp-handle-make-auto-save-file-name
* tramp.el (tramp-auto-save-directory): Add :tags.
(tramp-handle-make-auto-save-file-name): Let native
`make-auto-save-file-name' use `auto-save-file-name-transforms',
if `tramp-auto-save-directory' is not set.
Paul Eggert [Tue, 26 May 2015 19:29:38 +0000 (12:29 -0700)]
Handle curved quotes in info files
* lisp/calc/calc-help.el (calc-describe-thing):
* lisp/info.el (Info-find-index-name)
(Info-try-follow-nearest-node, Info-fontify-node):
* lisp/vc/ediff-help.el (ediff-help-for-quick-help):
In info files, process quotes ‘like this’ the same way we process
quotes `like this'. This catches a few places we missed earlier.
Dmitry Gutov [Tue, 26 May 2015 16:28:38 +0000 (19:28 +0300)]
xref-prompt-for-identifier: Use a list value
* lisp/progmodes/xref.el (xref-prompt-for-identifier): Allow list
value, to be interpreted as a list of commands.
(xref--prompt-p): New function.
(xref--read-identifier): Use it.
Eli Zaretskii [Tue, 26 May 2015 15:29:40 +0000 (18:29 +0300)]
Teach MS-Windows font back-end return per-glyph ascent/descent
* src/w32font.h (struct w32_metric_cache): Add ascent and descent
values.
* src/w32font.c (w32font_text_extents): Compute, cache, and
accumulate per-glyph ascent and descent values, instead of copying
global values from the font. If the values are not available from
the font data, i.e., non-TTF fonts, fall back on font-global values.
(compute_metrics): Compute and return per-glyph ascent and descent
values, if returned by GetGlyphOutlineW, falling back on
font-global values. (Bug#20628)
* src/w32term.c (w32_draw_rectangle): Add 1 pixel to width and
height of rectangle to be drawn, to be compatible with
XDrawRectangle. Fixes glyphless-char display as hex codes in a
box, when per-glyph ascent/descent values are used.
Michael Albinus [Tue, 26 May 2015 07:35:38 +0000 (09:35 +0200)]
Fix Bug#20621
* lisp/net/tramp-sh.el (tramp-set-auto-save): Remove it. There
are major modes which set `auto-save-mode' on their own rules;
Tramp shall not overwrite such settings.
Philipp Stephani [Mon, 25 May 2015 21:03:50 +0000 (17:03 -0400)]
* lisp/term/xterm.el: Add gui-get-selection support via OSC-52
(xterm--extra-capabilities-type): Add `getSelection'.
(xterm--query): Add `no-async' argument.
(xterm--init-activate-get-selection): New function.
(terminal-init-xterm): Use it.
(xterm--init-modify-other-keys): Rename from
terminal-init-xterm-modify-other-keys.
(xterm--init-bracketed-paste-mode): Rename from
terminal-init-xterm-bracketed-paste-mode.
(xterm--init-activate-set-selection): Rename from
terminal-init-xterm-activate-set-selection.
(xterm--selection-char): New function.
(gui-backend-set-selection): Use it. Use the &context to only apply
this method in terminals where we enabled the feature.
(gui-backend-get-selection): New method.
Eli Zaretskii [Mon, 25 May 2015 15:08:09 +0000 (18:08 +0300)]
Fix a typo in last commit
* lib-src/etags.c (C_entries): Fix a typo.
* 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/CTAGS.good: Update due to the change in etags.c.
Eli Zaretskii [Mon, 25 May 2015 15:02:21 +0000 (18:02 +0300)]
Fix tagging of class members in C-like OO languages
* lib-src/etags.c (longopts): Add new option --class-qualify and
its shorthand -Q.
(print_help): Add help text for --class-qualify.
(main): Add handling of -Q.
(consider_token, C_entries) <omethodparm>: Append argument types
to Objective C methods only if --class-qualify was specified.
Qualify C++, Objective C, and Java class members with their class
names only if --class-qualify was specified.
(C_entries): If --class-qualify was not specified, remove the
namespace and class qualifiers from tag names of C++ methods.
This allows to use etags.el as xref back-end without the
tag-symbol-match-p method, which greatly increases the number of
potentially false positives. (Bug#20629)
* doc/man/etags.1: Update to document the new --class-qualify
option.
* 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/CTAGS.good: Update due to changes in etags.c.
Artur Malabarba [Sun, 24 May 2015 22:38:53 +0000 (23:38 +0100)]
* lisp/emacs-lisp/tabulated-list.el: New optional print method
(tabulated-list-print): New optional argument, UPDATE. If
non-nil, the list is printed by only adding and deleting the
changed entries, instead of erasing the whole buffer. This method
is much faster when few or no entries have changed.
* doc/lispref/modes.texi (Tabulated List Mode): Document it.
Paul Eggert [Sun, 24 May 2015 21:20:10 +0000 (14:20 -0700)]
Simpilify etags TEX mode scanning
* lib-src/etags.c (TEX_mode, TEX_esc, TEX_opgrp, TEX_clgrp):
Remove static vars.
(TeX_commands): Deduce escapes here instead.
(TEX_LESC, TEX_SESC, TEX_mode): Remove; all uses removed.
This removes the need for a reset_input call.
Paul Eggert [Sun, 24 May 2015 21:20:09 +0000 (14:20 -0700)]
Improve etags I/O error reporting
* lib-src/etags.c:
Don't include sys/types.h and sys/stat.h; no longer needed.
(infilename): New static var.
(process_file_name): Don't call 'stat'. Instead, just open the
file for reading and report any errors. Don't bother making
a copy of the file argument; it's not needed. Be more careful to
use the failing errno when reporting an error.
Quote the real name better (though no perfectly)
when passing it to the shell.
(reset_input): New function, which reports I/O errors.
All uses of 'rewind' changed to use this function.
(perhaps_more_input): New function, which also checks for
I/O errors. All uses of 'feof' changed to use this function.
(analyze_regex): Report an error if fclose fails.
(readline_internal): Report an error if getc fails.
(etags_mktmp): Return an error if close fails.
Paul Eggert [Sat, 23 May 2015 22:18:12 +0000 (15:18 -0700)]
Cleanup etags.c to use locale-independent code
Although this doesn't alter behavior (as etags doesn't use
setlocale), the new version is more clearly locale-independent and
the executable is a bit smaller on my platform.
* lib-src/etags.c: Include <limits.h>, for UCHAR_MAX.
Include <c-ctype.h> instead of <ctype.h>.
(CHARS, CHAR, init, _wht, _nin, _itk, _btk, _etk, white, nonam, endtk)
(begtk, midtk):
Remove; no longer needed.
(iswhite, ISALNUM, ISALPHA, ISDIGIT, ISLOWER, lowcase): Remove.
All callers changed to use c_isspace, c_isalnum, c_isalpha, c_isdigit,
c_islower, c_tolower, respectively.
(notinname, begtoken, intoken, endtoken): Rewrite as functions
instead of macros, and initialize the tables at compile-time
rather than at run-time.
* lisp/menu-bar.el (menu-bar-edit-menu):
Use gui-backend-selection-exists-p.
* lisp/select.el (x-get-clipboard): Use gui-backend-get-selection.
(gui-backend-get-selection): New cl-generic to replace
gui-get-selection method.
(gui-backend-set-selection): New cl-generic to replace
gui-set-selection method.
(gui-selection-owner-p): New cl-generic to replace
gui-selection-owner-p method.
(gui-backend-selection-exists-p): New cl-generic to replace
gui-selection-exists-p method. Adjust all callers.
* lisp/server.el (server-create-window-system-frame): Don't ignore
window-system spec even when unsupported.
* lisp/simple.el (deactivate-mark): Use new gui-backend-* functions.
* lisp/startup.el (handle-args-function, window-system-initialization):
Use cl-defgeneric.
(command-line): Adjust calls accordingly.
* lisp/term/ns-win.el (ns-window-system-initialization): Turn into
a window-system-initialization method.
(handle-args-function, frame-creation-function): Use cl-defmethod.
(gui-set-selection, gui-selection-owner-p, gui-selection-exists-p)
(gui-get-selection): Use cl-defmethod on the new functions instead.
* lisp/term/pc-win.el (w16-get-selection-value): Turn into
a gui-backend-get-selection method.
(gui-selection-exists-p, gui-selection-owner-p, gui-set-selection):
Use cl-defmethod on the new functions instead.
(msdos-window-system-initialization): Turn into
a window-system-initialization method.
(frame-creation-function, handle-args-function): Use cl-defmethod.
* lisp/term/w32-win.el (w32-window-system-initialization): Turn into
a window-system-initialization method.
(handle-args-function, frame-creation-function): Use cl-defmethod.
(gui-set-selection, gui-selection-owner-p, gui-selection-exists-p)
(gui-get-selection): Use cl-defmethod on the new functions instead.
* lisp/term/x-win.el (x-window-system-initialization): Turn into
a window-system-initialization method.
(handle-args-function, frame-creation-function): Use cl-defmethod.
(gui-set-selection, gui-selection-owner-p, gui-selection-exists-p)
(gui-get-selection): Use cl-defmethod on the new functions instead.
* lisp/term/xterm.el (xterm--set-selection): Turn into
a gui-backend-set-selection method.
(package--update-selected-packages): New function.
(package-menu-execute): Use it before starting the transaction,
this way the list of selected packages is updated even when the
transaction fails.
(package-menu--perform-transaction): Don't edit selected-packages.
Eli Zaretskii [Sat, 23 May 2015 08:35:45 +0000 (11:35 +0300)]
Fix etags reading of compressed files
* lib-src/etags.c (O_CLOEXEC) [WINDOWSNT]: Define.
Include fcntl.h, for O_CLOEXEC.
(process_file_name): Don't use 'popen', whose streams cannot be
rewound. Instead, uncompress the file to a temporary file,
created by 'etags_mktmp', and read from that as usual.
(etags_mktmp): New function.
* 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: Update to be consistent with latest
changes in etags.c regarding reading compressed files.
Eli Zaretskii [Sat, 23 May 2015 08:03:30 +0000 (11:03 +0300)]
Fix documentation of forward-line
* src/cmds.c (Fforward_line): Clarify the return value if the line
at end of accessible portion of the buffer has no newline.
* doc/lispref/positions.texi (Text Lines): Document what happens
if the line at end of accessible portion of buffer has no newline.