xenial's weblog

launcher.tcl

Posted in scripting by xenial on July 7, 2007

Небольшой и неидеальный скриптик, позволяет быстро запускать приложения. Нужно править ручками, чтобы настроить, но настоящих индейцев это останавливать не должно. Для работы нужен Tcl/Tk (8.4).

#!/bin/sh
# the next line restarts using wish \
exec wish8.4 "$0" "$@"

proc maya {} { exec maya & }
proc shake {} { exec shake & }
proc houdini {} { exec /home/xenial/bin/houdini & }
proc halo {} { exec /home/xenial/bin/halo & }
proc cinepaint {} { exec cinepaint & }
proc blender {} { exec blender & }

proc screen {} {
    frame .frame
    pack .frame -side left -fill x

    button .maya -text maya -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command maya -width 15
    button .shake -text shake -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command shake -width 15
    button .houdini -text houdini -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command houdini -width 15
    button .halo -text halo -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command halo -width 15
    button .blender -text blender -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command blender -width 15
    button .cinepaint -text cinepaint -foreground grey90 -relief raised -activebackground grey30 -activeforeground white -background black -command cinepaint -width 15

    pack .maya .shake .houdini .halo .blender .cinepaint -side top -fill both -expand yes -pady 1

}
screen

bind . <Control-c> {destroy .}
bind . <Control-q> {destroy .}

# some hotkeys and osd. the string starting from "| osd_cat " can be destroyed. "}" must be at the end

bind . <m> {exec maya &; exec printf maya | osd_cat -A center -d 4 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
bind . <s> {exec shake &; exec printf shake | osd_cat -A center -d 2 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
bind . <e> {exec emacs &; exec printf emacs | osd_cat -A center -d 2 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
bind . <c> {exec cinepaint &; exec printf cinepaint | osd_cat -A center -d 2 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
bind . <b> {exec blender &; exec printf blender | osd_cat -A center -d 2 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
bind . <x> {exec xterm -bg black -fg white &; exec printf xterm | osd_cat -A center -d 1 -p bottom -s 0 --font "-sgi-screen-medium-*-*-*-14-*-*-*-*-*-*-" -c cyan }
focus .

Ну вот. И не забудте сделать исполняемым:

chmod +x launcher.tcl

В принципе, все просто (и, в общем, криво), но работает и радует.

Итак, для изменения кнопки в приложении правим строки 5 (название процедуры и команда запуска приложения), 16 (параметры кнопки) и 33 (горячая клавиша).

Если в системе отсутствует osd_cat, то можно удалить пайп, который за него отвечает. Либо установить osd_cat :) Можно назначить скрытые ноткеи, например у меня по «x» запускается xterm, по «e» — emacs и т.д.

Если меняете количество кнопок — незабывайте отражать это в строчке «pack ... » — они должны соответствовать количеству кнопок и процедур.

Применение с fluxbox.
Добавляем строчку в ~/.fluxbox/keys :

Menu	:ExecCommand /home/xenial/bin/launcher.tcl & sleep 1s && kill `pidof wish8.4`

«Menu» — это кнопка на клавиатуре, справа, между правым mod4 (win-key) и правым ctrl :)

Не пинайте меня за такое кащунство, если подскажете другой способ, буду безмерно благодарен :)

Можно добавить или самим изменить apps (~/.fluxbox/apps):

[app] (launcher.tcl)
  [Position]    (UPPERLEFT)    {1429 380}
  [Deco]    {NONE}
  [Sticky]    {yes}
  [Close]    {no}

Может кому-нибудь понравится, буду рад.

Advertisements
Tagged with:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: