EXWM でファンクションキーの設定

HIGASHI Taiju
5 min readMar 11, 2018

--

ウィンドウマネージャを EXWM にしてみた」に書いたとおり、EXWM を使っている。

タイル型ウィンドウマネージャでは、音量の調整やディスプレイの明るさの調整などの基本的な機能は、自分で定義しないといけないようで、EXWM でもそういうことになった。

EXWM の設定は、Emacs の設定として書く。

明るさ調節機能を定義

xbacklight を使って明るさを調節する。要インストール。また、Backlight — ArchWiki に記載の xorg.conf 定義を準備しないと xbacklight が動かなかった。

定数とコマンドを定義

(defconst taiju/monitor-brightness-modifier 10)(defun taiju/monitor-brightness-down ()
(interactive)
(start-process-shell-command
"xbacklignt-dec"
nil
(format "xbacklight -dec %d" taiju/monitor-brightness-modifier)))
(defun taiju/monitor-brightness-up ()
(interactive)
(start-process-shell-command
"xbacklignt-inc"
nil
(format "xbacklight -inc %d" taiju/monitor-brightness-modifier)))

キーバインドを定義

ファンクションキーにそのまま割り当てる。

(global-set-key (kbd "<XF86MonBrightnessDown>") #'taiju/monitor-brightness-down)
(global-set-key (kbd "<XF86MonBrightnessUp>") #'taiju/monitor-brightness-up)

音量調節機能を定義

amixer コマンドを使って音量を調節する。

定数とコマンドを定義

amixer で Master をミュートしてから、アンミュートすると、ヘッドフォンやスピーカーはミュートのままになってしまうため、Master をアンミュートする時は、Headphone と Speaker もアンミュートするようにする。

(defconst taiju/audio-volume-modifier 3)(defun taiju/audio-toggle ()
(interactive)
(start-process-shell-command
"audio-toggle"
nil
"amixer -c 0 sset Master toggle | grep -q '\\[on\\]' && amixer -c 0 sset Headphone unmute && amixer -c 0 sset Speaker unmute"))
(defun taiju/audio-lower-volume ()
(interactive)
(start-process-shell-command
"audio-lower-volume"
nil
(format "amixer -c 0 set Master %d%%-" taiju/audio-volume-modifier)))
(defun taiju/audio-raise-volume ()
(interactive)
(start-process-shell-command
"audio-raise-volume"
nil
(format "amixer -c 0 set Master %d%%+" taiju/audio-volume-modifier)))
(defun taiju/audio-mic-toggle ()
(interactive)
(start-process-shell-command
"audio-mic-toggle"
nil
"amixer -c 0 sset Capture toggle"))

キーバインドを定義

ファンクションキーにそのまま割り当てる。

(global-set-key (kbd "<XF86AudioMute>") #'taiju/audio-toggle)
(global-set-key (kbd "<XF86AudioLowerVolume>") #'taiju/audio-lower-volume)
(global-set-key (kbd "<XF86AudioRaiseVolume>") #'taiju/audio-raise-volume)
(global-set-key (kbd "<XF86AudioMicMute>") #'taiju/audio-mic-toggle)

EXWM の設定

上記のままだと、Emacs 内では機能するものの、個別に立ち上げたアプリケーション(Google Chrome など)で機能しないため、プレフィクスキーにする。(本来の用途とことなるので若干微妙な感じはする)

(cl-loop for k in '(XF86AudioMute
XF86AudioLowerVolume
XF86AudioRaiseVolume
XF86AudioMicMute
XF86MonBrightnessDown
XF86MonBrightnessUp)
do (cl-pushnew k exwm-input-prefix-keys))

--

--