Paul Eggert [Sat, 19 Jan 2013 18:58:40 +0000 (10:58 -0800)]
* fileio.c: Use O_APPEND to append.
This corresponds better to the natural interpretation of "append",
and avoids the need to open the output file twice, or to invoke
lseek when APPEND is neither nil nor a number.
This relies on POSIX 1003.1-1988 or later, which is OK nowadays.
(Fwrite_region): Simplify. Use O_APPEND instead of opening the
file possibly twice, and lseeking to its end; this avoids the
need to lseek on non-regular files. Do not use O_EXCL and O_TRUNC
at the same time: the combination is never needed and apparently
it doesn't work with DOS_NT.
* image-mode.el (image-next-file, image-previous-file): New commands.
(image-mode-map): Bind them to n and p.
(image-mode--images-in-directory): New helper function.
Chong Yidong [Sat, 19 Jan 2013 10:34:07 +0000 (18:34 +0800)]
* image-mode.el (image-mode-fit-frame): Add a frame argument.
Suggested by Drew Adams. Handle window decorations;
save and restore the old window configuration.
Paul Eggert [Sat, 19 Jan 2013 09:59:51 +0000 (01:59 -0800)]
Allow floating-point file offsets.
Problem reported by Vitalie Spinu in
<http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00411.html>.
* doc/lispref/files.texi (Reading from Files, Writing to Files):
Say that file offsets can be numbers, not just integers.
* src/fileio.c (emacs_lseek): Remove.
(file_offset): New function.
(Finsert_file_contents, Fwrite_region): Use it.
Eli Zaretskii [Sat, 19 Jan 2013 07:13:19 +0000 (09:13 +0200)]
Minor fix in acl_set_file.
src/w32.c (acl_set_file): Treat ERROR_ACCESS_DENIED from
set_file_security as failure due to insufficient privileges.
Reported by Fabrice Popineau <fabrice.popineau@supelec.fr>.
Paul Eggert [Sat, 19 Jan 2013 04:44:34 +0000 (20:44 -0800)]
Work around bug in CIFS and vboxsf file systems.
The bug was observed on Ubuntu operating inside a virtual machine,
editing files mounted via CIFS or vboxsf from the MS Windows 7 host.
The workaround introduces a race condition on non-buggy hosts,
but it's an unlikely race and anyway there's a nearly identical
nearby race that can't be fixed.
* fileio.c (valid_timestamp_file_system, timestamp_file_system):
New static vars.
(Fwrite_region): Test for file system time stamp bug.
(init_fileio): New function.
* lisp.h (init_fileio): Declare it.
* emacs.c (main): Call it.
Dmitry Antipov [Fri, 18 Jan 2013 06:32:12 +0000 (10:32 +0400)]
Fix crash when inserting data from non-regular files. See
http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00406.html
for the error description produced by valgrind.
* fileio.c (read_non_regular): Rename to read_contents.
Free Lisp_Save_Value object used to pass parameters.
(read_non_regular_quit): Rename to read_contents_quit.
(Finsert_file_contents): Redesign internal file reading loop to adjust
gap and end positions after each read and so help make_gap to work
properly. Do not signal an I/O error too early and so do not leave
not yet decoded characters in a buffer, which was the reason of
redisplay crash. Use list2 to build return value. Adjust comments.
Paul Eggert [Fri, 18 Jan 2013 05:12:08 +0000 (21:12 -0800)]
Close a race when statting and reading files.
* fileio.c (Finsert_file_contents): Use open+fstat, not stat+open.
This avoids a race if the file is renamed between stat and open.
This race is not the problem originally noted in Bug#13149;
see <http://bugs.gnu.org/13149#73> and later messages in the thread.
Michael Albinus [Thu, 17 Jan 2013 09:06:47 +0000 (10:06 +0100)]
* autorevert.el (auto-revert-use-notify): In the :set function, do
not modify `kill-buffer-hook'.
(auto-revert-notify-rm-watch): Remove
`auto-revert-notify-rm-watch' from `kill-buffer-hook'.
(auto-revert-notify-add-watch): Do not call
`auto-revert-notify-rm-watch', but add it to a buffer local
`kill-buffer-hook'.
Dmitry Antipov [Thu, 17 Jan 2013 06:29:40 +0000 (10:29 +0400)]
* lisp.h (toplevel): Add comment about using Lisp_Save_Value
objects, related functions and macros.
(make_save_value): Adjust prototype.
(make_save_pointer): New prototype.
(SAFE_NALLOCA): Fix indentation. Use make_save_pointer.
(SAFE_ALLOCA_LISP): Adjust make_save_value usage.
* alloc.c (format_save_value): Rename to make_save_value.
(make_save_pointer): New function.
(record_xmalloc): Use make_save_pointer.
* dired.c, editfns.c, fileio.c, font.c, gtkutil.c, lread.c:
* nsmenu.m, nsterm.m, xfns.c, xmenu.c, xselect.c, keymap.c:
Change users of make_save_value to make_save_pointer.
Likewise for format_save_value and make_save_value.
Dmitry Antipov [Tue, 15 Jan 2013 08:38:07 +0000 (12:38 +0400)]
Some convenient bits to deal with Lisp_Save_Values.
* lisp.h (XSAVE_OBJECT): New macro to extract saved objects.
(allocate_misc): Remove prototype.
(format_save_value): New prototype.
* alloc.c (allocate_misc): Revert back to static.
(format_save_value): New function to build Lisp_Save_Value
object with the specified internal structure.
(make_save_value): Reimplement using format_save_value.
* editfns.c (save_excursion_save): Use format_save_value.
(save_excursion_restore): Use XSAVE_OBJECT.
Stefan Monnier [Tue, 15 Jan 2013 06:05:22 +0000 (01:05 -0500)]
* lisp/emacs-lisp/advice.el (ad-preactivate-advice): Adjust the cleanup to
the use of nadvice.el.
* lisp/emacs-lisp/nadvice.el (advice--tweak): Make it possible for `tweak'
to return an explicit nil.
(advice--remove-function): Change accordingly.
* test/automated/advice-tests.el: Split up. Add advice-test-preactivate.
Michael Mauger [Tue, 15 Jan 2013 03:21:56 +0000 (22:21 -0500)]
* progmodes/sql.el: (sql-imenu-generic-expression):
(sql-mode-font-lock-object-name): Match schema qualified names.
(sql-connect): Use string keys.
(sql-product-interactive): Wait for interpreter prompt.
(sql-comint-oracle): Set process coding based on NLS_LANG.
Dmitry Antipov [Mon, 14 Jan 2013 11:07:50 +0000 (15:07 +0400)]
Fix compilation with GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE.
* eval.c (eval_sub): Protect `form' from being GCed before its
car and cdr becomes protected with the backtrace entry.
Dmitry Antipov [Mon, 14 Jan 2013 09:55:21 +0000 (13:55 +0400)]
Make Lisp_Save_Value more versatile storage for up to four objects.
* lisp.h (toplevel): Enumeration to describe types of saved objects.
(struct Lisp_Save_Value): New layout. Adjust comments.
(XSAVE_POINTER): New macro.
(XSAVE_INTEGER): Likewise.
(allocate_misc): Add prototype.
(free_misc): Likewise.
* alloc.c (allocate_misc): Now global.
(free_misc): Likewise. Adjust comment.
(make_save_value): Use new Lisp_Save_Value layout. Adjust comment.
(free_save_value): Likewise.
(mark_object): Likewise.
* editfns.c (save_excursion_save): Pack everything within
Lisp_Save_Value and so avoid xmalloc.
(save_excursion_restore): Adjust to match new layout. Use free_misc
because we do not allocate extra memory any more. Add eassert.
* print.c (print_object): New code to print Lisp_Save_Value. Do not
rely on valid_lisp_object_p if !GC_MARK_STACK. Adjust comments.
* dired.c, fileio.c, font.c, ftfont.c, gtkutil.c, keymap.c,
* lread.c, nsmenu.m, nsterm.h, xfns.c, xmenu.c, xselect.c:
Use XSAVE_POINTER and XSAVE_INTEGER where appropriate.
Jan Djärv [Sun, 13 Jan 2013 14:29:22 +0000 (15:29 +0100)]
* nsfont.m (LCD_SMOOTHING_MARGIN): New define.
(nsfont_draw): Remove disabling of LCD smoothing.
(ns_glyph_metrics): Add LCD_SMOOTHING_MARGIN to bearings to fix
Bug#11484 with LCD smooting on.
Jan Djärv [Fri, 11 Jan 2013 04:57:45 +0000 (05:57 +0100)]
Introduce scroll-bar-adjust-thumb-portion.
* xterm.c (scroll-bar-adjust-thumb-portion): New variable to
determine whether scroll bar thumb size should be adjusted or
not. Use variable for MOTIF.
* gtkutil.c (scroll-bar-adjust-thumb-portion): Use variable for
GTK.
Stefan Monnier [Sun, 13 Jan 2013 01:23:48 +0000 (20:23 -0500)]
* lisp/jit-lock.el (jit-lock-debug-mode): New minor mode.
(jit-lock--debug-fontifying): New var.
(jit-lock--debug-fontify): New function.
* lisp/subr.el (condition-case-unless-debug): Don't prevent catching the
error, just let the debbugger run.
* lisp/emacs-lisp/timer.el (timer-event-handler): Don't prevent debugging
timer code and don't drop errors silently.
Eli Zaretskii [Sat, 12 Jan 2013 11:25:39 +0000 (13:25 +0200)]
Fix filtering of file notification events in autorevert.el.
lisp/autorevert.el (auto-revert-notify-handler): Fix filtering of
file notification by ACTION. For filtering by file name, compare
only the non-directory part of the file name.
Stefan Monnier [Sat, 12 Jan 2013 03:15:14 +0000 (22:15 -0500)]
* lisp/vc/vc-bzr.el (vc-bzr--sanitize-header): New function.
(vc-bzr-checkin): Use it.
* lisp/vc/log-edit.el (log-edit-extract-headers): Don't presume FUNCTION
will preserve match-data.
Paul Eggert [Sat, 12 Jan 2013 01:15:06 +0000 (17:15 -0800)]
Fix bug with set-time-zone-rule and LOCALTIME_CACHE.
* editfns.c (set_time_zone_rule) [LOCALTIME_CACHE]:
Clear tzvalbuf_in_environ if this workaround is in effect.
Problem and fix reported by Kazuhiro Ito.
Felix H. Dahlke [Fri, 11 Jan 2013 23:24:52 +0000 (18:24 -0500)]
* lisp/progmodes/js.el: Fix multiline declarations's indentation.
(js--declaration-keyword-re): New var.
(js--multi-line-declaration-indentation): New function.
(js--proper-indentation): Use it.
Aaron S. Hawley [Fri, 11 Jan 2013 23:08:55 +0000 (18:08 -0500)]
Disambiguate function and variable references in docstrings.
* lisp/comint.el (comint-history-isearch-message): Fix ambiguous doc
string cross-reference(s).
Michael Albinus [Fri, 11 Jan 2013 22:36:32 +0000 (23:36 +0100)]
* autorevert.el (top): Require 'cl in order to pacify byte compiler.
(auto-revert-notify-rm-watch): Ignore errors.
(auto-revert-notify-add-watch): Ignore errors. Use '(modify) for
inotify, and '(size last-write-time) for w32notify. Set
buffer-local `auto-revert-use-notify' to nil when adding a file
watch fails - this is a fallback to the file modification check.
(auto-revert-notify-event-p, auto-revert-notify-event-descriptor)
(auto-revert-notify-event-action)
(auto-revert-notify-event-file-name): New defuns.
(auto-revert-notify-handler): Use them. Implement first
plausibility checks.
(auto-revert-handler): Handle also `auto-revert-tail-mode'.
Dmitry Antipov [Fri, 11 Jan 2013 13:25:10 +0000 (17:25 +0400)]
Avoid unnecessary byte position calculation for the gap movement.
Since all users of move_gap do CHAR_TO_BYTE for other purposes
anyway, all of them should use move_gap_both instead.
* lisp.h (move_gap): Remove prototype.
* insdel.c (move_gap): Remove.
(move_gap_both): Add eassert.
* editfns.c (Ftranspose_regions): Tweak to use move_gap_both.
* xml.c (parse_region): Likewise.
Dmitry Antipov [Fri, 11 Jan 2013 10:40:54 +0000 (14:40 +0400)]
Use point-max-marker and point-min-marker here and there.
* lisp/emacs-lisp/ert.el (ert-run-test): Use point-max-marker.
* lisp/erc/erc-dcc.el (erc-dcc-chat-setup): Likewise.
* lisp/gnus/gnus-async.el (gnus-async-article-callback): Likewise.
* lisp/erc/erc-dcc.el (erc-dcc-send-file): Use point-min-marker.
* lisp/gnus/gnus-art.el (gnus-mime-display-security): Use point-min-marker
and point-max-marker.
* mml-smime.el (mml-smime-encrypt-to-self): New user option analogous
to mml2015-encrypt-to-self.
(mml-smime-epg-encrypt): Respect mml-smime-encrypt-to-self.
Paul Eggert [Fri, 11 Jan 2013 02:40:58 +0000 (18:40 -0800)]
emacsclient -t should not suspend Emacs server
* lisp.h, sysdep.c (block_tty_out_signal, unblock_tty_out_signal):
New functions.
* term.c (init_tty): Use them instead of rolling our own code.
* sysdep.c (tcsetpgrp_without_stopping): Likewise. Here, this
switches from 'signal' to 'pthread_sigmask', which is safer in
multithreaded applications.
* term.c (Fresume_tty): Don't bother dissociating if O_IGNORE_CTTY,
which has already arranged for that.
(dissociate_if_controlling_tty): If setsid fails, fall back on TIOCNOTTY.
This is the main part of the bug fix.
Paul Eggert [Fri, 11 Jan 2013 07:51:25 +0000 (23:51 -0800)]
Backport typo fix from trunk, for AIX.
* eval.c (mark_backtrace) [BYTE_MARK_STACK]: Remove stray '*'.
This follows up on the 2012-09-29 patch that removed indirection
for the 'function' field. Reported by Sergey Vinokurov in
<http://lists.gnu.org/archive/html/emacs-devel/2012-11/msg00263.html>.
Elias Pipping [Thu, 10 Jan 2013 15:50:04 +0000 (10:50 -0500)]
* lisp/files.el (auto-mode-alist): Use doc-view for djvu files.
* lisp/doc-view.el (doc-view-document->bitmap):
Use doc-view-single-page-converter-function instead of
single-page-converter arg; adjust callers.
Wolfgang Jenkner [Thu, 10 Jan 2013 15:01:35 +0000 (10:01 -0500)]
* lisp/man.el: Handle different "man -k" behaviors. Use utf-8.
(Man-man-k-use-anchor): New var.
(Man-parse-man-k): New function.
(Man-completion-table): Use it.
(man): Flush the completion cache between uses.
* test/automated/man-tests.el: New file.
Michael Albinus [Thu, 10 Jan 2013 14:27:48 +0000 (15:27 +0100)]
* autorevert.el: Add file watch support.
(auto-revert-notify-enabled): New defconst.
(auto-revert-notify-watch-descriptor-hash-list)
(auto-revert-notify-watch-descriptor)
(auto-revert-notify-modified-p): New defvars.
(auto-revert-notify-rm-watch, auto-revert-notify-add-watch)
(auto-revert-notify-handler): New defuns.
(auto-revert-mode, global-auto-revert-mode): Remove file watches
when mode is disabled.
(auto-revert-handler): Check for `auto-revert-notify-modified-p'.
(auto-revert-buffers): Add file watches for active buffers.
Dmitry Antipov [Thu, 10 Jan 2013 10:30:16 +0000 (14:30 +0400)]
Omit buffer_slot_type_mismatch and use generic predicates to enforce
the type of per-buffer values where appropriate.
* src/lisp.h (struct Lisp_Buffer_Objfwd): Rename slottype member to
predicate, which is how it's really used now. Adjust comment.
* src/buffer.h (buffer_slot_type_mismatch): Remove prototype.
* src/buffer.c (buffer_slot_type_mismatch): Remove.
(DEFVAR_PER_BUFFER, defvar_per_buffer): Rename type argument to
predicate. Adjust comment.
(syms_of_buffer): Use Qsymbolp for major-mode. Use Qintegerp for
fill-column, left-margin, tab-width, buffer-saved-size,
left-margin-width, right-margin-width, left-fringe-width,
right-fringe-width, scroll-bar-width and buffer-display-count.
Use Qstringp for default-directory, buffer-file-name,
buffer-file-truename and buffer-auto-save-file-name. Use Qfloatp for
scroll-up-aggressively and scroll-down-aggressively. Use Qnumberp for
line-spacing.
* src/data.c (store_symval_forwarding): Adjust to call the predicate.
* lisp/cus-start.el (toplevel): Only allow float values for
scroll-up-aggressively and scroll-down-aggressively.
Allow any number for line-spacing.