При попытке использовать подобные менеджеры окон (xwem, крысиный яд) впервые, я сначала также пытался следовать за вовлечением инструкций по установке xmodmap
для получения ключа модификатора для менеджера окон но затем я чувствовал то использование xmodmap
в моих системных причинах некоторая путаница, потому что в моей системе (дистрибутив ALTLinux) внимание всегда обращалось на многоязычную настройку клавиатуры через XKB, а не через xmodmap
.
Так, я нашел опцию XKB маркировать ключ, который я хотел как "Hyper" и затем использовал модификатор "Hyper" в конфигурации для xwem или крысиного яда.
В моем случае, опции к setxkbmap
:
-option altwin:hyper_win
и вот комментарий, который я сохранил по случаю добавления его к моей установке:
xemacs-xwem использует Hyper, таким образом, я нашел, что это предопределило карту XKB (в xkb/symbols/altwin), который использует ключи WIN.
Возможно, позже я составлю другую карту XKB для меня, скажем, использование правильного Управления как Hyper (который будет форсировать события для использования правильного Управления - теперь, моя рука просто игнорирует его).
Я думал, что это - больше очевидного способа для получения ключ Hyper через XKB, а не через xmodmap (как описано в документах XWEM), потому что:
конфигурация xmodmap модифицирующих клавиш, кажется, не хороший w.r.t. путем, это вынуждает представить намерения: нужно сказать что-то о произвольно пронумерованных битах модификатора, но я не хочу думать об этих технических вещах: Мне нужен просто модификатор "Hyper", не некоторые неясные манипуляции с внутренностями! В xmodmap я должен был бы дать 2 или даже 3 неясных оператора для достижения результата, хотя логически это - единственное желание и операция. (Один xmodmap оператор не был бы достаточно, cf. Предупреждения XEMAC (FIXME: вставьте!), если Вы отображаете Control_R на modN; существуют некоторые технические ограничения.)
каждый - рассказанные истории, которые XKB и xmodmap не играют хорошо вместе, так, чтобы не все X программ работали приятно и когерентно при смешивании их (я должен дать ссылку здесь, FIXME).
Вот соответствующее определение от /usr/share/X11/xkb/symbols/altwin
, если кому-то интересно:
partial modifier_keys
xkb_symbols "hyper_win" {
key <LWIN> { [ Hyper_L ] };
key <RWIN> { [ Hyper_R ] };
modifier_map Mod4 { Hyper_L, Hyper_R };
};
После этого можно очень хорошо заставить тот последний ваш план работать. Для команды, отправленной будущим образом, чтобы не быть обработанным оболочкой, это должно быть в форме строки, когда достигает канала (таким образом echo "command"
, нет echo `command`
). Затем это должно быть считано фоновым процессом (одинаково демон, но не обязательно) запустился в соответствующем терминале. Это должно быть оценено тем же процессом.
Но это - бойлер-platey, чтобы иметь сценарий на канал. Поэтому давайте обобщим создание сценария как term-pipe-r.sh
(не забывайте chmod +x
это!):
#!/bin/bash
pipe=$1 # the pipe name is the first argument
trap 'rm -f "$pipe"' EXIT # ignore exit and delete messages until the end
if [[ ! -p $pipe ]]; then # if the pipe doesn't exist, create it
mkfifo $pipe
fi
while true # cycle eternally..
do
if read line <$ pipe; then
if [[ "$line" == 'close the term-pipe pipe' ]]; then
break
# if the pipe closing message is received, break the while cycle
fi
echo # a line break should be used because of the prompt
eval $line # run the line: as this script should be started
fi # in the target terminal,
done # the line will be run there.
echo "<pipe closing message>" # custom message on the end of the script
Поэтому скажите, что Вы хотите /dev/tty3
получить команды: просто пойдите туда, сделайте
./term-pipe-r.sh tty3pipe & # $1 will be tty3pipe (in a new process)
И отправить команды, от любого терминала (даже от себя):
echo "command" > tty3pipe
или петлять там:
cat some-script.sh > tty3pipe
Обратите внимание, что эта передача по каналу игнорирует файлы как .bashrc
, и псевдонимы там, такой как alias ls='ls --color'
. Надежда это помогает кому-то там.
Выше я говорил о читателе канала, не являющемся демоном обязательно, но на самом деле, я проверил различия, и оказывается, что это - путь лучше, чтобы быть простым фоновым процессом в этом случае. Поскольку этот путь, когда Вы закрываете терминал, EXIT
сигнал (SIGHUP
, SIGTERM
, или безотносительно), получен сценарием также, и канал удален затем (см., что строка запускается с trap
в сценарии) автоматически, избегая бесполезного процесса и файла (и возможно другие, если было такое перенаправление к бесполезному каналу).
Однако, это скучно для запущения скрипта, который Вы (я, по крайней мере), вероятно, хотите большую часть времени. Так, давайте автоматизируем его! Это должно запуститься в любом терминале, и одна вещь, которую все они читают, .bashrc
. Плюс, это сосет для использования ./term-pipe-r.sh
. Так, можно сделать:
cd /bin # go to /bin, where Bash gets command names
ln -s /directory/of/term-pipe-r.sh tpr # call it tpr (terminal pipe reader)
Теперь для выполнения его Вам только было бы нужно tpr tty3pipe &
в /dev/tty3
каждый раз, когда Вы хотели бы. Но почему делают это, когда можно было сделать его автоматически? Таким образом, это должно быть добавлено к .bashrc
. Но ожидайте: как это будет знать имя канала? Это может основывать имя на TTY (который может быть, знают с tty
команда), с помощью простого REGEX's в sed
(и некоторые приемы). К чему необходимо добавить ~/.bashrc
затем будет:
pipe="$(sed 's/\/dev\///' <<< `tty` | sed 's/\///')pipe"
# ^^^- take out '/dev/' and other '/', add 'pipe'
tpr $pipe & # start our script with the appropriate pipe name
Вариант Вима. Vim должен быть редактором по умолчанию.
echo "один два три" > new_file.txt
Ctrl + x
Ctrl + e
. Это откроет нашу длинную команду внутри Vim. Нажмите Ctrl + g
, чтобы отобразить имя временного файла в нижней части окна vim. В моем случае это /tmp/bash-fc.230BC2
vim /tmp/bash-fc.230BC2
(используя автозаполнение имени файла , конечно). Он скажет вам «Файл подкачки уже существует» — нажмите O
, чтобы открыть только для чтения. y$ : ! Ctrl+r " Введите
y$
- скопировать все символы строки, кроме завершающего символа новой строки. :
- перейти в режим командной строки !
- выполнить команду через шелл Ctrl+r "
- вставить скопированную строку в командную строку. Enter
- выполнить команду Стоит отметить, что вся эта последовательность клавиш можно сопоставить с одним нажатием клавиши, отредактировав файл .vimrc
.
Готово - команда скопирована с одного tty на другой и выполнена.
startx
, нет просто никакого показанного вывода направленной команды; но это может быть намного хуже. Я попытаюсь адресовать к той проблеме как можно скорее. – JMCF125 09.02.2014, 20:21