ViATc-0.5.2-0315

;============================
#SingleInstance Force 
#Persistent 
#NoEnv 
#NoTrayIcon 
;============================
Setkeydelay,-1 
SetControlDelay,-1
Detecthiddenwindows,on
Coordmode,Menu,Window
;============================
; Initialization Variables {{{1
; String {{{2

Version := "0.52" 
KeyTemp :=
Repeat := 
VimAction :=
; Int {{{2
KeyCount := 0
; Bool {{{2
Global Vim := true
Global InsertMode := False
Global VimRN
Global VimRN_Count
Global VimRN_ID
Global VimRN_History := Object()
Global VimRN_Temp
Global VimRN_Vis := False
Global VimRN_IsReplace := False
Global VimRN_IsMultiReplace := False
Global VimRN_IsFind := False
; Arrays {{{2
GroupKey_Arr := object() 
MapKey_Arr := object() 
ExecFile_Arr := object() 
SendText_Arr := object() 
Command_Arr := object()
CmdHistory_Arr := object()
Mark_Arr := object()
HideControl_Arr := object()
;VimAction_Arr := object()
ActionInfo_Arr := object()
HelpInfo_Arr := object()
GroupInfo_Arr := object()
ReName_Arr := Object()
STabs := Object()
HideControl_Arr["Toggle"] := False
; FilePath {{{2
TcExe := FindPath("exe")
TcIni := FindPath("ini")
Splitpath,TcExe,,TcDir
If RegExMatch(TcExe,"i)totalcmd64.exe")
{
	Global TCListBox := "LCLListBox"
	Global TCEdit := "Edit2"
	GLobal TCPanel1 := "Window1"
	Global TCPanel2 := "Window11"
}
Else
{
	Global TCListBox := "TMyListBox"
	Global TCEdit := "Edit1"
	Global TCPanel1 := "TPanel1"
	Global TCPanel2 := "TMyPanel8"
}
RegRead,ViATcIni,HKEY_CURRENT_USER,SoftwareVIATC,ViATcINI
If Not FileExist(ViATcINI)
	ViatcIni := TcDir . "viatc.ini"
; ConfigVar {{{2
GoSub,
; Menu Tray {{{1
;If A_IsCompiled
Menu,VimRN_Set,Add,默认Vim模式`tAlt+V,VimRN_SelMode
Menu,VimRN_Set,Add,默认选择后缀`tAlt+E,VimRN_SelExt
;Menu,VimRN_MENU,Add,常用(&F),VimRN_Help
Menu,VimRN_MENU,Add,选项(&G),:VimRN_Set
Menu,VimRN_MENU,Add,帮助(&H),VimRN_Help	
Menu,Tray,NoStandard
Menu,Tray,Add,运行TC(&T),
Menu,Tray,Add,禁用(&E),
Menu,Tray,Add,重启(&R),
Menu,Tray,Add
Menu,Tray,Add,选项(&O),
Menu,Tray,Add,帮助(&H),
Menu,Tray,Add
Menu,Tray,Add,退出(&X),
Menu,Tray,Tip,Vim Mode At TotalCommander
Menu,Tray,Default,运行TC(&T)
If TrayIcon
	Menu,Tray,Icon
SetHelpInfo()
;SetGroupInfo()
SetVimAction()
SetActionInfo()
SetDefaultKey()
ReadKeyFromIni()
EmptyMem()
return
; Labels {{{1
:
Vim := GetConfig("Configuration","Vim")
Toggle := TransHotkey(GetConfig("Configuration","Toggle"),"ALL")
GlobalTogg := GetConfig("Configuration","GlobalTogg")
If GlobalTogg
{
	;HotKey,Ifwinactive
	Hotkey,%Toggle%,,On,UseErrorLevel
	Toggle := GetConfig("Configuration","Toggle")
}
Else
{
	HotKey,Ifwinactive,AHK_CLASS TTOTAL_CMD
	Hotkey,%Toggle%,,On,UseErrorLevel
	Toggle := GetConfig("Configuration","Toggle")
}
Susp := TransHotkey(GetConfig("Configuration","Suspend"),"ALL")
GlobalSusp := GetConfig("Configuration","GlobalSusp")
If GlobalSusp
{
	HotKey,Ifwinactive
	Hotkey,%Susp%,,On,UseErrorLevel
	Susp := GetConfig("Configuration","Suspend")
}
Else
{
	HotKey,Ifwinactive,AHK_CLASS TTOTAL_CMD
	Hotkey,%Susp%,,On,UseErrorLevel
	Susp := GetConfig("Configuration","Suspend")
}
TrayIcon := GetConfig("Configuration","TrayIcon")
Service := GetConfig("Configuration","Service")
If Not Service
{
	IfWinExist,AHK_CLASS TTOTAL_CMD
		Winactivate,AHK_CLASS TTOTAL_CMD
	Else
	{
		Run,%TcExe%,,UseErrorLevel
		If ErrorLevel = ERROR
			TcExe := FindPath("exe")
	}
	WinWait,AHK_CLASS TTOTAL_CMD
	Settimer,,100
}
StartUp := GetConfig("Configuration","Startup")
If StartUp
{
	RegRead,IsStartup,HKEY_CURRENT_USER,SOFTWAREMicrosoftWindowsCurrentVersionRun,ViATc
	If Not RegExMatch(IsStartup,A_ScriptFullPath)
	{
		RegWrite,REG_SZ,HKEY_CURRENT_USEr,SOFTWAREMicrosoftWindowsCurrentVersionRun,ViATc,%A_ScriptFullPath%
		If ErrorLevel
			Msgbox,16,ViATc,设置开机启动失败,3 ;Lang
	}
} 
Else
	Regdelete,HKEY_CURRENT_USER,SOFTWAREMicrosoftWindowsCurrentVersionRun,ViATc	
GroupWarn := GetConfig("Configuration","GroupWarn")
GlobalSusp := GetConfig("Configuration","GlobalSusp")
TransParent := GetConfig("Configuration","TransParent")
TranspHelp := GetConfig("Configuration","TranspHelp")
MaxCount := GetConfig("Configuration","MaxCount")
TranspVar := GetConfig("Configuration","TranspVar")
DefaultSE := GetConfig("SearchEngine","Default")
SearchEng := GetConfig("SearchEngine",DefaultSE)
LnkToDesktop := GetConfig("Other","LnkToDesktop")
Return
;  {{{2
; 测试32768类是否存在
:
	Get32768()
RETURN
Get32768()
{
	Global InsertMode
	WinGet,MenuID,ID,AHK_CLASS #32768
	IF MenuID
		InsertMode := True
	ELSE
	{
		InsertMode := False
		SetTimer,,OFF
	}
}
;  {{{2
:
	GroupKey(A_ThisHotkey)
Return
;  {{{2
:
IfWinNotExist,AHK_CLASS TTOTAL_CMD
	ExitApp
Return
;  {{{2
:
	SetTimer,, Off
	ToolTip
return
;  {{{2
:
	Ifwinnotactive,AHK_CLASS TTOTAL_CMD
	{
		SetTimer,, Off
		ToolTip
	}
	If A_ThisHotkey = Esc
	{
		SetTimer,, Off
		Tooltip
	}
return
;  {{{2
:
	If SendPos(0)
		ExecFile()
return
;  {{{2
:
	If SendPos(0)
		SendText()
return
;  {{{2
:
	SendPos(-1) ;无效果,并且不记录repaet
return
;  {{{2
; 用于测试用的,查看变量
:
	Msgbox % "Text=" SendText_Arr["Hotkeys"] "`n" "Exec=" ExecFile_Arr["HotKeys"] "`n" "MapKeys=" MapKey_Arr["HotKeys"] "`nGroupkey=" GroupKey_Arr["Hotkeys"]
Return
;  {{{2
:
		Msg := GroupInfo_arr[A_ThisHotkey]
		StringSplit,Len,Msg,`n
		ControlGetPos,xn,yn,,hn,%TCEdit%,AHK_CLASS TTOTAL_CMD
		yn := yn - hn  - ( Len0 - 1 ) * 17 
		Tooltip,%Msg%,%xn%,%yn% ;Lang
		SetTimer,,50
		settimer,,off
return
; Actions {{{1
;  >>回复到正常状态{{{2
:
	Send,{Esc}
	Vim := True
	KeyCount := 0
	KeyTemp := 
	InsertMode := False
	Tooltip
	ControlSetText,%TCEdit%,,AHK_CLASS TTOTAL_CMD
	Settimer,,off
	EmptyMem()
	WinClose,ViATc_TabList
	Gui,Destroy
Return
;  >>打开/最小化/激活TC {{{2
:
;If SendPos(0)
;{
	Ifwinexist,AHK_CLASS TTOTAL_CMD
	{
		WinGet,AC,MinMax,AHK_CLASS TTOTAL_CMD
		If Ac = -1
			Winactivate,AHK_ClASS TTOTAL_CMD
		Else
		Ifwinnotactive,AHK_CLASS TTOTAL_CMD
			Winactivate,AHK_CLASS TTOTAL_CMD
		Else
			Winminimize,AHK_CLASS TTOTAL_CMD
	}
	Else
	{
		Run,%TcExe%,,UseErrorLevel
		If ErrorLevel = ERROR
			TcExe := FindPath("exe")
		Loop,6
		{
			WinWait,AHK_CLASS TTOTAL_CMD,,0
			If ErrorLevel
				Run,%TcExe%,,UseErrorLevel
			Else
				Break
		}
		Winactivate,AHK_CLASS TTOTAL_CMD
		If TransParent
			WinSet,Transparent,220,ahk_class TTOTAL_CMD
	}
	EmptyMem()
;}
Return
;  >>启用/禁用VIM模式 {{{2
:
	Suspend
	If Not IsSuspended
	{
		Menu,Tray,Rename,禁用(&E),启用(&E)
		TrayTip,,禁用VIM,10,17
		If A_IsCompiled
			Menu,Tray,icon,%A_ScriptFullPath%,5,1
		Else
			Menu,Tray,icon,%A_AHKPath%,5,1
		Settimer,,100
		IsSuspended := 1
	}
	Else
	{
		Menu,Tray,Rename,启用(&E),禁用(&E)
		TrayTip,,启用VIM,10,17
		If A_IsCompiled
			Menu,Tray,icon,%A_ScriptFullPath%,1,1
		Else
			Menu,Tray,icon,%A_AHKPath%,1,1
		Settimer,,off
		IsSuspended := 0
		Suspend,off
	}
Return
:
	IfWinActive AHK_CLASS TTOTAL_CMD
		Suspend,on
	Else
		Suspend,off
Return
;  >>重启VIATC {{{2
:
	ReloadVIATC()
Return
ReloadVIATC()
{
	ToggleMenu(1)
	If HideControl_arr["Toggle"]
 		HideControl()
	Reload
}
;  >>回车 {{{2
:
	Enter()
Return
;  >>快捷搜索(禁用VIM){{{2
:
If SendPos(0)
	Vim := !Vim
Return
;  >>配置界面 {{{2
:
If SendPos(0)
	Setting()
Return
;  >>帮助界面 {{{2
:
If SendPos(0)
	Help()
Return
;  >>重启VIATC{{{2
; 帮助界面
:
If SendPos(0)
	ExitApp
Return
;  >>数字 {{{2
;  >>数字0 {{{3
:
	SendNum("0")
Return
;  >>数字1 {{{3
:
	SendNum("1")
Return
;  >>数字2 {{{3
:
	SendNum("2")
Return
;  >>数字3 {{{3
:
	SendNum("3")
Return
;  >>数字4 {{{3
:
	SendNum("4")
Return
;  >>数字5 {{{3
:
	SendNum("5")
Return
;  >>数字6 {{{3
:
	SendNum("6")
Return
;  >>数字7 {{{3
:
	SendNum("7")
Return
;  >>数字8 {{{3
:
	SendNum("8")
Return
;  >>数字9 {{{3
:
	SendNum("9")
Return
;  >>下方向 {{{2
:
	SendKey("{down}")
Return
;  >>上方向 {{{2
:
	SendKey("{up}")
Return
;  >>左方向 {{{2
:
	SendKey("{Left}")
Return
;  >>右方向 {{{2
:
	SendKey("{Right}")
Return
;  >> 强制删除 {{{2
:
	SendKey("+{Delete}")
Return
;  >>向上选择{{{2
:
	SendKey("+{Up}")
Return
;  >>向下选择 {{{2
:
	SendKey("+{down}")
Return
;  >>向下翻页 {{{2
:
	SendKey("{PgUp}")
Return
;  >>向下翻页 {{{2
:
	SendKey("{PgDn}")
Return
;  >>转到第一行,相当于HOME{{{2
:
	If SendPos(0)
		GG()
Return
GG()
{
	ControlGetFocus,ctrl,AHK_CLASS TTOTAL_CMD
	;ControlGet,text,List,,%ctrl%,AHK_CLASS TTOTAL_CMD
	;Stringsplit,T,Text,`n
	PostMessage, 0x19E, 0, 1, %CTRL%, AHK_CLASS TTOTAL_CMD
}
;  >>转到最后一行,相当于End{{{2
:
	If SendPos(0)
		G()
Return
G()
{
	ControlGetFocus,ctrl,AHK_CLASS TTOTAL_CMD
	ControlGet,text,List,,%ctrl%,AHK_CLASS TTOTAL_CMD
	Stringsplit,T,Text,`n
	Last := T0 - 1
	PostMessage, 0x19E,  %Last% , 1 , %CTRL%, AHK_CLASS TTOTAL_CMD
}
;  >>标记功能{{{2
:
	If SendPos(4003)
	{
		ControlGet,EditId,Hwnd,,AHK_CLASS TTOTAL_CMD
		ControlSetText,%TCEdit%,m,AHK_CLASS TTOTAL_CMD
		Postmessage,0xB1,2,2,%TCEdit%,AHK_CLASS TTOTAL_CMD
		SetTimer,,100
	}
Return
:
	MarkTimer()
Return
MarkTimer()
{
	Global Mark_Arr,VIATCINI
	ControlGetFocus,ThisControl,AHK_CLASS TTOTAL_CMD
	ControlGetText,OutVar,%TCEdit%,AHK_CLASS TTOTAL_CMD
	Match_TCEdit := "i)^" . TCEdit . "$"
	If Not RegExMatch(ThisControl,Match_TCEdit) OR Not RegExMatch(Outvar,"i)^m.?")
	{
		Settimer,,Off
		Return
	}
	If RegExMatch(OutVar,"i)^m.$")
	{
		SetTimer,,off
		ControlSetText,%TCEdit%,,AHK_CLASS TTOTAL_CMD
		ControlSend,%TCEdit%,{Esc},AHK_CLASS TTOTAL_CMD
		ClipSaved := ClipboardAll
		Clipboard :=
		Postmessage 1075, 2029, 0, , ahk_class TTOTAL_CMD
		ClipWait
		Path := Clipboard
		Clipboard := ClipSaved
		If StrLen(Path) > 80
		{
			SplitPath,Path,,PathDir
			Path1 := SubStr(Path,1,15)
			Path2 := SubStr(Path,RegExMatch(Path,"\[^\]*$")-Strlen(Path))
			Path := Path1 . "..." . SubStr(Path2,1,65) "..."
		}
		M := SubStr(OutVar,2,1)
		mPath := "&" . m . ">>" . Path
		If RegExMatch(Mark_Arr["ms"],m)
		{
			DelM := Mark_Arr[m]
			Menu,MarkMenu,Delete,%DelM%
			Menu,MarkMenu,Add,%mPath%,
			Mark_Arr["ms"] := Mark_Arr["ms"] . m
			Mark_Arr[m] := mPath
		}
		Else
		{
			Menu,MarkMenu,Add,%mPath%,
			Mark_Arr["ms"] := Mark_Arr["ms"] . m
			Mark_Arr[m] := mPath
		}
/*
		Inidelete,%VIATCINI%,Mark,%M%
		if RegExMatch(OutVar,"^M.$")
		{
			Mark_Arr["sms"] .= M ; saved marks
			Iniwrite,%Path%,%VIATCINI%,Mark,%M%
		}
*/
	}
}
:
	AddMark()
Return
AddMark()
{
	ThisMenuItem := SubStr(A_ThisMenuItem,5,StrLen(A_ThisMenuItem))
	If RegExMatch(ThisMenuItem,"i)\\桌面$")
	{
		Postmessage 1075, 2121, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\计算机$")
	{
		Postmessage 1075, 2122, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\所有控制面板项$")
	{
		Postmessage 1075, 2123, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\Fonts$")
	{
		Postmessage 1075, 2124, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\网络$")
	{
		Postmessage 1075, 2125, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\打印机$")
	{
		Postmessage 1075, 2126, 0, , ahk_class TTOTAL_CMD
		Return
	}
	If RegExMatch(ThisMenuItem,"i)\\回收站$")
	{
		Postmessage 1075, 2127, 0, , ahk_class TTOTAL_CMD
		Return
	}
	ControlSetText, %TCEdit%, cd %ThisMenuItem%, ahk_class TTOTAL_CMD
	ControlSend, %TCEdit%, {Enter}, ahk_class TTOTAL_CMD
	Return
}
;  >>显示标记 {{{2
:
	If SendPos(0)
		ListMark()
Return
ListMark()
{
	Global Mark_Arr,VIATCINI
	If Not Mark_Arr["ms"]
		Return
	ControlGetFocus,TLB,ahk_class TTOTAL_CMD
	ControlGetPos,xn,yn,,,%TLB%,ahk_class TTOTAL_CMD
	Menu,MarkMenu,Show,%xn%,%yn%
}
;  >>在文件夹历史加上前缀,方便用a-z导航 {{{2
:
	If SendPos(572)
		azhistory()
Return
azhistory()
{
	;Postmessage,1075,%Num%,0,,ahk_class TTOTAL_CMD
	Sleep, 100
	if WinExist("ahk_class #32768")
	{
	SendMessage,0x01E1 ;Get Menu Hwnd
    hmenu := ErrorLevel
    if hmenu!=0
    {
		If Not RegExMatch(GetMenuString(Hmenu,1),".*[\|/]$")
			Return
		Menu,sh,add
		Menu,sh,deleteall
		a :=
        itemCount := DllCall("GetMenuItemCount", "Uint", hMenu, "Uint")
		Loop %itemCount%
	 	{
			a := chr(A_Index+64) . ">>" .  GetMenuString(Hmenu,A_Index-1)
			Menu,SH,add,%a%,azSelect
		}
		Send {Esc}
		ControlGetFocus,TLB,ahk_class TTOTAL_CMD
		ControlGetPos,xn,yn,,,%TLB%,ahk_class TTOTAL_CMD
		Menu,SH,show,%xn%,%yn%
		Return
    }
	}	
}
GetMenuString(hMenu, nPos)
{
      VarSetCapacity(lpString, 256) 
      length := DllCall("GetMenuString"
         , "UInt", hMenu
         , "UInt", nPos
         , "Str", lpString
         , "Int", 255
         , "UInt", 0x0400)
   	  return lpString
}
azSelect:
	azSelect()
Return
azSelect()
{
	nPos := A_ThisMenuItem
	nPos := Asc(Substr(nPos,1,1)) - 64
	Winactivate,ahk_class TTOTAL_CMD
	Postmessage,1075,572,0,,ahk_class TTOTAL_CMD
	Sleep,100
	if WinExist("ahk_class #32768")
	{
		Loop %nPos%
			SendInput {Down}
		Send {enter}
	}
}
/*
;  >>查看命令历史记录 
:
	If SendPos(0)
		ListCmdHistory()
Return
ListCmdHistory()
{
	Global TcIni
	Menu,cmdMenu,Add
	Menu,cmdMenu,DeleteAll
	VarSetCapacity(var,256)
	;Menu,cmdMenu,Add,命令行历史,en
	;Index := CmdHistory[0]
	Loop ;,%Index%
	{
		Index := A_Index - 1
		IniRead,CMD,%TcIni%,Command line history,%Index%
		If CMD = ERROR
			Break
		var := chr(A_Index+64) . ">>" . CMD ;CmdHistory[A_Index]
		Menu,CmdMenu,add,%var%,GetCmd
	}
	ControlGetPos,xn,yn,,hn,%TCEdit%,AHK_CLASS TTOTAL_CMD
	yn := yn - 30 - ( (Index - 1) * 22 )
	Menu,CmdMenu,Show,%xn%,%yn%
}
GetCMD:
	GetCMD()
Return
GetCMD()
{
	var := Substr(A_ThisMenuItem,4,StrLen(A_ThisMenuItem))
	ControlSetText,%TCEdit%,%var%,AHK_CLASS TTOTAL_CMD
	ControlFocus,%TCEdit%,AHK_CLASS TTOTAL_CMD
	ControlSend,%TCEdit%,{End},AHK_CLASS TTOTAL_CMD
}
*/
;  >>使用网络搜索引擎搜索当前文件 {{{2
:
	If SendPos(0)
		Internetsearch()
Return
Internetsearch()
{
	Global SearchEng
	If CheckMode()
	{
		ClipSaved := ClipboardAll ;保存原来剪切板里的内容UserInput
    	Clipboard = ;初始化剪切板
		PostMessage 1075, 2017, 0, , ahk_class TTOTAL_CMD
 		ClipWait
		rFileName := clipboard
    	clipboard := ClipSaved
		StringRight,lastchar,rFileName,1
		If(lastchar = "" )
		Stringleft,rFileName,rFileName,Strlen(rFileName)-1
		;rFileName := rFileName
		rFileName := RegExReplace(SearchEng,"{%1}",rFileName)
		Run %rFileName%
	}
	Return
}
;  >>切换到桌面{{{2
:
	If SendPos(0)
	{
		ControlSetText,%TCEdit%,CD %A_Desktop%,AHK_CLASS TTOTAL_CMD
		ControlSend,%TCEdit%,{Enter},AHK_CLASS TTOTAL_CMD
	}
Return
;  >> 增强的 {{{2
:
	If CheckMode()
		IsRootDir()
	SendPos(2002,True)
Return
IsRootDir()
{
	ClipSaved := ClipboardAll
	clipboard := 
	PostMessage,1075,2029,0,,AHK_CLASS TTOTAL_CMD
	ClipWait,1
	Path := Clipboard
	Clipboard := ClipSaved
	If RegExMatch(Path,"^.:\$")
	{
		PostMessage,1075,2122,0,,AHK_CLASS TTOTAL_CMD
		Path := "i)" . RegExReplace(Path,"\","")
		ControlGetFocus,focus_control,AHK_CLASS TTOTAL_CMD
		ControlGet,outvar,list,,%focus_control%,AHK_CLASS TTOTAL_CMD
		Loop,Parse,Outvar,`n
		{
			If Not A_LoopField
				Break
			If RegExMatch(A_LoopField,Path)
			{
				Focus := A_Index - 1
				Break
			}
		}
		PostMessage, 0x19E, %Focus%, 1, %focus_control%, AHK_CLASS TTOTAL_CMD
	}
}
;  >>重复 {{{2
:
	If SendPos(-1)
		SingleRepeat()
Return
;  >>TC最简 {{{2
:
	If SendPos(0)
	{
		ToggleMenu()
 		HideControl()
		GoSub,
		;GoSub,
		;GoSub,
		Send,{Esc}
	}
Return
;  >>TC全屏 {{{2
:
	If SendPos(0)
	{
		ToggleMenu()
 		HideControl()
		GoSub,
		;GoSub,
		;GoSub,
		If HideControl_arr["Max"]
		{
			PostMessage 1075, 2016, 0, , ahk_class TTOTAL_CMD
			HideControl_arr["Max"] := 0
			Return
		}
		WinGet,AC,MinMax,AHK_CLASS TTOTAL_CMD
		If AC = 1
		{
			PostMessage 1075, 2016, 0, , ahk_class TTOTAL_CMD
			PostMessage 1075, 2015, 0, , ahk_class TTOTAL_CMD
			HideControl_arr["Max"] := 0
		}
		If AC = 0
		{
			PostMessage 1075, 2015, 0, , ahk_class TTOTAL_CMD
			HideControl_arr["Max"] := 1
		}
			
	}
Return
;  >>文件模板 {{{2
:
	If SendPos(0)
		CreateNewFile()
Return
;  >>直接编辑配置文件 {{{2
:
	If SendPos(0)
		Editviatcini()
Return
;  >>切换到最后一个标签{{{2
:
	if SendPos(0)
	{
		PostMessage 1075, 5001, 0, , ahk_class TTOTAL_CMD
		PostMessage 1075, 3006, 0, , ahk_class TTOTAL_CMD
	}
Return
;  >>删除左侧文件夹历史 {{{2
:
	If SendPos(0)
		DeleteHistory(1)
Return
;  >>删除右侧文件夹历史 {{{2
:
	If SendPos(0)
		DeleteHistory(0)
Return
DeleteHistory(A)
{
	Global TCEXE,TCINI
	If A
	{
		H := "LeftHistory"
		DelMsg := "删除左侧文件夹历史记录?" ;Lang
	}
	Else
	{
		H := "RightHistory"
		DelMsg := "删除右侧文件夹历史记录?" ;Lang
	}
	Msgbox,4,ViATC,%DelMsg%
	Ifmsgbox YES
	{
		Winkill,AHK_CLASS TTOTAL_CMD
		n := 0
    	Loop 
    	{
    		IniRead,TempField,%TCINI%,%H%,%n%
    		If TempField = ERROR
       			Break
    		IniDelete,%TCINI%,%H%,%n%
    		n++
    	}	
		Run,%TCEXE%,,UseErrorLevel
		If ErrorLevel = ERROR
			TCEXE := findpath(1)
		WinWait,AHK_CLASS TTOTAL_CMD,3
		Winactivate,AHK_CLASS TTOTAL_CMD	
	}
	Else
		Winactivate,AHK_CLASS TTOTAL_CMD	
}
;  >>删除命令行历史  {{{2
:
	If SendPos(0)
		DeleteCmd()
Return
DeleteCMD()
{
	Global TCEXE,TCINI,CmdHistory
	CmdHistory := Object()
	Msgbox,4,ViATc,删除命令行历史? ;Lang
	Ifmsgbox YES
	{
		Winkill ahk_class TTOTAL_CMD
		n := 0 
    	TempField := 
    	Loop 
    	{
    		IniRead,TempField,%TCINI%,Command line history,%n%
    		If TempField = ERROR
       			Break
    		IniDelete,%TCINI%,Command line history,%n%
    		n++
    	}	
		Run,%TCEXE%,,UseErrorLevel
		If ErrorLevel = ERROR
			TCEXE := findpath(1)
		WinWait,AHK_CLASS TTOTAL_CMD,3
		Winactivate,AHK_CLASS TTOTAL_CMD	
	}
	Else
		Winactivate ahk_class TTOTAL_CMD
}
;  {{{2
:
	If SendPos(0)
		ListMapKey()
Return
ListMapKey()
{
	Global MapKey_Arr,ActionInfo_Arr,ExecFile_Arr,SendText_Arr
	Map := MapKey_Arr["Hotkeys"]
	Stringsplit,ListMap,Map,%A_Space% 
	Loop,% ListMap0
	{
		If ListMap%A_Index%
		{
			Action := MapKey_Arr[ListMap%A_Index%]
			If Action = 
			{
				EX := SubStr(ListMap%A_Index%,1,1) . TransHotkey(SubStr(ListMap%A_Index%,2))
				Action := "(" . ExecFile_Arr[EX] . ")"
			}
			If Action = 
			{
				TX := SubStr(ListMap%A_Index%,1,1) . TransHotkey(SubStr(ListMap%A_Index%,2))
				Action := "{" . SendText_Arr[TX] . "}"
			}
			LM .= SubStr(ListMap%A_Index%,1,1) . "  " . SubStr(ListMap%A_Index%,2) . "  " . Action  . "`n"
		}
	}
	ControlGetPos,xn,yn,,hn,%TCEdit%,AHK_CLASS TTOTAL_CMD
	yn := yn - hn - ( ListMap0 * 8 ) - 2
	Tooltip,%LM%,%xn%,%yn%
	Settimer,,100
}
;  {{{2
:
	If SendPos(4003)
	{
		ControlSetText,%TCEdit%,:,AHK_CLASS TTOTAL_CMD
		Send,{end}
	}
Return
;  >>最大化左面板 {{{2
:
	If SendPos(0)
		WinMaxLeft()
Return
WinMaxLeft()
{
	ControlGetPos,x,y,w,h,%TCPanel2%,ahk_class TTOTAL_CMD
	ControlGetPos,tm1x,tm1y,tm1W,tm1H,%TCPanel1%,ahk_class TTOTAL_CMD
	If (tm1w  >>最大化右面板 {{{2
:
	If SendPos(0)
	{
		ControlMove,%TCPanel1%,0,0,,,ahk_class TTOTAL_CMD
		ControlClick,%TCPanel1%,ahk_class TTOTAL_CMD
		WinActivate ahk_class TTOTAL_CMD
	}
Return
;  >>窗口最前 {{{2
:
	If SendPos(0)
		AlwayOnTop()
Return
AlwayOnTop()
{
	WinGet,ExStyle,ExStyle,ahk_class TTOTAL_CMD
	If (ExStyle & 0x8)
   		WinSet,AlwaysOnTop,off,ahk_class TTOTAL_CMD
	else
   		WinSet,AlwaysOnTop,on,ahk_class TTOTAL_CMD 
}
;  >>TC透明 {{{2
:
	If SendPos(0)
		TransParent()
Return
TransParent()
{
	Global VIATCINI,Transparent,TranspVar
	IniRead,Transparent,%VIATCINI%,Configuration,Transparent
	If Transparent
	{
		WinSet,Transparent,255,ahk_class TTOTAL_CMD
		IniWrite,0,%VIATCINI%,Configuration,Transparent
		Transparent := 0
	}
	Else
	{
		WinSet,Transparent,%TranspVar%,ahk_class TTOTAL_CMD
		IniWrite,1,%VIATCINI%,Configuration,Transparent
		Transparent := 1
	}
}
;  >>重启TC{{{2
:
If SendPos(0)
{
	ToggleMenu(1)
	If HideControl_arr["Toggle"]
 		HideControl()
	WinKill,AHK_CLASS TTOTAL_CMD
	Loop,100
	{
		IfWinNotExist,AHK_CLASS TTOTAL_CMD
			Break
	}
	GoSub,
}
Return
;  退出TC{{{2
:
	WinClose,AHK_CLASS TTOTAL_CMD
return
;  >>移动到中间行 {{{2
:
	If SendPos(0)
		Half()
Return
Half()
{
	winget,tid,id,ahk_class TTOTAL_CMD
	controlgetfocus,ctrl,ahk_id %tid%
	controlget,cid,hwnd,,%ctrl%,ahk_id %tid%
	controlgetpos,x1,y1,w1,h1,THeaderClick2,ahk_id %tid%
	controlgetpos,x,y,w,h,%ctrl%,ahk_id %tid%
	SendMessage,0x01A1,1,0,,ahk_id %cid%
	Hight := ErrorLevel
	SendMessage,0x018E,0,0,,ahk_id %cid%
	Top := ErrorLevel
	HalfLine := Ceil( ((h-h1)/Hight)/2 ) + Top
	PostMessage, 0x19E, %HalfLine%, 1, , AHK_id %cid%
}
;  {{{2
:
	If SendPos(0)
		CopyNameOnly()
Return
CopyNameOnly()
{
	clipboard :=
	GoSub,
	ClipWait
	If Not RegExMatch(clipboard,"^..*")
		clipboard := RegExReplace(RegExReplace(clipboard,"\$"),".[^.]*$")
}
;  >>a-z导航的菜单 {{{2
:
	If SendPos(0)
		azTab()
Return
azTab()
{
	Global TabsBreak,TcExe
	If RegExMatch(TcExe,"i)totalcmd64.exe")
		Return
	TCid := WinExist("AHK_CLASS TTOTAL_CMD")
	WinClose,ViATc_TabList
	ControlGetPos,xe,ye,we,he,Edit1,AHK_CLASS TTOTAL_CMD
	Gui,New
	Gui,+HwndTabsHwnd -Caption  +Owner%TCid% 
	Gui,Add,ListBox,x2 y2 w%we% gSetTab
	Index := 1
	for i,tab in ControlGetTabs("TMyTabControl1","AHK_CLASS TTOTAL_CMD")
   	{ 
      	vTab := Chr(Index+64) . ":" . Tab
		STabs[vTab] := "L" . A_index
		If A_Index = 1
		{
			ControlGet,TMyT2,hwnd,,TMyTabControl2,AHK_CLASS TTOTAL_CMD
			If TMyT2
				GuiControl,,ListBox1,=====左边===================
			Else
			{
				ControlGetPos,x1,y1,,,TPanel1,AHK_CLASS TTOTAL_CMD
				ControlGetPos,x2,y2,,,TMyTabControl1,AHK_CLASS TTOTAL_CMD
				If ( x2  TabsBreak )
		{
			Pos := Pos - TabsBreak - 1
			PostMessage,0x1330,%Pos%,0,TMyTabControl2,AHK_CLASS TTOTAL_CMD
			If Not LeftRight()
				PostMessage,1075,4002,0,,AHK_CLASS TTOTAL_CMD
			;PostMessage,1075,4002,0,,AHK_CLASS TTOTAL_CMD
		}
		WinClose,AHK_ID %TabsHwnd%
		Return
	}
return
; 判断当前焦点在左还是右
LeftRight()
{
	ControlGetPos,x1,y1,,,TPanel1,AHK_CLASS TTOTAL_CMD
	ControlGetFocus,TLB,AHK_CLASS TTOTAL_CMD
	ControlGetPos,x2,y2,,,%TLB%,AHK_CLASS TTOTAL_CMD
	If ( x2  >>Vim重命名 {{{2
:
	If SendPos(0)
	VimRNCreateGui()
Return
; VimRN Gui {{{3
VimRNCreateGui()
{
	Static WM_CHAR := 0x102
	Global GetName
/*
	ClipSaved := ClipboardAll 
    Clipboard = 
	PostMessage 1075, 2017, 0, , ahk_class TTOTAL_CMD
 	ClipWait,1
	If ErrorLevel
		Return
	GetName := clipboard
   	clipboard := ClipSaved
*/
	WinClose,AHK_ID %VimRN_ID%
	;Loop,parse,GetName,`n
	;{
	;	If A_Index = 1
	;		GetName := A_LoopField
	;	If A_Index = 2
	;	{
			PostMessage 1075, 1007, 0, , ahk_class TTOTAL_CMD
			Loop,8
			{
				ControlGetFocus,ThisCtrl,AHK_CLASS TTOTAL_CMD
				If ThisCtrl = TInEdit1
				{
					ControlGetText,GetName,TInEdit1,AHK_CLASS TTOTAL_CMD
					Break
				}
				Sleep,50
			}
			If Not GetName
				Return
	;		Break
	;	}
	;}
	StringRight,GetDir,GetName,1
	If GetDir = 
	{
		StringLeft,GetName,GetName,Strlen(GetName)-1
		GetDir := True
	}
	Else
		GetDir := False
	WinGet,TCID,ID,AHK_CLASS TTOTAL_CMD
	Gui,New
	Gui,+HwndVimRN_ID
	Gui,+Owner%TCID% 
	Gui,Menu,VimRN_MENU
	Gui,Add,Edit,r6 w300 -WantReturn gVimRN_Edit,%GetName%
	Gui,Add,StatusBar
	Gui,Add,Button,Default Hidden gVimRN_Enter
	Gui,Show,h125,ViATc 重命名

	PostMessage,0x00C5,256,,Edit1,AHK_ID %VimRN_ID%

	VimRN := GetConfig("VimReName","Mode")
	If VimRN
	{
		Menu,VimRN_Set,Check,默认Vim模式`tAlt+V
		Status := " 模式: Vim                                    "
	}
	Else
		Status := " 模式: Normal                                 "
	ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
	
	If GetConfig("VimReName","SelectExt")
	{
		SplitPath,GetName,,,Ext
		Menu,VimRN_Set,Check,默认Vim模式`tAlt+V
		Menu,VimRN_Set,Check,默认选择后缀`tAlt+E
	}
	If Ext And ( Not GetDir )
	{
		StartPos := 0
		EndPos := StrLen(GetName) - strlen(Ext) - 1
		VimRN_SetPos(StartPos,EndPos)
	}
	VimRN_History["s"] := 0
	VimRN_History[0] := StartPos . "," . EndPos . "," . GetName
	VimRN_History["String"] := GetName
	OnMessage(WM_CHAR,"GetFindText")
}
GetFindText(byRef w, byRef l)
{
	If VimRN_IsFind
	{
		ThisChar := Chr(w)
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		GetPos := VimRN_GetPos()
		StartPos := GetPos[2] + 1
		Pos := RegExMatch(Text,RegExReplace(ThisChar,"+|?|.|*|{|}|(|)|||^|$|[|]|\","$0"),"",StartPos)
		VimRN_SetPos(Pos-1,Pos)
		VimRN_IsFind := False
		VimRN := True
		Return 0
	}
}
; VimRN Keys {{{3
;======================
; VimRN_Num: {{{4
VimRN_Num:
	VimRN_SendNum()
Return
; VimRN_Down: {{{4
VimRN_Down:
	Key := VimRN_Vis ? "+{Down}" : "{Down}"
	VimRN_SendKey(key)
Return
; VimRN_Up: {{{4
VimRN_Up:
	Key := VimRN_Vis ? "+{Up}" : "{Up}"
	VimRN_SendKey(key)
Return
; VimRN_Left: {{{4
VimRN_Left:
	Key := VimRN_Vis ? "+{Left}" : "{Left}"
	VimRN_SendKey(key)
Return
; VimRN_Right: {{{4
VimRN_Right:
	Key := VimRN_Vis ? "+{Right}" : "{Right}"
	VimRN_SendKey(key)
Return
; VimRN_SDown: {{{4
VimRN_SDown:
	VimRN_SendKey("+{Down}")
Return
; VimRN_SLeft: {{{4
VimRN_SLeft:
	VimRN_SendKey("+{Left}")
Return
; VimRN_SUp: {{{4
VimRN_SUp:
	VimRN_SendKey("+{Up}")
Return
; VimRN_SRight: {{{4
VimRN_SRight:
	VimRN_SendKey("+{Right}")
Return
; VimRN_Find: {{{4
VimRN_Find:
	If VimRN_SendKey("")
	{
		VimRN := False
		VimRN_IsFind := True
	}
Return
; VimRN_SelectThis: {{{4
VimRN_SelectThis:
	If VimRN_SendKey("")
	{
		Pos := VimRN_GetPos()
		Pos := Pos[2]
		VimRN_SetPos(Pos,Pos)
	}
return
; VimRN_Selectall: {{{4
VimRN_Selectall:
	If VimRN_SendKey("")
	{
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		Pos := Strlen(Text)
		VimRN_SetPos(0,Pos)
	}
Return
; VimRN_SelectFileName: {{{4
VimRN_SelectFileName:
	If VimRN_SendKey("")
	{
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		splitpath,Text,,,,FileName
		Pos := Strlen(FileName)
		VimRN_SetPos(0,Pos)
	}
Return
; VimRN_SelectExt: {{{4
VimRN_SelectExt:
	If VimRN_SendKey("")
	{
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		splitpath,Text,,,FileExt,FileName
		Pos1 := Strlen(FileName)
		Pos2 := Strlen(FileExt)
		VimRN_SetPos(Pos1+1,Pos1+Pos2+1)
	}
Return
; VimRN_Home: {{{4
VimRN_Home:
	If VimRN_SendKey("")
		VimRN_SetPos(0,0)
Return
; VimRN_End: {{{4
VimRN_End:
	If VimRN_SendKey("")
	{
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		Pos := Strlen(Text)
		VimRN_SetPos(Pos,Pos)
	}
Return
; VimRN_Copy: {{{4
VimRN_Copy:
	If VimRN_SendKey("")
	{
		Pos := VimRN_GetPos()
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		VimRN_Temp := SubStr(Text,Pos[1]+1,Pos[2]-Pos[1])
	}
Return
; VimRN_Backspace: {{{4
VimRN_Backspace:
	If VimRN_SendKey("")
	{
		VimRN_Cut(-1)
		Send {Backspace}
	}
Return
; VimRN_Delete: {{{4
VimRN_Delete:
	If VimRN_SendKey("")
	{
		VimRN_Cut(0)
		Send {Delete}
	}
Return
; VimRN_Paste: {{{4
VimRN_Paste:
	If VimRN_SendKey("")
		VimRN_Paste()
Return
; VimRN_Trade: {{{4
VimRN_Trade:
	If VimRN_SendKey("")
	{
		Pos := VimRN_GetPos()
		ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
		If Pos[1] > 0
		{
			TextA := SubStr(Text,Pos[1],1)
			TextB := SubStr(Text,Pos[1]+1,1)
			SetText := SubStr(Text,1,Pos[1]-1) . TextB . TextA . SubStr(Text,Pos[1]+2)
			ControlSetText,Edit1,%SetText%,AHK_ID %VimRN_ID%
			VimRN_SetPos(Pos[1],Pos[2])
			VimRN_Edit()
		}
	}
Return
; VimRN_Replace: {{{4
VimRN_Replace:
	If VimRN_SendKey("")
	{
		VimRN_IsReplace := True
		Pos := VimRN_GetPos()
		If Pos[1] = Pos[2]
		{
			VimRN_SetPos(Pos[1],Pos[1]+1)
			VimRN := False
		}
	}
Return
; VimRN_MultiReplace: {{{4
VimRN_MultiReplace:
	If VimRN_SendKey("")
	{
		VimRN_IsMultiReplace := True
		Pos := VimRN_GetPos()
		If Pos[1] = Pos[2]
		{
			VimRN_SetPos(Pos[1],Pos[1]+1)
			VimRN := False
		}
	}
Return
; VimRN_visual: {{{4
VimRN_visual:
	If VimRN_SendKey("")
	{
		VimRN_Vis := !VimRN_Vis
		If VimRN_Vis
		{
			Status := " 模式: Visual                                 "
			ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
		}
		Else
		{
			Status := " 模式: Vim                                    "
			ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
		}
	}
Return
; VimRN_Insert: {{{4
VimRN_Insert:
	If VimRN_SendKey("")
	{
		VimRN := False	
		Status := " 模式: Normal                                 "
		ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
	}
Return
; VimRN_Esc: {{{4
VimRN_Esc:
	VimRN := True
	VimRN_IsReplace := False
	VimRN_IsMultiReplace := False
	VimRN_Count := 0
	Status := " 模式: Vim                                    "
	Tooltip
	Settimer,,off
	ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
Return
; VimRN_Quit: {{{4
VimRN_Quit:
	If VimRN_SendKey("")
		WinClose,AHK_ID %VimRN_ID%
Return
; VimRN_Undo: {{{4
VimRN_Undo:
	If VimRN_SendKey("")
		VimRN_Undo()
Return
; VimRN_Enter: {{{4
VimRN_Enter:
	GuiControlGet,NewName,,Edit1
	Gui,Destroy
	Postmessage,1075,1007,0,,AHK_CLASS TTOTAL_CMD
	Loop,40
	{
		ControlGetFocus,This,AHK_CLASS TTOTAL_CMD
		If This = TInEdit1
		{
			ControlGetText,ConfirName,TInEdit1,AHK_CLASS TTOTAL_CMD
			ControlSetText,TInEdit1,%NewName%,AHK_CLASS TTOTAL_CMD
			Break
		}
		Sleep,50
	}
	If Diff(ConfirName,GetName)
		ControlSend,TInEdit1,{enter},AHK_CLASS TTOTAL_CMD
	Else
		Return
Return
; VimRN Label {{{3
;======================
; VimRN_Edit: {{{4
VimRN_Edit:
	VimRN_Edit()
Return
; VimRN_SelMode: {{{4
VimRN_SelMode:
	SetConfig("VimReName","Mode",!GetConfig("VimReName","Mode"))
	If GetConfig("VimReName","Mode")
		Menu,VimRN_Set,Check,默认Vim模式`tAlt+V
	Else
		Menu,VimRN_Set,UnCheck,默认Vim模式`tAlt+V
Return
; VimRN_SelExt: {{{4
VimRN_SelExt:
	SetConfig("VimReName","SelectExt",!GetConfig("VimReName","SelectExt"))
	If GetConfig("VimReName","SelectExt")
		Menu,VimRN_Set,Check,默认选择后缀`tAlt+E
	Else
		Menu,VimRN_Set,UnCheck,默认选择后缀`tAlt+E
Return
; VimRN_Help: {{{4
VimRN_Help:
	VimRN_Help()
Return
VimRN_Help()
{
test =
(
h : 向左移动N个字符
j : 向下移动N个字符
k : 向上移动N个字符
l : 向右移动N个字符
w : 选择文件名
e : 选择扩展名
u : 撤销
x : 向后删除
d : 向前删除
y : 复制字符
p : 粘贴字符
t : 对换光标处的两个字符
r : 只替换光标处的字符
R : 替换光标之后的所有字符,直遇到Esc
a : 全选
g : 光标位于第一个字符
b : 光标位于最后一个字符
s : 光标位于选中字符的最后一个字符处
f : 查找字符,例如f后按a,就是查找a
q : 退出重命名
i : 编辑模式
v : 选择模式
Esc : 正常模式
Enter : 保存重命名
)
	WinGetPos,,,w,h,AHK_ID %VimRN_ID%
	tooltip,%test%,0,%h%
	Settimer,,50
	Return
}
:
	Ifwinnotactive,AHK_ID %VimRN_ID%
	{
		SetTimer,, Off
		ToolTip
	}
return
; VimRN Function {{{3
;======================
; VimRN_SendKey(ThisKey) {{{4
VimRN_SendKey(ThisKey)
{
	If VimRN
	{
		VimRN_Count := VimRN_Count ? VimRN_Count : 1
		Loop % VimRN_Count	
		{
			Send %ThisKey%
		}
		VimRN_Count := 0
		ControlGetText,status,msctls_statusbar321,AHK_ID %VimRN_ID%
		status := SubStr(status,1,Strlen(status)-3) . "   "
		ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%
		Return True
	}
	Else
	{
		Send %A_ThisHotkey%
		Return False
	}
}
; VimRN_SendNum() {{{4
VimRN_SendNum()
{
	If A_ThisHotkey is integer
		ThisNum := A_ThisHotkey
	Else
		Return
	If VimRN
	{
		If VimRN_Count
			VimRN_Count := ThisNum + (VimRN_Count * 10 ) 
		Else
			VimRN_Count := ThisNum + 0
		if VimRN_Count > 256
			VimRN_Count := 256
		ControlGetText,status,msctls_statusbar321,AHK_ID %VimRN_ID%
		StringRight,isNumber,status,3
		If RegExMatch(isNumber,"sss")
			Status := RegExReplace(Status,"sss$") . VimRN_Count . "  "
		If RegExMatch(isNumber,"dss")
			Status := RegExReplace(Status,"dss$") . VimRN_Count  . " "
		If RegExMatch(isNumber,"dds")
			Status := RegExReplace(Status,"dds$") . VimRN_Count  
		If RegExMatch(isNumber,"ddd")
			Status := RegExReplace(Status,"ddd$") . VimRN_Count  
		ControlSetText,msctls_statusbar321,%status%,AHK_ID %VimRN_ID%	
		Return True
	}
	Else
	{
		Send %A_ThisHotkey%
		Return False
	}
}
; VimRN_Undo() {{{4
VimRN_Undo()
{
	DontSetText := False
	Serial := VimRN_History["s"]
	If  Serial > 0
		Serial--
	Else
		DontSetText := True
	Change := VimRN_History[Serial]
	Stringsplit,Pos,Change,`,
	If Not DontSetText
		ControlSetText,Edit1,%Pos3%,AHK_ID %VimRN_ID%
	VimRN_SetPos(Pos1,Pos2)
	VimRN_History["s"] := Serial
	VimRN_History["String"] := Pos3
}
; VimRN_Edit() {{{4
VimRN_Edit()
{
	Match := "^" . RegExReplace(VimRN_History["String"],"+|?|.|*|{|}|(|)|||^|$|[|]|\","$0") . "$"
	ControlGetText,Change,Edit1,AHK_ID %VimRN_ID%
	if Not RegExMatch(Change,Match)
	{
	Serial := VimRN_History["s"]
	Serial++
 	pos := VimRN_GetPos()	
	StartPos := pos[1]
	EndtPos  := pos[2]
	VimRN_History[Serial] :=  StartPos . "," . EndPos . "," .  Change
	VimRN_History["s"] := Serial
	VimRN_History["String"] := change
	If VimRN_IsReplace
	{
		VimRN_IsReplace := !VimRN_IsReplace
		VimRN := True
	}
	If VimRN_IsMultiReplace
	{
		Pos := VimRN_GetPos()
		If Pos[1] = Pos[2]
		{
			VimRN_SetPos(Pos[1],Pos[1]+1)
		}
	}
	}
}
; VimRN_Cut(Length) {{{4
VimRN_Cut(Length)
{
	Pos := VimRN_GetPos()
	ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
	If Pos[1] = Pos[2]
	{
		Pos1 := Pos[1] + 1 + Length
		Len  := 1
	}
	Else
	{
		Pos1 := Pos[1] + 1 
		Len := Pos[2] - Pos[1]
	}
	VimRN_Temp := SubStr(Text,Pos1,Len)
}
; VimRN_Paste(Direction="") {{{4
VimRN_Paste(Direction="")
{
	Pos := VimRN_GetPos()
	ControlGetText,Text,Edit1,AHK_ID %VimRN_ID%
	SetText := SubStr(Text,1,Pos[1]) . VimRN_Temp . SubStr(Text,Pos[1]+1)
	Pos1 := Pos[1] + Strlen(VimRN_Temp)
	ControlSetText,Edit1,%SetText%,AHK_ID %VimRN_ID%
	VimRN_SetPos(Pos1,Pos1)
	VimRN_Edit()
}
; VimRN_GetPos() {{{4
VimRN_GetPos()
{
	Pos := []
	ControlGet,Edit_ID,hwnd,,Edit1,AHK_ID %VimRN_ID%
	Varsetcapacity(StartPos,2)
	Varsetcapacity(EndPos,2)
	Sendmessage,0x00B0,&StartPos,&EndPos,,AHK_ID %Edit_ID%
	Pos[1] := NumGet(StartPos)
	Pos[2] := NumGet(EndPos)
	Return Pos
}
; VimRN_SetPos(Pos1,Pos2) {{{4
VimRN_SetPos(Pos1,Pos2)
{
	PostMessage,0x00B1,%Pos1%,%Pos2%,Edit1,AHK_ID %VimRN_ID%
}
;============================== 
; Functions {{{1
; SetDefaultKey() {{{2
; 设置VIATC的默认键
SetDefaultKey()
{

	Hotkey,Ifwinactive,ahk_class TQUICKSEARCH
	Hotkey,+j,
	Hotkey,+k,
	Hotkey,Ifwinactive,AHK_CLASS TTOTAL_CMD
	HotKey,1,,on,UseErrorLevel
	HotKey,2,,on,UseErrorLevel
	HotKey,3,,on,UseErrorLevel
	HotKey,4,,on,UseErrorLevel
	HotKey,5,,on,UseErrorLevel
	HotKey,6,,on,UseErrorLevel
	HotKey,7,,on,UseErrorLevel
	HotKey,8,,on,UseErrorLevel
	HotKey,9,,on,UseErrorLevel
	HotKey,0,,on,UseErrorLevel
	HotKey,j,,on,UseErrorLevel
	HotKey,k,,on,UseErrorLevel
	HotKey,h,,on,UseErrorLevel
	HotKey,l,,on,UseErrorLevel
	HotKey,+k,,on,UseErrorLevel
	HotKey,+j,,on,UseErrorLevel
	HotKey,+h,,on,UseErrorLevel
	HotKey,+l,,on,UseErrorLevel
	HotKey,d,,on,UseErrorLevel
	HotKey,+d,,on,UseErrorLevel
	Hotkey,.,,On,UseErrorLevel
	HotKey,e,,on,UseErrorLevel
	HotKey,+e,,on,UseErrorLevel
	HotKey,u,,on,UseErrorLevel
	HotKey,+u,,on,UseErrorLevel
	Hotkey,i,,on,UseErrorLevel
	Hotkey,x,,On,UseErrorLevel
	Hotkey,+x,,On,UseErrorLevel
	HotKey,o,,on,UseErrorLevel
	HotKey,+o,,on,UseErrorLevel
	HotKey,q,,on,UseErrorLevel
	HotKey,p,,on,UseErrorLevel
	HotKey,+p,,on,UseErrorLevel
	HotKey,t,,on,UseErrorLevel
	HotKey,+t,,on,UseErrorLevel
	;Hotkey,r,,on,UseErrorLevel
	Hotkey,r,,on,UseErrorLevel
	Hotkey,+r,,on,UseErrorLevel
	Hotkey,f,,On,UseErrorLevel
	Hotkey,+f,,On,UseErrorLevel
	Hotkey,b,,On,UseErrorLevel
	Hotkey,+b,,On,UseErrorLevel
	Hotkey,y,,On,UseErrorLevel
	Hotkey,+y,,On,UseErrorLevel
	Hotkey,/,,On,UseErrorLevel
	Hotkey,+/,,On,UseErrorLevel
	Hotkey,`;,,On,UseErrorLevel
	Hotkey,:,,On,UseErrorLevel
	Hotkey,[,,On,UseErrorLevel
	Hotkey,+[,,On,UseErrorLevel
	Hotkey,],,On,UseErrorLevel
	Hotkey,+],,On,UseErrorLevel
	Hotkey,,,On,UseErrorLevel
	Hotkey,+,,On,UseErrorLevel
	Hotkey,=,,On,UseErrorLevel
	Hotkey,-,,On,UseErrorLevelHotkey,,,On,UseErrorLevel
	Hotkey,v,,On,UseErrorLevel
	HotKey,a,,on,UseErrorLevel
	Hotkey,m,,On,UseErrorLevel
	Hotkey,+m,,On,UseErrorLevel
	Hotkey,',,On,UseErrorLevel
	HotKey,+q,,on,UseErrorLevel
	Hotkey,+g,,On,UseErrorLevel
	Hotkey,w,,On,UseErrorLevel
	Hotkey,n,,On,UseErrorLevel
	Hotkey,+n,,On,UseErrorLevel
	Hotkey,`,,,On,UseErrorLevel
	Hotkey,$Enter,,On,UseErrorLevel
	Hotkey,Esc,,On,UseErrorLevel
	HotKey,+a,,on,UseErrorLevel
	Hotkey,+.,,On,UseErrorLevel
	Hotkey,+w,,On,UseErrorLevel
	Hotkey,+s,,On,UseErrorLevel
	Hotkey,+',,On,UseErrorLevel
	;Groupkey 定义
	; 实用工具热键
	GroupKeyAdd("zz","")
	;GroupKeyAdd("zx","")
	GroupKeyAdd("zi","

给TA捐赠
共{{data.count}}人
人已捐赠
其他

url编码_GUI

2020-3-12 21:13:41

其他案例

viatc-wjt

2020-3-13 2:19:17

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索