This commit is contained in:
Paul Eggert 2016-01-30 13:56:23 -08:00
commit 99fa8c3dbf
54 changed files with 14508 additions and 8853 deletions

File diff suppressed because it is too large Load diff

View file

@ -1092,7 +1092,7 @@ bootstrap: bootstrap-clean
$(MAKE) all
.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
.PHONY: master-branch-is-current unchanged-history-files
.PHONY: emacs-25-branch-is-current unchanged-history-files
CHANGELOG = ChangeLog
emacslog = build-aux/gitlog-to-emacslog
@ -1109,8 +1109,8 @@ ChangeLog:
./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
# Check that we are in a good state for changing history.
master-branch-is-current:
git branch | grep -q '^\* master$$'
emacs-25-branch-is-current:
git branch | grep -q '^\* emacs-25$$'
unchanged-history-files:
x=$$(git diff-files --name-only $(CHANGELOG_N) $(emacslog)) && \
test -z "$$x"
@ -1120,7 +1120,7 @@ new_commit_regexp = ^commit [0123456789abcdef]* (inclusive)
# Copy newer commit messages to the start of the ChangeLog history file,
# and consider them to be older.
change-history-nocommit: master-branch-is-current unchanged-history-files
change-history-nocommit: emacs-25-branch-is-current unchanged-history-files
-rm -f ChangeLog.tmp
$(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
sed '/^This file records repository revisions/,$$d' \

View file

@ -919,6 +919,9 @@ in the repository.")
("notes/bzr" . "notes/repo")
;; moved from lisp/ to lisp/net/
("lisp/pinentry.el" . "lisp/net/pinentry.el")
;; module.* moved to emacs-module.*
("src/module.h" . "src/emacs-module.h")
("src/module.c" . "src/emacs-module.c")
)
"Alist of files which have been renamed during their lifetime.
Elements are (OLDNAME . NEWNAME).")

View file

@ -20,7 +20,7 @@ No need to procrastinate on the dilemma whether you do or don't want
the new shiny Cairo thing. Hail, simplicity!
@item
Emacs still works on SGI IRIX systems. if you live backwards in time,
Emacs still works on SGI IRIX systems. If you live backwards in time,
this is actually a bonus, as IRIX systems will become more and more
popular as you move farther back in time.

View file

@ -192,6 +192,7 @@ Advanced Features
* Network Security:: Managing the network security.
* Document View:: Viewing PDF, PS and DVI files.
* EWW:: A web browser in Emacs.
* Embedded WebKit Widgets:: Embedding browser widgets in Emacs buffers.
* Shell:: Executing shell commands from Emacs.
* Emacs Server:: Using Emacs as an editing server.
* Printing:: Printing hardcopies of buffers or regions.

View file

@ -2217,6 +2217,9 @@ in the file.
@item
In Fortran code, functions, subroutines and block data are tags.
@item
In Go code, packages, functions, and types are tags.
@item
In HTML input files, the tags are the @code{title} and the @code{h1},
@code{h2}, @code{h3} headers. Also, tags are @code{name=} in anchors
@ -2264,7 +2267,7 @@ generate a tag.
@item
In Ruby code, @code{def} or @code{class} or @code{module} at the
beginning of a line generate a tag.
beginning of a line generate a tag. Constants also generate tags.
@end itemize
You can also generate tags based on regexp matching (@pxref{Etags

View file

@ -286,12 +286,13 @@ instead signal an error if the mark is inactive.
@findex delete-selection-mode
By default, text insertion occurs normally even if the mark is
active---for example, typing @kbd{a} inserts the character @samp{a},
then deactivates the mark. If you enable Delete Selection mode, a
minor mode, then inserting text while the mark is active causes the
text in the region to be deleted first. Also, commands that normally
delete just one character, such as @kbd{C-d} or @kbd{@key{DEL}}, will
delete the entire region instead. To toggle Delete Selection
mode on or off, type @kbd{M-x delete-selection-mode}.
then deactivates the mark. Delete Selection mode, a minor mode,
modifies this behavior: if you enable that mode, then inserting text
while the mark is active causes the text in the region to be deleted
first. Also, commands that normally delete just one character, such
as @kbd{C-d} or @kbd{@key{DEL}}, will delete the entire region
instead. To toggle Delete Selection mode on or off, type @kbd{M-x
delete-selection-mode}.
@node Mark Ring
@section The Mark Ring

View file

@ -604,6 +604,28 @@ using the command @kbd{M-x eww-open-file}. You can use EWW as the
web browser for @code{browse-url}, @pxref{Browse-URL}. For full
details, @pxref{Top, EWW,, eww, The Emacs Web Wowser Manual}.
@node Embedded WebKit Widgets
@section Embedded WebKit Widgets
@cindex xwidget
@cindex webkit widgets
@cindex embedded widgets
@findex xwidget-webkit-browse-url
@findex xwidget-webkit-mode
@cindex Xwidget-WebKit mode
If Emacs was compiled with the appropriate support packages, it is
able to show browser widgets in its buffers. The command @kbd{M-x
xwidget-webkit-browse-url} asks for a URL to display in the browser
widget. The URL normally defaults to the URL at or before point, but
if there is an active region (@pxref{Mark}), the default URL comes
from the region instead, after removing any whitespace from it. The
command then creates a new buffer with the embedded browser showing
the specified URL. The buffer is put in the Xwidget-WebKit mode
(similar to Image mode, @pxref{File Conveniences}), which provides
one-key commands for scrolling the widget, changing its size, and
reloading it. Type @w{@kbd{C-h b}} in that buffer to see the key
bindings.
@node Shell
@section Running Shell Commands from Emacs
@cindex subshell

View file

@ -225,11 +225,12 @@ code point in charset: 0xEA
syntax: w which means: word
category: .:Base, L:Left-to-right (strong), c:Chinese,
j:Japanese, l:Latin, v:Viet
to input: type "C-x 8 RET HEX-CODEPOINT" or "C-x 8 RET NAME"
to input: type "C-x 8 RET ea" or
"C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX"
buffer code: #xC3 #xAA
file code: #xC3 #xAA (encoded by coding system utf-8-unix)
display: by this font (glyph code)
xft:-unknown-DejaVu Sans Mono-normal-normal-
xft:-PfEd-DejaVu Sans Mono-normal-normal-
normal-*-15-*-*-*-m-0-iso10646-1 (#xAC)
Character code properties: customize what to show

View file

@ -304,15 +304,15 @@ is useful to select alternatives based on more general conditions that
distinguish between broad classes of values. The @code{pcase} macro
allows you to choose between alternatives based on matching the value
of an expression against a series of patterns. A pattern can be a
literal value (comparison to literal values is what @code{cond} does),
or it can be a more general description of the expected structure of
the expression's value.
literal value (for comparisons to literal values you'd use
@code{cond}), or it can be a more general description of the expected
structure of the expression's value.
@defmac pcase expression &rest clauses
Evaluate @var{expression} and choose among an arbitrary number of
alternatives based on the value of @var{expression}. The possible
alternatives are specified by @var{clauses}, each of which must be a
list of the form @code{(@var{pattern} @var{body-forms})}.
list of the form @code{(@var{pattern} @var{body-forms}@dots{})}.
@code{pcase} tries to match the value of @var{expression} to the
@var{pattern} of each clause, in textual order. If the value matches,
the clause succeeds; @code{pcase} then evaluates its @var{body-forms},
@ -328,7 +328,7 @@ Note: In the description of the patterns below, we use ``the value
being matched'' to refer to the value of the @var{expression} that is
the first argument of @code{pcase}.
A UPattern can have one of the following forms:
A UPattern can have the following forms:
@table @code
@ -337,7 +337,8 @@ Matches if the value being matched is @code{equal} to @var{val}.
@item @var{atom}
Matches any @var{atom}, which can be a keyword, a number, or a string.
(These are self-quoting, so this kind of UPattern is actually a
shorthand for @code{'@var{atom}}.)
shorthand for @code{'@var{atom}}.) Note that a string or a float
matches any string or float with the same contents/value.
@item _
Matches any value. This is known as @dfn{don't care} or @dfn{wildcard}.
@item @var{symbol}
@ -362,7 +363,8 @@ Matches if the specified @var{expression} matches the specified
an @emph{arbitrary} expression, not just the expression that is the
first argument to @code{pcase}. (It is called @code{let} because
@var{upattern} can bind symbols to values using the @var{symbol}
UPattern.)
UPattern. For example:
@w{@code{((or `(key . ,val) (let val 5)) val)}}.)
@item (app @var{function} @var{upattern})
Matches if @var{function} applied to the value being matched returns a
value that matches @var{upattern}. This is like the @code{pred}
@ -407,24 +409,27 @@ Here's an illustrative example of using UPatterns:
(code (message "Unknown return code %S" code)))
@end example
The QPatterns are more powerful. They allow matching the value of the
@var{expression} that is the first argument of @code{pcase} against
specifications of its @emph{structure}. For example, you can specify
that the value must be a list of 2 elements whose first element is a
string and the second element is a number. QPatterns can have one of
the following forms:
In addition, you can use backquoted patterns that are more powerful.
They allow matching the value of the @var{expression} that is the
first argument of @code{pcase} against specifications of its
@emph{structure}. For example, you can specify that the value must be
a list of 2 elements whose first element is a specific string and the
second element is any value with a backquoted pattern like
@code{`("first" ,second-elem)}.
Backquoted patterns have the form @code{`@var{qpattern}} where
@var{qpattern} can have the following forms:
@table @code
@item `(@var{qpattern1} . @var{qpattern2})
@item (@var{qpattern1} . @var{qpattern2})
Matches if the value being matched is a cons cell whose @code{car}
matches @var{qpattern1} and whose @code{cdr} matches @var{qpattern2}.
@item `[@var{qpattern1} @var{qpattern2} @dots{} @var{qpatternm}]
This readily generalizes to backquoted lists as in
@w{@code{(@var{qpattern1} @var{qpattern2} @dots{})}}.
@item [@var{qpattern1} @var{qpattern2} @dots{} @var{qpatternm}]
Matches if the value being matched is a vector of length @var{m} whose
@code{0}..@code{(@var{m}-1)}th elements match @var{qpattern1},
@var{qpattern2} @dots{} @var{qpatternm}, respectively.
@item `(,@var{upattern1} ,@var{upattern2} @dots{})
Matches if the value being matched is a list whose elements match the
corresponding @var{upattern1}, @var{upattern2}, etc.
@item @var{atom}
Matches if corresponding element of the value being matched is
@code{equal} to the specified @var{atom}.
@ -433,6 +438,13 @@ Matches if the corresponding element of the value being matched
matches the specified @var{upattern}.
@end table
Note that uses of QPatterns can be expressed using only UPatterns, as
QPatterns are implemented on top of UPatterns using
@code{pcase-defmacro}, described below. However, using QPatterns will
in many cases lead to a more readable code.
@c FIXME: There should be an example here showing how a 'pcase' that
@c uses QPatterns can be rewritten using UPatterns.
@end defmac
Here is an example of using @code{pcase} to implement a simple
@ -476,8 +488,11 @@ Additional UPatterns can be defined using the @code{pcase-defmacro}
macro.
@defmac pcase-defmacro name args &rest body
Define a new UPattern for @code{pcase}. The UPattern will have the
form @code{(@var{name} @var{args})}.
Define a new kind of UPattern for @code{pcase}. The new UPattern will
be invoked as @code{(@var{name} @var{actual-args})}. The @var{body}
should describe how to rewrite the UPattern @var{name} into some other
UPattern. The rewriting will be the result of evaluating @var{body}
in an environment where @var{args} are bound to @var{actual-args}.
@end defmac
@node Combining Conditions

View file

@ -334,7 +334,8 @@ macro accepts the following keywords:
@item :type @var{type}
Use @var{type} as the data type for this option. It specifies which
values are legitimate, and how to display the value
(@pxref{Customization Types}).
(@pxref{Customization Types}). Every @code{defcustom} should specify
a value for this keyword.
@item :options @var{value-list}
@kindex options@r{, @code{defcustom} keyword}

View file

@ -27,6 +27,7 @@ that Emacs presents to the user.
* Window Dividers:: Separating windows visually.
* Display Property:: Enabling special display features.
* Images:: Displaying images in Emacs buffers.
* Xwidgets:: Displaying native widgets in Emacs buffers.
* Buttons:: Adding clickable buttons to Emacs buffers.
* Abstract Display:: Emacs's Widget for Object Collections.
* Blinking:: How Emacs shows the matching open parenthesis.
@ -5612,6 +5613,118 @@ except when you explicitly clear it. This mode can be useful for
debugging.
@end defvar
@node Xwidgets
@section Embedded Native Widgets
@cindex xwidget
@cindex embedded widgets
@cindex webkit browser widget
Emacs is able to display native widgets, such as GTK WebKit widgets,
in Emacs buffers when it was built with the necessary support
libraries and is running on a graphical terminal. To test whether
Emacs supports display of embedded widgets, check that the
@code{xwidget-internal} feature is available (@pxref{Named Features}).
To display an embedded widget in a buffer, you must first create an
xwidget object, and then use that object as the display specifier
in a @code{display} text or overlay property (@pxref{Display
Property}).
@defun make-xwidget beg end type title width height arguments &optional buffer
This creates an xwidget object between @var{beg} and @var{end}, buffer
positions in @var{buffer}, and returns the new object. If
@var{buffer} is omitted or @code{nil}, it defaults to the current
buffer. If @var{buffer} names a buffer that doesn't exist, it will be
created. The @var{type} identifies the type of the xwidget component,
it can be one of the following:
@table @code
@item webkit-osr
The WebKit OSR (@dfn{on-stack replacement}) component.
@end table
The @var{width} and @var{height} arguments specify the widget size in
pixels, and @var{title}, a string, specifies its title.
@end defun
@defun xwidgetp object
This function returns @code{t} if @var{object} is an xwidget,
@code{nil} otherwise.
@end defun
@defun xwidget-plist xwidget
This function returns the property list of @var{xwidget}.
@end defun
@defun set-xwidget-plist xwidget plist
This function replaces the property list of @var{xwidget} with a new
property list given by @var{plist}.
@end defun
@defun xwidget-buffer xwidget
This function returns the buffer of @var{xwidget}.
@end defun
@defun get-buffer-xwidgets buffer
This function returns a list of xwidget objects associated with the
@var{buffer}, which can be specified as a buffer object or a name of
an existing buffer, a string. The value is @code{nil} if @var{buffer}
contains no xwidgets.
@end defun
@defun xwidget-webkit-goto-uri xwidget uri
This function browses the specified @var{uri} in the given
@var{xwidget}. The @var{uri} is a string that specifies the name of a
file or a URL. @c FIXME: What else can a URI specify in this context?
@end defun
@defun xwidget-webkit-execute-script xwidget script
This function causes the browser widget specified by @var{xwidget} to
execute the specified JavaScript @code{script}.
@end defun
@defun xwidget-webkit-execute-script-rv xwidget script &optional default
This function executes the specified @var{script} like
@code{xwidget-webkit-execute-script} does, but it also returns the
script's return value as a string. If @var{script} doesn't return a
value, this function returns @var{default}, or @code{nil} if
@var{default} was omitted.
@end defun
@defun xwidget-webkit-get-title xwidget
This function returns the title of @var{xwidget} as a string.
@end defun
@defun xwidget-resize xwidget width height
This function resizes the specified @var{xwidget} to the size
@var{width}x@var{height} pixels.
@end defun
@defun xwidget-size-request xwidget
This function returns the desired size of @var{xwidget} as a list of
the form @code{(@var{width} @var{height})}. The dimensions are in
pixels.
@end defun
@defun xwidget-info xwidget
This function returns the attributes of @var{xwidget} as a vector of
the form @code{[@var{type} @var{title} @var{width} @var{height}]}.
The attributes are usually determined by @code{make-xwidget} when the
xwidget is created.
@end defun
@defun set-xwidget-query-on-exit-flag xwidget flag
This function allows you to arrange that Emacs will ask the user for
confirmation before exiting or before killing a buffer that has
@var{xwidget} associated with it. If @var{flag} is non-@code{nil},
Emacs will query the user, otherwise it will not.
@end defun
@defun xwidget-query-on-exit-flag xwidget
This function returns the current setting of @var{xwidget}s
query-on-exit flag, either @code{t} or @code{nil}.
@end defun
@node Buttons
@section Buttons
@cindex buttons in buffers

View file

@ -714,9 +714,12 @@ Sizes}) or splitting (@pxref{Splitting Windows}) windows.
@cindex line height
@cindex column width
The term @dfn{line height} is sometimes used instead of ``default
character height''. Similarly, the term @dfn{column width} is used as
shorthand for ``default character width''.
@cindex canonical character height
@cindex canonical character width
The terms @dfn{line height} and @dfn{canonical character height} are
sometimes used instead of ``default character height''. Similarly, the
terms @dfn{column width} and @dfn{canonical character width} are used
instead of ``default character width''.
@defun frame-char-height &optional frame
@defunx frame-char-width &optional frame

View file

@ -371,14 +371,14 @@ means to use the left or top edge of @var{window} as reference position.
If the optional argument @var{wrap} is non-@code{nil}, this means to
wrap @var{direction} around frame borders. For example, if @var{window}
is at the top of the frame and @var{direction} is @code{above}, then
return the minibuffer window provided the frame has one, and a window at
the bottom of the frame otherwise.
this function usually returns the frame's minibuffer window if it's
active and a window at the bottom of the frame otherwise.
If the optional argument @var{mini} is @code{nil}, this means to return
the minibuffer window if and only if it is currently active. If
@var{mini} is non-@code{nil}, it returns the minibuffer window even when
it's not active. However, if @var{wrap} non-@code{nil}, it always acts
as if @var{mini} were @code{nil}.
@var{mini} is non-@code{nil}, this function may return the minibuffer
window even when it's not active. However, if @var{wrap} is
non-@code{nil}, it always acts as if @var{mini} were @code{nil}.
If it doesn't find a suitable window, this function returns @code{nil}.
@end defun
@ -664,15 +664,17 @@ following function useful:
@defun window-max-chars-per-line &optional window face
This function returns the number of characters displayed in the
specified @var{face} in the specified @var{window} (which must be a
live window). If @var{face} was remapped (@pxref{Face Remapping}),
the information is returned for the remapped face. If omitted or
@code{nil}, @var{face} defaults to the default face, and @var{window}
defaults to the selected window. Unlike @code{window-body-width},
this function accounts for the actual size of the @var{face}'s font,
instead of working in units of frame's canonical character width. It
also accounts for space used by the continuation glyph, if
@var{window} lacks one or both of its fringes.
specified face @var{face} in the specified window @var{window} (which
must be a live window). If @var{face} was remapped (@pxref{Face
Remapping}), the information is returned for the remapped face. If
omitted or @code{nil}, @var{face} defaults to the default face, and
@var{window} defaults to the selected window.
Unlike @code{window-body-width}, this function accounts for the actual
size of @var{face}'s font, instead of working in units of the canonical
character width of @var{window}'s frame (@pxref{Frame Font}). It also
accounts for space used by the continuation glyph, if @var{window} lacks
one or both of its fringes.
@end defun
@cindex fixed-size window
@ -701,7 +703,7 @@ margins, fringes, a scroll bar and a right divider, if present.
The following function tells how small a specific window can get taking
into account the sizes of its areas and the values of
@code{window-min-height}, @code{window-min-width} and
@code{window-size-fixed}.
@code{window-size-fixed} (@pxref{Preserving Window Sizes}).
@defun window-min-size &optional window horizontal ignore pixelwise
This function returns the minimum size of @var{window}. @var{window}
@ -713,10 +715,9 @@ of @var{window}'s lines.
The return value makes sure that all components of @var{window} remain
fully visible if @var{window}'s size were actually set to it. With
@var{horizontal} @code{nil} it includes the mode and header line, the
horizontal scroll bar and the bottom divider. With @var{horizontal}
non-@code{nil} it includes the fringes, a scroll bar, and a right
divider, if present. It does not, however, include the space reserved
for the margins.
horizontal scroll bar and the bottom divider, if present. With
@var{horizontal} non-@code{nil} it includes the margins and fringes, the
vertical scroll bar and the right divider, if present.
The optional argument @var{ignore}, if non-@code{nil}, means ignore
restrictions imposed by fixed size windows, @code{window-min-height} or
@ -1263,8 +1264,8 @@ frame), an error is signaled.
By default, the space taken up by @var{window} is given to one of its
adjacent sibling windows, if any. However, if the variable
@code{window-combination-resize} is non-@code{nil}, the space is
proportionally distributed among any remaining windows in the window
combination. @xref{Recombining Windows}.
proportionally distributed among any remaining windows in the same
window combination. @xref{Recombining Windows}.
The behavior of this function may be altered by the window parameters
of @var{window}, so long as the variable
@ -1771,11 +1772,13 @@ nor the buffer list.
@defun window-use-time &optional window
This functions returns the use time of window @var{window}.
@var{window} must be a live window and defaults to the selected one.
The @dfn{use time} of a window is not really a time value, but it does
increase monotonically with each window selection, so the window with
the lowest use time is the least recently selected one, and the
window with the highest use time is the most recently selected
one.
The @dfn{use time} of a window is not really a time value, but an
integer that does increase monotonically with each call of
@code{select-window} with a @code{nil} @var{norecord} argument. The
window with the lowest use time is usually called the least recently
used window while the window with the highest use time is called the
most recently used one (@pxref{Cyclic Window Ordering}).
@end defun
@ -1790,11 +1793,11 @@ some other window, it moves through live windows in a specific order.
For any given configuration of windows, this order never varies. It
is called the @dfn{cyclic ordering of windows}.
The ordering is determined by a depth-first traversal of the frame's
window tree, retrieving the live windows which are the leaf nodes of
the tree (@pxref{Windows and Frames}). If the minibuffer is active,
the minibuffer window is included too. The ordering is cyclic, so the
last window in the sequence is followed by the first one.
The ordering is determined by a depth-first traversal of each frame's
window tree, retrieving the live windows which are the leaf nodes of the
tree (@pxref{Windows and Frames}). If the minibuffer is active, the
minibuffer window is included too. The ordering is cyclic, so the last
window in the sequence is followed by the first one.
@defun next-window &optional window minibuf all-frames
@cindex minibuffer window, and @code{next-window}
@ -2146,9 +2149,8 @@ Invokes @code{pop-to-buffer} to proceed.
Marks the selected window as non-dedicated and proceeds.
@end table
When called non-interactively, @code{switch-to-buffer} always signals an
error when the selected window is dedicated to its buffer and
@var{force-same-window} is non-@code{nil}.
This option does not affect non-interactive calls of
@code{switch-to-buffer}.
@end defopt
By default, @code{switch-to-buffer} shows the buffer at its position of
@ -2209,7 +2211,7 @@ for the documentation of @code{display-buffer}.
@deffn Command pop-to-buffer buffer-or-name &optional action norecord
This function makes @var{buffer-or-name} the current buffer and
displays it in some window, preferably not the window previously
displays it in some window, preferably not the window currently
selected. It then selects the displaying window. If that window is
on a different graphical frame, that frame is given input focus if
possible (@pxref{Input Focus}). The return value is the buffer that
@ -2420,7 +2422,6 @@ frame is a candidate; this function replaces the default predicate.
If @var{alist} has a non-@code{nil} @code{inhibit-same-window} entry,
the selected window is used; thus if the selected frame has a single
window, it is not used.
@end defun
@defun display-buffer-pop-up-window buffer alist

View file

@ -50,7 +50,7 @@ format understood by
.BR vi ( 1 )\c
\&. Both forms of the program understand
the syntax of C, Objective C, C++, Java, Fortran, Ada, Cobol, Erlang,
Forth, HTML, LaTeX, Emacs Lisp/Common Lisp, Lua, Makefile, Pascal, Perl,
Forth, Go, HTML, LaTeX, Emacs Lisp/Common Lisp, Lua, Makefile, Pascal, Perl,
Ruby, PHP, PostScript, Python, Prolog, Scheme and
most assembler\-like syntaxes.
Both forms read the files specified on the command line, and write a tag

File diff suppressed because it is too large Load diff

View file

@ -181,13 +181,15 @@ and can contain escape sequences for command keys, quotes, and the like.
* Changes in Emacs 25.1
+++
** Xwidgets: a new feature for embedding native widgets inside Emacs buffers.
If you have gtk3 and webkitgtk3 installed, you can access the
embedded webkit browser with `M-x xwidget-webkit-browse-url'. This
opens a new buffer with the embedded browser. The buffer will
have a new mode, `xwidget-webkit-mode' (similar to `image-mode'),
which supports the webkit widget.
If you have gtk3 and webkitgtk3 installed, and Emacs was built with
xwidget support, you can access the embedded webkit browser with `M-x
xwidget-webkit-browse-url'. This opens a new buffer with the embedded
browser. The buffer will have a new mode, `xwidget-webkit-mode'
(similar to `image-mode'), which supports the webkit widget.
+++
*** New functions for xwidget-webkit mode `xwidget-webkit-insert-string',
`xwidget-webkit-adjust-size-dispatch', `xwidget-webkit-back',
`xwidget-webkit-browse-url', `xwidget-webkit-reload',
@ -1896,8 +1898,12 @@ qualified names by hand.
+++
*** New language Ruby
Names of modules, classes, methods, and functions are tagged.
Overloaded operators are also tagged.
Names of modules, classes, methods, functions, and constants are
tagged. Overloaded operators are also tagged.
+++
*** New language Go
Names of packages, functions, and types are tagged.
+++
*** Improved support for Lua

View file

@ -354,6 +354,7 @@ static void Cstar_entries (FILE *);
static void Erlang_functions (FILE *);
static void Forth_words (FILE *);
static void Fortran_functions (FILE *);
static void Go_functions (FILE *);
static void HTML_labels (FILE *);
static void Lisp_functions (FILE *);
static void Lua_functions (FILE *);
@ -641,6 +642,10 @@ static const char *Fortran_suffixes [] =
static const char Fortran_help [] =
"In Fortran code, functions, subroutines and block data are tags.";
static const char *Go_suffixes [] = {"go", NULL};
static const char Go_help [] =
"In Go code, functions, interfaces and packages are tags.";
static const char *HTML_suffixes [] =
{ "htm", "html", "shtml", NULL };
static const char HTML_help [] =
@ -727,7 +732,7 @@ static const char *Ruby_suffixes [] =
{ "rb", "ruby", NULL };
static const char Ruby_help [] =
"In Ruby code, 'def' or 'class' or 'module' at the beginning of\n\
a line generate a tag.";
a line generate a tag. Constants also generate a tag.";
/* Can't do the `SCM' or `scm' prefix with a version number. */
static const char *Scheme_suffixes [] =
@ -794,6 +799,7 @@ static language lang_names [] =
{ "erlang", Erlang_help, Erlang_functions, Erlang_suffixes },
{ "forth", Forth_help, Forth_words, Forth_suffixes },
{ "fortran", Fortran_help, Fortran_functions, Fortran_suffixes },
{ "go", Go_help, Go_functions, Go_suffixes },
{ "html", HTML_help, HTML_labels, HTML_suffixes },
{ "java", Cjava_help, Cjava_entries, Cjava_suffixes },
{ "lisp", Lisp_help, Lisp_functions, Lisp_suffixes },
@ -4208,6 +4214,73 @@ Fortran_functions (FILE *inf)
}
}
/*
* Go language support
* Original code by Xi Lu <lx@shellcodes.org> (2016)
*/
static void
Go_functions(FILE *inf)
{
char *cp, *name;
LOOP_ON_INPUT_LINES(inf, lb, cp)
{
cp = skip_spaces (cp);
if (LOOKING_AT (cp, "package"))
{
name = cp;
while (!notinname (*cp) && *cp != '\0')
cp++;
make_tag (name, cp - name, false, lb.buffer,
cp - lb.buffer + 1, lineno, linecharno);
}
else if (LOOKING_AT (cp, "func"))
{
/* Go implementation of interface, such as:
func (n *Integer) Add(m Integer) ...
skip `(n *Integer)` part.
*/
if (*cp == '(')
{
while (*cp != ')')
cp++;
cp = skip_spaces (cp+1);
}
if (*cp)
{
name = cp;
while (!notinname (*cp))
cp++;
make_tag (name, cp - name, true, lb.buffer,
cp - lb.buffer + 1, lineno, linecharno);
}
}
else if (members && LOOKING_AT (cp, "type"))
{
name = cp;
/* Ignore the likes of the following:
type (
A
)
*/
if (*cp == '(')
return;
while (!notinname (*cp) && *cp != '\0')
cp++;
make_tag (name, cp - name, false, lb.buffer,
cp - lb.buffer + 1, lineno, linecharno);
}
}
}
/*
* Ada parsing
@ -4551,18 +4624,68 @@ Ruby_functions (FILE *inf)
LOOP_ON_INPUT_LINES (inf, lb, cp)
{
bool is_class = false;
bool is_method = false;
char *name;
cp = skip_spaces (cp);
if (LOOKING_AT (cp, "def")
|| LOOKING_AT (cp, "class")
|| LOOKING_AT (cp, "module"))
if (c_isalpha (*cp) && c_isupper (*cp)) /* constants */
{
char *name = cp;
char *bp, *colon = NULL;
name = cp;
for (cp++; c_isalnum (*cp) || *cp == '_' || *cp == ':'; cp++)
{
if (*cp == ':')
colon = cp;
}
if (cp > name + 1)
{
bp = skip_spaces (cp);
if (*bp == '=' && c_isspace (bp[1]))
{
if (colon && !c_isspace (colon[1]))
name = colon + 1;
make_tag (name, cp - name, false,
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
}
}
}
else if ((is_method = LOOKING_AT (cp, "def")) /* module/class/method */
|| (is_class = LOOKING_AT (cp, "class"))
|| LOOKING_AT (cp, "module"))
{
const char self_name[] = "self.";
const size_t self_size1 = sizeof ("self.") - 1;
name = cp;
/* Ruby method names can end in a '='. Also, operator overloading can
define operators whose names include '='. */
while (!notinname (*cp) || *cp == '=')
cp++;
/* Remove "self." from the method name. */
if (cp - name > self_size1
&& strneq (name, self_name, self_size1))
name += self_size1;
/* Remove the class/module qualifiers from method names. */
if (is_method)
{
char *q;
for (q = name; q < cp && *q != '.'; q++)
;
if (q < cp - 1) /* punt if we see just "FOO." */
name = q + 1;
}
/* Don't tag singleton classes. */
if (is_class && strneq (name, "<<", 2) && cp == name + 2)
continue;
make_tag (name, cp - name, true,
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
}

View file

@ -127,9 +127,9 @@ Signal an error if Gnu global not available."
(message "%s" (cedet-gnu-global-root)))
(defun cedet-gnu-global-root (&optional dir)
"Return the root of any GNU Global scanned project.
If a default starting DIR is not specified, the current buffer's
`default-directory' is used."
"Return the root of any GNU Global scanned project containing DIR.
Returns nil if no GNU Global project can be found.
DIR defaults to `default-directory'."
(let ((default-directory (or dir default-directory)))
(with-current-buffer (cedet-gnu-global-call (list "-pq"))
(goto-char (point-min))

View file

@ -231,7 +231,7 @@ variable `cedet-global-command'.")
(let* ((default-directory (oref loc root))
(root (cedet-gnu-global-root)))
(when (not root)
(error "Cannot use GNU Global in %s"
(error "No GNU Global project found for %s"
(oref loc root))))
)

View file

@ -67,7 +67,8 @@ disable any saving anywhere, `always', which enables saving
everywhere, or `project', which enables saving in any directory that
passes a list of predicates in `semanticdb-project-predicate-functions'."
:group 'semanticdb
:type nil)
:type '(repeat (choice (string :tag "Directory") (const never) (const always)
(const project))))
(define-obsolete-variable-alias 'semanticdb-save-database-hooks
'semanticdb-save-database-functions "24.3")

View file

@ -224,6 +224,7 @@ The remaining arguments to `defcustom' should have the form
The following keywords are meaningful:
:type VALUE should be a widget type for editing the symbol's value.
Every `defcustom' should specify a value for this keyword.
:options VALUE should be a list of valid members of the widget type.
:initialize
VALUE should be a function used to initialize the

View file

@ -183,7 +183,13 @@ If VERSION is a string, only that version is ever loaded.
Any other version, even if newer, is silently ignored.
Hence, the package is \"held\" at that version.
If VERSION is nil, the package is not loaded (it is \"disabled\")."
:type '(repeat symbol)
:type '(repeat (choice (const all)
(list :tag "Specific package"
(symbol :tag "Package name")
(choice :tag "Version"
(const :tag "disable" nil)
(const :tag "most recent" t)
(string :tag "specific version")))))
:risky t
:version "24.1")

View file

@ -35,6 +35,7 @@
(require 'browse-url)
(require 'subr-x)
(require 'dom)
(require 'seq)
(defgroup shr nil
"Simple HTML Renderer"

View file

@ -1228,7 +1228,10 @@ connection if a previous connection has died for some reason."
;; Read the expression.
(goto-char (point-min))
(read (current-buffer)))
":" 'omit))))))))
":" 'omit))
;; Mark it as connected.
(tramp-set-connection-property p "connected" t)))))))
(add-hook 'tramp-unload-hook
(lambda ()

View file

@ -1613,7 +1613,11 @@ connection if a previous connection has died for some reason."
;; is marked with the fuse-mountpoint "/". We shall react.
(when (string-equal
(tramp-get-file-property vec "/" "fuse-mountpoint" "") "/")
(tramp-error vec 'file-error "FUSE mount denied")))))
(tramp-error vec 'file-error "FUSE mount denied"))
;; Mark it as connected.
(tramp-set-connection-property
(tramp-get-connection-process vec) "connected" t))))
;; In `tramp-check-cached-permissions', the connection properties
;; {uig,gid}-{integer,string} are used. We set them to their local

View file

@ -4933,7 +4933,10 @@ connection if a previous connection has died for some reason."
target-alist (cdr target-alist)))
;; Make initial shell settings.
(tramp-open-connection-setup-interactive-shell p vec)))))
(tramp-open-connection-setup-interactive-shell p vec)
;; Mark it as connected.
(tramp-set-connection-property p "connected" t)))))
;; When the user did interrupt, we must cleanup.
(quit

View file

@ -1898,7 +1898,10 @@ If ARGUMENT is non-nil, use it as argument for
;; character by character; if we send the string
;; at once, it is read painfully slow.
(tramp-set-connection-property p "smb-share" share)
(tramp-set-connection-property p "chunksize" 1))
(tramp-set-connection-property p "chunksize" 1)
;; Mark it as connected.
(tramp-set-connection-property p "connected" t))
;; Check for the error reason. If it was due to wrong
;; password, reestablish the connection. We cannot

View file

@ -2869,7 +2869,8 @@ User is always nil."
(when (tramp-tramp-file-p filename)
(let* ((v (tramp-dissect-file-name filename))
(p (tramp-get-connection-process v))
(c (and p (processp p) (memq (process-status p) '(run open)))))
(c (and p (processp p) (memq (process-status p) '(run open))
(tramp-get-connection-property p "connected" nil))))
;; We expand the file name only, if there is already a connection.
(with-parsed-tramp-file-name
(if c (expand-file-name filename) filename) nil

View file

@ -154,6 +154,34 @@ end it with `/'. DIR must be one of `project-roots' or
vc-directory-exclusion-list)
grep-find-ignored-files))
(cl-defgeneric project-file-completion-table (project dirs)
"Return a completion table for files in directories DIRS in PROJECT.
DIRS is a list of absolute directories; it should be some
subset of the project roots and external roots.
The default implementation uses `find-program'. PROJECT is used
to find the list of ignores for each directory."
;; FIXME: Uniquely abbreviate the roots?
(require 'xref)
(let ((all-files
(cl-mapcan
(lambda (dir)
(let ((command
(format "%s %s %s -type f -print0"
find-program
dir
(xref--find-ignores-arguments
(project-ignores project dir)
(expand-file-name dir)))))
(split-string (shell-command-to-string command) "\0" t)))
dirs)))
(lambda (string pred action)
(cond
((eq action 'metadata)
'(metadata . ((category . project-file))))
(t
(complete-with-action action all-files string pred))))))
(defgroup project-vc nil
"Project implementation using the VC package."
:version "25.1"
@ -313,51 +341,55 @@ pattern to search for."
;;;###autoload
(defun project-find-file ()
"Visit a file in the current project's roots.
This is like `find-file', but it limits the file-name completion
candidates to the files within the current project roots."
"Visit a file (with completion) in the current project's roots.
The completion default is the filename at point, if one is
recognized."
(interactive)
(let* ((pr (project-current t))
(dirs (project-roots pr)))
(project--find-file-in dirs pr)))
(project-find-file-in (thing-at-point 'filename) dirs pr)))
;;;###autoload
(defun project-or-external-find-file ()
"Visit a file in the current project's roots or external roots.
This is like `find-file', but it limits the file-name completion
candidates to the files within the current project roots and external roots."
"Visit a file (with completion) in the current project's roots or external roots.
The completion default is the filename at point, if one is
recognized."
(interactive)
(let* ((pr (project-current t))
(dirs (append
(project-roots pr)
(project-external-roots pr))))
(project--find-file-in dirs pr)))
(project-find-file-in (thing-at-point 'filename) dirs pr)))
;; FIXME: Uniquely abbreviate the roots?
(defun project--find-file-in (dirs project)
(require 'xref)
(let* ((all-files
(cl-mapcan
(lambda (dir)
(let ((command
(format "%s %s %s -type f -print0"
find-program
dir
(xref--find-ignores-arguments
(project-ignores project dir)
(expand-file-name dir)))))
(split-string (shell-command-to-string command) "\0" t)))
dirs))
(table (lambda (string pred action)
(cond
((eq action 'metadata)
'(metadata . ((category . project-file))))
(t
(complete-with-action action all-files string pred))))))
(find-file
(completing-read "Find file: " table nil t))))
(defun project-find-file-in (filename dirs project)
"Complete FILENAME in DIRS in PROJECT and visit the result."
(let* ((table (project-file-completion-table project dirs))
(file (project--completing-read-strict
"Find file" table nil nil
filename)))
(if (string= file "")
(user-error "You didn't specify the file")
(find-file file))))
(defun project--completing-read-strict (prompt
collection &optional predicate
hist default inherit-input-method)
;; Tried both expanding the default before showing the prompt, and
;; removing it when it has no matches. Neither seems natural
;; enough. Removal is confusing; early expansion makes the prompt
;; too long.
(let* ((new-prompt (if default
(format "%s (default %s): " prompt default)
(format "%s: " prompt)))
(res (completing-read new-prompt
collection predicate t
nil hist default inherit-input-method)))
(if (and (equal res default)
(not (test-completion res collection predicate)))
(completing-read (format "%s: " prompt)
collection predicate t res hist nil
inherit-input-method)
res)))
(provide 'project)
;;; project.el ends here

View file

@ -367,6 +367,7 @@ The version numbers are of the format (Major . Minor)."
:type '(repeat (list (symbol :tag "System")
(cons :tag "Version numbers" (integer :tag "Major")
(integer :tag "Minor"))))
:risky t
:group 'prolog)
;; Indentation
@ -440,7 +441,8 @@ Legal values:
"Alist of Prolog keywords which is used for font locking of directives."
:version "24.1"
:group 'prolog-font-lock
:type 'sexp)
:type 'sexp
:risky t)
(defcustom prolog-types
'((mercury
@ -449,7 +451,8 @@ Legal values:
"Alist of Prolog types used by font locking."
:version "24.1"
:group 'prolog-font-lock
:type 'sexp)
:type 'sexp
:risky t)
(defcustom prolog-mode-specificators
'((mercury
@ -458,7 +461,8 @@ Legal values:
"Alist of Prolog mode specificators used by font locking."
:version "24.1"
:group 'prolog-font-lock
:type 'sexp)
:type 'sexp
:risky t)
(defcustom prolog-determinism-specificators
'((mercury
@ -468,7 +472,8 @@ Legal values:
"Alist of Prolog determinism specificators used by font locking."
:version "24.1"
:group 'prolog-font-lock
:type 'sexp)
:type 'sexp
:risky t)
(defcustom prolog-directives
'((mercury
@ -477,7 +482,8 @@ Legal values:
"Alist of Prolog source code directives used by font locking."
:version "24.1"
:group 'prolog-font-lock
:type 'sexp)
:type 'sexp
:risky t)
;; Keyboard
@ -563,7 +569,8 @@ the first column (i.e., DCG heads) inserts ` -->' and newline."
(or (car names) "prolog"))))
"Alist of program names for invoking an inferior Prolog with `run-prolog'."
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defun prolog-program-name ()
(prolog-find-value-by-system prolog-program-name))
@ -573,7 +580,8 @@ the first column (i.e., DCG heads) inserts ` -->' and newline."
"Alist of switches given to inferior Prolog run with `run-prolog'."
:version "24.1"
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defun prolog-program-switches ()
(prolog-find-value-by-system prolog-program-switches))
@ -596,7 +604,9 @@ Some parts of the string are replaced:
region of a buffer, in which case it is the number of lines before
the region."
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defun prolog-consult-string ()
(prolog-find-value-by-system prolog-consult-string))
@ -621,7 +631,9 @@ Some parts of the string are replaced:
If `prolog-program-name' is non-nil, it is a string sent to a Prolog process.
If `prolog-program-name' is nil, it is an argument to the `compile' function."
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defun prolog-compile-string ()
(prolog-find-value-by-system prolog-compile-string))
@ -629,7 +641,8 @@ If `prolog-program-name' is nil, it is an argument to the `compile' function."
"Alist of strings that represent end of file for prolog.
nil means send actual operating system end of file."
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defcustom prolog-prompt-regexp
'((eclipse "^[a-zA-Z0-9()]* *\\?- \\|^\\[[a-zA-Z]* [0-9]*\\]:")
@ -640,7 +653,9 @@ nil means send actual operating system end of file."
"Alist of prompts of the prolog system command line."
:version "24.1"
:group 'prolog-inferior
:type 'sexp)
:type 'sexp
:risky t)
(defun prolog-prompt-regexp ()
(prolog-find-value-by-system prolog-prompt-regexp))
@ -649,7 +664,8 @@ nil means send actual operating system end of file."
;; (t "^|: +"))
;; "Alist of regexps matching the prompt when consulting `user'."
;; :group 'prolog-inferior
;; :type 'sexp)
;; :type 'sexp
;; :risky t)
(defcustom prolog-debug-on-string "debug.\n"
"Predicate for enabling debug mode."
@ -1020,6 +1036,8 @@ VERSION is of the format (Major . Minor)"
(define-abbrev-table 'prolog-mode-abbrev-table ())
;; Becauses this can `eval' its arguments, any variable that gets
;; processed by it should be marked as :risky.
(defun prolog-find-value-by-system (alist)
"Get value from ALIST according to `prolog-system'."
(let ((system (or prolog-system
@ -2341,6 +2359,7 @@ In effect it sets the `fill-prefix' when inside comments and then calls
(swi prolog-help-online)
(t prolog-help-online))
"Alist for the name of the function for finding help on a predicate.")
(put 'prolog-help-function 'risky-local-variable t)
(defun prolog-help-on-predicate ()
"Invoke online help on the atom under cursor."
@ -2598,6 +2617,8 @@ and end of list building."
(goto-char (point-max))
)
(declare-function pltrace-on "ext:pltrace" ())
(defun prolog-enable-sicstus-sd ()
"Enable the source level debugging facilities of SICStus 3.7 and later."
(interactive)
@ -2608,21 +2629,22 @@ and end of list building."
(progn
;; If there is a *prolog* buffer, then call pltrace-on
(if (get-buffer "*prolog*")
;; Avoid compilation warnings by using eval
(eval '(pltrace-on)))
(pltrace-on))
(setq prolog-use-sicstus-sd t)
)))
(declare-function pltrace-off "ext:pltrace" (&optional remove-process-filter))
(defun prolog-disable-sicstus-sd ()
"Disable the source level debugging facilities of SICStus 3.7 and later."
(interactive)
(require 'pltrace)
(setq prolog-use-sicstus-sd nil)
;; Remove the hook
(remove-hook 'prolog-inferior-mode-hook 'pltrace-on)
;; If there is a *prolog* buffer, then call pltrace-off
(if (get-buffer "*prolog*")
;; Avoid compile warnings by using eval
(eval '(pltrace-off))))
(pltrace-off)))
(defun prolog-toggle-sicstus-sd ()
;; FIXME: Use define-minor-mode.

View file

@ -854,6 +854,7 @@ and just use etags."
(declare-function semantic-symref-find-references-by-name "semantic/symref")
(declare-function semantic-find-file-noselect "semantic/fw")
(declare-function grep-expand-template "grep")
(defvar ede-minor-mode) ;; ede.el
(defun xref-collect-references (symbol dir)
"Collect references to SYMBOL inside DIR.
@ -948,6 +949,9 @@ IGNORES is a list of glob patterns."
(xref--find-ignores-arguments ignores dir)))
(defun xref--find-ignores-arguments (ignores dir)
"Convert IGNORES and DIR to a list of arguments for 'find'.
IGNORES is a list of glob patterns. DIR is an absolute
directory, used as the root of the ignore globs."
;; `shell-quote-argument' quotes the tilde as well.
(cl-assert (not (string-match-p "\\`~" dir)))
(when ignores

View file

@ -570,7 +570,7 @@
;; Maybe provide complete XEmacs support in the future however the
;; "extent" is the single largest obstacle lying ahead, read the
;; document in Emacs info.
;; (eval '(progn (require 'info) (Info-find-node "elisp" "Not Intervals")))
;; (progn (require 'info) (Info-find-node "elisp" "Not Intervals"))
;;
;;
;; ---------------

View file

@ -714,7 +714,7 @@ It is based on `log-edit-mode', and has Git-specific extensions.")
"cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname))))
(defun vc-git-find-ignore-file (file)
"Return the root directory of the repository of FILE."
"Return the git ignore file that controls FILE."
(expand-file-name ".gitignore"
(vc-git-root file)))

View file

@ -647,10 +647,14 @@ REV is the revision to check out into WORKFILE."
;; Follows vc-exec-after.
(declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
(defun vc-hg-dir-status-files (dir files update-function)
(apply 'vc-hg-command (current-buffer) 'async dir "status"
(concat "-mardu" (if files "i"))
"-C" files)
(defun vc-hg-dir-status-files (_dir files update-function)
;; XXX: We can't pass DIR directly to 'hg status' because that
;; returns all ignored files if FILES is non-nil (bug#22481).
;; If honoring DIR ever becomes important, try using '-I DIR/'.
(vc-hg-command (current-buffer) 'async files
"status"
(concat "-mardu" (if files "i"))
"-C")
(vc-run-delayed
(vc-hg-after-dir-status update-function)))

View file

@ -102,6 +102,10 @@ switches."
"Return the administrative directory of FILE."
(expand-file-name vc-mtn-admin-dir (vc-mtn-root file)))
(defun vc-mtn-find-ignore-file (file)
"Return the mtn ignore file that controls FILE."
(expand-file-name ".mtnignore" (vc-mtn-root file)))
(defun vc-mtn-registered (file)
(let ((root (vc-mtn-root file)))
(when root

View file

@ -2034,7 +2034,7 @@ has one, and a window at the bottom of the frame otherwise.
Optional argument MINI nil means to return the minibuffer window
if and only if it is currently active. MINI non-nil means to
return the minibuffer window even when it's not active. However,
if WRAP non-nil, always act as if MINI were nil.
if WRAP is non-nil, always act as if MINI were nil.
Return nil if no suitable window can be found."
(setq window (window-normalize-window window t))

View file

@ -57,6 +57,7 @@ The possible values are: `native' or `image'."
(declare-function xwidget-view-model "xwidget.c" (xwidget-view))
(declare-function delete-xwidget-view "xwidget.c" (xwidget-view))
(declare-function get-buffer-xwidgets "xwidget.c" (buffer))
(declare-function xwidget-query-on-exit-flag "xwidget.c" (xwidget))
(defun xwidget-insert (pos type title width height &optional args)
"Insert an xwidget at position POS.
@ -97,6 +98,8 @@ Interactively, URL defaults to the string looking like a url around point."
(browse-url-interactive-arg "xwidget-webkit URL: "
;;(xwidget-webkit-current-url)
)))
(or (featurep 'xwidget-internal)
(user-error "Your Emacs was not compiled with xwidgets support"))
(when (stringp url)
(if new-session
(xwidget-webkit-new-session url)

View file

@ -92,6 +92,18 @@ static bool valgrind_p;
#include "w32heap.h" /* for sbrk */
#endif
#if defined DOUG_LEA_MALLOC || defined GNU_LINUX
/* The address where the heap starts. */
void *
my_heap_start (void)
{
static void *start;
if (! start)
start = sbrk (0);
return start;
}
#endif
#ifdef DOUG_LEA_MALLOC
#include <malloc.h>
@ -101,7 +113,69 @@ static bool valgrind_p;
#define MMAP_MAX_AREAS 100000000
#endif /* not DOUG_LEA_MALLOC */
/* A pointer to the memory allocated that copies that static data
inside glibc's malloc. */
static void *malloc_state_ptr;
/* Get and free this pointer; useful around unexec. */
void
alloc_unexec_pre (void)
{
malloc_state_ptr = malloc_get_state ();
}
void
alloc_unexec_post (void)
{
free (malloc_state_ptr);
}
/* Restore the dumped malloc state. Because malloc can be invoked
even before main (e.g. by the dynamic linker), the dumped malloc
state must be restored as early as possible using this special hook. */
static void
malloc_initialize_hook (void)
{
static bool malloc_using_checking;
if (! initialized)
{
my_heap_start ();
malloc_using_checking = getenv ("MALLOC_CHECK_") != NULL;
}
else
{
if (!malloc_using_checking)
{
/* Work around a bug in glibc's malloc. MALLOC_CHECK_ must be
ignored if the heap to be restored was constructed without
malloc checking. Can't use unsetenv, since that calls malloc. */
char **p = environ;
if (p)
for (; *p; p++)
if (strncmp (*p, "MALLOC_CHECK_=", 14) == 0)
{
do
*p = p[1];
while (*++p);
break;
}
}
malloc_set_state (malloc_state_ptr);
# ifndef XMALLOC_OVERRUN_CHECK
alloc_unexec_post ();
# endif
}
}
# ifndef __MALLOC_HOOK_VOLATILE
# define __MALLOC_HOOK_VOLATILE
# endif
voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook
= malloc_initialize_hook;
#endif
/* Mark, unmark, query mark bit of a Lisp string. S must be a pointer
to a struct Lisp_String. */

View file

@ -133,20 +133,7 @@ bool might_dump;
extern void unexec_init_emacs_zone (void);
#endif
#ifdef DOUG_LEA_MALLOC
/* Preserves a pointer to the memory allocated that copies that
static data inside glibc's malloc. */
static void *malloc_state_ptr;
/* From glibc, a routine that returns a copy of the malloc internal state. */
extern void *malloc_get_state (void);
/* From glibc, a routine that overwrites the malloc internal state. */
extern int malloc_set_state (void *);
/* True if the MALLOC_CHECK_ environment variable was set while
dumping. Used to work around a bug in glibc's malloc. */
static bool malloc_using_checking;
#elif defined HAVE_PTHREAD && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
extern void malloc_enable_thread (void);
#endif
/* If true, Emacs should not attempt to use a window-specific code,
but instead should use the virtual terminal under which it was started. */
@ -165,11 +152,6 @@ bool display_arg;
Tells GC how to save a copy of the stack. */
char *stack_bottom;
#if defined (DOUG_LEA_MALLOC) || defined (GNU_LINUX)
/* The address where the heap starts (from the first sbrk (0) call). */
static void *my_heap_start;
#endif
#ifdef GNU_LINUX
/* The gap between BSS end and heap start as far as we can tell. */
static uprintmax_t heap_bss_diff;
@ -654,51 +636,6 @@ argmatch (char **argv, int argc, const char *sstr, const char *lstr,
}
}
#ifdef DOUG_LEA_MALLOC
/* malloc can be invoked even before main (e.g. by the dynamic
linker), so the dumped malloc state must be restored as early as
possible using this special hook. */
static void
malloc_initialize_hook (void)
{
if (initialized)
{
if (!malloc_using_checking)
/* Work around a bug in glibc's malloc. MALLOC_CHECK_ must be
ignored if the heap to be restored was constructed without
malloc checking. Can't use unsetenv, since that calls malloc. */
{
char **p;
for (p = environ; p && *p; p++)
if (strncmp (*p, "MALLOC_CHECK_=", 14) == 0)
{
do
*p = p[1];
while (*++p);
break;
}
}
malloc_set_state (malloc_state_ptr);
#ifndef XMALLOC_OVERRUN_CHECK
free (malloc_state_ptr);
#endif
}
else
{
if (my_heap_start == 0)
my_heap_start = sbrk (0);
malloc_using_checking = getenv ("MALLOC_CHECK_") != NULL;
}
}
void (*__malloc_initialize_hook) (void) EXTERNALLY_VISIBLE = malloc_initialize_hook;
#endif /* DOUG_LEA_MALLOC */
/* Close standard output and standard error, reporting any write
errors as best we can. This is intended for use with atexit. */
static void
@ -746,10 +683,8 @@ main (int argc, char **argv)
#ifdef GNU_LINUX
if (!initialized)
{
if (my_heap_start == 0)
my_heap_start = sbrk (0);
heap_bss_diff = (char *)my_heap_start - max (my_endbss, my_endbss_static);
char *heap_start = my_heap_start ();
heap_bss_diff = heap_start - max (my_endbss, my_endbss_static);
}
#endif
@ -2148,15 +2083,12 @@ You must run Emacs in batch mode in order to dump it. */)
memory_warnings (my_edata, malloc_warning);
#endif /* not WINDOWSNT */
#endif /* not SYSTEM_MALLOC and not HYBRID_MALLOC */
#ifdef DOUG_LEA_MALLOC
malloc_state_ptr = malloc_get_state ();
#endif
alloc_unexec_pre ();
unexec (SSDATA (filename), !NILP (symfile) ? SSDATA (symfile) : 0);
#ifdef DOUG_LEA_MALLOC
free (malloc_state_ptr);
#endif
alloc_unexec_post ();
#ifdef WINDOWSNT
Vlibrary_cache = Qnil;

View file

@ -7141,9 +7141,6 @@ struct user_signal_info
/* List of user signals. */
static struct user_signal_info *user_signals = NULL;
/* Function called when handling user signals. */
void (*handle_user_signal_hook) (int);
void
add_user_signal (int sig, const char *name)
{
@ -7192,8 +7189,6 @@ handle_user_signal (int sig)
}
p->npending++;
if (handle_user_signal_hook)
(*handle_user_signal_hook) (sig);
#ifdef USABLE_SIGIO
if (interrupt_input)
handle_input_available_signal (sig);

View file

@ -415,8 +415,6 @@ extern void unuse_menu_items (void);
#define EVENT_HEAD_KIND(event_head) \
(Fget ((event_head), Qevent_kind))
extern void (*handle_user_signal_hook) (int);
/* True while doing kbd input. */
extern bool waiting_for_input;

View file

@ -3590,6 +3590,7 @@ extern void parse_str_as_multibyte (const unsigned char *, ptrdiff_t,
ptrdiff_t *, ptrdiff_t *);
/* Defined in alloc.c. */
extern void *my_heap_start (void);
extern void check_pure_size (void);
extern void free_misc (Lisp_Object);
extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT);
@ -3601,6 +3602,13 @@ extern void mark_object (Lisp_Object);
#if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
extern void refill_memory_reserve (void);
#endif
#ifdef DOUG_LEA_MALLOC
extern void alloc_unexec_pre (void);
extern void alloc_unexec_post (void);
#else
INLINE void alloc_unexec_pre (void) {}
INLINE void alloc_unexec_post (void) {}
#endif
extern const char *pending_malloc_warning;
extern Lisp_Object zero_vector;
extern Lisp_Object *stack_base;

11
test/etags/go-src/test.go Normal file
View file

@ -0,0 +1,11 @@
package main
import "fmt"
func say(msg string) {
fmt.Println(msg)
}
func main() {
say("Hello, Emacs!")
}

View file

@ -0,0 +1,34 @@
package main
import "fmt"
type plus interface {
PrintAdd()
}
type str struct {
a, b string
}
type intNumber struct {
a, b int
}
func (s str) PrintAdd() {
fmt.Println(s.a + s.b)
}
func (n intNumber) PrintAdd() {
fmt.Println(n.a + n.b)
}
func test(p plus) {
p.PrintAdd()
}
func main() {
s := str{a: "Hello,", b: "Emacs!"}
number := intNumber{a: 1, b: 2}
test(number)
test(s)
}

View file

@ -227,6 +227,8 @@ A cp-src/c.C 117
A cp-src/fail.C 7
A cp-src/fail.C 23
A ruby-src/test1.ruby /^class A$/
A ruby-src/test1.ruby /^module A$/
ABC ruby-src/test1.ruby 11
ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/
ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378
ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/
@ -289,6 +291,7 @@ B cp-src/c.C /^void B::B() {}$/
B cp-src/c.C 122
B cp-src/fail.C 8
B cp-src/fail.C 24
B ruby-src/test1.ruby /^ class B$/
BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/
BE_Node cp-src/c.C 77
BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125
@ -438,7 +441,6 @@ Cjava_entries c-src/etags.c /^Cjava_entries (FILE *inf)$/
Cjava_help c-src/etags.c 551
Cjava_suffixes c-src/etags.c 549
ClassExample ruby-src/test.rb /^ class ClassExample$/
ClassExample.class_method ruby-src/test.rb /^ def ClassExample.class_method$/
Clear/p ada-src/2ataspri.adb /^ procedure Clear (Cell : in out TAS_Cell) is$/
Clear/p ada-src/2ataspri.ads /^ procedure Clear (Cell : in out TAS_Cell)/
Cobol_help c-src/etags.c 558
@ -458,6 +460,7 @@ Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is privat
Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is$/
Configure pyt-src/server.py /^class Configure(Frame, ControlEdit):$/
ConfirmQuit pyt-src/server.py /^def ConfirmQuit(frame, context):$/
Constant ruby-src/test1.ruby 26
ControlEdit pyt-src/server.py /^class ControlEdit(Frame):$/
Controls pyt-src/server.py /^class Controls:$/
CopyTextString pas-src/common.pas /^function CopyTextString;(*($/
@ -939,12 +942,15 @@ Metags c-src/etags.c /^main (int argc, char **argv)$/
Mfail cp-src/fail.C /^main()$/
Mkai-test.pl perl-src/kai-test.pl /^package main;$/
ModuleExample ruby-src/test.rb /^module ModuleExample$/
ModuleExample.module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/
More_Lisp_Bits c-src/emacs/src/lisp.h 801
MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/
MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/
MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/
MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/
Mtest.go go-src/test.go 1
Mtest.go go-src/test.go /^func main() {$/
Mtest1.go go-src/test1.go 1
Mtest1.go go-src/test1.go /^func main() {$/
Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/
NAME y-src/cccp.c 8
NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/
@ -1075,6 +1081,8 @@ Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/
Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/
PostControls pyt-src/server.py /^ def PostControls(self):$/
Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/
PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/
PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/
Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/
Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/
Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/
@ -1100,7 +1108,7 @@ Python_help c-src/etags.c 660
Python_suffixes c-src/etags.c 658
QUIT c-src/emacs/src/lisp.h 3101
QUITP c-src/emacs/src/lisp.h 3112
Qpre_abbrev_expand_hook c-src/abbrev.c 82
Qpre_abbrev_expand_hook c-src/abbrev.c 83
RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/
RCSid objc-src/PackInsp.m 30
READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346
@ -1425,16 +1433,16 @@ VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/
VERSION c-src/etags.c 789
VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/
VERSION objc-src/PackInsp.m 34
Vabbrev_start_location c-src/abbrev.c 62
Vabbrev_start_location_buffer c-src/abbrev.c 65
Vabbrev_table_name_list c-src/abbrev.c 42
Vabbrev_start_location c-src/abbrev.c 63
Vabbrev_start_location_buffer c-src/abbrev.c 66
Vabbrev_table_name_list c-src/abbrev.c 43
ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/
Vfundamental_mode_abbrev_table c-src/abbrev.c 51
Vglobal_abbrev_table c-src/abbrev.c 47
Vlast_abbrev c-src/abbrev.c 69
Vlast_abbrev_text c-src/abbrev.c 74
Vfundamental_mode_abbrev_table c-src/abbrev.c 52
Vglobal_abbrev_table c-src/abbrev.c 48
Vlast_abbrev c-src/abbrev.c 70
Vlast_abbrev_text c-src/abbrev.c 75
Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172
Vpre_abbrev_expand_hook c-src/abbrev.c 82
Vpre_abbrev_expand_hook c-src/abbrev.c 83
WAIT_READING_MAX c-src/emacs/src/lisp.h 4281
WAIT_READING_MAX c-src/emacs/src/lisp.h 4283
WCHAR_TYPE_SIZE cccp.y 99
@ -1530,9 +1538,9 @@ Y c-src/h.h 100
YACC c-src/etags.c 2199
YELLOW cp-src/screen.hpp 26
YYABORT /usr/share/bison/bison.simple 153
YYABORT /usr/share/bison/bison.simple 153
YYACCEPT /usr/share/bison/bison.simple 152
YYABORT /usr/share/bison/bison.simple 154
YYACCEPT /usr/share/bison/bison.simple 152
YYACCEPT /usr/share/bison/bison.simple 153
YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/
YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/
YYBISON y-src/parse.c 4
@ -1544,23 +1552,23 @@ YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/
YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/
YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/
YYEMPTY /usr/share/bison/bison.simple 150
YYEMPTY /usr/share/bison/bison.simple 150
YYEOF /usr/share/bison/bison.simple 151
YYEMPTY /usr/share/bison/bison.simple 151
YYEOF /usr/share/bison/bison.simple 151
YYEOF /usr/share/bison/bison.simple 152
YYERRCODE /usr/share/bison/bison.simple 178
YYERRCODE /usr/share/bison/bison.simple 178
YYERROR /usr/share/bison/bison.simple 154
YYERRCODE /usr/share/bison/bison.simple 179
YYERROR /usr/share/bison/bison.simple 154
YYERROR /usr/share/bison/bison.simple 155
YYFAIL /usr/share/bison/bison.simple 158
YYFAIL /usr/share/bison/bison.simple 158
YYFAIL /usr/share/bison/bison.simple 159
YYFINAL parse.y 93
YYFINAL cccp.y 127
YYFLAG parse.y 94
YYFLAG cccp.y 128
YYFPRINTF /usr/share/bison/bison.simple 225
YYFPRINTF /usr/share/bison/bison.simple 225
YYINITDEPTH /usr/share/bison/bison.simple 244
YYFPRINTF /usr/share/bison/bison.simple 226
YYINITDEPTH /usr/share/bison/bison.simple 244
YYINITDEPTH /usr/share/bison/bison.simple 245
YYLAST parse.y 266
YYLAST cccp.y 274
YYLEX /usr/share/bison/bison.simple 200
@ -1568,17 +1576,17 @@ YYLEX /usr/share/bison/bison.simple 202
YYLEX /usr/share/bison/bison.simple 206
YYLEX /usr/share/bison/bison.simple 208
YYLEX /usr/share/bison/bison.simple 212
YYLEX /usr/share/bison/bison.simple 200
YYLEX /usr/share/bison/bison.simple 202
YYLEX /usr/share/bison/bison.simple 206
YYLEX /usr/share/bison/bison.simple 208
YYLEX /usr/share/bison/bison.simple 212
YYLEX /usr/share/bison/bison.simple 201
YYLEX /usr/share/bison/bison.simple 203
YYLEX /usr/share/bison/bison.simple 207
YYLEX /usr/share/bison/bison.simple 209
YYLEX /usr/share/bison/bison.simple 213
YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/
YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/
YYMAXDEPTH /usr/share/bison/bison.simple 255
YYMAXDEPTH /usr/share/bison/bison.simple 259
YYMAXDEPTH /usr/share/bison/bison.simple 255
YYMAXDEPTH /usr/share/bison/bison.simple 259
YYMAXDEPTH /usr/share/bison/bison.simple 256
YYMAXDEPTH /usr/share/bison/bison.simple 260
YYNTBASE parse.y 95
YYNTBASE cccp.y 129
YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351
@ -1608,23 +1616,23 @@ YYSIZE_T /usr/share/bison/bison.simple 131
YYSIZE_T /usr/share/bison/bison.simple 136
YYSIZE_T /usr/share/bison/bison.simple 140
YYSIZE_T /usr/share/bison/bison.simple 145
YYSIZE_T /usr/share/bison/bison.simple 51
YYSIZE_T /usr/share/bison/bison.simple 56
YYSIZE_T /usr/share/bison/bison.simple 71
YYSIZE_T /usr/share/bison/bison.simple 75
YYSIZE_T /usr/share/bison/bison.simple 128
YYSIZE_T /usr/share/bison/bison.simple 131
YYSIZE_T /usr/share/bison/bison.simple 136
YYSIZE_T /usr/share/bison/bison.simple 140
YYSIZE_T /usr/share/bison/bison.simple 145
YYSTACK_ALLOC /usr/share/bison/bison.simple 50
YYSTACK_ALLOC /usr/share/bison/bison.simple 55
YYSTACK_ALLOC /usr/share/bison/bison.simple 59
YYSTACK_ALLOC /usr/share/bison/bison.simple 78
YYSIZE_T /usr/share/bison/bison.simple 52
YYSIZE_T /usr/share/bison/bison.simple 57
YYSIZE_T /usr/share/bison/bison.simple 72
YYSIZE_T /usr/share/bison/bison.simple 76
YYSIZE_T /usr/share/bison/bison.simple 129
YYSIZE_T /usr/share/bison/bison.simple 132
YYSIZE_T /usr/share/bison/bison.simple 137
YYSIZE_T /usr/share/bison/bison.simple 141
YYSIZE_T /usr/share/bison/bison.simple 146
YYSTACK_ALLOC /usr/share/bison/bison.simple 50
YYSTACK_ALLOC /usr/share/bison/bison.simple 55
YYSTACK_ALLOC /usr/share/bison/bison.simple 59
YYSTACK_ALLOC /usr/share/bison/bison.simple 78
YYSTACK_ALLOC /usr/share/bison/bison.simple 51
YYSTACK_ALLOC /usr/share/bison/bison.simple 56
YYSTACK_ALLOC /usr/share/bison/bison.simple 60
YYSTACK_ALLOC /usr/share/bison/bison.simple 79
YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/
YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/
YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/
@ -1632,9 +1640,9 @@ YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/
YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/
YYSTACK_FREE /usr/share/bison/bison.simple 79
YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/
YYSTACK_FREE /usr/share/bison/bison.simple 79
YYSTACK_GAP_MAX /usr/share/bison/bison.simple 93
YYSTACK_FREE /usr/share/bison/bison.simple 80
YYSTACK_GAP_MAX /usr/share/bison/bison.simple 93
YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94
YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/
YYSTACK_RELOCATE /usr/share/bison/bison.simple 548
YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/
@ -1650,7 +1658,7 @@ YYSTYPE parse.y 72
YYSTYPE parse.y 85
YYSTYPE cccp.y 119
YYTERROR /usr/share/bison/bison.simple 177
YYTERROR /usr/share/bison/bison.simple 177
YYTERROR /usr/share/bison/bison.simple 178
YYTRANSLATE parse.y /^#define YYTRANSLATE(x) ((unsigned)(x) <= 278 ? yyt/
YYTRANSLATE cccp.y /^#define YYTRANSLATE(x) ((unsigned)(x) <= 269 ? yyt/
YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374
@ -2351,6 +2359,7 @@ __str__ pyt-src/server.py /^ def __str__(self):$/
__up c.c 160
_aligned_blocks c-src/emacs/src/gmalloc.c 1004
_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 518
_bar? ruby-src/test1.ruby /^ def self._bar?(abc)$/
_bytes_free c-src/emacs/src/gmalloc.c 376
_bytes_used c-src/emacs/src/gmalloc.c 374
_chunks_free c-src/emacs/src/gmalloc.c 375
@ -2402,8 +2411,8 @@ aaa c.c 269
aaaaaa c-src/h.h 111
abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/
abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/
abbrev_all_caps c-src/abbrev.c 57
abbrevs_changed c-src/abbrev.c 55
abbrev_all_caps c-src/abbrev.c 58
abbrevs_changed c-src/abbrev.c 56
abc c-src/h.h 33
abc c-src/h.h 37
abort-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/
@ -2620,10 +2629,7 @@ childDidExit objc-src/Subprocess.m /^- childDidExit$/
chunks_free c-src/emacs/src/gmalloc.c 313
chunks_used c-src/emacs/src/gmalloc.c 311
cjava c-src/etags.c 2936
instance_method ruby-src/test.rb /^ def instance_method$/
instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/
instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/
instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/
class_method ruby-src/test.rb /^ def ClassExample.class_method$/
classifyLine php-src/lce_functions.php /^ function classifyLine($line)$/
clear cp-src/conway.hpp /^ void clear(void) { alive = 0; }$/
clear-abbrev-table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, /
@ -2956,6 +2962,7 @@ foo f-src/entry.for /^ character*(*) function foo()$/
foo f-src/entry.strange_suffix /^ character*(*) function foo()$/
foo f-src/entry.strange /^ character*(*) function foo()$/
foo php-src/ptest.php /^foo()$/
foo! ruby-src/test1.ruby /^ def foo!$/
foobar c-src/c.c /^int foobar() {;}$/
foobar c.c /^extern void foobar (void) __attribute__ ((section /
foobar2 c-src/h.h 20
@ -3127,9 +3134,14 @@ input_polling_used c-src/emacs/src/keyboard.c /^input_polling_used (void)$/
input_was_pending c-src/emacs/src/keyboard.c 287
insert-abbrev-table-description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/
insertname pas-src/common.pas /^function insertname;(*($/
instance_method ruby-src/test.rb /^ def instance_method$/
instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/
instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/
instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/
instr y-src/parse.y 80
instr parse.y 80
instruct c-src/etags.c 2527
intNumber go-src/test1.go 13
integer c-src/emacs/src/lisp.h 2127
integer cccp.y 113
integer y-src/cccp.y 112
@ -3223,7 +3235,7 @@ lang c-src/etags.c 259
lang_names c-src/etags.c 718
language c-src/etags.c 199
last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/
last_abbrev_point c-src/abbrev.c 78
last_abbrev_point c-src/abbrev.c 79
last_auto_save c-src/emacs/src/keyboard.c 214
last_heapinfo c-src/emacs/src/gmalloc.c 402
last_mouse_button c-src/emacs/src/keyboard.c 5215
@ -3450,6 +3462,7 @@ miti html-src/softwarelibero.html /^Sfatiamo alcuni miti$/
modifier_names c-src/emacs/src/keyboard.c 6319
modifier_symbols c-src/emacs/src/keyboard.c 6327
modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/
module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/
module_instance_method ruby-src/test.rb /^ def module_instance_method$/
more_aligned_int c.c 165
morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/
@ -3732,6 +3745,7 @@ plain_C_suffixes c-src/etags.c 643
plainc c-src/etags.c 2934
plist c-src/emacs/src/lisp.h 697
plus cp-src/functions.cpp /^void Date::plus ( int days , int month , int year /
plus go-src/test1.go 5
plusvalseq prol-src/natded.prolog /^plusvalseq([]) --> [].$/
pointer c-src/emacs/src/lisp.h 2125
poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/
@ -3812,6 +3826,7 @@ quantizing html-src/algrthms.html /^Quantizing the Received$/
questo ../c/c.web 34
quit_char c-src/emacs/src/keyboard.c 192
quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/
qux= ruby-src/test1.ruby /^ def qux=(tee)$/
r0 c-src/sysdep.h 54
r1 c-src/sysdep.h 55
r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/
@ -3943,6 +3958,7 @@ save_getcjmp c-src/emacs/src/keyboard.c /^save_getcjmp (sys_jmp_buf temp)$/
save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/
savenstr c-src/etags.c /^savenstr (const char *cp, int len)$/
savestr c-src/etags.c /^savestr (const char *cp)$/
say go-src/test.go /^func say(msg string) {$/
scan_separators c-src/etags.c /^scan_separators (char *name)$/
scolonseen c-src/etags.c 2447
scratch c-src/sysdep.h 56
@ -4068,6 +4084,7 @@ step cp-src/clheir.hpp /^ virtual void step(void) { }$/
step_everybody cp-src/clheir.cpp /^void step_everybody(void)$/
stop_polling c-src/emacs/src/keyboard.c /^stop_polling (void)$/
store_user_signal_events c-src/emacs/src/keyboard.c /^store_user_signal_events (void)$/
str go-src/test1.go 9
strcaseeq c-src/etags.c /^#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=/
streq c-src/etags.c /^#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL/
string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/
@ -4210,6 +4227,7 @@ terminateInput objc-src/Subprocess.m /^- terminateInput$/
test c-src/emacs/src/lisp.h 1871
test cp-src/c.C 86
test erl-src/gs_dialog.erl /^test() ->$/
test go-src/test1.go /^func test(p plus) {$/
test php-src/ptest.php /^test $/
test.me22b lua-src/test.lua /^ local function test.me22b (one)$/
test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/
@ -4415,13 +4433,13 @@ y cp-src/clheir.hpp 49
y cp-src/clheir.hpp 58
y-get-selection-internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/
yyalloc /usr/share/bison/bison.simple 83
yyalloc /usr/share/bison/bison.simple 83
yyalloc /usr/share/bison/bison.simple 84
yycheck parse.y 330
yycheck cccp.y 301
yyclearin /usr/share/bison/bison.simple 149
yyclearin /usr/share/bison/bison.simple 149
yydebug /usr/share/bison/bison.simple 237
yyclearin /usr/share/bison/bison.simple 150
yydebug /usr/share/bison/bison.simple 237
yydebug /usr/share/bison/bison.simple 238
yydefact parse.y 219
yydefact cccp.y 239
yydefgoto parse.y 237
@ -4431,7 +4449,7 @@ yyerrhandle /usr/share/bison/bison.simple 848
yyerrlab1 /usr/share/bison/bison.simple 823
yyerrlab1 /usr/share/bison/bison.simple 823
yyerrok /usr/share/bison/bison.simple 148
yyerrok /usr/share/bison/bison.simple 148
yyerrok /usr/share/bison/bison.simple 149
yyerror cccp.y /^yyerror (s)$/
yyerror y-src/cccp.y /^yyerror (s)$/
yyerrstatus /usr/share/bison/bison.simple 846
@ -4439,14 +4457,14 @@ yyerrstatus /usr/share/bison/bison.simple 846
yylex cccp.y /^yylex ()$/
yylex y-src/cccp.y /^yylex ()$/
yyls /usr/share/bison/bison.simple 88
yyls /usr/share/bison/bison.simple 88
yyls /usr/share/bison/bison.simple 89
yylsp /usr/share/bison/bison.simple 748
yylsp /usr/share/bison/bison.simple 921
yylsp /usr/share/bison/bison.simple 748
yylsp /usr/share/bison/bison.simple 921
yymemcpy /usr/share/bison/bison.simple 264
yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/
yymemcpy /usr/share/bison/bison.simple 264
yymemcpy /usr/share/bison/bison.simple 265
yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/
yyn /usr/share/bison/bison.simple 755
yyn /usr/share/bison/bison.simple 861
@ -4487,7 +4505,7 @@ yyrhs cccp.y 174
yyrline parse.y 171
yyrline cccp.y 195
yyss /usr/share/bison/bison.simple 85
yyss /usr/share/bison/bison.simple 85
yyss /usr/share/bison/bison.simple 86
yystate /usr/share/bison/bison.simple 757
yystate /usr/share/bison/bison.simple 761
yystate /usr/share/bison/bison.simple 875
@ -4498,11 +4516,11 @@ yystate /usr/share/bison/bison.simple 875
yystate /usr/share/bison/bison.simple 924
yystpcpy /usr/share/bison/bison.simple 316
yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/
yystpcpy /usr/share/bison/bison.simple 316
yystpcpy /usr/share/bison/bison.simple 317
yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/
yystrlen /usr/share/bison/bison.simple 293
yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/
yystrlen /usr/share/bison/bison.simple 293
yystrlen /usr/share/bison/bison.simple 294
yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/
yystype cccp.y 118
yytable parse.y 269
@ -4512,7 +4530,7 @@ yytname cccp.y 208
yytranslate parse.y 101
yytranslate cccp.y 135
yyvs /usr/share/bison/bison.simple 86
yyvs /usr/share/bison/bison.simple 86
yyvs /usr/share/bison/bison.simple 87
yyvsp /usr/share/bison/bison.simple 746
yyvsp /usr/share/bison/bison.simple 919
yyvsp /usr/share/bison/bison.simple 746

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,7 @@ ELSRC=$(addprefix ./el-src/,TAGTEST.EL emacs/lisp/progmodes/etags.el)
ERLSRC=$(addprefix ./erl-src/,gs_dialog.erl)
FORTHSRC=$(addprefix ./forth-src/,test-forth.fth)
FSRC=$(addprefix ./f-src/,entry.for entry.strange_suffix entry.strange)
GOSRC=$(addprefix ./go-src/,test.go test1.go)
HTMLSRC=$(addprefix ./html-src/,softwarelibero.html index.shtml algrthms.html software.html)
#JAVASRC=$(addprefix ./java-src/, )
LUASRC=$(addprefix ./lua-src/,allegro.lua test.lua)
@ -27,9 +28,9 @@ RBSRC=$(addprefix ./ruby-src/,test.rb test1.ruby)
TEXSRC=$(addprefix ./tex-src/,testenv.tex gzip.texi texinfo.tex nonewline.tex)
YSRC=$(addprefix ./y-src/,parse.y parse.c atest.y cccp.c cccp.y)
SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
${RBSRC} ${TEXSRC} ${YSRC}
${FORTHSRC} ${GOSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC}\
${OBJCSRC} ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC}\
${PROLSRC} ${PYTSRC} ${RBSRC} ${TEXSRC} ${YSRC}
NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
ETAGS_PROG=../../../lib-src/etags

View file

@ -5,3 +5,25 @@ class A
def b()
end
end
module A
class B
ABC = 4
def foo!
end
def self._bar?(abc)
end
class << self
def qux=(tee)
end
end
end
end
A::Constant = 5
# def foo_in_comment
# end