=== 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")))))) ;; ----------------------------------------------------------------