=== modified file 'lisp/face-remap.el'
--- lisp/face-remap.el 2012-07-10 11:51:54 +0000
+++ lisp/face-remap.el 2012-09-11 13:18:59 +0000
@@ -281,22 +281,26 @@
;;;###autoload (define-key ctl-x-map [(control ?+)] 'text-scale-adjust)
;;;###autoload (define-key ctl-x-map [(control ?-)] 'text-scale-adjust)
-;;;###autoload (define-key ctl-x-map [(control ?=)] 'text-scale-adjust)
;;;###autoload (define-key ctl-x-map [(control ?0)] 'text-scale-adjust)
;;;###autoload
-(defun text-scale-adjust (inc)
- "Increase or decrease the height of the default face in the current buffer.
+(defun text-scale-adjust (inc &optional mod)
+ "Adjust the height of the default face by INC.
+
+INC may be passed as a numeric prefix argument.
+
+The optional argument MOD is used internally to pass the previous
+modifier to the command, when used repeatedly.
The actual adjustment made depends on the final component of the
-key-binding used to invoke the command, with all modifiers removed:
+keybinding used to invoke the command.
- +, = Increase the default face height by one step
+ + Increase the default face height by one step
- Decrease the default face height by one step
0 Reset the default face height to the global default
-Then, continue to read input events and further adjust the face
-height as long as the input event read (with all modifiers removed)
-is one of the above.
+After the first invokation, continue to read input events and
+further adjust the face height as long as the input event read
+is `+' or `-'.
Each step scales the height of the default face by the variable
`text-scale-mode-step' (a negative number of steps decreases the
@@ -309,30 +313,15 @@
a top-level keymap, `text-scale-increase' or
`text-scale-decrease' may be more appropriate."
(interactive "p")
- (let ((first t)
- (ev last-command-event)
- (echo-keystrokes nil))
- (let* ((base (event-basic-type ev))
- (step
- (pcase base
- ((or ?+ ?=) inc)
- (?- (- inc))
- (?0 0)
- (t inc))))
- (text-scale-increase step)
- ;; FIXME: do it after every "iteration of the loop".
- (message "+,-,0 for further adjustment: ")
- (set-temporary-overlay-map
- (let ((map (make-sparse-keymap)))
- (dolist (mods '(() (control)))
- (define-key map (vector (append mods '(?-))) 'text-scale-decrease)
- (define-key map (vector (append mods '(?+))) 'text-scale-increase)
- ;; = is unshifted + on most keyboards.
- (define-key map (vector (append mods '(?=))) 'text-scale-increase)
- (define-key map (vector (append mods '(?0)))
- (lambda () (interactive) (text-scale-increase 0))))
- map)
- t))))
+ (let* ((ev (or (event-basic-type (or mod last-command-event))))
+ (step (pcase ev (?+ inc) (?- (- inc)) (?0 0) (t inc)))
+ c)
+ (text-scale-increase step)
+ (when (and (not (zerop step))
+ (setq c (read-event "Hit + or - for further adjustment, RET to finish")))
+ (cond ((member (event-basic-type c) '(?+ ?-))
+ (text-scale-adjust (abs step) c))
+ (t (message "Done"))))))
;; ----------------------------------------------------------------