emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Make `C-x {' and `C-x }' repeatable


From: Vitalie Spinu
Subject: Re: [PATCH] Make `C-x {' and `C-x }' repeatable
Date: Tue, 21 May 2013 11:58:36 +0200
User-agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3 (gnu/linux)

I think this is a very nice idea. Similar change would make sense for
C-x ^.

    Vitalie

 >> Gauthier Östervall <address@hidden>
 >> on Mon, 20 May 2013 21:59:06 +0200 wrote:

 > Ever since I started using emacs and tried to say good bye to my
 > mouse, I have felt that the resizing of windows with `C-x }' and
 > `C-x {' is too cumbersome to use.

 > - Typing `C-x }' several times in a row is not practical.
 > - I always undershoot when using things of the form `M-10 C-x }'
 > - I alway overshoot when using `C-x } C-x zzzzz'

 > This branch makes `C-x {' and `C-x }' behave similarly to `C-x
 > C-+' (text-scale-adjust).  After the original `C-x }' (or `C-x
 > {'), additional `{' and `}' continue to resize the window, until
 > the user enters another character.

 > The change is in lisp/window.el, which has dynamic scoping.  I
 > understand that this new function would be better with lexical
 > binding, allowing for a clean closure.  However I do not feel
 > confident enough (yet) with dynamic scoping to change the file's
 > binding mode by myself.

 > Please tell me if I should have done that differently, and I'll
 > try to implement it.  I'd be happy to see window.el get lexical
 > binding, and use a closure instead of a macro.   If the patch is
 > acceptable as is, it would be very nice to see it integrated.

 > Note that this is my first patch to GNU Emacs and with bzr.  I
 > might for example have missed indentation conventions (no tabs in
 > the new function, only spaces), but I could not find info about
 > tabbing conventions on the wiki or gnu.org (a link would be
 > welcome, if available).  Please guide me if I missed other
 > standard things.

 > https://code.launchpad.net/~gauthier-i/emacs/resize-window-repeatlp:~gauthier-i/emacs/resize-window-repeat
 > Launchpad says that the branch is "Updating" and "empty", and has
 > been saying so for days.  Weeks, really.  The code seems to be
 > there though.  Tell me if it's not reachable for you, and if you
 > have suggestions for how to fix it, it'd be nice.

 > Otherwise, here's the bundle:

 > # Bazaar merge directive format 2 (Bazaar 0.90)
 > # revision_id: address@hidden
 > # target_branch: file:///media/sf_prog/emacs/trunk/
 > # testament_sha1: 6d88925597179e2c8c55153d5f9c62703d6ecd68
 > # timestamp: 2013-05-20 21:51:05 +0200
 > # base_revision_id: address@hidden
 > #
 > # Begin patch

 > === modified file 'lisp/ChangeLog' (properties changed: -x to +x)
 > --- lisp/ChangeLog   2013-04-29 20:09:18 +0000
 > +++ lisp/ChangeLog   2013-05-20 19:36:32 +0000
 > @@ -1,3 +1,7 @@
 > +2013-05-20  Gauthier Ostervall  <address@hidden>
 > +
 > +    * window.el (window-size-adjust): New function.
 > +
 >  2013-04-29  Leo Liu  <address@hidden>

 >      * progmodes/octave.el (octave-font-lock-keywords): Handle 'end' in

 > === modified file 'lisp/window.el' (properties changed: -x to +x)
 > --- lisp/window.el   2013-04-13 14:37:20 +0000
 > +++ lisp/window.el   2013-05-07 12:13:36 +0000
 > @@ -6025,6 +6025,48 @@
 >    (interactive "p")
 >    (shrink-window delta t))

 > +;;;###autoload (define-key ctl-x-map [(?{)] 'window-size-adjust)
 > +;;;###autoload (define-key ctl-x-map [(?})] 'window-size-adjust)
 > +;;;###autoload
 > +(defun window-size-adjust (inc)
 > +  "Adjust the width or height of the current window 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:
 > +
 > +   {      Decrease the window width by one step
 > +   }      Increase the window width by one step
 > +
 > +When adjusting with `{' or `}', continue to read input events and
 > +further adjust the windows width as long as the input event read
 > +\(with all modifiers removed) is `{' or `}'.
 > +
 > +This command is a special-purpose wrapper around the
 > +`enlarge-window-horizontally' command which makes repetition convenient
 > +even when it is bound in a non-top-level keymap.  For binding in
 > +a top-level keymap, `enlarge-window-horzontally' or
 > +`shrink-window-horizontally' may be more appropriate."
 > +  (interactive "p")
 > +  (let ((ev last-command-event)
 > +        (echo-keystrokes nil))
 > +    (let* ((base (event-basic-type ev))
 > +           (step
 > +            (pcase base
 > +              (?{ (- inc))
 > +              (?} inc)
 > +              (t inc))))
 > +      (enlarge-window-horizontally step)
 > +      (message "Use {,} for further adjustment")
 > +      (set-temporary-overlay-map
 > +       (let ((map (make-sparse-keymap)))
 > +         (dolist (mods '(()))
 > +           (dolist (key '(?{ ?}))
 > +             (define-key map (vector (append mods (list key)))
 > +               `(lambda () (interactive) (window-size-adjust (abs ,inc))))))
 > +         map)))))
 > +
 >  (defun count-screen-lines (&optional beg end count-final-newline window)
 >    "Return the number of screen lines in the region.
 >  The number of screen lines may be different from the number of actual lines,
 > @@ -6734,8 +6776,8 @@
 >  (define-key ctl-x-map "3" 'split-window-right)
 >  (define-key ctl-x-map "o" 'other-window)
 >  (define-key ctl-x-map "^" 'enlarge-window)
 > -(define-key ctl-x-map "}" 'enlarge-window-horizontally)
 > -(define-key ctl-x-map "{" 'shrink-window-horizontally)
 > +(define-key ctl-x-map "}" 'window-size-adjust)
 > +(define-key ctl-x-map "{" 'window-size-adjust)
 >  (define-key ctl-x-map "-" 'shrink-window-if-larger-than-buffer)
 >  (define-key ctl-x-map "+" 'balance-windows)
 >  (define-key ctl-x-4-map "0" 'kill-buffer-and-window)

 > # Begin bundle
 > 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]