如何藉助Autohotkey使total commander在單雙窗口間切換?

文件名挺長的,這樣總是顯示不全各列。有時候想一鍵將TC切到單窗口,就像用滑鼠把它拖成單窗口一樣,我能想到的是先判斷窗口存在,然後最大化,再往後應該是找到左右分隔那個線,這裡不知怎麼檢測了


問對人了,我也一直用 Total Commander。

F1::
Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD
Return

F2::
Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD
Return

簡單說明:

這裡 1075 是 TC 定義的消息號,那麼 909、910 哪裡來的?

;TC 目錄中的 TOTALCMD.INC 文件

cm_50Percent=909;Window separator at 50%

cm_100Percent=910;Window separator at 100%

此外,先判斷當前是一個文件列表還是兩個,直接用一個熱鍵執行。

多關注我的專欄(對自己有用的內容點個贊,我才知道我寫的是否有人需要,能花點時間評論就更好了),這樣我在專欄發內容時可以有所選擇。


胡楊的太簡單,yahuu D的又太複雜,

綜合他們兩個的:

我一直在用的,目前沒出啥問題,可以一鍵切換

代碼如下:

;獲取分割欄的位置 當x&<5是,基本可以確定是處於縱向狀態

ControlGetPos,sp_x,sp_y,,,TPanel1

PostMessage 1075,305,0,,ahk_class TTOTAL_CMD

if sp_x&<10

PostMessage 1075,909,0,,ahk_class TTOTAL_CMD

else

PostMessage 1075,910,0,,ahk_class TTOTAL_CMD


怎麼搞得這麼複雜,tc不是有一個命令就是100%窗口顯示和50%窗口顯示嗎?分別設置一個快捷鍵不就完事了?還搞什麼ahk,寫代碼,感覺好累啊。

cm_50Percent 雙窗口模式命令

cm_100Percent 單窗口模式命令


2014-11-30優化:之前縱向的時候切換到100%,列寬沒有變化,導致文件名還是不能看全。

現在如果縱向時,先切為100%然後再變為橫向,(所以100%都是橫向)因為TC默認的橫向會自動調整列寬、日期和屬性自動靠右。

切50%時判斷是否由縱向切換而來,然後根據原狀態恢復。

ttt.txt你可以設置到wincmd.ini,自己修改吧,我是直接集成到vimdesktop了。

F11::

ControlGetPos, , , wp,hp, TPanel1, ahk_class TTOTAL_CMD

ControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMD

ControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMD

if ( wp &< hp) ;縱向

{

if ( w1 &<= 5 or w2 &<= 5 )

PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD

else

{

IniWrite,1,d: tt.ini,vimd,IsVertical

;如果兩個順序反的,右欄切100%時會有閃動的感覺

PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD

PostMessage 1075, 305, 0, , AHK_CLASS TTOTAL_CMD

}

}

else ;橫向

{

if ( h1 = 0 or h2 = 0 )

{

IniRead,Vertical,d: tt.ini,vimd,IsVertical

if ( Vertical = 1 ) ;橫向時判斷IsVertical,如果為1的話切回縱向、重置變數,再變為50%

{

PostMessage 1075, 305, 0, , AHK_CLASS TTOTAL_CMD

IniWrite,0,d: tt.ini,vimd,IsVertical

}

PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD

}

else

PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD

}

==========================================================

2014-11-27:添加了橫向和縱向的判斷

F11::

ControlGetPos, , , wp,hp, TPanel1, ahk_class TTOTAL_CMD

ControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMD

ControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMD

if ( wp &< hp) ;縱向

{

if ( w1 &<= 5 or w2 &<= 5 )

PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD

else

PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD

}

else ;橫向

{

if ( h1 = 0 or h2 = 0 )

PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD

else

PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD

}

這個寬度5是我使用910命令後獲取的,在我這裡沒問題。思路是這樣沒錯


;F11單鍵切換「單窗口最大化且列寬自適應」or「縱向平分雙窗口」

#SingleInstance force ;多次運行本AHK時,強制採用新版本

Menu, Tray, Icon, TCPanelSwitch.ico ;自定義不同的圖標

#IfWinActive, ahk_class TTOTAL_CMD ;僅在TC中有效,不影響其他程序

F11::

IfWinActive, ahk_exe TOTALCMD.EXE ;適應TC32位窗口及分隔條的名稱

{

;獲取雙窗口分隔條的寬高

ControlGetPos, , , wp, hp, TPanel1, ahk_class TTOTAL_CMD

;獲取窗口1的寬高

ControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMD

;獲取窗口2的寬高

ControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMD

;獲取窗口3的寬高, 適應使用FTP時窗口1變更為窗口3

ControlGetPos, , , w3, h3, TMyListBox3, ahk_class TTOTAL_CMD

if ( w3 or h3)

{

w1 := w3

h1 := h3

}

}

IfWinActive, ahk_exe TOTALCMD64.EXE ;適應TC64位窗口及分隔條的名稱

{

ControlGetPos, , , wp, hp, window1, ahk_class TTOTAL_CMD

ControlGetPos, , , w1, h1, LCLListBox1, ahk_class TTOTAL_CMD

ControlGetPos, , , w2, h2, LCLListBox2, ahk_class TTOTAL_CMD

ControlGetPos, , , w3, h3, LCLListBox3, ahk_class TTOTAL_CMD

if ( w3 or h3)

{

w1 := w3

h1 := h3

}

}

if ( wp &< hp) ;分隔條的寬度小於高度,為縱向

{

if ( w1 &<= 5 or w2 &<= 5 ) ;切換至「縱向平分雙窗口」

Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD

else ;切換至「單窗口最大化且列寬自適應」

{

Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD

PostMessage, 1075, 305, 0,, ahk_class TTOTAL_CMD

}

}

else ;分隔條的寬度大於高度,為橫向

{

if ( h1 = 0 or h2 = 0 ) ;切換至「縱向平分雙窗口」

{

Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD

PostMessage, 1075, 305, 0,, ahk_class TTOTAL_CMD

}

else ;切換至「單窗口最大化且列寬自適應」

Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD

}

return

#IfWinActive


歪個題,不用AHK實現,通過TC的插件來實現

先佔坑,稍後編輯

========2016.3.17更新的分割線========

貴乎辣雞排版,連MarkDown都不支持,浪費我一個小時都排不好

還是去看簡書上的吧:TC長文件名視圖F11快速切換

  • 必備TC插件
  1. Autorun Autorun 2.0.1 http://www.totalcmd.net/plugring/autorun.html
  2. TCFS2 TCFS2 2.2.1.476 、TCFS2Tools TCFS2Tools 1.4.4.214

  • 安裝插件
    1. Autorun:可直接安裝,在zip包上回車即可,之後按如下設置:
      1. rename autorun.example.cfg file into autorun.cfg ( in %Commander_path%WDXAutorun)
      2. in order to load plugin at Total Commander start, you should create the fictitious color scheme:
        1. On the "Color" page press "Define colors by file type..." button.
        2. In the "Define colors by file type" dialog set cursor in any place in the list, and press "Add..." button.
        3. Press "Define..." button.
        4. In the "Define selection" dialog move to "Plugins" tab.
        5. Select in "Plugin" dropdown list "autorun".
        6. Select in "Property" dropdown list "Autorun" (there will not be more properties).
        7. Select in "OP" dropdown list "=" and set in following field any integer, for example 1.
        8. Press "Save" button, give the template some name , for example "Autorun".
        9. Next, repeatedly press OK button in all dialogs until options dialog will be closed.
    2. TCFS2以及TCFS2Tools需要分開安裝:
      1. 解壓TCFS2.exe、TCFS2.ini,保存在同一目錄下。比如:%Commander_path%ToolsTCFS2
      2. 將TCFS2Tools.dll置於Autorun插件目錄下的plugins中,在autorun.cfg中添加如下欄位:

        LoadLibrary PluginsTCFS2Tools.dll

  • 具體設置
    1. 在Configuration--&>Display--&>Tabstops下,勾選Adjust Tabs to window width
    2. 配置文件TCFS2.ini中,分別在[Items],[Macros],[Actions]這三欄位中添加如下指令:

      [Items]
      vt0=tcm(305)
      sp_sw_50_100=run_item(sp_set_active, sepPos == 50 ? 100 : 50)
      lv2=set_tcini(TCFS2, LV2_Running, 1) run_action(lv) set_tcini(TCFS2, LV2_Running, 0), tcini(TCFS2, LV2_Running, 0)
      lv=set_tcini(TCFS2, sFNV, 0) run_action(longview), test(shortFileNameView) | set_tcini(TCFS2, sFNV, 1) run_action(longview_undo)
      [Macros]
      shortFileNameView=tcini(TCFS2, sFNV, 1)
      [Actions]
      longview=sp_sw_50_100 vt0
      longview_undo=vt0 sp_sw_50_100
      lv=lv
      lv2=lv2

    3. 配置文件usercmd.ini中添加

      [em_TCFS_longview]
      cmd=TCFS2 lv2
      path=%Commander_path%ToolsTCFS2

    4. 配置文件wincmd.ini添加

      [TCFS2]
      sFNV=1
      LV2_Running=0

    5. 在Configuration--&>Misc.下,綁定命令em_TCFS_longview到熱鍵F11上

    over.


    推薦閱讀:

    TAG:AutoHotkey | TotalCommander |