[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SOF: Tcl/Tk



>>>>> Denis Dzyubenko writes:

    VW> if {$tcl_platform(platform) == "unix" } {
    VW> set initial_path $env(HOME)
    VW> } elseif {$tcl_platform(platform) == "windows" } {
    VW> set initial_path $env(USERPROFILE)
    > насколько я понимаю это только для NT? в 98 вроде не определен 
    > USERPROFILE

Проверяйте  платформу, а  затем, если  это windows  -- бегом  в реестр
(package require registry), и оттуда берём всё нужное.

Если вы пишете кросс-платформенное приложение, то для windows советую
хранить настройки в реестре, а не в каком-нибудь $env(USERPROFILE)/.mydotfile.
Ну не принято это в виндах. Не положено.

    VW> Хорошего способа не знаю. В принципе wish -class дает требуемый
    VW> результат, но мне не удавалось засунуть это в строчку с #!
    > О, точно! вот так работает:
    > =+==
    > #!/bin/sh 
    > # the next line restarts using wish \
    > exec wish "$0" -class "wndclass" "$@"
    > =+==
    > Это из хэлпа, хотя я не понимаю почему такая конструкция работает.

С точки  зрения /bin/sh, здесь  закомментированы две первые  строки, а
третью нужно  выполнить. С  точки зрения tclsh  и wish,  третья строка
является продолжением второй, то есть частью комментария.

    VW> Для того,  чтобы получить  значение опции из  option database.
    VW> Там можно хранить не только те опции виджетов, которые виджеты
    VW> подбирают  автоматически, но  и любые  другие конфигурационные
    VW> данные.

    > т.е. option db != xrdb ?  даже optiondb > xrdb ?

Ну, в xrdb частенько кладут не только свойства виджетов, но и настройки
самого приложения. Для такого случая xrdb и пригождается.

Кроме того, частенько пишутся "мегавиджеты" на основе чистого Tcl и Tk.
Прочитать из option db умолчания для мегавиджета тоже бывает нужно.

    VW> Например, если ты пользуешься тэгами в текстовом виджете, то цвета 
    VW> шрифта помеченного тэгом автоматически из optiondb не подберутся.
    VW> А с помощью $widget tag configure -fg [option get $widget mytagfont TagFont]
    VW> ты ее оттуда добудешь.

    > вот так не работает
    > option readfile ~/.Xdefaults
    > puts "[option get . myfont font]"

Во-первых, синтаксис  "option get  window _name_ _class_"  означает не
то, что вы  подумали. В данном случае window  должно быть сопоставлено
шаблону *myfont. А name и class -- это "имя опции" и "класс опции".

Сиречь
   option readfile .Xdefaults
   frame .myfont 
   puts "[option get .myfont font Font]"
будет работать на вашем примере.

    > В ~/.Xdefaults
    > *myfont*font: sdssd

Во-вторых, читать файл .Xdefaults  -- странное занятие для приложения.
Вам  следует   либо  довольствоваться  ресурсами   xrdb,  которые  уже
определены для данного дисплея (в debian они читаются из ~/.Xresources
при   запуске   X-сервера);   либо   написать   корректную   обработку
XENVIRONMENT  и XFILESEARCHPATH  (см.  man X),  чтобы  вести себя  как
"классическое иксовое приложение". Либо, на худой конец, подчитывать
какой-нибудь ~/.myapprc и /etc/myapp.conf, но _не_ .Xdefaults или .Xresources.

-- 
With Best Wishes, Anton Kovalenko /* http://kovalenko.webzone.ru */
#!/usr/bin/wish - best wish I have for you!



Reply to: