mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-22 07:09:54 +00:00
Merge from origin/emacs-29
871cf33a45
; * admin/make-tarball.txt: Minor copyedit.4faebba2fe
Fix invocation of File->Close from the menu barcd05fca5f7
; Improve documentation of 'native-comp-enable-subr-tramp...c61a30e160
Update thumbnail buffer's header more4c49452cde
(treesit-query-validate): Fix reusing the output bufferd560dc5044
(rust-ts-mode--font-lock-settings): Highlight closure par...c15bc91e1b
* Fix `native-comp-enable-subr-trampolines' semantic774051873d
Fix documentation of 'just-one-space' and 'delete-horizon...7337f07250
; Remove NEWS entry about deleted variable.fb5299ba09
; Fix wording of last change.9f508cef85
Fix 'display-buffer-use-least-recent-window'5190ea6259
Fix point moving when calling python-shell-send-region6c0d821017
(project-try-vc): Remove unused defvar/require4f9862e435
; Fix typoa638c79bc5
Delete redundant question from Gnus FAQ4a90d67eb6
Slightly improve hashcash documentation6ea3c105ab
Fix cursor motion when there's line-prefix and display st...e985466556
Fix comment in treesit_record_change (bug#61369)1e5cebc88b
Spell out RPN abbreviation in Calc manual intro # Conflicts: # etc/NEWS # lisp/window.el
This commit is contained in:
commit
34f44ae07e
@ -150,10 +150,11 @@ General steps (for each step, check for possible errors):
|
||||
4. autoreconf -i -I m4 --force
|
||||
make bootstrap
|
||||
|
||||
The below script checks for any mistakes in the source text of
|
||||
manual pages. Fix any errors and re-run the script to verify.
|
||||
|
||||
./admin/check-man-pages
|
||||
|
||||
The above script checks for any mistakes in the source text of
|
||||
manual pages. Fix any errors and re-run the script to verify.
|
||||
Then do this:
|
||||
|
||||
make -C etc/refcards
|
||||
|
@ -1120,16 +1120,18 @@ the trampoline generation, unless you know that all the trampolines
|
||||
needed by your Lisp programs are already compiled and accessible to
|
||||
Emacs.
|
||||
|
||||
The value of this variable can also be a string, in which case it is
|
||||
interpreted as the name of a directory in which to store the generated
|
||||
trampoline @file{*.eln} files, overriding the directories specified by
|
||||
The value of this variable can also be a string, in which case it
|
||||
specifies the name of a directory in which to store the generated
|
||||
trampoline @file{*.eln} files, overriding the directories in
|
||||
@code{native-comp-eln-load-path}. This is useful if you want the
|
||||
trampolines to be generated as needed, but don't want to store them
|
||||
under the user's @env{HOME} directory or the other public directories
|
||||
where @file{*.eln} files are kept. However, unlike with directories
|
||||
in @code{native-comp-eln-load-path}, the trampolines will be stored in
|
||||
the directory given by the value of this variable, not in its
|
||||
version-specific subdirectory.
|
||||
under the user's @env{HOME} directory or in the other public
|
||||
directories where @file{*.eln} files are kept. However, unlike with
|
||||
directories in @code{native-comp-eln-load-path}, the trampolines will
|
||||
be stored in the directory given by the value of this variable, not in
|
||||
its version-specific subdirectory. If the name of this directory is
|
||||
not absolute, it is interpreted relative to
|
||||
@code{invocation-directory} (@pxref{System Environment})
|
||||
|
||||
If this variable is non-@code{nil}, and Emacs needs to produce a
|
||||
trampoline, but it cannot find any writable directory to store the
|
||||
|
@ -629,6 +629,12 @@ example, by calling @code{select-window} with argument @var{norecord}
|
||||
@code{nil}. Hence, this macro is the preferred way to temporarily work
|
||||
with @var{window} as the selected window without needlessly running
|
||||
@code{buffer-list-update-hook}.
|
||||
|
||||
Note that this macro temporarily puts the window management code in an
|
||||
unstable state. In particular, the most recently used window (see below)
|
||||
will not necessarily match the selected one. Hence, functions like
|
||||
@code{get-lru-window} and @code{get-mru-window} may return unexpected
|
||||
results when called from the body of this macro.
|
||||
@end defmac
|
||||
|
||||
@defmac with-selected-frame frame forms@dots{}
|
||||
@ -650,15 +656,17 @@ 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}).
|
||||
used window. The window with the highest use time is called the most
|
||||
recently used one (@pxref{Cyclic Window Ordering}) and is usually the
|
||||
selected window unless @code{with-selected-window} has been used.
|
||||
@end defun
|
||||
|
||||
@defun window-bump-use-time &optional window
|
||||
This function marks @var{window} as being the most recently used
|
||||
one. This can be useful when writing certain @code{pop-to-buffer}
|
||||
scenarios (@pxref{Switching Buffers}). @var{window} must be a live
|
||||
window and defaults to the selected one.
|
||||
This function marks @var{window} as being the second most recently
|
||||
used one (after the selected window). It does nothing if @var{window}
|
||||
is the selected window or the selected window does not have the
|
||||
highest use time among all windows which may happen within the scope
|
||||
of @code{with-selected-window}.
|
||||
@end defun
|
||||
|
||||
@anchor{Window Group}Sometimes several windows collectively and
|
||||
@ -2755,14 +2763,40 @@ before.
|
||||
|
||||
@defun display-buffer-use-some-window buffer alist
|
||||
This function tries to display @var{buffer} by choosing an existing
|
||||
window and displaying the buffer in that window. It can fail if all
|
||||
windows are dedicated to other buffers (@pxref{Dedicated Windows}).
|
||||
window and displaying the buffer in that window. It first tries to find
|
||||
a window that has not been used recently (@pxref{Cyclic Window
|
||||
Ordering}) on any frame specified by a @code{lru-frames} @var{alist}
|
||||
entry, falling back to the selected frame if no such entry exists. It
|
||||
also prefers windows that satisfy the constraints specified by
|
||||
@code{window-min-width} and @code{window-min-height} @var{alist}
|
||||
entries; preferring full-width windows if no @code{window-min-width}
|
||||
entry is found. Finally, it will not return a window whose use time is
|
||||
higher than that specified by any @code{lru-time} entry provided by
|
||||
@var{alist}.
|
||||
|
||||
If no less recently used window is found, this function will try to use
|
||||
some other window, preferably a large window on some visible frame. It
|
||||
can fail if all windows are dedicated to other buffers (@pxref{Dedicated
|
||||
Windows}).
|
||||
@end defun
|
||||
|
||||
@defun display-buffer-use-least-recent-window buffer alist
|
||||
This function is like @code{display-buffer-use-some-window}, but will
|
||||
not reuse the current window, and will use the least recently
|
||||
switched-to window.
|
||||
This function is similar to @code{display-buffer-use-some-window}, but
|
||||
will try harder to not use the a recently used window. In particular,
|
||||
it does not use the selected window. In addition, it will first try to
|
||||
reuse a window that shows @var{buffer} already, base the decision
|
||||
whether it should use a window showing another buffer on that window's
|
||||
use time alone and pop up a new window if no usable window is found.
|
||||
|
||||
Finally, this function will bump the use time (@pxref{Selecting
|
||||
Windows}) of any window it returns in order to avoid that further
|
||||
invocations will use that window for showing another buffer. An
|
||||
application that wants to display several buffers in a row can help this
|
||||
function by providing a @code{lru-time} @var{alist} entry it has
|
||||
initially set to the value of the selected window's use time. Each
|
||||
invocation of this function will then bump the use time of the window
|
||||
returned to a value higher than that and a subsequent invocation will
|
||||
inhibit this function to use a window it returned earlier.
|
||||
@end defun
|
||||
|
||||
@defun display-buffer-in-direction buffer alist
|
||||
@ -3032,12 +3066,40 @@ The value specifies an alist of window parameters to give the chosen
|
||||
window. All action functions that choose a window should process this
|
||||
entry.
|
||||
|
||||
@vindex window-min-width@r{, a buffer display action alist entry}
|
||||
@item window-min-width
|
||||
The value specifies a minimum width of the window used, in canonical
|
||||
frame columns. The special value @code{full-width} means the chosen
|
||||
window should be one that has no other windows on the left or right of
|
||||
it in its frame.
|
||||
|
||||
This entry is currently honored by @code{display-buffer-use-some-window}
|
||||
and @code{display-buffer-use-least-recent-window}, which try hard to avoid
|
||||
returning a less recently used window that does not satisfy the entry.
|
||||
|
||||
Note that providing such an entry alone does not necessarily make the
|
||||
window as wide as specified by its value. To actually resize an
|
||||
existing window or make a new window as wide as specified by this
|
||||
entry's value, a @code{window-width} entry specifying that value
|
||||
should be provided as well. Such a @code{window-width} entry can,
|
||||
however, specify a completely different value, or ask the window width
|
||||
to fit that of its buffer, in which case the
|
||||
@code{window-min-width} entry provides the guaranteed minimum width of
|
||||
the window.
|
||||
|
||||
@vindex window-min-height@r{, a buffer display action alist entry}
|
||||
@item window-min-height
|
||||
The value specifies a minimum height of the window used, in lines. If
|
||||
a window is not or cannot be made as high as specified by this entry,
|
||||
the window is not considered for use. The only client of this entry
|
||||
is presently @code{display-buffer-below-selected}.
|
||||
The value specifies a minimum height of the window used, in canonical
|
||||
frame lines. The special value @code{full-height} means the chosen
|
||||
window should be a full-height window, one that has no other windows
|
||||
above or below it in its frame.
|
||||
|
||||
This entry is currently honored by @code{display-buffer-below-selected}
|
||||
which does not use a window that is not as high as specified by this
|
||||
entry. It's also honored by @code{display-buffer-use-some-window} and
|
||||
@code{display-buffer-use-least-recent-window} which try hard to avoid
|
||||
returning a less recently used window if it does not satisfy this
|
||||
constraint.
|
||||
|
||||
Note that providing such an entry alone does not necessarily make the
|
||||
window as tall as specified by its value. To actually resize an
|
||||
@ -3166,6 +3228,40 @@ preserve both, its width and its height. This entry should be
|
||||
processed only under certain conditions which are specified right
|
||||
after this list.
|
||||
|
||||
@vindex lru-frames@r{, a buffer display action alist entry}
|
||||
@item lru-frames
|
||||
The value specifies the set of frames to search for a window that can be
|
||||
used to display the buffer. It is honored by
|
||||
@code{display-buffer-use-some-window} and
|
||||
@code{display-buffer-use-least-recent-window} when trying to find a less
|
||||
recently used window showing some other buffer. Its values are the same
|
||||
as for the @code{reusable-frames} entry described above.
|
||||
|
||||
@vindex lru-time@r{, a buffer display action alist entry}
|
||||
@item lru-time
|
||||
The value is supposed to specify a use time (@pxref{Selecting Windows}).
|
||||
This entry is honored by @code{display-buffer-use-some-window} and
|
||||
@code{display-buffer-use-least-recent-window} when trying to find a less
|
||||
recently used window showing some other buffer. If a window's use time
|
||||
is higher than the value specified by this option, these action
|
||||
functions will not consider such a window for displaying the buffer.
|
||||
|
||||
@vindex bump-use-time@r{, a buffer display action alist entry}
|
||||
@item bump-use-time
|
||||
If non-@code{nil}, such an entry will cause @code{display-buffer} to
|
||||
bump the use time (@pxref{Selecting Windows}) of the window it uses.
|
||||
This should avoid later use of this window by action functions
|
||||
like @code{display-buffer-use-some-window} and
|
||||
@code{display-buffer-use-least-recent-window} for showing another
|
||||
buffer.
|
||||
|
||||
There is a fine difference between using this entry and using the action
|
||||
function @code{display-buffer-use-least-recent-window}. Calling the
|
||||
latter means to only bump the use times of windows that function uses
|
||||
for displaying the buffer. The entry described here will cause
|
||||
@code{display-buffer} to bump the use time of @emph{any} window used for
|
||||
displaying a buffer.
|
||||
|
||||
@vindex pop-up-frame-parameters@r{, a buffer display action alist entry}
|
||||
@item pop-up-frame-parameters
|
||||
The value specifies an alist of frame parameters to give a new frame,
|
||||
@ -3321,13 +3417,6 @@ window has at least that many columns. If the value is @code{nil},
|
||||
that means not to split this way.
|
||||
@end defopt
|
||||
|
||||
@defopt display-buffer-avoid-small-windows
|
||||
If non-@code{nil}, this should be a number. Windows that have fewer
|
||||
lines than that will be avoided when choosing an existing window. The
|
||||
value is interpreted in units of the frame's canonical line height,
|
||||
like @code{window-total-height} does (@pxref{Window Sizes}).
|
||||
@end defopt
|
||||
|
||||
@defopt even-window-sizes
|
||||
This variable, if non-@code{nil}, causes @code{display-buffer} to even
|
||||
window sizes whenever it reuses an existing window, and that window is
|
||||
@ -3992,54 +4081,80 @@ related to the new window. For non-input related actions
|
||||
@code{display-buffer-below-selected} might be preferable because the
|
||||
selected window usually already has the user's attention.
|
||||
|
||||
@item Handle subsequent invocations of @code{display-buffer}
|
||||
@code{display-buffer} is not overly well suited for displaying several
|
||||
buffers in sequence and making sure that all these buffers are shown
|
||||
orderly in the resulting window configuration. Again, the standard
|
||||
action functions @code{display-buffer-pop-up-window} and
|
||||
@code{display-buffer-use-some-window} are not very suited for this
|
||||
purpose due to their somewhat chaotic nature in more complex
|
||||
configurations.
|
||||
@item Take care which window is selected
|
||||
Many applications call @code{display-buffer} from within window
|
||||
excursions produced by @code{with-selected-window} or
|
||||
@code{select-window} calls with a non-@code{nil} @var{norecord}
|
||||
argument. This is almost always a bad idea because the window selected
|
||||
within such an excursion is usually not the window selected in the
|
||||
configuration presented to the user.
|
||||
|
||||
To produce a window configuration displaying multiple buffers (or
|
||||
different views of one and the same buffer) in one and the same
|
||||
display cycle, Lisp programmers will unavoidably have to write
|
||||
their own action functions. A few tricks listed below might help in
|
||||
this regard.
|
||||
If, for example, a user had added an @code{inhibit-same-window} alist
|
||||
entry, that entry would have avoided the window selected within the
|
||||
scope of the excursion and not the window selected in the resulting
|
||||
configuration. Even if no such entry has been added, the resulting
|
||||
behavior might be strange. While in a frame containing one live
|
||||
window, evaluating the following form
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Making windows atomic (@pxref{Atomic Windows}) avoids breaking an
|
||||
existing window composition when popping up a new window.
|
||||
The new window will pop up outside the composition instead.
|
||||
@example
|
||||
@group
|
||||
(progn
|
||||
(split-window)
|
||||
(display-buffer "*Messages*"))
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@item
|
||||
Temporarily dedicating windows to their buffers (@pxref{Dedicated
|
||||
Windows}) avoids using a window for displaying a different
|
||||
buffer. A non-dedicated window will be used instead.
|
||||
@noindent
|
||||
will display a window showing the @file{*Messages*} buffer at the bottom
|
||||
and leave the other window selected. Evaluating the next form
|
||||
|
||||
@item
|
||||
Calling @code{window-preserve-size} (@pxref{Preserving Window Sizes})
|
||||
will try to keep the size of the argument window unchanged when
|
||||
popping up a new window. You have to make sure that another window in
|
||||
the same combination can be shrunk instead, though.
|
||||
@example
|
||||
@group
|
||||
(with-selected-window (split-window)
|
||||
(display-buffer "*Messages*"))
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@item
|
||||
Side windows (@pxref{Side Windows}) can be used for displaying
|
||||
specific buffers always in a window at the same position of a frame.
|
||||
This permits grouping buffers that do not compete for being shown at
|
||||
the same time on a frame and showing any such buffer in the same window
|
||||
without disrupting the display of other buffers.
|
||||
@noindent
|
||||
will display @file{*Messages*} in a window on the top and select it
|
||||
which is usually not what @code{display-buffer} is supposed to do.
|
||||
|
||||
@item
|
||||
Child frames (@pxref{Child Frames}) can be used to display a buffer
|
||||
within the screen estate of the selected frame without disrupting that
|
||||
frame's window configuration and without the overhead associated with
|
||||
full-fledged frames as inflicted by @code{display-buffer-pop-up-frame}.
|
||||
@end itemize
|
||||
On the other hand, while evaluating the following form
|
||||
|
||||
@example
|
||||
@group
|
||||
(progn
|
||||
(split-window)
|
||||
(pop-to-buffer "*Messages*"))
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will correctly select the @file{*Messages*} buffer, the next form
|
||||
|
||||
@example
|
||||
@group
|
||||
(progn
|
||||
(split-window)
|
||||
(with-selected-window (selected-window)
|
||||
(pop-to-buffer "*Messages*")))
|
||||
@end group
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will not.
|
||||
|
||||
Also, invocations of action functions like
|
||||
@code{display-buffer-use-some-window} and
|
||||
@code{display-buffer-use-least-recent-window} that expect the selected
|
||||
window to have the highest use time among all windows, may fail to
|
||||
produce a window according to their specifications.
|
||||
|
||||
Hence, an application that relies on using a window excursion should try
|
||||
to postpone the @code{display-buffer} call until after the excursion has
|
||||
terminated.
|
||||
@end table
|
||||
|
||||
|
||||
@node Window History
|
||||
@section Window History
|
||||
@cindex window history
|
||||
|
@ -232,7 +232,8 @@ series of calculators, its many features include:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Choice of algebraic or RPN (stack-based) entry of calculations.
|
||||
Choice of algebraic or Reverse Polish notation (RPN),
|
||||
i.e. stack-based, entry of calculations.
|
||||
|
||||
@item
|
||||
Arbitrary precision integers and floating-point numbers.
|
||||
@ -421,8 +422,8 @@ difference between lower-case and upper-case letters. Remember,
|
||||
@key{RET}, @key{TAB}, @key{DEL}, and @key{SPC} are the Return, Tab,
|
||||
Delete, and Space keys.
|
||||
|
||||
@strong{RPN calculation.} In RPN, you type the input number(s) first,
|
||||
then the command to operate on the numbers.
|
||||
@strong{RPN calculation.} In Reverse Polish notation (RPN), you type
|
||||
the input number(s) first, then the command to operate on the numbers.
|
||||
|
||||
@noindent
|
||||
Type @kbd{2 @key{RET} 3 + Q} to compute
|
||||
@ -1348,18 +1349,19 @@ to control various modes of the Calculator.
|
||||
@subsection RPN Calculations and the Stack
|
||||
|
||||
@cindex RPN notation
|
||||
@cindex Reverse Polish notation
|
||||
@noindent
|
||||
@ifnottex
|
||||
Calc normally uses RPN notation. You may be familiar with the RPN
|
||||
system from Hewlett-Packard calculators, FORTH, or PostScript.
|
||||
(Reverse Polish Notation, RPN, is named after the Polish mathematician
|
||||
Jan Lukasiewicz.)
|
||||
Calc normally uses Reverse Polish notation (RPN). You may be familiar
|
||||
with the RPN system from Hewlett-Packard calculators, FORTH, or
|
||||
PostScript. (Reverse Polish Notation is named after the Polish
|
||||
mathematician Jan Lukasiewicz.)
|
||||
@end ifnottex
|
||||
@tex
|
||||
Calc normally uses RPN notation. You may be familiar with the RPN
|
||||
system from Hewlett-Packard calculators, FORTH, or PostScript.
|
||||
(Reverse Polish Notation, RPN, is named after the Polish mathematician
|
||||
Jan \L ukasiewicz.)
|
||||
Calc normally uses Reverse Polish notation (RPN). You may be familiar
|
||||
with the RPN system from Hewlett-Packard calculators, FORTH, or
|
||||
PostScript. (Reverse Polish Notation is named after the Polish
|
||||
mathematician Jan \L ukasiewicz.)
|
||||
@end tex
|
||||
|
||||
The central component of an RPN calculator is the @dfn{stack}. A
|
||||
|
@ -76,16 +76,15 @@ misprints are the Gnus team's fault, sorry.
|
||||
@subsection Installation FAQ
|
||||
|
||||
@menu
|
||||
* FAQ 1-1:: What is the latest version of Gnus?
|
||||
* FAQ 1-2:: Where and how to get Gnus?
|
||||
* FAQ 1-3:: I sometimes read references to No Gnus and Oort Gnus,
|
||||
* FAQ 1-1:: Where can I get the latest version of Gnus?
|
||||
* FAQ 1-2:: I sometimes read references to No Gnus and Oort Gnus,
|
||||
what are those?
|
||||
@end menu
|
||||
|
||||
@node FAQ 1-1
|
||||
@subsubheading Question 1.1
|
||||
|
||||
What is the latest version of Gnus?
|
||||
What is the latest version of Gnus and where can I find it?
|
||||
|
||||
@subsubheading Answer
|
||||
|
||||
@ -94,15 +93,6 @@ The latest version of Gnus is bundled with Emacs.
|
||||
@node FAQ 1-2
|
||||
@subsubheading Question 1.2
|
||||
|
||||
Where and how to get Gnus?
|
||||
|
||||
@subsubheading Answer
|
||||
|
||||
Gnus is bundled with Emacs.
|
||||
|
||||
@node FAQ 1-3
|
||||
@subsubheading Question 1.3
|
||||
|
||||
I sometimes read references to No Gnus and Oort Gnus,
|
||||
what are those?
|
||||
|
||||
|
@ -1161,12 +1161,6 @@ and 'C-x w 3', respectively. A number of other useful window-related
|
||||
commands are now available with key sequences that start with the
|
||||
'C-x w' prefix.
|
||||
|
||||
+++
|
||||
*** New user option 'display-buffer-avoid-small-windows'.
|
||||
If non-nil, this should be a window height in lines, a number.
|
||||
Windows smaller than this will be avoided by 'display-buffer', if
|
||||
possible.
|
||||
|
||||
+++
|
||||
*** New display action 'display-buffer-full-frame'.
|
||||
This action removes other windows from the frame when displaying a
|
||||
|
@ -483,7 +483,7 @@ Return them as multiple value."
|
||||
;;; Union specific code.
|
||||
|
||||
(defun comp-cstr-union-homogeneous-no-range (dst &rest srcs)
|
||||
"As `comp-cstr-union' but escluding the irange component.
|
||||
"As `comp-cstr-union' but excluding the irange component.
|
||||
All SRCS constraints must be homogeneously negated or non-negated."
|
||||
|
||||
;; Type propagation.
|
||||
|
@ -3794,7 +3794,8 @@ Return the trampoline if found or nil otherwise."
|
||||
"Return the absolute filename for a trampoline for SUBR-NAME."
|
||||
(cl-loop
|
||||
with dirs = (if (stringp native-comp-enable-subr-trampolines)
|
||||
(list native-comp-enable-subr-trampolines)
|
||||
(list (expand-file-name native-comp-enable-subr-trampolines
|
||||
invocation-directory))
|
||||
(if native-compile-target-directory
|
||||
(list (expand-file-name comp-native-version-dir
|
||||
native-compile-target-directory))
|
||||
|
@ -162,8 +162,10 @@ dialogs. Otherwise, the function will always use text-mode dialogs.
|
||||
|
||||
The return value is the matching entry from the CHOICES list.
|
||||
|
||||
If LONG-FORM, do a `completing-read' over the NAME elements in
|
||||
CHOICES instead.
|
||||
If LONG-FORM is non-nil, do a `completing-read' over the NAME elements
|
||||
in CHOICES instead. In this case, GUI dialog is not used, regardless
|
||||
of the value of `use-dialog-box' and whether the function was invoked
|
||||
via a mouse gesture.
|
||||
|
||||
Usage example:
|
||||
|
||||
@ -177,8 +179,9 @@ Usage example:
|
||||
prompt choices help-string show-help)))
|
||||
|
||||
(defun read-multiple-choice--short-answers (prompt choices help-string show-help)
|
||||
(let* ((prompt-choices
|
||||
(if show-help choices (append choices '((?? "?")))))
|
||||
(let* ((dialog-p (use-dialog-box-p))
|
||||
(prompt-choices
|
||||
(if (or show-help dialog-p) choices (append choices '((?? "?")))))
|
||||
(altered-names (mapcar #'rmc--add-key-description prompt-choices))
|
||||
(full-prompt
|
||||
(format
|
||||
@ -192,16 +195,14 @@ Usage example:
|
||||
(setq buf (rmc--show-help prompt help-string show-help
|
||||
choices altered-names)))
|
||||
(while (not tchar)
|
||||
(message "%s%s"
|
||||
(if wrong-char
|
||||
"Invalid choice. "
|
||||
"")
|
||||
full-prompt)
|
||||
(unless dialog-p
|
||||
(message "%s%s"
|
||||
(if wrong-char
|
||||
"Invalid choice. "
|
||||
"")
|
||||
full-prompt))
|
||||
(setq tchar
|
||||
(if (and (display-popup-menus-p)
|
||||
last-input-event ; not during startup
|
||||
(consp last-nonmenu-event)
|
||||
use-dialog-box)
|
||||
(if dialog-p
|
||||
(x-popup-dialog
|
||||
t
|
||||
(cons prompt
|
||||
|
@ -1926,9 +1926,10 @@ no, only reply back to the author."
|
||||
"Whether to generate X-Hashcash: headers.
|
||||
If t, always generate hashcash headers. If `opportunistic',
|
||||
only generate hashcash headers if it can be done without the user
|
||||
waiting (i.e., only asynchronously).
|
||||
waiting (i.e., only asynchronously). If nil, don't generate
|
||||
hashcash headers.
|
||||
|
||||
You must have the \"hashcash\" binary installed, see `hashcash-path'."
|
||||
You must have the \"hashcash\" binary installed, see `hashcash-program'."
|
||||
:version "24.1"
|
||||
:group 'message-headers
|
||||
:link '(custom-manual "(message)Mail Headers")
|
||||
|
@ -593,7 +593,8 @@ thumbnail buffer to be selected."
|
||||
(if do-not-pop
|
||||
(display-buffer buf)
|
||||
(pop-to-buffer buf))
|
||||
(image-dired--line-up-with-method))))
|
||||
(image-dired--line-up-with-method)
|
||||
(image-dired--update-header-line))))
|
||||
|
||||
;;;###autoload
|
||||
(defun image-dired-show-all-from-dir (dir)
|
||||
|
@ -25,16 +25,16 @@
|
||||
|
||||
;; The hashcash binary is at http://www.hashcash.org/.
|
||||
;;
|
||||
;; Call mail-add-payment to add a hashcash payment to a mail message
|
||||
;; Call `mail-add-payment' to add a hashcash payment to a mail message
|
||||
;; in the current buffer.
|
||||
;;
|
||||
;; Call mail-add-payment-async after writing the addresses but before
|
||||
;; writing the mail to start calculating the hashcash payment
|
||||
;; Call `mail-add-payment-async' after writing the addresses but
|
||||
;; before writing the mail to start calculating the hashcash payment
|
||||
;; asynchronously.
|
||||
;;
|
||||
;; The easiest way to do this automatically for all outgoing mail
|
||||
;; is to set `message-generate-hashcash' to t. If you want more
|
||||
;; control, try the following hooks.
|
||||
;; The easiest way to do this automatically for all outgoing mail is
|
||||
;; to set `message-generate-hashcash' to `opportunistic' or t. If you
|
||||
;; want more control, try the following hooks.
|
||||
;;
|
||||
;; To automatically add payments to all outgoing mail when sending:
|
||||
;; (add-hook 'message-send-hook 'mail-add-payment)
|
||||
@ -44,6 +44,8 @@
|
||||
;;
|
||||
;; To check whether calculations are done before sending:
|
||||
;; (add-hook 'message-send-hook 'hashcash-wait-or-cancel)
|
||||
;;
|
||||
;; For more information, see Info node `(gnus) Hashcash'.
|
||||
|
||||
;;; Code:
|
||||
|
||||
@ -87,7 +89,9 @@ is used instead."
|
||||
(define-obsolete-variable-alias 'hashcash-path 'hashcash-program "24.4")
|
||||
(defcustom hashcash-program "hashcash"
|
||||
"The name of the hashcash executable.
|
||||
If this is not in your PATH, specify an absolute file name."
|
||||
If this is not in your PATH, specify an absolute file name.
|
||||
|
||||
See also `message-generate-hashcash'."
|
||||
:type '(choice (const nil) file))
|
||||
|
||||
(defcustom hashcash-extra-generate-parameters '("-Z2")
|
||||
|
@ -1,7 +1,7 @@
|
||||
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
|
||||
;; Version: 0.9.7
|
||||
;; Version: 0.9.8
|
||||
;; Package-Requires: ((emacs "26.1") (xref "1.4.0"))
|
||||
|
||||
;; This is a GNU ELPA :core package. Avoid using functionality that
|
||||
@ -512,8 +512,6 @@ project backend implementation of `project-external-roots'.")
|
||||
See `project-vc-extra-root-markers' for the marker value format.")
|
||||
|
||||
(defun project-try-vc (dir)
|
||||
(defvar vc-svn-admin-directory)
|
||||
(require 'vc-svn)
|
||||
;; FIXME: Learn to invalidate when the value of
|
||||
;; `project-vc-merge-submodules' or `project-vc-extra-root-markers'
|
||||
;; changes.
|
||||
|
@ -3759,14 +3759,15 @@ the python shell:
|
||||
whitespaces will be removed. Otherwise, wraps indented
|
||||
regions under an \"if True:\" block so the interpreter
|
||||
evaluates them correctly."
|
||||
(let* ((single-p (save-restriction
|
||||
(narrow-to-region start end)
|
||||
(= (progn
|
||||
(goto-char start)
|
||||
(python-nav-beginning-of-statement))
|
||||
(progn
|
||||
(goto-char end)
|
||||
(python-nav-beginning-of-statement)))))
|
||||
(let* ((single-p (save-excursion
|
||||
(save-restriction
|
||||
(narrow-to-region start end)
|
||||
(= (progn
|
||||
(goto-char start)
|
||||
(python-nav-beginning-of-statement))
|
||||
(progn
|
||||
(goto-char end)
|
||||
(python-nav-beginning-of-statement))))))
|
||||
(start (save-excursion
|
||||
;; If we're at the start of the expression, and if
|
||||
;; the region consists of a single statement, then
|
||||
@ -3785,10 +3786,11 @@ the python shell:
|
||||
(line-beginning-position)
|
||||
start))))
|
||||
(substring (buffer-substring-no-properties start end))
|
||||
(starts-at-first-line-p (save-restriction
|
||||
(widen)
|
||||
(goto-char start)
|
||||
(= (line-number-at-pos) 1)))
|
||||
(starts-at-first-line-p (save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(goto-char start)
|
||||
(= (line-number-at-pos) 1))))
|
||||
(encoding (python-info-encoding))
|
||||
(toplevel-p (zerop (save-excursion
|
||||
(goto-char start)
|
||||
|
@ -158,6 +158,7 @@
|
||||
(macro_definition (identifier) @font-lock-preprocessor-face)
|
||||
(field_declaration name: (field_identifier) @font-lock-property-face)
|
||||
(parameter pattern: (_) @rust-ts-mode--fontify-pattern)
|
||||
(closure_parameters (_) @rust-ts-mode--fontify-pattern)
|
||||
(let_declaration pattern: (_) @rust-ts-mode--fontify-pattern)
|
||||
(for_expression pattern: (_) @rust-ts-mode--fontify-pattern)
|
||||
(let_condition pattern: (_) @rust-ts-mode--fontify-pattern)
|
||||
|
@ -1088,7 +1088,8 @@ Leave one space or none, according to the context."
|
||||
|
||||
(defun delete-horizontal-space (&optional backward-only)
|
||||
"Delete all spaces and tabs around point.
|
||||
If BACKWARD-ONLY is non-nil, delete them only before point."
|
||||
If BACKWARD-ONLY is non-nil (interactively, the prefix argument), delete
|
||||
them only before point."
|
||||
(interactive "*P")
|
||||
(delete-space--internal " \t" backward-only))
|
||||
|
||||
@ -1114,6 +1115,7 @@ If BACKWARD-ONLY is non-nil, delete them only before point."
|
||||
|
||||
(defun just-one-space (&optional n)
|
||||
"Delete all spaces and tabs around point, leaving one space (or N spaces).
|
||||
Interactively, N is the prefix numeric argument.
|
||||
If N is negative, delete newlines as well, leaving -N spaces.
|
||||
See also `cycle-spacing'."
|
||||
(interactive "*p")
|
||||
@ -10832,7 +10834,8 @@ If the buffer doesn't exist, create it first."
|
||||
'((?y "yes" "kill buffer without saving")
|
||||
(?n "no" "exit without doing anything")
|
||||
(?s "save and then kill" "save the buffer and then kill it"))
|
||||
nil nil (not use-short-answers)))))
|
||||
nil nil (and (not use-short-answers)
|
||||
(not (use-dialog-box-p)))))))
|
||||
(if (equal response "no")
|
||||
nil
|
||||
(unless (equal response "yes")
|
||||
|
@ -1204,6 +1204,11 @@ See `treesit-simple-indent-presets'.")
|
||||
(cons 'grand-parent
|
||||
(lambda (_n parent &rest _)
|
||||
(treesit-node-start (treesit-node-parent parent))))
|
||||
(cons 'great-grand-parent
|
||||
(lambda (_n parent &rest _)
|
||||
(treesit-node-start
|
||||
(treesit-node-parent
|
||||
(treesit-node-parent parent)))))
|
||||
(cons 'parent-bol (lambda (_n parent &rest _)
|
||||
(save-excursion
|
||||
(goto-char (treesit-node-start parent))
|
||||
@ -2462,7 +2467,8 @@ to the offending pattern and highlight the pattern."
|
||||
(with-current-buffer buf
|
||||
(let* ((data (cdr err))
|
||||
(message (nth 0 data))
|
||||
(start (nth 1 data)))
|
||||
(start (nth 1 data))
|
||||
(inhibit-read-only t))
|
||||
(erase-buffer)
|
||||
(insert (treesit-query-expand query))
|
||||
(goto-char start)
|
||||
|
169
lisp/window.el
169
lisp/window.el
@ -2484,14 +2484,6 @@ and no others."
|
||||
|
||||
(defalias 'some-window 'get-window-with-predicate)
|
||||
|
||||
(defcustom display-buffer-avoid-small-windows nil
|
||||
"If non-nil, windows that have fewer lines than this are avoided.
|
||||
This is used by `get-lru-window'. The value is interpreted in units
|
||||
of the frame's canonical line height, like `window-total-height' does."
|
||||
:type '(choice (const nil) number)
|
||||
:version "29.1"
|
||||
:group 'windows)
|
||||
|
||||
(defun get-lru-window (&optional all-frames dedicated not-selected no-other)
|
||||
"Return the least recently used window on frames specified by ALL-FRAMES.
|
||||
Return a full-width window if possible. A minibuffer window is
|
||||
@ -2517,11 +2509,7 @@ have special meanings:
|
||||
- A frame means consider all windows on that frame only.
|
||||
|
||||
Any other value of ALL-FRAMES means consider all windows on the
|
||||
selected frame and no others.
|
||||
|
||||
`display-buffer-avoid-small-windows', if non-nil, is also taken into
|
||||
consideration. Windows whose height is smaller that the value of that
|
||||
variable will be avoided if larger windows are available."
|
||||
selected frame and no others."
|
||||
(declare (side-effect-free error-free))
|
||||
(let ((windows (window-list-1 nil 'nomini all-frames))
|
||||
best-window best-time second-best-window second-best-time time)
|
||||
@ -2532,9 +2520,6 @@ variable will be avoided if larger windows are available."
|
||||
(not (window-parameter window 'no-other-window))))
|
||||
(setq time (window-use-time window))
|
||||
(if (or (eq window (selected-window))
|
||||
(and display-buffer-avoid-small-windows
|
||||
(< (window-height window)
|
||||
display-buffer-avoid-small-windows))
|
||||
(not (window-full-width-p window)))
|
||||
(when (or (not second-best-time) (< time second-best-time))
|
||||
(setq second-best-time time)
|
||||
@ -7283,6 +7268,11 @@ entry. Otherwise, if WINDOW is new and the value of
|
||||
dedicated flag to that value. In any other case, reset WINDOW's
|
||||
dedicated flag to nil.
|
||||
|
||||
If ALIST contains a non-nil `bump-use-time' entry, bump use time
|
||||
of WINDOW so further calls of `display-buffer-use-some-window'
|
||||
and `display-buffer-use-least-recent-window' will try to avoid
|
||||
it.
|
||||
|
||||
Return WINDOW if BUFFER and WINDOW are live."
|
||||
(when (and (buffer-live-p buffer) (window-live-p window))
|
||||
(display-buffer-record-window type window buffer)
|
||||
@ -7290,6 +7280,10 @@ Return WINDOW if BUFFER and WINDOW are live."
|
||||
;; Unless WINDOW already shows BUFFER reset its dedicated flag.
|
||||
(set-window-dedicated-p window nil)
|
||||
(set-window-buffer window buffer))
|
||||
(when (cdr (assq 'bump-use-time alist))
|
||||
;; Bump WINDOW's use time so 'display-buffer--lru-window' will try
|
||||
;; to avoid it.
|
||||
(window-bump-use-time window))
|
||||
(let ((alist-dedicated (assq 'dedicated alist)))
|
||||
;; Maybe dedicate WINDOW to BUFFER if asked for.
|
||||
(cond
|
||||
@ -8511,15 +8505,64 @@ indirectly called by the latter."
|
||||
(when (setq window (or best-window second-best-window))
|
||||
(window--display-buffer buffer window 'reuse alist))))
|
||||
|
||||
(defun display-buffer-use-least-recent-window (buffer alist)
|
||||
"Display BUFFER in an existing window, but that hasn't been used lately.
|
||||
This `display-buffer' action function is like
|
||||
`display-buffer-use-some-window', but will cycle through windows
|
||||
when displaying buffers repeatedly, and if there's only a single
|
||||
window, it will split the window."
|
||||
(when-let ((window (display-buffer-use-some-window
|
||||
buffer (cons (cons 'inhibit-same-window t) alist))))
|
||||
(window-bump-use-time window)))
|
||||
(defun display-buffer--lru-window (alist)
|
||||
"Return the least recently used window according to ALIST.
|
||||
Do not return a minibuffer window or a window dedicated to its
|
||||
buffer. ALIST is a buffer display action alist as compiled by
|
||||
`display-buffer'. The following ALIST entries are honored:
|
||||
|
||||
- `lru-frames' specifies the frames to investigate and has the
|
||||
same meaning as the ALL-FRAMES argument of `get-lru-window'.
|
||||
|
||||
- `lru-time' specifies a use time. Do not return a window whose
|
||||
use time is higher than this.
|
||||
|
||||
- `window-min-width' specifies a preferred minimum width in
|
||||
canonical frame columns. If it is the constant `full-width',
|
||||
prefer a full-width window.
|
||||
|
||||
- `window-min-height' specifies a preferred minimum height in
|
||||
canonical frame lines. If it is the constant `full-height',
|
||||
prefer a full-height window.
|
||||
|
||||
If ALIST contains a non-nil `inhibit-same--window' entry, do not
|
||||
return the selected window."
|
||||
(let ((windows
|
||||
(window-list-1 nil 'nomini (cdr (assq 'lru-frames alist))))
|
||||
(lru-time (cdr (assq 'lru-time alist)))
|
||||
(min-width (cdr (assq 'window-min-width alist)))
|
||||
(min-height (cdr (assq 'window-min-height alist)))
|
||||
(not-this-window (cdr (assq 'inhibit-same-window alist)))
|
||||
best-window best-time second-best-window second-best-time time)
|
||||
(dolist (window windows)
|
||||
(when (and (not (window-dedicated-p window))
|
||||
(or (not not-this-window)
|
||||
(not (eq window (selected-window)))))
|
||||
(setq time (window-use-time window))
|
||||
(unless (and (numberp lru-time) (> time lru-time))
|
||||
(if (or (eq window (selected-window))
|
||||
(and min-width
|
||||
(or (and (numberp min-width)
|
||||
(< (window-width window) min-width))
|
||||
(and (eq min-width 'full-width)
|
||||
(not (window-full-width-p window)))))
|
||||
(and min-height
|
||||
(or (and (numberp min-height)
|
||||
(< (window-height window) min-height))
|
||||
(and (eq min-height 'full-height)
|
||||
(not (window-full-height-p window))))))
|
||||
;; This window is either selected or does not meet the size
|
||||
;; restrictions - so it's only a second best choice. Try to
|
||||
;; find a more recently used one that fits.
|
||||
(when (or (not second-best-time) (< time second-best-time))
|
||||
(setq second-best-time time)
|
||||
(setq second-best-window window))
|
||||
;; This window is not selected and does meet the size
|
||||
;; restrictions. It's the best choice so far.
|
||||
(when (or (not best-time) (< time best-time))
|
||||
(setq best-time time)
|
||||
(setq best-window window))))))
|
||||
(or best-window second-best-window)))
|
||||
|
||||
(defun display-buffer-use-some-window (buffer alist)
|
||||
"Display BUFFER in an existing window.
|
||||
@ -8543,7 +8586,11 @@ indirectly called by the latter."
|
||||
(window--frame-usable-p (last-nonminibuffer-frame))))
|
||||
(window
|
||||
;; Reuse an existing window.
|
||||
(or (get-lru-window frame nil not-this-window)
|
||||
(or (display-buffer--lru-window
|
||||
;; If ALIST specifies 'lru-frames' or 'window-min-width'
|
||||
;; let them prevail.
|
||||
(append alist `((lru-frames . ,frame)
|
||||
(window-min-width . full-width))))
|
||||
(let ((window (get-buffer-window buffer 'visible)))
|
||||
(unless (and not-this-window
|
||||
(eq window (selected-window)))
|
||||
@ -8573,6 +8620,76 @@ indirectly called by the latter."
|
||||
(unless (cdr (assq 'inhibit-switch-frame alist))
|
||||
(window--maybe-raise-frame (window-frame window)))))))
|
||||
|
||||
(defun display-buffer-use-least-recent-window (buffer alist)
|
||||
"Display BUFFER trying to avoid windows used recently.
|
||||
This is similar to `display-buffer-use-some-window' but tries
|
||||
hard to avoid using a window recently used by `display-buffer'.
|
||||
|
||||
Distinctive features are:
|
||||
|
||||
- Do not use the selected window.
|
||||
|
||||
- Try first to reuse a window that shows BUFFER already on a
|
||||
frame specified by a `reusable-frames' ALIST entry, using the
|
||||
selected frame if no such entry has been specified.
|
||||
|
||||
- Next try to show BUFFER in the least recently used window. The
|
||||
frames to search for such a window can be specified via a
|
||||
`lru-frames' ALIST entry; if no such entry exists, search the
|
||||
selected frame only. In addition, try to satisfy constraints
|
||||
specified by the following ALIST entries, if present:
|
||||
|
||||
`lru-time' specifies a use time. Do not return a window whose
|
||||
use time is higher than this. When calling this action
|
||||
function repeatedly (presumably to display several buffers in
|
||||
a row), an application should first save the use time of the
|
||||
selected window and pass that same value via such an entry in
|
||||
each call of `display-buffer'. This reduces the probability
|
||||
that `display-buffer' uses the same window as a previous
|
||||
call.
|
||||
|
||||
`window-min-width' specifies a preferred minimum width in
|
||||
canonical frame columns. If it is the constant `full-width',
|
||||
prefer a full-width window.
|
||||
|
||||
`window-min-height' specifies a preferred minimum height in
|
||||
canonical frame lines. If it is the constant `full-height',
|
||||
prefer a full-height window.
|
||||
|
||||
- If the preceding steps fail, try to pop up a new window on the
|
||||
selected frame.
|
||||
|
||||
If a window is found, bump the use time of that window to the
|
||||
highest use time after the selected window. This makes it less
|
||||
probable that a future invocation of this function uses that
|
||||
window for another buffer."
|
||||
(let* ((alist (cons (cons 'inhibit-same-window t) alist))
|
||||
(window
|
||||
(or (display-buffer-reuse-window buffer alist)
|
||||
(let ((window (display-buffer--lru-window alist)))
|
||||
(when (window-live-p window)
|
||||
(let* ((quit-restore (window-parameter window 'quit-restore))
|
||||
(quad (nth 1 quit-restore)))
|
||||
;; If the window was used by `display-buffer' before, try to
|
||||
;; resize it to its old height but don't signal an error.
|
||||
(when (and (listp quad)
|
||||
(integerp (nth 3 quad))
|
||||
(> (nth 3 quad) (window-total-height window)))
|
||||
(condition-case nil
|
||||
(window-resize
|
||||
window (- (nth 3 quad) (window-total-height window)))
|
||||
(error nil)))
|
||||
(prog1
|
||||
(window--display-buffer buffer window 'reuse alist)
|
||||
(window--even-window-sizes window)
|
||||
(unless (cdr (assq 'inhibit-switch-frame alist))
|
||||
(window--maybe-raise-frame (window-frame window)))))))
|
||||
(display-buffer-pop-up-window buffer alist))))
|
||||
;; Don't bump use time twice.
|
||||
(when (and window (not (cdr (assq 'bump-use-time alist))))
|
||||
(window-bump-use-time window))
|
||||
window))
|
||||
|
||||
(defun display-buffer-no-window (_buffer alist)
|
||||
"Display BUFFER in no window.
|
||||
ALIST is an association list of action symbols and values. See
|
||||
|
@ -797,12 +797,10 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
|
||||
max (visible_beg, old_end_byte))
|
||||
- visible_beg);
|
||||
/* We don't clip new_end_offset under visible_end, because
|
||||
inserting in narrowed region always extends the visible
|
||||
region. If we clip new_end_offset here, and re-add the
|
||||
clipped "tail" in treesit_sync_visible_region later,
|
||||
while it is technically equivalent, tree-sitter's
|
||||
incremental parsing algorithm doesn't seem to like it
|
||||
(bug#61369). */
|
||||
otherwise we would miss updating the clipped part. Plus,
|
||||
when inserting in narrowed region, the narrowed region
|
||||
will grow to accommodate the new text, so this is the
|
||||
correct behavior. (Bug#61369). */
|
||||
ptrdiff_t new_end_offset = (max (visible_beg, new_end_byte)
|
||||
- visible_beg);
|
||||
eassert (start_offset <= old_end_offset);
|
||||
|
33
src/window.c
33
src/window.c
@ -762,10 +762,15 @@ future use. */)
|
||||
|
||||
DEFUN ("window-use-time", Fwindow_use_time, Swindow_use_time, 0, 1, 0,
|
||||
doc: /* Return the use time of window WINDOW.
|
||||
WINDOW must be a live window and defaults to the selected one.
|
||||
The window with the highest use time is the most recently selected
|
||||
one. The window with the lowest use time is the least recently
|
||||
selected one. */)
|
||||
WINDOW must specify a live window and defaults to the selected one.
|
||||
|
||||
The window with the highest use time is usually the one most recently
|
||||
selected by calling `select-window' with NORECORD nil. The window with
|
||||
the lowest use time is usually the least recently selected one chosen in
|
||||
such a way.
|
||||
|
||||
Note that the use time of a window can be also changed by calling
|
||||
`window-bump-use-time' for that window. */)
|
||||
(Lisp_Object window)
|
||||
{
|
||||
return make_fixnum (decode_live_window (window)->use_time);
|
||||
@ -773,15 +778,27 @@ selected one. */)
|
||||
|
||||
DEFUN ("window-bump-use-time", Fwindow_bump_use_time,
|
||||
Swindow_bump_use_time, 0, 1, 0,
|
||||
doc: /* Mark WINDOW as having been most recently used.
|
||||
WINDOW must be a live window and defaults to the selected one. */)
|
||||
doc: /* Mark WINDOW as second most recently used.
|
||||
WINDOW must specify a live window.
|
||||
|
||||
If WINDOW is not selected and the selected window has the highest use
|
||||
time of all windows, set the use time of WINDOW to that of the selected
|
||||
window, increase the use time of the selected window by one and return
|
||||
the new use time of WINDOW. Otherwise, do nothing and return nil. */)
|
||||
(Lisp_Object window)
|
||||
{
|
||||
struct window *w = decode_live_window (window);
|
||||
struct window *sw = XWINDOW (selected_window);
|
||||
|
||||
w->use_time = ++window_select_count;
|
||||
if (w != sw && sw->use_time == window_select_count)
|
||||
{
|
||||
w->use_time = window_select_count;
|
||||
sw->use_time = ++window_select_count;
|
||||
|
||||
return Qnil;
|
||||
return make_fixnum (w->use_time);
|
||||
}
|
||||
else
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
DEFUN ("window-pixel-width", Fwindow_pixel_width, Swindow_pixel_width, 0, 1, 0,
|
||||
|
@ -9609,8 +9609,8 @@ move_it_in_display_line_to (struct it *it,
|
||||
else
|
||||
line_number_pending = true;
|
||||
}
|
||||
/* If there's a line-/wrap-prefix, handle it. */
|
||||
if (it->method == GET_FROM_BUFFER)
|
||||
/* If there's a line-/wrap-prefix, handle it, if we didn't already. */
|
||||
if (it->area == TEXT_AREA && !it->string_from_prefix_prop_p)
|
||||
handle_line_prefix (it);
|
||||
}
|
||||
|
||||
|
@ -189,6 +189,14 @@ default to `point-min' and `point-max' respectively."
|
||||
(overlay-end overlay))))
|
||||
(buffer-substring-no-properties (point-min) (point-max)))))
|
||||
|
||||
(defun python-tests-should-not-move (func &rest args)
|
||||
"Assert that point does not move while calling FUNC with ARGS.
|
||||
Returns the value returned by FUNC."
|
||||
(let ((pos (point))
|
||||
(ret (apply func args)))
|
||||
(should (= pos (point)))
|
||||
ret))
|
||||
|
||||
(defun python-virt-bin (&optional virt-root)
|
||||
"Return the virtualenv bin dir, starting from VIRT-ROOT.
|
||||
If nil, VIRT-ROOT defaults to `python-shell-virtualenv-root'.
|
||||
@ -4213,7 +4221,8 @@ class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (buffer-string)
|
||||
(python-shell-buffer-substring (point-min) (point-max))))))
|
||||
(python-tests-should-not-move
|
||||
#'python-shell-buffer-substring (point-min) (point-max))))))
|
||||
|
||||
(ert-deftest python-shell-buffer-substring-2 ()
|
||||
"Main block should be removed if NOMAIN is non-nil."
|
||||
@ -4229,7 +4238,8 @@ if __name__ == \"__main__\":
|
||||
foo = Foo()
|
||||
print (foo)
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring (point-min) (point-max) t)
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring (point-min) (point-max) t)
|
||||
"
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
@ -4256,7 +4266,8 @@ if __name__ == \"__main__\":
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring (point-min) (point-max) t)
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring (point-min) (point-max) t)
|
||||
"
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
@ -4284,7 +4295,8 @@ if __name__ == \"__main__\":
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "class Foo(models.Model):")
|
||||
(progn (python-nav-forward-sexp) (point)))
|
||||
"# -*- coding: latin-1 -*-
|
||||
@ -4307,7 +4319,8 @@ if __name__ == \"__main__\":
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "class Bar(models.Model):")
|
||||
(progn (python-nav-forward-sexp) (point)))
|
||||
"# -*- coding: latin-1 -*-
|
||||
@ -4338,7 +4351,8 @@ if __name__ == \"__main__\":
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "# coding: latin-1")
|
||||
(python-tests-look-at "if __name__ == \"__main__\":"))
|
||||
"# -*- coding: latin-1 -*-
|
||||
@ -4365,7 +4379,8 @@ if __name__ == \"__main__\":
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "# coding: latin-1")
|
||||
(python-tests-look-at "if __name__ == \"__main__\":"))
|
||||
"# -*- coding: utf-8 -*-
|
||||
@ -4385,7 +4400,8 @@ class Foo(models.Model):
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring (point-min) (point-max))
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring (point-min) (point-max))
|
||||
"# coding: utf-8
|
||||
|
||||
|
||||
@ -4404,7 +4420,8 @@ class Foo(models.Model):
|
||||
class Bar(models.Model):
|
||||
pass
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(point-min)
|
||||
(python-tests-look-at "class Bar(models.Model):"))
|
||||
"# coding: utf-8
|
||||
@ -4421,7 +4438,8 @@ class Foo(models.Model):
|
||||
def foo():
|
||||
print ('a')
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "print ('a')")
|
||||
(point-max))
|
||||
"# -*- coding: utf-8 -*-\nif True:\n print ('a')\n\n"))))
|
||||
@ -4433,7 +4451,8 @@ def foo():
|
||||
def foo():
|
||||
print ('a')
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(progn
|
||||
(python-tests-look-at "print ('a')")
|
||||
(backward-char 1)
|
||||
@ -4451,7 +4470,8 @@ def foo():
|
||||
|
||||
print ('a')
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "# Whitespace")
|
||||
(point-max))
|
||||
"# -*- coding: utf-8 -*-\n\nif True:\n # Whitespace\n\n print ('a')\n\n"))))
|
||||
@ -4463,7 +4483,8 @@ def foo():
|
||||
def foo():
|
||||
a = 1
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "a = 1")
|
||||
(pos-eol))
|
||||
"# -*- coding: utf-8 -*-\n\na = 1"))))
|
||||
@ -4476,7 +4497,8 @@ def foo():
|
||||
a = \"\"\"Some
|
||||
string\"\"\"
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "a = \"\"\"Some")
|
||||
(pos-eol 2))
|
||||
"# -*- coding: utf-8 -*-\n\na = \"\"\"Some\n string\"\"\""))))
|
||||
@ -4488,7 +4510,8 @@ def foo():
|
||||
def foo():
|
||||
a = 1
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at " a = 1")
|
||||
(python-tests-look-at " = 1"))
|
||||
"# -*- coding: utf-8 -*-\n\na"))))
|
||||
@ -4500,7 +4523,8 @@ def foo():
|
||||
def foo():
|
||||
a = 1
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "1")
|
||||
(1+ (point)))
|
||||
"# -*- coding: utf-8 -*-\n\n1"))))
|
||||
@ -4515,7 +4539,8 @@ def foo():
|
||||
b = 2
|
||||
\"\"\"
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "a = 1")
|
||||
(python-tests-look-at "\"\"\""))
|
||||
"# -*- coding: utf-8 -*-\n\nif True:\n a = 1\n b = 2\n\n"))))
|
||||
@ -4525,7 +4550,8 @@ def foo():
|
||||
(python-tests-with-temp-buffer
|
||||
"s = 'test'
|
||||
"
|
||||
(should (string= (python-shell-buffer-substring
|
||||
(should (string= (python-tests-should-not-move
|
||||
#'python-shell-buffer-substring
|
||||
(python-tests-look-at "'test'")
|
||||
(pos-eol))
|
||||
"'test'"))))
|
||||
|
Loading…
Reference in New Issue
Block a user