From 7b05466ff6721988517519081078b19fffeecd09 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Wed, 14 Apr 2010 03:43:54 +0300 Subject: [PATCH] Add variable scroll-error-top-bottom. http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00403.html * simple.el (scroll-error-top-bottom): New defcustom. (scroll-up-command, scroll-down-command): Use it. Doc fix. * emulation/pc-select.el (pc-select-override-scroll-error): Obsolete in favor of `scroll-error-top-bottom'. --- etc/NEWS | 5 +++-- lisp/ChangeLog | 8 ++++++++ lisp/emulation/pc-select.el | 3 +++ lisp/simple.el | 30 ++++++++++++++++++++++++------ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index b559b9c93a6..6bb48fe59b0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -69,8 +69,9 @@ Use `set-scroll-bar-mode' to change this. with Xft. ** New scrolling commands `scroll-up-command' and `scroll-down-command' -(bound to [next] and [prior]) does not signal errors at top/bottom -of buffer at first key-press (instead moves to top/bottom of buffer). +(bound to C-v/[next] and M-v/[prior]) does not signal errors at top/bottom +of buffer at first key-press (instead moves to top/bottom of buffer) +when a new variable `scroll-error-top-bottom' is non-nil. ** New scrolling commands `scroll-up-line' and `scroll-down-line' scroll a line instead of full screen. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 01bfbf55434..89d56ffd323 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,13 @@ 2010-04-14 Juri Linkov + * simple.el (scroll-error-top-bottom): New defcustom. + (scroll-up-command, scroll-down-command): Use it. Doc fix. + + * emulation/pc-select.el (pc-select-override-scroll-error): + Obsolete in favor of `scroll-error-top-bottom'. + +2010-04-14 Juri Linkov + * tutorial.el (tutorial--default-keys): Rebind `C-v' to `scroll-up-command' and `M-v' to `scroll-down-command'. diff --git a/lisp/emulation/pc-select.el b/lisp/emulation/pc-select.el index 175999b6e37..529ba290cb8 100644 --- a/lisp/emulation/pc-select.el +++ b/lisp/emulation/pc-select.el @@ -93,6 +93,9 @@ text with these commands. If you set this variable to non-nil, these errors are suppressed." :type 'boolean :group 'pc-select) +(define-obsolete-variable-alias 'pc-select-override-scroll-error + 'scroll-error-top-bottom + "24.1") (defcustom pc-select-selection-keys-only nil "*Non-nil means only bind the basic selection keys when started. diff --git a/lisp/simple.el b/lisp/simple.el index 60fe6c875d2..34e31b10276 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -4744,20 +4744,34 @@ This also turns on `word-wrap' in the buffer." ;;; of buffer at first key-press (instead moves to top/bottom ;;; of buffer). +(defcustom scroll-error-top-bottom nil + "Move point to top/bottom of buffer before signalling a scrolling error. +A value of nil means just signal an error if no more scrolling possible. +A value of t means point moves to the beginning or the end of the buffer +\(depending on scrolling direction) when no more scrolling possible. +When point is already on that position, then signal an error." + :type 'boolean + :group 'scrolling + :version "24.1") + (defun scroll-up-command (&optional arg) "Scroll text of selected window upward ARG lines; or near full screen if no ARG. -If `scroll-up' cannot scroll window further, move cursor to the bottom line. +If `scroll-error-top-bottom' is non-nil and `scroll-up' cannot +scroll window further, move cursor to the bottom line. When point is already on that position, then signal an error. A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll downward. If ARG is the atom `-', scroll downward by nearly full screen." (interactive "^P") (cond - ((eq arg '-) (scroll-down-command nil)) + ((null scroll-error-top-bottom) + (scroll-up arg)) + ((eq arg '-) + (scroll-down-command nil)) ((< (prefix-numeric-value arg) 0) (scroll-down-command (- (prefix-numeric-value arg)))) ((eobp) - (scroll-up arg)) ; signal error + (scroll-up arg)) ; signal error (t (condition-case nil (scroll-up arg) @@ -4775,18 +4789,22 @@ If ARG is the atom `-', scroll downward by nearly full screen." (defun scroll-down-command (&optional arg) "Scroll text of selected window down ARG lines; or near full screen if no ARG. -If `scroll-down' cannot scroll window further, move cursor to the top line. +If `scroll-error-top-bottom' is non-nil and `scroll-down' cannot +scroll window further, move cursor to the top line. When point is already on that position, then signal an error. A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll upward. If ARG is the atom `-', scroll upward by nearly full screen." (interactive "^P") (cond - ((eq arg '-) (scroll-up-command nil)) + ((null scroll-error-top-bottom) + (scroll-down arg)) + ((eq arg '-) + (scroll-up-command nil)) ((< (prefix-numeric-value arg) 0) (scroll-up-command (- (prefix-numeric-value arg)))) ((bobp) - (scroll-down arg)) ; signal error + (scroll-down arg)) ; signal error (t (condition-case nil (scroll-down arg) -- 2.11.4.GIT