From 1d58ab89ca6eb1f87a812e23ffca210e15c4fb5f Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 5 Aug 2014 10:04:38 +0400 Subject: [PATCH 01/16] 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. --- src/ChangeLog | 6 ++++++ src/buffer.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 3f9b4577460..de56e3501d8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-08-05 Dmitry Antipov + + 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-03 Dmitry Antipov Fix bug with an attempt to select uninitialized frame (Bug#18161). diff --git a/src/buffer.c b/src/buffer.c index 8077e47fa0b..495f937d83f 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -809,6 +809,9 @@ CLONE nil means the indirect buffer's state is reset to default values. */) 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); From 5818408f5029ae6c26fa329104d1126b2322b356 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 5 Aug 2014 16:34:06 +0300 Subject: [PATCH 02/16] Fix bug #18195 with inaccurate results from window-screen-lines. lisp/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. --- lisp/ChangeLog | 9 +++++++++ lisp/simple.el | 7 +++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3e5042a0f91..89f463a2fb0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2014-08-05 Eli Zaretskii + + * 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-07-29 Eli Zaretskii * tutorial.el (tutorial--display-changes): Accept punctuation diff --git a/lisp/simple.el b/lisp/simple.el index d7f5b418302..1a42db81669 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -5038,7 +5038,7 @@ or the frame." 0) 0))) (if (floatp lsp) - (setq lsp (* dfh lsp))) + (setq lsp (truncate (* (frame-char-height) lsp)))) (+ dfh lsp))) (defun window-screen-lines () @@ -5050,10 +5050,9 @@ in the window, not in units of the frame's default font, and also accounts 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) From 518edaef88a458add904026a1c877a884c0a7f06 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 6 Aug 2014 20:37:22 +0300 Subject: [PATCH 03/16] src/coding.c: Fix typos in comments and doc strings. --- src/coding.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/coding.c b/src/coding.c index bd4a8be08b3..31303e2ba42 100644 --- a/src/coding.c +++ b/src/coding.c @@ -1190,8 +1190,8 @@ alloc_destination (struct coding_system *coding, ptrdiff_t nbytes, #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, @@ -11276,7 +11276,7 @@ decode text as usual. */); 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, From 6df16fba2a27196a4307dc3cad5d417fc207fd13 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 6 Aug 2014 17:08:57 -0700 Subject: [PATCH 04/16] * test/automated/Makefile.in (check-tar): Remove, no longer needed. No need to merge this to trunk. --- test/ChangeLog | 4 ++++ test/automated/Makefile.in | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 564e9d3d641..d68c5b6bb07 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-08-07 Glenn Morris + + * automated/Makefile.in (check-tar): Remove, no longer needed. + 2014-08-03 Glenn Morris * automated/Makefile.in (check-tar): Add as alias for check. diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in index d69d91be5cc..764b80ece93 100644 --- a/test/automated/Makefile.in +++ b/test/automated/Makefile.in @@ -118,8 +118,4 @@ check: compile-main echo Testing $$els; \ $(emacs) $$args -f ert-run-tests-batch-and-exit -## This is for hydra, so we can use the same recipe on trunk and emacs-24. -.PHONY: check-tar -check-tar: check - # Makefile ends here. From 8db811eff1b890cfc12e065d86a9f93bf974e364 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 7 Aug 2014 18:18:10 +0300 Subject: [PATCH 05/16] Fix bug #18162 with assertion violations due to empty face cache. src/fontset.c (Finternal_char_font): Recompute basic faces if the frame's face cache was cleared. --- src/ChangeLog | 5 +++++ src/fontset.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index de56e3501d8..a3ebe781be5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-08-07 Eli Zaretskii + + * fontset.c (Finternal_char_font): Recompute basic faces if the + frame's face cache was cleared. (Bug#18162) + 2014-08-05 Dmitry Antipov Fix bug with uninitialized undo list of an indirect buffer (Bug#18180). diff --git a/src/fontset.c b/src/fontset.c index 13f5357be64..08413ae1571 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -1860,6 +1860,10 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, 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) From 87eb576e30481ddf4d8daec020f8f78a62c02a2c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 7 Aug 2014 14:35:54 -0400 Subject: [PATCH 06/16] * lisp/info.el (Info-mode-map): Override a global down-mouse-2 binding. Fixes: debbugs:18212 --- lisp/ChangeLog | 13 +++++++++---- lisp/info.el | 1 + lisp/mouse.el | 17 ++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 89f463a2fb0..783bee53dbb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,9 +1,14 @@ +2014-08-07 Stefan Monnier + + * info.el (Info-mode-map): Override a global down-mouse-2 binding + (bug#18212). + 2014-08-05 Eli Zaretskii * 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. + 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) @@ -105,8 +110,8 @@ 2014-07-19 Fabián Ezequiel Gallina 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. 2014-07-17 Fabián Ezequiel Gallina diff --git a/lisp/info.el b/lisp/info.el index 2b2490b5bdc..31ef1081dcc 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -3994,6 +3994,7 @@ If FORK is non-nil, it is passed to `Info-goto-node'." (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) diff --git a/lisp/mouse.el b/lisp/mouse.el index ce691748cac..1cbff687c64 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -94,15 +94,14 @@ point at the click position." (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) From f8ddedff72fc9bf7247d47d750bf7f63568e988a Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Fri, 8 Aug 2014 07:20:52 +0200 Subject: [PATCH 07/16] Fix typos in TUTORIAL.fr --- etc/tutorials/TUTORIAL.fr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/tutorials/TUTORIAL.fr b/etc/tutorials/TUTORIAL.fr index 916ec51285d..30a5c717055 100644 --- a/etc/tutorials/TUTORIAL.fr +++ b/etc/tutorials/TUTORIAL.fr @@ -698,7 +698,7 @@ inquiétez pour les modifications que vous avez faites, C-x C-c vous 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 @@ C-x C-f à côté de find-file). >> 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 pour lire le manuel d'Emacs. Si vous n'avez jamais utilisé Info From 8faa5ee738c269d19071354b63cd64688f6ba101 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Fri, 8 Aug 2014 11:52:59 +0200 Subject: [PATCH 08/16] Fix some doc-strings in window.c (Bug#18112) (Bug#18194). * 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). --- src/ChangeLog | 8 +++++++ src/window.c | 61 ++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a3ebe781be5..6272361196c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2014-08-08 Martin Rudalics + + * 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). + 2014-08-07 Eli Zaretskii * fontset.c (Finternal_char_font): Recompute basic faces if the diff --git a/src/window.c b/src/window.c index 5c4e2f97a3b..8502e7b022c 100644 --- a/src/window.c +++ b/src/window.c @@ -311,7 +311,7 @@ DEFUN ("windowp", Fwindowp, Swindowp, 1, 1, 0, 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; @@ -792,7 +792,10 @@ total width of WINDOW. */) 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 (see `window-total-size') is that set by +the last call of `set-window-new-total' for WINDOW. */) (Lisp_Object window) { return decode_valid_window (window)->new_total; @@ -801,7 +804,25 @@ WINDOW must be a valid window and defaults to the selected one. */) 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); @@ -811,7 +832,10 @@ If HORIZONTAL is non-nil, return the normal width of WINDOW. */) 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 (see `window-normal-size') is that set by +the last call of `set-window-new-normal' for WINDOW. */) (Lisp_Object window) { return decode_valid_window (window)->new_normal; @@ -819,7 +843,12 @@ WINDOW must be a valid window and defaults to the selected one. */) 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 set correctly, it gets eventually +installed by the function `window-resize-apply' and will be returned by +the functions `window-pixel-height' or `window-pixel-width'. */) (Lisp_Object window) { return decode_valid_window (window)->new_pixel; @@ -3715,6 +3744,10 @@ Return SIZE. 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 is used by `window-resize-apply' and, if +that function succeeds, will be subsequently returned by the functions +`window-pixel-height' and `window-pixel-width'. + Note: This function does not operate on any child windows of WINDOW. */) (Lisp_Object window, Lisp_Object size, Lisp_Object add) { @@ -3739,6 +3772,9 @@ Return SIZE. 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 is used by `window-resize-apply-total' and, +after calling that function, will be returned by `window-total-size'. + Note: This function does not operate on any child windows of WINDOW. */) (Lisp_Object window, Lisp_Object size, Lisp_Object add) { @@ -3758,6 +3794,10 @@ DEFUN ("set-window-new-normal", Fset_window_new_normal, Sset_window_new_normal, WINDOW must be a valid window and defaults to the selected one. Return SIZE. +The new normal size of WINDOW is used by `window-resize-apply' and, if +that function succeeds, will be subsequently returned by the function +`window-normal-size'. + Note: This function does not operate on any child windows of WINDOW. */) (Lisp_Object window, Lisp_Object size) { @@ -4025,9 +4065,14 @@ If FRAME is omitted or nil, it defaults to the selected frame. 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 From 1f3e13c15fb34571a510e69c8dfe6c88e292c593 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 8 Aug 2014 16:53:55 +0300 Subject: [PATCH 09/16] lisp/info.el (info): Doc fix. --- lisp/ChangeLog | 4 ++++ lisp/info.el | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 783bee53dbb..19b421c679b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-08-08 Eli Zaretskii + + * info.el (info): Doc fix. + 2014-08-07 Stefan Monnier * info.el (Info-mode-map): Override a global down-mouse-2 binding diff --git a/lisp/info.el b/lisp/info.el index 31ef1081dcc..6e72e544dd5 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -772,8 +772,7 @@ with the top-level Info directory. 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*\". 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' From 5a88c153fcd647a81b2e5f285244bfbf861e1724 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 8 Aug 2014 12:56:50 -0400 Subject: [PATCH 10/16] * lisp/mouse.el (mouse--down-1-maybe-follows-link): Don't convert the down event. Fixes: debbugs:18212 --- lisp/ChangeLog | 5 +++++ lisp/mouse.el | 15 +++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 19b421c679b..0b8c538a336 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-08-08 Stefan Monnier + + * mouse.el (mouse--down-1-maybe-follows-link): Don't convert the down + event (bug#18212). + 2014-08-08 Eli Zaretskii * info.el (info): Doc fix. diff --git a/lisp/mouse.el b/lisp/mouse.el index 1cbff687c64..99407d9f9cf 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -117,19 +117,14 @@ Expects to be bound to `down-mouse-1' in `key-translation-map'." '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)))))) From c70e7e185e670b63fd46f6a1f59289816bbab098 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sat, 9 Aug 2014 13:12:45 +0200 Subject: [PATCH 11/16] Second attempt to fix some doc-strings in window.c. * window.c (Fwindow_new_total, Fwindow_new_normal) (Fwindow_new_pixel, Fset_window_new_pixel) (Fset_window_new_total, Fset_window_new_normal): Second attempt to fix the doc-strings of these functions. See: http://lists.gnu.org/archive/html/bug-gnu-emacs/2014-08/msg00287.html --- src/ChangeLog | 8 ++++++++ src/window.c | 33 ++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 6272361196c..6ecce26be14 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2014-08-09 Martin Rudalics + + * window.c (Fwindow_new_total, Fwindow_new_normal) + (Fwindow_new_pixel, Fset_window_new_pixel) + (Fset_window_new_total, Fset_window_new_normal): Second attempt + to fix the doc-strings of these functions. See: + http://lists.gnu.org/archive/html/bug-gnu-emacs/2014-08/msg00287.html + 2014-08-08 Martin Rudalics * window.c (Fwindow_valid_p): Fix doc-string (Bug#18194). diff --git a/src/window.c b/src/window.c index 8502e7b022c..3fefd9ce682 100644 --- a/src/window.c +++ b/src/window.c @@ -794,8 +794,10 @@ 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. -The new total size of WINDOW (see `window-total-size') is that set by -the last call of `set-window-new-total' for WINDOW. */) +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; @@ -834,8 +836,9 @@ 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. -The new normal size of WINDOW (see `window-normal-size') is that set by -the last call of `set-window-new-normal' for WINDOW. */) +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; @@ -846,9 +849,9 @@ DEFUN ("window-new-pixel", Fwindow_new_pixel, Swindow_new_pixel, 0, 1, 0, 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 set correctly, it gets eventually -installed by the function `window-resize-apply' and will be returned by -the functions `window-pixel-height' or `window-pixel-width'. */) +`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; @@ -3744,9 +3747,9 @@ Return SIZE. 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 is used by `window-resize-apply' and, if -that function succeeds, will be subsequently returned by the functions -`window-pixel-height' and `window-pixel-width'. +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) @@ -3772,8 +3775,9 @@ Return SIZE. 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 is used by `window-resize-apply-total' and, -after calling that function, will be returned by `window-total-size'. +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) @@ -3794,9 +3798,8 @@ DEFUN ("set-window-new-normal", Fset_window_new_normal, Sset_window_new_normal, WINDOW must be a valid window and defaults to the selected one. Return SIZE. -The new normal size of WINDOW is used by `window-resize-apply' and, if -that function succeeds, will be subsequently returned by the function -`window-normal-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) From 02e0530477b2c2fc9a4c5ff05db4ec4555b272dc Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sat, 9 Aug 2014 18:50:13 +0200 Subject: [PATCH 12/16] In display-buffer-below-selected reuse window below selected if it shows buffer already (Bug#18181). * window.el (display-buffer-below-selected): Restore original behavior if buffer is already displayed in the window below the selected one (Bug#18181). --- lisp/ChangeLog | 6 ++++++ lisp/window.el | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0b8c538a336..91a6e41860f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-08-09 Martin Rudalics + + * 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-08 Stefan Monnier * mouse.el (mouse--down-1-maybe-follows-link): Don't convert the down diff --git a/lisp/window.el b/lisp/window.el index c771f01707e..09fe52dee88 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -6373,7 +6373,10 @@ again with `display-buffer-pop-up-window'." 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))) From d5f2feb5818b9da8323bda683983fa7e637c47fd Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sun, 10 Aug 2014 12:41:28 +0200 Subject: [PATCH 13/16] Make doc-string of window-total-size more self-contained. * window.el (window-total-size): Make doc-string more self-contained. --- lisp/ChangeLog | 5 +++++ lisp/window.el | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 91a6e41860f..cec6e709c2b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-08-10 Martin Rudalics + + * window.el (window-total-size): Make doc-string more + self-contained. + 2014-08-09 Martin Rudalics * window.el (display-buffer-below-selected): Restore original diff --git a/lisp/window.el b/lisp/window.el index 09fe52dee88..c73f019870b 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1117,8 +1117,17 @@ dumping to it." 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'." From f22bc725a1c8294fc042f6a9541be01a177755f6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 10 Aug 2014 13:40:57 -0700 Subject: [PATCH 14/16] Don't prevent random file systems from being unmounted. 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. Fixes: debbugs:18232 --- ChangeLog | 13 ++++++++ configure.ac | 2 +- lib/save-cwd.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++- lib/save-cwd.h | 40 ++++++++-------------- 4 files changed, 117 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index cdf4152bc0a..6864b7043e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2014-08-10 Paul Eggert + + 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-07-11 Paul Eggert * Makefile.in (install-arch-indep): Avoid readdir race (Bug#17971). diff --git a/configure.ac b/configure.ac index 8e74f799ec9..04925d59d22 100644 --- a/configure.ac +++ b/configure.ac @@ -3508,7 +3508,7 @@ esac AC_SUBST(BLESSMAIL_TARGET) -AC_CHECK_FUNCS(accept4 gethostname \ +AC_CHECK_FUNCS(accept4 fchdir gethostname \ getrusage get_current_dir_name \ lrand48 \ select getpagesize setlocale \ diff --git a/lib/save-cwd.c b/lib/save-cwd.c index b8dae34ca02..fd746584fa8 100644 --- a/lib/save-cwd.c +++ b/lib/save-cwd.c @@ -1,3 +1,91 @@ +/* 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 . */ + +/* 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 -#define SAVE_CWD_INLINE _GL_EXTERN_INLINE + #include "save-cwd.h" + +#include +#include + +/* 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. */ + +int +save_cwd (struct saved_cwd *cwd) +{ +#ifdef HAVE_FCHDIR + cwd->desc = open (".", O_SEARCH | O_CLOEXEC); +#else + cwd->desc = -1; +#endif + /* 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) +{ +#ifdef HAVE_FCHDIR + /* Restore the previous directory if possible, to avoid tying down + the file system of the new directory (Bug#18232). */ + if (fchdir (cwd->desc) == 0) + return 0; + + /* 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. */ +#endif + return 0; +} + +void +free_cwd (struct saved_cwd *cwd) +{ + close (cwd->desc); +} diff --git a/lib/save-cwd.h b/lib/save-cwd.h index 9a1eb3519c8..6b84e4601d3 100644 --- a/lib/save-cwd.h +++ b/lib/save-cwd.h @@ -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 . */ -/* 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 +# 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; + char *name; + }; -struct saved_cwd { int desc; }; +int save_cwd (struct saved_cwd *cwd); +int restore_cwd (const struct saved_cwd *cwd); +void free_cwd (struct saved_cwd *cwd); -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 +#endif /* SAVE_CWD_H */ From db2f09ab1be010a06a88269d39fb14c191452f1c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 10 Aug 2014 14:06:07 -0700 Subject: [PATCH 15/16] Simplify previous patch. Fixes: debbugs:18232 --- lib/save-cwd.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/save-cwd.c b/lib/save-cwd.c index fd746584fa8..833783cbab0 100644 --- a/lib/save-cwd.c +++ b/lib/save-cwd.c @@ -50,14 +50,14 @@ 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) { -#ifdef HAVE_FCHDIR cwd->desc = open (".", O_SEARCH | O_CLOEXEC); -#else - cwd->desc = -1; -#endif /* The 'name' member is present only to minimize differences from gnulib. Initialize it to zero, if only to simplify debugging. */ cwd->name = 0; @@ -71,16 +71,14 @@ save_cwd (struct saved_cwd *cwd) int restore_cwd (const struct saved_cwd *cwd) { -#ifdef HAVE_FCHDIR /* Restore the previous directory if possible, to avoid tying down - the file system of the new directory (Bug#18232). */ + 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; - /* 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. */ -#endif return 0; } From f314e84fce8b394da20aa1d69121c74fb34f9a1e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 10 Aug 2014 17:38:19 -0700 Subject: [PATCH 16/16] Revert 2013-01-31 change that decides coding system before backing up It causes a more serious problem than the one it solves. This closes bug#18141, and reopens bug#13522. * lisp/files.el (basic-save-buffer-2): Revert 2013-01-31 change. * src/fileio.c: Revert 2013-01-31 change. (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. * test/automated/data/files-bug18141.el.gz: New file. * test/automated/files.el (files-test-bug-18141-file): New variable and test. --- lisp/ChangeLog | 7 +++++ lisp/files.el | 13 ++------ src/ChangeLog | 9 ++++++ src/fileio.c | 36 +++++++---------------- test/ChangeLog | 6 ++++ test/automated/data/files-bug18141.el.gz | Bin 0 -> 77 bytes test/automated/files.el | 18 ++++++++++++ 7 files changed, 53 insertions(+), 36 deletions(-) create mode 100644 test/automated/data/files-bug18141.el.gz diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cec6e709c2b..ba8dac2c4e9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-08-11 Glenn Morris + + * 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-10 Martin Rudalics * window.el (window-total-size): Make doc-string more diff --git a/lisp/files.el b/lisp/files.el index 6c3b8f4fa4d..5ed5f8a6e1e 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4756,7 +4756,7 @@ Before and after saving the buffer, this function runs ;; 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)) @@ -4772,14 +4772,6 @@ Before and after saving the buffer, this function runs 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)) @@ -4861,11 +4853,10 @@ Before and after saving the buffer, this function runs (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)) diff --git a/src/ChangeLog b/src/ChangeLog index 6ecce26be14..92d90accc60 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2014-08-11 Glenn Morris + + * 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-09 Martin Rudalics * window.c (Fwindow_new_total, Fwindow_new_normal) diff --git a/src/fileio.c b/src/fileio.c index c87a6f71312..261928dd821 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -323,7 +323,6 @@ static Lisp_Object Qfile_acl; 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; @@ -4531,24 +4530,14 @@ build_annotations_unwind (Lisp_Object arg) /* 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)))) @@ -4641,6 +4630,10 @@ This function is for internal use only. It may prompt the user. */ ) } 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; } @@ -4809,14 +4802,9 @@ write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename, 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); #ifdef CLASH_DETECTION if (open_and_close_file && !auto_saving) @@ -5861,7 +5849,6 @@ syms_of_fileio (void) 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"); @@ -6100,7 +6087,6 @@ This includes interactive calls to `delete-file' and 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); diff --git a/test/ChangeLog b/test/ChangeLog index d68c5b6bb07..d5c5e58f09c 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2014-08-11 Glenn Morris + + * automated/data/files-bug18141.el.gz: New file. + * automated/files.el (files-test-bug-18141-file): + New variable and test. (Bug#18141) + 2014-08-07 Glenn Morris * automated/Makefile.in (check-tar): Remove, no longer needed. diff --git a/test/automated/data/files-bug18141.el.gz b/test/automated/data/files-bug18141.el.gz new file mode 100644 index 0000000000000000000000000000000000000000..53d463e85b58b57b0d18198f25c26a672b40216e GIT binary patch literal 77 zcmV-T0J8rdiwFR*3FuP*1GBcaR?yYbRY=ZH$;?Z)QphaM*EKRQGSW3q$}9m(acShH j78fU`rz$8(t2nBtJoD3|75JOBUyAWk1~ literal 0 HcmV?d00001 diff --git a/test/automated/files.el b/test/automated/files.el index 44816bc33f5..8db06f7dfe3 100644 --- a/test/automated/files.el +++ b/test/automated/files.el @@ -148,6 +148,24 @@ form.") (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.