Run dialog для FVWM

захотелось странного – нормальную запускалку в 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *