1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 18:40:39 -08:00

Merge from origin/emacs-25

b134c20 Sync with gnulib
bb30fa9 Fix last change on 2016-01-02
488a72f ; Spelling fixes
9b1aab9 Port run-prolog EMACS to SWI-Prolog 7.2.3
0e7bcec Avoid crashes due to unreasonably large or small text scaling
85f257c Improve documentation of 'with-eval-after-load'
668c7bc Improve handling of non-ASCII characters in Git log messages
b570769 Remove undefined behavior in OS X dumper.
97211f3 Fix clipping of xwidgets
e87fbc0 Improve Lisp-level documentation of tooltips
9f1786e Faces names should not end in "-face".
3283271 * src/xsmfns.c (syms_of_xsmfns): Remove stray "s in doc strings.
a1f221b Comint and compile no longer set EMACS
5c28890 * lisp/subr.el (read-key): Don't let the prompt linger (bug#2...
a75b9a6 Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emac...
c93ae7a Allow to customize names of executables used by grep.el
f6497c6 Set locale encoding to UTF-8 when run from OS X GUI.
7ad1d07 Avoid signaling errors in 'M-n' at the 'C-x C-f' prompt
a3f1ac2 Avoid infinite loop in 'studlify-word'
f36df4b Don’t recommend obsolete EMACS env var
fb0b531 * lisp/emacs-lisp/package.el: Change from a few days ago need...
This commit is contained in:
Paul Eggert 2016-04-11 09:07:16 -07:00
commit 435da5d295
30 changed files with 408 additions and 141 deletions

View file

@ -21251,7 +21251,7 @@
2015-09-01 Paul Eggert <eggert@cs.ucla.edu> 2015-09-01 Paul Eggert <eggert@cs.ucla.edu>
terminal-init-w32console mimicks command-line terminal-init-w32console mimics command-line
Problem reported by Eli Zaretskii. Problem reported by Eli Zaretskii.
* lisp/startup.el (startup--setup-quote-display): * lisp/startup.el (startup--setup-quote-display):
New function, refactored from a part of command-line. New function, refactored from a part of command-line.

View file

@ -1152,11 +1152,11 @@ change the variable @code{x-gtk-file-dialog-help-text} to @code{nil}.
@section Tooltips @section Tooltips
@cindex tooltips @cindex tooltips
@dfn{Tooltips} are small windows that display text information at @dfn{Tooltips} are small special frames that display text
the current mouse position. They activate when there is a pause in information at the current mouse position. They activate when there
mouse movement over some significant piece of text in a window, or the is a pause in mouse movement over some significant piece of text in a
mode line, or some other part of the Emacs frame such as a tool bar window, or the mode line, or some other part of the Emacs frame such
button or menu item. as a tool bar button or menu item.
@findex tooltip-mode @findex tooltip-mode
You can toggle the use of tooltips with the command @kbd{M-x You can toggle the use of tooltips with the command @kbd{M-x
@ -1164,11 +1164,41 @@ tooltip-mode}. When Tooltip mode is disabled, the help text is
displayed in the echo area instead. To control the use of tooltips at displayed in the echo area instead. To control the use of tooltips at
startup, customize the variable @code{tooltip-mode}. startup, customize the variable @code{tooltip-mode}.
@vindex tooltip-delay The following variables provide customization options for tooltip
The variables @code{tooltip-delay} specifies how long Emacs should display:
wait before displaying a tooltip. For additional customization
options for displaying tooltips, use @kbd{M-x customize-group @vtable @code
@key{RET} tooltip @key{RET}}. @item tooltip-delay
This variable specifies how long Emacs should wait before displaying
the first tooltip. The value is in seconds.
@item tooltip-short-delay
This variable specifies how long Emacs should wait before displaying
subsequent tooltips on different items, having already displayed the
first tooltip. The value is in seconds.
@item tooltip-hide-delay
The number of seconds since displaying a tooltip to hide it, if the
mouse doesn't move.
@item tooltip-x-offset
@itemx tooltip-y-offset
The X and Y offsets, in pixels, of the left top corner of the tooltip
from the mouse pointer position. Note that these are ignored if
@code{tooltip-frame-parameters} was customized to include,
respectively, the @code{left} and @code{top} parameters. The values
of the offsets should be chosen so that the tooltip doesn't cover the
mouse pointer's hot spot, or it might interfere with clicking the
mouse.
@item tooltip-frame-parameters
The frame parameters used for displaying tooltips. @xref{Frame
Parameters,,, elisp, The Emacs Lisp Reference Manual}, and also
@ref{Tooltips,,, elisp, The Emacs Lisp Reference Manual}.
@end vtable
For additional customization options for displaying tooltips, use
@kbd{M-x customize-group @key{RET} tooltip @key{RET}}.
@vindex x-gtk-use-system-tooltips @vindex x-gtk-use-system-tooltips
If Emacs is built with GTK+ support, it displays tooltips via GTK+, If Emacs is built with GTK+ support, it displays tooltips via GTK+,

View file

@ -34,6 +34,7 @@ that Emacs presents to the user.
* Character Display:: How Emacs displays individual characters. * Character Display:: How Emacs displays individual characters.
* Beeping:: Audible signal to the user. * Beeping:: Audible signal to the user.
* Window Systems:: Which window system is being used. * Window Systems:: Which window system is being used.
* Tooltips:: Tooltip display in Emacs.
* Bidirectional Display:: Display of bidirectional scripts, such as * Bidirectional Display:: Display of bidirectional scripts, such as
Arabic and Farsi. Arabic and Farsi.
@end menu @end menu
@ -7131,6 +7132,81 @@ indicator of Emacs capabilities on a given display type. Instead, use
@code{display-graphic-p} or any of the other @code{display-*-p} @code{display-graphic-p} or any of the other @code{display-*-p}
predicates described in @ref{Display Feature Testing}. predicates described in @ref{Display Feature Testing}.
@node Tooltips
@section Tooltips
@cindex tooltips
@dfn{Tooltips} are special frames (@pxref{Frames}) that are used to
display helpful hints (a.k.a.@: ``tips'') related to the current
position of the mouse pointer. Emacs uses tooltips to display help
strings about active portions of text (@pxref{Special Properties}) and
about various UI elements, such as menu items (@pxref{Extended Menu
Items}) and tool-bar buttons (@pxref{Tool Bar}).
@defun tooltip-mode
Tooltip Mode is a minor mode that enables display of tooltips.
Turning off this mode causes the tooltips be displayed in the echo
area. On text-mode (a.k.a.@: ``TTY'') frames, tooltips are always
displayed in the echo area.
@end defun
@vindex x-gtk-use-system-tooltips
When Emacs is built with GTK+ support, it by default displays tooltips
using GTK+ functions, and the appearance of the tooltips is then
controlled by GTK+ settings. GTK+ tooltips can be disabled by
changing the value of the variable @code{x-gtk-use-system-tooltips} to
@code{nil}. The rest of this subsection describes how to control
non-GTK+ tooltips, which are presented by Emacs itself.
Since tooltips are special frames, they have their frame parameters
(@pxref{Frame Parameters}). Unlike other frames, the frame parameters
for tooltips are stored in a special variable.
@defvar tooltip-frame-parameters
This customizable option holds the frame parameters used for
displaying tooltips. Any font and color parameters are ignored, and
the corresponding attributes of the @code{tooltip} face are used
instead. If @code{left} or @code{top} parameters are included, they
are used as absolute frame-relative coordinates where the tooltip
should be shown. (Mouse-relative position of the tooltip can be
customized using the variables described in @ref{Tooltips,,, emacs,
The GNU Emacs Manual}.) Note that the @code{left} and @code{top}
parameters, if present, override the values of mouse-relative offsets.
@end defvar
@vindex tooltip@r{ face}
The @code{tooltip} face determines the appearance of text shown in
tooltips. It should generally use a variable-pitch font of size that
is preferably smaller than the default frame font.
@findex tooltip-help-tips
@defvar tooltip-functions
This abnormal hook is a list of functions to call when Emacs needs to
display a tooltip. Each function is called with a single argument
@var{event} which is a copy of the last mouse movement event. If a
function on this list actually displays the tooltip, it should return
non-@code{nil}, and then the rest of the functions will not be
called. The default value of this variable is a single function
@code{tooltip-help-tips}.
@end defvar
If you write your own function to be put on the
@code{tooltip-functions} list, you may need to know the buffer of the
mouse event that triggered the tooltip display. The following
function provides that information.
@defun tooltip-event-buffer event
This function returns the buffer over which @var{event} occurred.
Call it with the argument of the function from
@code{tooltip-functions} to obtain the buffer whose text triggered the
tooltip. Note that the event might occur not over a buffer (e.g.,
over the tool bar), in which case this function will return
@code{nil}.
@end defun
Other aspects of tooltip display are controlled by several
customizable settings; see @ref{Tooltips,,, emacs, The GNU Emacs
Manual}.
@node Bidirectional Display @node Bidirectional Display
@section Bidirectional Display @section Bidirectional Display
@cindex bidirectional display @cindex bidirectional display

View file

@ -1380,6 +1380,7 @@ Emacs Display
* Character Display:: How Emacs displays individual characters. * Character Display:: How Emacs displays individual characters.
* Beeping:: Audible signal to the user. * Beeping:: Audible signal to the user.
* Window Systems:: Which window system is being used. * Window Systems:: Which window system is being used.
* Tooltips:: Tooltip display in Emacs.
* Bidirectional Display:: Display of bidirectional scripts, such as * Bidirectional Display:: Display of bidirectional scripts, such as
Arabic and Farsi. Arabic and Farsi.

View file

@ -3279,12 +3279,11 @@ or shorter, higher or lower, wider or narrow, or replaced with an image.
@item help-echo @item help-echo
@kindex help-echo @r{(text property)} @kindex help-echo @r{(text property)}
@cindex tooltip @cindex tooltip for help strings
@anchor{Text help-echo} @anchor{Text help-echo}
If text has a string as its @code{help-echo} property, then when you If text has a string as its @code{help-echo} property, then when you
move the mouse onto that text, Emacs displays that string in the echo move the mouse onto that text, Emacs displays that string in the echo
area, or in the tooltip window (@pxref{Tooltips,,, emacs, The GNU Emacs area, or in the tooltip window (@pxref{Tooltips}).
Manual}).
If the value of the @code{help-echo} property is a function, that If the value of the @code{help-echo} property is a function, that
function is called with three arguments, @var{window}, @var{object} and function is called with three arguments, @var{window}, @var{object} and

View file

@ -2664,11 +2664,6 @@ by typing @kbd{M-x ansi-color-for-comint-mode} in the Shell buffer, or
by adding @code{(add-hook 'shell-mode-hook by adding @code{(add-hook 'shell-mode-hook
'ansi-color-for-comint-mode-on)} to your init file. 'ansi-color-for-comint-mode-on)} to your init file.
In Emacs versions before 21.1, the @code{ansi-color} package is not
included. In that case, you need to unalias @code{ls} for interactive
shells running in Emacs; this can be done by checking the @code{EMACS}
variable in the environment.
@node Fullscreen mode on MS-Windows @node Fullscreen mode on MS-Windows
@section How can I start Emacs in fullscreen mode on MS-Windows? @section How can I start Emacs in fullscreen mode on MS-Windows?
@cindex Maximize frame @cindex Maximize frame
@ -2757,11 +2752,9 @@ For @code{tcsh}, put this in your @file{.cshrc} (or @file{.tcshrc})
file: file:
@example @example
if ($?EMACS) then if ($?INSIDE_EMACS && $?tcsh)
if ("$EMACS" =~ /*) then unset edit
if ($?tcsh) unset edit stty -icrnl -onlcr -echo susp ^Z
stty nl
endif
endif endif
@end example @end example
@ -2769,7 +2762,7 @@ Or put this in your @file{.emacs_tcsh} or @file{~/.emacs.d/init_tcsh.sh} file:
@example @example
unset edit unset edit
stty nl stty -icrnl -onlcr -echo susp ^Z
@end example @end example
Alternatively, use @code{csh} in your shell buffers instead of Alternatively, use @code{csh} in your shell buffers instead of

View file

@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex. % Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
% %
\def\texinfoversion{2016-03-25.17} \def\texinfoversion{2016-03-29.15}
% %
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@ -1550,8 +1550,7 @@ output) for that.)}
\fi \fi
\turnoffactive \turnoffactive
\makevalueexpandable \makevalueexpandable
% In the case of XeTeX, xdvipdfmx converts strings to UTF-16. \txiescapepdf\pdfdestname
% Therefore \txiescapepdf is not necessary.
\safewhatsit{\pdfdest name{\pdfdestname} xyz}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
}} }}
% %
@ -1566,9 +1565,12 @@ output) for that.)}
\fi \fi
{ {
\turnoffactive \turnoffactive
% In the case of XeTeX, xdvipdfmx converts strings to UTF-16. \txiescapepdf\pdfoutlinedest
% Therefore \txiescapepdf is not necessary. \edef\pdfoutlinetext{#1}%
\special{pdf:out [-] #2 << /Title (#1) /A << /S /GoTo /D (name\pdfoutlinedest) >> >> }% \txiescapepdf\pdfoutlinetext
%
\special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
<< /S /GoTo /D (name\pdfoutlinedest) >> >> }%
} }
} }
% %
@ -1624,6 +1626,20 @@ output) for that.)}
% ``\special{pdf:dest ...}'' can not handle non-ASCII strings. % ``\special{pdf:dest ...}'' can not handle non-ASCII strings.
% It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % It fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
% %
\def\skipspaces#1{\def\PP{#1}\def\D{|}%
\ifx\PP\D\let\nextsp\relax
\else\let\nextsp\skipspaces
\addtokens{\filename}{\PP}%
\advance\filenamelength by 1
\fi
\nextsp}
\def\getfilename#1{%
\filenamelength=0
% If we don't expand the argument now, \skipspaces will get
% snagged on things like "@value{foo}".
\edef\temp{#1}%
\expandafter\skipspaces\temp|\relax
}
% make a live url in pdf output. % make a live url in pdf output.
\def\pdfurl#1{% \def\pdfurl#1{%
\begingroup \begingroup
@ -8760,6 +8776,7 @@ end
% %
% Make link in pdf output. % Make link in pdf output.
\ifpdf \ifpdf
% For pdfTeX and LuaTeX
{\indexnofonts {\indexnofonts
\turnoffactive \turnoffactive
\makevalueexpandable \makevalueexpandable
@ -8786,6 +8803,47 @@ end
\fi \fi
}% }%
\setcolor{\linkcolor}% \setcolor{\linkcolor}%
\else
\ifx\XeTeXrevision\thisisundefined
\else
% For XeTeX
{\indexnofonts
\turnoffactive
\makevalueexpandable
% This expands tokens, so do it after making catcode changes, so _
% etc. don't get their TeX definitions. This ignores all spaces in
% #4, including (wrongly) those in the middle of the filename.
\getfilename{#4}%
%
% This (wrongly) does not take account of leading or trailing
% spaces in #1, which should be ignored.
\iftxiuseunicodedestname
\def\pdfxrefdest{#1}% Pass through Unicode characters.
\else
\edef\pdfxrefdest{#1}% Replace Unicode characters to ASCII.
\fi
\ifx\pdfxrefdest\empty
\def\pdfxrefdest{Top}% no empty targets
\else
\txiescapepdf\pdfxrefdest % escape PDF special chars
\fi
%
\leavevmode
\ifnum\filenamelength>0
% By the default settings,
% XeTeX (xdvipdfmx) replaces link destination names with integers.
% In this case, the replaced destination names of
% remote PDF cannot be known. In order to avoid replacement,
% you can use commandline option `-C 0x0010' for xdvipdfmx.
\special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
<< /S /GoToR /F (\the\filename.pdf) /D (name\pdfxrefdest) >> >>}%
\else
\special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
<< /S /GoTo /D (name\pdfxrefdest) >> >>}%
\fi
}%
\setcolor{\linkcolor}%
\fi
\fi \fi
{% {%
% Have to otherify everything special to allow the \csname to % Have to otherify everything special to allow the \csname to

View file

@ -1303,6 +1303,17 @@ See the 'vc-faces' customization group.
the color range from 'vc-annotate-color-map' is applied to the the color range from 'vc-annotate-color-map' is applied to the
background or to the foreground. background or to the foreground.
---
*** New options for customizing encoding of Git commit log messages.
The new options `vc-git-commits-coding-system' and
`vc-git-log-output-coding-system' allow to customize the encoding of
the log messages sent to Git when committing, and the decoding of the
log messages read from Git history commands. Both default to UTF-8;
if you customize them, make sure they are consistent with the Git
config variables i18n.commitEncoding and i18n.logOutputEncoding.
(`vc-git-commits-coding-system' existed previously, but was a
variable, not a user option.)
+++ +++
*** 'compare-windows' now compares text with the most recently selected window *** 'compare-windows' now compares text with the most recently selected window
instead of the next window. If you want the previous behavior of instead of the next window. If you want the previous behavior of
@ -1723,8 +1734,10 @@ symbol-function was changed not to signal 'void-function' any more.
*** As a consequence, the second arg of 'indirect-function' is now obsolete. *** As a consequence, the second arg of 'indirect-function' is now obsolete.
+++ +++
** Although comint, term, and compile still set the EMACS variable, ** M-x shell and M-x compile no longer set the EMACS environment variable.
this is now considered deprecated and will be removed in a future release. This avoids clashing when other programs use the variable for other purposes.
Although M-x term still sets EMACS for compatibility with Bash 4.3 and earlier,
this is deprecated and will be phased out when Bash 4.4 or later takes over.
Use the INSIDE_EMACS environment variable instead. Use the INSIDE_EMACS environment variable instead.
** 'C-up', 'C-down', 'C-left' and 'C-right' are now defined in term ** 'C-up', 'C-down', 'C-left' and 'C-right' are now defined in term
@ -2119,7 +2132,7 @@ function 'encode-time', which already accepted a simple time zone rule
argument, has been extended to accept all the new forms. argument, has been extended to accept all the new forms.
*** Incompatible change in the third argument of 'format-time-string'. *** Incompatible change in the third argument of 'format-time-string'.
Previously, any non-nil argument was interpeted as specifying Universal Time. Previously, any non-nil argument was interpreted as specifying Universal Time.
This is no longer true; packages that want Universal Time should pass t This is no longer true; packages that want Universal Time should pass t
as the third argument. as the third argument.

View file

@ -459,11 +459,9 @@ smart. It sees that the Shell uses terminal type 'unknown' and turns
on the flag to output ^M at the end of each line. You can fix the on the flag to output ^M at the end of each line. You can fix the
problem by adding this to your .cshrc file: problem by adding this to your .cshrc file:
if ($?EMACS) then if ($?INSIDE_EMACS && $?tcsh)
if ("$EMACS" =~ /*) then unset edit
unset edit stty -icrnl -onlcr -echo susp ^Z
stty -icrnl -onlcr -echo susp ^Z
endif
endif endif
*** Emacs startup on GNU/Linux systems (and possibly other systems) is slow. *** Emacs startup on GNU/Linux systems (and possibly other systems) is slow.

View file

@ -118,15 +118,10 @@
picky compilers. */ picky compilers. */
#define _STDINT_MIN(signed, bits, zero) \ #define _STDINT_MIN(signed, bits, zero) \
((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) ((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero))
#define _STDINT_MAX(signed, bits, zero) \ #define _STDINT_MAX(signed, bits, zero) \
((signed) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
? ~ _STDINT_MIN (signed, bits, zero) \
: /* The expression for the unsigned case. The subtraction of (signed) \
is a nop in the unsigned case and avoids "signed integer overflow" \
warnings in the signed case. */ \
((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
#if !GNULIB_defined_stdint_types #if !GNULIB_defined_stdint_types

View file

@ -5820,7 +5820,7 @@
* epa.el (epa-passphrase-callback-function): Say what we're * epa.el (epa-passphrase-callback-function): Say what we're
querying the password for. querying the password for.
* ibuffer.el (ibuffer-visit-buffer): To mimick list-buffers * ibuffer.el (ibuffer-visit-buffer): To mimic list-buffers
behavior, don't bury the ibuffer buffer when visiting other buffers. behavior, don't bury the ibuffer buffer when visiting other buffers.
2010-10-08 Chong Yidong <cyd@stupidchicken.com> 2010-10-08 Chong Yidong <cyd@stupidchicken.com>

View file

@ -816,13 +816,6 @@ series of processes in the same Comint buffer. The hook
(format "COLUMNS=%d" (window-width))) (format "COLUMNS=%d" (window-width)))
(list "TERM=emacs" (list "TERM=emacs"
(format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width)))) (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
;; This hack is for backward compatibility with Bash 4.3 and
;; earlier. It can break common uses of 'configure', so
;; remove it once Bash 4.4 or later is common.
(unless (getenv "EMACS")
(list "EMACS=t"))
(list (format "INSIDE_EMACS=%s,comint" emacs-version)) (list (format "INSIDE_EMACS=%s,comint" emacs-version))
process-environment)) process-environment))
(default-directory (default-directory

View file

@ -398,6 +398,9 @@ This will generate compile-time constants from BINDINGS."
lisp-el-font-lock-keywords-1 lisp-el-font-lock-keywords-1
`( ;; Regexp negated char group. `( ;; Regexp negated char group.
("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend) ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
;; Erroneous structures.
(,(concat "(" el-errs-re "\\_>")
(1 font-lock-warning-face))
;; Control structures. Common Lisp forms. ;; Control structures. Common Lisp forms.
(lisp--el-match-keyword . 1) (lisp--el-match-keyword . 1)
;; Exit/Feature symbols as constants. ;; Exit/Feature symbols as constants.
@ -405,9 +408,6 @@ This will generate compile-time constants from BINDINGS."
"[ \t']*\\(" lisp-mode-symbol-regexp "\\)?") "[ \t']*\\(" lisp-mode-symbol-regexp "\\)?")
(1 font-lock-keyword-face) (1 font-lock-keyword-face)
(2 font-lock-constant-face nil t)) (2 font-lock-constant-face nil t))
;; Erroneous structures.
(,(concat "(" el-errs-re "\\_>")
(1 font-lock-warning-face prepend))
;; Words inside \\[] tend to be for `substitute-command-keys'. ;; Words inside \\[] tend to be for `substitute-command-keys'.
(,(concat "\\\\\\\\\\[\\(" lisp-mode-symbol-regexp "\\)\\]") (,(concat "\\\\\\\\\\[\\(" lisp-mode-symbol-regexp "\\)\\]")
(1 font-lock-constant-face prepend)) (1 font-lock-constant-face prepend))

View file

@ -146,6 +146,7 @@
(eval-when-compile (require 'subr-x)) (eval-when-compile (require 'subr-x))
(eval-when-compile (require 'cl-lib)) (eval-when-compile (require 'cl-lib))
(eval-when-compile (require 'epg)) ;For setf accessors. (eval-when-compile (require 'epg)) ;For setf accessors.
(require 'seq)
(require 'tabulated-list) (require 'tabulated-list)
(require 'macroexp) (require 'macroexp)

View file

@ -256,6 +256,23 @@ disable `text-scale-mode' as necessary)."
text-scale-mode-amount)))) text-scale-mode-amount))))
(force-window-update (current-buffer))) (force-window-update (current-buffer)))
(defun text-scale-min-amount ()
"Return the minimum amount of text-scaling we allow."
;; When the resulting pixel-height of characters will become smaller
;; than 1 pixel, we can expect trouble from the display engine.
;; E.g., it requires that the character glyph's ascent is
;; non-negative.
(log (/ 1.0 (frame-char-height)) text-scale-mode-step))
(defun text-scale-max-amount ()
"Return the maximum amount of text-scaling we allow."
;; The display engine uses a 16-bit short for pixel-width of
;; characters, thus the 0xffff limitation. It also makes no sense
;; to have characters wider than the display.
(log (/ (min (display-pixel-width) #xffff)
(frame-char-width))
text-scale-mode-step))
;;;###autoload ;;;###autoload
(defun text-scale-set (level) (defun text-scale-set (level)
"Set the scale factor of the default face in the current buffer to LEVEL. "Set the scale factor of the default face in the current buffer to LEVEL.
@ -266,7 +283,8 @@ Each step scales the height of the default face by the variable
`text-scale-mode-step' (a negative number decreases the height by `text-scale-mode-step' (a negative number decreases the height by
the same amount)." the same amount)."
(interactive "p") (interactive "p")
(setq text-scale-mode-amount level) (setq text-scale-mode-amount
(max (min level (text-scale-max-amount)) (text-scale-min-amount)))
(text-scale-mode (if (zerop text-scale-mode-amount) -1 1))) (text-scale-mode (if (zerop text-scale-mode-amount) -1 1)))
;;;###autoload ;;;###autoload
@ -279,8 +297,13 @@ Each step scales the height of the default face by the variable
height by the same amount). As a special case, an argument of 0 height by the same amount). As a special case, an argument of 0
will remove any scaling currently active." will remove any scaling currently active."
(interactive "p") (interactive "p")
(setq text-scale-mode-amount (let* ((current-value (if text-scale-mode text-scale-mode-amount 0))
(if (= inc 0) 0 (+ (if text-scale-mode text-scale-mode-amount 0) inc))) (new-value (if (= inc 0) 0 (+ current-value inc))))
(if (or (> new-value (text-scale-max-amount))
(< new-value (text-scale-min-amount)))
(user-error "Cannot %s the default face height more than it already is"
(if (> inc 0) "increase" "decrease")))
(setq text-scale-mode-amount new-value))
(text-scale-mode (if (zerop text-scale-mode-amount) -1 1))) (text-scale-mode (if (zerop text-scale-mode-amount) -1 1)))
;;;###autoload ;;;###autoload

View file

@ -1966,7 +1966,9 @@ Only intended for interactive use."
(defun ffap-guess-file-name-at-point () (defun ffap-guess-file-name-at-point ()
"Try to get a file name at point. "Try to get a file name at point.
This hook is intended to be put in `file-name-at-point-functions'." This hook is intended to be put in `file-name-at-point-functions'."
(let ((guess (ffap-guesser))) ;; ffap-guesser can signal an error, and we don't want that when,
;; e.g., the user types M-n at the "C-x C-f" prompt.
(let ((guess (ignore-errors (ffap-guesser))))
(when (stringp guess) (when (stringp guess)
(let ((url (ffap-url-p guess))) (let ((url (ffap-url-p guess)))
(or url (or url

View file

@ -542,7 +542,6 @@ as given in your `~/.profile'."
(defcustom tramp-remote-process-environment (defcustom tramp-remote-process-environment
`("TMOUT=0" "LC_CTYPE=''" `("TMOUT=0" "LC_CTYPE=''"
,(format "TERM=%s" tramp-terminal-type) ,(format "TERM=%s" tramp-terminal-type)
"EMACS=t" ;; Deprecated; remove this line once Bash 4.4-or-later is common.
,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version) ,(format "INSIDE_EMACS='%s,tramp:%s'" emacs-version tramp-version)
"CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat" "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" "PAGER=cat"
"autocorrect=" "correct=") "autocorrect=" "correct=")

View file

@ -25,10 +25,10 @@
(setq begin (point)) (setq begin (point))
(while (and (<= (point) end) (while (and (<= (point) end)
(not (looking-at "\\W*\\'"))) (not (looking-at "\\W*\\'")))
(forward-word 1) (forward-word-strictly 1)
(backward-word 1) (backward-word-strictly 1)
(setq begin (max (point) begin)) (setq begin (max (point) begin))
(forward-word 1) (forward-word-strictly 1)
(let ((offset 0) (let ((offset 0)
(word-end (min (point) end)) (word-end (min (point) end))
c) c)
@ -55,7 +55,7 @@
"Studlify-case the current word, or COUNT words if given an argument." "Studlify-case the current word, or COUNT words if given an argument."
(interactive "*p") (interactive "*p")
(let ((begin (point)) end rb re) (let ((begin (point)) end rb re)
(forward-word count) (forward-word-strictly count)
(setq end (point)) (setq end (point))
(setq rb (min begin end) re (max begin end)) (setq rb (min begin end) re (max begin end))
(studlify-region rb re))) (studlify-region rb re)))

View file

@ -1702,14 +1702,6 @@ Returns the compilation buffer created."
(list "TERM=emacs" (list "TERM=emacs"
(format "TERMCAP=emacs:co#%d:tc=unknown:" (format "TERMCAP=emacs:co#%d:tc=unknown:"
(window-width)))) (window-width))))
;; Set the EMACS variable, but
;; don't override users' setting of $EMACS.
;; Remove this hack once Bash 4.4-or-later is common,
;; since it can break 'configure'.
(unless (getenv "EMACS")
(list "EMACS=t"))
(list (format "INSIDE_EMACS=%s,compile" emacs-version)) (list (format "INSIDE_EMACS=%s,compile" emacs-version))
(copy-sequence process-environment)))) (copy-sequence process-environment))))
(set (make-local-variable 'compilation-arguments) (set (make-local-variable 'compilation-arguments)

View file

@ -427,21 +427,34 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
This gets tacked on the end of the generated expressions.") This gets tacked on the end of the generated expressions.")
;;;###autoload ;;;###autoload
(defvar grep-program (purecopy "grep") (defcustom grep-program (purecopy "grep")
"The default grep program for `grep-command' and `grep-find-command'. "The default grep program for `grep-command' and `grep-find-command'.
This variable's value takes effect when `grep-compute-defaults' is called.") This variable's value takes effect when `grep-compute-defaults' is called."
:type 'string
:version "25.1"
:group 'grep)
;;;###autoload ;;;###autoload
(defvar find-program (purecopy "find") (defcustom grep-find-program (purecopy "find")
"The default find program. "The default find program.
This is used by commands like `grep-find-command', `find-dired' This is used by commands like `grep-find-command', `find-dired'
and others.") and others."
:type 'string
:version "25.1"
:group 'grep)
(define-obsolete-variable-alias 'find-program 'grep-find-program "25.1")
;;;###autoload ;;;###autoload
(defvar xargs-program (purecopy "xargs") (defcustom grep-xargs-program (purecopy "xargs")
"The default xargs program for `grep-find-command'. "The default xargs program for `grep-find-command'.
See `grep-find-use-xargs'. See `grep-find-use-xargs'.
This variable's value takes effect when `grep-compute-defaults' is called.") This variable's value takes effect when `grep-compute-defaults' is called."
:type 'string
:version "25.1"
:group 'grep)
(define-obsolete-variable-alias 'xargs-program 'grep-xargs-program "25.1")
;;;###autoload ;;;###autoload
(defvar grep-find-use-xargs nil (defvar grep-find-use-xargs nil
@ -611,13 +624,14 @@ This function is called from `compilation-filter-hook'."
(unless grep-find-use-xargs (unless grep-find-use-xargs
(setq grep-find-use-xargs (setq grep-find-use-xargs
(cond (cond
((grep-probe find-program ((grep-probe grep-find-program
`(nil nil nil ,null-device "-exec" "echo" `(nil nil nil ,null-device "-exec" "echo"
"{}" "+")) "{}" "+"))
'exec-plus) 'exec-plus)
((and ((and
(grep-probe find-program `(nil nil nil ,null-device "-print0")) (grep-probe grep-find-program
(grep-probe xargs-program `(nil nil nil "-0" "echo"))) `(nil nil nil ,null-device "-print0"))
(grep-probe grep-xargs-program `(nil nil nil "-0" "echo")))
'gnu) 'gnu)
(t (t
'exec)))) 'exec))))
@ -628,10 +642,11 @@ This function is called from `compilation-filter-hook'."
;; after the pipe symbol be quoted if they use ;; after the pipe symbol be quoted if they use
;; forward slashes as directory separators. ;; forward slashes as directory separators.
(format "%s . -type f -print0 | \"%s\" -0 %s" (format "%s . -type f -print0 | \"%s\" -0 %s"
find-program xargs-program grep-command)) grep-find-program grep-xargs-program
grep-command))
((memq grep-find-use-xargs '(exec exec-plus)) ((memq grep-find-use-xargs '(exec exec-plus))
(let ((cmd0 (format "%s . -type f -exec %s" (let ((cmd0 (format "%s . -type f -exec %s"
find-program grep-command)) grep-find-program grep-command))
(null (if grep-use-null-device (null (if grep-use-null-device
(format "%s " null-device) (format "%s " null-device)
""))) "")))
@ -643,7 +658,8 @@ This function is called from `compilation-filter-hook'."
(1+ (length cmd0))))) (1+ (length cmd0)))))
(t (t
(format "%s . -type f -print | \"%s\" %s" (format "%s . -type f -print | \"%s\" %s"
find-program xargs-program grep-command))))) grep-find-program grep-xargs-program
grep-command)))))
(unless grep-find-template (unless grep-find-template
(setq grep-find-template (setq grep-find-template
(let ((gcmd (format "%s <C> %s <R>" (let ((gcmd (format "%s <C> %s <R>"
@ -653,17 +669,17 @@ This function is called from `compilation-filter-hook'."
""))) "")))
(cond ((eq grep-find-use-xargs 'gnu) (cond ((eq grep-find-use-xargs 'gnu)
(format "%s <D> <X> -type f <F> -print0 | \"%s\" -0 %s" (format "%s <D> <X> -type f <F> -print0 | \"%s\" -0 %s"
find-program xargs-program gcmd)) grep-find-program grep-xargs-program gcmd))
((eq grep-find-use-xargs 'exec) ((eq grep-find-use-xargs 'exec)
(format "%s <D> <X> -type f <F> -exec %s {} %s%s" (format "%s <D> <X> -type f <F> -exec %s {} %s%s"
find-program gcmd null grep-find-program gcmd null
(shell-quote-argument ";"))) (shell-quote-argument ";")))
((eq grep-find-use-xargs 'exec-plus) ((eq grep-find-use-xargs 'exec-plus)
(format "%s <D> <X> -type f <F> -exec %s %s{} +" (format "%s <D> <X> -type f <F> -exec %s %s{} +"
find-program gcmd null)) grep-find-program gcmd null))
(t (t
(format "%s <D> <X> -type f <F> -print | \"%s\" %s" (format "%s <D> <X> -type f <F> -print | \"%s\" %s"
find-program xargs-program gcmd)))))))) grep-find-program grep-xargs-program gcmd))))))))
;; Save defaults for this host. ;; Save defaults for this host.
(setq grep-host-defaults-alist (setq grep-host-defaults-alist

View file

@ -1374,8 +1374,20 @@ the variable `prolog-prompt-regexp'."
() ()
(with-current-buffer (get-buffer-create "*prolog*") (with-current-buffer (get-buffer-create "*prolog*")
(prolog-inferior-mode) (prolog-inferior-mode)
(apply 'make-comint-in-buffer "prolog" (current-buffer)
(prolog-program-name) nil (prolog-program-switches)) ;; The "INFERIOR=yes" hack is for SWI-Prolog 7.2.3 and earlier,
;; which assumes it is running under Emacs if either INFERIOR=yes or
;; if EMACS is set to a nonempty value. The EMACS setting is
;; obsolescent, so set INFERIOR. Newer versions of SWI-Prolog should
;; know about INSIDE_EMACS (which replaced EMACS) and should not need
;; this hack.
(let ((process-environment
(if (getenv "INFERIOR")
process-environment
(cons "INFERIOR=yes" process-environment))))
(apply 'make-comint-in-buffer "prolog" (current-buffer)
(prolog-program-name) nil (prolog-program-switches)))
(unless prolog-system (unless prolog-system
;; Setup auto-detection. ;; Setup auto-detection.
(setq-local (setq-local

View file

@ -398,8 +398,9 @@ With a prefix (or a FILL) argument, also fill too short lines."
(defun rectangle--space-to (col) (defun rectangle--space-to (col)
(propertize " " 'display `(space :align-to ,col))) (propertize " " 'display `(space :align-to ,col)))
(defface rectangle-preview-face '((t :inherit region)) (defface rectangle-preview '((t :inherit region))
"The face to use for the `string-rectangle' preview.") "The face to use for the `string-rectangle' preview."
:version "25.1")
(defcustom rectangle-preview t (defcustom rectangle-preview t
"If non-nil, `string-rectangle' will show an-the-fly preview." "If non-nil, `string-rectangle' will show an-the-fly preview."

View file

@ -2087,6 +2087,10 @@ some sort of escape sequence, the ambiguity is resolved via `read-key-delay'."
(aref keys 1) (aref keys 1)
key))) key)))
(cancel-timer timer) (cancel-timer timer)
;; For some reason, `read-key(-sequence)' leaves the prompt in the echo
;; area, whereas `read-event' seems to empty it just before returning
;; (bug#22714). So, let's mimic the behavior of `read-event'.
(message nil)
(use-global-map old-global-map)))) (use-global-map old-global-map))))
(defvar read-passwd-map (defvar read-passwd-map
@ -4107,7 +4111,8 @@ This function makes or adds to an entry on `after-load-alist'."
(defmacro with-eval-after-load (file &rest body) (defmacro with-eval-after-load (file &rest body)
"Execute BODY after FILE is loaded. "Execute BODY after FILE is loaded.
FILE is normally a feature name, but it can also be a file name, FILE is normally a feature name, but it can also be a file name,
in case that file does not provide any feature." in case that file does not provide any feature. See `eval-after-load'
for more details about the different forms of FILE and their semantics."
(declare (indent 1) (debug t)) (declare (indent 1) (debug t))
`(eval-after-load ,file (lambda () ,@body))) `(eval-after-load ,file (lambda () ,@body)))

View file

@ -165,8 +165,20 @@ matching the resulting Git log output, and KEYWORDS is a list of
:type '(list string string (repeat sexp)) :type '(list string string (repeat sexp))
:version "24.1") :version "24.1")
(defvar vc-git-commits-coding-system 'utf-8 (defcustom vc-git-commits-coding-system 'utf-8
"Default coding system for git commits.") "Default coding system for sending commit log messages to Git.
Should be consistent with the Git config value i18n.commitEncoding,
and should also be consistent with `locale-coding-system'."
:type '(coding-system :tag "Coding system to encode Git commit logs")
:version "25.1")
(defcustom vc-git-log-output-coding-system 'utf-8
"Default coding system for receiving log output from Git.
Should be consistent with the Git config value i18n.logOutputEncoding."
:type '(coding-system :tag "Coding system to decode Git log output")
:version "25.1")
;; History of Git commands. ;; History of Git commands.
(defvar vc-git-history nil) (defvar vc-git-history nil)
@ -680,21 +692,43 @@ It is based on `log-edit-mode', and has Git-specific extensions.")
(default-directory (expand-file-name root)) (default-directory (expand-file-name root))
(only (or (cdr files) (only (or (cdr files)
(not (equal root (abbreviate-file-name file1))))) (not (equal root (abbreviate-file-name file1)))))
(coding-system-for-write vc-git-commits-coding-system)) (pcsw coding-system-for-write)
(coding-system-for-write
;; On MS-Windows, we must encode command-line arguments in
;; the system codepage.
(if (eq system-type 'windows-nt)
locale-coding-system
(or coding-system-for-write vc-git-commits-coding-system)))
(msg-file
;; On MS-Windows, pass the commit log message through a
;; file, to work around the limitation that command-line
;; arguments must be in the system codepage, and therefore
;; might not support the non-ASCII characters in the log
;; message.
(if (eq system-type 'windows-nt) (make-temp-file "git-msg"))))
(cl-flet ((boolean-arg-fn (cl-flet ((boolean-arg-fn
(argument) (argument)
(lambda (value) (when (equal value "yes") (list argument))))) (lambda (value) (when (equal value "yes") (list argument)))))
;; When operating on the whole tree, better pass "-a" than ".", since "." ;; When operating on the whole tree, better pass "-a" than ".", since "."
;; fails when we're committing a merge. ;; fails when we're committing a merge.
(apply 'vc-git-command nil 0 (if only files) (apply 'vc-git-command nil 0 (if only files)
(nconc (list "commit" "-m") (nconc (if msg-file (list "commit" "-F" msg-file)
(log-edit-extract-headers (list "commit" "-m"))
`(("Author" . "--author") (let ((args
("Date" . "--date") (log-edit-extract-headers
("Amend" . ,(boolean-arg-fn "--amend")) `(("Author" . "--author")
("Sign-Off" . ,(boolean-arg-fn "--signoff"))) ("Date" . "--date")
comment) ("Amend" . ,(boolean-arg-fn "--amend"))
(if only (list "--only" "--") '("-a"))))))) ("Sign-Off" . ,(boolean-arg-fn "--signoff")))
comment)))
(when msg-file
(let ((coding-system-for-write
(or pcsw vc-git-commits-coding-system)))
(write-region (car args) nil msg-file))
(setq args (cdr args)))
args)
(if only (list "--only" "--") '("-a")))))
(if (and msg-file (file-exists-p msg-file)) (delete-file msg-file))))
(defun vc-git-find-revision (file rev buffer) (defun vc-git-find-revision (file rev buffer)
(let* (process-file-side-effects (let* (process-file-side-effects
@ -854,7 +888,7 @@ If SHORTLOG is non-nil, use a short format based on `vc-git-root-log-format'.
If START-REVISION is non-nil, it is the newest revision to show. If START-REVISION is non-nil, it is the newest revision to show.
If LIMIT is non-nil, show no more than this many entries." If LIMIT is non-nil, show no more than this many entries."
(let ((coding-system-for-read (let ((coding-system-for-read
(or coding-system-for-read vc-git-commits-coding-system))) (or coding-system-for-read vc-git-log-output-coding-system)))
;; `vc-do-command' creates the buffer, but we need it before running ;; `vc-do-command' creates the buffer, but we need it before running
;; the command. ;; the command.
(vc-setup-buffer buffer) (vc-setup-buffer buffer)
@ -1389,7 +1423,7 @@ This command shares argument histories with \\[rgrep] and \\[grep]."
The difference to vc-do-command is that this function always invokes The difference to vc-do-command is that this function always invokes
`vc-git-program'." `vc-git-program'."
(let ((coding-system-for-read (let ((coding-system-for-read
(or coding-system-for-read vc-git-commits-coding-system)) (or coding-system-for-read vc-git-log-output-coding-system))
(coding-system-for-write (coding-system-for-write
(or coding-system-for-write vc-git-commits-coding-system))) (or coding-system-for-write vc-git-commits-coding-system)))
(apply 'vc-do-command (or buffer "*vc*") okstatus vc-git-program (apply 'vc-do-command (or buffer "*vc*") okstatus vc-git-program
@ -1414,8 +1448,10 @@ The difference to vc-do-command is that this function always invokes
;; directories. We enable `inhibit-null-byte-detection', otherwise ;; directories. We enable `inhibit-null-byte-detection', otherwise
;; Tramp's eol conversion might be confused. ;; Tramp's eol conversion might be confused.
(let ((inhibit-null-byte-detection t) (let ((inhibit-null-byte-detection t)
(coding-system-for-read vc-git-commits-coding-system) (coding-system-for-read
(coding-system-for-write vc-git-commits-coding-system) (or coding-system-for-read vc-git-log-output-coding-system))
(coding-system-for-write
(or coding-system-for-write vc-git-commits-coding-system))
(process-environment (cons "PAGER=" process-environment))) (process-environment (cons "PAGER=" process-environment)))
(apply 'process-file vc-git-program nil buffer nil command args))) (apply 'process-file vc-git-program nil buffer nil command args)))

View file

@ -40,7 +40,7 @@
:group 'mode-line :group 'mode-line
:version "25.1") :version "25.1")
(defface vc-state-base-face (defface vc-state-base
'((default)) '((default))
"Base face for VC state indicator." "Base face for VC state indicator."
:group 'vc-faces :group 'vc-faces
@ -48,49 +48,49 @@
:version "25.1") :version "25.1")
(defface vc-up-to-date-state (defface vc-up-to-date-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file is up to date." "Face for VC modeline state when the file is up to date."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-needs-update-state (defface vc-needs-update-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file needs update." "Face for VC modeline state when the file needs update."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-locked-state (defface vc-locked-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file locked." "Face for VC modeline state when the file locked."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-locally-added-state (defface vc-locally-added-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file is locally added." "Face for VC modeline state when the file is locally added."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-conflict-state (defface vc-conflict-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file contains merge conflicts." "Face for VC modeline state when the file contains merge conflicts."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-removed-state (defface vc-removed-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file was removed from the VC system." "Face for VC modeline state when the file was removed from the VC system."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-missing-state (defface vc-missing-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file is missing from the file system." "Face for VC modeline state when the file is missing from the file system."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)
(defface vc-edited-state (defface vc-edited-state
'((default :inherit vc-state-base-face)) '((default :inherit vc-state-base))
"Face for VC modeline state when the file is edited." "Face for VC modeline state when the file is edited."
:version "25.1" :version "25.1"
:group 'vc-faces) :group 'vc-faces)

View file

@ -2895,7 +2895,7 @@
(wait_reading_process_output, init_process_emacs): (wait_reading_process_output, init_process_emacs):
Assume O_NONBLOCK. Assume O_NONBLOCK.
(wait_reading_process_output): Put in a special case for WINDOWSNT (wait_reading_process_output): Put in a special case for WINDOWSNT
to mimick the older behavior where it had O_NDELAY but not O_NONBLOCK. to mimic the older behavior where it had O_NDELAY but not O_NONBLOCK.
It's not clear this is needed, but it's a more-conservative change. It's not clear this is needed, but it's a more-conservative change.
(create_process): Assume FD_CLOEXEC. (create_process): Assume FD_CLOEXEC.
(create_process, create_pty): Assume O_NOCTTY. (create_process, create_pty): Assume O_NOCTTY.

View file

@ -596,8 +596,15 @@ ns_init_locale (void)
@try @try
{ {
/* It seems OS X should probably use UTF-8 everywhere.
'localeIdentifier' does not specify the encoding, and I can't
find any way to get the OS to tell us which encoding to use,
so hard-code '.UTF-8'. */
NSString *localeID = [NSString stringWithFormat:@"%@.UTF-8",
[locale localeIdentifier]];
/* Set LANG to locale, but not if LANG is already set. */ /* Set LANG to locale, but not if LANG is already set. */
setenv("LANG", [[locale localeIdentifier] UTF8String], 0); setenv("LANG", [localeID UTF8String], 0);
} }
@catch (NSException *e) @catch (NSException *e)
{ {

View file

@ -103,9 +103,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <stdio.h> #include <stdio.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdint.h>
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <mach/mach.h> #include <mach/mach.h>
#include <mach/vm_map.h>
#include <mach-o/loader.h> #include <mach-o/loader.h>
#include <mach-o/reloc.h> #include <mach-o/reloc.h>
#ifdef HAVE_MALLOC_MALLOC_H #ifdef HAVE_MALLOC_MALLOC_H
@ -217,10 +219,27 @@ unexec_read (void *dest, size_t n)
static int static int
unexec_write (off_t dest, const void *src, size_t count) unexec_write (off_t dest, const void *src, size_t count)
{ {
task_t task = mach_task_self();
if (task == MACH_PORT_NULL || task == MACH_PORT_DEAD)
return false;
if (lseek (outfd, dest, SEEK_SET) != dest) if (lseek (outfd, dest, SEEK_SET) != dest)
return 0; return 0;
return write (outfd, src, count) == count; /* We use the Mach virtual memory API to read our process memory
because using src directly would be undefined behavior and fails
under Address Sanitizer. */
bool success = false;
vm_offset_t data;
mach_msg_type_number_t data_count;
if (vm_read (task, (uintptr_t) src, count, &data, &data_count)
== KERN_SUCCESS)
{
success =
write (outfd, (const void *) (uintptr_t) data, data_count) == count;
vm_deallocate (task, data, data_count);
}
return success;
} }
/* Write COUNT bytes of zeros to outfd starting at offset DEST. /* Write COUNT bytes of zeros to outfd starting at offset DEST.

View file

@ -545,7 +545,7 @@ syms_of_xsmfns (void)
Changing the value does not change the session id used by Emacs. Changing the value does not change the session id used by Emacs.
The value is nil if no session manager is running. The value is nil if no session manager is running.
See also `x-session-previous-id', `emacs-save-session-functions', See also `x-session-previous-id', `emacs-save-session-functions',
`emacs-session-save' and `emacs-session-restore'." */); `emacs-session-save' and `emacs-session-restore'. */);
Vx_session_id = Qnil; Vx_session_id = Qnil;
DEFVAR_LISP ("x-session-previous-id", Vx_session_previous_id, DEFVAR_LISP ("x-session-previous-id", Vx_session_previous_id,
@ -568,7 +568,7 @@ The session id Emacs has while it is running is in the variable
same, depending on how the session manager works. same, depending on how the session manager works.
See also `emacs-save-session-functions', `emacs-session-save' and See also `emacs-save-session-functions', `emacs-session-save' and
`emacs-session-restore'." */); `emacs-session-restore'. */);
Vx_session_previous_id = Qnil; Vx_session_previous_id = Qnil;
defsubr (&Shandle_save_session); defsubr (&Shandle_save_session);

View file

@ -578,24 +578,22 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
other time to know things like window placement etc. */ other time to know things like window placement etc. */
xv = xwidget_init_view (xww, s, x, y); xv = xwidget_init_view (xww, s, x, y);
/* Calculate clipping, which is used for all manner of onscreen int text_area_x, text_area_y, text_area_width, text_area_height;
xwidget views. Each widget border can get clipped by other emacs
objects so there are four clipping variables. */
clip_right =
min (xww->width,
WINDOW_RIGHT_EDGE_X (s->w) - x -
WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH (s->w) -
WINDOW_RIGHT_FRINGE_WIDTH (s->w));
clip_left =
max (0,
WINDOW_LEFT_EDGE_X (s->w) - x +
WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w) +
WINDOW_LEFT_FRINGE_WIDTH (s->w));
clip_bottom = window_box (s->w,
min (xww->height, ANY_AREA,
WINDOW_BOTTOM_EDGE_Y (s->w) - WINDOW_MODE_LINE_HEIGHT (s->w) - y); &text_area_x,
clip_top = max (0, WINDOW_TOP_EDGE_Y (s->w) - y); &text_area_y,
&text_area_width,
&text_area_height);
clip_right = min (xww->width,
text_area_width);
clip_left = max (0,
text_area_x);
clip_bottom = min (xww->height,
text_area_height);
clip_top = max (0, text_area_y);
/* We are concerned with movement of the onscreen area. The area /* We are concerned with movement of the onscreen area. The area
might sit still when the widget actually moves. This happens might sit still when the widget actually moves. This happens