Subject: Re: bug#12345: 24.2.50; doc string of `text-scale-adjust'

From: Bastien <[email-masked]>
Date: Tue, 11 Sep 2012 19:36:56 +0200

Stefan Monnier <[email-masked]> writes:

>> I enhanced the docstring and rewrote the command so that it does
>> not use a temporary keymap.
>
> Not using a temporary keymap means reverting to the old code: please
> explain precisely why using a temporary keymap is a problem (there are
> good reasons to use it: e.g. it makes key-translation-map and friends
> work correctly).

Here is another patch, using ̀set-temporary-overlay-map'.

It fixes the problem with the message disappearing.

It fixed another problem: the fact that in the current version,
INC is always 1 when using the command repeatedly, as we would
expect 

C-u 4 C-x C-+ +

to increase by INC = 4 then again by INC = 4 again -- right now
it increase by INC = 4 on the first hit, then INC = 1 on the 
second.  

It also changes the behavior regarding C-x C-0, which ends
the loop.

Let me know what you think,

=== modified file 'lisp/face-remap.el'
--- lisp/face-remap.el	2012-07-10 11:51:54 +0000
+++ lisp/face-remap.el	2012-09-11 17:20:16 +0000
@@ -285,7 +285,9 @@
 ;;;###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.
+  "Adjust the height of the default face by INC.
+
+INC may be passed as a numeric prefix argument.
 
 The actual adjustment made depends on the final component of the
 key-binding used to invoke the command, with all modifiers removed:
@@ -294,9 +296,11 @@
    -      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.
+When adjusting with `+' or `-', continue to read input events and
+further adjust the face height as long as the input event read
+\(with all modifiers removed) is `+' or `-'.
+
+When adjusting with `0', immediately finish.
 
 Each step scales the height of the default face by the variable
 `text-scale-mode-step' (a negative number of steps decreases the
@@ -309,8 +313,7 @@
 a top-level keymap, `text-scale-increase' or
 `text-scale-decrease' may be more appropriate."
   (interactive "p")
-  (let ((first t)
-	(ev last-command-event)
+  (let ((ev last-command-event)
 	(echo-keystrokes nil))
     (let* ((base (event-basic-type ev))
            (step
@@ -320,23 +323,16 @@
               (?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))))
-
-
-;; ----------------------------------------------------------------
-;; buffer-face-mode
+      (unless (zerop step)
+	(message "Use + or - for further adjustment")
+	(set-temporary-overlay-map
+	 (let ((map (make-sparse-keymap)))
+	   (dolist (mods '(() (control)))
+	     (dolist (key '(?- ?+ ?=))
+	       (define-key map (vector (append mods (list key)))
+		 `(lambda () (interactive) (text-scale-adjust (abs ,step))))))
+	   map)
+	 t)))))
 
 (defcustom buffer-face-mode-face 'variable-pitch
   "The face specification used by `buffer-face-mode'.

-- 
 Bastien