Исправил работу со списком переменных из всплывающего окна. Теперь там можно выбрать из списка стрелками и вставить по Enter.

This commit is contained in:
svk
2026-01-29 14:22:55 +03:00
parent 1c7c2ec90e
commit 3de27dac4f
2 changed files with 94 additions and 28 deletions

View File

@@ -4,7 +4,7 @@ namespace eval Helper {
variable ::listActive 0
# Переменная для отслеживания предыдущего ввода (чтобы не обновлять список без необходимости)
variable ::previousInput ""
proc VarHelperKey { widget K A } {
set win .varhelper
DebugPuts "Helper::VarHelperKey: K=$K, A='$A'"
@@ -16,7 +16,7 @@ namespace eval Helper {
set ::listActive 0
return
}
switch -- $K {
<Up> {
DebugPuts "Processing Up arrow"
@@ -275,7 +275,7 @@ namespace eval Helper {
}
return
}
# Восстанавливаем оригинальные привязки
foreach binding $::originalBindings {
set event [lindex $binding 0]
@@ -288,49 +288,49 @@ namespace eval Helper {
bind $txt $event $command
}
}
# Очищаем сохраненные привязки
set ::originalBindings {}
}
proc SelectFromList {txt} {
global returnProcessed editors lexers
set win .varhelper
DebugPuts "SelectFromList called"
puts "[dict get $editors $txt fileType]"
puts "[dict get $lexers [dict get $editors $txt fileType] variableSymbol]"
if {![winfo exists $win]} {
DebugPuts "Window doesn't exist"
return
}
# Получаем выбранный элемент
set selected [$win.lBox curselection]
DebugPuts "Selected index: $selected"
if {$selected ne ""} {
set text [$win.lBox get $selected]
DebugPuts "Selected text: $text"
# Вставляем выбранный текст в текстовое поле
$txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
$txt insert "insert" $text
# Закрываем окно списка
set text [string trim [$win.lBox get $selected]]
set varSymbol [dict get $lexers [dict get $editors $txt fileType] variableSymbol]
# Опеределяем что символ перед позицией вставки равен символу переменной из настроек lexers
# если равен то вставляем выбранное из списка сразу за ним
# если нет то удаляем введенный текст до этого символа и вставляем выбранное из списка
if {[$txt get "insert - 1 char" "insert"] eq $varSymbol} {
$txt insert "insert" $text
} else {
$txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
$txt insert "insert" $text
}
# Закрываем окно
destroy $win
set ::listActive 0
Helper::VarHelperBindingsRestore $txt
set ::previousInput ""
# Устанавливаем флаг, что Return уже обработан
set returnProcessed 1
# after 10 {catch {unset returnProcessed}}
# Возвращаем фокус
focus $txt.t
}
}
proc DebugPuts {msg} {
puts "DEBUG: $msg"
}
}