]> git.eshelyaron.com Git - emacs.git/commitdiff
(keyboard-escape-quit): New command.
authorRichard M. Stallman <rms@gnu.org>
Mon, 28 Nov 1994 19:44:16 +0000 (19:44 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 28 Nov 1994 19:44:16 +0000 (19:44 +0000)
(beginning-of-buffer, end-of-buffer):
With argument, calculate fraction wrt accessible portion of buffer.

lisp/simple.el

index 14e2c68aa149d8e6574a72a343c177da0fc04bc5..157a5cb90d06f64392faa82a40e4c84340278600 100644 (file)
@@ -248,37 +248,46 @@ Goes backward if ARG is negative; error if CHAR not found."
 
 (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 @@ At top-level, as an editor command, this simply beeps."
   (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)
 \f
 (defun set-variable (var val)
   "Set VARIABLE to VALUE.  VALUE is a Lisp object.