File: keychain.sh

package info (click to toggle)
herbstluftwm 0.9.5-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,164 kB
  • sloc: cpp: 20,691; python: 10,830; sh: 1,023; ansic: 622; makefile: 98
file content (45 lines) | stat: -rwxr-xr-x 1,987 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env bash

# Execute this (e.g. from your autostart) to obtain basic key chaining like it
# is known from other applications like screen.
#
# E.g. you can press Mod1-i 1 (i.e. first press Mod1-i and then press the
# 1-button) to switch to the first workspace
#
# The idea of this implementation is: If one presses the prefix (in this case
# Mod1-i) except the notification, nothing is really executed but new
# keybindings are added to execute the actually commands (like use_index 0) and
# to unbind the second key level (1..9 and 0) of this keychain. (If you would
# not unbind it, use_index 0 always would be executed when pressing the single
# 1-button).

hc() { "${herbstclient_command[@]:-herbstclient}" "$@" ;}
Mod=Mod1

# Create the array of keysyms, the n'th entry will be used for the n'th
# keybinding
keys=( {1..9} 0 )

# Build the command to unbind the keys
unbind=(  )
for k in "${keys[@]}" Escape ; do
    unbind+=( , keyunbind "$k" )
done

# Add the actual bind, after that, no new processes are spawned when using that
# key chain. (Except the spawn notify-send of course, which can be deactivated
# by only deleting the appropriate line)

hc keybind $Mod-i chain \
    '->' spawn notify-send "Select a workspace number or press Escape" \
    '->' keybind "${keys[0]}" chain "${unbind[@]}" , use_index 0 \
    '->' keybind "${keys[1]}" chain "${unbind[@]}" , use_index 1 \
    '->' keybind "${keys[2]}" chain "${unbind[@]}" , use_index 2 \
    '->' keybind "${keys[3]}" chain "${unbind[@]}" , use_index 3 \
    '->' keybind "${keys[4]}" chain "${unbind[@]}" , use_index 4 \
    '->' keybind "${keys[5]}" chain "${unbind[@]}" , use_index 5 \
    '->' keybind "${keys[6]}" chain "${unbind[@]}" , use_index 6 \
    '->' keybind "${keys[7]}" chain "${unbind[@]}" , use_index 7 \
    '->' keybind "${keys[8]}" chain "${unbind[@]}" , use_index 8 \
    '->' keybind "${keys[9]}" chain "${unbind[@]}" , use_index 9 \
    '->' keybind Escape       chain "${unbind[@]}"