Просто используйте приложение ярлыка для создания ярлыков для этого сценария..
Вызовы в качестве примера: script_name left
... script_name right
Лучший documentaton/examples я нашел для wmctrl
в Spiral Надежды
Для xprop
, страница справочника имеет несколько основных примеров, но я ничего не нашел для нее с таким же количеством детали как страница Spiral of Hope...
#!/bin/bash
# $1 ... top | bottom | left | right
#
unset x y w h a
eval $(xprop -root |sed -rne 's/^_NET_WORKAREA\(CARDINAL\) = ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)$/x=\1;y=\2;w=\3;h=\4/p' \
-e 's/^_NET_ACTIVE_WINDOW\(WINDOW\): window id # (0x.*)$/a=\1/p')
[[ -z "$a" ]] && exit 1
case "$1" in
top ) ((h=h/2));;
bottom ) ((y=y+(h-(h/2))));((h=h/2));;
left ) ((w=w/2));;
right ) ((x=x+(w-(w/2))));((w=w/2));;
esac
wmctrl -i -r "$a" -e 0,$x,$y,$w,$h
#
После того, как я задал этот вопрос, я принял другое, но гораздо более эффективное решение: использовать tmux.
Запустите новую именованную, отделенную сессию:
$ tmux new -d -s top
Отправьте команду в ее нулевое окно.
$ tmux send-keys -t top:0 "top" C-m
C-m
эквивалентно нажатию клавиши return. Часто это то, что вам нужно; иногда вы захотите оставить это без внимания.
Набор команд tmux хорошо документирован. Поэтому легко написать гораздо более сложные скрипты для управления им.
Обычно это был бы крайне неприятный ответ, но поскольку это мой вопрос, я позволю себе некоторую свободу действий, тем более что я так и не смог добиться надежной работы ни одного из других методов. В отличие от них, я смог правильно написать сценарий tmux при первой же попытке.
Создайте a ~/.screenrc.top
как так:
screen
stuff "top\015"
Теперь выполненный screen -c ~/.screenrc.top
. Никакое состояние состязания!
Вот несовершенное решение, которое я нашел.
screen -e'^\\\' -dmS top-in-screen
Затем можно работать:
screen -S top-in-screen -p 0 -X stuff 'top^M'
(Обратите внимание на это, хотя Вы будете только видеть ^M
необходимо на самом деле ввести C-v
сопровождаемый сразу C-m
.)
Это несовершенно, потому что (я думаю) существует состояние состязания между первыми и вторыми вызовами экрана.
Из http://aperiodic.net/screen/faq#how_to_send_a_command_to_a_window_in_a_running_screen_session_from_the_commandline, который имеет большую другую хорошую информацию также.