LINUX.ORG.RU
ФорумTalks

Пишу принципиально новый fvwm stater's kit, принимаю пожелания, код и картинки

 , ,


4

6

Собственно. Кто пользовался/пользуется, расскажите, что было непонятно, что неудобно, что нужно объяснить лучше, что добавить, если есть пиксмапы или интересные функции - делитесь.

Расчитываю управиться за пару-тройку недель с переводом на русский, утрясанием всех вопросов по использованию чужого кода, консультациями с Великим Гуру fvwm и т.д.

Алсо cast ananas, можно я возьму твой питоноскрипт? С кредитсами, разумеется.

★★★★★

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

Есть где-то .fvwmrc в открытом доступе от Кнута. Я оттуда утащил обрамление окон и по-моему модель использования виртуальных экранов.

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

Можно подробнее про экраны? Что там такое и где этот файл?

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

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

Файл Кнута тут: http://www-cs-faculty.stanford.edu/~uno/programs/.fvwm2rc — не следует брать оттуда всё, так как Кнут таки весьма специфичный пользователь и многое, чего другие пытаются автоматизировать, он предпочитает делать врукопашную.

Подробности того, чего я, несмотря на свою лень, добавил в свой .fvwmrc/config я напишу позже, когда доберусь до него.

Evgueni ★★★★★
()

Можно рассказать для тех кто в танке, в чем особенности и сильные стороны fvwm? Википедию читал. Интересно знать мнение рядовых пользователей.

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

Посмотри мои скрины в галерее.

Там тупо можно делать всё, что касается управления окнами и запуска приложений. Кроме композитинга. Если где-то есть какая-то фича и ты понимаешь, как она работает, то ты можешь прикрутить её к fvwm.

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

это «емакс» виндовых менеджеров

т.е. жирная и бестолковая хренота для ылиты? ню ню ;)

Rastafarra ★★★★
()

я не возражаю

а по поводу, что непонятно - функции. хороший редактор AddToFuct был бы очень плюс

и в дополнение, скрипт для обработки xdg autostart

#! /bin/sh                                                        
                                                                  
dirs=$(echo $XDG_CONFIG_HOME:$XDG_CONFIG_DIRS | sed 's/:/\n/g')   
                                                                  
for d in $dirs; do                                                
    for f in $d/autostart/*.desktop; do                           
        cmd=$(grep -m 1 -e '^[[:blank:]]*Exec' $f | cut -d = -f 2)
        [[ -n "$cmd" ]] && echo "+ I Exec exec $cmd"              
    done                                                          
done                                                              
                                                                  
exit 0                                                            

загоняется в fvwm

DestroyFunc InitFunction                       
AddToFunc InitFunction                         
PipeRead '/where/is/autostart.sh'
ananas ★★★★★
()
Ответ на: комментарий от gensym

stumpwm уже из эры транзисторов

да, но он емаксовее

lazyklimm ★★★★★
()

в чём принципиальная новизна?

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

Да, я очепятался.

drBatty Ну там нескучные обои будут, и ещё что-нибудь придумаю, может, антивирус.

ananas - да, согласен. Редактора я, конечно, писать не стану, но постараюсь немного подробнее объяснить.

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

и не стоит делать портянку. маленькие конфиги для разных частей и нечто типа /etc/X11/fvwm.conf.d/, куда они симлинками кидаются будет самое оно

кстати, подобие тем, да с объяснениями по поводу пиксмапов и векторных картинок - тоже будет плюс

ananas ★★★★★
()

Мой fwvm представляет из себя просто пустой экран с одной немного нестандартной конструкцией (утащил идею у Кнута), которую можно увидеть тут: auctex forward search Это просто список виртуальных экранов, часы и загрузка в одном флаконе. На картинке конструкция находилась на левом мониторе в верхнем углу (посередине снимка). В том или ином виде эта конструкция у меня уже много лет и сейчас она находится всегда на правом мониторе в верхнем углу. Число рабочих виртуальных экранов возникло экспериментальным путём, но тогда у меня был только один монитор. С двумя мониторами в принципе достаточно 4ёх.

Код:

*FvwmButtonsRows 5
*FvwmButtonsColumns 10
*FvwmButtonsGeometry 165x84+2782+0 # 2960-165
*FvwmButtonsBoxSize fixed
*FvwmButtonsFont None
*FvwmButtonsBack Orange
*FvwmButtonsPadding 0 0
*FvwmButtons(4x4+6+0, Swallow(UseOld,Respawn) ASClock "Exec LANG=C asclock -theme /usr/share/asclock/penguin/")
*FvwmButtons(10x1+0+4, Swallow(UseOld,Respawn) \
  XLoad "Exec xload -nolabel -geometry 165x12+0+0 -bg dimgrey -fg white -update 1")
#метки на Pager'е
*FvwmPager: Label 0 "1"
*FvwmPager: Label 1 "2"
*FvwmPager: Label 2 "3"
*FvwmPager: Label 3 "4"
*FvwmPager: Label 4 "5"
*FvwmPager: Label 5 "6"
*FvwmPager: Columns 3
*FvwmPager: Rows 2

*FvwmButtons: (6x4+0+0,Swallow "FvwmPager" "FvwmPager 0 5")

Переключалка для виртуальных экранов Alt+{1,2,3,4,5,6}:

Key 1 A M GotoDesk 0 0
Key 2 A M GotoDesk 0 1
Key 3 A M GotoDesk 0 2
Key 4 A M GotoDesk 0 3
Key 5 A M GotoDesk 0 4
Key 6 A M GotoDesk 0 5

Переключение между окнами с клавиатуры (де факто использую только Alt+TAB, так что полезна только первая строчка)

Key Tab A M WindowList Root c c \
       CurrentDesk, NoGeometry, CurrentAtEnd, IconifiedAtEnd
Key Super_L A A WindowList
Key Super_R A A Menu Window-Ops Nop
Key Menu A A Menu Root-Menu Nop

Обрамление окон у меня можно посмотреть тут: TeXmacs и FriCAS Тоже утащил у Кнута и лень было менять

# I'm putting three buttons in the titlebars of ordinary windows.
# At the left (which Fvwm calls button 1), a lightning bolt;
# this will close the program when touched with any mouse click.
# (It does NOT pop up a menu. Closing is better than Deleting and Destroying:
# it tries to delete gracefully, then destroys if the window is uncooperative.)
Mouse 0 1 A Close
ButtonStyle 1 Vector 7 \
  65x15@0 25x55@1 45x55@0 35x85@1 75x45@0 55x45@1 65x15@0
ButtonStyle 1 - MWMDecorMenu

# At the right, a button that iconifies the window; we draw a small square
# (because I tried to draw an X but it looked horrible):
Mouse 0 2 A Iconify
#ButtonStyle 2 Vector 17 \
#  20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 60x50@0 80x70@1 \
#  80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@0 20x20@1
ButtonStyle 2 Vector 5 40x40@1 60x40@1 60x60@0 40x60@0 40x40@1
ButtonStyle 2 - MWMDecorMin

# Next to that, a button with a big square; this one maximizes the window.
# (More precisely, if you double-click, the window goes to full screen size;
# if you single-click, it goes to full height but keeps its width.
# But if the window was already in "maximized" state, it goes back to normal.
# If you try to drag this button, it unconditionally goes to full width.)
Mouse 0 4 A Maximize-Function
ButtonStyle 4 Vector 5 20x20@1 80x20@1 80x80@0 20x80@0 20x20@1
AddtoFunc Maximize-Function "D" Maximize 100 100
+                           "C" Maximize 0 100
+                           "M" Function Go-Max
AddtoFunc Go-Max  "I" Current (Maximized) Maximize
+                 "I" Maximize 100 100
ButtonStyle 4 - MWMDecorMax

Реакция окон на мышь (при наведении на окно автоматически поднимается над другими окнами без необходимости его кликать):

Module FvwmAuto 1000 Raise Nop
Style * FocusFollowsMouse

Реакция на клики на пустом экране (взял у Кнута не переделывая):

# Now for mouse commands in the root window R:
# Left mouse button brings up Root-Menu; middle button brings up Window-Ops
# Clicking instead of dragging makes the menu stay up; cursor is <== then.
# Double-clicking takes the menu away.
# Here "A" means an arbitrary combination of shift/meta/control/numlock etc.
Mouse 3 R A Menu Root-Menu Nop
Mouse 2 R A Menu Window-Ops Nop
# Right button gives window list. Caution: Double clicking gets you a sort of
# random window, because double-click control comes only with a Menu spec!
Mouse 1 R A WindowList

Стандартное меню заполняется под свои задачи. Для меня самое главное, чтобы вверху был вызов терминала и emacs, то есть что-то вроде:

AddtoMenu Root-Menu "xterm" Exec exec  gnome-terminal
+ "Emacs " Exec exec emacs -geometry 100x48+0+0 -fn 10x20
ну и так далее

Меню с действиями на окнах (средняя кнопка):

AddToMenu Window-Ops "Window Operations" Title
+ "Move" Move
+ "Resize" Resize
+ "Raise" Raise
+ "Lower" Lower
+ "Iconify/DeIconify" Iconify
+ "Stick/UnStick" Stick
+ "Maximize/Normalize" Maximize
#+ "Refresh" RefreshWindow
+ "" Nop
+ "Delete" Delete
+ "Close" Close
+ "Destroy" Destroy

Реакция на клик мыши на обрамлении окна, для его переносамежду виртуальными экранами. Stick — окно есть на всех виртаульных экранах, Unstick — окно есть только на текущем экране

# Middle mouse Stick or UnStick 
Mouse 2 FTSI A Stick

Добавил реакцию на клик мыши по обрамлению окон для постоянного выведения их на передний план (иногда для некоторых окон это необходимо)

# Right mouse  raises window Layer.
AddToFunc layer-raise
+ I Layer 1
+ I Raise
Mouse 3 FTSI N layer-raise
# Right mouse + Shift/control/Meta puts window to default layer.
AddToFunc layer-default
+ I Layer 
+ I Raise
Mouse 3 FTSI S layer-default
Mouse 3 FTSI C layer-default
Mouse 3 FTSI M layer-default

При запуск fvwm часть программ стартует вместе с ним. В частности открывается пара терминалов на 2ом и 3-ем виртуальных экранах и emacs на основном:

AddToFunc InitFunction "I" Echo initializing...
+ "I" Function Basic-Setup
+ "I" Desk 0 1
+ "I" Exec exec gnome-terminal -t "удалённый ПК" -e "ssh удалённый@адрес"
+ "I" Wait gnome-terminal
+ "I" Desk 0 2
+ "I" Exec exec gnome-terminal 
+ "I" Wait gnome-terminal
+ "I" Desk 0 0
+ "I" Exec exec xplanet -longitude 82 -latitude 55 
+ "I" Exec exec ssh удалённый@адрес bash --login -c "\"/usr/bin/emacs -fn 10x20 -geometry 100x52+420+0\""
+ "I" Exec exec xscreensaver -no-splash
#emacs -geometry 82x56+0+0 
#+ "I" Wait emacs
#+ "I" Exec exec xeyes -geometry 55x50+1050+12 -fg DarkGreen -center dimgrey -outline \#000060
#+ "I" Wait xeyes
+ "I" Exec exec setxkbmap -layout "us,ru(winkeys)" -option "grp:caps_toggle,grp_led:scroll,grp:switch"
+ "I" Exec exec xxkb

Собственно говоря, всё.

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

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

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

Жень, всё круто, конечно, но я беру курс на гламур - иконки в меню, более-менее модные декорации окон и т.д. А то сам видишь, что люди говорят. :3

С т.з. поведения буду косить под openbox с более совершенными пайпами, утаскиванием фич из других wm и наверное ещё с зайчатками тайлинга.

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

Вопрос не в гламуре, а в эффективности использования. Гламур — это последнее, что нужно при работе.

Evgueni ★★★★★
()

Что-то в гугле я не смог выяснить точно что же ты собираешься делать. Если конечно это не просто несколько подготовленных конфигов, для новичков вроде меня.

Если так то интересны примеры для fvwmscript и всякие плюшки как управление датой (не общесистемной), календарь с интеграцией какого-либо календаря-органайзера, управление звуком из всяких скриптовых виджетов.

leonidko ★★★★
()

Подскажете: а «global-menu» на этом fvwm тяжело будет реализовать. Или может он уже кем то реализован?

jamy
()

что нужно объяснить лучше

Для новичков не мешал бы хороший guide по FvwmButtons. Т.к. это отличительная особенность именно fvwm2. Например нижняя панель: OpenGL & Lisp

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

global-menu в смысле автоматически генерящееся при установке пакетов?

Что-то вроде

+ "Debian" Popup /Debian
Но толку, как и с любого громадного меню, нет никакого. Часто используемые программы лучше разместить в начале меню (их заведомо меньше десятка), а всё остальное запускать из терминала, который открывается быстро.

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

Нет, глобал меню - это когда меню приложения (файл, правка, вид...), находящегося в данный момент в фокусе, выносится из окна приложения на отдельную панель. Тынц

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

Типа как всегда было в маке? Нет, этого нет. То, что делается в случае Unity по сути дела набор костылей, так как реализовать маковскую идею можно только одним способом: заставить всех использовать ровно один истинный API. IMHO овчинка конечно симпатичная, но выделки не стоит.

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

Ну почему один API? В этом случае наблюдается одна закономерность: и в qt, и gtk+, и tcl/tc ...... всегда у объекта окна есть дочерний элемент «меню», во всех этих тулкитах он называется по разному, но количество их не бесконечно. Да и по сути это меню всегда одно, никаких супер-пупер трюков туда не суют. А если сделать в этих всех тулкитах, в методе создания меню, сделать замену нативного кода на передачу управления другой, единой библиотеке построения меню в панельке. Мне кажется - это можно даже сделать не лезя в исходники этих тулкитов.

jamy
()

Реквестирую поддержку multihead-конфигураций. Что-то пока не вник.

Из мыслей/хотелок:

  • «контекстные» окна - показ заданного окна по хоткею на текущем экране и возвращение фокуса после скрытия (может у меня руки кривые)
  • убрать генерацию xdg-меню: список основных приложений в главном + какой-нибудь App Finder (у меня сейчас xfce-шный);
  • добавить в меню настройки системные конфигураторы;
  • сделать вики для ДЕ-независимых апплетов и прочих полезняшек, которых не хватает для полноценного окружения.

Ну и выскажусь на тему дробления конфига: разбивать конфиг на 100500 файлов с одним параметром внутри не лучший вариант. Предлагаю разбивать на функциональные блоки: общие, действия с окнами, главное меню + env_vars и per_application_rules. Как-то так.

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

Предлагаю разбивать на функциональные блоки: общие, действия с окнами, главное меню + env_vars и per_application_rules. Как-то так.

Щас так и есть.

убрать генерацию xdg-меню: список основных приложений в главном + какой-нибудь App Finder (у меня сейчас xfce-шный);

Выкидывается удалением одной строки. Вообще я и сам им не пользуюсь, а пользуюсь gmrun.

добавить в меню настройки системные конфигураторы;

Это не кроссдистрибутивно и не кроссDEшно получится. По-хорошему пользователи потом должны быть способны добавить это дело сами.

С другой стороны, если делать генератор конфига, можно в качестве опции добавить.

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

http://itmages.ru/image/view/702535/f68510bd

Вообще есть арчвики для этого. Там как раз на такие приложения акцент, потому что арчеводов-стандалонщиков много. Иначе до собственного дистрибутива можно договориться.

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

Не настаиваю, просто мыслями поделился. Ну и да, приму участие в тестировании ;)

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

http://itmages.ru/image/view/702535/f68510bd

вообще такие вещи лучше через переменные окружения разруливать. какие-нибудь FVWM_RUN, FVWM_SHUTDOWN, FVWM_BROWSER и т.д., которые и дергать в нужных местах вместо прибитых гвоздями команд

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

Вообще Томас Адам просил не засирать env и не пользоватся для таких вещей SetEnv. И даже запилил команду InfoStore. Но версия, где она реализована, ещё не во всех дистрибутивах, поэтому:

http://itmages.ru/image/preview/702618/cdccb7d7

Я использую SetEnv как раз примерно для этого, там просто перечислены утилиты, про которые я буду писать. Я же не могу писать про все. :)

На самом деле, хотите - давайте через гитхаб скоординируемся, или через гуглодокс, или через список рассылки.

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

infostore - это только для конфиг. а через SetEnv можно передавать эти параметры и во внешние скрипты-хелперы

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

На самом деле, хотите - давайте через гитхаб скоординируемся, или через гуглодокс, или через список рассылки.

боюсь, у меня на это времени не будет.

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

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

Сейчас пока я прогоняю скрипт с командами xrandr и делаю рестарт, но это конечно варварство и надо от этого уходить.

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

Да у меня тоже его не особо много. Обучение веб-программированию пришлось забросить, потому что нужно учиться админить, а конфиг чота подоброс всяким разным и пора его причёсывать, пока я сам не перестал в нём ориентироваться. Заодно обновлю тему и упорядочу свои заметки. Просто если есть соображения и всякие ништяки - кидай куда-нибудь, хоть вот сюда.

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

Можно определить параметры в InfoStore и вызывать внешние скрипты из конфига, передавая параметры в этих переменных. Будем посмотреть, короче.

Hoodoo ★★★★★
() автор топика

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

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

minimoids скачай (на box-look.org), там виджетов много разных. Примеры в общем и так будут. :)

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

multihead, печаль

Попробовал, почитал, одно расстройство, с Xinerama Fvwm очень фигово дружит.

По пунктам:

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

ph030

will this come into the main-tree in the near future?

thomasadam

No — I hope not. FVWM does not exist to circumvent idiotic bugs and short-sightedness in other people's code, despite what many people would have you believe. The problem exists in Xinerama.

Далее ещё веселее:

Vincent Bernat

Since Xorg 7.3, Xinerama is mandatory. Therefore, your module is the only way to keep the old behaviour (the one without Xinerama). Would this change your mind about pushing this module into mainline ?

thomasadam

I can't push this module into mainline since I am not a developer. I'm also _slowly_ (like everything I do with working on FVWM) on this module, re-writing most of it as I go. It *sucks* though, since it a horrid complex heap of code. The better approach would be to slap the Xinerama developers into producing something sane which worked with the window manager.

Тема от 2007 года.

2. Нет возможности задать независимые Working Area. Если мониторы с разным разрешением, то эта самая рабочая область берётся с основного. В итоге у меня окна на втором мониторе разворачиваются только до рабочего размера на первом. Помогает EWMHMaximizeIgnoreWorkingArea, но в целом это не решение. Есть ещё такие решения, это уже совсем костыли.

3. Описанные в FAQ индивидуальные настройки экранов через read config.$[screen] с xinerama не работают.

Глобальных выводов делать не буду, скажу только, что awesome нормально на моей конфигурации работает «изкоробки», столы на каждом экране свои, настройки экранов индивидуальные есть, и никто на idiotic bugs не жалуется. Грустно.

ollowtf ★★★
()
Ответ на: multihead, печаль от ollowtf

Томас как всегда добряк и весельчак. Но у меня на работе два моника, они объединены в одну страницу, и никаких проблем у меня с этим нет (почти, если не считать fbpanel). Окна на разных мониках разворачиваются на весь экран без костылей.

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

С разным. Скрин запощу завтра.

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

Еще не хватает функции для выстраивания окон на экране как в тайловых wm, чтобы два (или более) окна делили полностью один экран.

Zodd ★★★★★
()

З̶д̶р̶а̶в̶с̶т̶в̶у̶й̶т̶е̶,̶ ̶э̶т̶о̶ ̶к̶а̶н̶а̶л̶ ̶о̶б̶ ̶а̶н̶и̶м̶е̶?

Не осиливаю два момента в настройке fvwm:

  1. хочу, чтобы FvwmButton проглатывал окно (xeyes например), проблема в том, что приложение может умирать и запускаться заново, но без помощи fvwm. Кофиг такой:
    DestroyModuleConfig NotifyEyes: *
    *NotifyEyes: Rows 1
    *NotifyEyes: Columns 1
    *NotifyEyes: BoxSize fixed
    *NotifyEyes: (1x1, Swallow (SwallowNew) "xeyes")
    проблема в том, что если запустить xeyes, а потом убить его (killall xeyes), то новый инстанс запустится не в кнопке, а как обычное окно.
  2. хочется через FvwmEvent add_window ловить *все* создаваемые окна, но ловятся они не все... в одном многооконном приложение ловится только последнее появившееся окно, а в быдлокоде на C++/Qt окно вообще почему-то не ловится...

    Куда копать?

Stil ★★★★★
()

Нда. Проблем. По первому пункту - если это действительно очень нужно, надо проверять, что xeyes умер, и если да - то ли пробовать через sendtomodule его возвращать, то ли по новой запускать всю связку. Кнопка рисуется один раз, потом к ней можно только через sendtomodule обращаться, либо рестартить модуль. Согласитесь, если само приложение падает, то это не совсем проблема fvwm.

Например в той же fvwmpiazza, которая написана как модуль и занимается тайлингом, выстраивание окон привязано к появлению нового окна, и если утащить поставленное аккуратно окно, оно само на место не вернётся, пока модуль так или иначе не дёрнуть. А автора этого модуля хвалили за хорошую привязку к fvwm и код.

Потом, что значит «ловить»? Если они без рамок, то Style * DecorateTransient.

Hoodoo ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.