一篇不錯的fvwm入門教程.
阿新 • • 發佈:2019-01-25
原文出處:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/fvwm.html
FVWM 的旅程
先去看看王垠寫的 Fvwm簡明使用手冊 ,然後到 FVWM 看看 screenshots ,最好挑一個自己喜歡的下手(我覺得還是不要自己完全重來,別人的程式碼裡面有許多精彩的東西)。我把自己用到的幾個東西寫下來:
topTheme
你可以到 FVWM Themes Project 去下載一個省事的,不用配置就可以得到非常棒的桌面環境。個人配置最好整合在 ~/.fvwm/themes/personal 裡面,所有相關的配置可以參看其說明文件,最好以 FILE-extra 來命名。比如要定義自己的啟動函式,在 ~/.fvwm/themes/personal/ 建立 startup 檔案(fvwm-themes本身沒有定義啟動函式,所以不用加extra),裡面就可以定義 AddToFunc StartFunction ... ;要定義自己的樣式風格則建立 styles 和 menustyle-extra ,裡面就隨自己的喜好了;要定義自己的快捷鍵繫結則建立 bindings-extra ,定義自己的函式則建立 functions-appbind-extra ,以及自己的選單 menus-programs-extra 。把 ~/.xsession 或 ~/.xinitr 中的 fvwm2 改成 fvwm-themes-start 即可,選擇某種樣式後,再從 Personal 列表裡選擇需要應用的樣式或者快捷鍵等。那麼這次的配置就被記錄下來,下次啟動就自然恢復到這樣的配置了。剛剛接觸FVWM的時候,fvwm-themes還是非常順手貼心的,如果想完全定製自己的工作環境,就需要繼續深入FVWM。這裡是兩張我比較喜歡的截圖:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/fvwmthemes1.png
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/fvwmthemes2.png
另外一個比較不錯的個人網頁是 Fvwm Theme ,作者寫了個非常好的perl script,你可以進去看看,把裡面的路徑改成適合你自己環境的,並按照它說的方法修改.fvwm2rc。這裡我遇到一個問題,就是 Piperead '~/scripts/fvwm-theme -init' 中script的路徑必須寫全,Fvwm似乎不能利用 $PATH ,所以為了讓script工作,fvwm-theme原始檔中的路徑也需要修改。這時就可以通過 fvwm-theme 命令方便的更改主題,背景等等。如果想要更方便一點,在你需要的選單里加一項:
+ "Themes" Popup ThemesMenu
fvwm-theme會記住當前的theme,並在下次啟動的時候直接啟動這個。其實很簡單,作者就是寫了一個 ~/.fvwm-theme 檔案,裡面記錄著theme的名字,下次啟動時,-init引數就要讀取這個檔案,然後動態生成一些style。
網上還有一個不錯的fvwm-decors配置( http://www.twobarleycorns.net/fvwm-decors.html ),作者通過 menuB3.fvwm 來完成Decor的動態切換。裡面的一個關鍵函式是 SwitchDecor ,其作用就是先把當前的Modules都Kill掉,然後Read新的Decor配置,最後重新載入各個Modules。每個decor的配置檔案都通過
AddToDecor 定義了一個Decor,最後通過 Style * UseDecor DecorName 將新的樣式應用到全域性。實際上我們使用的時候,沒有必要將所有的Modules都Kill,只要更改樣式就可以了。
fvwm-theme做得非常精緻,而fvwm-decors裡面有個非常不錯的Mac模擬,所以我想將二者結合起來一起用,但多次試驗之後發現簡單的合在一起問題多多:要麼樣式不變,要麼是隻變一部分,要麼就是亂七八糟。找來找去也沒有找到問題究竟出在那裡,所以只好準備修改程式。
fvwm-theme中作者沒有定義Decor,只是把ButtonStyle,TitleStyle羅列出來。而fvwm-decors給人感覺比較模組化,所以第一步就動手改造fvwm-theme的perl指令碼,對原來的命令用 AddToDecor 進行包裝,取名與資料夾相同1。此外,還需要對每種樣式的decor描述檔案進行一點改動(樣式行前加加 + ,合併到到 AddToDecor , 並在檔案最後新增 Style * DecorName 一行):這些操作可以sed通過一個簡單的指令碼順利完成。這樣修改以後二者就能一起用了,而且你還可以隨便新增新的Decor。
上面兩個小工具主要是更改Decor樣式,其中fvwm-themes也可以更改桌面。另外還有一個也不錯的選擇桌面的perl指令碼fvwm-wallpaper。使用比較簡單隻需要針對存放wallpaper的資料夾執行這個指令碼,它會生成 $HOME/.fvwm-wallpaper 這麼一個資料夾。這個資料夾裡面有一個 menu 檔案,需要被Read到你的.fvwm2rc中以便選擇桌面。另一個是 thumbnail 資料夾,裡面都是被convert(別忘了安裝ImageMagick)過來的縮小版wallpaper。這個指令碼方便的地方是在更改桌面的時候可以看到縮圖,不好的地方是如果你有成千上百張桌面,它就會生成同樣數目的縮圖,而且新新增圖片以後必須重來一次才能看見:這個convert的過程會非常漫長。而且它不支援巢狀資料夾,水都不希望自己的wallpaper裡面一團糟,分類是必須的。基於這兩點不爽的地方我就不再用它了!如果你的圖片比較少,完全可以試一試,感覺還是挺刺激的!不要忘了修改裡面的設定背景的命令,最好用 fvwm-root。 這樣可以保證你的透明效果正常。
topIconify圖示
有些程式自己提供了Iconify的圖示,如果要自己指定需要使用 IconOverride 引數,比如替換firefox的預設地球儀可以用:
Style "Firefox-bin" Icon myfirefox.png, IconOverride
另外,諸如firefox之類的很多程式在指定style的時候不能憑自己的猜測用firefox或firefox-bin,最保險的就是用: xprop ¦ grep CLASS 然後點選標題欄,就可以得到標準的CLASS名稱,這也就是為什麼上面用Firefox-bin。
top透明
如果在Windows上看到一個透明的term那才叫實實在在的驚訝,對於UNIX家族而言,絕大多數WM都可以輕鬆實現透明效果。對於FVWM自然容易的很,兩步走:(1)在使用的 Colorset 裡面加上 RootTransparent Buffer ;(2)背景設定使用 fvwm-root 或 wmsetbg ,就是不能用 xsetroot 。更詳細的資訊請參看:Using Transparency。 此外, term想要支援透明,必須以-tr引數啟動! 看看我的一個截圖
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/trans2.png
topAutohide
自動隱藏可以很方便的節省桌面空間,我把常用的工具放到一個Autohide的Button裡面,讓它掛在右上角,滑鼠移過去的時候自動顯示,移走的時候自動隱藏。這個功能也很簡單,看一下 http://www.fvwm.org/documentation/faq/#7.17 。後來我發現桌面上還是什麼都沒有的好,所以索性這個懸掛按鈕也不要了,改成了一個自動隱藏的Pager,這樣清新爽利,滑鼠往右上角一挪,Pager就出來露個臉,滑鼠拿走,Pager又縮回頭去:自動隱藏方便不少。
topDocApp
本來是 Windows Maker 的特色,但FVWM可以天衣無縫的把它們給融合進來。FvwmButtons可以配置為“吸收”某類程式,比如:
*FvwmButtons: (Size 11x5, Swallow wmcpuload, '')
就可以把名為 wmcpuload 的程式吸收過來,就是說當你啟動 wmcpuload 後,它的介面會顯示在這個FvwmButtons上面。這樣的話你可以通過操作FvwmButtons來操作這個docapp,就像裝了個框,當然這個框也可以被你配置的不存在。如果想一啟動就讓這個docapp執行,那麼可以這樣:
*FvwmButtons: (Size 11x5, Swallow wmcpuload, 'Exec exec wmcpuload -bw -bl -lc rgb:ee/82/ee')
這些小玩意兒特別有意思,尤其是剛剛接觸,視覺效果非常棒。我曾經在桌面上放了十幾個這樣的東西,就像看Matrix一樣,動靜皆有,色彩絢爛,賞心悅目,是美觀和便利的完美結合。可以到 http://www.bensinclair.com/dockapp/ 看看這個 http://www.dockapps.org 。基本上每個工具都配有一個-config工具,比如wmmaiload對應的配置工具是wmmaiload-config,簡單好用。
top字型設定
FVWM 可以為英文和中文指定不同的字型,比如英文使用verdana,而漢語使用simsun字型。
MenuStyle * Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-14-*-*-*-*-*-*-*"
top字型太小
有些gtk程式在fvwm下面選單欄上的字型可能比較小,那麼在~/.gtkrc-2.0裡面寫這樣一句:
gtk-font-name = "SimSun 12"
當然前題是系統上裝好了sim字型(一般都沒有問題,預設已經安裝了),否則的話可以換一個xlsfonts中有的。
另外還可能遇到的一個問題就是openoffice選單欄的字型不能正常顯示或者太小,這個在 FAQ中有解決,就是在 工具->選項->OpenOffice.org->字型 中將 使用字型替換 打勾,然後在下面左邊的框裡填 Andale Sans UI ,右邊的框裡找一個系統有的字型,然後確定。如果這時字型還顯小,那就在 檢視 中將 顯示比例 調大一些,如下圖:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/ooffice.png
另外一種解決openoffice字型小的辦法就是啟動 gnome-settings-daemon 。
top如何使用Windows鍵
如果你習慣左手使用滑鼠(比如我),FVWM怎樣配置呢?如果你希望使用Windows特有的那幾個鍵,FVWM怎樣配置呢?實際上這些工作都由xmodmap完成,它的功能就是完成鍵盤的物理鍵對映到計算機內部的邏輯鍵,也就是說,如果你願意,可以將A對映成B,每當你按下A的時候,計算機就當B處理(估計愛因斯坦也不會這麼折騰自己)。xmodmap完成鍵對映的命令格式是: xmodmap -e "keycode NUMBER = KEYNAME" 。其中 keycode 是關鍵字, NUMBER 是鍵的編號,也即物理名稱, KEYNAME 是邏輯名稱,即計算機內部把序號為 NUMBER 的鍵當 KEYNAME 處理(具體可以參考man xmodmap)。
下一步就是獲得鍵的編碼和名字了,這可以通過 xev 來完成。在 xev 的那個小視窗上按鍵然後觀察提示資訊,可以很方便的找到 keycode NUMBER 和 KEYNAME 。比如在我的系統上按下左邊的Windows鍵螢幕顯示:
KeyRelease event, serial 30, synthetic NO, window 0x2000001,
root 0x8d, subw 0x0, time 4314898, (40,69), root:(885,658),
state 0x50, keycode 115 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes: ""
對於pc104鍵盤而言,Windows特有的那些鍵一般對應於: keycode keyname
Windows Left Super_L, Hyper_L
Windows Right Super_R, Hyper_R
Windows Menu Menu
要在FVWM裡面用這些鍵,最好把它們當成跟C,M,S一樣的Modifier。這可以通過下面這一段完成:
xmodmap -e 'keycode 115 = Super_L' # Left windows key
xmodmap -e 'keycode 116 = Super_R' # Right windows key
xmodmap -e 'keycode 117 = Menu' # Windows menu key
xmodmap -e 'add Mod3 = Super_L' # Make left windows key a modifier
xmodmap -e 'add Mod4 = Super_R' # Make right windows key a modifier
上面的keycode是十進位制的,也可以使用十六進位制寫法,比如 xmodmap -e 'keycode 0x73 = Super_L' 。為了啟動時自動載入,你可以把這些配置寫到 ~/.xinitrc 或 ~/.xsession 中(具體看系統啟動時用哪個);也可以把它寫到 ~/.Xmodmap ,因為在啟動X的指令碼 /etc/X11/xinit/xinitrc 裡已經包含了 xmodmap ~/.Xmodmap (可能不同的系統不一樣,我的Debian中就沒有這條命令,所以如果沒有生效就自己改一改)。xmodmap是跟X相關的,所以如果你不啟動X,這些配置有可能不管用,所以不要對把它們寫到 ~/.bashrc 裡寄予太大的希望(或者你可以看看關於dumpkeys和loadkeys的內容,我不是很瞭解)。
這時就可以在FVWM中把這些鍵當作普通的Modifier來用了,跟C,M,S對應,它們的表示是3或者4。比如上邊定義了Mod3為Super_L,那麼3就表示Super_L。看這個例子,把Windows Left + L幫定到 Screen Lock(如同WindowsXP一樣),就可以這樣來:
Key L A 3 Exec exec xscreensaver-command -lock
是不是突然明白了為什麼看不懂別人配置檔案裡的3和4?原來是它們在作怪!閒話修提,這樣一來又可以做出不少快捷鍵來,滑鼠基本可以放在一邊了。
最後,左手滑鼠很簡單 xmodmap -e "pointer = 3 2 1 4 5" 。 不要用xfce裡面的“左撇子”設定,糟糕得很,在桌面上和視窗上正常,但是到了工具欄就ytht了。
top把滑鼠動作繫結到鍵盤
一般情況下繫結都是將組合鍵繫結到函式,而這個函式通常都不包含滑鼠操作。但有時我們卻希望模擬滑鼠動作,雖然這種情況不多,但也不獨特。比如我的桌面配置中有個懸掛按鈕,點選這個按鈕彈出一個常用程式按鈕列(參見我的螢幕截圖),再點選就可以將其收縮。非常直觀的想法就是將這個操作繫結到某個鍵上(類似Windows的開始選單,只要按下Windows鍵就可將其啟用或者相反)。在FVWM的FAQ( http://fvwm.org/documentation/faq/#toc_4.7 )中看到個非常棒的函式 press_fvwmbuttons ,專門就是用來處理這種情況的。這個自定義函式主要呼叫了 FakeClick 。為了說明清楚,摘抄man Fvwm上的一段話:
FakeClick [command value] ...
This command is mainly intended for debugging fvwm and no guarantees are
made that it works for you. FakeClick can simulate mouse button press and
release events and pass them to fvwm or the applications. The parameters
are a list of commands which consist of pairs of command tokens and
integer values, The press and release commands are followed by the
appropriate mouse button number and generate a button press or release
event on the window below the pointer. The wait commands pauses fvwm
for the given number of milliseconds. The modifiers command simulates
pressing or releasing modifier keys. The values 1 to 5 are mapped to Mod1
to Mod5 while 6, 7 and 8 are mapped to Shift, Lock and Control. The
modifier is set for any further button events. To release a modifier
key, use the corresponding negative number. The depth command determines
to which window the button events are sent. With a depth of 1, all
events go to the root window, regardless of the pointer's position. With
2, the event is passed to the top level window under the pointer which is
usually the frame window. With 3, events go to the client window. Higher
numbers go to successive sub windows. Zero (0) goes to the smallest window
that contains the pointer. Note that events propagate upward.
FakeClick depth 2 press 1 wait 250 release 1
This simulates a click with button 1 in the parent window (depth 2) with
a delay of 250 milliseconds between the press and the release. Note: all
command names can be abbreviated with their first letter.
為了適應不同的配置, press_fvwmbuttons 函式可能需要一些修改。如果需要將滑鼠點選操作指定到某個特殊的視窗或者Module,那麼直接按照FAQ將depth設定為2就不合適,1可能是一個比較好的選擇。此外,比較關鍵的就是 Next 中的 conditions ,一定要將期望接受滑鼠操作的視窗或Module寫到裡面,即他們的屬效能夠匹配 conditions 。比如我將懸掛按鈕的屬性添加了 CirculatedHit ,這樣就可以在 Next (MyStartMenu, CirculatedHit) 中被識別。
做好函式定義後就可以隨意綁定了,比如使用左Windows鍵控制我的懸掛按鈕就可以這樣:
Key Super_L A N press_fvwmbuttons 1 50 50
top如何取色
顏色可以使用 xcolors 和 xcolorsel 。或者 FireFox 有個 ColorZilla 的外掛也可以,不過它只能取網頁內的顏色。這裡不錯Color Scheme。
topFvwm怎麼亂了?
如果通過gdm運行了其它Window Manager,再回來選擇Fvwm之後,可能出現異常:Fvwm不能正常顯示Module和選單上的字,而且 .xsession 也沒有被執行,因為 .xsession 應該是通過 /usr/bin/ssh-agent /home/xrn/.xsession 啟動。我不太清楚具體原因是什麼,修改的辦法是:
update-alternatives --config x-window-manager
選擇Fvwm,然後登出顯示gdm登入畫面,在 會話 中選擇 系統預設 ,這裡直接選擇fvwm還是有問題(個人猜測可能是gdm的機制,如果直接選擇fvwm,它就會自己啟動fvwm而不是按照我們期望的通過 .xsession 啟動)。如果不喜歡用gdm,直接通過 startx 或 xinit 都不會出現這種問題。
topFvwmTaskbar
如果嫌自己配置FvwmTaskbar太羅索,那就試試這個小工具吧:http://fbpanel.sourceforge.net
topFvwmPager 怎麼設定邊框顏色
設定好它的 Style FvwmPager BackColor YourColor, BorderWidth 1 ,或者看一下這裡: http://www.hpc.uh.edu/fvwm/archive/0209/msg00191.html
topFvwmIconMan
IconMan集中管理所有的視窗(當然可以有選擇的管理),基本配置可以參考manpage中的說明,但是 bif 這個命令很不好理解。我自己的體會是這樣的。man page中關於 bif 的描述是這樣一段:
bif Button Integer/String
A relative branch instruction. If Button is Select or Focus, then take the branch if there is a selected button or a focused button. If Button is an integer, then branch if nonzero. If it is one of Up, Down, Right, Left, Next, Prev, then the branch is taken when the current button can move in that direction. If the branch is taken, then Integer commands are skipped. No backwards branches are allowed.
這段話寫的非常模糊,只告訴了什麼情況跳轉,但是跳到哪裡並不明確。實際上 bif Button Integer/String 不是一個完整的分支描述,它只相當於C語言中的:
if (expression)
根本沒有說明 expression 為真時到哪裡,為假時到哪裡。所以問題的關鍵就是找到分支跳轉的分界線,對應C語言裡面的 then,else 。先看一下man page給出的例子:
bif Next 3, gotobutton 0, select, ret, gotobutton Next, select
If a button is selected, and it's the last button, go to button 0. If it's not the last button, go to the next button. Otherwise, do nothing. Basically, this action cycles through all buttons in the current manager.
從這個例子可以大致估計跳轉的分界線在於 ret ,但是與常規的跳轉正好相反,翻譯為偽碼基本上是:
if Next 3 then
gotobutton Next, select
else
gotobutton 0, select
end if
即ret把命令序列分為兩部分,後半部分是條件為真時的執行分支,而前半部分是條件為假時的執行序列。這個猜測可以從後面的例子進一步得到驗證。
bif select 7, bif focus 3, gotomanager 0, select, ret, gotobutton focus, select, ret, gotobutton down, select
This is good for sending to FvwmIconMan with a SendToModule command. If there is a selected button, it moves down. Otherwise, if there is a focused button, it is selected. Otherwise, button 0 of manager 0 gets selected.
按照上面的規則翻譯結果是:
if select 7 then
gotobutton down select
else
if focus 3 then
gotobutton focus, select
else
gotomanager 0, select
end if
end if
跟man page中的說明是一致的,不過需要注意的是ret是從後往前數的,即第一個條件判斷與最後一個ret匹配,整個語句被分割成兩部分(相當於then一部分,else一部分),每一部分仍然按照上面所說的匹配原則。
這樣的話,bif就好用了,可以單獨為FvwmIconMan繫結快捷鍵,方便的實現視窗定位操作。
另外,如果在不同的Pager或者Desk啟動了不同的程式,那麼FvwmIconMan需要配置 Resolution屬性,比如:
*FvwmIconMan: Resolution desk
來收集整個桌面的程式,而不管它在哪個Pager。類似的有Pager以及Global。如果你想在 IconMan上點選某個應用程式就能轉到那個程式(如同Window List一樣),可以簡單的配置如下:
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus
當然你可以把它幫定到其它鍵。我的.fvwm2rc關於IconMan的配置如下:
DestroyModuleConfig FvwmIconMan: *
# 只要一個IconMan
*FvwmIconMan: Nummanagers 1
# 要收集所有的程式
*FvwmIconMan: Resolution global
*FvwmIconMan: Background steelblue4
*FvwmIconMan: Foreground white
*FvwmIconMan: Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
# 設定大小,並把它放在左下角
*FvwmIconMan: ButtonGeometry 233x0
*FvwmIconMan: ManagerGeometry 1x0+0-21
# 如果某類程式使用了WindowListSkip屬性,那麼IconMan就不收集它們
*FvwmIconMan: UseWinList true
*FvwmIconMan: DrawIcons true
*FvwmIconMan: Shape true
*FvwmIconMan: FollowFocus true
*FvwmIconMan: Sort name
*FvwmIconMan: PlainButton flat white steelblue
*FvwmIconMan: SelectButton up white dodgerblue4
*FvwmIconMan: FocusButton up white brown
*FvwmIconMan: FocusAndSelectButton down white maroon
*FvwmIconMan: TitleButton raisededge white steelblue
*FvwmIconMan: Tips always
*FvwmIconMan: TipsFont "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
*FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate"
*FvwmIconMan: ReliefThickness 1
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus
*FvwmIconMan: Action Mouse 2 N sendcommand "WarpToWindow 50 50"
*FvwmIconMan: Action Mouse 3 N sendcommand "Popup MenuFvwmWindowOps rectangle $widthx$height+$left+$top 0 -100m"
*FvwmIconMan: Action Mouse 4 N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Mouse 5 N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Up N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Key Down N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Return N sendcommand "Iconify off, Raise, WarpToWindow 50 50"
top一點筆記
自定義函式在動作命令前面常有I,M,C,D等指示符其作用是:
,---------------------
| man fvwm (AddToFunc)
`---------------------
The letter before the action tells what kind of action triggers the command
which follows it.
'I' stands for "Immediate", and is executed as soon as the function is invoked.
'M' stands for "Motion", i.e. if the user starts moving the mouse.
'C' stands for "Click", i.e., if the user presses and releases the mouse.
'H' stands for "Hold", i.e. if the user presses a mouse button and holds it down
for more than ClickTime milliseconds.
'D' stands for "Double-click".
The action 'I' causes an action to be performed on the button-press, if the
function is invoked with prior knowledge of which window to act on.
top我的桌面
基本桌面,透明特顯, 郵件通知, 自動隱藏,不錯的一個,另一種風格基本的,炫一點的。看看這幾張奇怪的圖吧,你能發現錯誤麼?First,Second,Third。最後補一張Emacs。再來一張用了FvwmIconMan的。
這裡是目前2我的 .fvwm2rc 。我把自己的所有配置,包括.fvwm2rc以及相關修改過得script等打包xrn-fvwm。解壓以後把scripts放到 $HOME ,其它統統丟進 $HOME/.fvwm ,並把fvwm2rc改名.fvwm2rc。如果圖示顯示不正常,請參看.fvwm2rc裡面的 ImagePath 。
top寫在尾巴上
新鮮事物給人的感覺是刺激的,總想在最短時間內探其究竟,用其所有,追求一種不斷的“進步”。當這種激情逐漸消退,當工具的功能更多的便利於你的工作而不是過分的在乎它的介面時,就會發現很多努力都是徒勞。FVWM也是這樣。剛開始接觸FVWM,無論如何都要搞透明,搞主題,搞動態效果,搞這個搞那個,昨天晚上我才突然之間醒悟原來我所需要的就是一個桌面:上面最好有個工作列,還得有個虛擬桌面切換器。這些工作頂多就用到兩個Module:FvwmTaskbar和FvwmPager。實際上,gnome-panel、fbpanel、peksystray等工具都可以勝任。我把以前那些好多好多沒用的設定都去掉了,除了快捷鍵的定義。有了快捷鍵就算桌面什麼都沒有我仍然可以操作自如:Mouse2最大化,Mod3+I最小化,Mod3+D全部最小化,Mouse+3圖示化,Mod3+M最大化,Mod3+R放縮視窗,Mod3+(1,2,3,4)切換虛擬桌面,Mod3+(Left,Right)切換Pager,Mod3+X關閉視窗,Mod3+Q拉出qterm灌水,Alt+F1執行terminal,Alt+F2啟動firefox,Alt+F6啟動gvim,Alt+F7啟動Emacs,Alt+F8用xmms聽歌,Alt+F9用stardict查字典,Alt+F10上QQ,Alt+F11開啟Putty,Alt+F12啟動thunderbird收信,等等。太多了,太方便了。再也不花時間折騰了,踏踏實實用它吧!
--------------------------------------------------------------------------------
[1]. 第一次嘗試的時候為了方便我讓所有的fvwm-theme都使用MyDecor這個名字,雖然在更改Theme的時候我也添加了DestroyDecor,但最終效果仍然不好:這個問題一直困擾了好久。我一直以為是自己包裝的過程有語法錯誤,所以就仔細對照fvwm-decors的decor檔案觀察。其實一開始就發現它給每個Decor都取不同的名字,以為影響不大。後來實在沒有辦法,孤注一擲,決定把fvwm-theme的每個Theme採用不同的Decor Name。為了適合作Decor Name,第一步就是把所有的Theme資料夾名稱修改,然後將每個資料夾中decor檔案關於Decor的行前面新增 + ,然後加一行 Style * UseDecor FoldName= 。沒想到,問題就是在這裡!真是解決問題不一定難,可是找到問題的所在就費勁了!
[2] 這個檔案每天都有改動,已經成了毛病,所以最新只能是基本框架如此。
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/fvwm.html
FVWM 的旅程
先去看看王垠寫的 Fvwm簡明使用手冊 ,然後到 FVWM 看看 screenshots ,最好挑一個自己喜歡的下手(我覺得還是不要自己完全重來,別人的程式碼裡面有許多精彩的東西)。我把自己用到的幾個東西寫下來:
topTheme
你可以到 FVWM Themes Project 去下載一個省事的,不用配置就可以得到非常棒的桌面環境。個人配置最好整合在 ~/.fvwm/themes/personal 裡面,所有相關的配置可以參看其說明文件,最好以 FILE-extra 來命名。比如要定義自己的啟動函式,在 ~/.fvwm/themes/personal/ 建立 startup 檔案(fvwm-themes本身沒有定義啟動函式,所以不用加extra),裡面就可以定義 AddToFunc StartFunction ... ;要定義自己的樣式風格則建立 styles 和 menustyle-extra ,裡面就隨自己的喜好了;要定義自己的快捷鍵繫結則建立 bindings-extra ,定義自己的函式則建立 functions-appbind-extra ,以及自己的選單 menus-programs-extra 。把 ~/.xsession 或 ~/.xinitr 中的 fvwm2 改成 fvwm-themes-start 即可,選擇某種樣式後,再從 Personal 列表裡選擇需要應用的樣式或者快捷鍵等。那麼這次的配置就被記錄下來,下次啟動就自然恢復到這樣的配置了。剛剛接觸FVWM的時候,fvwm-themes還是非常順手貼心的,如果想完全定製自己的工作環境,就需要繼續深入FVWM。這裡是兩張我比較喜歡的截圖:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/fvwmthemes2.png
另外一個比較不錯的個人網頁是 Fvwm Theme ,作者寫了個非常好的perl script,你可以進去看看,把裡面的路徑改成適合你自己環境的,並按照它說的方法修改.fvwm2rc。這裡我遇到一個問題,就是 Piperead '~/scripts/fvwm-theme -init' 中script的路徑必須寫全,Fvwm似乎不能利用 $PATH ,所以為了讓script工作,fvwm-theme原始檔中的路徑也需要修改。這時就可以通過 fvwm-theme 命令方便的更改主題,背景等等。如果想要更方便一點,在你需要的選單里加一項:
+ "Themes" Popup ThemesMenu
fvwm-theme會記住當前的theme,並在下次啟動的時候直接啟動這個。其實很簡單,作者就是寫了一個 ~/.fvwm-theme 檔案,裡面記錄著theme的名字,下次啟動時,-init引數就要讀取這個檔案,然後動態生成一些style。
網上還有一個不錯的fvwm-decors配置(
fvwm-theme做得非常精緻,而fvwm-decors裡面有個非常不錯的Mac模擬,所以我想將二者結合起來一起用,但多次試驗之後發現簡單的合在一起問題多多:要麼樣式不變,要麼是隻變一部分,要麼就是亂七八糟。找來找去也沒有找到問題究竟出在那裡,所以只好準備修改程式。
fvwm-theme中作者沒有定義Decor,只是把ButtonStyle,TitleStyle羅列出來。而fvwm-decors給人感覺比較模組化,所以第一步就動手改造fvwm-theme的perl指令碼,對原來的命令用 AddToDecor 進行包裝,取名與資料夾相同1。此外,還需要對每種樣式的decor描述檔案進行一點改動(樣式行前加加 + ,合併到到 AddToDecor , 並在檔案最後新增 Style * DecorName 一行):這些操作可以sed通過一個簡單的指令碼順利完成。這樣修改以後二者就能一起用了,而且你還可以隨便新增新的Decor。
上面兩個小工具主要是更改Decor樣式,其中fvwm-themes也可以更改桌面。另外還有一個也不錯的選擇桌面的perl指令碼fvwm-wallpaper。使用比較簡單隻需要針對存放wallpaper的資料夾執行這個指令碼,它會生成 $HOME/.fvwm-wallpaper 這麼一個資料夾。這個資料夾裡面有一個 menu 檔案,需要被Read到你的.fvwm2rc中以便選擇桌面。另一個是 thumbnail 資料夾,裡面都是被convert(別忘了安裝ImageMagick)過來的縮小版wallpaper。這個指令碼方便的地方是在更改桌面的時候可以看到縮圖,不好的地方是如果你有成千上百張桌面,它就會生成同樣數目的縮圖,而且新新增圖片以後必須重來一次才能看見:這個convert的過程會非常漫長。而且它不支援巢狀資料夾,水都不希望自己的wallpaper裡面一團糟,分類是必須的。基於這兩點不爽的地方我就不再用它了!如果你的圖片比較少,完全可以試一試,感覺還是挺刺激的!不要忘了修改裡面的設定背景的命令,最好用 fvwm-root。 這樣可以保證你的透明效果正常。
topIconify圖示
有些程式自己提供了Iconify的圖示,如果要自己指定需要使用 IconOverride 引數,比如替換firefox的預設地球儀可以用:
Style "Firefox-bin" Icon myfirefox.png, IconOverride
另外,諸如firefox之類的很多程式在指定style的時候不能憑自己的猜測用firefox或firefox-bin,最保險的就是用: xprop ¦ grep CLASS 然後點選標題欄,就可以得到標準的CLASS名稱,這也就是為什麼上面用Firefox-bin。
top透明
如果在Windows上看到一個透明的term那才叫實實在在的驚訝,對於UNIX家族而言,絕大多數WM都可以輕鬆實現透明效果。對於FVWM自然容易的很,兩步走:(1)在使用的 Colorset 裡面加上 RootTransparent Buffer ;(2)背景設定使用 fvwm-root 或 wmsetbg ,就是不能用 xsetroot 。更詳細的資訊請參看:Using Transparency。 此外, term想要支援透明,必須以-tr引數啟動! 看看我的一個截圖
topAutohide
自動隱藏可以很方便的節省桌面空間,我把常用的工具放到一個Autohide的Button裡面,讓它掛在右上角,滑鼠移過去的時候自動顯示,移走的時候自動隱藏。這個功能也很簡單,看一下 http://www.fvwm.org/documentation/faq/#7.17 。後來我發現桌面上還是什麼都沒有的好,所以索性這個懸掛按鈕也不要了,改成了一個自動隱藏的Pager,這樣清新爽利,滑鼠往右上角一挪,Pager就出來露個臉,滑鼠拿走,Pager又縮回頭去:自動隱藏方便不少。
topDocApp
本來是 Windows Maker 的特色,但FVWM可以天衣無縫的把它們給融合進來。FvwmButtons可以配置為“吸收”某類程式,比如:
*FvwmButtons: (Size 11x5, Swallow wmcpuload, '')
就可以把名為 wmcpuload 的程式吸收過來,就是說當你啟動 wmcpuload 後,它的介面會顯示在這個FvwmButtons上面。這樣的話你可以通過操作FvwmButtons來操作這個docapp,就像裝了個框,當然這個框也可以被你配置的不存在。如果想一啟動就讓這個docapp執行,那麼可以這樣:
*FvwmButtons: (Size 11x5, Swallow wmcpuload, 'Exec exec wmcpuload -bw -bl -lc rgb:ee/82/ee')
這些小玩意兒特別有意思,尤其是剛剛接觸,視覺效果非常棒。我曾經在桌面上放了十幾個這樣的東西,就像看Matrix一樣,動靜皆有,色彩絢爛,賞心悅目,是美觀和便利的完美結合。可以到 http://www.bensinclair.com/dockapp/ 看看這個 http://www.dockapps.org 。基本上每個工具都配有一個-config工具,比如wmmaiload對應的配置工具是wmmaiload-config,簡單好用。
top字型設定
FVWM 可以為英文和中文指定不同的字型,比如英文使用verdana,而漢語使用simsun字型。
MenuStyle * Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-14-*-*-*-*-*-*-*"
top字型太小
有些gtk程式在fvwm下面選單欄上的字型可能比較小,那麼在~/.gtkrc-2.0裡面寫這樣一句:
gtk-font-name = "SimSun 12"
當然前題是系統上裝好了sim字型(一般都沒有問題,預設已經安裝了),否則的話可以換一個xlsfonts中有的。
另外還可能遇到的一個問題就是openoffice選單欄的字型不能正常顯示或者太小,這個在 FAQ中有解決,就是在 工具->選項->OpenOffice.org->字型 中將 使用字型替換 打勾,然後在下面左邊的框裡填 Andale Sans UI ,右邊的框裡找一個系統有的字型,然後確定。如果這時字型還顯小,那就在 檢視 中將 顯示比例 調大一些,如下圖:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/ooffice.png
另外一種解決openoffice字型小的辦法就是啟動 gnome-settings-daemon 。
top如何使用Windows鍵
如果你習慣左手使用滑鼠(比如我),FVWM怎樣配置呢?如果你希望使用Windows特有的那幾個鍵,FVWM怎樣配置呢?實際上這些工作都由xmodmap完成,它的功能就是完成鍵盤的物理鍵對映到計算機內部的邏輯鍵,也就是說,如果你願意,可以將A對映成B,每當你按下A的時候,計算機就當B處理(估計愛因斯坦也不會這麼折騰自己)。xmodmap完成鍵對映的命令格式是: xmodmap -e "keycode NUMBER = KEYNAME" 。其中 keycode 是關鍵字, NUMBER 是鍵的編號,也即物理名稱, KEYNAME 是邏輯名稱,即計算機內部把序號為 NUMBER 的鍵當 KEYNAME 處理(具體可以參考man xmodmap)。
下一步就是獲得鍵的編碼和名字了,這可以通過 xev 來完成。在 xev 的那個小視窗上按鍵然後觀察提示資訊,可以很方便的找到 keycode NUMBER 和 KEYNAME 。比如在我的系統上按下左邊的Windows鍵螢幕顯示:
KeyRelease event, serial 30, synthetic NO, window 0x2000001,
root 0x8d, subw 0x0, time 4314898, (40,69), root:(885,658),
state 0x50, keycode 115 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes: ""
對於pc104鍵盤而言,Windows特有的那些鍵一般對應於: keycode keyname
Windows Left Super_L, Hyper_L
Windows Right Super_R, Hyper_R
Windows Menu Menu
要在FVWM裡面用這些鍵,最好把它們當成跟C,M,S一樣的Modifier。這可以通過下面這一段完成:
xmodmap -e 'keycode 115 = Super_L' # Left windows key
xmodmap -e 'keycode 116 = Super_R' # Right windows key
xmodmap -e 'keycode 117 = Menu' # Windows menu key
xmodmap -e 'add Mod3 = Super_L' # Make left windows key a modifier
xmodmap -e 'add Mod4 = Super_R' # Make right windows key a modifier
上面的keycode是十進位制的,也可以使用十六進位制寫法,比如 xmodmap -e 'keycode 0x73 = Super_L' 。為了啟動時自動載入,你可以把這些配置寫到 ~/.xinitrc 或 ~/.xsession 中(具體看系統啟動時用哪個);也可以把它寫到 ~/.Xmodmap ,因為在啟動X的指令碼 /etc/X11/xinit/xinitrc 裡已經包含了 xmodmap ~/.Xmodmap (可能不同的系統不一樣,我的Debian中就沒有這條命令,所以如果沒有生效就自己改一改)。xmodmap是跟X相關的,所以如果你不啟動X,這些配置有可能不管用,所以不要對把它們寫到 ~/.bashrc 裡寄予太大的希望(或者你可以看看關於dumpkeys和loadkeys的內容,我不是很瞭解)。
這時就可以在FVWM中把這些鍵當作普通的Modifier來用了,跟C,M,S對應,它們的表示是3或者4。比如上邊定義了Mod3為Super_L,那麼3就表示Super_L。看這個例子,把Windows Left + L幫定到 Screen Lock(如同WindowsXP一樣),就可以這樣來:
Key L A 3 Exec exec xscreensaver-command -lock
是不是突然明白了為什麼看不懂別人配置檔案裡的3和4?原來是它們在作怪!閒話修提,這樣一來又可以做出不少快捷鍵來,滑鼠基本可以放在一邊了。
最後,左手滑鼠很簡單 xmodmap -e "pointer = 3 2 1 4 5" 。 不要用xfce裡面的“左撇子”設定,糟糕得很,在桌面上和視窗上正常,但是到了工具欄就ytht了。
top把滑鼠動作繫結到鍵盤
一般情況下繫結都是將組合鍵繫結到函式,而這個函式通常都不包含滑鼠操作。但有時我們卻希望模擬滑鼠動作,雖然這種情況不多,但也不獨特。比如我的桌面配置中有個懸掛按鈕,點選這個按鈕彈出一個常用程式按鈕列(參見我的螢幕截圖),再點選就可以將其收縮。非常直觀的想法就是將這個操作繫結到某個鍵上(類似Windows的開始選單,只要按下Windows鍵就可將其啟用或者相反)。在FVWM的FAQ( http://fvwm.org/documentation/faq/#toc_4.7 )中看到個非常棒的函式 press_fvwmbuttons ,專門就是用來處理這種情況的。這個自定義函式主要呼叫了 FakeClick 。為了說明清楚,摘抄man Fvwm上的一段話:
FakeClick [command value] ...
This command is mainly intended for debugging fvwm and no guarantees are
made that it works for you. FakeClick can simulate mouse button press and
release events and pass them to fvwm or the applications. The parameters
are a list of commands which consist of pairs of command tokens and
integer values, The press and release commands are followed by the
appropriate mouse button number and generate a button press or release
event on the window below the pointer. The wait commands pauses fvwm
for the given number of milliseconds. The modifiers command simulates
pressing or releasing modifier keys. The values 1 to 5 are mapped to Mod1
to Mod5 while 6, 7 and 8 are mapped to Shift, Lock and Control. The
modifier is set for any further button events. To release a modifier
key, use the corresponding negative number. The depth command determines
to which window the button events are sent. With a depth of 1, all
events go to the root window, regardless of the pointer's position. With
2, the event is passed to the top level window under the pointer which is
usually the frame window. With 3, events go to the client window. Higher
numbers go to successive sub windows. Zero (0) goes to the smallest window
that contains the pointer. Note that events propagate upward.
FakeClick depth 2 press 1 wait 250 release 1
This simulates a click with button 1 in the parent window (depth 2) with
a delay of 250 milliseconds between the press and the release. Note: all
command names can be abbreviated with their first letter.
為了適應不同的配置, press_fvwmbuttons 函式可能需要一些修改。如果需要將滑鼠點選操作指定到某個特殊的視窗或者Module,那麼直接按照FAQ將depth設定為2就不合適,1可能是一個比較好的選擇。此外,比較關鍵的就是 Next 中的 conditions ,一定要將期望接受滑鼠操作的視窗或Module寫到裡面,即他們的屬效能夠匹配 conditions 。比如我將懸掛按鈕的屬性添加了 CirculatedHit ,這樣就可以在 Next (MyStartMenu, CirculatedHit) 中被識別。
做好函式定義後就可以隨意綁定了,比如使用左Windows鍵控制我的懸掛按鈕就可以這樣:
Key Super_L A N press_fvwmbuttons 1 50 50
top如何取色
顏色可以使用 xcolors 和 xcolorsel 。或者 FireFox 有個 ColorZilla 的外掛也可以,不過它只能取網頁內的顏色。這裡不錯Color Scheme。
topFvwm怎麼亂了?
如果通過gdm運行了其它Window Manager,再回來選擇Fvwm之後,可能出現異常:Fvwm不能正常顯示Module和選單上的字,而且 .xsession 也沒有被執行,因為 .xsession 應該是通過 /usr/bin/ssh-agent /home/xrn/.xsession 啟動。我不太清楚具體原因是什麼,修改的辦法是:
update-alternatives --config x-window-manager
選擇Fvwm,然後登出顯示gdm登入畫面,在 會話 中選擇 系統預設 ,這裡直接選擇fvwm還是有問題(個人猜測可能是gdm的機制,如果直接選擇fvwm,它就會自己啟動fvwm而不是按照我們期望的通過 .xsession 啟動)。如果不喜歡用gdm,直接通過 startx 或 xinit 都不會出現這種問題。
topFvwmTaskbar
如果嫌自己配置FvwmTaskbar太羅索,那就試試這個小工具吧:http://fbpanel.sourceforge.net
topFvwmPager 怎麼設定邊框顏色
設定好它的 Style FvwmPager BackColor YourColor, BorderWidth 1 ,或者看一下這裡: http://www.hpc.uh.edu/fvwm/archive/0209/msg00191.html
topFvwmIconMan
IconMan集中管理所有的視窗(當然可以有選擇的管理),基本配置可以參考manpage中的說明,但是 bif 這個命令很不好理解。我自己的體會是這樣的。man page中關於 bif 的描述是這樣一段:
bif Button Integer/String
A relative branch instruction. If Button is Select or Focus, then take the branch if there is a selected button or a focused button. If Button is an integer, then branch if nonzero. If it is one of Up, Down, Right, Left, Next, Prev, then the branch is taken when the current button can move in that direction. If the branch is taken, then Integer commands are skipped. No backwards branches are allowed.
這段話寫的非常模糊,只告訴了什麼情況跳轉,但是跳到哪裡並不明確。實際上 bif Button Integer/String 不是一個完整的分支描述,它只相當於C語言中的:
if (expression)
根本沒有說明 expression 為真時到哪裡,為假時到哪裡。所以問題的關鍵就是找到分支跳轉的分界線,對應C語言裡面的 then,else 。先看一下man page給出的例子:
bif Next 3, gotobutton 0, select, ret, gotobutton Next, select
If a button is selected, and it's the last button, go to button 0. If it's not the last button, go to the next button. Otherwise, do nothing. Basically, this action cycles through all buttons in the current manager.
從這個例子可以大致估計跳轉的分界線在於 ret ,但是與常規的跳轉正好相反,翻譯為偽碼基本上是:
if Next 3 then
gotobutton Next, select
else
gotobutton 0, select
end if
即ret把命令序列分為兩部分,後半部分是條件為真時的執行分支,而前半部分是條件為假時的執行序列。這個猜測可以從後面的例子進一步得到驗證。
bif select 7, bif focus 3, gotomanager 0, select, ret, gotobutton focus, select, ret, gotobutton down, select
This is good for sending to FvwmIconMan with a SendToModule command. If there is a selected button, it moves down. Otherwise, if there is a focused button, it is selected. Otherwise, button 0 of manager 0 gets selected.
按照上面的規則翻譯結果是:
if select 7 then
gotobutton down select
else
if focus 3 then
gotobutton focus, select
else
gotomanager 0, select
end if
end if
跟man page中的說明是一致的,不過需要注意的是ret是從後往前數的,即第一個條件判斷與最後一個ret匹配,整個語句被分割成兩部分(相當於then一部分,else一部分),每一部分仍然按照上面所說的匹配原則。
這樣的話,bif就好用了,可以單獨為FvwmIconMan繫結快捷鍵,方便的實現視窗定位操作。
另外,如果在不同的Pager或者Desk啟動了不同的程式,那麼FvwmIconMan需要配置 Resolution屬性,比如:
*FvwmIconMan: Resolution desk
來收集整個桌面的程式,而不管它在哪個Pager。類似的有Pager以及Global。如果你想在 IconMan上點選某個應用程式就能轉到那個程式(如同Window List一樣),可以簡單的配置如下:
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus
當然你可以把它幫定到其它鍵。我的.fvwm2rc關於IconMan的配置如下:
DestroyModuleConfig FvwmIconMan: *
# 只要一個IconMan
*FvwmIconMan: Nummanagers 1
# 要收集所有的程式
*FvwmIconMan: Resolution global
*FvwmIconMan: Background steelblue4
*FvwmIconMan: Foreground white
*FvwmIconMan: Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
# 設定大小,並把它放在左下角
*FvwmIconMan: ButtonGeometry 233x0
*FvwmIconMan: ManagerGeometry 1x0+0-21
# 如果某類程式使用了WindowListSkip屬性,那麼IconMan就不收集它們
*FvwmIconMan: UseWinList true
*FvwmIconMan: DrawIcons true
*FvwmIconMan: Shape true
*FvwmIconMan: FollowFocus true
*FvwmIconMan: Sort name
*FvwmIconMan: PlainButton flat white steelblue
*FvwmIconMan: SelectButton up white dodgerblue4
*FvwmIconMan: FocusButton up white brown
*FvwmIconMan: FocusAndSelectButton down white maroon
*FvwmIconMan: TitleButton raisededge white steelblue
*FvwmIconMan: Tips always
*FvwmIconMan: TipsFont "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
*FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate"
*FvwmIconMan: ReliefThickness 1
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus
*FvwmIconMan: Action Mouse 2 N sendcommand "WarpToWindow 50 50"
*FvwmIconMan: Action Mouse 3 N sendcommand "Popup MenuFvwmWindowOps rectangle $widthx$height+$left+$top 0 -100m"
*FvwmIconMan: Action Mouse 4 N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Mouse 5 N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Up N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Key Down N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Return N sendcommand "Iconify off, Raise, WarpToWindow 50 50"
top一點筆記
自定義函式在動作命令前面常有I,M,C,D等指示符其作用是:
,---------------------
| man fvwm (AddToFunc)
`---------------------
The letter before the action tells what kind of action triggers the command
which follows it.
'I' stands for "Immediate", and is executed as soon as the function is invoked.
'M' stands for "Motion", i.e. if the user starts moving the mouse.
'C' stands for "Click", i.e., if the user presses and releases the mouse.
'H' stands for "Hold", i.e. if the user presses a mouse button and holds it down
for more than ClickTime milliseconds.
'D' stands for "Double-click".
The action 'I' causes an action to be performed on the button-press, if the
function is invoked with prior knowledge of which window to act on.
top我的桌面
基本桌面,透明特顯, 郵件通知, 自動隱藏,不錯的一個,另一種風格基本的,炫一點的。看看這幾張奇怪的圖吧,你能發現錯誤麼?First,Second,Third。最後補一張Emacs。再來一張用了FvwmIconMan的。
這裡是目前2我的 .fvwm2rc 。我把自己的所有配置,包括.fvwm2rc以及相關修改過得script等打包xrn-fvwm。解壓以後把scripts放到 $HOME ,其它統統丟進 $HOME/.fvwm ,並把fvwm2rc改名.fvwm2rc。如果圖示顯示不正常,請參看.fvwm2rc裡面的 ImagePath 。
top寫在尾巴上
新鮮事物給人的感覺是刺激的,總想在最短時間內探其究竟,用其所有,追求一種不斷的“進步”。當這種激情逐漸消退,當工具的功能更多的便利於你的工作而不是過分的在乎它的介面時,就會發現很多努力都是徒勞。FVWM也是這樣。剛開始接觸FVWM,無論如何都要搞透明,搞主題,搞動態效果,搞這個搞那個,昨天晚上我才突然之間醒悟原來我所需要的就是一個桌面:上面最好有個工作列,還得有個虛擬桌面切換器。這些工作頂多就用到兩個Module:FvwmTaskbar和FvwmPager。實際上,gnome-panel、fbpanel、peksystray等工具都可以勝任。我把以前那些好多好多沒用的設定都去掉了,除了快捷鍵的定義。有了快捷鍵就算桌面什麼都沒有我仍然可以操作自如:Mouse2最大化,Mod3+I最小化,Mod3+D全部最小化,Mouse+3圖示化,Mod3+M最大化,Mod3+R放縮視窗,Mod3+(1,2,3,4)切換虛擬桌面,Mod3+(Left,Right)切換Pager,Mod3+X關閉視窗,Mod3+Q拉出qterm灌水,Alt+F1執行terminal,Alt+F2啟動firefox,Alt+F6啟動gvim,Alt+F7啟動Emacs,Alt+F8用xmms聽歌,Alt+F9用stardict查字典,Alt+F10上QQ,Alt+F11開啟Putty,Alt+F12啟動thunderbird收信,等等。太多了,太方便了。再也不花時間折騰了,踏踏實實用它吧!
--------------------------------------------------------------------------------
[1]. 第一次嘗試的時候為了方便我讓所有的fvwm-theme都使用MyDecor這個名字,雖然在更改Theme的時候我也添加了DestroyDecor,但最終效果仍然不好:這個問題一直困擾了好久。我一直以為是自己包裝的過程有語法錯誤,所以就仔細對照fvwm-decors的decor檔案觀察。其實一開始就發現它給每個Decor都取不同的名字,以為影響不大。後來實在沒有辦法,孤注一擲,決定把fvwm-theme的每個Theme採用不同的Decor Name。為了適合作Decor Name,第一步就是把所有的Theme資料夾名稱修改,然後將每個資料夾中decor檔案關於Decor的行前面新增 + ,然後加一行 Style * UseDecor FoldName= 。沒想到,問題就是在這裡!真是解決問題不一定難,可是找到問題的所在就費勁了!
[2] 這個檔案每天都有改動,已經成了毛病,所以最新只能是基本框架如此。