Как контролировать открытие или запуск приложений в linux/tcl/python?

Я пытаюсь создать панельное приложение, похожее на авангардный навигатор окна или единство ubuntu.

Мой вопрос: как только я создам панель с предопределенными приложениями, как я могу добавлять элементы на панель, когда приложения открыты или запущены?

Вот мой исходный код в tcl:

package require Tk

set items {xterm gvim firefox}
wm withdraw .
toplevel .panel
wm attributes .panel -topmost 1 ; # on top
bind .panel <Escape> {exit}
wm geometry .panel +0+0
wm overrideredirect .panel yes ; # remove window decorations

set counter 0
foreach item $items {
    incr counter
    set separator " "
    label .panel.$counter -text "$item$separator" -bg black -fg white \
    -font {-family "Fixedsys Excelsior 3.01" -size 12}
    grid .panel.$counter -column $counter -row 0
}

Есть ли какая-нибудь команда терминала, tcl или python, которая может это сделать?

Цените любые идеи. Заранее спасибо.


person milarepa    schedule 02.01.2013    source источник
comment
Может быть, вы можете скопировать / изучить прихоть оконного менеджера Tcl / Tk: whim.linuxsys.net/site/0   -  person schlenk    schedule 03.01.2013
comment
Я уже посмотрел на него, но, к сожалению, не смог скомпилировать его на своей машине с Ubuntu. Спасибо, в любом случае.   -  person milarepa    schedule 05.01.2013


Ответы (1)


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

В панели послушайте «хорошее» имя:

package require Tk
tk appname MyExcellentPanel
proc registerItem args {
   # How to do the registration of things here
}

В вспомогательном скрипте:

#!/usr/bin/env wish
package require Tk
wm withdraw .                               ;  # IMPORTANT! Don't show a GUI here
send MyExcellentPanel registerItem $argv    ;  # The magic command
exit                                        ;  # IMPORTANT! Exit now

Теперь вы можете использовать этот небольшой скрипт из скрипта оболочки или где-либо еще, чтобы отправить инструкцию на панель, чтобы что-то зарегистрировать. Это так просто.


Если команда send отсутствует, попробуйте пакет comm в Tcllib с comm::comm send как приблизительный эквивалент send. Однако нет ничего точно такого же, как tk appname, так как нет переносимого способа сделать реестр сопоставлений портов (comm использует локальные каналы TCP), поэтому вам нужно найти способ передать эту информацию (файл в известном месте?) . Увы, я не очень опытен в этом, поэтому не могу подробно посоветовать.

person Donal Fellows    schedule 02.01.2013
comment
Спасибо за ваш ответ. Я просто смотрю на справочную страницу send, и это кажется хорошей отправной точкой. Спасибо еще раз. - person milarepa; 04.01.2013