AutoHotkey: With Alt - \ always to root

From TotalcmdWiki
Revision as of 10:50, 21 April 2009 by ND (talk | contribs) (updated ND variant for TC 7.5 (unicode panels))
Jump to navigation Jump to search

If you are working with 'softlocked' Tabs (locked but dir change allowed) it's most time useful to change with [Ctrl]+[\] to the root of the locked Tab instead root of the drive. You can achieve this with the key LockedGoToDriveRoot=0 in the wincmd.ini.


However, sometimes it is useful to go instead to the root of the drive. That's what this script is for:


;Alt \ leads to root of drive
!\::
IfWinActive ahk_class TTOTAL_CMD
    {
; activate the command line
    PostMessage, 1075, 4003, , , ahk_class TTOTAL_CMD
; type cd \
    sendraw, cd \
;   send it
    send, {ENTER}
    }
return


Here's a variant by ND, which ensures that the script is only launched when one of the TC panels is active and which leaves the command-line history unmodified (tested in TC 5.50 and TC 7.01 on WinXP SP2, and TC 7.5 on WinXP SP3)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;! \brief  pressing Alt+\\ should land in drive root rather than tab root
;
;  Assumes that the panel title-paths are accessible (TMyPanel5/TMyPanel9)
;
;  Computes the number of different parts separated by \\,
;  then goes-up the appropriate number of parent dirs (cm_GoToParent)
;
#IfWinActive, ahk_class TTOTAL_CMD
~!\::
  ; only when the actual TC panels are active
  ControlGetFocus, tcFocus
  If(  RegExMatch( tcFocus, "^TMyListBox1$" )  )
    tcPath = TMyPanel9
  Else
  If(  RegExMatch( tcFocus, "^TMyListBox2$" )  )
    tcPath = TMyPanel5
  Else
  If(  RegExMatch( tcFocus, "^TMyListBox\.UnicodeClass2$" )  )  ; new in TC 7.5
    tcPath = TPathPanel.UnicodeClass1
  Else
  If(  RegExMatch( tcFocus, "^TMyListBox\.UnicodeClass1$" )  )
    tcPath = TPathPanel.UnicodeClass2
  Else
    Return

  ControlGetText,  tcStatus,  %tcPath%
  RegExReplace(  tcStatus,  "[^\\>]+",  "$1",  tcBack  )

  tcBack--  ; minus the drive root itself
  If(  RegExMatch( tcStatus, "^.\\[^\\]" )  )
    tcBack--  ; minus the server root for network drives

  If(  tcBack > 0  )
    Loop, %tcBack%
      PostMessage, 1075, 2002  ; cm_GoToParent
Return



Back to AutoHotkey