Boring merge from savannah.

This commit is contained in:
Alan Mackenzie 2011-10-28 14:35:39 +00:00
commit 93b5b3bdc8
79 changed files with 1477 additions and 718 deletions

View file

@ -1,3 +1,14 @@
2011-10-25 Nali Toja <nalitoja@gmail.com> (tiny change)
* configure.in (HAVE_GNU_MAKE): Respect MAKE env-var. (Bug#9868)
2011-10-24 Paul Eggert <eggert@cs.ucla.edu>
* configure.in (LIB_PTHREAD): Prepend -lpthread to LIBS (Bug#9852)
if the library is found. Otherwise, later configure-time tests,
such as the test for pthread_sigmask, generate the wrong results
on some platforms. Problem reported for FreeBSD by Nali Toja.
2011-10-20 Paul Eggert <eggert@cs.ucla.edu>
Time zone name fixes for non-ASCII locales (Bug#641, Bug#9794)

View file

@ -153,7 +153,7 @@ ack.texi
anti.texi
arevert-xtra.texi cyd
basic.texi cyd
buffers.texi
buffers.texi cyd
building.texi
calendar.texi
cal-xtra.texi

9
autogen/configure vendored
View file

@ -9360,7 +9360,7 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using GNU Make" >&5
$as_echo_n "checking whether we are using GNU Make... " >&6; }
HAVE_GNU_MAKE=no
testval=`make --version 2>/dev/null | grep 'GNU Make'`
testval=`${MAKE-make} --version 2>/dev/null | grep 'GNU Make'`
if test "x$testval" != x; then
HAVE_GNU_MAKE=yes
else
@ -10380,7 +10380,8 @@ fi
if test "$HAVE_PTHREAD" = yes; then
case "${canonical}" in
*-hpux*) ;;
*) LIB_PTHREAD="-lpthread" ;;
*) LIB_PTHREAD="-lpthread"
LIBS="$LIB_PTHREAD $LIBS" ;;
esac
$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
@ -22444,14 +22445,14 @@ echo
if test "$HAVE_NS" = "yes"; then
echo
echo "You must run \"make install\" in order to test the built application.
echo "You must run \"${MAKE-make} install\" in order to test the built application.
The installed application will go to nextstep/Emacs.app and can be
run or moved from there."
if test "$EN_NS_SELF_CONTAINED" = "yes"; then
echo "The application will be fully self-contained."
else
echo "The lisp resources for the application will be installed under ${prefix}.
You may need to run \"make install\" with sudo. The application will fail
You may need to run \"${MAKE-make} install\" with sudo. The application will fail
to run if these resources are not installed."
fi
echo

View file

@ -1374,7 +1374,7 @@ dnl check for GNU Make if we have GCC and autodepend is on.
if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then
AC_MSG_CHECKING([whether we are using GNU Make])
HAVE_GNU_MAKE=no
testval=`make --version 2>/dev/null | grep 'GNU Make'`
testval=`${MAKE-make} --version 2>/dev/null | grep 'GNU Make'`
if test "x$testval" != x; then
HAVE_GNU_MAKE=yes
else
@ -1723,7 +1723,8 @@ fi
if test "$HAVE_PTHREAD" = yes; then
case "${canonical}" in
*-hpux*) ;;
*) LIB_PTHREAD="-lpthread" ;;
*) LIB_PTHREAD="-lpthread"
LIBS="$LIB_PTHREAD $LIBS" ;;
esac
AC_DEFINE(HAVE_PTHREAD, 1, [Define to 1 if you have pthread (-lpthread).])
fi
@ -3739,14 +3740,14 @@ echo
if test "$HAVE_NS" = "yes"; then
echo
echo "You must run \"make install\" in order to test the built application.
echo "You must run \"${MAKE-make} install\" in order to test the built application.
The installed application will go to nextstep/Emacs.app and can be
run or moved from there."
if test "$EN_NS_SELF_CONTAINED" = "yes"; then
echo "The application will be fully self-contained."
else
echo "The lisp resources for the application will be installed under ${prefix}.
You may need to run \"make install\" with sudo. The application will fail
You may need to run \"${MAKE-make} install\" with sudo. The application will fail
to run if these resources are not installed."
fi
echo

View file

@ -1,5 +1,23 @@
2011-10-26 Juanma Barranquero <lekktu@gmail.com>
* emacs.texi (Top): Fix typo.
2011-10-25 Glenn Morris <rgm@gnu.org>
* abbrevs.texi (Saving Abbrevs):
quietly-read-abbrev-file is not a command. (Bug#9866)
2011-10-24 Chong Yidong <cyd@gnu.org>
* display.texi (Scrolling): Document scroll-up-line and
scroll-down-line. Document scroll-command property.
(Recentering): New node, split off from Scrolling.
2011-10-23 Chong Yidong <cyd@gnu.org>
* frames.texi (Scroll Bars): GTK uses right scroll bars now.
(Tool Bars): Copyedits.
* buffers.texi (Misc Buffer): Don't mention vc-toggle-read-only.
2011-10-22 Chong Yidong <cyd@gnu.org>

View file

@ -286,8 +286,6 @@ sessions.
Write a file @var{file} describing all defined abbrevs.
@item M-x read-abbrev-file @key{RET} @var{file} @key{RET}
Read the file @var{file} and define abbrevs as specified therein.
@item M-x quietly-read-abbrev-file @key{RET} @var{file} @key{RET}
Similar but do not display a message about what is going on.
@item M-x define-abbrevs
Define abbrevs from definitions in current buffer.
@item M-x insert-abbrevs

View file

@ -229,9 +229,8 @@ have special commands to operate on the text; also by visiting a file
whose access control says you cannot write it.
@findex toggle-read-only
If you wish to make changes in a read-only buffer, use the command
@kbd{C-x C-q} (@code{toggle-read-only}). It makes a read-only buffer
writable, and makes a writable buffer read-only. This works by
The command @kbd{C-x C-q} (@code{toggle-read-only}) makes a read-only
buffer writable, and makes a writable buffer read-only. This works by
setting the variable @code{buffer-read-only}, which has a local value
in each buffer and makes the buffer read-only if its value is
non-@code{nil}.

View file

@ -13,6 +13,7 @@ the text is displayed.
@menu
* Scrolling:: Commands to move text up and down in a window.
* Recentering:: A scroll command that centers the current line.
* Auto Scrolling:: Redisplay scrolls text automatically when needed.
* Horizontal Scrolling:: Moving text left and right in a window.
* Narrowing:: Restricting display and editing to a portion
@ -48,15 +49,15 @@ portion of the buffer is displayed.
Scrolling ``forward'' or ``up'' advances the portion of the buffer
displayed in the window; equivalently, it moves the buffer text
upwards relative to the window. Scrolling ``backward'' or ``down''
moves the displayed portion backwards, and moves the text downwards
relative to the window. In Emacs, scrolling ``up'' or ``down'' refers
to the direction that the text moves in the window, @emph{not} the
direction that the window moves relative to the text; this terminology
was taken up by Emacs before the modern meaning of ``scrolling up''
and ``scrolling down'' became widely adopted. Hence the strange
result that @key{PageDown} scrolls ``up'' in the Emacs sense. In this
manual, we refer to scrolling ``forward'' and ``backward'' where
possible, in order to minimize confusion.
displays an earlier portion of the buffer, and moves the text
downwards relative to the window.
In Emacs, scrolling ``up'' or ``down'' refers to the direction that
the text moves in the window, @emph{not} the direction that the window
moves relative to the text. This terminology was adopted by Emacs
before the modern meaning of ``scrolling up'' and ``scrolling down''
became widespread. Hence, the strange result that @key{PageDown}
scrolls ``up'' in the Emacs sense.
The portion of a buffer displayed in a window always contains point.
If you move point past the bottom or top of the window, scrolling
@ -64,11 +65,6 @@ occurs automatically to bring it back onscreen (@pxref{Auto
Scrolling}). You can also scroll explicitly with these commands:
@table @kbd
@item C-l
Scroll the selected window so that the current line is the center-most
text line; on subsequent consecutive invocations, make the current
line the top-most line, the bottom-most line, and so on in cyclic
order; also, maybe redisplay the screen (@code{recenter-top-bottom}).
@item C-v
@itemx @key{next}
@itemx @key{PageDown}
@ -77,6 +73,86 @@ Scroll forward by nearly a full window (@code{scroll-up-command}).
@itemx @key{prior}
@itemx @key{PageUp}
Scroll backward (@code{scroll-down-command}).
@end table
@kindex C-v
@kindex M-v
@kindex next
@kindex prior
@kindex PageDown
@kindex PageUp
@findex scroll-up-command
@findex scroll-down-command
@kbd{C-v} (@code{scroll-up-command}) scrolls forward by nearly the
whole window height. The effect is to take the two lines at the
bottom of the window and put them at the top, followed by lines that
were not previously visible. If point was in the text that scrolled
off the top, it ends up on the window's new topmost line. The
@key{next} (or @key{PageDown}) key is equivalent to @kbd{C-v}.
@kbd{M-v} (@code{scroll-down-command}) scrolls backward in a similar
way. The @key{prior} (or @key{PageUp}) key is equivalent to
@kbd{M-v}.
@vindex next-screen-context-lines
The number of lines of overlap left by these scroll commands is
controlled by the variable @code{next-screen-context-lines}, whose
default value is 2. You can supply the commands with a numeric prefix
argument, @var{n}, to scroll by @var{n} lines; Emacs attempts to leave
point unchanged, so that the text and point move up or down together.
@kbd{C-v} with a negative argument is like @kbd{M-v} and vice versa.
@vindex scroll-error-top-bottom
By default, these commands signal an error (by beeping or flashing
the screen) if no more scrolling is possible, because the window has
reached the beginning or end of the buffer. If you change the
variable @code{scroll-error-top-bottom} to @code{t}, the command moves
point to the farthest possible position. If point is already there,
the command signals an error.
@vindex scroll-preserve-screen-position
@cindex @code{scroll-command} property
Some users like scroll commands to keep point at the same screen
position, so that scrolling back to the same screen conveniently
returns point to its original position. You can enable this behavior
via the variable @code{scroll-preserve-screen-position}. If the value
is @code{t}, Emacs adjusts point to keep the cursor at the same screen
position whenever a scroll command moves it off-window, rather than
moving it to the topmost or bottommost line. With any other
non-@code{nil} value, Emacs adjusts point this way even if the scroll
command leaves point in the window. This variable affects all the
scroll commands documented in this section, as well as scrolling with
the mouse wheel (@pxref{Wheeled Mice}); in general, it affects any
command that has a non-@code{nil} @code{scroll-command} property.
@xref{Property Lists,,, elisp, The Emacs Lisp Reference Manual}.
@vindex scroll-up
@vindex scroll-down
@findex scroll-up-line
@findex scroll-down-line
The commands @kbd{M-x scroll-up} and @kbd{M-x scroll-down} behave
similarly to @code{scroll-up-command} and @code{scroll-down-command},
except they do not obey @code{scroll-error-top-bottom}. Prior to
Emacs 24, these were the default commands for scrolling up and down.
The commands @kbd{M-x scroll-up-line} and @kbd{M-x scroll-down-line}
scroll the current window by one line at a time. If you intend to use
any of these commands, you might want to give them key bindings
(@pxref{Init Rebinding}).
@node Recentering
@section Recentering
@table @kbd
@item C-l
Scroll the selected window so the current line is the center-most text
line; on subsequent consecutive invocations, make the current line the
top line, the bottom line, and so on in cyclic order. Possibly
redisplay the screen too (@code{recenter-top-bottom}).
@item M-x recenter
Scroll the selected window so the current line is the center-most text
line. Possibly redisplay the screen too.
@item C-M-l
Scroll heuristically to bring useful information onto the screen
(@code{reposition-window}).
@ -107,14 +183,13 @@ non-zero value @var{n}, @kbd{C-l} always leaves at least @var{n}
screen lines between point and the top or bottom of the window
(@pxref{Auto Scrolling}).
You can also supply @kbd{C-l} with a prefix argument. With a plain
prefix argument, @kbd{C-u C-l}, Emacs simply recenters point. With a
positive argument @var{n}, it scrolls to place point @var{n} lines
down from the top of the window. An argument of zero puts point on
the topmost line. A negative argument @var{-n} puts point @var{n}
lines from the bottom of the window. When given an argument,
@kbd{C-l} does not clear the screen or cycle through different screen
positions.
You can also give @kbd{C-l} a prefix argument. A plain prefix
argument, @kbd{C-u C-l}, simply recenters point. A positive argument
@var{n} puts point @var{n} lines down from the top of the window. An
argument of zero puts point on the topmost line. A negative argument
@var{-n} puts point @var{n} lines from the bottom of the window. When
given an argument, @kbd{C-l} does not clear the screen or cycle
through different screen positions.
@vindex recenter-redisplay
If the variable @code{recenter-redisplay} has a non-@code{nil}
@ -127,62 +202,6 @@ becomes garbled for any reason (@pxref{Screen Garbled}).
The more primitive command @kbd{M-x recenter} behaves like
@code{recenter-top-bottom}, but does not cycle among screen positions.
@kindex C-v
@kindex M-v
@kindex next
@kindex prior
@kindex PageDown
@kindex PageUp
@findex scroll-up-command
@findex scroll-down-command
@kbd{C-v} (@code{scroll-up-command}) scrolls forward by nearly the
whole window height. The effect is to take the two lines at the
bottom of the window and put them at the top, followed by lines that
were not previously visible. If point was in the text that scrolled
off the top, it ends up on the window's new topmost line.
Similarly, @kbd{M-v} (@code{scroll-down-command}) scrolls backward.
We refer to @kbd{C-v} and @kbd{M-v} as @dfn{full-screen scroll
commands}. The function key @key{next}, or @key{PageDown}, is
equivalent to @kbd{C-v}; the function key @key{prior}, or
@key{PageUp}, is equivalent to @kbd{M-v}.
@vindex next-screen-context-lines
The variable @code{next-screen-context-lines} controls the number of
lines of overlap left by the full-screen scroll commands; by default,
it is 2. You can supply these commands with a numeric prefix argument
@var{n}. This scrolls the window by @var{n} lines, while attempting
to leave point unchanged (so that the text and point move up or down
together). @kbd{C-v} with a negative argument is like @kbd{M-v} and
vice versa.
@vindex scroll-error-top-bottom
By default, the full-screen scroll commands signal an error (by
beeping or flashing the screen) if no more scrolling is possible,
because the window has reached the beginning or end of the buffer. If
you change the variable @code{scroll-error-top-bottom} to @code{t},
Emacs instead moves point to the farthest possible position. If point
is already there, the command signals an error.
@vindex scroll-preserve-screen-position
Some users like scroll commands to keep point at the same screen
position. Then, scrolling back to the same screen also conveniently
returns point to its original position. You can enable this via the
variable @code{scroll-preserve-screen-position}. If the value is
@code{t}, Emacs adjusts point to keep it at the same vertical position
within the window, rather than the window edge, whenever a scroll
command moves it off the window. With any other non-@code{nil} value,
Emacs adjusts point this way even if the scroll command leaves point
in the window.
@vindex scroll-up
@vindex scroll-down
The commands @code{scroll-up} and @code{scroll-down} behave
similarly to @code{scroll-up-command} and @code{scroll-down-command},
except they do not obey @code{scroll-error-top-bottom}. Prior to
Emacs 24, these were the default commands for scrolling up and down.
@kindex C-M-l
@findex reposition-window
@kbd{C-M-l} (@code{reposition-window}) scrolls the current window

View file

@ -295,7 +295,7 @@ Help
* Package Keywords:: Finding Lisp libraries by keywords (topics).
* Language Help:: Help relating to international language support.
* Misc Help:: Other help commands.
* Help Files:: Commands to display auxilliary help files.
* Help Files:: Commands to display auxiliary help files.
* Help Echo:: Help on active text and tooltips (`balloon help').
The Mark and the Region
@ -342,6 +342,7 @@ Registers
Controlling the Display
* Scrolling:: Commands to move text up and down in a window.
* Recentering:: A scrolling command that centers the current line.
* Auto Scrolling:: Redisplay scrolls text automatically when needed.
* Horizontal Scrolling:: Moving text left and right in a window.
* Narrowing:: Restricting display and editing to a portion

View file

@ -956,55 +956,43 @@ Parameters,,, elisp, The Emacs Lisp Reference Manual}.
@cindex Scroll Bar mode
@cindex mode, Scroll Bar
On graphical displays, Emacs normally makes a @dfn{scroll bar} at
the left of each Emacs window, running the height of the
window.@footnote{Placing it at the left is usually more useful with
overlapping frames with text starting at the left margin.}
On graphical displays, there is a @dfn{scroll bar} on the side of
each Emacs window. Clicking @kbd{Mouse-1} on the scroll bar's up and
down buttons scrolls the window by one line at a time. Clicking
@kbd{Mouse-1} above or below the scroll bar's inner box scrolls the
window by nearly the entire height of the window, like @kbd{M-v} and
@kbd{C-v} respectively (@pxref{Moving Point}). Dragging the inner box
scrolls continuously.
When Emacs is compiled with GTK+ support on the X Window System, or
in operating systems such as Microsoft Windows or Mac OS, you can use
the scroll bar as you do in other graphical applications. If you
click @kbd{Mouse-1} on the scroll bar's up and down buttons, that
scrolls the window by one line at a time. Clicking @kbd{Mouse-1}
above or below the scroll bar's inner box scrolls the window by nearly
the entire height of the window, like @kbd{M-v} and @kbd{C-v}
respectively (@pxref{Moving Point}). Dragging the inner box with
@kbd{Mouse-1} scrolls the window continuously.
If Emacs is compiled without GTK+ support on the X Window System,
the scroll bar behaves differently. The scroll bar's inner box is
drawn to represent the portion of the buffer currently displayed, with
the entire height of the scroll bar representing the entire length of
the buffer. @kbd{Mouse-1} anywhere on the scroll bar scrolls forward
like @kbd{C-v}, and @kbd{Mouse-3} scrolls backward like @kbd{M-v}.
Clicking @kbd{Mouse-2} in the scroll bar lets you move or drag the
inner box up and down.
You can also click @kbd{C-Mouse-2} in the scroll bar to split a
window vertically. The split occurs on the line where you click.
If Emacs is compiled on the X Window System without X toolkit
support, the scroll bar behaves differently. Clicking @kbd{Mouse-1}
anywhere on the scroll bar scrolls forward like @kbd{C-v}, while
@kbd{Mouse-3} scrolls backward like @kbd{M-v}. Clicking @kbd{Mouse-2}
in the scroll bar lets you drag the inner box up and down.
@findex scroll-bar-mode
@vindex scroll-bar-mode
You can toggle the use of the scroll bar with the command @kbd{M-x
scroll-bar-mode}. With a prefix argument, this command turns use of
scroll bars on if and only if the argument is positive. This command
applies to all frames, including frames yet to be created. Customize
the variable @code{scroll-bar-mode} to control the use of scroll bars
at startup. You can use it to specify that they are placed at the
right of windows if you prefer that. You have to set this variable
through the @samp{Customize} interface (@pxref{Easy Customization}),
or it will not work properly. You can also use the X resource
@samp{verticalScrollBars} to control the initial setting of Scroll Bar
mode. @xref{Resources}.
@findex toggle-scroll-bar
To enable or disable scroll bars for just the selected frame, use the
To toggle the use of scroll bars, type @kbd{M-x scroll-bar-mode}.
This command applies to all frames, including frames yet to be
created. To toggle scroll bars for just the selected frame, use the
command @kbd{M-x toggle-scroll-bar}.
@vindex scroll-bar-mode
To control the use of scroll bars at startup, customize the variable
@code{scroll-bar-mode}. Its value should be either @code{right} (put
scroll bars on the right side of windows), @code{left} (put them on
the left), or @code{nil} (disable scroll bars). By default, Emacs
puts scroll bars on the right if it was compiled with GTK+ support on
the X Window System, and on MS-Windows or Mac OS; Emacs puts scroll
bars on the left if compiled on the X Window system without GTK+
support (following the old convention for X applications).
@vindex scroll-bar-width
@cindex width of the scroll bar
You can control the scroll bar width by changing the value of the
@code{scroll-bar-width} frame parameter.
You can also use the X resource @samp{verticalScrollBars} to enable
or disable the scroll bars (@pxref{Resources}). To control the scroll
bar width, change the @code{scroll-bar-width} frame parameter
(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}).
@node Wheeled Mice
@section Scrolling With ``Wheeled'' Mice
@ -1082,36 +1070,33 @@ menus' visual appearance.
@cindex mode, Tool Bar
@cindex icons, toolbar
The @dfn{tool bar} is a line (or lines) of icons at the top of the
Emacs window, just below the menu bar. You can click on these icons
with the mouse to do various jobs.
On graphical displays, Emacs puts a @dfn{tool bar} at the top of
each frame, just below the menu bar. This is a row of icons which you
can click on with the mouse to invoke various commands.
The global tool bar contains general commands. Some major modes
define their own tool bars to replace it. A few ``special'' modes
that are not designed for ordinary editing remove some items from the
global tool bar.
Tool bars work only on a graphical display. The tool bar uses colored
XPM icons if Emacs was built with XPM support. Otherwise, the tool
bar uses monochrome icons (PBM or XBM format).
The global (default) tool bar contains general commands. Some major
modes define their own tool bars; whenever a buffer with such a major
mode is current, the mode's tool bar replaces the global tool bar.
@findex tool-bar-mode
@vindex tool-bar-mode
You can turn display of tool bars on or off with @kbd{M-x
tool-bar-mode} or by customizing the option @code{tool-bar-mode}.
To toggle the use of tool bars, type @kbd{M-x tool-bar-mode}. This
command applies to all frames, including frames yet to be created. To
control the use of tool bars at startup, customize the variable
@code{tool-bar-mode}.
@vindex tool-bar-style
@cindex Tool Bar style
When Emacs is compiled with GTK+ support, tool bars can have text and images.
Customize @code{tool-bar-style} to select style. The default style is
the same as for the desktop in the Gnome case. If no default is found,
the tool bar uses just images.
When Emacs is compiled with GTK+ support, each tool bar item can
consist of an image, or a text label, or both. By default, Emacs
follows the Gnome desktop's tool bar style setting; if none is
defined, it displays tool bar items as just images. To impose a
specific tool bar style, customize the variable @code{tool-bar-style}.
@cindex Tool Bar position
You can also control the placement of the tool bar for the GTK+ tool bar
with the frame parameter @code{tool-bar-position}.
For a detailed description of frame parameters and customization,
see @ref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}.
You can also control the placement of the tool bar for the GTK+ tool
bar with the frame parameter @code{tool-bar-position}. @xref{Frame
Parameters,,, elisp, The Emacs Lisp Reference Manual}.
@node Dialog Boxes
@section Using Dialog Boxes
@ -1186,11 +1171,11 @@ options for displaying tooltips, use @kbd{M-x customize-group
customizing the windows that display tooltips.
@vindex x-gtk-use-system-tooltips
If Emacs is built with GTK support, it displays tooltips via GTK,
using the default appearance of GTK tooltips. To disable this, change
the variable @code{x-gtk-use-system-tooltips} to @code{nil}. If you
do this, or if Emacs is built without GTK support, the @code{tooltip}
face specifies most attributes of the tooltip text.
If Emacs is built with GTK+ support, it displays tooltips via GTK+,
using the default appearance of GTK+ tooltips. To disable this,
change the variable @code{x-gtk-use-system-tooltips} to @code{nil}.
If you do this, or if Emacs is built without GTK+ support, the
@code{tooltip} face specifies most attributes of the tooltip text.
@node Mouse Avoidance
@section Mouse Avoidance

View file

@ -147,7 +147,7 @@ beginning of the line and then executing the macro.
@findex kmacro-start-macro
@findex kmacro-end-macro
In addition to the @key{F3} and @key{F4} commands described above,
Emacs also supports an older set of keybindings for defining and
Emacs also supports an older set of key bindings for defining and
executing keyboard macros. To begin a macro definition, type @kbd{C-x
(} (@code{kmacro-start-macro}); as with @key{F3}, a prefix argument
appends this definition to the last keyboard macro. To end a macro

View file

@ -36,7 +36,7 @@ Support}), but we hope to improve it in the future.
By default, the @key{alt} and @key{option} keys are the same as
@key{Meta}. The Mac @key{Cmd} key is the same as @key{Super}, and
Emacs provides a set of keybindings using this modifier key that mimic
Emacs provides a set of key bindings using this modifier key that mimic
other Mac / GNUstep applications (@pxref{Mac / GNUstep Events}). You
can change these bindings in the usual way (@pxref{Key Bindings}).

View file

@ -1441,7 +1441,7 @@ parsed, and move point there (@code{semantic-complete-jump}).
@kindex C-c , @key{SPC}
Display a list of possible completions for the symbol at point
(@code{semantic-complete-analyze-inline}). This also activates a set
of special keybindings for choosing a completion: @key{RET} accepts
of special key bindings for choosing a completion: @key{RET} accepts
the current completion, @kbd{M-n} and @kbd{M-p} cycle through possible
completions, @key{TAB} completes as far as possible and then cycles,
and @kbd{C-g} or any other key aborts completion.

View file

@ -1242,11 +1242,12 @@ coding system, the result should be readable.
@node Rmail Editing
@section Editing Within a Message
Most of the usual Emacs keybindings are available in Rmail mode, though a
few, such as @kbd{C-M-n} and @kbd{C-M-h}, are redefined by Rmail for
other purposes. However, the Rmail buffer is normally read only, and
most of the letters are redefined as Rmail commands. If you want to
edit the text of a message, you must use the Rmail command @kbd{e}.
Most of the usual Emacs key bindings are available in Rmail mode,
though a few, such as @kbd{C-M-n} and @kbd{C-M-h}, are redefined by
Rmail for other purposes. However, the Rmail buffer is normally read
only, and most of the letters are redefined as Rmail commands. If you
want to edit the text of a message, you must use the Rmail command
@kbd{e}.
@table @kbd
@item e

View file

@ -268,8 +268,8 @@ use it (@pxref{Rebinding}).
@vindex isearch-mode-map
When incremental search is active, you can type @kbd{C-h C-h} to
access interactive help options, including a list of special
keybindings. These keybindings are part of the keymap
access interactive help options, including a list of special key
bindings. These key bindings are part of the keymap
@code{isearch-mode-map} (@pxref{Keymaps}).
@node Isearch Yank

View file

@ -1,3 +1,7 @@
2011-10-26 Chong Yidong <cyd@gnu.org>
* modes.texi (Running Hooks): Document with-wrapper-hook.
2011-10-18 Chong Yidong <cyd@gnu.org>
* display.texi (Glyphless Chars): New node.

View file

@ -84,8 +84,9 @@ its value is just a single function, not a list of functions.
@node Running Hooks
@subsection Running Hooks
At the appropriate times, Emacs uses the @code{run-hooks} function
and the other functions below to run particular hooks.
In this section, we document the @code{run-hooks} function, which is
used to run a normal hook. We also document the functions for running
various kinds of abnormal hooks.
@defun run-hooks &rest hookvars
This function takes one or more normal hook variable names as
@ -108,28 +109,49 @@ be run as well.
@end defun
@defun run-hook-with-args hook &rest args
This function is the way to run an abnormal hook and always call all
of the hook functions. It calls each of the hook functions one by
one, passing each of them the arguments @var{args}.
This function runs an abnormal hook by calling all the hook functions in
@var{hook}, passing each one the arguments @var{args}.
@end defun
@defun run-hook-with-args-until-failure hook &rest args
This function is the way to run an abnormal hook until one of the hook
functions fails. It calls each of the hook functions, passing each of
them the arguments @var{args}, until some hook function returns
@code{nil}. It then stops and returns @code{nil}. If none of the
hook functions return @code{nil}, it returns a non-@code{nil} value.
This function runs an abnormal hook by calling each hook function in
turn, stopping if one of them ``fails'' by returning @code{nil}. Each
hook function is passed the arguments @var{args}. If this function
stops because one of the hook functions fails, it returns @code{nil};
otherwise it returns a non-@code{nil} value.
@end defun
@defun run-hook-with-args-until-success hook &rest args
This function is the way to run an abnormal hook until a hook function
succeeds. It calls each of the hook functions, passing each of them
the arguments @var{args}, until some hook function returns
non-@code{nil}. Then it stops, and returns whatever was returned by
the last hook function that was called. If all hook functions return
@code{nil}, it returns @code{nil} as well.
This function runs an abnormal hook by calling each hook function,
stopping if one of them ``succeeds'' by returning a non-@code{nil}
value. Each hook function is passed the arguments @var{args}. If this
function stops because one of the hook functions returns a
non-@code{nil} value, it returns that value; otherwise it returns
@code{nil}.
@end defun
@defmac with-wrapper-hook hook args &rest body
This macro runs the abnormal hook @code{hook} as a series of nested
``wrapper functions'' around the @var{body} forms. The effect is
similar to nested @code{around} advices (@pxref{Around-Advice}).
Each hook function must accept an argument list consisting of a function
@var{fun}, followed by the additional arguments listed in @var{args}.
The function @var{fun} passed to the very first hook function in
@var{hook} does the same as @var{body}, if it is called with arguments
@var{args}. The @var{fun} passed to each successive hook function is
constructed from all the preceding hook functions (and @var{body}); if
this @var{fun} is called with arguments @var{args}, it does what the
@code{with-wrapper-hook} call would if the preceding hook functions were
the only ones in @var{hook}.
In the function definition of the hook function, @var{fun} can be called
any number of times (including not calling it at all). This function
definition is then used to construct the @var{fun} passed to the next
hook function in @var{hook}, if any. The last or ``outermost''
@var{fun} is called once to produce the effect.
@end defmac
@node Setting Hooks
@subsection Setting Hooks

View file

@ -1,3 +1,9 @@
2011-10-23 Michael Albinus <michael.albinus@gmx.de>
Sync with Tramp 2.2.3.
* trampver.texi: Update release number.
2011-10-14 Glenn Morris <rgm@gnu.org>
* ert.texi (Introduction, How to Run Tests)

View file

@ -341,6 +341,11 @@ Line-Up Functions
* Comment Line-Up::
* Misc Line-Up::
Customizing Macros
* Macro Backslashes::
* Macros with ;::
@end detailmenu
@end menu
@ -655,6 +660,10 @@ expression, to some statements, or perhaps to whole functions, the
syntactic recognition can be wrong. @ccmode{} manages to figure it
out correctly most of the time, though.
Some macros, when invoked, ''have their own semicolon''. To get the
next line indented correctly, rather than as a continuation line,
@xref{Macros with ;}.
Reindenting large sections of code can take a long time. When
@ccmode{} reindents a region of code, it is essentially equivalent to
hitting @key{TAB} on every line of the region.
@ -6561,6 +6570,9 @@ custom line-up function associated with it.
@section Other Special Indentations
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
To configure macros which you invoke without a terminating @samp{;},
see @xref{Macros with ;}.
Here are the remaining odds and ends regarding indentation:
@defopt c-label-minimum-indentation
@ -6612,6 +6624,13 @@ functions to this hook, not remove them. @xref{Style Variables}.
@cindex preprocessor directives
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Preprocessor macros in C, C++, and Objective C (introduced by
@code{#define}) have a syntax different from the main language---for
example, a macro declaration is not terminated by a semicolon, and if
it is more than a line long, line breaks in it must be escaped with
backslashes. @ccmode{} has some commands to manipulate these, see
@ref{Macro Backslashes}.
Normally, the lines in a multi-line macro are indented relative to
each other as though they were code. You can suppress this behavior
by setting the following user option:
@ -6623,6 +6642,28 @@ is @code{nil}, all lines inside macro definitions are analyzed as
@code{cpp-macro-cont}.
@end defopt
Because a macro can expand into anything at all, near where one is
invoked @ccmode{} can only indent and fontify code heuristically.
Sometimes it gets it wrong. Usually you should try to design your
macros so that they ''look like ordinary code'' when you invoke them.
However, one situation is so common that @ccmode{} handles it
specially: that is when certain macros needn't (or mustn't) be
followed by a @samp{;}. You need to configure @ccmode{} to handle
these macros properly, see @ref{Macros with ;}.
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@menu
* Macro Backslashes::
* Macros with ;::
@end menu
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Macro Backslashes, Macros with ;, Custom Macros, Custom Macros
@comment node-name, next, previous, up
@section Customizing Macro Backslashes
@cindex #define
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ccmode{} provides some tools to help keep the line continuation
backslashes in macros neat and tidy. Their precise action is
customized with these variables:
@ -6664,6 +6705,62 @@ get aligned only when you explicitly invoke the command
@code{c-backslash-region} (@kbd{C-c C-\}).
@end defopt
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Macros with ;, , Macro Backslashes, Custom Macros
@comment node-name, next, previous, up
@section Macros with semicolons
@cindex macros with semicolons
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Macros which needn't (or mustn't) be followed by a semicolon when you
invoke them, @dfn{macros with semicolons}, are very common. These can
cause @ccmode{} to parse the next line wrongly as a
@code{statement-cont} (@pxref{Function Symbols}) and thus mis-indent
it.
You can prevent this by specifying which macros have semicolons. It
doesn't matter whether or not such a macro has a parameter list:
@defopt c-macro-names-with-semicolon
@vindex macro-names-with-semicolon (c-)
This buffer-local variable specifies which macros have semicolons.
After setting its value, you need to call
@code{c-make-macro-with-semi-re} for it to take effect. It should be
set to one of these values:
@table @asis
@item nil
There are no macros with semicolons.
@item a list of strings
Each string is the name of a macro with a semicolon. Only valid
@code{#define} names are allowed here. For example, to set the
default value, you could write the following into your @file{.emacs}:
@example
(setq c-macro-names-with-semicolon
'("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS"))
@end example
@item a regular expression
This matches each symbol which is a macro with a semicolon. It must
not match any string which isn't a valid @code{#define} name. For
example:
@example
(setq c-macro-names-with-semicolon
"\\<\\(CLEAN_UP_AND_RETURN\\|Q_[[:upper:]]+\\)\\>")
@end example
@end table
@end defopt
@defun c-make-macro-with-semi-re
@findex make-macro-with-semi-re (c-)
Call this (non-interactive) function, which sets internal variables,
each time you change the value of
@code{c-macro-names-with-semicolon}. It takes no arguments, and its
return value has no meaning. This function is called by @ccmode{}'s
initialization code.
@end defun
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@node Odds and Ends, Sample .emacs File, Custom Macros, Top
@comment node-name, next, previous, up

View file

@ -8,7 +8,7 @@
@c In the Tramp CVS, the version number is auto-frobbed from
@c configure.ac, so you should edit that file and run
@c "autoconf && ./configure" to change the version number.
@set trampver 2.2.3-pre
@set trampver 2.2.3-24.1
@c Other flags from configuration
@set instprefix /usr/local

View file

@ -230,14 +230,14 @@ cannot be encoded by the `terminal-coding-system'.
(U+2010 and U+2011).
** Improved GTK integration
+++
*** GTK scroll-bars are now placed on the right by default.
Use `set-scroll-bar-mode' to change this.
+++
*** GTK tool bars can have just text, just images or images and text.
Customize `tool-bar-style' to choose style. On a Gnome desktop, the default
is taken from the desktop settings.
---
*** GTK tool bars can be placed on the left/right or top/bottom of the frame.
The frame-parameter tool-bar-position controls this. It takes the values
top, left, right or bottom. The Options => Show/Hide menu has entries
@ -276,10 +276,6 @@ get and set the SELinux context of a file.
*** Tramp offers handlers for file-selinux-context and set-file-selinux-context
for remote machines which support SELinux.
+++
** The function format-time-string now supports the %N directive, for
higher-resolution time stamps.
** Changes for exiting Emacs
+++
*** The function kill-emacs is now run upon receipt of the signals
@ -295,24 +291,20 @@ consider if it is still appropriate to add it in the noninteractive case.
(bound to C-v/[next] and M-v/[prior]) do not signal errors at top/bottom
of buffer at first key-press (instead move to top/bottom of buffer)
when `scroll-error-top-bottom' is non-nil.
+++
*** New variable `scroll-error-top-bottom' (see above).
+++
*** New scrolling commands `scroll-up-line' and `scroll-down-line'
scroll a line instead of full screen.
+++
*** New property `scroll-command' should be set on a command's symbol to
define it as a scroll command affected by `scroll-preserve-screen-position'.
+++
*** If you customize `scroll-conservatively' to a value greater than 100,
Emacs will never recenter point in the window when it scrolls due to
cursor motion commands or commands that move point (e.f., `M-g M-g').
Previously, you needed to use `most-positive-fixnum' as the value of
`scroll-conservatively' to achieve the same effect.
---
*** ``Aggressive'' scrolling now honors the scroll margins.
If you customize `scroll-up-aggressively' or
@ -374,7 +366,6 @@ Affected modes include dired, vc-dir, and log-edit. For example,
adding "(diff-mode . ((mode . whitespace)))" to .dir-locals.el will
turn on `whitespace-mode' for *vc-diff* buffers. Modes should call
`hack-dir-local-variables-non-file-buffer' to support this.
+++
*** Using "mode: MINOR-MODE" to enable a minor mode is deprecated.
Instead, use "eval: (minor-mode 1)".
@ -1178,7 +1169,13 @@ must also be supplied.
** pre/post-command-hook are not reset to nil upon error.
Instead, the offending function is removed.
** New low-level function run-hook-wrapped.
** New hook types
*** New function `run-hook-wrapped' for running an abnormal hook by
passing the hook functions as arguments to a "wrapping" function.
+++
*** New macro `with-wrapper-hook' for running an abnormal hook as a
set of "wrapping" filters, similar to around advice.
** `server-eval-at' is provided to allow evaluating forms on different
Emacs server instances.
@ -1192,6 +1189,10 @@ Also the debugger can now "continue" from an error, which means it will jump
to the error handler as if the debugger had not been invoked instead of
jumping all the way to the top-level.
+++
** The function format-time-string now supports the %N directive, for
higher-resolution time stamps.
** New function `read-char-choice' reads a restricted set of characters,
discarding any inputs not inside the set.
@ -1217,15 +1218,22 @@ syntactic rules.
** frame-local variables cannot be let-bound any more.
** Major and minor mode changes
+++
** prog-mode is a new major-mode meant to be the parent of programming mode.
The prog-mode-hook it defines can be used to enable features for
programming modes. For example:
(add-hook 'prog-mode-hook 'flyspell-prog-mode)
enables on the fly spell checking for comments and strings for
programming modes.
*** `prog-mode' is a new major mode from which programming modes
should be derived.
** define-minor-mode accepts a new keyword :variable.
**** `prog-mode-hook' can be used to enable features for programming
modes, e.g. (add-hook 'prog-mode-hook 'flyspell-prog-mode) to enable
on-the-fly spell checking for comments and strings.
*** New hook `change-major-mode-after-body-hook', run by
`run-mode-hooks' just before any other mode hooks.
*** Enabled globalized minor modes can be disabled in specific modes,
by running (FOO-mode-hook 0) via a mode hook.
*** `define-minor-mode' accepts a new keyword :variable.
+++
** `delete-file' and `delete-directory' now accept optional arg TRASH.
@ -1350,6 +1358,8 @@ with the USER_LIBS build variable.
** New make target `dist' to create binary distribution for MS Windows.
** Function `w32-default-color-map' is now obsolete.
** On Nextstep/OSX, the menu bar can be hidden by customizing
ns-auto-hide-menu-bar.

View file

@ -1,3 +1,7 @@
2011-10-27 Juanma Barranquero <lekktu@gmail.com>
* emacsclient.c (w32_getenv): Silence compiler warnings.
2011-09-07 Glenn Morris <rgm@gnu.org>
* etags.c (Fortran_functions): Handle "elemental" functions.

View file

@ -359,7 +359,7 @@ w32_getenv (char *envvar)
char *value;
DWORD dwType;
if (value = getenv (envvar))
if ((value = getenv (envvar)))
/* Found in the environment. strdup it, because values returned
by getenv cannot be free'd. */
return xstrdup (value);
@ -382,7 +382,7 @@ w32_getenv (char *envvar)
{
DWORD size;
if (size = ExpandEnvironmentStrings (value, NULL, 0))
if ((size = ExpandEnvironmentStrings (value, NULL, 0)))
{
char *buffer = (char *) xmalloc (size);
if (ExpandEnvironmentStrings (value, buffer, size))

View file

@ -1,3 +1,149 @@
2011-10-28 Alan Mackenzie <acm@muc.de>
Amend to indent and fontify macros "which include their own semicolon"
correctly, using the "virtual semicolon" mechanism.
* cc-defs.el: Update "virtual semicolon" comments.
* cc-engine.el (c-crosses-statement-barrier-p): Recoded to scan one line at
at time rather than having \n and \r explicitly in c-stmt-delim-chars
(for some modes, e.g. AWK).
(c-forward-label): Amend for virtual semicolons.
(c-at-macro-vsemi-p, c-macro-vsemi-status-unknown-p): New functions
* cc-fonts.el (c-font-lock-declarations): Take account of the new C macros.
* cc-langs.el (c-at-vsemi-p-fn, c-vsemi-status-unknown-p-fn): move to
earlier in the file.
(c-opt-cpp-symbol, c-line-comment-start-regexp): New language variables.
(c-opt-cpp-macro-define): Make into a full language variable.
(c-stmt-delim-chars, c-stmt-delim-chars-with-comma): Special value for
AWK Mode (including \n, \r) removed, no longer needed.
* cc-mode.el (c-mode, c++-mode, objc-mode): Invoke
c-make-macro-with-semi-re. (Erroneously committed early, in previous
version, 5.259.)
* cc-vars.el (c-macro-with-semi-re, c-macro-names-with-semicolon): New
variables.
(c-make-macro-with-semi-re): New function
* cc-mode.texi (Indentation Commands): Mention "macros with semicolons".
(Other Special Indentations): Add an xref to "Macros with ;".
(Customizing Macros): Add stuff about syntax in macros. Add an xref to
"Macros with ;".
(Macros with ;): New page.
2011-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
* vc/log-edit.el: Fill empty field rather than adding new one.
(log-edit-add-field): New function.
(log-edit-insert-changelog): Use it.
2011-10-28 Mark Lillibridge <mark.lillibridge@hp.com> (tiny change)
* mail/rmail.el (rmail-mode-map): Add M-C-f as in rmailsum (bug#9802).
2011-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/gdb-mi.el: Warn the user when -i=mi is missing.
(gdb--check-interpreter): New function.
(gdb): Use it.
2011-10-27 Glenn Morris <rgm@gnu.org>
* emacs-lisp/cl-extra.el (most-positive-float, most-negative-float)
(least-positive-float, least-negative-float)
(least-positive-normalized-float, least-negative-normalized-float)
(float-epsilon, float-negative-epsilon):
Remove unnecessary declarations.
* emacs-lisp/cl-extra.el (cl-float-limits): Add doc string.
* emacs-lisp/cl.el (most-positive-float, most-negative-float)
(least-positive-float, least-negative-float)
(least-positive-normalized-float, least-negative-normalized-float)
(float-epsilon, float-negative-epsilon): Add doc-strings,
based on those in cl.texi.
* files.el (set-visited-file-name): If the major-mode changed,
reload the local variables. (Bug#9796)
2011-10-27 Chong Yidong <cyd@gnu.org>
* subr.el (change-major-mode-after-body-hook): New hook.
(run-mode-hooks): Run it.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
Use change-major-mode-before-body-hook.
* simple.el (fundamental-mode):
* emacs-lisp/derived.el (define-derived-mode): Revert 2010-04-28
change introducing fundamental-mode-hook.
2011-10-26 Juanma Barranquero <lekktu@gmail.com>
* term/w32-win.el (w32-default-color-map): Declare obsolete. (Bug#9785)
2011-10-26 Michael Albinus <michael.albinus@gmx.de>
* ido.el (ido-file-name-all-completions-1): Do not require
tramp.el explicitely. (Bug#7583)
2011-10-26 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/octave-mod.el:
* progmodes/octave-inf.el: Update maintainer.
2011-10-26 Chong Yidong <cyd@gnu.org>
* subr.el (with-wrapper-hook): Rewrite doc.
2011-10-25 Michael Albinus <michael.albinus@gmx.de>
* net/tramp-sh.el (tramp-sh-handle-file-directory-p): Return t for
filenames "/method:foo:". (Bug#9793)
2011-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
* comint.el (comint-get-old-input-default): Fix use-prompt-regexp case
(bug#9865).
2011-10-24 Glenn Morris <rgm@gnu.org>
* emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix. (Bug#9819)
2011-10-24 Michael Albinus <michael.albinus@gmx.de>
* notifications.el: Add the requirement of a running D-Bus session
bus to the Commentary.
2011-10-24 Juri Linkov <juri@jurta.org>
* isearch.el (isearch-occur): Let-bind `search-spaces-regexp' to
`search-whitespace-regexp' only when `isearch-regexp' is non-nil.
(Bug#9364)
2011-10-24 Juri Linkov <juri@jurta.org>
* info.el (Info-following-node-name-re): Add newline to the list
of allowed characters for leading space. (Bug#9824)
2011-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/octave-inf.el (inferior-octave-mode-map): Fix C-c C-h binding.
* progmodes/octave-mod.el (octave-help): Remove.
2011-10-23 Michael Albinus <michael.albinus@gmx.de>
Sync with Tramp 2.2.3.
* net/tramp-cache.el (top): Pacify byte-compiler using
`init-file-user' and `site-run-file'.
* net/trampver.el: Update release number.
2011-10-23 Chong Yidong <cyd@gnu.org>
* files.el (toggle-read-only): Remove obsolete comment about
@ -7,16 +153,16 @@
for toggle-read-only. Note that this hasn't called vc-next-action
since 2008-05-02, though it wasn't documented at the time.
* vc/ediff-init.el (ediff-toggle-read-only-function): Use
toggle-read-only.
* vc/ediff-init.el (ediff-toggle-read-only-function):
Use toggle-read-only.
2011-10-22 Alan Mackenzie <bug-cc-mode@gnu.org>
Fix bug #9560, sporadic wrong indentation; improve instrumentation
of c-parse-state.
* cc-engine.el (c-append-lower-brace-pair-to-state-cache): correct
faulty logical expression.
* cc-engine.el (c-append-lower-brace-pair-to-state-cache):
correct faulty logical expression.
(c-parse-state-state, c-record-parse-state-state):
(c-replay-parse-state-state): New defvar/defuns.
(c-debug-parse-state): Use new functions.
@ -30,8 +176,8 @@
* progmodes/idlwave.el (idlwave-mode):
* progmodes/vera-mode.el (vera-mode): No need to set
require-final-newline; that's done in prog-mode. Suggested by
Stefan Monnier.
require-final-newline; that's done in prog-mode.
Suggested by Stefan Monnier.
2011-10-21 Martin Rudalics <rudalics@gmx.at>
@ -52,8 +198,8 @@
2011-10-21 Chong Yidong <cyd@gnu.org>
* progmodes/idlwave.el (idlwave-mode):
* progmodes/vera-mode.el (vera-mode): Use
mode-require-final-newline.
* progmodes/vera-mode.el (vera-mode):
Use mode-require-final-newline.
2011-10-20 Glenn Morris <rgm@gnu.org>
@ -189,8 +335,8 @@
(global-whitespace-mode, global-whitespace-newline-mode):
* xt-mouse.el (xterm-mouse-mode): Doc fix.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
autogenerated docstring.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
Fix autogenerated docstring.
2011-10-19 Juri Linkov <juri@jurta.org>

View file

@ -2151,8 +2151,10 @@ current line, if point is on an output field.
If `comint-use-prompt-regexp' is non-nil, then return
the current line with any initial string matching the regexp
`comint-prompt-regexp' removed."
(let ((bof (field-beginning)))
(if (null (get-char-property bof 'field)) ;Not `output'.
(let (bof)
(if (and (not comint-use-prompt-regexp)
;; Make sure we're in an input rather than output field.
(null (get-char-property (setq bof (field-beginning)) 'field)))
(field-string-no-properties bof)
(comint-bol)
(buffer-substring-no-properties (point) (line-end-position)))))

View file

@ -480,17 +480,13 @@ If STATE is t, return a new state object seeded from the time of day."
(and (numberp res) (/= res (/ res 2)) res))
(arith-error nil)))
(defvar most-positive-float)
(defvar most-negative-float)
(defvar least-positive-float)
(defvar least-negative-float)
(defvar least-positive-normalized-float)
(defvar least-negative-normalized-float)
(defvar float-epsilon)
(defvar float-negative-epsilon)
;;;###autoload
(defun cl-float-limits ()
"Initialize the Common Lisp floating-point parameters.
This sets the values of: `most-positive-float', `most-negative-float',
`least-positive-float', `least-negative-float', `float-epsilon',
`float-negative-epsilon', `least-positive-normalized-float', and
`least-negative-normalized-float'."
(or most-positive-float (not (numberp '2e1))
(let ((x '2e0) y z)
;; Find maximum exponent (first two loops are optimizations)

View file

@ -10,7 +10,7 @@
;;;;;; ceiling* floor* isqrt lcm gcd cl-progv-before cl-set-frame-visible-p
;;;;;; cl-map-overlays cl-map-intervals cl-map-keymap-recursively
;;;;;; notevery notany every some mapcon mapcan mapl maplist map
;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "26339d9571f9485bf34fa6d2ae38fc84")
;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "15a5e127e1c9c9c3d1f398963b66cde7")
;;; Generated autoloads from cl-extra.el
(autoload 'coerce "cl-extra" "\
@ -28,7 +28,7 @@ strings case-insensitively.
\(fn X Y)" nil nil)
(autoload 'cl-mapcar-many "cl-extra" "\
Not documented
\(fn CL-FUNC CL-SEQS)" nil nil)
@ -84,27 +84,27 @@ Return true if PREDICATE is false of some element of SEQ or SEQs.
(defalias 'cl-map-keymap 'map-keymap)
(autoload 'cl-map-keymap-recursively "cl-extra" "\
Not documented
\(fn CL-FUNC-REC CL-MAP &optional CL-BASE)" nil nil)
(autoload 'cl-map-intervals "cl-extra" "\
Not documented
\(fn CL-FUNC &optional CL-WHAT CL-PROP CL-START CL-END)" nil nil)
(autoload 'cl-map-overlays "cl-extra" "\
Not documented
\(fn CL-FUNC &optional CL-BUFFER CL-START CL-END CL-ARG)" nil nil)
(autoload 'cl-set-frame-visible-p "cl-extra" "\
Not documented
\(fn FRAME VAL)" nil nil)
(autoload 'cl-progv-before "cl-extra" "\
Not documented
\(fn SYMS VALUES)" nil nil)
@ -180,7 +180,11 @@ Return t if OBJECT is a random-state object.
\(fn OBJECT)" nil nil)
(autoload 'cl-float-limits "cl-extra" "\
Not documented
Initialize the Common Lisp floating-point parameters.
This sets the values of: `most-positive-float', `most-negative-float',
`least-positive-float', `least-negative-float', `float-epsilon',
`float-negative-epsilon', `least-positive-normalized-float', and
`least-negative-normalized-float'.
\(fn)" nil nil)
@ -228,12 +232,12 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
\(fn PROPLIST PROPNAME &optional DEFAULT)" nil nil)
(autoload 'cl-set-getf "cl-extra" "\
Not documented
\(fn PLIST TAG VAL)" nil nil)
(autoload 'cl-do-remf "cl-extra" "\
Not documented
\(fn PLIST TAG)" nil nil)
@ -267,7 +271,7 @@ This also does some trivial optimizations to make the form prettier.
\(fn FORM &optional ENV)" nil nil)
(autoload 'cl-prettyexpand "cl-extra" "\
Not documented
\(fn FORM &optional FULL)" nil nil)

View file

@ -333,15 +333,51 @@ always returns nil."
(defvar *random-state* (vector 'cl-random-state-tag -1 30 (cl-random-time)))
;; The following are actually set by cl-float-limits.
(defconst most-positive-float nil)
(defconst most-negative-float nil)
(defconst least-positive-float nil)
(defconst least-negative-float nil)
(defconst least-positive-normalized-float nil)
(defconst least-negative-normalized-float nil)
(defconst float-epsilon nil)
(defconst float-negative-epsilon nil)
(defconst most-positive-float nil
"The largest value that a Lisp float can hold.
If your system supports infinities, this is the largest finite value.
For IEEE machines, this is approximately 1.79e+308.
Call `cl-float-limits' to set this.")
(defconst most-negative-float nil
"The largest negative value that a Lisp float can hold.
This is simply -`most-positive-float'.
Call `cl-float-limits' to set this.")
(defconst least-positive-float nil
"The smallest value greater than zero that a Lisp float can hold.
For IEEE machines, it is about 4.94e-324 if denormals are supported,
or 2.22e-308 if they are not.
Call `cl-float-limits' to set this.")
(defconst least-negative-float nil
"The smallest value less than zero that a Lisp float can hold.
This is simply -`least-positive-float'.
Call `cl-float-limits' to set this.")
(defconst least-positive-normalized-float nil
"The smallest normalized Lisp float greater than zero.
This is the smallest value for which IEEE denormalization does not lose
precision. For IEEE machines, this value is about 2.22e-308.
For machines that do not support the concept of denormalization
and gradual underflow, this constant equals `least-positive-float'.
Call `cl-float-limits' to set this.")
(defconst least-negative-normalized-float nil
"The smallest normalized Lisp float less than zero.
This is simply -`least-positive-normalized-float'.
Call `cl-float-limits' to set this.")
(defconst float-epsilon nil
"The smallest positive float that adds to 1.0 to give a distinct value.
Adding a number less than this to 1.0 returns 1.0 due to roundoff.
For IEEE machines, epsilon is about 2.22e-16.
Call `cl-float-limits' to set this.")
(defconst float-negative-epsilon nil
"The smallest positive float that subtracts from 1.0 to give a distinct value.
For IEEE machines, it is about 1.11e-16.
Call `cl-float-limits' to set this.")
;;; Sequence functions.

View file

@ -230,7 +230,7 @@ No problems result if this variable is not bound.
; Run the parent.
(delay-mode-hooks
(,(or parent 'fundamental-mode))
(,(or parent 'kill-all-local-variables))
; Identify the child mode.
(setq major-mode (quote ,child))
(setq mode-name ,name)

View file

@ -94,8 +94,9 @@ Optional LIGHTER is displayed in the modeline when the mode is on.
Optional KEYMAP is the default keymap bound to the mode keymap.
If non-nil, it should be a variable name (whose value is a keymap),
or an expression that returns either a keymap or a list of
arguments for `easy-mmode-define-keymap'. If KEYMAP is not a symbol,
this also defines the variable MODE-map.
arguments for `easy-mmode-define-keymap'. If you supply a KEYMAP
argument that is not a symbol, this macro defines the variable
MODE-map and gives it the value that KEYMAP specifies.
BODY contains code to execute each time the mode is enabled or disabled.
It is executed after toggling the mode, and before running MODE-hook.
@ -367,11 +368,13 @@ See `%s' for more information on %s."
(progn
(add-hook 'after-change-major-mode-hook
',MODE-enable-in-buffers)
(add-hook 'fundamental-mode-hook ',MODE-enable-in-buffers)
(add-hook 'change-major-mode-after-body-hook
',MODE-enable-in-buffers)
(add-hook 'find-file-hook ',MODE-check-buffers)
(add-hook 'change-major-mode-hook ',MODE-cmhh))
(remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers)
(remove-hook 'fundamental-mode-hook ',MODE-enable-in-buffers)
(remove-hook 'change-major-mode-after-body-hook
',MODE-enable-in-buffers)
(remove-hook 'find-file-hook ',MODE-check-buffers)
(remove-hook 'change-major-mode-hook ',MODE-cmhh))

View file

@ -645,6 +645,8 @@ a list of colors that the current display can handle."
;; text in menu entries) and `SystemWindowText' (the default
;; color w32 uses for the text in windows and dialogs) may
;; be the same display color and be adjacent in the list.
;; These system colors all have names prefixed with "System",
;; which is hardcoded in w32fns.c (SYSTEM_COLOR_PREFIX).
;; This makes them different to any other color. Bug#9722
(not (and (eq system-type 'windows-nt)
(string-match-p "^System" (car (car l))))))

View file

@ -3682,7 +3682,11 @@ the old visited file has been renamed to the new name FILENAME."
(get major-mode 'mode-class)
;; Don't change the mode if the local variable list specifies it.
(hack-local-variables t)
(set-auto-mode t))
;; TODO consider making normal-mode handle this case.
(let ((old major-mode))
(set-auto-mode t)
(or (eq old major-mode)
(hack-local-variables))))
(error nil)))
(defun write-file (filename &optional confirm)

View file

@ -1,8 +1,19 @@
2011-10-26 Stefan Monnier <monnier@iro.umontreal.ca>
* message.el (message-completion-function): Make sure
message-tab-body-function is not attempted if one of
message-completion-alist fails to find a completion (bug#9158).
2011-10-26 Daiki Ueno <ueno@unixuser.org>
* mml.el (mml-quote-region): Quote <#secure> tag.
(mml-generate-mime-1): Unquote <#secure> tag.
2011-10-20 Chong Yidong <cyd@gnu.org>
* gnus-cite.el (gnus-message-citation-mode): Doc fix (in Emacs 24,
calling a minor mode from Lisp with nil arg enables it, so we have to
make the working a bit ambiguous here).
make the wording a bit ambiguous here).
2011-10-18 Teodor Zlatanov <tzz@lifelogs.com>
@ -18548,7 +18559,7 @@
gnus-requst-update-info with explicit code to sync the in-memory
info read flags with the marks being sync'd to the backend.
*gnus-util.el (gnus-pp): Add optional stream to match pp API.
* gnus-util.el (gnus-pp): Add optional stream to match pp API.
2004-09-28 Teodor Zlatanov <tzz@lifelogs.com>

View file

@ -7888,7 +7888,11 @@ those headers."
(let ((mail-abbrev-mode-regexp (caar alist)))
(not (mail-abbrev-in-expansion-header-p))))
(setq alist (cdr alist)))
(cdar alist)))
(when (cdar alist)
(lexical-let ((fun (cdar alist)))
;; Even if completion fails, return a non-nil value, so as to avoid
;; falling back to message-tab-body-function.
(lambda () (funcall fun) 'completion-attempted)))))
(eval-and-compile
(condition-case nil

View file

@ -525,7 +525,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
;; Remove quotes from quoted tags.
(goto-char (point-min))
(while (re-search-forward
"<#!+/?\\(part\\|multipart\\|external\\|mml\\)"
"<#!+/?\\(part\\|multipart\\|external\\|mml\\|secure\\)"
nil t)
(delete-region (+ (match-beginning 0) 2)
(+ (match-beginning 0) 3))))))
@ -1232,7 +1232,7 @@ If not set, `default-directory' will be used."
(goto-char (point-min))
;; Quote parts.
(while (re-search-forward
"<#!*/?\\(multipart\\|part\\|external\\|mml\\)" nil t)
"<#!*/?\\(multipart\\|part\\|external\\|mml\\|secure\\)" nil t)
;; Insert ! after the #.
(goto-char (+ (match-beginning 0) 2))
(insert "!")))))

View file

@ -3457,8 +3457,6 @@ This is to make them appear as if they were \"virtual buffers\"."
(nconc ido-temp-list items)
(setq ido-temp-list items)))
(declare-function tramp-tramp-file-p "tramp" (name))
(defun ido-file-name-all-completions-1 (dir)
(cond
((ido-nonreadable-directory-p dir) '())
@ -3466,8 +3464,6 @@ This is to make them appear as if they were \"virtual buffers\"."
;; Caller must have done that if necessary.
((and ido-enable-tramp-completion
(or (fboundp 'tramp-completion-mode-p)
(require 'tramp nil t))
(string-match "\\`/[^/]+[:@]\\'" dir))
;; Strip method:user@host: part of tramp completions.
;; Tramp completions do not include leading slash.
@ -3480,7 +3476,9 @@ This is to make them appear as if they were \"virtual buffers\"."
;; /ftp:user@host:./ => ok
(and
(not (string= "/ftp:" dir))
(tramp-tramp-file-p dir)
(file-remote-p dir)
;; tramp-ftp-file-name-p is available only when tramp
;; has been loaded.
(fboundp 'tramp-ftp-file-name-p)
(funcall 'tramp-ftp-file-name-p dir)
(string-match ":\\'" dir)

View file

@ -2015,7 +2015,7 @@ Submatch 1 is the complete node name.
Submatch 2 if non-nil is the parenthesized file name part of the node name.
Submatch 3 is the local part of the node name.
End of submatch 0, 1, and 3 are the same, so you can safely concat."
(concat "[ \t]*" ;Skip leading space.
(concat "[ \t\n]*" ;Skip leading space.
"\\(\\(([^)]+)\\)?" ;Node name can start with a file name.
"\\([" (or allowedchars "^,\t\n") "]*" ;Any number of allowed chars.
"[" (or allowedchars "^,\t\n") " ]" ;The last char can't be a space.

View file

@ -708,7 +708,7 @@
(define-charset-alias 'cp866u 'cp1125)
;; Fixme: C.f. iconv, http://czyborra.com/charsets/codepages.html
;; shows this as not ASCII comptaible, with various graphics in
;; shows this as not ASCII compatible, with various graphics in
;; 0x01-0x1F.
(define-charset 'cp437
"CP437 (MS-DOS United States, Australia, New Zealand, South Africa)"

View file

@ -1452,7 +1452,7 @@ string. NLINES has the same meaning as in `occur'."
;; Set `search-upper-case' to nil to not call
;; `isearch-no-upper-case-p' in `occur-1'.
(search-upper-case nil)
(search-spaces-regexp search-whitespace-regexp))
(search-spaces-regexp (if isearch-regexp search-whitespace-regexp)))
(occur regexp nlines)))
(declare-function hi-lock-read-face-name "hi-lock" ())

View file

@ -1008,6 +1008,7 @@ The buffer is expected to be narrowed to just the header of the message."
(define-key map "\e\C-l" 'rmail-summary-by-labels)
(define-key map "\e\C-r" 'rmail-summary-by-recipients)
(define-key map "\e\C-s" 'rmail-summary-by-regexp)
(define-key map "\e\C-f" 'rmail-summary-by-senders)
(define-key map "\e\C-t" 'rmail-summary-by-topic)
(define-key map "m" 'rmail-mail)
(define-key map "\em" 'rmail-retry-failure)

View file

@ -383,7 +383,8 @@ for all methods. Resulting data are derived from connection history."
;; When "emacs -Q" has been called, both variables are nil.
;; We do not load the persistency file then, in order to
;; have a clean test environment.
(or init-file-user site-run-file))
(or (and (boundp 'init-file-user) (symbol-value 'init-file-user))
(and (boundp 'site-run-file) (symbol-value 'site-run-file))))
(condition-case err
(with-temp-buffer
(insert-file-contents tramp-persistency-file-name)

View file

@ -1594,17 +1594,14 @@ and gid of the corresponding user is taken. Both parameters must be integers."
(defun tramp-sh-handle-file-directory-p (filename)
"Like `file-directory-p' for Tramp files."
;; Care must be taken that this function returns `t' for symlinks
;; pointing to directories. Surely the most obvious implementation
;; would be `test -d', but that returns false for such symlinks.
;; CCC: Stefan Monnier says that `test -d' follows symlinks. And
;; I now think he's right. So we could be using `test -d', couldn't
;; we?
;;
;; Alternatives: `cd %s', `test -d %s'
(with-parsed-tramp-file-name filename nil
(with-file-property v localname "file-directory-p"
(tramp-run-test "-d" filename))))
;; `file-directory-p' is used as predicate for filename completion.
;; Sometimes, when a connection is not established yet, it is
;; desirable to return t immediately for "/method:foo:". It can
;; be expected that this is always a directory.
(or (zerop (length localname))
(with-file-property v localname "file-directory-p"
(tramp-run-test "-d" filename)))))
(defun tramp-sh-handle-file-writable-p (filename)
"Like `file-writable-p' for Tramp files."

View file

@ -31,7 +31,7 @@
;; should be changed only there.
;;;###tramp-autoload
(defconst tramp-version "2.2.3-pre"
(defconst tramp-version "2.2.3-24.1"
"This version of Tramp.")
;;;###tramp-autoload
@ -44,7 +44,7 @@
(= emacs-major-version 21)
(>= emacs-minor-version 4)))
"ok"
(format "Tramp 2.2.3-pre is not fit for %s"
(format "Tramp 2.2.3-24.1 is not fit for %s"
(when (string-match "^.*$" (emacs-version))
(match-string 0 (emacs-version)))))))
(unless (string-match "\\`ok\\'" x) (error "%s" x)))

View file

@ -30,6 +30,9 @@
;;
;; (require 'notifications)
;; For proper usage, Emacs must be started in an environment with an
;; active D-Bus session bus.
;;; Code:
(eval-when-compile
(require 'cl))

View file

@ -1871,7 +1871,7 @@
* org-list.el (org-list-separating-blank-lines-number): Fix
confusion between point and item beginning. Now, if no
information is avalaible, truly follow user preference when it
information is available, truly follow user preference when it
inserts blank lines manually.
(org-list-insert-item): Send correct argument to the preceding
function.

View file

@ -744,19 +744,20 @@ be after it."
;; V i r t u a l S e m i c o l o n s
;;
;; In most CC Mode languages, statements are terminated explicitly by
;; semicolons or closing braces. In some of the CC modes (currently only AWK
;; Mode (April 2004)), statements are (or can be) terminated by EOLs. Such a
;; statement is said to be terminated by a "virtual semicolon" (VS). A
;; statement terminated by an actual semicolon or brace is never considered to
;; have a VS.
;; semicolons or closing braces. In some of the CC modes (currently AWK Mode
;; and certain user-specified #define macros in C, C++, etc. (November 2008)),
;; statements are (or can be) terminated by EOLs. Such a statement is said to
;; be terminated by a "virtual semicolon" (VS). A statement terminated by an
;; actual semicolon or brace is never considered to have a VS.
;;
;; The indentation engine (or whatever) tests for a VS at a specific position
;; by invoking the macro `c-at-vsemi-p', which in its turn calls the mode
;; specific function (if any) which is the value of the language variable
;; `c-at-vsemi-p-fn'. The actual details of what constitutes a VS in a
;; language are thus encapsulated in code specific to that language
;; (e.g. cc-awk.el). `c-at-vsemi-p' returns non-nil if point (or the optional
;; parameter POS) is at a VS, nil otherwise.
;; `c-at-vsemi-p-fn'. This function should only use "low-level" features of
;; CC Mode, i.e. features which won't trigger infinite recursion. ;-) The
;; actual details of what constitutes a VS in a language are thus encapsulated
;; in code specific to that language (e.g. cc-awk.el). `c-at-vsemi-p' returns
;; non-nil if point (or the optional parameter POS) is at a VS, nil otherwise.
;;
;; The language specific function might well do extensive analysis of the
;; source text, and may use a cacheing scheme to speed up repeated calls.

View file

@ -1154,42 +1154,65 @@ the line. If this virtual semicolon is _at_ from, the function recognizes it.
Note that this function might do hidden buffer changes. See the
comment at the start of cc-engine.el for more info."
(let ((skip-chars c-stmt-delim-chars)
lit-range)
(save-excursion
(catch 'done
(goto-char from)
(while (progn (skip-chars-forward skip-chars to)
(< (point) to))
(cond
((setq lit-range (c-literal-limits from)) ; Have we landed in a string/comment?
(goto-char (cdr lit-range)))
((eq (char-after) ?:)
(forward-char)
(if (and (eq (char-after) ?:)
(< (point) to))
;; Ignore scope operators.
(forward-char)
(setq c-maybe-labelp (1- (point)))))
((eq (char-after) ??)
;; A question mark. Can't be a label, so stop
;; looking for more : and ?.
(setq c-maybe-labelp nil
skip-chars (substring c-stmt-delim-chars 0 -2)))
((memq (char-after) '(?# ?\n ?\r)) ; A virtual semicolon?
(if (and (eq (char-before) ?\\) (memq (char-after) '(?\n ?\r)))
(backward-char))
(skip-chars-backward " \t" from)
(if (c-at-vsemi-p)
(throw 'done (point))
(forward-line)))
(t (throw 'done (point)))))
;; In trailing space after an as yet undetected virtual semicolon?
(c-backward-syntactic-ws from)
(if (and (< (point) to)
(c-at-vsemi-p))
(point)
nil)))))
(let* ((skip-chars
;; If the current language has CPP macros, insert # into skip-chars.
(if c-opt-cpp-symbol
(concat (substring c-stmt-delim-chars 0 1) ; "^"
c-opt-cpp-symbol ; usually "#"
(substring c-stmt-delim-chars 1)) ; e.g. ";{}?:"
c-stmt-delim-chars))
(non-skip-list
(append (substring skip-chars 1) nil)) ; e.g. (?# ?\; ?{ ?} ?? ?:)
lit-range vsemi-pos)
(save-restriction
(widen)
(save-excursion
(catch 'done
(goto-char from)
(while (progn (skip-chars-forward
skip-chars
(min to (c-point 'bonl)))
(< (point) to))
(cond
;; Virtual semicolon?
((and (bolp)
(save-excursion
(progn
(if (setq lit-range (c-literal-limits from)) ; Have we landed in a string/comment?
(goto-char (car lit-range)))
(c-backward-syntactic-ws) ; ? put a limit here, maybe?
(setq vsemi-pos (point))
(c-at-vsemi-p))))
(throw 'done vsemi-pos))
;; In a string/comment?
((setq lit-range (c-literal-limits))
(goto-char (cdr lit-range)))
((eq (char-after) ?:)
(forward-char)
(if (and (eq (char-after) ?:)
(< (point) to))
;; Ignore scope operators.
(forward-char)
(setq c-maybe-labelp (1- (point)))))
((eq (char-after) ??)
;; A question mark. Can't be a label, so stop
;; looking for more : and ?.
(setq c-maybe-labelp nil
skip-chars (substring c-stmt-delim-chars 0 -2)))
;; At a CPP construct?
((and c-opt-cpp-symbol (looking-at c-opt-cpp-symbol)
(save-excursion
(forward-line 0)
(looking-at c-opt-cpp-prefix)))
(c-end-of-macro))
((memq (char-after) non-skip-list)
(throw 'done (point)))))
;; In trailing space after an as yet undetected virtual semicolon?
(c-backward-syntactic-ws from)
(if (and (< (point) to)
(c-at-vsemi-p))
(point)
nil))))))
(defun c-at-statement-start-p ()
"Return non-nil if the point is at the first token in a statement
@ -7163,12 +7186,14 @@ comment at the start of cc-engine.el for more info."
;; Check that we're not after a token that can't precede a label.
(or
;; Trivially succeeds when there's no preceding token.
;; Succeeds when we're at a virtual semicolon.
(if preceding-token-end
(<= preceding-token-end (point-min))
(save-excursion
(c-backward-syntactic-ws)
(setq preceding-token-end (point))
(bobp)))
(or (bobp)
(c-at-vsemi-p))))
;; Check if we're after a label, if we're after a closing
;; paren that belong to statement, and with
@ -8400,6 +8425,57 @@ comment at the start of cc-engine.el for more info."
paren-state)
containing-sexp)))))
(defun c-at-macro-vsemi-p (&optional pos)
;; Is there a "virtual semicolon" at POS or point?
;; (See cc-defs.el for full details of "virtual semicolons".)
;;
;; This is true when point is at the last non syntactic WS position on the
;; line, there is a macro call last on the line, and this particular macro's
;; name is defined by the regexp `c-vs-macro-regexp' as not needing a
;; semicolon.
(save-excursion
(save-restriction
(widen)
(if pos
(goto-char pos)
(setq pos (point)))
(and
c-macro-with-semi-re
(not (c-in-literal))
(eq (skip-chars-backward " \t") 0)
;; Check we've got nothing after this except comments and empty lines
;; joined by escaped EOLs.
(skip-chars-forward " \t") ; always returns non-nil.
(progn
(while ; go over 1 block comment per iteration.
(and
(looking-at "\\(\\\\[\n\r][ \t]*\\)*")
(goto-char (match-end 0))
(cond
((looking-at c-block-comment-start-regexp)
(and (forward-comment 1)
(skip-chars-forward " \t"))) ; always returns non-nil
((looking-at c-line-comment-start-regexp)
(end-of-line)
nil)
(t nil))))
(eolp))
(goto-char pos)
(progn (c-backward-syntactic-ws)
(eq (point) pos))
;; Check for one of the listed macros being before point.
(or (not (eq (char-before) ?\)))
(when (c-go-list-backward)
(c-backward-syntactic-ws)
t))
(c-simple-skip-symbol-backward)
(looking-at c-macro-with-semi-re)))))
(defun c-macro-vsemi-status-unknown-p () t) ; See cc-defs.el.
;; `c-guess-basic-syntax' and the functions that precedes it below
;; implements the main decision tree for determining the syntactic

View file

@ -1277,9 +1277,11 @@ casts and declarations are fontified. Used on level 2 and higher."
(when
;; The result of the form below is true when we don't recognize a
;; declaration or cast.
(if (and (eq (get-text-property (point) 'face)
'font-lock-keyword-face)
(looking-at c-not-decl-init-keywords))
(if (or (and (eq (get-text-property (point) 'face)
'font-lock-keyword-face)
(looking-at c-not-decl-init-keywords))
(and c-macro-with-semi-re
(looking-at c-macro-with-semi-re))) ; 2008-11-04
;; Don't do anything more if we're looking at a keyword that
;; can't start a declaration.
t

View file

@ -508,6 +508,31 @@ parameters \(point-min), \(point-max) and <buffer size>."
(c-lang-defvar c-before-font-lock-function
(c-lang-const c-before-font-lock-function))
;;; Syntactic analysis ("virtual semicolons") for line-oriented languages (AWK).
(c-lang-defconst c-at-vsemi-p-fn
"Contains a function \"Is there a virtual semicolon at POS or point?\".
Such a function takes one optional parameter, a buffer position (defaults to
point), and returns nil or t. This variable contains nil for languages which
don't have EOL terminated statements. "
t nil
(c c++ objc) 'c-at-macro-vsemi-p
awk 'c-awk-at-vsemi-p)
(c-lang-defvar c-at-vsemi-p-fn (c-lang-const c-at-vsemi-p-fn))
(c-lang-defconst c-vsemi-status-unknown-p-fn
"Contains a function \"are we unsure whether there is a virtual semicolon on this line?\".
The (admittedly kludgey) purpose of such a function is to prevent an infinite
recursion in c-beginning-of-statement-1 when point starts at a `while' token.
The function MUST NOT UNDER ANY CIRCUMSTANCES call c-beginning-of-statement-1,
even indirectly. This variable contains nil for languages which don't have
EOL terminated statements."
t nil
(c c++ objc) 'c-macro-vsemi-status-unknown-p
awk 'c-awk-vsemi-status-unknown-p)
(c-lang-defvar c-vsemi-status-unknown-p-fn
(c-lang-const c-vsemi-status-unknown-p-fn))
;;; Lexer-level syntax (identifiers, tokens etc).
@ -737,6 +762,12 @@ literal are multiline."
(c-lang-defvar c-multiline-string-start-char
(c-lang-const c-multiline-string-start-char))
(c-lang-defconst c-opt-cpp-symbol
"The symbol which starts preprocessor constructs when in the margin."
t "#"
(java awk) nil)
(c-lang-defvar c-opt-cpp-symbol (c-lang-const c-opt-cpp-symbol))
(c-lang-defconst c-opt-cpp-prefix
"Regexp matching the prefix of a cpp directive in the languages that
normally use that macro preprocessor. Tested at bol or at boi.
@ -785,6 +816,8 @@ file name in angle brackets or quotes."
definition, or nil if the language doesn't have any."
t (if (c-lang-const c-opt-cpp-prefix)
"define"))
(c-lang-defvar c-opt-cpp-macro-define
(c-lang-const c-opt-cpp-macro-define))
(c-lang-defconst c-opt-cpp-macro-define-start
;; Regexp matching everything up to the macro body of a cpp define, or the
@ -1171,14 +1204,12 @@ operators."
;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to
;; begin with "^" to negate the set. If ? : operators should be
;; detected then the string must end with "?:".
t "^;{}?:"
awk "^;{}#\n\r?:") ; The newline chars gets special treatment.
t "^;{}?:")
(c-lang-defvar c-stmt-delim-chars (c-lang-const c-stmt-delim-chars))
(c-lang-defconst c-stmt-delim-chars-with-comma
;; Variant of `c-stmt-delim-chars' that additionally contains ','.
t "^;,{}?:"
awk "^;,{}\n\r?:") ; The newline chars gets special treatment.
t "^;,{}?:")
(c-lang-defvar c-stmt-delim-chars-with-comma
(c-lang-const c-stmt-delim-chars-with-comma))
@ -1238,7 +1269,6 @@ properly."
re)))
(c-lang-defvar c-comment-start-regexp (c-lang-const c-comment-start-regexp))
;;;; Added by ACM, 2003/9/18.
(c-lang-defconst c-block-comment-start-regexp
;; Regexp which matches the start of a block comment (if such exists in the
;; language)
@ -1248,6 +1278,15 @@ properly."
(c-lang-defvar c-block-comment-start-regexp
(c-lang-const c-block-comment-start-regexp))
(c-lang-defconst c-line-comment-start-regexp
;; Regexp which matches the start of a line comment (if such exists in the
;; language; it does in all 7 CC Mode languages).
t (if (c-lang-const c-line-comment-starter)
(regexp-quote (c-lang-const c-line-comment-starter))
"\\<\\>"))
(c-lang-defvar c-line-comment-start-regexp
(c-lang-const c-line-comment-start-regexp))
(c-lang-defconst c-literal-start-regexp
;; Regexp to match the start of comments and string literals.
t (concat (c-lang-const c-comment-start-regexp)
@ -1474,29 +1513,6 @@ properly."
"\\)"))
(c-lang-defvar c-syntactic-eol (c-lang-const c-syntactic-eol))
;;; Syntactic analysis ("virtual semicolons") for line-oriented languages (AWK).
(c-lang-defconst c-at-vsemi-p-fn
"Contains a function \"Is there a virtual semicolon at POS or point?\".
Such a function takes one optional parameter, a buffer position (defaults to
point), and returns nil or t. This variable contains nil for languages which
don't have EOL terminated statements. "
t nil
awk 'c-awk-at-vsemi-p)
(c-lang-defvar c-at-vsemi-p-fn (c-lang-const c-at-vsemi-p-fn))
(c-lang-defconst c-vsemi-status-unknown-p-fn
"Contains a function \"are we unsure whether there is a virtual semicolon on this line?\".
The (admittedly kludgey) purpose of such a function is to prevent an infinite
recursion in c-beginning-of-statement-1 when point starts at a `while' token.
The function MUST NOT UNDER ANY CIRCUMSTANCES call c-beginning-of-statement-1,
even indirectly. This variable contains nil for languages which don't have
EOL terminated statements."
t nil
awk 'c-awk-vsemi-status-unknown-p)
(c-lang-defvar c-vsemi-status-unknown-p-fn
(c-lang-const c-vsemi-status-unknown-p-fn))
;;; Defun functions

View file

@ -1187,6 +1187,7 @@ Key bindings:
abbrev-mode t)
(use-local-map c-mode-map)
(c-init-language-vars-for 'c-mode)
(c-make-macro-with-semi-re) ; matches macro names whose expansion ends with ;
(c-common-init 'c-mode)
(easy-menu-add c-c-menu)
(cc-imenu-init cc-imenu-c-generic-expression)
@ -1246,6 +1247,7 @@ Key bindings:
abbrev-mode t)
(use-local-map c++-mode-map)
(c-init-language-vars-for 'c++-mode)
(c-make-macro-with-semi-re) ; matches macro names whose expansion ends with ;
(c-common-init 'c++-mode)
(easy-menu-add c-c++-menu)
(cc-imenu-init cc-imenu-c++-generic-expression)
@ -1303,6 +1305,7 @@ Key bindings:
abbrev-mode t)
(use-local-map objc-mode-map)
(c-init-language-vars-for 'objc-mode)
(c-make-macro-with-semi-re) ; matches macro names whose expansion ends with ;
(c-common-init 'objc-mode)
(easy-menu-add c-objc-menu)
(cc-imenu-init nil 'cc-imenu-objc-function)

View file

@ -1622,6 +1622,54 @@ names)."))
;; Non-customizable variables, still part of the interface to CC Mode
(defvar c-macro-with-semi-re nil
;; Regular expression which matches a (#define'd) symbol whose expansion
;; ends with a semicolon.
;;
;; This variable should be set by `c-make-macros-with-semi-re' rather than
;; directly.
)
(make-variable-buffer-local 'c-macro-with-semi-re)
(defun c-make-macro-with-semi-re ()
;; Convert `c-macro-names-with-semicolon' into the regexp
;; `c-macro-with-semi-re' (or just copy it if it's already a re).
(setq c-macro-with-semi-re
(and
c-opt-cpp-macro-define
(cond
((stringp c-macro-names-with-semicolon)
(copy-sequence c-macro-names-with-semicolon))
((consp c-macro-names-with-semicolon)
(concat
"\\<"
(regexp-opt c-macro-names-with-semicolon)
"\\>")) ; N.B. the PAREN param of regexp-opt isn't supported by
; all XEmacsen.
((null c-macro-names-with-semicolon)
nil)
(t (error "c-make-macro-with-semi-re: invalid \
c-macro-names-with-semicolon: %s"
c-macro-names-with-semicolon))))))
(defvar c-macro-names-with-semicolon
'("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS")
"List of #defined symbols whose expansion ends with a semicolon.
Alternatively it can be a string, a regular expression which
matches all such symbols.
The \"symbols\" must be syntactically valid identifiers in the
target language \(C, C++, Objective C), or \(as the case may be)
the regular expression must match only valid identifiers.
If you change this variable's value, call the function
`c-make-macros-with-semi-re' to set the necessary internal
variables.
Note that currently \(2008-11-04) this variable is a prototype,
and is likely to disappear or change its form soon.")
(make-variable-buffer-local 'c-macro-names-with-semicolon)
(defvar c-file-style nil
"Variable interface for setting style via File Local Variables.
In a file's Local Variable section, you can set this variable to a

View file

@ -43,21 +43,10 @@
;; M-x gdb will start the debugger.
;; This file uses GDB/MI as the primary interface to GDB. It is still under
;; development and is part of a process to migrate Emacs from annotations (as
;; used in gdb-ui.el) to GDB/MI. It runs gdb with GDB/MI (-interp=mi) and
;; access CLI using "-interpreter-exec console cli-command". This code works
;; without gdb-ui.el and uses MI tokens instead of queues. Eventually MI
;; should be asynchronous.
;; This mode will PARTLY WORK WITH RECENT GDB RELEASES (status in modeline
;; doesn't update properly when execution commands are issued from GUD buffer)
;; and WORKS BEST when GDB runs asynchronously: maint set linux-async on.
;;
;; You need development version of GDB 7.0 for the thread buffer to work.
;; This file replaces gdb-ui.el and is for development with GDB. Use the
;; release branch of Emacs 22 for the latest version of gdb-ui.el.
;; This file uses GDB/MI as the primary interface to GDB. It runs gdb with
;; GDB/MI (-interp=mi) and access CLI using "-interpreter-exec console
;; cli-command". This code works without gdb-ui.el and uses MI tokens instead
;; of queues. Eventually MI should be asynchronous.
;; Windows Platforms:
@ -599,6 +588,22 @@ NOARG must be t when this macro is used outside `gud-def'"
(concat (gdb-gud-context-command ,cmd1 ,noall) " " ,cmd2)
,(when (not noarg) 'arg)))
(defun gdb--check-interpreter (proc string)
(unless (zerop (length string))
(let ((filter (process-get proc 'gud-normal-filter)))
(set-process-filter proc filter)
(unless (memq (aref string 0) '(?^ ?~ ?@ ?& ?* ?=))
;; Apparently we're not running with -i=mi.
(let ((msg "Error: you did not specify -i=mi on GDB's command line!"))
(message msg)
(setq string (concat (propertize msg 'font-lock-face 'error)
"\n" string)))
;; Use the old gud-gbd filter, not because it works, but because it
;; will properly display GDB's answers rather than hanging waiting for
;; answers that aren't coming.
(set (make-local-variable 'gud-marker-filter) #'gud-gdb-marker-filter))
(funcall filter proc string))))
;;;###autoload
(defun gdb (command-line)
"Run gdb on program FILE in buffer *gud-FILE*.
@ -665,6 +670,13 @@ detailed description of this mode.
"Multiple debugging requires restarting in text command mode"))
;;
(gud-common-init command-line nil 'gud-gdbmi-marker-filter)
;; Setup a temporary process filter to warn when GDB was not started
;; with -i=mi.
(let ((proc (get-buffer-process gud-comint-buffer)))
(process-put proc 'gud-normal-filter (process-filter proc))
(set-process-filter proc #'gdb--check-interpreter))
(set (make-local-variable 'gud-minor-mode) 'gdbmi)
(setq comint-input-sender 'gdb-send)
(when (ring-empty-p comint-input-ring) ; cf shell-mode

View file

@ -4,7 +4,7 @@
;; Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
;; Author: John Eaton <jwe@bevo.che.wisc.edu>
;; Maintainer: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
;; Maintainer: FSF
;; Keywords: languages
;; Package: octave-mod
@ -68,7 +68,8 @@ mode, set this to (\"-q\" \"--traditional\")."
(define-key map "\C-c\C-l" 'inferior-octave-dynamic-list-input-ring)
(define-key map [menu-bar inout list-history]
'("List Input History" . inferior-octave-dynamic-list-input-ring))
(define-key map "\C-c\C-h" 'octave-help)
;; FIXME: free C-h so it can do the describe-prefix-bindings.
(define-key map "\C-c\C-h" 'info-lookup-symbol)
map)
"Keymap used in Inferior Octave mode.")

View file

@ -4,7 +4,7 @@
;; Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
;; Author: John Eaton <jwe@octave.org>
;; Maintainer: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
;; Maintainer: FSF
;; Keywords: languages
;; This file is part of GNU Emacs.
@ -223,6 +223,7 @@ parenthetical grouping.")
(define-key map "\C-c]" 'smie-close-block)
(define-key map "\C-c/" 'smie-close-block)
(define-key map "\C-c\C-f" 'octave-insert-defun)
;; FIXME: free C-h so it can do the describe-prefix-bindings.
(define-key map "\C-c\C-h" 'info-lookup-symbol)
(define-key map "\C-c\C-il" 'octave-send-line)
(define-key map "\C-c\C-ib" 'octave-send-block)
@ -236,6 +237,7 @@ parenthetical grouping.")
(define-key map "\C-c\C-i\C-f" 'octave-send-defun)
(define-key map "\C-c\C-i\C-r" 'octave-send-region)
(define-key map "\C-c\C-i\C-s" 'octave-show-process-buffer)
;; FIXME: free C-h so it can do the describe-prefix-bindings.
(define-key map "\C-c\C-i\C-h" 'octave-hide-process-buffer)
(define-key map "\C-c\C-i\C-k" 'octave-kill-process)
map)
@ -655,14 +657,6 @@ including a reproducible test case and send the message."
(easy-menu-add octave-mode-menu)
(octave-initialize-completions))
(defvar info-lookup-mode)
(defun octave-help ()
"Get help on Octave symbols from the Octave info files.
Look up symbol in the function, operator and variable indices of the info files."
(let ((info-lookup-mode 'octave-mode))
(call-interactively 'info-lookup-symbol)))
;;; Miscellaneous useful functions

View file

@ -349,7 +349,8 @@ location."
Other major modes are defined by comparison with this one."
(interactive)
(kill-all-local-variables)
(run-mode-hooks 'fundamental-mode-hook))
(unless delay-mode-hooks
(run-hooks 'after-change-major-mode-hook)))
;; Special major modes to view specially formatted data rather than files.

View file

@ -116,8 +116,6 @@ BODY should be a list of Lisp expressions.
;; depend on backquote.el.
(list 'function (cons 'lambda cdr)))
;; Partial application of functions (similar to "currying").
;; This function is here rather than in subr.el because it uses CL.
(defun apply-partially (fun &rest args)
"Return a function that is a partial application of FUN to ARGS.
ARGS is a list of the first N arguments to pass to FUN.
@ -1366,18 +1364,26 @@ All symbols are bound before the VALUEFORMs are evalled."
,@(mapcar (lambda (binder) `(setq ,@binder)) binders)
,@body))
(defmacro with-wrapper-hook (var args &rest body)
"Run BODY wrapped with the VAR hook.
VAR is a special hook: its functions are called with a first argument
which is the \"original\" code (the BODY), so the hook function can wrap
the original function, or call it any number of times (including not calling
it at all). This is similar to an `around' advice.
VAR is normally a symbol (a variable) in which case it is treated like
a hook, with a buffer-local and a global part. But it can also be an
arbitrary expression.
ARGS is a list of variables which will be passed as additional arguments
to each function, after the initial argument, and which the first argument
expects to receive when called."
(defmacro with-wrapper-hook (hook args &rest body)
"Run BODY, using wrapper functions from HOOK with additional ARGS.
HOOK is an abnormal hook. Each hook function in HOOK \"wraps\"
around the preceding ones, like a set of nested `around' advices.
Each hook function should accept an argument list consisting of a
function FUN, followed by the additional arguments in ARGS.
The FUN passed to the first hook function in HOOK performs BODY,
if it is called with arguments ARGS. The FUN passed to each
successive hook function is defined based on the preceding hook
functions; if called with arguments ARGS, it does what the
`with-wrapper-hook' call would do if the preceding hook functions
were the only ones present in HOOK.
In the function definition of each hook function, FUN can be
called any number of times (including not calling it at all).
That function definition is then used to construct the FUN passed
to the next hook function, if any. The last (or \"outermost\")
FUN is then called once."
(declare (indent 2) (debug (form sexp body)))
;; We need those two gensyms because CL's lexical scoping is not available
;; for function arguments :-(
@ -1406,11 +1412,11 @@ expects to receive when called."
;; Once there are no more functions on the hook, run
;; the original body.
(apply (lambda ,args ,@body) ,argssym)))))
(funcall ,runrestofhook ,var
(funcall ,runrestofhook ,hook
;; The global part of the hook, if any.
,(if (symbolp var)
`(if (local-variable-p ',var)
(default-value ',var)))
,(if (symbolp hook)
`(if (local-variable-p ',hook)
(default-value ',hook)))
(list ,@args)))))
(defun add-to-list (list-var element &optional append compare-fn)
@ -1524,6 +1530,9 @@ if it is empty or a duplicate."
(make-variable-buffer-local 'delayed-mode-hooks)
(put 'delay-mode-hooks 'permanent-local t)
(defvar change-major-mode-after-body-hook nil
"Normal hook run in major mode functions, before the mode hooks.")
(defvar after-change-major-mode-hook nil
"Normal hook run at the very end of major mode functions.")
@ -1540,7 +1549,7 @@ FOO-mode-hook."
;; Normal case, just run the hook as before plus any delayed hooks.
(setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
(setq delayed-mode-hooks nil)
(apply 'run-hooks hooks)
(apply 'run-hooks (cons 'change-major-mode-after-body-hook hooks))
(run-hooks 'after-change-major-mode-hook)))
(defmacro delay-mode-hooks (&rest body)

View file

@ -85,6 +85,7 @@
(define-obsolete-function-alias 'w32-select-font 'x-select-font "23.1")
(defvar w32-color-map) ;; defined in w32fns.c
(make-obsolete 'w32-default-color-map nil "24.1")
(declare-function w32-send-sys-command "w32fns.c")
(declare-function set-message-beep "w32console.c")

View file

@ -1522,7 +1522,7 @@ Valid actions are: readable, restore, read, kill, write."
;;; (while all
;;; (when (and (eq (car (car all)) 'bof)
;;; (not (file-regular-p (nth 1 (car all)))))
;;; (message "File %s in saved parse info not avalable" (cdr (car all)))
;;; (message "File %s in saved parse info not available" (cdr (car all)))
;;; (error "File not found"))
;;; (setq all (cdr all))))
)

View file

@ -593,6 +593,13 @@ to build the Fixes: header.")
(put 'log-edit-rewrite-fixes 'safe-local-variable
(lambda (v) (and (stringp (car-safe v)) (stringp (cdr v)))))
(defun log-edit-add-field (field value)
(rfc822-goto-eoh)
(if (save-excursion (re-search-backward (concat "^" field ":\\([ \t]*\\)$")
nil t))
(replace-match (concat " " value) t t nil 1)
(insert field ": " value "\n" (if (looking-at "\n") "" "\n"))))
(defun log-edit-insert-changelog (&optional use-first)
"Insert a log message by looking at the ChangeLog.
The idea is to write your ChangeLog entries first, and then use this
@ -620,9 +627,7 @@ regardless of user name or time."
(log-edit-insert-changelog-entries (log-edit-files)))))
(log-edit-set-common-indentation)
;; Add an Author: field if appropriate.
(when author
(rfc822-goto-eoh)
(insert "Author: " author "\n" (if (looking-at "\n") "" "\n")))
(when author (log-edit-add-field "Author" author))
;; Add a Fixes: field if applicable.
(when (consp log-edit-rewrite-fixes)
(rfc822-goto-eoh)
@ -632,8 +637,7 @@ regardless of user name or time."
(fixes (match-substitute-replacement
(cdr log-edit-rewrite-fixes))))
(delete-region start end)
(rfc822-goto-eoh)
(insert "Fixes: " fixes "\n" (if (looking-at "\n") "" "\n")))))
(log-edit-add-field "Fixes" fixes))))
(and log-edit-strip-single-file-name
(progn (rfc822-goto-eoh)
(if (looking-at "\n") (forward-char 1))

View file

@ -1,3 +1,12 @@
2011-10-25 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (dist): Don't put the top-level INSTALL into the
distribution. (Bug#9861)
2011-10-25 Christoph Scholtes <cschol2112@googlemail.com>
* INSTALL: Update URL for GTK download page.
2011-10-19 Eli Zaretskii <eliz@gnu.org>
* config.nt (HAVE_TZNAME, HAVE_DECL_TZNAME): Define.

View file

@ -323,7 +323,7 @@
For PNG images, we recommend to use versions 1.4.x and later of
libpng, because previous versions had security issues. You can find
precompiled libraries and headers on the GTK download page for
Windows (http://www.gtk.org/download-windows.html).
Windows (http://www.gtk.org/download/win32.php).
Versions 1.4.0 and later of libpng are binary incompatible with
earlier versions, so Emacs will only look for libpng libraries which

View file

@ -263,7 +263,6 @@ dist: install-bin
$(CP) "$(INSTALL_DIR)/COPYING" $(TMP_DIST_DIR)
$(CP) "$(INSTALL_DIR)/README" $(TMP_DIST_DIR)
$(CP) "$(INSTALL_DIR)/README.W32" $(TMP_DIST_DIR)
$(CP) "$(INSTALL_DIR)/INSTALL" $(TMP_DIST_DIR)
$(CP_DIR) "$(INSTALL_DIR)/bin" $(TMP_DIST_DIR)
$(CP_DIR) "$(INSTALL_DIR)/etc" $(TMP_DIST_DIR)
$(CP_DIR) "$(INSTALL_DIR)/info" $(TMP_DIST_DIR)

View file

@ -1,3 +1,86 @@
2011-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp.h (struct Lisp_Symbol): Update comments.
2011-10-28 Juanma Barranquero <lekktu@gmail.com>
* w32font.c (w32_load_unicows_or_gdi32): Add missing return.
2011-10-28 Eli Zaretskii <eliz@gnu.org>
Fix Emacs on Windows 9X (bug#8562). Thanks to oslsachem
<oslsachem@gmail.com> for helping to debug this.
* w32font.c (g_b_init_is_w9x, g_b_init_get_outline_metrics_w)
(g_b_init_get_text_metrics_w, g_b_init_get_glyph_outline_w)
(g_b_init_get_glyph_outline_w): New static variables.
(GetOutlineTextMetricsW_Proc, GetTextMetricsW_Proc)
(GetGlyphOutlineW_Proc): New typedefs.
(w32_load_unicows_or_gdi32, get_outline_metrics_w)
(get_text_metrics_w, get_glyph_outline_w, globals_of_w32font):
New functions.
(w32font_open_internal, compute_metrics):
Call get_outline_metrics_w, get_text_metrics_w, and get_glyph_outline_w
instead of calling the "wide" APIs directly.
* emacs.c (main) [HAVE_NTGUI]: Call globals_of_w32font.
* w32.h (syms_of_w32font): Add prototype.
2011-10-27 Juanma Barranquero <lekktu@gmail.com>
* window.c (Fframe_root_window, Fframe_first_window, Fwindow_end)
(Fframe_selected_window, Ftemp_output_buffer_show, Fnext_window)
(Fdelete_window_internal, Fwindow_parameters): Fix typos in docstrings.
(Fmove_to_window_line): Doc fix.
2011-10-27 Chong Yidong <cyd@gnu.org>
* process.c (make_process): Set gnutls_state to NULL.
* gnutls.c (emacs_gnutls_deinit): Deinit the gnutls_state if it is
non-NULL, regardless of GNUTLS_INITSTAGE.
(Fgnutls_boot): Cleanups. Call emacs_gnutls_deinit if we signal
an error. Set process slots as soon as we allocate them.
* gnutls.h (GNUTLS_LOG, GNUTLS_LOG2): Fix macros.
2011-10-27 Chong Yidong <cyd@gnu.org>
* gnutls.c (emacs_gnutls_deinit): New function.
Deallocate credentials structures as well as calling gnutls_deinit.
(Fgnutls_deinit, Fgnutls_boot): Use it.
* process.c (make_process): Initialize GnuTLS credentials to NULL.
(deactivate_process): Call emacs_gnutls_deinit.
2011-10-27 Juanma Barranquero <lekktu@gmail.com>
* image.c (x_create_x_image_and_pixmap):
* w32.c (sys_rename, w32_delayed_load):
* w32font.c (fill_in_logfont):
* w32reg.c (x_get_string_resource): Silence compiler warnings.
2011-10-26 Juanma Barranquero <lekktu@gmail.com>
* w32fns.c (w32_default_color_map): New function,
extracted from Fw32_default_color_map.
(Fw32_default_color_map, Fx_open_connection): Use it. (Bug#9785)
2011-10-25 Paul Eggert <eggert@cs.ucla.edu>
* dispextern.h (Fcontrolling_tty_p): New decl (Bug#6649 part 2).
2011-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
* keyboard.c (test_undefined): New function (bug#9751).
(read_key_sequence): Use it to detect when a key is bound to `undefined'.
2011-10-25 Enami Tsugutomo <tsugutomo.enami@jp.sony.com>
* sysdep.c (init_sys_modes): Fix the check for the controlling
terminal (Bug#6649).
2011-10-20 Eli Zaretskii <eliz@gnu.org>
* dispextern.h (struct bidi_it): New member next_en_type.

View file

@ -3346,6 +3346,7 @@ extern int tty_capable_p (struct tty_display_info *, unsigned, unsigned long, un
extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
extern struct terminal *get_named_tty (const char *);
EXFUN (Ftty_type, 1);
EXFUN (Fcontrolling_tty_p, 1);
extern void create_tty_output (struct frame *);
extern struct terminal *init_tty (const char *, const char *, int);
extern void tty_append_glyph (struct it *);

View file

@ -1591,6 +1591,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
/* Initialization that must be done even if the global variable
initialized is non zero. */
#ifdef HAVE_NTGUI
globals_of_w32font ();
globals_of_w32fns ();
globals_of_w32menu ();
globals_of_w32select ();

View file

@ -464,6 +464,44 @@ gnutls_make_error (int err)
return make_number (err);
}
Lisp_Object
emacs_gnutls_deinit (Lisp_Object proc)
{
int log_level;
CHECK_PROCESS (proc);
if (XPROCESS (proc)->gnutls_p == 0)
return Qnil;
log_level = XPROCESS (proc)->gnutls_log_level;
if (XPROCESS (proc)->gnutls_x509_cred)
{
GNUTLS_LOG (2, log_level, "Deallocating x509 credentials");
fn_gnutls_certificate_free_credentials (XPROCESS (proc)->gnutls_x509_cred);
XPROCESS (proc)->gnutls_x509_cred = NULL;
}
if (XPROCESS (proc)->gnutls_anon_cred)
{
GNUTLS_LOG (2, log_level, "Deallocating anon credentials");
fn_gnutls_anon_free_client_credentials (XPROCESS (proc)->gnutls_anon_cred);
XPROCESS (proc)->gnutls_anon_cred = NULL;
}
if (XPROCESS (proc)->gnutls_state)
{
fn_gnutls_deinit (XPROCESS (proc)->gnutls_state);
XPROCESS (proc)->gnutls_state = NULL;
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT - 1;
}
XPROCESS (proc)->gnutls_p = 0;
return Qt;
}
DEFUN ("gnutls-get-initstage", Fgnutls_get_initstage, Sgnutls_get_initstage, 1, 1, 0,
doc: /* Return the GnuTLS init stage of process PROC.
See also `gnutls-boot'. */)
@ -551,18 +589,7 @@ DEFUN ("gnutls-deinit", Fgnutls_deinit, Sgnutls_deinit, 1, 1, 0,
See also `gnutls-init'. */)
(Lisp_Object proc)
{
gnutls_session_t state;
CHECK_PROCESS (proc);
state = XPROCESS (proc)->gnutls_state;
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
{
fn_gnutls_deinit (state);
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT - 1;
}
return Qt;
return emacs_gnutls_deinit (proc);
}
DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
@ -622,7 +649,7 @@ emacs_gnutls_global_deinit (void)
DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 3, 0,
doc: /* Initialize GnuTLS client for process PROC with TYPE+PROPLIST.
Currently only client mode is supported. Returns a success/failure
Currently only client mode is supported. Return a success/failure
value you can check with `gnutls-errorp'.
TYPE is a symbol, either `gnutls-anon' or `gnutls-x509pki'.
@ -673,23 +700,13 @@ one trustfile (usually a CA bundle). */)
(Lisp_Object proc, Lisp_Object type, Lisp_Object proplist)
{
int ret = GNUTLS_E_SUCCESS;
int max_log_level = 0;
/* TODO: GNUTLS_X509_FMT_DER is also an option. */
int file_format = GNUTLS_X509_FMT_PEM;
unsigned int gnutls_verify_flags = GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT;
gnutls_x509_crt_t gnutls_verify_cert;
unsigned int gnutls_verify_cert_list_size;
const gnutls_datum_t *gnutls_verify_cert_list;
gnutls_session_t state;
gnutls_certificate_credentials_t x509_cred;
gnutls_anon_client_credentials_t anon_cred;
gnutls_certificate_credentials_t x509_cred = NULL;
gnutls_anon_client_credentials_t anon_cred = NULL;
Lisp_Object global_init;
char const *priority_string_ptr = "NORMAL"; /* default priority string. */
Lisp_Object tail;
unsigned int peer_verification;
char* c_hostname;
@ -701,7 +718,6 @@ one trustfile (usually a CA bundle). */)
/* Lisp_Object callbacks; */
Lisp_Object loglevel;
Lisp_Object hostname;
Lisp_Object verify_flags;
/* Lisp_Object verify_error; */
Lisp_Object verify_hostname_error;
Lisp_Object prime_bits;
@ -716,26 +732,25 @@ one trustfile (usually a CA bundle). */)
return gnutls_make_error (GNUTLS_EMACS_ERROR_NOT_LOADED);
}
if (!EQ (type, Qgnutls_x509pki) && !EQ (type, Qgnutls_anon))
{
error ("Invalid GnuTLS credential type");
return gnutls_make_error (GNUTLS_EMACS_ERROR_INVALID_TYPE);
}
hostname = Fplist_get (proplist, QCgnutls_bootprop_hostname);
priority_string = Fplist_get (proplist, QCgnutls_bootprop_priority);
trustfiles = Fplist_get (proplist, QCgnutls_bootprop_trustfiles);
keylist = Fplist_get (proplist, QCgnutls_bootprop_keylist);
crlfiles = Fplist_get (proplist, QCgnutls_bootprop_crlfiles);
/* callbacks = Fplist_get (proplist, QCgnutls_bootprop_callbacks); */
loglevel = Fplist_get (proplist, QCgnutls_bootprop_loglevel);
verify_flags = Fplist_get (proplist, QCgnutls_bootprop_verify_flags);
/* verify_error = Fplist_get (proplist, QCgnutls_bootprop_verify_error); */
verify_hostname_error = Fplist_get (proplist, QCgnutls_bootprop_verify_hostname_error);
prime_bits = Fplist_get (proplist, QCgnutls_bootprop_min_prime_bits);
if (!STRINGP (hostname))
error ("gnutls-boot: invalid :hostname parameter");
c_hostname = SSDATA (hostname);
state = XPROCESS (proc)->gnutls_state;
XPROCESS (proc)->gnutls_p = 1;
if (NUMBERP (loglevel))
{
fn_gnutls_global_set_log_function (gnutls_log_function);
@ -749,82 +764,56 @@ one trustfile (usually a CA bundle). */)
if (! NILP (Fgnutls_errorp (global_init)))
return global_init;
/* deinit and free resources. */
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_CRED_ALLOC)
{
GNUTLS_LOG (1, max_log_level, "deallocating credentials");
if (EQ (type, Qgnutls_x509pki))
{
GNUTLS_LOG (2, max_log_level, "deallocating x509 credentials");
x509_cred = XPROCESS (proc)->gnutls_x509_cred;
fn_gnutls_certificate_free_credentials (x509_cred);
}
else if (EQ (type, Qgnutls_anon))
{
GNUTLS_LOG (2, max_log_level, "deallocating anon credentials");
anon_cred = XPROCESS (proc)->gnutls_anon_cred;
fn_gnutls_anon_free_client_credentials (anon_cred);
}
else
{
error ("unknown credential type");
ret = GNUTLS_EMACS_ERROR_INVALID_TYPE;
}
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
{
GNUTLS_LOG (1, max_log_level, "deallocating x509 credentials");
Fgnutls_deinit (proc);
}
}
/* Before allocating new credentials, deallocate any credentials
that PROC might already have. */
emacs_gnutls_deinit (proc);
/* Mark PROC as a GnuTLS process. */
XPROCESS (proc)->gnutls_p = 1;
XPROCESS (proc)->gnutls_state = NULL;
XPROCESS (proc)->gnutls_x509_cred = NULL;
XPROCESS (proc)->gnutls_anon_cred = NULL;
XPROCESS (proc)->gnutls_cred_type = type;
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_EMPTY;
GNUTLS_LOG (1, max_log_level, "allocating credentials");
if (EQ (type, Qgnutls_x509pki))
{
GNUTLS_LOG (2, max_log_level, "allocating x509 credentials");
x509_cred = XPROCESS (proc)->gnutls_x509_cred;
fn_gnutls_certificate_allocate_credentials (&x509_cred);
Lisp_Object verify_flags;
unsigned int gnutls_verify_flags = GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT;
GNUTLS_LOG (2, max_log_level, "allocating x509 credentials");
fn_gnutls_certificate_allocate_credentials (&x509_cred);
XPROCESS (proc)->gnutls_x509_cred = x509_cred;
verify_flags = Fplist_get (proplist, QCgnutls_bootprop_verify_flags);
if (NUMBERP (verify_flags))
{
gnutls_verify_flags = XINT (verify_flags);
GNUTLS_LOG (2, max_log_level, "setting verification flags");
}
else if (NILP (verify_flags))
{
/* The default is already GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT. */
GNUTLS_LOG (2, max_log_level, "using default verification flags");
}
GNUTLS_LOG (2, max_log_level, "using default verification flags");
else
{
/* The default is already GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT. */
GNUTLS_LOG (2, max_log_level, "ignoring invalid verify-flags");
}
GNUTLS_LOG (2, max_log_level, "ignoring invalid verify-flags");
fn_gnutls_certificate_set_verify_flags (x509_cred, gnutls_verify_flags);
}
else if (EQ (type, Qgnutls_anon))
else /* Qgnutls_anon: */
{
GNUTLS_LOG (2, max_log_level, "allocating anon credentials");
anon_cred = XPROCESS (proc)->gnutls_anon_cred;
fn_gnutls_anon_allocate_client_credentials (&anon_cred);
XPROCESS (proc)->gnutls_anon_cred = anon_cred;
}
else
{
error ("unknown credential type");
ret = GNUTLS_EMACS_ERROR_INVALID_TYPE;
}
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_ALLOC;
if (EQ (type, Qgnutls_x509pki))
{
/* TODO: GNUTLS_X509_FMT_DER is also an option. */
int file_format = GNUTLS_X509_FMT_PEM;
Lisp_Object tail;
for (tail = trustfiles; !NILP (tail); tail = Fcdr (tail))
{
Lisp_Object trustfile = Fcar (tail);
@ -842,8 +831,8 @@ one trustfile (usually a CA bundle). */)
}
else
{
error ("Sorry, GnuTLS can't use non-string trustfile %s",
SDATA (trustfile));
emacs_gnutls_deinit (proc);
error ("Invalid trustfile");
}
}
@ -855,17 +844,15 @@ one trustfile (usually a CA bundle). */)
GNUTLS_LOG2 (1, max_log_level, "setting the CRL file: ",
SSDATA (crlfile));
ret = fn_gnutls_certificate_set_x509_crl_file
(x509_cred,
SSDATA (crlfile),
file_format);
(x509_cred, SSDATA (crlfile), file_format);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
}
else
{
error ("Sorry, GnuTLS can't use non-string CRL file %s",
SDATA (crlfile));
emacs_gnutls_deinit (proc);
error ("Invalid CRL file");
}
}
@ -880,45 +867,31 @@ one trustfile (usually a CA bundle). */)
GNUTLS_LOG2 (1, max_log_level, "setting the client cert file: ",
SSDATA (certfile));
ret = fn_gnutls_certificate_set_x509_key_file
(x509_cred,
SSDATA (certfile),
SSDATA (keyfile),
file_format);
(x509_cred, SSDATA (certfile), SSDATA (keyfile), file_format);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
}
else
{
if (STRINGP (keyfile))
error ("Sorry, GnuTLS can't use non-string client cert file %s",
SDATA (certfile));
else
error ("Sorry, GnuTLS can't use non-string client key file %s",
SDATA (keyfile));
emacs_gnutls_deinit (proc);
error (STRINGP (keyfile) ? "Invalid client cert file"
: "Invalid client key file");
}
}
}
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_FILES;
GNUTLS_LOG (1, max_log_level, "gnutls callbacks");
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CALLBACKS;
#ifdef HAVE_GNUTLS_CALLBACK_CERTIFICATE_VERIFY
#else
#endif
/* Call gnutls_init here: */
GNUTLS_LOG (1, max_log_level, "gnutls_init");
ret = fn_gnutls_init (&state, GNUTLS_CLIENT);
XPROCESS (proc)->gnutls_state = state;
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
XPROCESS (proc)->gnutls_state = state;
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT;
if (STRINGP (priority_string))
@ -934,46 +907,25 @@ one trustfile (usually a CA bundle). */)
}
GNUTLS_LOG (1, max_log_level, "setting the priority string");
ret = fn_gnutls_priority_set_direct (state,
priority_string_ptr,
NULL);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_PRIORITY;
if (!EQ (prime_bits, Qnil))
{
fn_gnutls_dh_set_prime_bits (state, XUINT (prime_bits));
}
if (EQ (type, Qgnutls_x509pki))
{
ret = fn_gnutls_credentials_set (state, GNUTLS_CRD_CERTIFICATE, x509_cred);
}
else if (EQ (type, Qgnutls_anon))
{
ret = fn_gnutls_credentials_set (state, GNUTLS_CRD_ANON, anon_cred);
}
else
{
error ("unknown credential type");
ret = GNUTLS_EMACS_ERROR_INVALID_TYPE;
}
if (INTEGERP (prime_bits))
fn_gnutls_dh_set_prime_bits (state, XUINT (prime_bits));
ret = EQ (type, Qgnutls_x509pki)
? fn_gnutls_credentials_set (state, GNUTLS_CRD_CERTIFICATE, x509_cred)
: fn_gnutls_credentials_set (state, GNUTLS_CRD_ANON, anon_cred);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
XPROCESS (proc)->gnutls_anon_cred = anon_cred;
XPROCESS (proc)->gnutls_x509_cred = x509_cred;
XPROCESS (proc)->gnutls_cred_type = type;
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_SET;
ret = emacs_gnutls_handshake (XPROCESS (proc));
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
@ -984,69 +936,71 @@ one trustfile (usually a CA bundle). */)
gnutls_x509_crt_check_hostname() against :hostname. */
ret = fn_gnutls_certificate_verify_peers2 (state, &peer_verification);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
if (XINT (loglevel) > 0 && peer_verification & GNUTLS_CERT_INVALID)
message ("%s certificate could not be verified.",
c_hostname);
message ("%s certificate could not be verified.", c_hostname);
if (peer_verification & GNUTLS_CERT_REVOKED)
GNUTLS_LOG2 (1, max_log_level, "certificate was revoked (CRL):",
c_hostname);
if (peer_verification & GNUTLS_CERT_REVOKED)
GNUTLS_LOG2 (1, max_log_level, "certificate was revoked (CRL):",
c_hostname);
if (peer_verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
GNUTLS_LOG2 (1, max_log_level, "certificate signer was not found:",
c_hostname);
if (peer_verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
GNUTLS_LOG2 (1, max_log_level, "certificate signer was not found:",
c_hostname);
if (peer_verification & GNUTLS_CERT_SIGNER_NOT_CA)
GNUTLS_LOG2 (1, max_log_level, "certificate signer is not a CA:",
c_hostname);
if (peer_verification & GNUTLS_CERT_SIGNER_NOT_CA)
GNUTLS_LOG2 (1, max_log_level, "certificate signer is not a CA:",
c_hostname);
if (peer_verification & GNUTLS_CERT_INSECURE_ALGORITHM)
GNUTLS_LOG2 (1, max_log_level,
"certificate was signed with an insecure algorithm:",
c_hostname);
if (peer_verification & GNUTLS_CERT_INSECURE_ALGORITHM)
GNUTLS_LOG2 (1, max_log_level,
"certificate was signed with an insecure algorithm:",
c_hostname);
if (peer_verification & GNUTLS_CERT_NOT_ACTIVATED)
GNUTLS_LOG2 (1, max_log_level, "certificate is not yet activated:",
c_hostname);
if (peer_verification & GNUTLS_CERT_NOT_ACTIVATED)
GNUTLS_LOG2 (1, max_log_level, "certificate is not yet activated:",
c_hostname);
if (peer_verification & GNUTLS_CERT_EXPIRED)
GNUTLS_LOG2 (1, max_log_level, "certificate has expired:",
c_hostname);
if (peer_verification & GNUTLS_CERT_EXPIRED)
GNUTLS_LOG2 (1, max_log_level, "certificate has expired:",
c_hostname);
if (peer_verification != 0)
{
if (NILP (verify_hostname_error))
{
GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
c_hostname);
}
else
{
error ("Certificate validation failed %s, verification code %d",
c_hostname, peer_verification);
}
}
if (peer_verification != 0)
{
if (NILP (verify_hostname_error))
GNUTLS_LOG2 (1, max_log_level, "certificate validation failed:",
c_hostname);
else
{
emacs_gnutls_deinit (proc);
error ("Certificate validation failed %s, verification code %d",
c_hostname, peer_verification);
}
}
/* Up to here the process is the same for X.509 certificates and
OpenPGP keys. From now on X.509 certificates are assumed. This
can be easily extended to work with openpgp keys as well. */
if (fn_gnutls_certificate_type_get (state) == GNUTLS_CRT_X509)
{
ret = fn_gnutls_x509_crt_init (&gnutls_verify_cert);
gnutls_x509_crt_t gnutls_verify_cert;
const gnutls_datum_t *gnutls_verify_cert_list;
unsigned int gnutls_verify_cert_list_size;
ret = fn_gnutls_x509_crt_init (&gnutls_verify_cert);
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
gnutls_verify_cert_list =
fn_gnutls_certificate_get_peers (state, &gnutls_verify_cert_list_size);
if (NULL == gnutls_verify_cert_list)
if (gnutls_verify_cert_list == NULL)
{
error ("No x509 certificate was found!\n");
fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
emacs_gnutls_deinit (proc);
error ("No x509 certificate was found\n");
}
/* We only check the first certificate in the given chain. */
@ -1063,18 +1017,15 @@ one trustfile (usually a CA bundle). */)
if (!fn_gnutls_x509_crt_check_hostname (gnutls_verify_cert, c_hostname))
{
if (NILP (verify_hostname_error))
{
GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
c_hostname);
}
GNUTLS_LOG2 (1, max_log_level, "x509 certificate does not match:",
c_hostname);
else
{
fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
error ("The x509 certificate does not match \"%s\"",
c_hostname);
emacs_gnutls_deinit (proc);
error ("The x509 certificate does not match \"%s\"", c_hostname);
}
}
fn_gnutls_x509_crt_deinit (gnutls_verify_cert);
}

View file

@ -49,9 +49,9 @@ typedef enum
#define GNUTLS_PROCESS_USABLE(proc) (GNUTLS_INITSTAGE(proc) >= GNUTLS_STAGE_READY)
#define GNUTLS_LOG(level, max, string) if (level <= max) { gnutls_log_function (level, "(Emacs) " string); }
#define GNUTLS_LOG(level, max, string) do { if (level <= max) { gnutls_log_function (level, "(Emacs) " string); } } while (0)
#define GNUTLS_LOG2(level, max, string, extra) if (level <= max) { gnutls_log_function2 (level, "(Emacs) " string, extra); }
#define GNUTLS_LOG2(level, max, string, extra) do { if (level <= max) { gnutls_log_function2 (level, "(Emacs) " string, extra); } } while (0)
extern EMACS_INT
emacs_gnutls_write (struct Lisp_Process *proc, const char *buf, EMACS_INT nbyte);
@ -60,6 +60,7 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, EMACS_INT nbyte);
extern int emacs_gnutls_record_check_pending (gnutls_session_t state);
extern void emacs_gnutls_transport_set_errno (gnutls_session_t state, int err);
extern Lisp_Object emacs_gnutls_deinit (Lisp_Object);
extern void syms_of_gnutls (void);

View file

@ -2015,7 +2015,7 @@ x_create_x_image_and_pixmap (struct frame *f, int width, int height, int depth,
/* Bitmaps with a depth less than 16 need a palette. */
/* BITMAPINFO structure already contains the first RGBQUAD. */
if (depth < 16)
palette_colors = 1 << depth - 1;
palette_colors = 1 << (depth - 1);
*ximg = xmalloc (sizeof (XImage) + palette_colors * sizeof (RGBQUAD));

View file

@ -1723,8 +1723,6 @@ graft_intervals_into_buffer (INTERVAL source, EMACS_INT position,
BUF_INTERVALS (buffer)->position = BEG;
BUF_INTERVALS (buffer)->up_obj = 1;
/* Explicitly free the old tree here? */
return;
}

View file

@ -73,7 +73,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "nsterm.h"
#endif
/* Variables for blockinput.h: */
/* Variables for blockinput.h: */
/* Non-zero if interrupt input is blocked right now. */
volatile int interrupt_input_blocked;
@ -338,7 +338,7 @@ static Lisp_Object Qconfig_changed_event;
Lisp_Object Qevent_kind;
static Lisp_Object Qevent_symbol_elements;
/* menu and tool bar item parts */
/* Menu and tool bar item parts. */
static Lisp_Object Qmenu_enable;
static Lisp_Object QCenable, QCvisible, QChelp, QCkeys, QCkey_sequence;
Lisp_Object QCfilter;
@ -835,7 +835,7 @@ recursive_edit_unwind (Lisp_Object buffer)
#if 0 /* These two functions are now replaced with
temporarily_switch_to_single_kboard. */
temporarily_switch_to_single_kboard. */
static void
any_kboard_state ()
{
@ -1038,7 +1038,7 @@ cmd_error (Lisp_Object data)
Vquit_flag = Qnil;
Vinhibit_quit = Qnil;
#if 0 /* This shouldn't be necessary anymore. --lorentey */
#if 0 /* This shouldn't be necessary anymore. --lorentey */
if (command_loop_level == 0 && minibuf_level == 0)
any_kboard_state ();
#endif
@ -1131,7 +1131,7 @@ command_loop (void)
#if 0 /* This shouldn't be necessary anymore. --lorentey */
/* Reset single_kboard in case top-level set it while
evaluating an -f option, or we are stuck there for some
other reason. */
other reason. */
any_kboard_state ();
#endif
internal_catch (Qtop_level, command_loop_2, Qnil);
@ -1492,8 +1492,8 @@ command_loop_1 (void)
if (!NILP (Vquit_flag))
{
Vexecuting_kbd_macro = Qt;
QUIT; /* Make some noise. */
/* Will return since macro now empty. */
QUIT; /* Make some noise. */
/* Will return since macro now empty. */
}
}
@ -1512,7 +1512,7 @@ command_loop_1 (void)
Vdisable_point_adjustment = Qnil;
/* Process filters and timers may have messed with deactivate-mark.
reset it before we execute the command. */
reset it before we execute the command. */
Vdeactivate_mark = Qnil;
/* Remap command through active keymaps. */
@ -1552,7 +1552,7 @@ command_loop_1 (void)
}
else
{
/* Here for a command that isn't executed directly */
/* Here for a command that isn't executed directly. */
#ifdef HAVE_WINDOW_SYSTEM
int scount = SPECPDL_INDEX ();
@ -1960,7 +1960,7 @@ void
poll_for_input_1 (void)
{
/* Tell ns_read_socket() it is being called asynchronously so it can avoid
doing anything dangerous. */
doing anything dangerous. */
#ifdef HAVE_NS
++handling_signal;
#endif
@ -2000,7 +2000,7 @@ start_polling (void)
#ifdef POLL_FOR_INPUT
/* XXX This condition was (read_socket_hook && !interrupt_input),
but read_socket_hook is not global anymore. Let's pretend that
it's always set. */
it's always set. */
if (!interrupt_input)
{
/* Turn alarm handling on unconditionally. It might have
@ -2037,7 +2037,7 @@ input_polling_used (void)
#ifdef POLL_FOR_INPUT
/* XXX This condition was (read_socket_hook && !interrupt_input),
but read_socket_hook is not global anymore. Let's pretend that
it's always set. */
it's always set. */
return !interrupt_input;
#else
return 0;
@ -2052,7 +2052,7 @@ stop_polling (void)
#ifdef POLL_FOR_INPUT
/* XXX This condition was (read_socket_hook && !interrupt_input),
but read_socket_hook is not global anymore. Let's pretend that
it's always set. */
it's always set. */
if (!interrupt_input)
++poll_suppress_count;
#endif
@ -2390,7 +2390,7 @@ read_char (int commandflag, ptrdiff_t nmaps, Lisp_Object *maps,
real event came from. Normally, a switch-frame event selects
internal_last_event_frame after each command is read, but
events read from a macro should never cause a new frame to be
selected. */
selected. */
Vlast_event_frame = internal_last_event_frame = Qmacro;
/* Exit the macro if we are at the end.
@ -2500,7 +2500,7 @@ read_char (int commandflag, ptrdiff_t nmaps, Lisp_Object *maps,
Try this before the sit-for, because the sit-for
would do the wrong thing if we are supposed to do
menu prompting. If EVENT_HAS_PARAMETERS then we are reading
after a mouse event so don't try a minibuf menu. */
after a mouse event so don't try a minibuf menu. */
c = Qnil;
if (nmaps > 0 && INTERACTIVE
&& !NILP (prev_event) && ! EVENT_HAS_PARAMETERS (prev_event)
@ -4980,8 +4980,8 @@ static const char *const lispy_function_keys[] =
"break", /* 0xff6b */
0, 0, 0, 0,
0, 0, 0, 0, "backtab", 0, 0, 0, /* 0xff70... */
0, 0, 0, 0, 0, 0, 0, "kp-numlock", /* 0xff78... */
0, 0, 0, 0, "backtab", 0, 0, 0, /* 0xff70... */
0, 0, 0, 0, 0, 0, 0, "kp-numlock", /* 0xff78... */
"kp-space", /* 0xff80 */ /* IsKeypadKey */
0, 0, 0, 0, 0, 0, 0, 0,
"kp-tab", /* 0xff89 */
@ -5093,14 +5093,14 @@ static Lisp_Object *const scroll_bar_parts[] = {
static Lisp_Object button_down_location;
/* Information about the most recent up-going button event: Which
button, what location, and what time. */
button, what location, and what time. */
static int last_mouse_button;
static int last_mouse_x;
static int last_mouse_y;
static Time button_down_time;
/* The number of clicks in this multiple-click. */
/* The number of clicks in this multiple-click. */
static int double_click_count;
@ -5344,7 +5344,7 @@ make_lispy_event (struct input_event *event)
#ifdef HAVE_NS
/* NS_NONKEY_EVENTs are just like NON_ASCII_KEYSTROKE_EVENTs,
except that they are non-key events (last-nonmenu-event is nil). */
except that they are non-key events (last-nonmenu-event is nil). */
case NS_NONKEY_EVENT:
#endif
@ -5830,7 +5830,7 @@ make_lispy_event (struct input_event *event)
Fcons (make_number (event->timestamp),
Fcons (part, Qnil)))));
/* Always treat scroll bar events as clicks. */
/* Always treat scroll bar events as clicks. */
event->modifiers |= click_modifier;
event->modifiers &= ~up_modifier;
@ -6694,7 +6694,7 @@ lucid_event_type_list_p (Lisp_Object object)
If READABLE_EVENTS_FILTER_EVENTS is set in FLAGS, ignore internal
events (FOCUS_IN_EVENT).
If READABLE_EVENTS_IGNORE_SQUEEZABLES is set in FLAGS, ignore mouse
movements and toolkit scroll bar thumb drags. */
movements and toolkit scroll bar thumb drags. */
static void
get_input_pending (int *addr, int flags)
@ -6728,7 +6728,7 @@ gobble_input (int expected)
#ifdef POLL_FOR_INPUT
/* XXX This condition was (read_socket_hook && !interrupt_input),
but read_socket_hook is not global anymore. Let's pretend that
it's always set. */
it's always set. */
if (!interrupt_input && poll_suppress_count == 0)
{
SIGMASKTYPE mask;
@ -6803,7 +6803,7 @@ read_avail_input (int expected)
if (store_user_signal_events ())
expected = 0;
/* Loop through the available terminals, and call their input hooks. */
/* Loop through the available terminals, and call their input hooks. */
t = terminal_list;
while (t)
{
@ -6824,15 +6824,15 @@ read_avail_input (int expected)
expected = 0;
}
if (nr == -1) /* Not OK to read input now. */
if (nr == -1) /* Not OK to read input now. */
{
err = 1;
}
else if (nr == -2) /* Non-transient error. */
else if (nr == -2) /* Non-transient error. */
{
/* The terminal device terminated; it should be closed. */
/* The terminal device terminated; it should be closed. */
/* Kill Emacs if this was our last terminal. */
/* Kill Emacs if this was our last terminal. */
if (!terminal_list->next_terminal)
/* Formerly simply reported no input, but that
sometimes led to a failure of Emacs to terminate.
@ -6844,7 +6844,7 @@ read_avail_input (int expected)
alone in its group. */
kill (getpid (), SIGHUP);
/* XXX Is calling delete_terminal safe here? It calls delete_frame. */
/* XXX Is calling delete_terminal safe here? It calls delete_frame. */
{
Lisp_Object tmp;
XSETTERMINAL (tmp, t);
@ -6934,7 +6934,7 @@ tty_read_avail_input (struct terminal *terminal,
return 0;
#endif /* subprocesses */
if (!terminal->name) /* Don't read from a dead terminal. */
if (!terminal->name) /* Don't read from a dead terminal. */
return 0;
if (terminal->type != output_termcap
@ -6942,15 +6942,15 @@ tty_read_avail_input (struct terminal *terminal,
abort ();
/* XXX I think the following code should be moved to separate hook
functions in system-dependent files. */
functions in system-dependent files. */
#ifdef WINDOWSNT
return 0;
#else /* not WINDOWSNT */
if (! tty->term_initted) /* In case we get called during bootstrap. */
if (! tty->term_initted) /* In case we get called during bootstrap. */
return 0;
if (! tty->input)
return 0; /* The terminal is suspended. */
return 0; /* The terminal is suspended. */
#ifdef MSDOS
n_to_read = dos_keysns ();
@ -6976,7 +6976,7 @@ tty_read_avail_input (struct terminal *terminal,
Gpm_GetEvent closes gpm_fd and clears it to -1, which is why
we save it in `fd' so close_gpm can remove it from the
select masks.
gpm==-1 if a protocol error or EWOULDBLOCK; the latter is normal. */
gpm==-1 if a protocol error or EWOULDBLOCK; the latter is normal. */
while (gpm = Gpm_GetEvent (&event), gpm == 1) {
nread += handle_one_term_event (tty, &event, &gpm_hold_quit);
}
@ -6996,7 +6996,7 @@ tty_read_avail_input (struct terminal *terminal,
if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0)
{
if (! noninteractive)
return -2; /* Close this terminal. */
return -2; /* Close this terminal. */
else
n_to_read = 0;
}
@ -7029,16 +7029,16 @@ tty_read_avail_input (struct terminal *terminal,
process group won't get SIGHUP's at logout time. BSDI adheres to
this part standard and returns -1 from read (0) with errno==EIO
when the control tty is taken away.
Jeffrey Honig <jch@bsdi.com> says this is generally safe. */
Jeffrey Honig <jch@bsdi.com> says this is generally safe. */
if (nread == -1 && errno == EIO)
return -2; /* Close this terminal. */
return -2; /* Close this terminal. */
#if defined (AIX) && defined (_BSD)
/* The kernel sometimes fails to deliver SIGHUP for ptys.
This looks incorrect, but it isn't, because _BSD causes
O_NDELAY to be defined in fcntl.h as O_NONBLOCK,
and that causes a value other than 0 when there is no input. */
if (nread == 0)
return -2; /* Close this terminal. */
return -2; /* Close this terminal. */
#endif
}
while (
@ -7116,7 +7116,7 @@ tty_read_avail_input (struct terminal *terminal,
buf.code = cbuf[i];
/* Set the frame corresponding to the active tty. Note that the
value of selected_frame is not reliable here, redisplay tends
to temporarily change it. */
to temporarily change it. */
buf.frame_or_window = tty->top_frame;
buf.arg = Qnil;
@ -7139,7 +7139,7 @@ handle_async_input (void)
pending_signals = pending_atimers;
#endif
/* Tell ns_read_socket() it is being called asynchronously so it can avoid
doing anything dangerous. */
doing anything dangerous. */
#ifdef HAVE_NS
++handling_signal;
#endif
@ -7197,7 +7197,7 @@ input_available_signal (int signo)
This function exists so that the UNBLOCK_INPUT macro in
blockinput.h can have some way to take care of input we put off
dealing with, without assuming that every file which uses
UNBLOCK_INPUT also has #included the files necessary to get SIGIO. */
UNBLOCK_INPUT also has #included the files necessary to get SIGIO. */
void
reinvoke_input_signal (void)
{
@ -7224,7 +7224,7 @@ struct user_signal_info
struct user_signal_info *next;
};
/* List of user signals. */
/* List of user signals. */
static struct user_signal_info *user_signals = NULL;
void
@ -7761,7 +7761,7 @@ parse_menu_item (Lisp_Object item, int inmenubar)
{
tem = XCAR (item);
if (SYMBOLP (tem) || STRINGP (tem) || VECTORP (tem))
/* Be GC protected. Set keyhint to item instead of tem. */
/* Be GC protected. Set keyhint to item instead of tem. */
keyhint = item;
}
else if (EQ (tem, QCkeys))
@ -7844,7 +7844,7 @@ parse_menu_item (Lisp_Object item, int inmenubar)
if (inmenubar > 0)
return 1;
{ /* This is a command. See if there is an equivalent key binding. */
{ /* This is a command. See if there is an equivalent key binding. */
Lisp_Object keyeq = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
/* The previous code preferred :key-sequence to :keys, so we
@ -8400,7 +8400,7 @@ append_tool_bar_item (void)
These are done in different ways, depending on how the input will be read.
Menus using X are done after auto-saving in read-char, getting the input
event from Fx_popup_menu; menus using the minibuf use read_char recursively
and do auto-saving in the inner call of read_char. */
and do auto-saving in the inner call of read_char. */
static Lisp_Object
read_char_x_menu_prompt (ptrdiff_t nmaps, Lisp_Object *maps,
@ -8620,14 +8620,14 @@ read_char_minibuf_menu_prompt (int commandflag,
tem
= XVECTOR (item_properties)->contents[ITEM_PROPERTY_KEYEQ];
if (!NILP (tem))
/* Insert equivalent keybinding. */
/* Insert equivalent keybinding. */
s = concat2 (s, tem);
#endif
tem
= XVECTOR (item_properties)->contents[ITEM_PROPERTY_TYPE];
if (EQ (tem, QCradio) || EQ (tem, QCtoggle))
{
/* Insert button prefix. */
/* Insert button prefix. */
Lisp_Object selected
= XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED];
if (EQ (tem, QCradio))
@ -8861,7 +8861,7 @@ keyremap_step (Lisp_Object *keybuf, int bufsize, volatile keyremap *fkey,
/* If keybuf[fkey->start..fkey->end] is bound in the
map and we're in a position to do the key remapping, replace it with
the binding and restart with fkey->start at the end. */
the binding and restart with fkey->start at the end. */
if ((VECTORP (next) || STRINGP (next)) && doit)
{
int len = XFASTINT (Flength (next));
@ -8902,6 +8902,14 @@ keyremap_step (Lisp_Object *keybuf, int bufsize, volatile keyremap *fkey,
return 0;
}
static int
test_undefined (Lisp_Object binding)
{
return (EQ (binding, Qundefined)
|| (!NILP (binding) && SYMBOLP (binding)
&& EQ (Fcommand_remapping (binding, Qnil, Qnil), Qundefined)));
}
/* Read a sequence of keys that ends with a non prefix character,
storing it in KEYBUF, a buffer of size BUFSIZE.
Prompt with PROMPT.
@ -9017,7 +9025,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
/* Non-zero if we are trying to map a key by changing an upper-case
letter to lower case, or a shifted function key to an unshifted
one. */
one. */
int shift_translated = 0;
/* If we receive a `switch-frame' or `select-window' event in the middle of
@ -9025,7 +9033,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
While we're reading, we keep the event here. */
Lisp_Object delayed_switch_frame;
/* See the comment below... */
/* See the comment below... */
#if defined (GOBBLE_FIRST_EVENT)
Lisp_Object first_event;
#endif
@ -9300,7 +9308,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
if (!found)
{
/* Don't touch interrupted_kboard when it's been
deleted. */
deleted. */
delayed_switch_frame = Qnil;
goto replay_entire_sequence;
}
@ -9408,7 +9416,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
{
/* If we're at the beginning of a key sequence, and the caller
says it's okay, go ahead and return this event. If we're
in the midst of a key sequence, delay it until the end. */
in the midst of a key sequence, delay it until the end. */
if (t > 0 || !can_return_switch_frame)
{
delayed_switch_frame = key;
@ -9705,7 +9713,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
Down-clicks are eliminated.
Double-downs reduce to downs, then are eliminated.
Triple-downs reduce to double-downs, then to downs,
then are eliminated. */
then are eliminated. */
if (modifiers & (down_modifier | drag_modifier
| double_modifier | triple_modifier))
{
@ -9852,7 +9860,9 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
}
}
if (first_binding < nmaps && NILP (submaps[first_binding])
if (first_binding < nmaps
&& NILP (submaps[first_binding])
&& !test_undefined (defs[first_binding])
&& indec.start >= t)
/* There is a binding and it's not a prefix.
(and it doesn't have any input-decode-map translation pending).
@ -9879,7 +9889,9 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
/* If there's a binding (i.e.
first_binding >= nmaps) we don't want
to apply this function-key-mapping. */
fkey.end + 1 == t && first_binding >= nmaps,
fkey.end + 1 == t
&& (first_binding >= nmaps
|| test_undefined (defs[first_binding])),
&diff, prompt);
UNGCPRO;
if (done)
@ -10810,7 +10822,7 @@ set_waiting_for_input (struct timeval *time_to_clear)
waiting_for_input = 1;
/* If handle_interrupt was called before and buffered a C-g,
make it run again now, to avoid timing error. */
make it run again now, to avoid timing error. */
if (!NILP (Vquit_flag))
quit_throw_to_read_char ();
}
@ -10831,7 +10843,7 @@ clear_waiting_for_input (void)
static void
interrupt_signal (int signalnum) /* If we don't have an argument, some */
/* compilers complain in signal calls. */
/* compilers complain in signal calls. */
{
/* Must preserve main program's value of errno. */
int old_errno = errno;
@ -10839,12 +10851,12 @@ interrupt_signal (int signalnum) /* If we don't have an argument, some */
SIGNAL_THREAD_CHECK (signalnum);
/* See if we have an active terminal on our controlling tty. */
/* See if we have an active terminal on our controlling tty. */
terminal = get_named_tty ("/dev/tty");
if (!terminal)
{
/* If there are no frames there, let's pretend that we are a
well-behaving UN*X program and quit. */
well-behaving UN*X program and quit. */
Fkill_emacs (Qnil);
}
else
@ -10872,7 +10884,7 @@ interrupt_signal (int signalnum) /* If we don't have an argument, some */
Otherwise it sets the Lisp variable quit-flag not-nil. This causes
eval to throw, when it gets a chance. If quit-flag is already
non-nil, it stops the job right away. */
non-nil, it stops the job right away. */
static void
handle_interrupt (void)
@ -10881,7 +10893,7 @@ handle_interrupt (void)
cancel_echoing ();
/* XXX This code needs to be revised for multi-tty support. */
/* XXX This code needs to be revised for multi-tty support. */
if (!NILP (Vquit_flag) && get_named_tty ("/dev/tty"))
{
/* If SIGINT isn't blocked, don't let us be interrupted by
@ -10991,7 +11003,7 @@ handle_interrupt (void)
wait_reading_process_output() under HAVE_NS because of the call
to ns_select there (needed because otherwise events aren't picked up
outside of polling since we don't get SIGIO like X and we don't have a
separate event loop thread like W32. */
separate event loop thread like W32. */
#ifndef HAVE_NS
if (waiting_for_input && !echoing)
quit_throw_to_read_char ();
@ -11440,7 +11452,7 @@ init_keyboard (void)
session may have multiple display types, so we always handle
SIGINT. There is special code in interrupt_signal to exit
Emacs on SIGINT when there are no termcap frames on the
controlling terminal. */
controlling terminal. */
signal (SIGINT, interrupt_signal);
#ifndef DOS_NT
/* For systems with SysV TERMIO, C-g is set up for both SIGINT and
@ -12237,7 +12249,7 @@ Currently, the only supported values for this
variable are `sigusr1' and `sigusr2'. */);
Vdebug_on_event = intern_c_string ("sigusr2");
/* Create the initial keyboard. */
/* Create the initial keyboard. */
initial_kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
init_kboard (initial_kboard);
/* Vwindow_system is left at t for now. */

View file

@ -162,7 +162,7 @@ extern int suppress_checking EXTERNALLY_VISIBLE;
/* First, try and define DECL_ALIGN(type,var) which declares a static
variable VAR of type TYPE with the added requirement that it be
TYPEBITS-aligned. */
TYPEBITS-aligned. */
#ifndef NO_DECL_ALIGN
# ifndef DECL_ALIGN
# if HAVE_ATTRIBUTE_ALIGNED
@ -1084,11 +1084,9 @@ enum symbol_redirect
SYMBOL_PLAINVAL = 4,
SYMBOL_VARALIAS = 1,
SYMBOL_LOCALIZED = 2,
SYMBOL_FORWARDED = 3
SYMBOL_FORWARDED = 3
};
/* In a symbol, the markbit of the plist is used as the gc mark bit */
struct Lisp_Symbol
{
unsigned gcmarkbit : 1;
@ -1097,8 +1095,7 @@ struct Lisp_Symbol
0 : it's a plain var, the value is in the `value' field.
1 : it's a varalias, the value is really in the `alias' symbol.
2 : it's a localized var, the value is in the `blv' object.
3 : it's a forwarding variable, the value is in `forward'.
*/
3 : it's a forwarding variable, the value is in `forward'. */
enum symbol_redirect redirect : 3;
/* Non-zero means symbol is constant, i.e. changing its value
@ -1115,15 +1112,12 @@ struct Lisp_Symbol
unsigned declared_special : 1;
/* The symbol's name, as a Lisp string.
The name "xname" is used to intentionally break code referring to
the old field "name" of type pointer to struct Lisp_String. */
Lisp_Object xname;
/* Value of the symbol or Qunbound if unbound. If this symbol is a
defvaralias, `alias' contains the symbol for which it is an
alias. Use the SYMBOL_VALUE and SET_SYMBOL_VALUE macros to get
and set a symbol's value, to take defvaralias into account. */
/* Value of the symbol or Qunbound if unbound. Which alternative of the
union is used depends on the `redirect' field above. */
union {
Lisp_Object value;
struct Lisp_Symbol *alias;
@ -1318,7 +1312,7 @@ struct Lisp_Misc_Any /* Supertype of all Misc types. */
enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_??? */
unsigned gcmarkbit : 1;
int spacer : 15;
/* Make it as long as "Lisp_Free without padding". */
/* Make it as long as "Lisp_Free without padding". */
void *fill;
};
@ -3603,7 +3597,7 @@ extern void init_system_name (void);
#define SWITCH_ENUM_CAST(x) (x)
/* Use this to suppress gcc's warnings. */
/* Use this to suppress gcc's warnings. */
#ifdef lint
/* Use CODE only if lint checking is in effect. */

View file

@ -642,6 +642,9 @@ make_process (Lisp_Object name)
p->gnutls_initstage = GNUTLS_STAGE_EMPTY;
p->gnutls_log_level = 0;
p->gnutls_p = 0;
p->gnutls_state = NULL;
p->gnutls_x509_cred = NULL;
p->gnutls_anon_cred = NULL;
#endif
/* If name is already in use, modify it until it is unused. */
@ -3867,6 +3870,11 @@ deactivate_process (Lisp_Object proc)
register int inchannel, outchannel;
register struct Lisp_Process *p = XPROCESS (proc);
#ifdef HAVE_GNUTLS
/* Delete GnuTLS structures in PROC, if any. */
emacs_gnutls_deinit (proc);
#endif /* HAVE_GNUTLS */
inchannel = p->infd;
outchannel = p->outfd;

View file

@ -854,6 +854,7 @@ void
init_sys_modes (struct tty_display_info *tty_out)
{
struct emacs_tty tty;
Lisp_Object terminal;
Vtty_erase_char = Qnil;
@ -907,7 +908,9 @@ init_sys_modes (struct tty_display_info *tty_out)
tty.main.c_cflag &= ~PARENB;/* Don't check parity */
}
#endif
if (tty_out->input == stdin)
XSETTERMINAL(terminal, tty_out->terminal);
if (!NILP (Fcontrolling_tty_p (terminal)))
{
tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */
/* Set up C-g for both SIGQUIT and SIGINT.

View file

@ -2892,12 +2892,12 @@ sys_rename (const char * oldname, const char * newname)
int i = 0;
oldname = map_w32_filename (oldname, NULL);
if (o = strrchr (oldname, '\\'))
if ((o = strrchr (oldname, '\\')))
o++;
else
o = (char *) oldname;
if (p = strrchr (temp, '\\'))
if ((p = strrchr (temp, '\\')))
p++;
else
p = temp;
@ -5756,7 +5756,7 @@ w32_delayed_load (Lisp_Object libraries, Lisp_Object library_id)
for (dlls = XCDR (dlls); CONSP (dlls); dlls = XCDR (dlls))
{
CHECK_STRING_CAR (dlls);
if (library_dll = LoadLibrary (SDATA (XCAR (dlls))))
if ((library_dll = LoadLibrary (SDATA (XCAR (dlls)))))
{
found = XCAR (dlls);
break;

View file

@ -139,6 +139,7 @@ extern void term_w32select (void);
extern void syms_of_w32menu (void);
extern void globals_of_w32menu (void);
extern void syms_of_fontset (void);
extern void syms_of_w32font (void);
extern int _sys_read_ahead (int fd);
extern int _sys_wait_accept (int fd);

View file

@ -635,9 +635,8 @@ colormap_t w32_color_map[] =
{"LightGreen" , PALETTERGB (144,238,144)},
};
DEFUN ("w32-default-color-map", Fw32_default_color_map, Sw32_default_color_map,
0, 0, 0, doc: /* Return the default color map. */)
(void)
static Lisp_Object
w32_default_color_map (void)
{
int i;
colormap_t *pc = w32_color_map;
@ -658,6 +657,13 @@ DEFUN ("w32-default-color-map", Fw32_default_color_map, Sw32_default_color_map,
return (cmap);
}
DEFUN ("w32-default-color-map", Fw32_default_color_map, Sw32_default_color_map,
0, 0, 0, doc: /* Return the default color map. */)
(void)
{
return w32_default_color_map ();
}
static Lisp_Object
w32_color_map_lookup (char *colorname)
{
@ -683,7 +689,6 @@ w32_color_map_lookup (char *colorname)
QUIT;
}
UNBLOCK_INPUT;
return ret;
@ -4768,7 +4773,7 @@ terminate Emacs if we can't open the connection.
UNGCPRO;
}
if (NILP (Vw32_color_map))
Vw32_color_map = Fw32_default_color_map ();
Vw32_color_map = w32_default_color_map ();
/* Merge in system logical colors. */
add_system_logical_colors_to_map (&Vw32_color_map);

View file

@ -145,6 +145,138 @@ struct font_callback_data
style variations if the font name is not specified. */
static void list_all_matching_fonts (struct font_callback_data *);
static BOOL g_b_init_is_w9x;
static BOOL g_b_init_get_outline_metrics_w;
static BOOL g_b_init_get_text_metrics_w;
static BOOL g_b_init_get_glyph_outline_w;
static BOOL g_b_init_get_glyph_outline_w;
typedef UINT (WINAPI * GetOutlineTextMetricsW_Proc) (
HDC hdc,
UINT cbData,
LPOUTLINETEXTMETRICW lpotmw);
typedef BOOL (WINAPI * GetTextMetricsW_Proc) (
HDC hdc,
LPTEXTMETRICW lptmw);
typedef DWORD (WINAPI * GetGlyphOutlineW_Proc) (
HDC hdc,
UINT uChar,
UINT uFormat,
LPGLYPHMETRICS lpgm,
DWORD cbBuffer,
LPVOID lpvBuffer,
const MAT2 *lpmat2);
/* Several "wide" functions we use to support the font backends are
unavailable on Windows 9X, unless UNICOWS.DLL is installed (their
versions in the default libraries are non-functional stubs). On NT
and later systems, these functions are in GDI32.DLL. The following
helper function attempts to load UNICOWS.DLL on Windows 9X, and
refuses to let Emacs start up if that library is not found. On NT
and later versions, it simply loads GDI32.DLL, which should always
be available. */
static HMODULE
w32_load_unicows_or_gdi32 (void)
{
static BOOL is_9x = 0;
OSVERSIONINFO os_ver;
HMODULE ret;
if (g_b_init_is_w9x == 0)
{
g_b_init_is_w9x = 1;
ZeroMemory (&os_ver, sizeof (OSVERSIONINFO));
os_ver.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (GetVersionEx (&os_ver))
is_9x = (os_ver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
}
if (is_9x)
{
ret = LoadLibrary ("Unicows.dll");
if (!ret)
{
int button;
button = MessageBox (NULL,
"Emacs cannot load the UNICOWS.DLL library.\n"
"This library is essential for using Emacs\n"
"on this system. You need to install it.\n\n"
"However, you can still use Emacs by invoking\n"
"it with the '-nw' command-line option.\n\n"
"Emacs will exit when you click OK.",
"Emacs cannot load UNICOWS.DLL",
MB_ICONERROR | MB_TASKMODAL
| MB_SETFOREGROUND | MB_OK);
switch (button)
{
case IDOK:
default:
exit (1);
}
}
}
else
ret = LoadLibrary ("Gdi32.dll");
return ret;
}
/* The following 3 functions call the problematic "wide" APIs via
function pointers, to avoid linking against the non-standard
libunicows on W9X. */
static UINT WINAPI
get_outline_metrics_w(HDC hdc, UINT cbData, LPOUTLINETEXTMETRICW lpotmw)
{
static GetOutlineTextMetricsW_Proc s_pfn_Get_Outline_Text_MetricsW = NULL;
HMODULE hm_unicows = NULL;
if (g_b_init_get_outline_metrics_w == 0)
{
g_b_init_get_outline_metrics_w = 1;
hm_unicows = w32_load_unicows_or_gdi32 ();
if (hm_unicows)
s_pfn_Get_Outline_Text_MetricsW = (GetOutlineTextMetricsW_Proc)
GetProcAddress (hm_unicows, "GetOutlineTextMetricsW");
}
if (s_pfn_Get_Outline_Text_MetricsW == NULL)
abort (); /* cannot happen */
return s_pfn_Get_Outline_Text_MetricsW (hdc, cbData, lpotmw);
}
static BOOL WINAPI
get_text_metrics_w(HDC hdc, LPTEXTMETRICW lptmw)
{
static GetTextMetricsW_Proc s_pfn_Get_Text_MetricsW = NULL;
HMODULE hm_unicows = NULL;
if (g_b_init_get_text_metrics_w == 0)
{
g_b_init_get_text_metrics_w = 1;
hm_unicows = w32_load_unicows_or_gdi32 ();
if (hm_unicows)
s_pfn_Get_Text_MetricsW = (GetTextMetricsW_Proc)
GetProcAddress (hm_unicows, "GetTextMetricsW");
}
if (s_pfn_Get_Text_MetricsW == NULL)
abort (); /* cannot happen */
return s_pfn_Get_Text_MetricsW (hdc, lptmw);
}
static DWORD WINAPI
get_glyph_outline_w (HDC hdc, UINT uChar, UINT uFormat, LPGLYPHMETRICS lpgm,
DWORD cbBuffer, LPVOID lpvBuffer, const MAT2 *lpmat2)
{
static GetGlyphOutlineW_Proc s_pfn_Get_Glyph_OutlineW = NULL;
HMODULE hm_unicows = NULL;
if (g_b_init_get_glyph_outline_w == 0)
{
g_b_init_get_glyph_outline_w = 1;
hm_unicows = w32_load_unicows_or_gdi32 ();
if (hm_unicows)
s_pfn_Get_Glyph_OutlineW = (GetGlyphOutlineW_Proc)
GetProcAddress (hm_unicows, "GetGlyphOutlineW");
}
if (s_pfn_Get_Glyph_OutlineW == NULL)
abort (); /* cannot happen */
return s_pfn_Get_Glyph_OutlineW (hdc, uChar, uFormat, lpgm, cbBuffer,
lpvBuffer, lpmat2);
}
static int
memq_no_quit (Lisp_Object elt, Lisp_Object list)
@ -816,11 +948,11 @@ w32font_open_internal (FRAME_PTR f, Lisp_Object font_entity,
old_font = SelectObject (dc, hfont);
/* Try getting the outline metrics (only works for truetype fonts). */
len = GetOutlineTextMetricsW (dc, 0, NULL);
len = get_outline_metrics_w (dc, 0, NULL);
if (len)
{
metrics = (OUTLINETEXTMETRICW *) alloca (len);
if (GetOutlineTextMetricsW (dc, len, metrics))
if (get_outline_metrics_w (dc, len, metrics))
memcpy (&w32_font->metrics, &metrics->otmTextMetrics,
sizeof (TEXTMETRICW));
else
@ -828,7 +960,7 @@ w32font_open_internal (FRAME_PTR f, Lisp_Object font_entity,
}
if (!metrics)
GetTextMetricsW (dc, &w32_font->metrics);
get_text_metrics_w (dc, &w32_font->metrics);
w32_font->cached_metrics = NULL;
w32_font->n_cache_blocks = 0;
@ -1916,10 +2048,10 @@ fill_in_logfont (FRAME_PTR f, LOGFONT *logfont, Lisp_Object font_spec)
int spacing = XINT (tmp);
if (spacing < FONT_SPACING_MONO)
logfont->lfPitchAndFamily
= logfont->lfPitchAndFamily & 0xF0 | VARIABLE_PITCH;
= (logfont->lfPitchAndFamily & 0xF0) | VARIABLE_PITCH;
else
logfont->lfPitchAndFamily
= logfont->lfPitchAndFamily & 0xF0 | FIXED_PITCH;
= (logfont->lfPitchAndFamily & 0xF0) | FIXED_PITCH;
}
/* Process EXTRA info. */
@ -2306,7 +2438,7 @@ compute_metrics (HDC dc, struct w32font_info *w32_font, unsigned int code,
transform.eM11.value = 1;
transform.eM22.value = 1;
if (GetGlyphOutlineW (dc, code, options, &gm, 0, NULL, &transform)
if (get_glyph_outline_w (dc, code, options, &gm, 0, NULL, &transform)
!= GDI_ERROR)
{
metrics->lbearing = gm.gmptGlyphOrigin.x;
@ -2581,3 +2713,12 @@ versions of Windows) characters. */);
w32font_driver.type = Qgdi;
register_font_driver (&w32font_driver, NULL);
}
void
globals_of_w32font (void)
{
g_b_init_is_w9x = 0;
g_b_init_get_outline_metrics_w = 0;
g_b_init_get_text_metrics_w = 0;
g_b_init_get_glyph_outline_w = 0;
}

View file

@ -147,9 +147,9 @@ x_get_string_resource (XrmDatabase rdb, char *name, char *class)
{
char *resource;
if (resource = w32_get_rdb_resource (rdb, name))
if ((resource = w32_get_rdb_resource (rdb, name)))
return resource;
if (resource = w32_get_rdb_resource (rdb, class))
if ((resource = w32_get_rdb_resource (rdb, class)))
return resource;
}
@ -157,6 +157,5 @@ x_get_string_resource (XrmDatabase rdb, char *name, char *class)
/* --quick was passed, so this is a no-op. */
return NULL;
return (w32_get_string_resource (name, class, REG_SZ));
return w32_get_string_resource (name, class, REG_SZ);
}

View file

@ -175,10 +175,10 @@ WINDOW can be any window and defaults to the selected one. */)
}
DEFUN ("frame-root-window", Fframe_root_window, Sframe_root_window, 0, 1, 0,
doc: /* Return the root window of FRAME_OR_WINDOW.
If omitted, FRAME_OR_WINDOW defaults to the currently selected frame.
Else if FRAME_OR_WINDOW denotes any window, return the root window of
that window's frame. If FRAME_OR_WINDOW denotes a live frame, return
doc: /* Return the root window of FRAME-OR-WINDOW.
If omitted, FRAME-OR-WINDOW defaults to the currently selected frame.
Else if FRAME-OR-WINDOW denotes any window, return the root window of
that window's frame. If FRAME-OR-WINDOW denotes a live frame, return
the root window of that frame. */)
(Lisp_Object frame_or_window)
{
@ -220,10 +220,10 @@ WINDOW can be any window and defaults to the selected one. */)
/* Don't move this to window.el - this must be a safe routine. */
DEFUN ("frame-first-window", Fframe_first_window, Sframe_first_window, 0, 1, 0,
doc: /* Return the topmost, leftmost live window on FRAME_OR_WINDOW.
If omitted, FRAME_OR_WINDOW defaults to the currently selected frame.
Else if FRAME_OR_WINDOW denotes any window, return the first window of
that window's frame. If FRAME_OR_WINDOW denotes a live frame, return
doc: /* Return the topmost, leftmost live window on FRAME-OR-WINDOW.
If omitted, FRAME-OR-WINDOW defaults to the currently selected frame.
Else if FRAME-OR-WINDOW denotes any window, return the first window of
that window's frame. If FRAME-OR-WINDOW denotes a live frame, return
the first window of that frame. */)
(Lisp_Object frame_or_window)
{
@ -254,10 +254,10 @@ the first window of that frame. */)
DEFUN ("frame-selected-window", Fframe_selected_window,
Sframe_selected_window, 0, 1, 0,
doc: /* Return the selected window of FRAME_OR_WINDOW.
If omitted, FRAME_OR_WINDOW defaults to the currently selected frame.
Else if FRAME_OR_WINDOW denotes any window, return the selected window
of that window's frame. If FRAME_OR_WINDOW denotes a live frame, return
doc: /* Return the selected window of FRAME-OR-WINDOW.
If omitted, FRAME-OR-WINDOW defaults to the currently selected frame.
Else if FRAME-OR-WINDOW denotes any window, return the selected window
of that window's frame. If FRAME-OR-WINDOW denotes a live frame, return
the selected window of that frame. */)
(Lisp_Object frame_or_window)
{
@ -1297,7 +1297,7 @@ WINDOW must be a live window and defaults to the selected one.
This is updated by redisplay, when it runs to completion.
Simply changing the buffer text or setting `window-start'
does not update this value.
Return nil if there is no recorded value. \(This can happen if the
Return nil if there is no recorded value. (This can happen if the
last redisplay of WINDOW was preempted, and did not finish.)
If UPDATE is non-nil, compute the up-to-date position
if it isn't already recorded. */)
@ -1688,7 +1688,7 @@ DEFUN ("window-parameters", Fwindow_parameters, Swindow_parameters,
0, 1, 0,
doc: /* Return the parameters of WINDOW and their values.
WINDOW defaults to the selected window. The return value is a list of
elements of the form (PARAMETER . VALUE). */)
elements of the form (PARAMETER . VALUE). */)
(Lisp_Object window)
{
return Fcopy_alist (decode_any_window (window)->window_parameters);
@ -2193,7 +2193,7 @@ next_window (Lisp_Object window, Lisp_Object minibuf, Lisp_Object all_frames, in
DEFUN ("next-window", Fnext_window, Snext_window, 0, 3, 0,
doc: /* Return window following WINDOW in cyclic ordering of windows.
WINDOW must be a live window and defaults to the selected one. The
WINDOW must be a live window and defaults to the selected one. The
optional arguments MINIBUF and ALL-FRAMES specify the set of windows to
consider.
@ -3224,7 +3224,7 @@ temp_output_buffer_show (register Lisp_Object buf)
DEFUN ("internal-temp-output-buffer-show",
Ftemp_output_buffer_show, Stemp_output_buffer_show,
1, 1, 0,
doc: /* Internal function for `with-output-to-temp-buffer''. */)
doc: /* Internal function for `with-output-to-temp-buffer'. */)
(Lisp_Object buf)
{
temp_output_buffer_show (buf);
@ -3845,8 +3845,8 @@ set correctly. See the code of `split-window' for how this is done. */)
DEFUN ("delete-window-internal", Fdelete_window_internal, Sdelete_window_internal, 1, 1, 0,
doc: /* Remove WINDOW from its frame.
WINDOW defaults to the selected window. Return nil. Signal an error
when WINDOW is the only window on its frame. */)
WINDOW defaults to the selected window. Return nil.
Signal an error when WINDOW is the only window on its frame. */)
(register Lisp_Object window)
{
register Lisp_Object parent, sibling, frame, root;
@ -5225,8 +5225,8 @@ any partial-height lines in the text display area. */)
DEFUN ("move-to-window-line", Fmove_to_window_line, Smove_to_window_line,
1, 1, "P",
doc: /* Position point relative to window.
With no argument, position point at center of window.
An argument specifies vertical position within the window;
ARG nil means position point at center of window.
Else, ARG specifies vertical position within the window;
zero means top of window, negative means relative to bottom of window. */)
(Lisp_Object arg)
{