在以前的文章中,介紹了我在GNU/Linux圖形界面環境下所使用的工具集合。其基本目的是在保證佔用最少系統資源的條件下,將電腦操做效率推向極致。這樣的工具組合尤如瑞士軍刀通常,簡潔、高效、功能全面。與之對應,在Windows系統下,該如何實現相似的操做習慣呢?如GNU/Linux命令行工具與圖形界面軟件,相似於Sawfish窗口管理器的功能,以及多桌面。本文將介紹我本身的解決方案。html
首先,爲了可以享用GNU/Linux系統下命令行工具帶來的種種便利與高效,我在Windows下安裝了Cygwin。Cygwin是一個在windows平臺上運行的類UNIX模擬環境,是Cygnus Solutions公司開發的自由軟件。Cygwin 提供一個UNIX模擬DLL以及在其上層構建的多種能夠在 Linux 系統中找到的軟件包,在Windows XP SP3以上的版本提供良好的支持。在Cygwin老的版本中,終端程序基於的是Windows的cmd.exe,沒法對其進行字體、顏色風格等的設置。目前Cygwin提供的mintty終端程序則能夠進行很好的個性化定置,尤爲是能夠配置成Solarized色彩風格,具備必定的視力保護功能。這一配置能夠在這裏下載到。其以bash腳本的形式提供了明色調與暗色調兩種風格。只要將風格設置腳本加入到~/.bashrc中便可:前端
source ~/%your directory%/sol.light
or
source ~/%your directory%/sol.dark
接下來,須要說明Cygwin的使用方式。除了GNU/Linux的命令行工具外,Cygwin提供了至關豐富的X視窗圖形界面程序,如Emacs、Octave。並且,相對於Cygwin多年之前的老版本,這些圖形界面程序的穩定性已經有了很大的提升,徹底能夠將它們做爲平常必備的軟件。而回想數年以前,本身須要分別獨立安裝專爲Windows編譯的Emacs、Octave、Gnuplot、Maxima、Texlive等工具,它們之間的相互協做老是存在必定的問題。而如今,全部這些軟件能夠在統一的Cygwin/X環境下運行,路徑名、文件名也都符合GNU/Linux習慣,因此使用起來和在原生的GNU/Linux下是同樣的。爲了使用這些圖形界面軟件,我將Cygwin在Windows下的X視窗服務器XWin做爲Windows系統的自動加載項,在登陸後便會自動啓動。啓動項的建立能夠有兩種方式。一是運行startxwin命令:git
C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; startxwin"
該方式的好處是在X server啓動時,會自動運行~/.xinitrc中的內容。這樣,就能夠自動啓動諸如mintty、Emacs這些經常使用的軟件。不過,該方法目前沒法成功啓動X server。因此須要採用第二種方式,即運行xwin命令:github
C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; xwin -multiwindow -clipboard"
該方法不去讀~/.xinitrc文件,只能在~/.XWinrc中設置系統托盤圖標的右鍵菜單項。於是,沒法設置隨X server一塊兒啓動的程序。windows
有了Cygwin帶來的GNU/Linux下的諸多命令行工具和圖形界面軟件,那麼如何像在真正的GNU/Linux環境下實現相似於Sawfish窗口管理器所擁有的功能呢?例如:瀏覽器
幸虧有Autohotkey這個軟件,上述Sawfish所擁有的功能均可以用其來模擬。經過配置,我實現的功能有:bash
以上配置的腳本以下:服務器
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. ; swap caps lock and left control #IfWinActive +Capslock::Capslock Capslock::Control SetTitleMatchMode 2 ; Cygwin mintty terminal #1:: IfWinExist ahk_class mintty { WinActivate } else { Run C:\cygwin\bin\mintty.exe WinWait ahk_class mintty WinActivate } return ; Total commander #2:: IfWinExist Total Commander 7.56a { WinActivate } else { Run C:\totalcmd\TOTALCMD.EXE WinWait Total Commander 7.50a WinActivate } return ; Emacs #3:: IfWinExist Emacs@ { WinActivate } return ; Stardict #4:: IfWinExist 星際譯王 { WinActivate } else { Run, C:\Program Files (x86)\StarDict\stardict.exe, C:\Program Files (x86)\Common Files\GTK\2.0\bin WinWait StarDict WinActivate } return ; Firefox #5:: IfWinExist ahk_class MozillaWindowClass { WinActivate } else { Run C:\Program Files (x86)\Mozilla Firefox\firefox.exe WinWait ahk_class MozillaWindowClass WinActivate } return ; maximize window #m:: WinMaximize, A Return ; minimize windows #i:: WinMinimize, A Return ; restore window #r:: WinRestore, A Return ; move window left ^!j:: WinGetPos, X, Y, , , A WinMove, A, , X-10, Y Return ; move window right ^!l:: WinGetPos, X, Y, , , A WinMove, A, , X+10, Y Return ; move window up ^!i:: WinGetPos, X, Y, , , A WinMove, A, , X, Y-10 Return ; move window down ^!k:: WinGetPos, X, Y, , , A WinMove, A, , X, Y+10 Return ; move window left most #Left:: WinGetPos, X, Y, W, H, A ; WinMove, A, , 72, Y WinMove, A, , 0, Y Return ; move window right most #Right:: WinGetPos, X, Y, W, H, A WinMove, A, , A_ScreenWidth - W, Y Return ; move window top most #Up:: WinGetPos, X, Y, W, H, A WinMove, A, , X, 0 Return ; move window down most #Down:: WinGetPos, X, Y, W, H, A WinMove, A, , X, A_ScreenHeight - H - 40 Return ; center window #c:: WinGetPos, X, Y, W, H, A ; WinMove, A, , (A_ScreenWidth - 72)/2 - W/2 + 72, A_ScreenHeight/2 - H/2 WinMove, A, , A_ScreenWidth/2 - W/2, (A_ScreenHeight - 40)/2 - H/2 + 40 Return ; increase window width #=:: WinGetPos, X, Y, W, H, A WinMove, A, , , , W+10, H Return ; decrease window width #-:: WinGetPos, X, Y, W, H, A WinMove, A, , , , W-10, H Return ; increase window height #+=:: WinGetPos, X, Y, W, H, A WinMove, A, , , , W, H+10 Return ; decrease window height #+-:: WinGetPos, X, Y, W, H, A WinMove, A, , , , W, H-10 Return ; expand window horizontally #+h:: WinGetPos, X, Y, W, H, A ; WinMove, A, , 72, Y, A_ScreenWidth - 72, H WinMove, A, , 0, Y, A_ScreenWidth, H Return ; expand window vertically #+v:: WinGetPos, X, Y, W, H, A ; WinMove, A, , X, 0, W, A_ScreenHeight WinMove, A, , X, 0, W, A_ScreenHeight - 40 Return ; toggle window on top #t:: WinSet,AlwaysOnTop,Toggle,A Return ; close window #k:: WinClose, A Return ; get window class #?:: WinGetClass, win_cls, A MsgBox, %win_cls%
最後,想要在Windows下實現多個桌面,則直接安裝VirtualWin軟件便可。工具