emacs-diffs
[Top][All Lists]
Advanced

[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.
 
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]