Добавил псевдо-терминал, и команды запуска файлов.
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
				
			This commit is contained in:
		
							
								
								
									
										5
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								TODO
									
									
									
									
									
								
							| @@ -7,7 +7,7 @@ | |||||||
|  |  | ||||||
| --- Ansible --- | --- Ansible --- | ||||||
| 1. Определение всех переменных в отдельный список | 1. Определение всех переменных в отдельный список | ||||||
|   - внутри файла, конструкции вида: | - внутри файла, конструкции вида: | ||||||
|     set_fact: |     set_fact: | ||||||
|        varName: value |        varName: value | ||||||
|     set_fact varName value |     set_fact varName value | ||||||
| @@ -18,5 +18,4 @@ | |||||||
|       - var1.yml |       - var1.yml | ||||||
|       - var2.yml |       - var2.yml | ||||||
|  |  | ||||||
| 3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется) | 3. Если используется роль и переменная не найдена в плэйбуке | ||||||
|  |  | ||||||
|   | |||||||
| @@ -786,8 +786,11 @@ namespace eval Editor { | |||||||
|         bind $txt <Control-eacute> Quit |         bind $txt <Control-eacute> Quit | ||||||
|         bind $txt <Control-igrave> "Editor::SelectionPaste $txt" |         bind $txt <Control-igrave> "Editor::SelectionPaste $txt" | ||||||
|         bind $txt <Control-v> "Editor::SelectionPaste $txt" |         bind $txt <Control-v> "Editor::SelectionPaste $txt" | ||||||
|  |         bind $txt <Control-Cyrillic_em> "Editor::SelectionPaste $txt" | ||||||
|         bind $txt <Control-l> "SearchVariable $txt; break" |         bind $txt <Control-l> "SearchVariable $txt; break" | ||||||
|  |         bind $txt <Control-Cyrillic_de> "SearchVariable $txt; break" | ||||||
|         bind $txt <Control-i> "ImageBase64Encode $txt" |         bind $txt <Control-i> "ImageBase64Encode $txt" | ||||||
|  |         bind $txt <Control-Cyrillic_sha> "ImageBase64Encode $txt" | ||||||
|         bind $txt <Control-bracketleft> "Editor::InsertTabular $txt" |         bind $txt <Control-bracketleft> "Editor::InsertTabular $txt" | ||||||
|         bind $txt <Control-bracketright> "Editor::DeleteTabular $txt" |         bind $txt <Control-bracketright> "Editor::DeleteTabular $txt" | ||||||
|         bind $txt <Control-comma> "Editor::Comment $txt $fileType" |         bind $txt <Control-comma> "Editor::Comment $txt $fileType" | ||||||
| @@ -797,25 +800,35 @@ namespace eval Editor { | |||||||
|         bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt" |         bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt" | ||||||
|         bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt" |         bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt" | ||||||
|         bind $txt <<Modified>> "SetModifiedFlag $w $nb" |         bind $txt <<Modified>> "SetModifiedFlag $w $nb" | ||||||
|         bind $txt <Control-i> ImageBase64Encode |  | ||||||
|         bind $txt <Control-u> "Editor::SearchBrackets %W" |         bind $txt <Control-u> "Editor::SearchBrackets %W" | ||||||
|  |         bind $txt <Control-Cyrillic_ghe> "Editor::SearchBrackets %W" | ||||||
|         bind $txt <Control-J> "catch {Editor::GoToFunction $txt}" |         bind $txt <Control-J> "catch {Editor::GoToFunction $txt}" | ||||||
|         bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break" |         bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break" | ||||||
|  |         bind $txt <Control-Cyrillic_o> "catch {Editor::GoToFunction $txt}; break" | ||||||
|         bind $txt <Alt-w>           "$txt delete {insert wordstart} {insert wordend}" |         bind $txt <Alt-w>           "$txt delete {insert wordstart} {insert wordend}" | ||||||
|         bind $txt <Alt-odiaeresis>  "$txt delete {insert wordstart} {insert wordend}" |         bind $txt <Alt-odiaeresis>  "$txt delete {insert wordstart} {insert wordend}" | ||||||
|  |         bind $txt <Alt-Cyrillic_tse> "$txt delete {insert wordstart} {insert wordend}" | ||||||
|         bind $txt <Alt-r>           "$txt delete {insert linestart} {insert lineend + 1char}" |         bind $txt <Alt-r>           "$txt delete {insert linestart} {insert lineend + 1char}" | ||||||
|         bind $txt <Alt-ecircumflex> "$txt delete {insert linestart} {insert lineend + 1char}" |         bind $txt <Alt-ecircumflex> "$txt delete {insert linestart} {insert lineend + 1char}" | ||||||
|  |         bind $txt <Alt-Cyrillic_er> "$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-Cyrillic_i> "$txt delete {insert linestart} insert" | ||||||
|         bind $txt <Alt-e> "$txt delete insert {insert lineend}" |         bind $txt <Alt-e> "$txt delete insert {insert lineend}" | ||||||
|  |         bind $txt <Alt-Cyrillic_u> "$txt delete insert {insert lineend}" | ||||||
|         bind $txt <Alt-s>           "Editor::SplitEditorH $w $fileType" |         bind $txt <Alt-s>           "Editor::SplitEditorH $w $fileType" | ||||||
|         bind $txt <Alt-ucircumflex> "Editor::SplitEditorH $w $fileType" |         bind $txt <Alt-ucircumflex> "Editor::SplitEditorH $w $fileType" | ||||||
|  |         bind $txt <Alt-Cyrillic_hardsign> "Editor::SplitEditorH $w $fileType" | ||||||
|         bind $txt <Alt-y> "Editor::TextCopy $txt" |         bind $txt <Alt-y> "Editor::TextCopy $txt" | ||||||
|  |         bind $txt <Alt-Cyrillic_en> "Editor::TextCopy $txt" | ||||||
|         bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt" |         bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt" | ||||||
|  |         bind $txt <Control-Cyrillic_pe> "Editor::GoToLineNumberDialog $txt" | ||||||
|         bind $txt <Control-agrave> "Editor::FindDialog $w" |         bind $txt <Control-agrave> "Editor::FindDialog $w" | ||||||
|         bind $txt <Control-f> "Editor::FindDialog $txt" |         bind $txt <Control-f> "Editor::FindDialog $txt" | ||||||
|  |         bind $txt <Control-Cyrillic_a> "Editor::FindDialog $txt" | ||||||
|         bind $txt <Control-F> "Editor::FindDialog $txt" |         bind $txt <Control-F> "Editor::FindDialog $txt" | ||||||
|         bind $txt <Control-odiaeresis> FileOper::Close |         bind $txt <Control-odiaeresis> FileOper::Close | ||||||
|         bind $txt <Control-w> FileOper::Close |         bind $txt <Control-w> FileOper::Close | ||||||
|  |         bind $txt <Control-Cyrillic_tse> FileOper::Close | ||||||
|         bind $txt <Control-o> { |         bind $txt <Control-o> { | ||||||
|             set filePath [FileOper::OpenDialog] |             set filePath [FileOper::OpenDialog] | ||||||
|             if {$filePath != ""} { |             if {$filePath != ""} { | ||||||
| @@ -830,6 +843,16 @@ namespace eval Editor { | |||||||
|             } |             } | ||||||
|             break |             break | ||||||
|         } |         } | ||||||
|  |         bind $txt <Control-Cyrillic_shcha> { | ||||||
|  |             set filePath [FileOper::OpenDialog] | ||||||
|  |             if {$filePath != ""} { | ||||||
|  |                 FileOper::Edit $filePath | ||||||
|  |             } | ||||||
|  |             break | ||||||
|  |         } | ||||||
|  |         bind $txt <Control-r> "Editor::SplitEditorForExecute $w $fileType $nb " | ||||||
|  |         bind $txt <Control-Cyrillic_ka> "Editor::SplitEditorForExecute $w $fileType $nb " | ||||||
|  |  | ||||||
|         # bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType" |         # bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType" | ||||||
|         # bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t" |         # bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t" | ||||||
|         # bind $txt <KeyRelease> "Editor::Key %k %K"  |         # bind $txt <KeyRelease> "Editor::Key %k %K"  | ||||||
| @@ -1367,7 +1390,7 @@ namespace eval Editor { | |||||||
|      |      | ||||||
|     proc SplitEditorV {fileFullPath} { |     proc SplitEditorV {fileFullPath} { | ||||||
|         global cfgVariables |         global cfgVariables | ||||||
|         regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName |         regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName | ||||||
|         set itemName ".frmWork.nbEditor2.$itemName" |         set itemName ".frmWork.nbEditor2.$itemName" | ||||||
|         # puts $itemName |         # puts $itemName | ||||||
|         if {[winfo exists $itemName] == 1} { |         if {[winfo exists $itemName] == 1} { | ||||||
| @@ -1390,8 +1413,6 @@ namespace eval Editor { | |||||||
|         # grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1 |         # grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1 | ||||||
|         .frmWork.panelNB add .frmWork.nbEditor2 -weight 0 |         .frmWork.panelNB add .frmWork.nbEditor2 -weight 0 | ||||||
|         puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2] |         puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2] | ||||||
|          |  | ||||||
|  |  | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     proc GoToLineNumber {text lineNumber} { |     proc GoToLineNumber {text lineNumber} { | ||||||
| @@ -1537,9 +1558,13 @@ namespace eval Editor { | |||||||
|             -command "Editor::SplitEditorH $fr $fileType $nb" |             -command "Editor::SplitEditorH $fr $fileType $nb" | ||||||
|         ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \ |         ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \ | ||||||
|             -command "Editor::SplitEditorV $fileFullPath" |             -command "Editor::SplitEditorV $fileFullPath" | ||||||
|  |  | ||||||
|  |         set btnSplitExecute "btnSplitExec[string range $itemName [expr [string last "." $itemName] +1] end]" | ||||||
|  |         ttk::button $fr.header.$btnSplitExecute -image execute_11x11 \ | ||||||
|  |             -command "Editor::SplitEditorForExecute $fr $fileType $nb $fileFullPath" | ||||||
|         # pack $fr.$btnSplitH $fr.$btnSplitV  -side right  -anchor e |         # pack $fr.$btnSplitH $fr.$btnSplitV  -side right  -anchor e | ||||||
|         pack $fr.header.$lblName -side left -expand true -fill x |         pack $fr.header.$lblName -side left -expand true -fill x | ||||||
|         pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right |         pack $fr.header.$btnSplitV $fr.header.$btnSplitH $fr.header.$btnSplitExecute -side right | ||||||
|          |          | ||||||
|         pack $fr.header -side top -fill x |         pack $fr.header -side top -fill x | ||||||
|          |          | ||||||
| @@ -1557,4 +1582,27 @@ namespace eval Editor { | |||||||
|  |  | ||||||
|         return $fr |         return $fr | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     proc SplitEditorForExecute {w fileType nb {fileFullPath ""}} { | ||||||
|  |         global cfgVariables tree | ||||||
|  |         if {$fileFullPath eq ""} { | ||||||
|  |             set treeItem "file::[string range $w [expr [string last "." $w] +1] end ]" | ||||||
|  |             set fileFullPath [Tree::GetItemID $tree $treeItem] | ||||||
|  |             puts $fileFullPath | ||||||
|  |         } | ||||||
|  |         # puts [$w.panelTxt panes] | ||||||
|  |         puts "$w $fileType $nb $fileFullPath" | ||||||
|  |         if [winfo exists $w.frmText2] { | ||||||
|  |             $w.panelTxt forget $w.frmText2 | ||||||
|  |             destroy $w.frmText2 | ||||||
|  |             focus -force $w.frmText.t.t | ||||||
|  |             return | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         set frmText [ttk::frame $w.frmText2 -border 1] | ||||||
|  |         $w.panelTxt add $frmText -weight 1 | ||||||
|  |         # focus -force $frmText.t.t | ||||||
|  |         Execute $fileFullPath $frmText | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								lib/gui.tcl
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								lib/gui.tcl
									
									
									
									
									
								
							| @@ -23,12 +23,14 @@ wm overrideredirect . 0 | |||||||
|  |  | ||||||
| bind . <Control-q> Quit | bind . <Control-q> Quit | ||||||
| bind . <Control-Q> Quit | bind . <Control-Q> Quit | ||||||
|  | bind . <Control-Cyrillic_shorti> Quit | ||||||
| bind . <Control-eacute> Quit | bind . <Control-eacute> Quit | ||||||
| bind . <Insert> Add | bind . <Insert> Add | ||||||
| bind . <Delete> Del | bind . <Delete> Del | ||||||
| bind . <F1> ShowHelpDialog | bind . <F1> ShowHelpDialog | ||||||
| bind . <Control-n> Editor::New | bind . <Control-n> Editor::New | ||||||
| bind . <Control-N> Editor::New | bind . <Control-N> Editor::New | ||||||
|  | bind . <Control-Cyrillic_te> Editor::New | ||||||
| bind . <Control-o> { | bind . <Control-o> { | ||||||
|     set filePath [FileOper::OpenDialog] |     set filePath [FileOper::OpenDialog] | ||||||
|     if {$filePath != ""} { |     if {$filePath != ""} { | ||||||
| @@ -41,21 +43,30 @@ bind . <Control-O> { | |||||||
|         FileOper::Edit $filePath |         FileOper::Edit $filePath | ||||||
|     } |     } | ||||||
| } | } | ||||||
| bind . <Control-k> { | bind . <Alt-k> { | ||||||
|     set folderPath [FileOper::OpenFolderDialog] |     set folderPath [FileOper::OpenFolderDialog] | ||||||
|     if {$folderPath != ""} { |     if {$folderPath != ""} { | ||||||
|         FileOper::ReadFolder $folderPath |         FileOper::ReadFolder $folderPath | ||||||
|     } |     } | ||||||
| } | } | ||||||
| bind . <Control-K> { | bind . <Alt-K> { | ||||||
|     set folderPath [FileOper::OpenFolderDialog] |     set folderPath [FileOper::OpenFolderDialog] | ||||||
|     if {$folderPath != ""} { |     if {$folderPath != ""} { | ||||||
|         FileOper::ReadFolder $folderPath |         FileOper::ReadFolder $folderPath | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | bind . <Alt-Cyrillic_el> { | ||||||
|  |     set folderPath [FileOper::OpenFolderDialog] | ||||||
|  |     if {$folderPath != ""} { | ||||||
|  |         FileOper::ReadFolder $folderPath | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| bind . <Control-s> {FileOper::Save} | bind . <Control-s> {FileOper::Save} | ||||||
| bind . <Control-S> {FileOper::Save} | bind . <Control-S> {FileOper::Save} | ||||||
|  | bind . <Control-Cyrillic_hardsign> {FileOper::Save} | ||||||
| bind . <Alt-p> {ViewFilesTree true} | bind . <Alt-p> {ViewFilesTree true} | ||||||
|  | bind . <Alt-Cyrillic_ze> {ViewFilesTree true} | ||||||
| bind . <Button-3> {catch [PopupMenu %X %Y]} | bind . <Button-3> {catch [PopupMenu %X %Y]} | ||||||
|  |  | ||||||
| #ttk::style configure TPanedwindow -background blue | #ttk::style configure TPanedwindow -background blue | ||||||
|   | |||||||
| @@ -1913,3 +1913,18 @@ image create photo j2_16x12 -data { | |||||||
|     5nEG7+28M9SARyoW37c7A72MxzFpr/Dd1sUKRxpZbJg7joMDAwDgDzlS9ta5m7mUAAAAAElFTkSu |     5nEG7+28M9SARyoW37c7A72MxzFpr/Dd1sUKRxpZbJg7joMDAwDgDzlS9ta5m7mUAAAAAElFTkSu | ||||||
|     QmCC |     QmCC | ||||||
| } | } | ||||||
|  | image create photo execute_11x11 -data { | ||||||
|  |     iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9 | ||||||
|  |     kT1Iw1AUhU9TpVIqDnYQUclQneyiIo5ahSJUCLVCqw4mL/2DJg1Jiouj4Fpw8Gex6uDirKuDqyAI | ||||||
|  |     /oC4C06KLlLifUmhRYwPLu/jvHcO990HCI0K06yuWUDTbTOdTIjZ3KoYekUYw1QjiMrMMuYkKQXf | ||||||
|  |     9XWPAN/v4jzL/96fq1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx43qUHiR64rHr9xLros8Myo | ||||||
|  |     mUnPE0eJxWIHKx3MSqZGPEUcUzWd8oWsxyrnLc5apcZaffIXRvL6yjLXqYaQxCKWIEGEghrKqMBG | ||||||
|  |     nHadFAtpOk/4+Addv0QuhVxlMHIsoAoNsusH/4Pfs7UKkxNeUiQBdL84zscoENoFmnXH+T52nOYJ | ||||||
|  |     EHwGrvS2v9oAZj5Jr7e12BHQtw1cXLc1ZQ+43AEGngzZlF0pSCUUCsD7GX1TDui/BcJr3txa5zh9 | ||||||
|  |     ADI0q9QNcHAIjBUpe93n3T2dc/v3Tmt+P5frcrXBnzRwAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI | ||||||
|  |     WXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QodCiMdxWTpZwAAABl0RVh0Q29tbWVudABDcmVhdGVk | ||||||
|  |     IHdpdGggR0lNUFeBDhcAAABHSURBVBjTjY/BDQAwCAKNUzleux1b2Y+PxgiRJ7kjalYBkADSRLwX | ||||||
|  |     SvCpZIKzlUlwdWMXJFw5Kzgi7mr5A/XyBI4wA9kzFHrskxvBNKQinAAAAABJRU5ErkJggg== | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ proc GetFileMenu {m} { | |||||||
|  |  | ||||||
|     $m add separator |     $m add separator | ||||||
|  |  | ||||||
|     $m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command { |     $m add command -label [::msgcat::mc "Open folder"] -accelerator "Alt+K" -command { | ||||||
|         set folderPath [FileOper::OpenFolderDialog] |         set folderPath [FileOper::OpenFolderDialog] | ||||||
|         if {$folderPath != ""} { |         if {$folderPath != ""} { | ||||||
|             # set activeProject $folderPath |             # set activeProject $folderPath | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ | |||||||
| ::msgcat::mcset en "Editor font bold" | ::msgcat::mcset en "Editor font bold" | ||||||
| ::msgcat::mcset en "Error open URL" | ::msgcat::mcset en "Error open URL" | ||||||
| ::msgcat::mcset en "Editor settings" | ::msgcat::mcset en "Editor settings" | ||||||
|  | ::msgcat::mcset en "Enter command for execute file" | ||||||
| ::msgcat::mcset en "Exit" | ::msgcat::mcset en "Exit" | ||||||
| ::msgcat::mcset en "File" | ::msgcat::mcset en "File" | ||||||
| ::msgcat::mcset en "File already exists. Overwrite?" | ::msgcat::mcset en "File already exists. Overwrite?" | ||||||
| @@ -185,4 +186,3 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -77,6 +77,7 @@ | |||||||
| ::msgcat::mcset ru "Editor settings" "Настройки редактора" | ::msgcat::mcset ru "Editor settings" "Настройки редактора" | ||||||
| ::msgcat::mcset ru "Editor helpers" "Подсказки при вводе" | ::msgcat::mcset ru "Editor helpers" "Подсказки при вводе" | ||||||
| ::msgcat::mcset ru "Encode" "Перекодировка" | ::msgcat::mcset ru "Encode" "Перекодировка" | ||||||
|  | ::msgcat::mcset ru "Enter command for execute file" "Введите команду для запуска текущего файла" | ||||||
| ::msgcat::mcset ru "Authorisation required" "Требуется авторизация" | ::msgcat::mcset ru "Authorisation required" "Требуется авторизация" | ||||||
| ::msgcat::mcset ru "Error open URL" "Ошибка открытия URL" | ::msgcat::mcset ru "Error open URL" "Ошибка открытия URL" | ||||||
| ::msgcat::mcset ru "Exit" "Выход" | ::msgcat::mcset ru "Exit" "Выход" | ||||||
|   | |||||||
| @@ -714,3 +714,272 @@ proc AddRecentEditedFolder {path} { | |||||||
|     } |     } | ||||||
|     .frmMenu.mnuFile.m.openRecent add command -label $path -command [list OpenRecentProject $path] |     .frmMenu.mnuFile.m.openRecent add command -label $path -command [list OpenRecentProject $path] | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # ================== OLD ==================== | ||||||
|  | proc launchBrowser {url} { | ||||||
|  |     global tcl_platform | ||||||
|  |     if {$tcl_platform(platform) eq "windows"} { | ||||||
|  |         set command [list {*}[auto_execok start] {}] | ||||||
|  |         if {[file isdirectory $url]} { | ||||||
|  |             set url [file nativename [file join $url .]] | ||||||
|  |         } | ||||||
|  |     } elseif {$tcl_platform(os) eq "Darwin"} { | ||||||
|  |         set command [list open] | ||||||
|  |     } else { | ||||||
|  |         set command [list xdg-open] | ||||||
|  |     } | ||||||
|  |     exec {*}$command $url & | ||||||
|  | } | ||||||
|  | ## EXEC EXTERNAL BROWSER AND GOTO URL ## | ||||||
|  | proc GoToURL {url} { | ||||||
|  |     global env tcl_platform | ||||||
|  |     if {$tcl_platform(platform) == "windows"} { | ||||||
|  |         set pipe [open "|iexplore $url" "r"] | ||||||
|  |     } elseif {$tcl_platform(platform) == "mac"} { | ||||||
|  |         set pipe [open "|iexplore $url" "r"] | ||||||
|  |     } elseif {$tcl_platform(platform) == "unix"} { | ||||||
|  |         #$env(BROWSER) | ||||||
|  |         #set pipe [open "|$env(BROWSER) $url" "r"] | ||||||
|  |         launchBrowser $url | ||||||
|  |         return | ||||||
|  |     } | ||||||
|  |     fileevent $pipe readable | ||||||
|  |     fconfigure $pipe -buffering none -blocking no | ||||||
|  | } | ||||||
|  | ## MAKING TAR ARCHIVE ## | ||||||
|  | proc MakeTGZ {} { | ||||||
|  |     global activeProject tgzDir tgzNamed workDir projDir env tcl_platform | ||||||
|  |     if {$activeProject == ""} { | ||||||
|  |         set answer [tk_messageBox\ | ||||||
|  |                 -message [::msgcat::mc "Not found active project"]\ | ||||||
|  |                 -type ok -icon warning\ | ||||||
|  |                 -title [::msgcat::mc "Warning"]] | ||||||
|  |         case $answer { | ||||||
|  |             ok {return 0} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     FileDialog tree save_all | ||||||
|  |     set file [open [file join $workDir $activeProject.proj] r] | ||||||
|  |     while {[gets $file line]>=0} { | ||||||
|  |         scan $line "%s" keyWord | ||||||
|  |         set string [string range $line [string first "\"" $line] [string last "\"" $line]] | ||||||
|  |         set string [string trim $string "\""] | ||||||
|  |         if {$keyWord == "ProjectDirName"} { | ||||||
|  |             set dir "$string" | ||||||
|  |         }   | ||||||
|  |         if {$keyWord == "ProjectVersion"} { | ||||||
|  |             set version "$string" | ||||||
|  |         }   | ||||||
|  |         if {$keyWord == "ProjectRelease"} { | ||||||
|  |             set release "$string" | ||||||
|  |         }   | ||||||
|  |     } | ||||||
|  |     close $file | ||||||
|  |     set res [split $tgzNamed "-"] | ||||||
|  |     set name [lindex $res 0] | ||||||
|  |     set ver [lindex $res 1] | ||||||
|  |     set rel [lindex $res 2] | ||||||
|  |     if {$name == "projectName"} { | ||||||
|  |         set name $activeProject | ||||||
|  |     } | ||||||
|  |     if {$ver == "version"} { | ||||||
|  |         append name "-$version" | ||||||
|  |     } | ||||||
|  |     if {$rel == "release"} { | ||||||
|  |         append name "-$release" | ||||||
|  |     } | ||||||
|  |     # multiplatform featuring # | ||||||
|  |     if {$tcl_platform(platform) == "windows"} { | ||||||
|  |         append name ".zip" | ||||||
|  |     } elseif {$tcl_platform(platform) == "mac"} { | ||||||
|  |         append name ".zip" | ||||||
|  |     } elseif {$tcl_platform(platform) == "unix"} { | ||||||
|  |         append name ".tar.gz" | ||||||
|  |     } | ||||||
|  |     catch {cd $projDir} res | ||||||
|  |     if {[file exists [file join $tgzDir $name]] == 1} { | ||||||
|  |         set answer [tk_messageBox\ | ||||||
|  |                 -message "[::msgcat::mc "File already exists. Overwrite?"] \"$name\" ?"\ | ||||||
|  |                 -type yesno -icon question -default yes\ | ||||||
|  |                 -title [::msgcat::mc "Question"]] | ||||||
|  |         case $answer { | ||||||
|  |             yes {file delete [file join $tgzDir $name]} | ||||||
|  |             no {return 0} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     # multiplatform featuring # | ||||||
|  |     if {$tcl_platform(platform) == "windows"} { | ||||||
|  |         catch [exec pkzip -r -p [file join $tgzDir $name] [file join $activeProject *]] err | ||||||
|  |     } elseif {$tcl_platform(platform) == "mac"} { | ||||||
|  |         catch [exec zip -c [file join $tgzDir $name] $activeProject] err | ||||||
|  |     } elseif {$tcl_platform(platform) == "unix"} { | ||||||
|  |         catch [exec tar -czvf [file join $tgzDir $name] $activeProject] err | ||||||
|  |     } | ||||||
|  |     # message dialog # | ||||||
|  |     set msg "[::msgcat::mc "Archive created in"] [file join $tgzDir $name]" | ||||||
|  |     set icon info | ||||||
|  |     set answer [tk_messageBox\ | ||||||
|  |             -message "$msg"\ | ||||||
|  |             -type ok -icon $icon] | ||||||
|  |             case $answer { | ||||||
|  |         ok {return 0} | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ## MAKE PROJ PROCEDURE (RUNNING PROJECT) ## | ||||||
|  | proc Execute {filePath w} { | ||||||
|  |     global activeProject cfgVariables | ||||||
|  |     if {$activeProject == ""} { | ||||||
|  |         set answer [tk_messageBox\ | ||||||
|  |         -message "[::msgcat::mc "Not found active project"]"\ | ||||||
|  |         -type ok -icon warning\ | ||||||
|  |         -title [::msgcat::mc "Warning"]] | ||||||
|  |         case $answer { | ||||||
|  |             ok {return 0} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     FileOper::Save | ||||||
|  |     set file $filePath | ||||||
|  |     set action run | ||||||
|  |     # if {$action == "compile"} { | ||||||
|  |        | ||||||
|  |         # if {$t == "proj"} { | ||||||
|  |             # set prog [file join $projDirName $projFileName.java] | ||||||
|  |         # } elseif {$t == "file"} { | ||||||
|  |             # set node [$tree selection get] | ||||||
|  |             # set fullPath [$tree itemcget $node -data] | ||||||
|  |             # set dir [file dirname $fullPath] | ||||||
|  |             # set file [file tail $fullPath] | ||||||
|  |             # set prog $fullPath | ||||||
|  |         # } | ||||||
|  |     # } elseif {$action == "run"} { | ||||||
|  |         # if {$t == "proj"} { | ||||||
|  |             # set prog [file join $projDirName $projFileName] | ||||||
|  |         # } elseif {$t == "file"} { | ||||||
|  |             # set node [$tree selection get] | ||||||
|  |             # set fullPath [$tree itemcget $node -data] | ||||||
|  |             # set dir [file dirname $fullPath] | ||||||
|  |             # set file [file tail $fullPath] | ||||||
|  |             # set prog $fullPath | ||||||
|  |         # } | ||||||
|  |     # } | ||||||
|  |      | ||||||
|  |     # set node "debug" | ||||||
|  |     # if {[$noteBook index $node] != -1} { | ||||||
|  |         # $noteBook delete debug | ||||||
|  |     # } | ||||||
|  |     # set w [$noteBook insert end $node -text [::msgcat::mc "Running project"]] | ||||||
|  |     # create array with file names # | ||||||
|  |     frame $w.frame -borderwidth 2 -relief ridge -background $cfgVariables(backGround) | ||||||
|  |     pack $w.frame -side top -fill both -expand true | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     text $w.frame.text -yscrollcommand "$w.frame.yscroll set" \ | ||||||
|  |     -bg $cfgVariables(backGround) -fg $cfgVariables(foreground) \ | ||||||
|  |     -relief sunken -wrap word -highlightthickness 0 -font $cfgVariables(font)\ | ||||||
|  |     -selectborderwidth 0 -selectbackground $cfgVariables(selectbg) -width 10 -height 10 | ||||||
|  |     scrollbar $w.frame.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \ | ||||||
|  |     -command "$w.frame.text yview" -background $cfgVariables(backGround) | ||||||
|  |      | ||||||
|  |     pack $w.frame.text -side left -fill both -expand true | ||||||
|  |     pack $w.frame.yscroll -side left -fill y  | ||||||
|  |      | ||||||
|  |     # frame $w.frmBtn -borderwidth 2 -relief ridge -bg $cfgVariables(backGround) | ||||||
|  |     # pack $w.frmBtn -side top -fill x | ||||||
|  |     # button $w.frmBtn.btnOk -text [::msgcat::mc "Close"] -borderwidth {1} \ | ||||||
|  |     # -bg $cfgVariables(backGround) -fg $cfgVariables(backGround) -command { | ||||||
|  |         # $noteBook delete debug | ||||||
|  |         # $noteBook  raise [$noteBook page end] | ||||||
|  |         # return 0 | ||||||
|  |     # } | ||||||
|  |     # pack $w.frmBtn.btnOk -pady 2 | ||||||
|  |     # key bindings # | ||||||
|  |     # bind $w.frmBtn.btnOk <Escape> { | ||||||
|  |         # $noteBook delete debug | ||||||
|  |         # $noteBook  raise [$noteBook page end] | ||||||
|  |         # #        return 0 | ||||||
|  |     # } | ||||||
|  |      | ||||||
|  |     bind $w.frame.text <Return> [list Run $w $filePath] | ||||||
|  |     bind $w.frame.text <Control-r> [list destroy $w] | ||||||
|  |     bind $w.frame.text <Control-Cyrillic_er> [list destroy $w] | ||||||
|  |     # focus -force $w.frmBtn.btnOk | ||||||
|  |     # $noteBook raise $node | ||||||
|  |     # insert debug data into text widget # | ||||||
|  |     $w.frame.text tag configure bold -font $cfgVariables(fontBold) | ||||||
|  |     $w.frame.text tag configure error -font $cfgVariables(fontBold) -foreground red | ||||||
|  |     $w.frame.text tag add bold 0.0 0.end | ||||||
|  |     # if {$action == "compile"} { | ||||||
|  |         # $w.frame.text insert end "[::msgcat::mc "Compile project"] - $activeProject\n" | ||||||
|  |         # $w.frame.text insert end "[::msgcat::mc "Compile"] - $prog\n\n" | ||||||
|  |     # } elseif {$action == "run"} { | ||||||
|  |         # $w.frame.text insert end "[::msgcat::mc "Running project"] - $activeProject\n" | ||||||
|  |         # $w.frame.text insert end "[::msgcat::mc "Run"] - $prog\n\n" | ||||||
|  |     # } | ||||||
|  |      $w.frame.text insert end "[::msgcat::mc "Enter command for execute file"] $filePath >\n" | ||||||
|  |     set pos [$w.frame.text index insert] | ||||||
|  |     set lineNum [lindex [split $pos "."] 0] | ||||||
|  |     $w.frame.text insert 0.0 "^^^^^^^^^^^^^^^^^^^^^ [::msgcat::mc "Programm output"] ^^^^^^^^^^^^^^^^^\n" | ||||||
|  |     $w.frame.text tag add bold $lineNum.0 $lineNum.end | ||||||
|  |     focus -force $w.frame.text | ||||||
|  |     # open and manipulate executed program chanel # | ||||||
|  |     # cd $projDirName  | ||||||
|  |     # if {$action == "compile"} { | ||||||
|  |         # set cmdCompile "" | ||||||
|  |         # CompileOption "$projCompiler $prog" | ||||||
|  |         # vwait cmdCompile | ||||||
|  |         # puts "string - $projCompiler $prog" ;# debug info | ||||||
|  |         # set pipe [open "|$cmdCompile 2> [file join $projDirName errors]" "r"] | ||||||
|  |         # set f [open [file join $projDirName errors] "r"] | ||||||
|  |     # } elseif {$action == "run"} { | ||||||
|  |         # set pipe [open "|$command $filePath" "r"] | ||||||
|  |         # set f [open [file join $projDirName errors] "r"] | ||||||
|  |     # } | ||||||
|  |      | ||||||
|  |      | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proc Run {w filePath} { | ||||||
|  |     # Получаем индекс конца последней строки | ||||||
|  |     set endIndex [$w.frame.text index "end-1c"];  # или "end-1l lineend" | ||||||
|  |      | ||||||
|  |     # Получаем индекс начала последней строки   | ||||||
|  |     set startIndex [$w.frame.text index "end-1l linestart"] | ||||||
|  |  | ||||||
|  |     set command [$w.frame.text get $startIndex $endIndex end] | ||||||
|  |     set pipe [open "|$command $filePath 2> [file join [file dirname $filePath] errors]" "r"] | ||||||
|  |     set f [open [file join [file dirname $filePath] errors] "r"] | ||||||
|  |  | ||||||
|  |     # set pipe [open "|$command $filePath" "r"] | ||||||
|  |     # set f [open [file join ~ tmp errors] "r"] | ||||||
|  |     fileevent $pipe readable [list DebugInfo $w.frame.text $pipe $f] | ||||||
|  |     fconfigure $pipe -buffering none -blocking no | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ## INSERT DEBUG INFORMATION INTO TEXT WIDGET ## | ||||||
|  | proc DebugInfo {widget file f} { | ||||||
|  |     $widget configure -state normal | ||||||
|  |     if {[eof $file]} { | ||||||
|  |         catch [close $file] msg | ||||||
|  |         if {$msg != ""} { | ||||||
|  |             puts $msg | ||||||
|  |             $widget insert "end-4l linestart" "[::msgcat::mc "Program failed"]: $msg\n"; | ||||||
|  |         } else { | ||||||
|  |             puts $msg | ||||||
|  |             $widget see "end-1l lineend" | ||||||
|  |             $widget delete "end-1l lineend" end | ||||||
|  |           #  $widget insert end "\n-------------------------------------------------\n" | ||||||
|  |            # $widget insert end "[::msgcat::mc "Program finished successfully"]\n" | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         $widget insert "end-4l linestart" [read $file] | ||||||
|  |     } | ||||||
|  |     while {[gets $f line]>=0} { | ||||||
|  |         $widget insert "end-4l linestart" "$line\n" | ||||||
|  |         puts $line | ||||||
|  |     } | ||||||
|  |     # close $f | ||||||
|  |     $widget see end | ||||||
|  |     $widget tag add error 0.0 0.end | ||||||
|  |     # $widget configure -state disabled | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1365,5 +1365,3 @@ proc make-regexp::make-regexp {words} { | |||||||
|         set regexp |         set regexp | ||||||
| } | } | ||||||
| #============================================================================================== | #============================================================================================== | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user