LINUX.ORG.RU

Делаем любой терминал (и не только) выпадающим в системах на базе X11

 , ,

Делаем любой терминал (и не только) выпадающим в системах на базе X11

2

1

Привет, ЛОР.
Многим знакома концепция выпадающего терминала, например yaquake или tilda.
Однако, простым скриптом можно сделать любой терминал (например, xfce4-terminal) выпадающим. Ограничения именно на терминалы нету – можно запускать таким образом почти любое приложение. Описанный в статье способ работает только на Xorg.

Зависимости: x11-utils xdotool
Скрипт:

#!/bin/bash
# deps: x11-utils xdotool
# usage: raise.sh application-binary x-window-class 

app=$1
[ -n "$2" ] && win=$2 || win=$app

# get window id
winids=( $(xwininfo -tree -root|grep "(\"$win"|grep -E "        "|awk '{ print $1 }') )
echo "WIN IDS: ${winids[@]}"

# app does not running #
if ! pidof $app; then
	$app &
	exit
fi

for winid in ${winids[@]}; do 

	# app exists; get state
	state=$(xwininfo -id $winid | grep Map\ State | awk '{ print $3 }')
	active=$(printf '%x' `xdotool getwindowfocus`)


	# is window on current desktop?
	curdesktop=$(xdotool get_desktop)
	windesktop=$(xdotool get_desktop_for_window $winid)
	[ "x$curdesktop" != "x$windesktop" ] && continue

	# is window active?
	[ "0x$active" == "$winid" ] && active=yes || active=no

	case $state/$active in
		IsViewable/yes)
			xdotool windowminimize $winid ;;
		IsViewable/no)
			xdotool windowraise    $winid; xdotool windowactivate $winid ;;
		IsUnMapped/no)
			xdotool windowactivate $winid ;;
	esac


done

Использование:

  • Смотрим X window class нужного нам приложения:
~ ➤ xwininfo -tree -root|grep xfce4-terminal                                                                                                                                                     
     0x4a00001 "Xfce Terminal": ("xfce4-terminal" "Xfce4-terminal")  10x10+10+10  +10+10
        0x4a00003 "Terminal - ann@silvermoon: ~": ("xfce4-terminal" "Xfce4-terminal")  
  • Нам нужно первое название после скобочки – xfce4-terminal
  • Это совпадает с названием бинарника – xfce4-terminal
  • Вешаем на хоткей: raise.sh xfce4-terminal xfce4-terminal
  • В случае, если приложение не запущено – оно будет запущено.
  • В случае, если приложение скрыто (свёрнуто) – оно будет развёрнуто.
  • В случае, если приложение развернуто – оно будет свёрнуто.

Поведение практически идентично tilda.
Зачем? Просто. Захотелось выезжающий терминал в XFCE, сделал. А что?

Что это даёт? Всегда запущен один эмулятор терминала, который в любой момент можно вызвать/скрыть хоткеем, и не нужно открывать 100500 окон терминала и переключаться между ними.



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 11)

выпадающим в системах на базе X11

Это пролапс.

MoldAndLimeHoney ★★
()
Ответ на: комментарий от Bad_ptr

не представляю рабочий процесс без окон, «сворачивающихся (выпадающих) в заголовок». На вейланд такой функционал отсутствует. ^#$@W

glebiao
()
Ответ на: комментарий от glebiao

не представляю рабочий процесс без окон, «сворачивающихся (выпадающих) в заголовок». На вейланд такой функционал отсутствует. ^#$@W

заголовки = декорации?
ты что-то делаешь очень сильно не так.
они не нужны совсем: https://ibb.co/tPktjvFH (Firefox/Thunderbird исключение, там в заголовке urlbar хотя бы и он несёт полезную нагрузку в этом случае)

управлять окна (minimize/maximize/close) удобнее с клавиатуры, перемещать окна удобнее зажав Alt и ухватив за любую часть окна, а не только за ненужный «заголовок», поэтому эти ваши декорации тупо занимают место по вертикали, которого и так всегда не хватает.

но привычка и синдром утёнка дело сильное, ага.

Wayland не нужен по другой причине – это убогое говно defective by design.
Иксы, кстати, тоже говно.

ann_lortemp2
() автор топика
Последнее исправление: ann_lortemp2 (всего исправлений: 2)
Ответ на: комментарий от u-235

мёд тоже говно – 70% мёда, продающегося у нас (в маленькой, но гордой прибалтийской республике) на рынке – разбавленный водой китайский сахарный концентрат.

а вот по части графических подсистем – у Haiku не говно, внезапно. (только Haiku сама по себе однопользовательское говно, но это детали)
говорят, у macOS ещё – но я не изучал особо, так что не факт, может просто эплофанатики опять эплофанатируют.

ann_lortemp2
() автор топика
Последнее исправление: ann_lortemp2 (всего исправлений: 1)
Ответ на: комментарий от Jeronimo

скрипт в ОП не столько про dropdown («выезжающее окошко в стиле Quake»), сколько про показ/скрытие любой графической программы хоткеем.
ну, почти любой – многооконный софт не поддерживается (но он и не нужен)

а по факту – это всё костыли из-за отсутствия нормального тайлингового WM, а переехать на тайлинг у меня лапки.

ann_lortemp2
() автор топика
Последнее исправление: ann_lortemp2 (всего исправлений: 3)
Ответ на: комментарий от Jeronimo

попробовал эту фичу - имхо, неудобно

Терминал постоянно скрывается когда нужен, а если закрепить, то мешается. В процессах стало множество xfce4-panel строчек, т.е. память и ресурсы на эту фичу нехилые тратятся.

irton ★★★★★
()
Ответ на: комментарий от irton

Там в настройках фокус настраивается. Из трея в настройках это также убирается.

Jeronimo ★★★
()
Ответ на: комментарий от ann_lortemp2

Можно, кстати, замутить ещё что-то по типу псевдотайлинга, если говорить про нетайловые вм. Но нужен вм позволяющий внешнее управление (например, berry wm). Его берём в связку с sxhkd и привязываем команды перемещения окон к хоткеям.

Но для реализации лейаутов нужно делать дополнительный клей из скриптоты. Но по итогу можно получить тайлинг даже лучше чем классический, т.к. он не ограничен концепцией тайлинга как такового.

rhubear
()

Вкладки сверху, это не удобно. Сравните с xfce4-terminal --drop-down

dmitry237 ★★★★★
()

А он просто окно делает выпадающим или ещё весь ввод перехватывает и направляет в выпавшее окно?

u5er ★★★
()

Хм, надо в свой wm добавить эту фичу. Только надо не название класса монополизировать, а какой-то другой способ найти нужное окно - чтобы запущеные своим ходом под это дело не попадали.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от ann_lortemp2

перемещать окна удобнее зажав Alt и ухватив за любую часть окна

Ну какой ещё альт, зачем отнимать хоткей у прог? Есть же ни для чего, кроме системных хоткеев, не нужная кнопка super - как раз подходит.

firkax ★★★★★
()
Ответ на: комментарий от ann_lortemp2

разбавленный водой китайский сахарный концентрат.

Почему китайский? Уже сироп сами сварить не могут?

firkax ★★★★★
()

предлагаю уже не изгаляться, а использовать лучшее ДЕ, которое придумало человечество - КДЕ с yakuake. Всем неверующим в удобство выпадающего терминала - вы просто его не так используете. Он максимально удобен, для задач, периодически требующих ещё одного терминала.

SpaceRanger ★★★
()
Ответ на: комментарий от ann_lortemp2

управлять окна (minimize/maximize/close) удобнее с клавиатуры, перемещать окна удобнее зажав Alt и ухватив за любую часть окна

Попробуй сделать вот это, держа в одной руке чашку кофе, бутерброд или чле^Wчто-то ещё полезное.

а не только за ненужный «заголовок», поэтому эти ваши декорации тупо занимают место по вертикали, которого и так всегда не хватает.

Это место легко можно отбить, выкинув нахрен огромные виджеты GTK4 и заюзав нормальный фреймворк. В том же GNOME Terminal табы и заголовок занимают чуть ли не пятую часть окна при дефолтных настройках, что является лютым провалом. В твоём XFCE Terminal у табов почти половина места по вертикали не используется.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Сколько ни пытался, так и не смог проникнуться концепцией выпадающего терминала

Мне оказалось удобнее открыть развёрнутое окошко терминала с необходимым числом табов на специально назначенном для этого воркспейсе и переключаться туда по хоткею

alx777 ★★★
()

Что это даёт? Всегда запущен один эмулятор терминала, который в любой момент можно вызвать/скрыть хоткеем

Win+1 например делает тоже самое :)

IIIypuk ★★★★★
()
Ответ на: комментарий от alx777

Сколько ни пытался, так и не смог проникнуться концепцией выпадающего терминала

В техподдержках хостинг-провайдеров практикуют, но там работа весьма разнообразная: на глупый вопрос ответь, в админ-панели галку ткни, найди и исправь ошибку в PHP. При этом админят админы, а ты в терминале в основном процессы убиваешь. Guake там выглядит уместно.

Vidrele ★★★★★
()
Ответ на: комментарий от Vidrele

В техподдержках хостинг-провайдеров практикуют, но там работа весьма разнообразная

Guake там выглядит уместно

Соглашусь, если терминал нужен от случая к случаю (а не как мне, минимум штуки 3 постоянно открытых), то почему бы и нет

alx777 ★★★
()
Ответ на: комментарий от ann_lortemp2

Ну наверное я намеренно разместил Konsole первым на панели задач, чтобы вызывать его вышеуказанной командой, нет?

IIIypuk ★★★★★
()

А чем тебе в xfce guake не угодил?

hbars ★★★★★
()

Захотелось выезжающий терминал в XFCE,

В Xfce терминал умеет выпадать штатно.

https://docs.xfce.org/apps/xfce4-terminal/dropdown

так что конечно +100500 за изобретательность и находчивость, но вот конкретно с xfce терминалом лучше использовать нормальное решение а не афро-американский инжиниринг. Причем выпадать он так умеет в том числе и под вейландом. Там правда проблемка - хоткей на скрытие повесить можно, а вот вернуть терминал хоткеем не выйдет. Для этого надо в композиторе на нужную комбинацию клавиш повесить команду xfce4-terminal –drop-down - ту же самую что и при изначальном запуске терминала в дроп-даун режиме. При этом если терминал уже запущен но просто скрыт - то он выведется на экран.

С тильдой на вяленом - надо собирать форк tilda-wayland, и в композиторе вешать вот такого монстра на клавишу:

dbus-send –session –type=method_call –dest=com.github.lanoxx.tilda.Actions0 /com/github/lanoxx/tilda/Actions0 com.github.lanoxx.tilda.Actions.Toggle

Qui-Gon ★★★★★
()
Ответ на: комментарий от MrBackToPython

хз какая версия в указанном году была

~ ➤ ls -la .bin/raise                                                                                                                                                                               
-rwxr-xr-x 1 ann ann 934 Jun 10  2016 .bin/raise
ann_lortemp2
() автор топика
Ответ на: комментарий от Jeronimo

Эта фича уже встроена

Господи, какая бездуховность! Они отняли у людей творчество…

BydymTydym ★★
()
Ответ на: комментарий от ann_lortemp2

Wayland не нужен по другой причине – это убогое говно defective by design.
Иксы, кстати, тоже говно.

Мы все в курсе, что на свете есть только одна вещь, которую нельзя назвать говном и это - моча. Да и то…

BydymTydym ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.