Reviewers: nigeltao,
Message:
Hello
nige...@golang.org (cc:
ta...@googlegroups.com),
I'd like you to review this change to
https://code.google.com/p/taowm/
Description:
taowm: route audio keys to pactl.
Please review this at
https://codereview.appspot.com/159080043/
Affected files (+40, -10 lines):
M taowm/actions.go
M taowm/config.go
M taowm/keysym.go
M taowm/xinit.go
Index: taowm/actions.go
===================================================================
--- a/taowm/actions.go
+++ b/taowm/actions.go
@@ -29,6 +29,14 @@
return false
}
+func doAudio(k *workspace, cmd1 interface{}) bool {
+ if !doAudioActions {
+ return false
+ }
+ doExec(k, cmd1)
+ return true
+}
+
func doScreen(k *workspace, t1 interface{}) bool {
t, ok := t1.(traversal)
if !ok {
Index: taowm/config.go
===================================================================
--- a/taowm/config.go
+++ b/taowm/config.go
@@ -58,6 +58,8 @@
{"Xft/RGBA", "none"},
}
+const doAudioActions = true
+
// actions lists the action to be performed for each key press. The do
function
// returns whether to pulsate the frames' borders to acknowledge the key
press.
//
@@ -74,6 +76,10 @@
^xkReturn: {doExec,
[]string{"dmenu_run", "-nb", "#0f0f0f", "-nf", "#3f7f3f",
"-sb", "#0f0f0f", "-sf", "#7fff7f", "-l", "10"}},
+ +xkAudioLowerVolume: {doAudio,
[]string{"pactl", "set-sink-volume", "0", "--", "-5%"}},
+ +xkAudioRaiseVolume: {doAudio,
[]string{"pactl", "set-sink-volume", "0", "--", "+5%"}},
+ +xkAudioMute: {doAudio,
[]string{"pactl", "set-sink-mute", "0", "toggle"}},
+
+xkBackspace: {doWindowDelete, nil},
^xkEscape: {doQuit, nil},
Index: taowm/keysym.go
===================================================================
--- a/taowm/keysym.go
+++ b/taowm/keysym.go
@@ -48,6 +48,10 @@
xkHyperL = 0xffed
xkHyperR = 0xffee
xkDelete = 0xffff
+
+ xkAudioLowerVolume = 0x1008ff11
+ xkAudioMute = 0x1008ff12
+ xkAudioRaiseVolume = 0x1008ff13
)
func keysymString(keysym xp.Keysym) string {
Index: taowm/xinit.go
===================================================================
--- a/taowm/xinit.go
+++ b/taowm/xinit.go
@@ -161,20 +161,32 @@
if n < 2 {
log.Fatalf("too few keysyms per keycode: %d", n)
}
- wmKeycode := xp.Keycode(0)
for i := keyLo; i <= keyHi; i++ {
keysyms[i][0] = km.Keysyms[(i-keyLo)*n+0]
keysyms[i][1] = km.Keysyms[(i-keyLo)*n+1]
- if keysyms[i][0] == wmKeysym || keysyms[i][1] == wmKeysym {
- wmKeycode = xp.Keycode(i)
+ }
+
+ toGrabs := []xp.Keysym{wmKeysym}
+ if doAudioActions {
+ toGrabs = append(toGrabs, xkAudioLowerVolume, xkAudioMute,
xkAudioRaiseVolume)
+ }
+ for _, toGrab := range toGrabs {
+ keycode := xp.Keycode(0)
+ for i := keyLo; i <= keyHi; i++ {
+ if keysyms[i][0] == toGrab || keysyms[i][1] == toGrab {
+ keycode = xp.Keycode(i)
+ }
}
- }
- if wmKeycode == 0 {
- log.Fatalf("could not find the window manager key %s",
keysymString(wmKeysym))
- }
- if err := xp.GrabKeyChecked(xConn, false, rootXWin, xp.ModMaskAny,
wmKeycode,
- xp.GrabModeAsync, xp.GrabModeAsync).Check(); err != nil {
- log.Fatal(err)
+ if keycode == 0 {
+ if toGrab != wmKeysym {
+ continue
+ }
+ log.Fatalf("could not find the window manager key %s",
keysymString(toGrab))
+ }
+ if err := xp.GrabKeyChecked(xConn, false, rootXWin, xp.ModMaskAny,
keycode,
+ xp.GrabModeAsync, xp.GrabModeAsync).Check(); err != nil {
+ log.Fatal(err)
+ }
}
// Disable Caps Lock if it is the wmKeysym.