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.