ДА: есть способ указать уже запущенной x-программе открыть файл из bash!
Итак, по совету техподдержки StataCorp, оказалось, что xdotool
(который можно установить с помощью sudo apt установить xdotool
, если его еще нет в вашей системе) предлагает решение именно той проблемы, о которой идет речь в моем вопросе. С сайта проекта:
xdotool
позволяет имитировать ввод с клавиатуры и мышь, перемещать окна и изменять их размер и т. д.Для этого используется расширение XTEST X11 и другие функции Xlib.
✓ Примечание: Если вы используете Wayland, имейте в виду, что это программное обеспечение не будет работать правильно. ï¸
С xdotool
, вы можете искать окна и перемещать, изменять размер, скрывать и изменять свойства окна, такие как заголовок. Если ваш оконный менеджер поддерживает это, вы можете использовать xdotool
для переключения рабочих столов, перемещения окон между рабочими столами и изменения количества рабочих столов.
Чтобы решить мою проблему с xdotool
, мне нужно было создать xdotool
сценарий, который я вызываю statadoc.xdo
:
#!/usr/bin/xdotool
search --name "Stata/MP"
тип --окно %1 '$1' '$2'
ключ --окно %1 Возврат
Несколько комментариев к этому короткому скрипту:
- Путь может быть чем-то иным, чем
/USR/бен/xdotool
, поэтому обязательно подтвердите это с помощью какой xdotool
или похожие.
- Вторая строка будет частично соответствовать названию
"Стата/МП 17.0"
со строкой, предоставленной выше. Это полезно, так как, например, при обновлении версии до 17.1 или 18.x скрипт не сломается. поиск
Команда определяет окно X-приложения, с которым я хочу взаимодействовать.
xdotool
скрипты принимают аргументы, следующие бить
-нравиться $1
, $2
и т.п. условности.
-
тип
команда буквально печатает предоставленный текст — в моем случае содержимое двух предоставленных $1
и $2
строковые аргументы в 1-м (и только в моем случае) окне, определяемом поиск
команда в строке 2.
-
ключ
команда отправляет <ENTER>
(или же <RETURN>
если хотите) в то же окно Stata.
Теперь давайте посмотрим на мой модифицированный скрипт запуска, который вызывает statadoc.xdo
в третьей-последней строке (я добавил раздел впереди, чтобы узнать, указывает ли предоставленный аргумент на определенные типы файлов Stata — разные команды использования необходимы для изящной обработки каждого … мой пример неполный, но это типы файлов Я использую в большинстве своих работ):
# Проверяем НЕТ ли аргумента. Если нет, ничего не делайте.
если [-z "$1"]
тогда
сломать
# В противном случае установите префикс на значение по умолчанию, а затем проверьте
# оканчивается ли имя файла на .hlp, .sthlp, .ado, .do или .gph
еще
префикс = «использовать»
если [ ${1##*.} = "hlp" ] || [ ${1##*.} = "sthlp" ] || [ ${1##*.} = "адо" ] || [ ${1##*.} = "делать" ]
тогда
# Если имя файла ДЕЙСТВИТЕЛЬНО заканчивается одним из этих четырех префиксов, то
# изменить префикс на "doedit", чтобы Stata открывал документ с помощью
# редактор do-файлов.
префикс = «редактировать»
фи
# Если имя файла заканчивается на .gph, измените префикс на "doedit", чтобы
# Stata открывает документ с помощью средства просмотра/редактора графиков.
если [ ${1##*.} = "gph" ]
тогда
prefix="использование графа"
фи
сломать
фи
# Проверяем, запущен ли xstata-mp v17
exit_code_pidof_xstata_mp=$(pidof/usr/local/stata17/xstata-mp)
# если xstata-mp v17 НЕ запущен, то запустить его с аргументом $1
если [ -z "$exit_code_pidof_xstata_mp" ]
тогда
/usr/local/stata17/xstata-mp -q $1; выход >/dev/null
# но если xstata-mp v17 работает, то выведите его на передний план
еще
# Сначала вызовите statadoc.xdo с префиксом в качестве первого аргумента,
# и указанный путь к файлу в качестве второго аргумента
/usr/share/stata17/bin/statadoc.xdo "префикс $" "$1"
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep /usr/local/stata17/xstata-mp)" | tail -1 | awk '{ print $1 }')"; выход > /dev/null
фи
Примечание. Это решение для Gnome, работающего на Xorg.