LINUX.ORG.RU

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

 , ,

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

4

2

Привет, ЛОР.
Многим знакома концепция выпадающего терминала, например 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)
Ответ на: комментарий от ann_lortemp2

Иксы, кстати, тоже говно.

Всё говно, кроме мёда.

UPD Если подумать, то мёд тоже говно.

u-235 ★
()
Последнее исправление: u-235 (всего исправлений: 1)
Ответ на: комментарий от 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 ★★
()
26 июля 2026 г.
Ответ на: комментарий от ann_lortemp2

guake топ, в отличие от tilda процесс не убивается по ctrl+D

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