# Copyright (C) 1999 - Martin Strauss - under terms of GPL
##############################################################################
# Umdefinition des Defaultverhaltens fuer Text-variablen
bind Text <Control-k> {}
bind Text <Control-b> {}
# Block Anfang
bind Text <Control-k><b> {
set BlockBeginFlag 1
%W mark set BlockBegin insert
if {[string compare %W $BlockEditor] == 0} then {
if $BlockEndFlag then {
%W tag remove BlockTag 1.0 end
%W tag add BlockTag BlockBegin BlockEnd
}} else {
if {$BlockBeginFlag && $BlockEndFlag} then {
$BlockEditor tag remove BlockTag 1.0 end
}
set BlockEndFlag 0
set BlockEditor %W
}
}
# Block Ende
bind Text <Control-k><k> {
set BlockEndFlag 1
%W mark set BlockEnd insert
%W mark gravity BlockEnd left
if {[string compare %W $BlockEditor] == 0} then {
if $BlockBeginFlag then {
%W tag remove BlockTag 1.0 end
%W tag add BlockTag BlockBegin BlockEnd
}} else {
if {$BlockBeginFlag && $BlockEndFlag} then {
$Blockeditor tag remove BlockTag 1.0 end
}
set BlockBeginFlag 0
set BlockEditor %W
}
}
# Block kopieren
bind Text <Control-k><c> {
if {$BlockBeginFlag && $BlockEndFlag} then {
set ksp [%W index {insert linestart}]
undo_switch %W {Save UndoBegin}
%W insert insert [$BlockEditor get BlockBegin BlockEnd]
undo_switch %W {UndoEnd Save UndoMax}
Syntax %W $ksp "insert lineend"
}
}
# Block verschieben
bind Text <Control-k><v> {
if {$BlockBeginFlag && $BlockEndFlag} then {
set ksp [%W index "insert linestart"]
undo_switch %W {Save UndoBegin}
%W insert insert [$BlockEditor get BlockBegin BlockEnd]
undo_switch %W {UndoEnd Save}
undo_switch $BlockEditor {{BlockBegin BlockEnd} Delete UndoMax}
if {[string compare %W $BlockEditor] == 0} then {
undo_switch %W UndoMul
}
Syntax %W $ksp "insert lineend"
Syntax $BlockEditor "BlockBegin linestart" "BlockEnd lineend"
}
}
bind Text <Control-k><m> {
event generate %W <Control-k>
event generate %W <v>
}
# Block loeschen
bind Text <Control-k><y> {
if {$BlockBeginFlag && $BlockEndFlag} then {
undo_switch $BlockEditor {Save {BlockBegin BlockEnd} Delete UndoMax}
}
}
# Block auskommentieren
proc AusKomm {E A B} {
set i [lindex "[split [$E index $A] .]" 0]
set i_max [lindex "[split [$E index $B] .]" 0]
incr i_max
set ksp $i.0
while {$i < $i_max} {
if [expr [string compare [$E get "$i.0 linestart" "$i.0 linestart+1c"] "%"] != 0] {
$E insert "$i.0 linestart" "%"
}
incr i
}
Syntax $E $ksp $i_max.0
event generate $E <<Modified>>
}
# Block auskommentieren rueckgaengig
proc AusKommRueck {E A B} {
set i [lindex "[split [$E index $A] .]" 0]
set i_max [lindex "[split [$E index $B] .]" 0]
incr i_max
set ksp $i.0
while {$i < $i_max} {
if [expr [string compare [$E get "$i.0 linestart" "$i.0 linestart+1c"] "%"] == 0] {
$E delete "$i.0 linestart" "$i.0 linestart+1c"
}
incr i
}
Syntax $E $ksp $i_max.0
event generate $E <<Modified>>
}
switch $tcl_platform(platform) windows {
# Auf jedenfall fuer Windows !!!
bind Text <Control-k><%> {
if { $BlockBeginFlag && $BlockEndFlag} then {
AusKomm %W BlockBegin BlockEnd
}
}
} unix {
# fuer linux ???
bind Text <Control-k><Shift-5> {
if { $BlockBeginFlag && $BlockEndFlag} then {
AusKomm %W BlockBegin BlockEnd
}
}
}
bind Text <Control-k><space> {
if { $BlockBeginFlag && $BlockEndFlag} then {
AusKommRueck %W BlockBegin BlockEnd
}
}
# Block in Clipboard kopieren
bind Text <Control-k><g> {
if { $BlockBeginFlag && $BlockEndFlag} then {
clipboard clear -displayof %W
catch {clipboard append -displayof %W [$BlockEditor get BlockBegin BlockEnd]}
}
}
# aus Clipboard kopieren
bind Text <Control-k><p> {
set ksp [%W index {insert linestart}]
undo_switch %W {Save UndoBegin}
tk_textPaste %W
undo_switch %W {UndoEnd Save UndoMax}
Syntax %W $ksp "insert lineend"
}
bind Text <Control-k><h> {break}
bind Text <Insert> {
undo_switch %W {Save UndoBegin}
catch {tkTextInsert %W [selection get -displayof %W]}
undo_switch %W {UndoEnd Save}
}
# Block eliminieren
bind Text <Destroy> {
set BlockBeginFlag 0
set BlockEndFlag 0
if {[lsearch [array names ModifiedArray] %W] != -1} {
unset ModifiedArray(%W)
}
if {[lsearch [array names UndoArray] %W] != -1} {
unset UndoArray(%W)
}
if {[lsearch [array names FilenameArray] %W] != -1} {
unset FilenameArray(%W)
}
}
# Zeile aus Text loeschen
bind Text <Control-y> {
undo_switch %W {{"insert linestart" "insert lineend+1c"} Delete}
}
bind Text <Control-d> {
if $FocusEditorFlag {
focus $FocusEditor.te.edit1
set ksp [$FocusEditor.te.edit1 get {insert wordstart-1c} {insert wordstart}]
if ![string compare "\\" $ksp] then {
set Text [$FocusEditor.te.edit1 get {insert wordstart} {insert wordend}]
if {[llength [array names I_befehl $Text]] != 1} {set Text "\\section"} else {set Text "\\$Text"}
} {set Text "\\section"}
set ksp [$FocusEditor.te.edit1 search -- $Text {insert wordend} end]
if {$ksp != ""} then {
$FocusEditor.te.edit1 mark set insert "$ksp + 1 chars"
$FocusEditor.te.edit1 see insert
event generate $FocusEditor.te.edit1 <<Position_tail>> -when tail
}}}
bind Text <Control-u> {
if $FocusEditorFlag {
focus $FocusEditor.te.edit1
set ksp [$FocusEditor.te.edit1 get {insert wordstart-1c} {insert wordstart}]
if ![string compare "\\" $ksp] then {
set Text [$FocusEditor.te.edit1 get {insert wordstart} {insert wordend}]
if {[llength [array names I_befehl $Text]] != 1} {set Text "\\section"} else {set Text "\\$Text"}
} {set Text "\\section"}
set ksp [$FocusEditor.te.edit1 search -backwards -- $Text {insert wordstart-1c} 1.0]
if {$ksp != ""} then {
$FocusEditor.te.edit1 mark set insert "$ksp + 1 chars"
$FocusEditor.te.edit1 see insert
event generate $FocusEditor.te.edit1 <<Position_tail>> -when tail
}}}
bind Text <Control-b> {
if $FocusEditorFlag {
Line_breaking_switch $FocusEditor.te.edit1 section
}
}
bind Text <Control-B> {
if $FocusEditorFlag {
Line_breaking_switch $FocusEditor.te.edit1 unsection
}
}
bind Text <Alt-b> {
if $FocusEditorFlag {
Line_breaking_switch $FocusEditor.te.edit1 line
}
}
bind Text <Alt-B> {
if $FocusEditorFlag {
Line_breaking_switch $FocusEditor.te.edit1 unline
}
}
# Was passiert wenn man ein Fenster vernichtet
bind Toplevel <Destroy> {
# Fenster war Master dann Master loeschen
if $MasterFlag then {if {[string compare $Master %W] == 0} then {set MasterFlag 0}}
if $FocusEditorFlag then {if {[string compare $FocusEditor %W] == 0} then {set FocusEditorFlag 0}}
}
bind Text <KeyPress> {
if $erg_flag(%W) then {
if {[%W get insert insert+1c] == "%A"} then {
%W mark set insert insert+1c
continue
} else {
erg_proc %W
}
}
if {"%A" != "{}"} then {
undo_switch %W {SelSave UndoBegin}
tkTextInsert %W %A
undo_switch %W {UndoEnd SelMul}