Homepage: https://www.gnu.org/software/emacs
Author: Hovav Shacham
Directional window-selection routines
This package defines a set of routines, windmove-{left,up,right, down}, for selection of windows in a frame geometrically. For example, `windmove-right' selects the window immediately to the right of the currently-selected one. This functionality is similar to the window-selection controls of the BRIEF editor of yore. One subtle point is what happens when the window to the right has been split vertically; for example, consider a call to `windmove-right' in this setup: ------------- | | A | | | | | |----- | * | | (* is point in the currently | | B | selected window) | | | ------------- There are (at least) three reasonable things to do: (1) Always move to the window to the right of the top edge of the selected window; in this case, this policy selects A. (2) Always move to the window to the right of the bottom edge of the selected window; in this case, this policy selects B. (3) Move to the window to the right of point in the selected window. This may select either A or B, depending on the position of point; in the illustrated example, it would select B. Similar issues arise for all the movement functions. Windmove resolves this problem by allowing the user to specify behavior through a prefix argument. The cases are thus: * if no argument is given to the movement functions, or the argument given is zero, movement is relative to point; * if a positive argument is given, movement is relative to the top or left edge of the selected window, depending on whether the movement is to be horizontal or vertical; * if a negative argument is given, movement is relative to the bottom or right edge of the selected window, depending on whether the movement is to be horizontal or vertical. Another feature enables wrap-around mode when the variable `windmove-wrap-around' is set to a non-nil value. In this mode, movement that falls off the edge of the frame will wrap around to find the window on the opposite side of the frame. Windmove does the Right Thing about the minibuffer; for example, consider: ------------- | * | |-----------| | A | |-----------| (* is point in the currently | B | C | selected window) | | | ------------- With wraparound enabled, windmove-down will move to A, while windmove-up will move to the minibuffer if it is active, or to either B or C depending on the prefix argument. A set of default keybindings is supplied: shift-{left,up,right,down} invoke the corresponding Windmove function. See the installation section if you wish to use these keybindings. Installation: Put the following line in your init file: (windmove-default-keybindings) ; shifted arrow keys or (windmove-default-keybindings 'hyper) ; etc. to use another modifier key. If you wish to enable wrap-around, also add a line like: (setq windmove-wrap-around t) Acknowledgments: Special thanks to Julian Assange (proff@iq.org), whose change-windows-intuitively.el predates Windmove, and provided the inspiration for it. Kin Cho (kin@symmetrycomm.com) was the first to suggest wrap-around behavior. Thanks also to Gerd Moellmann (gerd@gnu.org) for his comments and suggestions.