Offer a *visual* way to choose a window to switch to
Emacs Lisp
Switch branches/tags
Clone or download
tumashu Merge pull request #70 from nanjj/master
Fixed typo error in README
Latest commit ceade03 Jul 24, 2018

README.md

目录

  1. What is switch-window
    1. Installation
    2. Configure and Usage
    3. Tips
      1. I want to select a window with "a-z" instead of "1-9".
      2. I want to let window to show bigger label.
      3. I want to hide window label when window's number < 3
      4. I want to select minibuffer with label "z".
      5. I want to auto resize a window when switch to it
      6. Switch-window seem to conflict with Exwm, how to do?
      7. I use text terminal, but I want bigger label.
      8. I want to use image or icon as label.
      9. `switch-window-shortcut-appearance' can't satisfy my need. how to do?
      10. Have any other similar package exist?
    4. Changelog
      1. 1.5.0 - 2017-04-29
      2. 1.0.0 - 2015-01-14
      3. 0.11 - 2013-09-14
      4. 0.10 - 2011-06-19
      5. 0.9 - 2010-11-11 - emacs22 called, it wants some support
      6. 0.8 - 2010-09-13 - 999
      7. 0.7 - 2010-08-23 - window-dedicated-p
      8. 0.6 - 2010-08-12 - Minibuf-1
      9. 0.5 - 2010-08-08 - Polishing

What is switch-window

switch-window is an Emacs window switch tool, which offer a visual way to choose a window to switch to, delete, split or other operations.

img

Installation

  1. Config melpa source, please read: http://melpa.org/#/getting-started
  2. M-x package-install RET switch-window RET

Note: User can install switch-window with El-Get too.

Configure and Usage

(require 'switch-window)
(global-set-key (kbd "C-x o") 'switch-window)
(global-set-key (kbd "C-x 1") 'switch-window-then-maximize)
(global-set-key (kbd "C-x 2") 'switch-window-then-split-below)
(global-set-key (kbd "C-x 3") 'switch-window-then-split-right)
(global-set-key (kbd "C-x 0") 'switch-window-then-delete)

(global-set-key (kbd "C-x 4 d") 'switch-window-then-dired)
(global-set-key (kbd "C-x 4 f") 'switch-window-then-find-file)
(global-set-key (kbd "C-x 4 m") 'switch-window-then-compose-mail)
(global-set-key (kbd "C-x 4 r") 'switch-window-then-find-file-read-only)

(global-set-key (kbd "C-x 4 C-f") 'switch-window-then-find-file)
(global-set-key (kbd "C-x 4 C-o") 'switch-window-then-display-buffer)

(global-set-key (kbd "C-x 4 0") 'switch-window-then-kill-buffer)

When switch-window is enabled, user can use the below five keys:

key command description
"i" Move the border up
"k" Move the border down
"j" Move the border left
"l" Move the border right
"b" Balance windows
"SPC" Resume auto-resize

If you want to customize this feature, please see variable: `switch-window-extra-map'.

Note: if you use auto-resize window feature, you must know that when you execute above window operate commands, auto-resize feature will be disabled temporarily, you should use above "SPC" key to resume.

Tips

I want to select a window with "a-z" instead of "1-9".

(setq switch-window-shortcut-style 'qwerty)
(setq switch-window-qwerty-shortcuts
      '("a" "s" "d" "f" "j" "k" "l" ";" "w" "e" "i" "o"))

I want to let window to show bigger label.

(setq switch-window-increase 6) ;Increase or decrease this number.

I want to hide window label when window's number < 3

(setq switch-window-threshold 2)

I want to select minibuffer with label "z".

(setq switch-window-minibuffer-shortcut ?z)

I want to auto resize a window when switch to it

(setq switch-window-auto-resize-window t)
(setq switch-window-default-window-size 0.8) ;80% of frame size
(switch-window-mouse-mode) ;auto resize when switch window with mouse

Advanced usage:

(setq switch-window-auto-resize-window
      (lambda ()
        (equal (buffer-name) "*scratch*"))) ;when return t, run auto switch
(setq switch-window-default-window-size '(0.8 . 0.6)) ;80% width and 60% height of frame

By the way, you can use package golden-ratio also.

Switch-window seem to conflict with Exwm, how to do?

By default, switch-window get user's input with the help of function `read-event', this approach does not work well with Exwm (Emacs X window manager), user should set the below variable and use minibuffer to get input instead:

(setq switch-window-input-style 'minibuffer)

Note: if you use minibuffer to get input, the feature about `switch-window-minibuffer-shortcut' will not work well.

I use text terminal, but I want bigger label.

The only choice is using asciiart, which draw a bigger label with small ascii char.

(setq switch-window-shortcut-appearance 'asciiart)

img

I want to use image or icon as label.

  1. Prepare your label images, rename them to: 1.png … 9.png, a.png … z.png.

    You can use other image types supported by Emacs, please see: `image-types'.

  2. Put all above images to directory: `switch-window-image-directory'.

  3. Set variable: `switch-window-shortcut-appearance'

    (setq switch-window-shortcut-appearance 'image)
    

img

`switch-window-shortcut-appearance' can't satisfy my need. how to do?

All you should do is hacking you own label buffer function, for example: my-switch-window-label-buffer-function, and set the below variable:

(setq switch-window-label-buffer-function
      'my-switch-window-label-buffer-function)

Have any other similar package exist?

Changelog

1.5.0 - 2017-04-29

  • Implement commands:
    1. switch-window-then-maximize
    2. switch-window-then-delete
    3. switch-window-then-split-below
    4. switch-window-then-split-right
    5. switch-window-then-split-horizontally
    6. switch-window-then-split-vertically
    7. switch-window-then-swap-buffer
  • Let switch-window work well with Exwm (Emacs X window manager).
  • User can customize switch-window label's appearance.

1.0.0 - 2015-01-14

  • Please fixme.

0.11 - 2013-09-14

  • restore point to end-of-buffer for windows where it was the case after switching, fixing an anoying bug.

0.10 - 2011-06-19

  • implement M-x delete-other-window (thanks developernotes on github)

0.9 - 2010-11-11 - emacs22 called, it wants some support

  • implement a propertize based hack to support emacs22

0.8 - 2010-09-13 - 999

  • Suport more than 9 windows (with a single key to type)
  • Use quail-keyboard-layout to choose single key labels for windows

0.7 - 2010-08-23 - window-dedicated-p

  • temporarily unset the window dedicated flag for displaying the numbers, patch from René Kyllingstad Rene@Kyllingstad.com
  • fix timeout and RET handling wrt to not changing window selection

0.6 - 2010-08-12 - Minibuf-1

  • add support for selecting the minibuffer when it's active
  • some try at a better horizontal centering
  • assorted cleanup

0.5 - 2010-08-08 - Polishing

  • dim:switch-window-increase is now a maximum value

Converted from switch-window.el by el2org .