最近のほとんどのラップトップには Page up/Page down/Home/End キーとして Fn 矢印キーのオーバーレイ。それは常にマイナーな迷惑でした Fn キーボードの反対側にあり、片手で Page up などほとんど不可能。
私は最近、使用するアイデアを考えました Scroll Lock 修飾子として、スクロールロックがオンの場合、矢印キーは常に Page up など。これが私のスクリプトです。
#!/bin/bash
xmodmap -e 'add mod3 = Scroll_Lock'
arrow() {
echo "arrow mode";
xmodmap -e "keycode 111 = Up NoSymbol Up"
xmodmap -e "keycode 116 = Down NoSymbol Down"
xmodmap -e "keycode 113 = Left NoSymbol Left"
xmodmap -e "keycode 114 = Right NoSymbol Right"
}
page() {
echo "page mode";
xmodmap -e "keycode 111 = Prior NoSymbol Prior"
xmodmap -e "keycode 116 = Next NoSymbol Next"
xmodmap -e "keycode 113 = Home NoSymbol Home"
xmodmap -e "keycode 114 = End NoSymbol End"
}
arrow;
trap 'arrow; exit 255;' EXIT SIGINT
slock0="";
echo $slock;
while true; do
slock="$(xset -q | sed -ne '/Scroll Lock/s/^.*Scroll Lock: \([a-z]*\).*$/\1/p')";
if [ "$slock" != "$slock0" ]; then
slock0="$slock";
if [ "$slock" == "on" ]; then
page
else
arrow
fi
fi
sleep 0.5
done
これを行うためのよりエレガントな方法がある場合、私はちょうど興味がありますか? xmodmap
の頻繁な実行に問題はありますか?
過去に私はキー(たとえば Menu 右の間 Alt そして Ctrl)として AltGr キー、および完了xmodmap -e "keycode 111 = Up NoSymbol Prior"
など。ただし、現在のラップトップには、その地域に「無料」キーがありません。そして、私はスクロールロックを次のように動作させる方法に慣れていません AltGr 修飾子。
あなたのスクリプトはまったく問題ありません。私が変更したいいくつかのマイナーなことがあります。
xmodmap
を使用すると、コマンドラインごとに複数の式を指定できるため、4回呼び出すのではなく、関数ごとに1回だけ呼び出すことができますprintf "%s\n" "$slock"
は、slock
が空の場合、空の行を出力しませんgrep -oP 'Scroll Lock:\s*\K\w+'
はsed
コマンドと同じことを行いますが、sed
の使用を主張する場合:
sed -nr 's/.*Scroll Lock:\s*(\w+).*/\1/p'
while :
はwhile true
と同じです–好みの問題だと思います#!/bin/bash
xmodmap -e 'add mod3 = Scroll_Lock'
arrow() {
echo "arrow mode"
xmodmap -e "keycode 111 = Up NoSymbol Up" \
-e "keycode 116 = Down NoSymbol Down" \
-e "keycode 113 = Left NoSymbol Left" \
-e "keycode 114 = Right NoSymbol Right"
}
page() {
echo "page mode"
xmodmap -e "keycode 111 = Prior NoSymbol Prior" \
-e "keycode 116 = Next NoSymbol Next" \
-e "keycode 113 = Home NoSymbol Home" \
-e "keycode 114 = End NoSymbol End"
}
arrow
trap 'arrow; exit 255;' EXIT SIGINT
printf "%s\n" "$slock"
while :; do
slock="$(xset -q | grep -oP 'Scroll Lock:\s*\K\w+')"
if [ "$slock" != "$slock0" ]; then
slock0="$slock"
if [ "$slock" = "on" ]; then
page
else
arrow
fi
fi
sleep 0.5
done
遅延をsleep 1
に変更することをお勧めします。個人的には、十分に高速であることがわかり、マシンの呼び出しを半分に節約できます。ニーズに合ったものを試してください。