- TkCon
- MegaWidget package
- Megawidget Library (устаревшая неподдерживаемая версия)
- Tcl Nightly CVS
- A minimal console
Есть программа tkcon, которая реализует продвинутую консоль Tcl, с историей, автодополнением и подсветкой синтаксиса. Ее автор, Jeffrey Hobbs (соавтор книги Practical Programming in Tcl/Tk), поддерживает также пакет megawidget, в который включен виджет Console, основанный на tkcon.
Пакет разрабатывается вместе с tcllib, но распространяется отдельно. Скачать последнюю версию можно здесь (на данный момент это widget-20100219). Этот виджет можно использовать, чтобы предоставить пользователю возможность выполнять Tcl-команды в контексте интерпретатора своего приложения.
Пример
1 2 3 4 5 6 7 8 9 10 11 | #! /usr/bin/wish lappend auto_path /path/to/megawidget/library package require Console entry .myentry -highlightcolor red -highlightthickness 2 console .myconsole -setgrid 0 -showmenu false pack .myentry .myconsole -expand true -fill both |
Примечания
Использование в Tcl 8.6
В Tcl 8.6 на данный момент (стабильного релиза еще не было) сломана обратная совместимость в обработке виртуальных событий. Из-за этого в Console не работают некоторые биндинги, в том числе клавиши "вверх" и "вниз" для навигации по истории.
См. Bug #3582795. Автор виджета в курсе событий и написал мне, что пока что не ясна причина поломки совместимости в Tcl, поэтому исправления еще не внесены. Есть также workaround, который исправляет работу клавиш "вверх" и "вниз".
diff -rup widget-20050712.orig/library/console.tcl widget-20050712/library/console.tcl --- widget-20050712.orig/library/console.tcl 2005-07-13 10:05:18.000000000 +0400 +++ widget-20050712/library/console.tcl 2012-11-30 22:57:16.590578106 +0400 @@ -1597,20 +1597,24 @@ bind Console <<Console_KillLine>> { } } bind Console <<Console_Clear>> [namespace code { _clear [winfo parent %W] }] -bind Console <<Console_Prev>> [namespace code { - if {[%W compare {insert linestart} != {promptEnd linestart}]} { - tkTextSetCursor %W [tkTextUpDownLine %W -1] - } else { - _event [winfo parent %W] -1 - } -}] -bind Console <<Console_Next>> [namespace code { - if {[%W compare {insert linestart} != {end-1c linestart}]} { - tkTextSetCursor %W [tkTextUpDownLine %W 1] - } else { - _event [winfo parent %W] 1 - } -}] +foreach key [event info <<Console_Prev>>] { + bind Console $key [namespace code { + if {[%W compare {insert linestart} != {promptEnd linestart}]} { + tkTextSetCursor %W [tkTextUpDownLine %W -1] + } else { + _event [winfo parent %W] -1 + } + }] +} +foreach key [event info <<Console_Next>>] { + bind Console $key [namespace code { + if {[%W compare {insert linestart} != {end-1c linestart}]} { + tkTextSetCursor %W [tkTextUpDownLine %W 1] + } else { + _event [winfo parent %W] 1 + } + }] +} bind Console <<Console_NextImmediate>> [namespace code { _event [winfo parent %W] 1 }]
Опция setgrid
При использовании Console с опцией setgrid (которая включена по-умолчанию) внутри panedwindow можно наткруться на Bug #3466588, из-за чего, в частности, нельзя развернуть окно полностью.
Чтобы избежать этого эффекта, достаточно создать консоль с опцией -setgrid false.
Комментариев нет:
Отправить комментарий