захотелось странного – нормальную запускалку в fvwm. но возникли трудности. то, что дается самим fvwm-ом – убого до безобразия. виджеты для ввода текста что в FvwmScripts, что в FvwmForm тупые до ужаса, не позволяют редактирование от слова вообще, да и ограничения по длине у них идиотские. зато есть Swallow и urxvt. первое позволяет встроить что угодно, благодаря XEmbed, второе – то, что надо для ввода. но, хочу свою историю и поменьше всякого лишнего. сначала подумывал об отдельном конфиге для zsh (bash собран без каких-либо интерактивностей, только для скриптов), но уж очень громоздкие решения. в результате нарыл rlwrap – очень годная тулза, использующая readline и history для организации ввода с историей и прочими плюшками. в результате родилось следующее
urxvt -name YRun +sb -bg "$[infostore.pr_bg]" -fg "$[infostore.pr_fg]" -fn "$[infostore.pr_fn]" -g 35x1-1500-1500 -e rlwrap -o -S "> " -pRed $[FVWM_LIBDIR]/prun.sh
из infostore берутся настройки цветов и шрифт, команда обрабатывается таким скриптом
#! /bin/bash # -*- mode: sh -*- TRM=${XTERM:-xterm} cd / while : ; do read cmd echo -ne '\ec' # run command export cmd ( case $cmd in http://*|https://*|ftp://*|file://*) xdg-open $cmd ;; mailto://*) xdg-email $cmd ;; man://*|man ) $TRM -e man ${cmd:6} ;; telnet |ssh ) $TRM -e $cmd ;; t:*) $TRM -e ${cmd:2} ;; *) $cmd ;; esac ) &> /dev/null & done
следующая проблема – это получение фокуса. хоть по кнопке, хоть по клику мышкой – фокус не передается, если эта гадость встроена в панель, которая имеет свойство NeverFocus
эта гадость решилась при помощи xdotool
для панели (клик мышкой) – Action (Mouse 1) `Exec xdotool search –classname YRun windowfocus`,
для клавы – Key F2 A M Exec exec xdotool search –classname YRun windowfocus
в результате – пара строк и запускай, что пожелаешь
*FvwmPanel: (Id run, $[infostore.pr_sz]x1, Padding 2 2, Action (Mouse 1) `Exec xdotool search --classname YRun windowfocus`, Swallow(UseOld,NoKill) "YRun" 'Exec exec urxvt -name YRun +sb -bg "$[infostore.pr_bg]" -fg "$[infostore.pr_fg]" -fn "$[infostore.pr_fn]" -g 35x1-1500-1500 -e rlwrap -o -S "> " -pRed $[FVWM_LIBDIR]/prun.sh') Key F2 A M Exec exec xdotool search --classname YRun windowfocus