Добавлено горизонтальное разделение окна редактора.

Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса.
Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
This commit is contained in:
svkalinin 2022-09-14 16:31:50 +03:00
parent 4b4f15a5fc
commit a7b6c48a42
5 changed files with 99 additions and 66 deletions

View File

@ -109,3 +109,9 @@
- Added search function name into Function navigation whem press key - Added search function name into Function navigation whem press key
- Added find and replace dialog - Added find and replace dialog
- Fixed correct placement the Function dialog - Fixed correct placement the Function dialog
14/09/2022
- Added procedure for the horizontal split a text window
- Fixed untitled file saved
- Fixed Alt+R (delete row), now will are deleted row with a "\n\r" symbols

View File

@ -436,10 +436,10 @@ namespace eval Editor {
if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"} if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"}
} }
proc BindKeys {w fileType} { proc BindKeys {w txt fileType} {
global cfgVariables global cfgVariables
# variable txt # variable txt
set txt $w.frmText.t # set txt $w.frmText.t
bind $txt <KeyRelease> "Editor::ReleaseKey %K $txt" bind $txt <KeyRelease> "Editor::ReleaseKey %K $txt"
bind $txt <KeyPress> "Editor::PressKey %K $txt" bind $txt <KeyPress> "Editor::PressKey %K $txt"
# bind $txt <KeyRelease> "Editor::Key %k %K" # bind $txt <KeyRelease> "Editor::Key %k %K"
@ -496,9 +496,9 @@ namespace eval Editor {
bind $txt <Control-i> ImageBase64Encode bind $txt <Control-i> ImageBase64Encode
bind $txt <Control-u> "Editor::SearchBrackets %W" bind $txt <Control-u> "Editor::SearchBrackets %W"
bind $txt <Control-J> "catch {Editor::GoToFunction $w}" bind $txt <Control-J> "catch {Editor::GoToFunction $w}"
bind $txt <Control-j> "catch {Editor::GoToFunction $w}" bind $txt <Control-j> "catch {Editor::GoToFunction $w}; break"
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}" bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend}" bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-b> "$txt delete {insert linestart} insert" bind $txt <Alt-b> "$txt delete {insert linestart} insert"
bind $txt <Alt-e> "$txt delete insert {insert lineend}" bind $txt <Alt-e> "$txt delete insert {insert lineend}"
} }
@ -692,7 +692,7 @@ proc FindFunction {findString} {
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# Вызов диалога со списком процедур или функций присутствующих в тексте # Вызов диалога со списком процедур или функций присутствующих в тексте
proc GoToFunction { w } { proc GoToFunction { w } {
global tree editors global tree editors
set txt $w.frmText.t set txt $w.frmText.t
# set start_word [$txt get "insert - 1 chars wordstart" insert] # set start_word [$txt get "insert - 1 chars wordstart" insert]
@ -992,57 +992,35 @@ proc FindFunction {findString} {
focus -force $win.entryFind focus -force $win.entryFind
} }
proc SplitEditor {w orient} { proc SplitEditor {w fileType} {
ttk::panedwindow $w.panelTxt -orient horizontal -style TPanedwindow global cfgVariables
pack propagate $w.panelTxt false puts [$w.panelTxt panes]
set frmText [ttk::frame $w.frmText2 -border 1] if [winfo exists $w.frmText2] {
$w.panelTxt forget $w.frmText2
pack $frmText -side top -expand true -fill both destroy $w.frmText2
ctext $frmText.t2 return
pack $frmText.t2 -fill both -expand 1 }
$frmText.t2 insert end [$w.frmText.t get 0.0 end] set frmText [Editor::EditorWidget $w $fileType]
$frmText.t insert end [$w.frmText.t get 0.0 end]
$w.panelTxt add $w.frmText -weight 0 # $w.panelTxt add $w.frmText -weight 0
$w.panelTxt add $w.frmText2 -weight 1 $w.panelTxt add $w.frmText2 -weight 1
} }
proc Editor {fileFullPath nb itemName} { proc EditorWidget {fr fileType} {
global cfgVariables editors global cfgVariables editors
set fr $itemName
if ![string match "*untitled*" $itemName] { if [winfo exists $fr.frmText] {
set lblText $fileFullPath set frmText [ttk::frame $fr.frmText2 -border 1]
} else { } else {
set lblText "" set frmText [ttk::frame $fr.frmText -border 1]
} }
ttk::frame $fr.header
set frmText [ttk::frame $fr.frmText -border 1]
set txt $frmText.t set txt $frmText.t
set lblName "lbl[string range $itemName [expr [string last "." $itemName] +1] end]"
ttk::label $fr.header.$lblName -text $lblText
# pack $fr.$lblName -side top -anchor w -fill x
set btnSplitV "btnSplitV[string range $itemName [expr [string last "." $itemName] +1] end]"
set btnSplitH "btnSplitH[string range $itemName [expr [string last "." $itemName] +1] end]"
ttk::button $fr.header.$btnSplitH -image split_horizontal_11x11 \
-command "Editor::SplitEditor $fr horizontal"
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
-command "Editor::SplitEditor $fr vertical" -state disable
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
pack $fr.header.$lblName -side left -expand true -fill x
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right
pack $fr.header -side top -fill x
# set frmText [ttk::frame $fr.frmText -border 1] # set frmText [ttk::frame $fr.frmText -border 1]
# set txt $frmText.t # set txt $frmText.t
pack $frmText -side top -expand true -fill both pack $frmText -side top -expand true -fill both
pack [ttk::scrollbar $frmText.v -command "$frmText.t yview"] -side right -fill y pack [ttk::scrollbar $frmText.v -command "$frmText.t yview"] -side right -fill y
ttk::scrollbar $frmText.h -orient horizontal -command "$frmText.t xview" ttk::scrollbar $frmText.h -orient horizontal -command "$frmText.t xview"
@ -1060,9 +1038,6 @@ proc FindFunction {findString} {
$txt tag configure lightBracket -background $cfgVariables(selectLightBg) -foreground #00ffff $txt tag configure lightBracket -background $cfgVariables(selectLightBg) -foreground #00ffff
$txt tag configure lightSelected -background $cfgVariables(selectLightBg) -foreground #00ffff $txt tag configure lightSelected -background $cfgVariables(selectLightBg) -foreground #00ffff
set fileType [string toupper [string trimleft [file extension $fileFullPath] "."]]
if {$fileType eq ""} {set fileType "Unknown"}
# puts ">$fileType<" # puts ">$fileType<"
# puts [info procs Highlight::GO] # puts [info procs Highlight::GO]
dict set editors $txt fileType $fileType dict set editors $txt fileType $fileType
@ -1077,13 +1052,46 @@ proc FindFunction {findString} {
} else { } else {
Highlight::Default $txt Highlight::Default $txt
} }
BindKeys $fr $txt $fileType
return $frmText
}
proc Editor {fileFullPath nb itemName} {
global cfgVariables editors
set fr $itemName
if ![string match "*untitled*" $itemName] {
set lblText $fileFullPath
} else {
set lblText ""
}
set fileType [string toupper [string trimleft [file extension $fileFullPath] "."]]
if {$fileType eq ""} {set fileType "Unknown"}
BindKeys $itemName $fileType ttk::frame $fr.header
# bind $txt <Return> { set lblName "lbl[string range $itemName [expr [string last "." $itemName] +1] end]"
# regexp {^(\s*)} [%W get "insert linestart" end] -> spaceStart ttk::label $fr.header.$lblName -text $lblText
# %W insert insert "\n$spaceStart" # pack $fr.$lblName -side top -anchor w -fill x
# break
# } set btnSplitV "btnSplitV[string range $itemName [expr [string last "." $itemName] +1] end]"
set btnSplitH "btnSplitH[string range $itemName [expr [string last "." $itemName] +1] end]"
ttk::button $fr.header.$btnSplitH -image split_horizontal_11x11 \
-command "Editor::SplitEditor $fr $fileType"
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
-command "Editor::SplitEditor $fr $fileType" -state disable
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
pack $fr.header.$lblName -side left -expand true -fill x
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right
pack $fr.header -side top -fill x
ttk::panedwindow $fr.panelTxt -orient vertical -style TPanedwindow
pack propagate $fr.panelTxt false
pack $fr.panelTxt -side top -fill both -expand true
set frmText [Editor::EditorWidget $fr $fileType]
$fr.panelTxt add $frmText -weight 0
return $fr return $fr
} }

View File

@ -16,8 +16,12 @@ namespace eval FileOper {
} }
proc OpenDialog {} { proc OpenDialog {} {
global env global env project activeProject
set dir $env(HOME) if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME)
}
set fullPath [tk_getOpenFile -initialdir $dir -filetypes $::types -parent .] set fullPath [tk_getOpenFile -initialdir $dir -filetypes $::types -parent .]
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end] set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
regsub -all "." $file "_" node regsub -all "." $file "_" node
@ -26,7 +30,7 @@ namespace eval FileOper {
set name [file rootname $file] set name [file rootname $file]
set ext [string range [file extension $file] 1 end] set ext [string range [file extension $file] 1 end]
if {$fullPath != ""} { if {$fullPath != ""} {
puts $fullPath # puts $fullPath
return $fullPath return $fullPath
} else { } else {
return return
@ -34,16 +38,23 @@ namespace eval FileOper {
} }
proc OpenFolderDialog {} { proc OpenFolderDialog {} {
global env global env activeProject
#global tree node types dot env noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir #global tree node types dot env noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir
# set dir $projDir # set dir $projDir
set dir $env(HOME) if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME)
}
set fullPath [tk_chooseDirectory -initialdir $dir -parent .] set fullPath [tk_chooseDirectory -initialdir $dir -parent .]
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end] set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
regsub -all "." $file "_" node regsub -all "." $file "_" node
set dir [file dirname $fullPath] set dir [file dirname $fullPath]
# EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath # EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
puts $fullPath # puts $fullPath
if ![info exists activeProject] {
set activeProject $fullPath
}
return $fullPath return $fullPath
} }
@ -75,7 +86,7 @@ namespace eval FileOper {
foreach nbItem [array names modified] { foreach nbItem [array names modified] {
if {$modified($nbItem) eq "true"} { if {$modified($nbItem) eq "true"} {
$nbEditor select $nbItem $nbEditor select $nbItem
puts "close tab $nbItem" # puts "close tab $nbItem"
if {[Close] eq "cancel"} {return "cancel"} if {[Close] eq "cancel"} {return "cancel"}
} }
} }
@ -84,7 +95,7 @@ namespace eval FileOper {
proc Close {} { proc Close {} {
global nbEditor modified tree global nbEditor modified tree
set nbItem [$nbEditor select] set nbItem [$nbEditor select]
puts "close tab $nbItem" # puts "close tab $nbItem"
if {$nbItem == ""} {return} if {$nbItem == ""} {return}
if {$modified($nbItem) eq "true"} { if {$modified($nbItem) eq "true"} {
@ -116,11 +127,18 @@ namespace eval FileOper {
} }
proc Save {} { proc Save {} {
global nbEditor tree env global nbEditor tree env activeProject
if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME)
}
set nbEditorItem [$nbEditor select] set nbEditorItem [$nbEditor select]
puts "Saved editor text: $nbEditorItem" puts "Saved editor text: $nbEditorItem"
if [string match "*untitled*" $nbEditorItem] { if [string match "*untitled*" $nbEditorItem] {
set filePath [tk_getSaveFile -initialdir $env(HOME) -filetypes $::types -parent .] set filePath [tk_getSaveFile -initialdir $dir -filetypes $::types -parent .]
if {$filePath eq ""} { if {$filePath eq ""} {
return return
} }
@ -129,7 +147,7 @@ namespace eval FileOper {
$nbEditor tab $nbEditorItem -text $fileName $nbEditor tab $nbEditorItem -text $fileName
# set treeitem [Tree::InsertItem $tree {} $filePath "file" $fileName] # set treeitem [Tree::InsertItem $tree {} $filePath "file" $fileName]
set lblName "lbl[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end]" set lblName "lbl[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end]"
$nbEditorItem.$lblName configure -text $filePath $nbEditorItem.header.$lblName configure -text $filePath
} else { } else {
set treeItem "file::[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end ]" set treeItem "file::[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end ]"
set filePath [Tree::GetItemID $tree $treeItem] set filePath [Tree::GetItemID $tree $treeItem]
@ -165,7 +183,7 @@ namespace eval FileOper {
} }
proc ReadFolder {directory {parent ""}} { proc ReadFolder {directory {parent ""}} {
global tree dir lexers global tree dir lexers project
puts "Read the folder $directory" puts "Read the folder $directory"
set rList "" set rList ""
if {[catch {cd $directory}] != 0} { if {[catch {cd $directory}] != 0} {

View File

@ -63,7 +63,7 @@ namespace eval Tree {
} }
} }
append id $type "::" $subNode append id $type "::" $subNode
puts "Tree ID: $id, tree item: $item" # puts "Tree ID: $id, tree item: $item"
if ![$tree exists $id] { if ![$tree exists $id] {
$tree insert $parent end -id "$id" -text " $text" -values "$item" -image $image $tree insert $parent end -id "$id" -text " $text" -values "$item" -image $image
} }

View File

@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
###################################################### ######################################################
# Version: 2.0.0 # Version: 2.0.0
# Release: alpha # Release: alpha
# Build: 05092022090515 # Build: 14092022145805
###################################################### ######################################################
# определим текущую версию, релиз и т.д. # определим текущую версию, релиз и т.д.
@ -114,6 +114,7 @@ if [info exists opened] {
puts $opened puts $opened
foreach path $opened { foreach path $opened {
if [file isdirectory $path] { if [file isdirectory $path] {
set activeProject $path
FileOper::ReadFolder $path FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path ReadFilesFromDirectory $path $path
# puts "aaa[dict values $project "ansible*"]" # puts "aaa[dict values $project "ansible*"]"