Merge from emacs-24; up to 2014-06-28T23:35:17Z!rgm@gnu.org
This commit is contained in:
commit
c7367d2de3
20 changed files with 323 additions and 107 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2014-08-11 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
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 <eliz@gnu.org>
|
||||
|
||||
* config.bat: Fix some confusing wording.
|
||||
|
|
|
@ -3547,7 +3547,7 @@ AC_SUBST(BLESSMAIL_TARGET)
|
|||
|
||||
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 \
|
||||
|
|
|
@ -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 <Entrée> pour lire le
|
||||
manuel d'Emacs. Si vous n'avez jamais utilisé Info
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
# 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 */
|
||||
|
|
|
@ -1,3 +1,41 @@
|
|||
2014-08-11 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* 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 <rudalics@gmx.at>
|
||||
|
||||
* 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 <monnier@iro.umontreal.ca>
|
||||
|
||||
* mouse.el (mouse--down-1-maybe-follows-link): Don't convert the down
|
||||
event (bug#18212).
|
||||
|
||||
2014-08-11 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* info.el (info): Doc fix.
|
||||
|
||||
2014-08-11 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* info.el (Info-mode-map): Override a global down-mouse-2 binding
|
||||
(bug#18212).
|
||||
|
||||
2014-08-11 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* 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 <daimrod@gmail.com>
|
||||
|
||||
* 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:
|
||||
|
|
|
@ -4759,7 +4759,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))
|
||||
|
@ -4775,14 +4775,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))
|
||||
|
@ -4864,11 +4856,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))
|
||||
|
|
|
@ -774,8 +774,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*<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 @@ 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)
|
||||
|
|
|
@ -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)
|
||||
|
@ -118,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))))))
|
||||
|
||||
|
|
|
@ -5140,7 +5140,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 ()
|
||||
|
@ -5152,10 +5152,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)
|
||||
|
|
|
@ -1155,8 +1155,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'."
|
||||
|
@ -6440,7 +6449,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)))
|
||||
|
|
|
@ -1,3 +1,33 @@
|
|||
2014-08-11 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* 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 <rudalics@gmx.at>
|
||||
|
||||
* 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 <eliz@gnu.org>
|
||||
|
||||
* fontset.c (Finternal_char_font): Recompute basic faces if the
|
||||
frame's face cache was cleared. (Bug#18162)
|
||||
|
||||
2014-08-11 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
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 <rrt@sc3d.org>
|
||||
|
||||
Fix a couple of recent inadvertent breaks of the MSDOS port.
|
||||
|
|
|
@ -826,6 +826,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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
@ -11265,7 +11265,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,
|
||||
|
|
36
src/fileio.c
36
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;
|
||||
|
@ -4525,24 +4524,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))))
|
||||
|
@ -4635,6 +4624,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;
|
||||
}
|
||||
|
||||
|
@ -4803,14 +4796,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);
|
||||
|
||||
if (open_and_close_file && !auto_saving)
|
||||
{
|
||||
|
@ -5829,7 +5817,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");
|
||||
|
@ -6068,7 +6055,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);
|
||||
|
|
|
@ -1843,6 +1843,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)
|
||||
|
|
64
src/window.c
64
src/window.c
|
@ -329,7 +329,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;
|
||||
|
@ -810,7 +810,12 @@ 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 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 @@ 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);
|
||||
|
@ -829,7 +852,11 @@ 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 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 @@ 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 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 @@ 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, 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 @@ 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, 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 @@ 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, 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 @@ 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
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2014-08-11 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* 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 <ulf.jasper@web.de>
|
||||
|
||||
Enumerate evaluated sexp diary entries (Bug#7911).
|
||||
|
|
BIN
test/automated/data/files-bug18141.el.gz
Normal file
BIN
test/automated/data/files-bug18141.el.gz
Normal file
Binary file not shown.
|
@ -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.
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue