Проблема здесь в том, что вы, по сути, удаляете клавиши Windows из списка модификаторов с помощью чистого mod4
. Для того, чтобы Caps Lock был доступен в качестве дополнительного модификатора вместо Window keys, вы должны установить его в другой модификатор. Вы можете использовать модификаторы Mod1
через Mod5
в дополнение к Control
, Shift
и Mode_switch
с i3.
Сначала проверьте, не используются ли модификаторы в используемой вами схеме (без применения .Xmodmap
). Вы можете получить список настроек модификаторов с помощью xmodmap -pm
. Для компоновки us
это возвращает (на моей машине):
xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Как вы видите, mod3
в настоящее время не используется. Для того, чтобы его использовать, вам просто нужно поместить в вашу .Xmodmap
:
clear lock keycode 66 = Hyper_R add mod3 = Hyper_R
Примечание: В данном случае я использовал Hyper_R
, поскольку Hyper_L
уже была привязана к mod4
. А 66 - код ключа Caps Lock. На вашей машине это может быть по-другому.
Теперь вы можете использовать этот модификатор с вашими клавишами i3. Если вы хотите продолжать использовать переменную $mod
с вашей конфигурацией, просто установите ее либо в Mod3
, либо в Mod4
, в зависимости от того, хотите ли вы использовать для этого Caps Lock или Windows keys. Но на самом деле нет необходимости в его использовании (в основном это удобно для облегчения первой установки при выборе между Alt (Mod1
) и Windows ключами (Mod4
).
Использование нового модификатора так же просто, как:
bindsym Mod3+s exec something
binysym Mod3+Mod4+s exec something_else
sqlite3
читает команды из стандартного ввода, что означает, что вы можете передать ему SQL из файла или из командной строки, а не только в интерактивном режиме. sqlite3
автоматически завершает работу в конце ввода, поэтому .quit
не требуется при интерактивном использовании без -.
Например:
#!/bin/sh
sqlite3 /var/www/dbs/ha.db <<'END_SQL'
.timeout 2000
INSERT INTO table1 SELECT * FROM table2;
DELETE FROM table2;
END_SQL
Также обратите внимание на исправленный синтаксис для DELETE
.
Если вам также необходимо создать table2
в базе данных:
#!/bin/sh
sqlite3 /var/www/dbs/ha.db <<'END_SQL'
CREATE TABLE IF NOT EXISTS table2 AS SELECT * FROM table1;
INSERT INTO table2 SELECT * FROM table1;
DELETE FROM table1;
END_SQL
Измените DELETE FROM table1;
на DROP table1;
, если вам нужно удалить table1
полностью (, а не только его содержимое ).