Mercurial > emacs
changeset 10085:f7b9813ea757
(keyboard-escape-quit): New command.
(beginning-of-buffer, end-of-buffer):
With argument, calculate fraction wrt accessible portion of buffer.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 28 Nov 1994 19:44:16 +0000 |
parents | e930bf84753c |
children | 77b5eb8fc9e3 |
files | lisp/simple.el |
diffstat | 1 files changed, 47 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/simple.el Mon Nov 28 19:27:53 1994 +0000 +++ b/lisp/simple.el Mon Nov 28 19:44:16 1994 +0000 @@ -248,37 +248,46 @@ (defun beginning-of-buffer (&optional arg) "Move point to the beginning of the buffer; leave mark at previous position. -With arg N, put point N/10 of the way from the true beginning. +With arg N, put point N/10 of the way from the beginning. + +If the buffer is narrowed, this command uses the beginning and size +of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char (point-min)) is faster and avoids clobbering the mark." (interactive "P") (push-mark) - (goto-char (if arg - (if (> (buffer-size) 10000) - ;; Avoid overflow for large buffer sizes! - (* (prefix-numeric-value arg) - (/ (buffer-size) 10)) - (/ (+ 10 (* (buffer-size) (prefix-numeric-value arg))) 10)) - (point-min))) + (let ((size (- (point-max) (point-min)))) + (goto-char (if arg + (+ (point-min) + (if (> size 10000) + ;; Avoid overflow for large buffer sizes! + (* (prefix-numeric-value arg) + (/ size 10)) + (/ (+ 10 (* size (prefix-numeric-value arg))) 10))) + (point-min)))) (if arg (forward-line 1))) (defun end-of-buffer (&optional arg) "Move point to the end of the buffer; leave mark at previous position. -With arg N, put point N/10 of the way from the true end. +With arg N, put point N/10 of the way from the end. + +If the buffer is narrowed, this command uses the beginning and size +of the accessible part of the buffer. Don't use this command in Lisp programs! \(goto-char (point-max)) is faster and avoids clobbering the mark." (interactive "P") (push-mark) - (goto-char (if arg - (- (1+ (buffer-size)) - (if (> (buffer-size) 10000) - ;; Avoid overflow for large buffer sizes! - (* (prefix-numeric-value arg) - (/ (buffer-size) 10)) - (/ (* (buffer-size) (prefix-numeric-value arg)) 10))) - (point-max))) + (let ((size (- (point-max) (point-min)))) + (goto-char (if arg + (- (point-max) + (if (> size 10000) + ;; Avoid overflow for large buffer sizes! + (* (prefix-numeric-value arg) + (/ size 10)) + (/ (* size (prefix-numeric-value arg)) 10))) + (point-max)))) ;; If we went to a place in the middle of the buffer, ;; adjust it to the beginning of a line. (if arg (forward-line 1) @@ -2491,6 +2500,27 @@ (signal 'quit nil)) (define-key global-map "\C-g" 'keyboard-quit) + +(defun keyboard-escape-quit () + "Exit the current \"mode\" (in a generalized sense of the word). +This command can exit an interactive command such as `query-replace', +can clear out a prefix argument or a region, +can get out of the minibuffer or other recursive edit, +or delete other windows." + (interactive) + (cond ((eq last-command 'mode-exited) nil) + ((> (minibuffer-depth) 0) + (abort-recursive-edit)) + (current-prefix-arg + nil) + ((and transient-mark-mode + mark-active) + (deactivate-mark)) + ((not (one-window-p t)) + (delete-other-windows)))) + +;;; This may not be safe yet. +;;;(define-key global-map "\e\e\e" 'keyboard-escape-quit) (defun set-variable (var val) "Set VARIABLE to VALUE. VALUE is a Lisp object.