LINUX.ORG.RU

Вопрос по настройке пункта меню в awesomewm

 ,


0

1

Здравствуйте.

в awesome пункт меню может либо выполнять команду при клике: { «название пункта», команда/команды, 'путь_к иконке' },либо раскрывать менюху при наведении: { «название пункта», имя_меню, 'путь_к иконке' }.

Я захотел странного: объединить в одном пункте оба вышепривелённых варианта, то есть чтоб при наведении на пункт всплывало соответствующее меню, но чтоб при клике по этому пункту - выполнялась соответствующая команда (команды). Это вообще осуществимо? И, если это осуществимо, то как?

Апдейт. Простите, общественность, что зря дёрнул. Подобное меню неуправляемо с клавиатуры, а мне не хочется это терять. Вопрос сильно потерял в актуальности.

Спасибо за внимание.

а почётче сформулировать «странную хотелку», возможно с примером.

при наведении на пункт всплывало соответствующее меню

это понятно

но чтоб при клике по этому пункту - выполнялась соответствующая команда (команды)

не по-нял. что именно должно выполняться?

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

Кажется, я понял, что он имел в виду. Ему надо, чтобы при наведении курсора на пункт меню раскрывалось подменю, а при клике - выполнялась команда.

Правда, я не смогу тут помочь, ибо не использую меню

alex-pat ()
Ответ на: комментарий от anymouze

А какая разница? awful.menu выполняет проверку, и если это string, то скармливает её awful.spawn, а если функция, то дёргает (выполняет) эту функцию.

Хотелка ТСа выглядит реализуемой (после беглого просмотра кода модуля), но решение будет достаточно сложным.

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

но чтоб при клике по этому пункту - выполнялась соответствующая команда (команды)

не по-нял. что именно должно выполняться?

чтоб при клике на менюшный пункт выполнялась команда, как в случае «командного пункта», но меню, тем не менее, при наведении на этот пункт открывалось меню.

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

какая именно команда будет выполняться при клике на пункте меню, наведение курсора на который раскрывает подменю?

ну как «какая». какую сконфигурирую) некая предварительно определённая функция.

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

Хотелка ТСа выглядит реализуемой (после беглого просмотра кода модуля), но решение будет достаточно сложным.

А нарисуйте, пожалуйста, в общих чертах, куда мне рыть.

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

в общих чертах

Нужно переопределить сигналы (mouse::enter, mouse::leave и button::press) и ивенты (что-то про keygrabber, я не особо в теме) для пунктов меню.

Для этого потребуется переписать некоторые функции модуля awful.menu. Просто скопируй /usr/share/awesome/lib/awful/menu.lua в ~/.config/awesome/lib/awful/menu.lua и изменяй как угодно (учти, что некоторые вещи ломать критично — может как повесить намертво инстанс awesome, так и просто уронить его, потому советую тестировать в Xephyr).

Если хочешь proof-of-concept, открой issue с подробным описанием своей хотелки (на английском, естественно), вероятность, что отпишутся с готовым (минимальным) кодом и даже патчем очень высока.

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

Не, системный модуль переписывать не буду пытаться - во-первых, не настолько уж я глубоко в теме, чтоб так глубоко пилить, а, во-вторых, я ЛОР-эффект поймал в его специфической ипостаси: опубликовав хотелку, осознал её ненужность))) (см. апдейт к посту). За Xephyr спасибо, буду знать.

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

Подобное меню неуправляемо с клавиатуры

А вот и нет. Впрочем, зависит от того, как напишешь код, можно вообще keygrabber выкинуть.

За Xephyr спасибо, буду знать.

#!/bin/sh
resolution="${1:-800x600}"
trap 'aoeu="$(pkill -KILL Xephyr -c &>/dev/null)"' EXIT INT QUIT ABRT KILL
nd="$( printf "${DISPLAY}" | awk '{gsub(/\.|:/, " "); print $1 " " $2}')"
nd_major="$(( ${nd% *} + 1))"
new_display=":${nd_major}.${nd#* }"
if awesome -k 2>/dev/null; then
	Xephyr -noreset -host-cursor -screen ${resolution} -resizeable +iglx ${new_display} &
	export DISPLAY=${new_display}
	sleep 0.1
	awesome -c "${XDG_CONFIG_HOME}/awesome/rc.lua"
fi
{
	printf '\n'
	awesome -v
	if command -v luacheck &>/dev/null; then
		cd "${XDG_CONFIG_HOME}/awesome"
		printf '\n'
		luacheck -qq ./
	fi
}

Первым аргументом скрипту можно скармливать размер скрина (окна), по умолчанию открывает в 800×600.

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

Я понял, что при наведении курсора на такой пункт меню будет раскрыто подменю. А если кликнуть будет выполнена некая команда.

Я посмотрел на это глазами пользователя. В обычном меню, скажем, клик по пункту «Открыть файл» откроет файл (не сразу, диалог сначала — но это неважно, как мне кажется). Допустим «мы» модифицируем этот пункт: добавляем подменю с пунктами «Открыть в редакторе», «Открыть в браузере», «Открыть в ...» (и т.д.).

Как теперь оно работает? Я навёл курсор на «Открыть файл», выпало подменю, я кликну и что будет выполняться?!

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

тема уже неактуальна, но...

ну как «какая». какую сконфигурирую) некая предварительно определённая функция.

Да, это очевидно. Но это для личного пользования. А я интересовался с точки зрения «сферического пользователя». Концепция интересная, но не очевидная, как мне кажется.

P.S. Когда-то давно была у меня идея сделать свою реализацию контекстного меню. Делаешь ПКМ и ... вместо классического меню появляется «цветочек», где «лепестки» это пункты меню. В центре курсор мыши. Стоит его сдвинуть в сторону какого-либо пункта меню и этот пункт выполняется... До рабочей реализации дело так и не дошло... И кажется где-то уже был реализован похожий функционал. Я его не видел, слышал что-то...

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

Как теперь оно работает? Я навёл курсор на «Открыть файл», выпало подменю, я кликну и что будет выполняться?!

То, что ты забиндил на пункт-родитель (в дополнение раскрытию подменю при наведении). Именно поэтому и придётся модифицировать код.

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

появляется «цветочек»

такое встречал в игорях нередко, и иногда в фирменной виндовой утилите для всяких модных игровых мышей

но для работы минус такого подхода, что для клавиатуры такая организация меню «не очень» удобна, т.о. надо вводить две сущности меню, обычное и лепестковое...

P.S. https://www.fossmint.com/gnome-pie-circular-menu-application-launcher-for-linux/

actionless ★★★★★ ()
Последнее исправление: actionless (всего исправлений: 2)
Ответ на: комментарий от anymouze

И кажется где-то уже был реализован похожий функционал. Я его не видел, слышал что-то...

я определённо видел такой цветок. но дело было в мезозое, когда 98я винда была свежа и продвинута по сравнению с 95й

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

вместо классического меню появляется «цветочек», где «лепестки» это пункты меню. В центре курсор мыши. Стоит его сдвинуть в сторону какого-либо пункта меню и этот пункт выполняется

PieDock.

mord0d ★★ ()