* Re: window-scroll-functions called too often
[not found] <871wqzqxxp.fsf@cut.bc.hsia.telus.net>
@ 2006-09-03 15:17 ` Richard Stallman
2006-09-03 19:41 ` Ryan Yeske
2006-09-09 18:46 ` Ryan Yeske
0 siblings, 2 replies; 8+ messages in thread
From: Richard Stallman @ 2006-09-03 15:17 UTC (permalink / raw)
Cc: emacs-devel
It seems unreasonable to put a hook on window-scroll-functions which
scrolls the window differently. The intended use of that hook is to
to whatever is necessary to support the scrolling that the user wants
to do, not override it. So I am not really surprised that this does
not work.
What problem are you trying to solve?
You wrote:
(defun foo-scroll (window display-start)
(message "foo-scroll %S %S" window (current-time))
(when (and window (window-live-p window))
(with-selected-window window
(when (>= (window-point) (mark))
(save-excursion
(recenter -1))))))
(add-hook 'window-scroll-functions 'foo-scroll nil t)
;;; 1 - hit C-SPC to set the mark on this line somewhere
;;
;;; 2 - hit C-l here to force a call to `foo-scroll'
;;
;;; 3 - C-n, C-p, C-a will all result in `foo-scroll' being called now
;;
;;; 4 - C-p until you are above line 1 and back down and notice C-a
;;; doesnt trigger `foo-scroll', even when you move below line 1
;;; again
In rcirc, I am using a scroll-function, like the one above, and it is
being called on every keypress once recenter has been called once. Is
this an emacs bug? If not, how do I suppress those subsequent calls
cleanly?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-03 15:17 ` window-scroll-functions called too often Richard Stallman
@ 2006-09-03 19:41 ` Ryan Yeske
2006-09-04 17:17 ` Richard Stallman
2006-09-09 18:46 ` Ryan Yeske
1 sibling, 1 reply; 8+ messages in thread
From: Ryan Yeske @ 2006-09-03 19:41 UTC (permalink / raw)
Cc: emacs-devel
Richard Stallman <rms@gnu.org> writes:
> It seems unreasonable to put a hook on window-scroll-functions which
> scrolls the window differently. The intended use of that hook is to
> to whatever is necessary to support the scrolling that the user wants
> to do, not override it. So I am not really surprised that this does
> not work.
>
> What problem are you trying to solve?
A simple way to keep the point at the bottom of the window in rcirc
buffers when messages come in, on user input, when splitting windows,
and when resizing the minibuffer. Using window-scroll-functions is
the only way I've been able to have it work the way I like (and how I
think users expect).
In `rcirc-mode' I have:
(add-hook 'window-scroll-functions 'rcirc-scroll-to-bottom nil t)
And the function:
(defun rcirc-scroll-to-bottom (window display-start)
"Scroll window to show maximum output if `rcirc-show-maximum-output' is non-nil."
(when rcirc-show-maximum-output
(with-selected-window window
(when (>= (window-point) rcirc-prompt-end-marker)
(recenter -1)))))
The above is adapted from similar code in erc-goodies.el.
Ryan
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-03 19:41 ` Ryan Yeske
@ 2006-09-04 17:17 ` Richard Stallman
2006-09-05 1:34 ` Miles Bader
2006-09-08 0:19 ` Ryan Yeske
0 siblings, 2 replies; 8+ messages in thread
From: Richard Stallman @ 2006-09-04 17:17 UTC (permalink / raw)
Cc: emacs-devel
A simple way to keep the point at the bottom of the window in rcirc
buffers when messages come in, on user input, when splitting windows,
and when resizing the minibuffer.
I suggest you copy the method used by comint.
It works.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-04 17:17 ` Richard Stallman
@ 2006-09-05 1:34 ` Miles Bader
2006-09-08 0:19 ` Ryan Yeske
1 sibling, 0 replies; 8+ messages in thread
From: Miles Bader @ 2006-09-05 1:34 UTC (permalink / raw)
Cc: Ryan Yeske, emacs-devel
Richard Stallman <rms@gnu.org> writes:
> A simple way to keep the point at the bottom of the window in rcirc
> buffers when messages come in, on user input, when splitting windows,
> and when resizing the minibuffer.
>
> I suggest you copy the method used by comint.
> It works.
But please make it optional; I absolutely hate that behavior.
Thanks,
-Miles
--
"An atheist doesn't have to be someone who thinks he has a proof that there
can't be a god. He only has to be someone who believes that the evidence
on the God question is at a similar level to the evidence on the werewolf
question." [John McCarthy]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-04 17:17 ` Richard Stallman
2006-09-05 1:34 ` Miles Bader
@ 2006-09-08 0:19 ` Ryan Yeske
2006-09-08 15:11 ` Richard Stallman
1 sibling, 1 reply; 8+ messages in thread
From: Ryan Yeske @ 2006-09-08 0:19 UTC (permalink / raw)
Cc: emacs-devel
I suggest you copy the method used by comint.
It works.
Here is patch for a simplified version of the comint method. It just
scrolls to keep the point at the bottom of the window on user input
and on incoming text.
2006-09-07 Ryan Yeske <rcyeske@gmail.com>
* rcirc.el (rcirc-scroll-show-maximum-output): Rename from
rcirc-show-maximum-output.
(rcirc-mode): Remove window-scroll-function hook.
(rcirc-scroll-to-bottom): Remove function.
(rcirc-print): Recenter so point stays at the bottom of the window
if point was already there.
*** rcirc.el 05 Sep 2006 12:14:49 -0700 1.26
--- rcirc.el 07 Sep 2006 17:01:51 -0700
***************
*** 142,148 ****
(integer :tag "Number of lines"))
:group 'rcirc)
! (defcustom rcirc-show-maximum-output t
"*If non-nil, scroll buffer to keep the point at the bottom of
the window."
:type 'boolean
--- 142,148 ----
(integer :tag "Number of lines"))
:group 'rcirc)
! (defcustom rcirc-scroll-show-maximum-output t
"*If non-nil, scroll buffer to keep the point at the bottom of
the window."
:type 'boolean
***************
*** 762,769 ****
(add-hook 'change-major-mode-hook 'rcirc-change-major-mode-hook nil t)
(add-hook 'kill-buffer-hook 'rcirc-kill-buffer-hook nil t)
- (add-hook 'window-scroll-functions 'rcirc-scroll-to-bottom nil t)
-
;; add to buffer list, and update buffer abbrevs
(when target ; skip server buffer
(let ((buffer (current-buffer)))
--- 762,767 ----
***************
*** 1166,1179 ****
(defvar rcirc-last-sender nil)
(make-variable-buffer-local 'rcirc-last-sender)
- (defun rcirc-scroll-to-bottom (window display-start)
- "Scroll window to show maximum output if `rcirc-show-maximum-output' is
- non-nil."
- (when rcirc-show-maximum-output
- (with-selected-window window
- (when (>= (window-point) rcirc-prompt-end-marker)
- (recenter -1)))))
-
(defun rcirc-print (process sender response target text &optional activity)
"Print TEXT in the buffer associated with TARGET.
Format based on SENDER and RESPONSE. If ACTIVITY is non-nil,
--- 1164,1169 ----
***************
*** 1252,1268 ****
;; set the window point for buffers show in windows
(walk-windows (lambda (w)
! (unless (eq (selected-window) w)
! (when (and (eq (current-buffer)
! (window-buffer w))
! (>= (window-point w)
! rcirc-prompt-end-marker))
! (set-window-point w (point-max)))))
nil t)
;; restore the point
(goto-char (if moving rcirc-prompt-end-marker old-point))
;; flush undo (can we do something smarter here?)
(buffer-disable-undo)
(buffer-enable-undo))
--- 1242,1275 ----
;; set the window point for buffers show in windows
(walk-windows (lambda (w)
! (when (and (not (eq (selected-window) w))
! (eq (current-buffer)
! (window-buffer w))
! (>= (window-point w)
! rcirc-prompt-end-marker))
! (set-window-point w (point-max))))
nil t)
;; restore the point
(goto-char (if moving rcirc-prompt-end-marker old-point))
+ ;; keep window on bottom line if it was already there
+ (when rcirc-scroll-show-maximum-output
+ (walk-windows (lambda (w)
+ (when (eq (window-buffer w) (current-buffer))
+ (with-current-buffer (window-buffer w)
+ (when (eq major-mode 'rcirc-mode)
+ (with-selected-window w
+ (when (<= (- (window-height)
+ (- (line-number-at-pos
+ (window-point))
+ (line-number-at-pos
+ (window-start)))
+ 1)
+ 0)
+ (recenter -1)))))))
+ nil t))
+
;; flush undo (can we do something smarter here?)
(buffer-disable-undo)
(buffer-enable-undo))
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-08 0:19 ` Ryan Yeske
@ 2006-09-08 15:11 ` Richard Stallman
0 siblings, 0 replies; 8+ messages in thread
From: Richard Stallman @ 2006-09-08 15:11 UTC (permalink / raw)
Cc: emacs-devel
If nobody shows a problem with your change in a few days, please
install it. Thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-03 15:17 ` window-scroll-functions called too often Richard Stallman
2006-09-03 19:41 ` Ryan Yeske
@ 2006-09-09 18:46 ` Ryan Yeske
2006-09-10 13:04 ` Richard Stallman
1 sibling, 1 reply; 8+ messages in thread
From: Ryan Yeske @ 2006-09-09 18:46 UTC (permalink / raw)
Cc: emacs-devel
Richard Stallman <rms@gnu.org> writes:
> It seems unreasonable to put a hook on window-scroll-functions which
> scrolls the window differently. The intended use of that hook is to
> to whatever is necessary to support the scrolling that the user
> wants to do, not override it. So I am not really surprised that
> this does not work.
I think the `window-scroll-functions' documentation should explicitly
mention that the intention is not to override the. I originally
thought that this would be the very place to hook in my own scroll
code.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: window-scroll-functions called too often
2006-09-09 18:46 ` Ryan Yeske
@ 2006-09-10 13:04 ` Richard Stallman
0 siblings, 0 replies; 8+ messages in thread
From: Richard Stallman @ 2006-09-10 13:04 UTC (permalink / raw)
Cc: emacs-devel
I think the `window-scroll-functions' documentation should explicitly
mention that the intention is not to override the. I originally
thought that this would be the very place to hook in my own scroll
code.
I put this in the Lisp Manual. Thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-09-10 13:04 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <871wqzqxxp.fsf@cut.bc.hsia.telus.net>
2006-09-03 15:17 ` window-scroll-functions called too often Richard Stallman
2006-09-03 19:41 ` Ryan Yeske
2006-09-04 17:17 ` Richard Stallman
2006-09-05 1:34 ` Miles Bader
2006-09-08 0:19 ` Ryan Yeske
2006-09-08 15:11 ` Richard Stallman
2006-09-09 18:46 ` Ryan Yeske
2006-09-10 13:04 ` Richard Stallman
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.