AutoHotkey: From FileSync open another TC instance with selected files

From TotalcmdWiki
Revision as of 18:29, 24 July 2008 by Icfu (talk | contribs) (minor bugfix)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
		; ////////////////////////////////////////////////////////////////////////////
		; // TC_Sync_OpenFolderInSecondTC.ahk  V0.13  (W) StatusQuo 2008
		; // http://ghisler.ch/board/viewtopic.php?t=19713
		; // 
		; // open another TC instance
		; // with the folders of the currently selected file in cm_FileSync
		; // via hotkey: Ctrl+Win+T
		; ////////////////////////////////////////////////////////////////////////////

#SingleInstance, Force
Return

#IfWinActive, ahk_class TCmpForm
; F4::
^#t::	; hotkey =  Ctrl+Win+T
		; please adjust path here; %COMMANDER_PATH% is not available outside of TC
	sTCExe := "C:\totalcmd\TOTALCMD.EXE"
	boAlwaysOpenNewTask := 0	; set to 1 to not re-use TC target window (always open a new one)
	boCdToFolderOnly    := 0	; set to 1 to just cd to dirs (does not use Lister to select file)
	iListerTimeOutSecs  := 1	; if using Lister: timeout after n seconds of not appearing Lister
	; static pidTC2
	;
	LB_GETCARETINDEX := 0x019F
	LB_GETTEXT := 0x0189
	ControlGetFocus, Panel_id
	SendMessage, %LB_GETCARETINDEX%, 0, 0, %Panel_id%
	LB_CursorPosition := ErrorLevel
	VarSetCapacity(LB_String, 1024, 0)
	SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
	LB_CursorLine := LB_String
	Loop	; find subdirectory
	{
		If (SubStr(LB_String, StrLen(LB_String)) = "\")
		or (LB_CursorPosition < 1)
			Break
		LB_CursorPosition -= 1
		SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
	}
	LB_SubDir := LB_String
	ControlGetText, sLPath, TEdit2, ahk_class TCmpForm
	ControlGetText, sRPath, TEdit1, ahk_class TCmpForm
	;
	sLDirName := ""	; get left path name
	if (not boCdToFolderOnly)
	and (SubStr(LB_CursorLine, StrLen(LB_CursorLine), 1) != "\")
	{
		Send, {F3}
		sLDirName := GetActiveTCListerPath()
	}
	If (sLDirName = "")
		sLDirName := sLPath . LB_SubDir
	;
	sRDirName := ""
	if (not boCdToFolderOnly)
	and (SubStr(LB_CursorLine, StrLen(LB_CursorLine), 1) != "\")
	{
		Send, +{F3}
		sRDirName := GetActiveTCListerPath()
	}
	If (sRDirName = "")
		sRDirName := sRPath . LB_SubDir
	;
	If boAlwaysOpenNewTask
	or (not WinExist("ahk_pid " . pidTC2))
		pidTC2 := ""
	if not (pidTC2 = "")
	{
		WinActivate, ahk_pid %pidTC2%
		sTCExe = %sTCExe% /O
	}
	;
	sRunStr := sTCExe
	if (sLDirName != "")
		sRunStr = %sRunStr% /L="%sLDirName%"
	if (sRDirName != "")
		sRunStr = %sRunStr% /R="%sRDirName%"
	if (sRunStr = sTCExe)
		Return
	if (pidTC2 = "")
		Run, %sRunStr%,,, pidTC2
	else
		Run, %sRunStr%
	;
	Return

#IfWinActive

GetActiveTCListerPath()
{
	global boCdToFolderOnly, iListerTimeOutSecs
	WinWaitNotActive, ahk_class TCmpForm,, %iListerTimeOutSecs%	; wait for starting lister, timeout in seconds
	IfWinActive, ahk_class TCmpForm	; Lister hasn't started - no file on this panel side?
		Return
	SetTitleMatchMode, 1
	IfWinActive, Lister
	{
		WinGetActiveTitle, sWinTitle
		WinClose, %sWinTitle%
	}
	iNamePos := (InStr(sWinTitle, "[", false, 0) + 1)
	If (boCdToFolderOnly)	; folder only
		Return, % SubStr(sWinTitle, iNamePos, (InStr(sWinTitle, "\", false, 0) + 1) - iNamePos)
	else	; folder + file name
		Return, % SubStr(sWinTitle, iNamePos, StrLen(sWinTitle) - iNamePos)
}

;

Back to AutoHotkey