[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117686: Merge from emacs-24; up to r117439
From: |
Glenn Morris |
Subject: |
[Emacs-diffs] trunk r117686: Merge from emacs-24; up to r117439 |
Date: |
Mon, 11 Aug 2014 01:00:15 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117686 [merge]
revision-id: address@hidden
parent: address@hidden
parent: address@hidden
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Sun 2014-08-10 17:59:34 -0700
message:
Merge from emacs-24; up to r117439
added:
test/automated/data/files-bug18141.el.gz
filesbug18141.el.gz-20140811003546-6pd2bkbh31dt12ov-1
modified:
ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1538
configure.ac
configure.in-20091113204419-o5vbwnq5f7feedwu-783
etc/tutorials/TUTORIAL.fr
tutorial.fr-20091113204419-o5vbwnq5f7feedwu-5171
lib/save-cwd.c savecwd.c-20130201062823-w76pgdl107cutopz-9
lib/save-cwd.h savecwd.h-20130201062823-w76pgdl107cutopz-10
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/files.el files.el-20091113204419-o5vbwnq5f7feedwu-265
lisp/info.el info.el-20091113204419-o5vbwnq5f7feedwu-261
lisp/mouse.el mouse.el-20091113204419-o5vbwnq5f7feedwu-123
lisp/simple.el simple.el-20091113204419-o5vbwnq5f7feedwu-403
lisp/window.el window.el-20091113204419-o5vbwnq5f7feedwu-94
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/buffer.c buffer.c-20091113204419-o5vbwnq5f7feedwu-264
src/coding.c coding.c-20091113204419-o5vbwnq5f7feedwu-1077
src/fileio.c fileio.c-20091113204419-o5vbwnq5f7feedwu-210
src/fontset.c fontset.c-20091113204419-o5vbwnq5f7feedwu-1079
src/window.c window.c-20091113204419-o5vbwnq5f7feedwu-231
test/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-8588
test/automated/files.el files.el-20120808073143-2ikns3brqscsycpr-1
=== modified file 'ChangeLog'
--- a/ChangeLog 2014-08-10 16:23:05 +0000
+++ b/ChangeLog 2014-08-11 00:59:34 +0000
@@ -1,3 +1,16 @@
+2014-08-11 Paul Eggert <address@hidden>
+
+ Don't prevent random file systems from being unmounted (Bug#18232).
+ This fix relies on having the 'fchdir' function, and on having
+ "." be searchable (or at least readable, on platforms lacking O_SEARCH),
+ but that's good enough to handle the vast majority of cases and the
+ remaining folks can just live with the annoyance of file systems
+ that occasionally can't be unmounted.
+ * configure.ac (fchdir): New function to check for.
+ * lib/save-cwd.c: Copy from gnulib, except omit the part that
+ allocates memory, since that can cause problems in Emacs.
+ * lib/save-cwd.h: Copy from gnulib.
+
2014-08-10 Eli Zaretskii <address@hidden>
* config.bat: Fix some confusing wording.
=== modified file 'configure.ac'
--- a/configure.ac 2014-08-02 21:50:13 +0000
+++ b/configure.ac 2014-08-11 00:59:34 +0000
@@ -3547,7 +3547,7 @@
OLD_LIBS=$LIBS
LIBS="$LIB_PTHREAD $LIB_MATH $LIBS"
-AC_CHECK_FUNCS(accept4 gethostname \
+AC_CHECK_FUNCS(accept4 fchdir gethostname \
getrusage get_current_dir_name \
lrand48 random rint \
select getpagesize setlocale \
=== modified file 'etc/tutorials/TUTORIAL.fr'
--- a/etc/tutorials/TUTORIAL.fr 2014-03-10 14:05:54 +0000
+++ b/etc/tutorials/TUTORIAL.fr 2014-08-08 05:20:52 +0000
@@ -698,7 +698,7 @@
proposera de sauvegarder tous les fichiers modifiés avant de quitter
Emacs).
-Si vous utiliser un affichage graphique, vous n'avez pas besoin de
+Si vous utilisez un affichage graphique, vous n'avez pas besoin de
commande spéciale pour vous déplacer d'Emacs à une autre application.
Vous pouvez le faire à l'aide de la souris ou avec les commandes du
gestionnaire de fenêtres. Cependant, si vous utilisez un terminal
@@ -1143,7 +1143,7 @@
>> Faites C-x 1 pour supprimer la fenêtre d'aide.
C-h i Manuels en ligne (alias Info). Cette commande vous place dans
- un tampon spéciale, appelé « *info* », où vous pouvez
+ un tampon spécial, appelé « *info* », où vous pouvez
lire les manuels en ligne des paquetages installés sur
votre système. Faites m emacs <Entrée> pour lire le
manuel d'Emacs. Si vous n'avez jamais utilisé Info
=== modified file 'lib/save-cwd.c'
--- a/lib/save-cwd.c 2013-02-01 06:30:51 +0000
+++ b/lib/save-cwd.c 2014-08-10 21:06:07 +0000
@@ -1,3 +1,89 @@
+/* save-cwd.c -- Save and restore current working directory.
+
+ Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2014 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Gnulib needs to save and restore the current working directory to
+ fully emulate functions like fstatat. But Emacs doesn't care what
+ the current working directory is; it always uses absolute file
+ names. This module replaces the Gnulib module by omitting the code
+ that Emacs does not need. */
+
#include <config.h>
-#define SAVE_CWD_INLINE _GL_EXTERN_INLINE
+
#include "save-cwd.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Record the location of the current working directory in CWD so that
+ the program may change to other directories and later use restore_cwd
+ to return to the recorded location. This function may allocate
+ space using malloc (via getcwd) or leave a file descriptor open;
+ use free_cwd to perform the necessary free or close. Upon failure,
+ no memory is allocated, any locally opened file descriptors are
+ closed; return non-zero -- in that case, free_cwd need not be
+ called, but doing so is ok. Otherwise, return zero.
+
+ The _raison d'etre_ for this interface is that the working directory
+ is sometimes inaccessible, and getcwd is not robust or as efficient.
+ So, we prefer to use the open/fchdir approach, but fall back on
+ getcwd if necessary. This module works for most cases with just
+ the getcwd-lgpl module, but to be truly robust, use the getcwd module.
+
+ Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin,
+ SCO Xenix. Also, SunOS 4 and Irix 5.3 provide the function, yet it
+ doesn't work for partitions on which auditing is enabled. If
+ you're still using an obsolete system with these problems, please
+ send email to the maintainer of this code. */
+
+#if !defined HAVE_FCHDIR && !defined fchdir
+# define fchdir(fd) (-1)
+#endif
+
+int
+save_cwd (struct saved_cwd *cwd)
+{
+ cwd->desc = open (".", O_SEARCH | O_CLOEXEC);
+ /* The 'name' member is present only to minimize differences from
+ gnulib. Initialize it to zero, if only to simplify debugging. */
+ cwd->name = 0;
+ return 0;
+}
+
+/* Change to recorded location, CWD, in directory hierarchy.
+ Upon failure, return -1 (errno is set by chdir or fchdir).
+ Upon success, return zero. */
+
+int
+restore_cwd (const struct saved_cwd *cwd)
+{
+ /* Restore the previous directory if possible, to avoid tying down
+ the file system of the new directory (Bug#18232).
+ Don't worry if fchdir fails, as Emacs doesn't care what the
+ working directory is. The fchdir call is inside an 'if' merely to
+ pacify compilers that complain if fchdir's return value is ignored. */
+ if (fchdir (cwd->desc) == 0)
+ return 0;
+
+ return 0;
+}
+
+void
+free_cwd (struct saved_cwd *cwd)
+{
+ close (cwd->desc);
+}
=== modified file 'lib/save-cwd.h'
--- a/lib/save-cwd.h 2014-01-01 07:43:34 +0000
+++ b/lib/save-cwd.h 2014-08-10 20:40:57 +0000
@@ -1,6 +1,7 @@
-/* Do not save and restore the current working directory.
+/* Save and restore current working directory.
- Copyright 2013-2014 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997-1998, 2003, 2009-2014 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,32 +16,19 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-/* Gnulib needs to save and restore the current working directory to
- fully emulate functions like fstatat. But Emacs doesn't care what
- the current working directory is; it always uses absolute file
- names. This module replaces the Gnulib module by omitting the code
- that Emacs does not need. */
+/* Written by Jim Meyering. */
#ifndef SAVE_CWD_H
-#define SAVE_CWD_H 1
-
-_GL_INLINE_HEADER_BEGIN
-#ifndef SAVE_CWD_INLINE
-# define SAVE_CWD_INLINE _GL_INLINE
-#endif
-
-struct saved_cwd { int desc; };
-
-SAVE_CWD_INLINE int
-save_cwd (struct saved_cwd *cwd)
-{
- cwd->desc = -1;
- return 0;
-}
-
-SAVE_CWD_INLINE int restore_cwd (struct saved_cwd const *cwd) { return 0; }
-SAVE_CWD_INLINE void free_cwd (struct saved_cwd *cwd) { }
-
-_GL_INLINE_HEADER_END
-
-#endif
+# define SAVE_CWD_H 1
+
+struct saved_cwd
+ {
+ int desc;
+ char *name;
+ };
+
+int save_cwd (struct saved_cwd *cwd);
+int restore_cwd (const struct saved_cwd *cwd);
+void free_cwd (struct saved_cwd *cwd);
+
+#endif /* SAVE_CWD_H */
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-08-11 00:50:31 +0000
+++ b/lisp/ChangeLog 2014-08-11 00:59:34 +0000
@@ -1,3 +1,41 @@
+2014-08-11 Glenn Morris <address@hidden>
+
+ * files.el (basic-save-buffer-2): Revert 2013-01-31 change, which
+ chose coding system for writing before backing up, since it causes
+ a more serious problem than the one it solves. (Closes Bug#18141,
+ reopens Bug#13522.)
+
+2014-08-11 Martin Rudalics <address@hidden>
+
+ * window.el (window-total-size): Make doc-string more self-contained.
+
+ * window.el (display-buffer-below-selected): Restore original
+ behavior if buffer is already displayed in the window below the
+ selected one (Bug#18181).
+
+2014-08-11 Stefan Monnier <address@hidden>
+
+ * mouse.el (mouse--down-1-maybe-follows-link): Don't convert the down
+ event (bug#18212).
+
+2014-08-11 Eli Zaretskii <address@hidden>
+
+ * info.el (info): Doc fix.
+
+2014-08-11 Stefan Monnier <address@hidden>
+
+ * info.el (Info-mode-map): Override a global down-mouse-2 binding
+ (bug#18212).
+
+2014-08-11 Eli Zaretskii <address@hidden>
+
+ * simple.el (default-line-height): A floating-point value of
+ line-spacing means a fraction of the default frame font's height,
+ not of the font currently used by the 'default' face.
+ Truncate the pixel value, like the display engine does.
+ (window-screen-lines): Use window-inside-pixel-edges for
+ determining the window height in pixels. (Bug#18195)
+
2014-08-11 Grégoire Jadi <address@hidden>
* leim/quail/latin-post.el: Transform " __" into " _". (Bug#18023)
@@ -462,8 +500,8 @@
(python-shell-output-filter): Fix comment typo.
Fix Python shell prompts detection for remote hosts.
- * progmodes/python.el (python-shell-prompt-detect): Replace
- call-process with process-file and make it more robust.
+ * progmodes/python.el (python-shell-prompt-detect):
+ Replace call-process with process-file and make it more robust.
Autodetect Python shell prompts. (Bug#17370)
* progmodes/python.el:
=== modified file 'lisp/files.el'
--- a/lisp/files.el 2014-08-07 11:49:36 +0000
+++ b/lisp/files.el 2014-08-11 00:59:34 +0000
@@ -4759,7 +4759,7 @@
;; This returns a value (MODES EXTENDED-ATTRIBUTES BACKUPNAME), like
;; backup-buffer.
(defun basic-save-buffer-2 ()
- (let (tempsetmodes setmodes writecoding)
+ (let (tempsetmodes setmodes)
(if (not (file-writable-p buffer-file-name))
(let ((dir (file-name-directory buffer-file-name)))
(if (not (file-directory-p dir))
@@ -4775,14 +4775,6 @@
buffer-file-name)))
(setq tempsetmodes t)
(error "Attempt to save to a file which you aren't allowed to
write"))))))
- ;; This may involve prompting, so do it now before backing up the file.
- ;; Otherwise there can be a delay while the user answers the
- ;; prompt during which the original file has been renamed. (Bug#13522)
- (setq writecoding
- ;; Args here should match write-region call below around
- ;; which we use writecoding.
- (choose-write-coding-system nil nil buffer-file-name nil t
- buffer-file-truename))
(or buffer-backed-up
(setq setmodes (backup-buffer)))
(let* ((dir (file-name-directory buffer-file-name))
@@ -4864,11 +4856,10 @@
(logior (car setmodes) 128))))))
(let (success)
(unwind-protect
+ (progn
;; Pass in nil&nil rather than point-min&max to indicate
;; we're saving the buffer rather than just a region.
;; write-region-annotate-functions may make us of it.
- (let ((coding-system-for-write writecoding)
- (coding-system-require-warning nil))
(write-region nil nil
buffer-file-name nil t buffer-file-truename)
(setq success t))
=== modified file 'lisp/info.el'
--- a/lisp/info.el 2014-06-25 10:36:51 +0000
+++ b/lisp/info.el 2014-08-11 00:59:34 +0000
@@ -774,8 +774,7 @@
In interactive use, a non-numeric prefix argument directs
this command to read a file name from the minibuffer.
-A numeric prefix argument N selects an Info buffer named
-\"*info*<%s>\".
+A numeric prefix argument of N selects an Info buffer named \"*info*<N>\".
The search path for Info files is in the variable `Info-directory-list'.
The top-level Info directory is made by combining all the files named `dir'
@@ -4009,6 +4008,7 @@
(define-key map "," 'Info-index-next)
(define-key map "\177" 'Info-scroll-down)
(define-key map [mouse-2] 'Info-mouse-follow-nearest-node)
+ (define-key map [down-mouse-2] 'ignore) ;Override potential global binding.
(define-key map [follow-link] 'mouse-face)
(define-key map [XF86Back] 'Info-history-back)
(define-key map [XF86Forward] 'Info-history-forward)
=== modified file 'lisp/mouse.el'
--- a/lisp/mouse.el 2014-07-21 01:38:21 +0000
+++ b/lisp/mouse.el 2014-08-11 00:59:34 +0000
@@ -94,15 +94,14 @@
(defun mouse--down-1-maybe-follows-link (&optional _prompt)
"Turn `mouse-1' events into `mouse-2' events if follows-link.
Expects to be bound to `down-mouse-1' in `key-translation-map'."
- (if (or (null mouse-1-click-follows-link)
- (not (eq (if (eq mouse-1-click-follows-link 'double)
- 'double-down-mouse-1 'down-mouse-1)
- (car-safe last-input-event)))
- (not (mouse-on-link-p (event-start last-input-event)))
- (and (not mouse-1-click-in-non-selected-windows)
- (not (eq (selected-window)
- (posn-window (event-start last-input-event))))))
- nil
+ (when (and mouse-1-click-follows-link
+ (eq (if (eq mouse-1-click-follows-link 'double)
+ 'double-down-mouse-1 'down-mouse-1)
+ (car-safe last-input-event))
+ (mouse-on-link-p (event-start last-input-event))
+ (or mouse-1-click-in-non-selected-windows
+ (eq (selected-window)
+ (posn-window (event-start last-input-event)))))
(let ((this-event last-input-event)
(timedout
(sit-for (if (numberp mouse-1-click-follows-link)
@@ -118,19 +117,14 @@
'double-mouse-1 'mouse-1))
;; Turn the mouse-1 into a mouse-2 to follow links.
(let ((newup (if (eq mouse-1-click-follows-link 'double)
- 'double-mouse-2 'mouse-2))
- (newdown (if (eq mouse-1-click-follows-link 'double)
- 'double-down-mouse-2 'down-mouse-2)))
+ 'double-mouse-2 'mouse-2)))
;; If mouse-2 has never been done by the user, it doesn't have
;; the necessary property to be interpreted correctly.
- (put newup 'event-kind (get (car event) 'event-kind))
- (put newdown 'event-kind (get (car this-event) 'event-kind))
+ (unless (get newup 'event-kind)
+ (put newup 'event-kind (get (car event) 'event-kind)))
(push (cons newup (cdr event)) unread-command-events)
- ;; Modify the event in place, so read-key-sequence doesn't
- ;; generate a second fake prefix key (see fake_prefixed_keys in
- ;; src/keyboard.c).
- (setcar this-event newdown)
- (vector this-event))
+ ;; Don't change the down event, only the up-event (bug#18212).
+ nil)
(push event unread-command-events)
nil))))))
=== modified file 'lisp/simple.el'
--- a/lisp/simple.el 2014-07-08 08:27:46 +0000
+++ b/lisp/simple.el 2014-08-11 00:59:34 +0000
@@ -5140,7 +5140,7 @@
0)
0)))
(if (floatp lsp)
- (setq lsp (* dfh lsp)))
+ (setq lsp (truncate (* (frame-char-height) lsp))))
(+ dfh lsp)))
(defun window-screen-lines ()
@@ -5152,10 +5152,9 @@
for `line-spacing', if any, defined for the window's buffer or frame.
The value is a floating-point number."
- (let ((canonical (window-text-height))
- (fch (frame-char-height))
+ (let ((edges (window-inside-pixel-edges))
(dlh (default-line-height)))
- (/ (* (float canonical) fch) dlh)))
+ (/ (float (- (nth 3 edges) (nth 1 edges))) dlh)))
;; Returns non-nil if partial move was done.
(defun line-move-partial (arg noerror to-end)
=== modified file 'lisp/window.el'
--- a/lisp/window.el 2014-08-07 14:34:06 +0000
+++ b/lisp/window.el 2014-08-11 00:59:34 +0000
@@ -1155,8 +1155,17 @@
WINDOW must be a valid window and defaults to the selected one.
If HORIZONTAL is omitted or nil, return the total height of
-WINDOW, in lines, like `window-total-height'. Otherwise return
-the total width, in columns, like `window-total-width'.
+WINDOW, in lines. If WINDOW is live, its total height includes,
+in addition to the height of WINDOW's text, the heights of
+WINDOW's mode and header line and a bottom divider, if any.
+
+If HORIZONTAL is non-nil, return the total width of WINDOW, in
+columns. If WINDOW is live, its total width includes, in
+addition to the width of WINDOW's text, the widths of WINDOW's
+fringes, margins, scroll bars and its right divider, if any.
+
+If WINDOW is internal, return the respective size of the screen
+areas spanned by its children.
Optional argument ROUND is handled as for `window-total-height'
and `window-total-width'."
@@ -6440,7 +6449,10 @@
This either splits the selected window or reuses the window below
the selected one."
(let (window)
- (or (and (not (frame-parameter nil 'unsplittable))
+ (or (and (setq window (window-in-direction 'below))
+ (eq buffer (window-buffer window))
+ (window--display-buffer buffer window 'reuse alist))
+ (and (not (frame-parameter nil 'unsplittable))
(let ((split-height-threshold 0)
split-width-threshold)
(setq window (window--try-to-split-window (selected-window)
alist)))
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2014-08-10 16:28:36 +0000
+++ b/src/ChangeLog 2014-08-11 00:59:34 +0000
@@ -1,3 +1,33 @@
+2014-08-11 Glenn Morris <address@hidden>
+
+ * fileio.c: Revert 2013-01-31 change, which chose coding system for
+ writing before backing up, since it causes a more serious problem
+ than the one it solves. (Closes Bug#18141, reopens Bug#13522.)
+ (choose_write_coding_system): No longer callable from Lisp.
+ Move last piece back here from Fwrite_region.
+ (Fwrite_region, syms_of_fileio): Update for above changes.
+
+2014-08-11 Martin Rudalics <address@hidden>
+
+ * window.c (Fwindow_valid_p): Fix doc-string (Bug#18194).
+ (Fwindow_new_total, Fwindow_normal_size, Fwindow_new_normal)
+ (Fwindow_new_pixel, Fset_window_new_pixel)
+ (Fset_window_new_total, Fset_window_new_normal)
+ (Fwindow_resize_apply): Fix doc-strings (see Bug#18112).
+ See also:
+ http://lists.gnu.org/archive/html/bug-gnu-emacs/2014-08/msg00287.html
+
+2014-08-11 Eli Zaretskii <address@hidden>
+
+ * fontset.c (Finternal_char_font): Recompute basic faces if the
+ frame's face cache was cleared. (Bug#18162)
+
+2014-08-11 Dmitry Antipov <address@hidden>
+
+ Fix bug with uninitialized undo list of an indirect buffer (Bug#18180).
+ * buffer.c (Fmake_indirect_buffer): Initialize undo list with the
+ base buffer's undo list.
+
2014-08-10 Reuben Thomas <address@hidden>
Fix a couple of recent inadvertent breaks of the MSDOS port.
=== modified file 'src/buffer.c'
--- a/src/buffer.c 2014-07-27 13:21:30 +0000
+++ b/src/buffer.c 2014-08-11 00:59:34 +0000
@@ -826,6 +826,9 @@
set_string_intervals (name, NULL);
bset_name (b, name);
+ /* An indirect buffer shares undo list of its base (Bug#18180). */
+ bset_undo_list (b, BVAR (b->base_buffer, undo_list));
+
reset_buffer (b);
reset_buffer_local_variables (b, 1);
=== modified file 'src/coding.c'
--- a/src/coding.c 2014-07-10 04:35:55 +0000
+++ b/src/coding.c 2014-08-11 00:59:34 +0000
@@ -1190,8 +1190,8 @@
#define UTF_8_BOM_2 0xBB
#define UTF_8_BOM_3 0xBF
-/* Unlike the other detect_coding_XXX, this function counts number of
- characters and check EOL format. */
+/* Unlike the other detect_coding_XXX, this function counts the number
+ of characters and checks the EOL format. */
static bool
detect_coding_utf_8 (struct coding_system *coding,
@@ -11265,7 +11265,7 @@
DEFVAR_BOOL ("disable-ascii-optimization", disable_ascii_optimization,
doc: /* If non-nil, Emacs does not optimize code decoder for
ASCII files.
-Internal use only. Removed after the experimental optimizer gets stable. */);
+Internal use only. Remove after the experimental optimizer becomes stable.
*/);
disable_ascii_optimization = 0;
DEFVAR_LISP ("translation-table-for-input", Vtranslation_table_for_input,
=== modified file 'src/fileio.c'
--- a/src/fileio.c 2014-07-26 13:17:25 +0000
+++ b/src/fileio.c 2014-08-11 00:59:34 +0000
@@ -323,7 +323,6 @@
static Lisp_Object Qset_file_acl;
static Lisp_Object Qfile_newer_than_file_p;
Lisp_Object Qinsert_file_contents;
-static Lisp_Object Qchoose_write_coding_system;
Lisp_Object Qwrite_region;
static Lisp_Object Qverify_visited_file_modtime;
static Lisp_Object Qset_visited_file_modtime;
@@ -4525,24 +4524,14 @@
/* Decide the coding-system to encode the data with. */
-DEFUN ("choose-write-coding-system", Fchoose_write_coding_system,
- Schoose_write_coding_system, 3, 6, 0,
- doc: /* Choose the coding system for writing a file.
-Arguments are as for `write-region'.
-This function is for internal use only. It may prompt the user. */ )
- (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
- Lisp_Object append, Lisp_Object visit, Lisp_Object lockname)
+static Lisp_Object
+choose_write_coding_system (Lisp_Object start, Lisp_Object end, Lisp_Object
filename,
+ Lisp_Object append, Lisp_Object visit, Lisp_Object
lockname,
+ struct coding_system *coding)
{
Lisp_Object val;
Lisp_Object eol_parent = Qnil;
- /* Mimic write-region behavior. */
- if (NILP (start))
- {
- XSETFASTINT (start, BEGV);
- XSETFASTINT (end, ZV);
- }
-
if (auto_saving
&& NILP (Fstring_equal (BVAR (current_buffer, filename),
BVAR (current_buffer, auto_save_file_name))))
@@ -4635,6 +4624,10 @@
}
val = coding_inherit_eol_type (val, eol_parent);
+ setup_coding_system (val, coding);
+
+ if (!STRINGP (start) && !NILP (BVAR (current_buffer, selective_display)))
+ coding->mode |= CODING_MODE_SELECTIVE_DISPLAY;
return val;
}
@@ -4803,14 +4796,9 @@
We used to make this choice before calling build_annotations, but that
leads to problems when a write-annotate-function takes care of
unsavable chars (as was the case with X-Symbol). */
- Vlast_coding_system_used =
- Fchoose_write_coding_system (start, end, filename,
- append, visit, lockname);
-
- setup_coding_system (Vlast_coding_system_used, &coding);
-
- if (!STRINGP (start) && !NILP (BVAR (current_buffer, selective_display)))
- coding.mode |= CODING_MODE_SELECTIVE_DISPLAY;
+ Vlast_coding_system_used
+ = choose_write_coding_system (start, end, filename,
+ append, visit, lockname, &coding);
if (open_and_close_file && !auto_saving)
{
@@ -5829,7 +5817,6 @@
DEFSYM (Qset_file_acl, "set-file-acl");
DEFSYM (Qfile_newer_than_file_p, "file-newer-than-file-p");
DEFSYM (Qinsert_file_contents, "insert-file-contents");
- DEFSYM (Qchoose_write_coding_system, "choose-write-coding-system");
DEFSYM (Qwrite_region, "write-region");
DEFSYM (Qverify_visited_file_modtime, "verify-visited-file-modtime");
DEFSYM (Qset_visited_file_modtime, "set-visited-file-modtime");
@@ -6068,7 +6055,6 @@
defsubr (&Sdefault_file_modes);
defsubr (&Sfile_newer_than_file_p);
defsubr (&Sinsert_file_contents);
- defsubr (&Schoose_write_coding_system);
defsubr (&Swrite_region);
defsubr (&Scar_less_than_car);
defsubr (&Sverify_visited_file_modtime);
=== modified file 'src/fontset.c'
--- a/src/fontset.c 2014-06-19 16:52:20 +0000
+++ b/src/fontset.c 2014-08-11 00:59:34 +0000
@@ -1843,6 +1843,10 @@
return Qnil;
if (!FRAME_WINDOW_P (f))
return Qnil;
+ /* We need the basic faces to be valid below, so recompute them if
+ some code just happened to clear the face cache. */
+ if (FRAME_FACE_CACHE (f)->used == 0)
+ recompute_basic_faces (f);
face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c, pos, Qnil);
face = FACE_FROM_ID (f, face_id);
if (face->font)
=== modified file 'src/window.c'
--- a/src/window.c 2014-08-04 16:47:27 +0000
+++ b/src/window.c 2014-08-11 00:59:34 +0000
@@ -329,7 +329,7 @@
DEFUN ("window-valid-p", Fwindow_valid_p, Swindow_valid_p, 1, 1, 0,
doc: /* Return t if OBJECT is a valid window and nil otherwise.
A valid window is either a window that displays a buffer or an internal
-window. Deleted windows are not live. */)
+window. Windows that have been deleted are not valid. */)
(Lisp_Object object)
{
return WINDOW_VALID_P (object) ? Qt : Qnil;
@@ -810,7 +810,12 @@
DEFUN ("window-new-total", Fwindow_new_total, Swindow_new_total, 0, 1, 0,
doc: /* Return the new total size of window WINDOW.
-WINDOW must be a valid window and defaults to the selected one. */)
+WINDOW must be a valid window and defaults to the selected one.
+
+The new total size of WINDOW is the value set by the last call of
+`set-window-new-total' for WINDOW. If it is valid, it will be shortly
+installed as WINDOW's total height (see `window-total-height') or total
+width (see `window-total-width'). */)
(Lisp_Object window)
{
return decode_valid_window (window)->new_total;
@@ -819,7 +824,25 @@
DEFUN ("window-normal-size", Fwindow_normal_size, Swindow_normal_size, 0, 2, 0,
doc: /* Return the normal height of window WINDOW.
WINDOW must be a valid window and defaults to the selected one.
-If HORIZONTAL is non-nil, return the normal width of WINDOW. */)
+If HORIZONTAL is non-nil, return the normal width of WINDOW.
+
+The normal height of a frame's root window or a window that is
+horizontally combined (a window that has a left or right sibling) is
+1.0. The normal height of a window that is vertically combined (has a
+sibling above or below) is the fraction of the window's height with
+respect to its parent. The sum of the normal heights of all windows in a
+vertical combination equals 1.0.
+
+Similarly, the normal width of a frame's root window or a window that is
+vertically combined equals 1.0. The normal width of a window that is
+horizontally combined is the fraction of the window's width with respect
+to its parent. The sum of the normal widths of all windows in a
+horizontal combination equals 1.0.
+
+The normal sizes of windows are used to restore the proportional sizes
+of windows after they have been shrunk to their minimum sizes; for
+example when a frame is temporarily made very small and afterwards gets
+re-enlarged to its previous size. */)
(Lisp_Object window, Lisp_Object horizontal)
{
struct window *w = decode_valid_window (window);
@@ -829,7 +852,11 @@
DEFUN ("window-new-normal", Fwindow_new_normal, Swindow_new_normal, 0, 1, 0,
doc: /* Return new normal size of window WINDOW.
-WINDOW must be a valid window and defaults to the selected one. */)
+WINDOW must be a valid window and defaults to the selected one.
+
+The new normal size of WINDOW is the value set by the last call of
+`set-window-new-normal' for WINDOW. If valid, it will be shortly
+installed as WINDOW's normal size (see `window-normal-size'). */)
(Lisp_Object window)
{
return decode_valid_window (window)->new_normal;
@@ -837,7 +864,12 @@
DEFUN ("window-new-pixel", Fwindow_new_pixel, Swindow_new_pixel, 0, 1, 0,
doc: /* Return new pixel size of window WINDOW.
-WINDOW must be a valid window and defaults to the selected one. */)
+WINDOW must be a valid window and defaults to the selected one.
+
+The new pixel size of WINDOW is the value set by the last call of
+`set-window-new-pixel' for WINDOW. If it is valid, it will be shortly
+installed as WINDOW's pixel height (see `window-pixel-height') or pixel
+width (see `window-pixel-width'). */)
(Lisp_Object window)
{
return decode_valid_window (window)->new_pixel;
@@ -3705,6 +3737,10 @@
Optional argument ADD non-nil means add SIZE to the new pixel size of
WINDOW and return the sum.
+The new pixel size of WINDOW, if valid, will be shortly installed as
+WINDOW's pixel height (see `window-pixel-height') or pixel width (see
+`window-pixel-width').
+
Note: This function does not operate on any child windows of WINDOW. */)
(Lisp_Object window, Lisp_Object size, Lisp_Object add)
{
@@ -3729,6 +3765,10 @@
Optional argument ADD non-nil means add SIZE to the new total size of
WINDOW and return the sum.
+The new total size of WINDOW, if valid, will be shortly installed as
+WINDOW's total height (see `window-total-height') or total width (see
+`window-total-width').
+
Note: This function does not operate on any child windows of WINDOW. */)
(Lisp_Object window, Lisp_Object size, Lisp_Object add)
{
@@ -3748,6 +3788,9 @@
WINDOW must be a valid window and defaults to the selected one.
Return SIZE.
+The new normal size of WINDOW, if valid, will be shortly installed as
+WINDOW's normal size (see `window-normal-size').
+
Note: This function does not operate on any child windows of WINDOW. */)
(Lisp_Object window, Lisp_Object size)
{
@@ -4012,9 +4055,14 @@
Optional argument HORIZONTAL omitted or nil means apply requested
height values. HORIZONTAL non-nil means apply requested width values.
-This function checks whether the requested values sum up to a valid
-window layout, recursively assigns the new sizes of all child windows
-and calculates and assigns the new start positions of these windows.
+The requested size values are those set by `set-window-new-pixel' and
+`set-window-new-normal'. This function checks whether the requested
+values sum up to a valid window layout, recursively assigns the new
+sizes of all child windows and calculates and assigns the new start
+positions of these windows.
+
+Return t if the requested values have been applied correctly, nil
+otherwise.
Note: This function does not check any of `window-fixed-size-p',
`window-min-height' or `window-min-width'. All these checks have to
=== modified file 'test/ChangeLog'
--- a/test/ChangeLog 2014-08-11 00:50:31 +0000
+++ b/test/ChangeLog 2014-08-11 00:59:34 +0000
@@ -1,3 +1,9 @@
+2014-08-11 Glenn Morris <address@hidden>
+
+ * automated/data/files-bug18141.el.gz: New file.
+ * automated/files.el (files-test-bug-18141-file):
+ New variable and test. (Bug#18141)
+
2014-08-10 Ulf Jasper <address@hidden>
Enumerate evaluated sexp diary entries (Bug#7911).
=== added file 'test/automated/data/files-bug18141.el.gz'
Binary files a/test/automated/data/files-bug18141.el.gz 1970-01-01 00:00:00
+0000 and b/test/automated/data/files-bug18141.el.gz 2014-08-11 00:38:19
+0000 differ
=== modified file 'test/automated/files.el'
--- a/test/automated/files.el 2014-01-01 07:43:34 +0000
+++ b/test/automated/files.el 2014-08-11 00:38:19 +0000
@@ -148,6 +148,24 @@
(should (file-test--do-local-variables-test str subtest))))))
(ad-disable-advice 'hack-local-variables-confirm 'around 'files-test)))
+(defvar files-test-bug-18141-file
+ (expand-file-name "data/files-bug18141.el.gz" (getenv
"EMACS_TEST_DIRECTORY"))
+ "Test file for bug#18141.")
+
+(ert-deftest files-test-bug-18141 ()
+ "Test for http://debbugs.gnu.org/18141 ."
+ (skip-unless (executable-find "gzip"))
+ (let ((tempfile (make-temp-file "files-test-bug-18141" nil ".gz")))
+ (unwind-protect
+ (progn
+ (copy-file files-test-bug-18141-file tempfile t)
+ (with-current-buffer (find-file-noselect tempfile)
+ (set-buffer-modified-p t)
+ (save-buffer)
+ (should (eq buffer-file-coding-system 'iso-2022-7bit-unix))))
+ (delete-file tempfile))))
+
+
;; Stop the above "Local Var..." confusing Emacs.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117686: Merge from emacs-24; up to r117439,
Glenn Morris <=