«$ @»
- изобретение оболочки Борна (1979). Это означает расширение до списка позиционных параметров, как если бы вы набрали "$ 1" "$ 2" "$ 3" ...
.
Когда Дэвид Корн добавил поддержку массивов в начале 80-х, он распространил эту концепцию на массивы с синтаксисом "$ {array [@]}"
. zsh
также поддерживает сокращенную форму "$ array [@]"
.
«$ @»
относится к позиционным параметрам (начиная с $ 1
), это немного похоже на массив, но за исключением zsh
или yash
, не совсем так. Например, $ @
начинается с индекса 1, а другие массивы в ksh
или bash
начинаются с 0. $ {@ [@]}
не будет работать в ksh
или bash
.
Единственные оболочки, в которых работает "$ {@ [@]}"
, - это zsh
и yash
. zsh
- единственный, где работает "$ @ [@]"
. Нет смысла использовать его вместо стандартного «$ @»
. Что может быть более полезным, так это сказать: "$ @ [1,3]"
, чтобы получить первые 3 позиционных параметра.
Если вы хотите использовать синтаксис типа массива, в zsh
вы можете использовать "$ argv [@]"
( $ argv
- это массив, который ссылается на позиционные параметры, как в csh
/ tcsh
/ fish
).
Откройте dconf-editor
, перейдите к клавише раскладки переключателя -для углубления (, она должна быть/com/deepin/dde/keybinding/system/switch-layout
)и установите ее на['Caps_Lock']
Установите ibus
в свою систему.
Запустите его в каком-нибудь сценарии запуска:
ibus-daemon -drx
А теперь немного поделки. Когда вы привязываете Caps _Lock к изменению раскладки, регистр тоже будет меняться. Чтобы предотвратить такое поведение, нужна опция Map Caps. Одно решение :
setxkbmap -option 'lv3:caps_switch_latch'
Перейдите к настройкам ibus, чтобы изменить необходимые раскладки и ярлыки. Когда вы нажимаете Caps, он определяется как ISO_Level3_Shift
. Все сделано!
ПРИМЕЧАНИЕ:
Изменить /etc/X11/xorg.conf.d/00-keyboard.conf
для постоянной опции xkb
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbOptions" "lv3:caps_switch_latch"
EndSection
УПД:
Со временем я нашел еще два способа, основанные на независимом слушателе горячих клавиш. Первый подход использует xbindkeys и xdotool, у него есть отставание.
; layout
(xbindkey '(release "c:66") "xdotool key Super_L+space")
Второй через D -Шина вместо xdotool, описание тут
#!/bin/sh
LANG=$(dbus-send \
--type=method_call \
--print-reply=literal \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Get \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" | awk '{print $2}')
if [[ $LANG = 'us;' ]]; then
dbus-send \
--type=method_call \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Set \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" \
variant:string:"ru;"
else
dbus-send \
--type=method_call \
--dest=com.deepin.daemon.InputDevices \
/com/deepin/daemon/InputDevice/Keyboard \
org.freedesktop.DBus.Properties.Set \
string:"com.deepin.daemon.InputDevice.Keyboard" \
string:"CurrentLayout" \
variant:string:"us;"
fi