나는 이 스크립트가 키 바인딩을 설정해야 한다고 생각했지만 지금은 꽤 지루합니다. 업데이트: 폐기되어 이제 작동합니다. 보기 흉하기는 하지만 새로운 키 바인딩을 원할 때마다 네 줄을 복사하여 붙여넣어야 하기 때문에 좀 더 우아하게 만드는 방법을 찾고 있습니다.
나는 zsh가 2D 배열을 지원하지 않기 때문에 Python으로 다시 작성하는 것이 더 나을 것이라고 주장했습니다... 업데이트 후에도 Python 스크립트가 여전히 존재합니다.여기
키 바인딩을 올바르게 설정하는 방법여기.
#!/bin/zsh
# How many keybinds?
N=16
# Put keybindings here
k0=("keyboard dvorak nocaps" "Menu" "setxbmap dvorak -option nocaps")
k1=("launch code" "<Super>c" "code")
k2=("dropdown firefox" "<Shift><Super>f" "tdrop -ma -h \"100%\" -w \"50%\" firefox")
mkeys="org.gnome.settings-daemon.plugins.media-keys"
_locstr="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom"
_ck="$mkeys.custom-keybinding:$_locstr"
M="$(expr $N - 1)"
# Create spaces for $N keybindings, emulating the command:
# gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/ media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ ']"
locations=""
for i in $(seq 0 $M); do
locations+="'$_locstr$i/', "
done
locations+="'$_locstr$N/' "
gsettings set $mkeys custom-keybindings "[$locations]"
# issue commands. Have to paste 4 lines each time, kinda gross.
ck="${_ck}0/"
gsettings set $ck name $k0[1]
gsettings set $ck binding $k0[2]
gsettings set $ck command $k0[3]
ck="${_ck}1/"
gsettings set $ck name $k1[1]
gsettings set $ck binding $k1[2]
gsettings set $ck command $k1[3]
ck="${_ck}2/"
gsettings set $ck name $k2[1]
gsettings set $ck binding $k2[2]
gsettings set $ck command $k2[3]
# test with:
# i=0
# ck="${_ck}$i/"
# gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
# gsettings list-recursively $ck
답변1
개선할 수 있는 몇 가지 방법:
#! /bin/zsh -
bindings=(
'keyboard dvorak nocaps' Menu 'setxbmap dvorak -option nocaps'
'launch code' '<Super>c' code
'dropdown firefox' '<Shift><Super>f' 'tdrop -ma -h 100% -w 50% firefox'
)
mkeys=org.gnome.settings-daemon.plugins.media-keys
locstr=/${mkeys//./\/}/custom-keybindings/custom
ck=$mkeys.custom-keybinding:$locstr
locations=() i=0
for name binding command ($bindings) {
for type (name binding command) gsettings set $ck$i $type ${(P)type}
locations+=( "'$locstr$i'" )
(( i++ ))
}
gsettings set $mkeys custom-keybindings "[${(j[, ])locations}]"