「FVWM」- FvwmButtons @20210123

FvwmButtons,FVWM的按鈕盒子。能夠在其中建立各類按鈕,也能夠」吞併「(Swallow)各類窗口。所謂吞併就是把某個程序窗口包含在FvwmButtons中。以下截圖:算法

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

上面的截圖中,包含了幾個普通的按鈕,還吞併了任務欄窗口shell

模塊語法格式

Module FvwmButtons [-g geometry] [-transient | -transientpanel] [name [configfile]]less

模塊描述

FvwmButtons只能由fvwm產生,命令行調用FvwmButtons模塊是無效的。ide

FvwmButtons模塊提供了一個按鈕窗口,這個窗口能夠包含不少的按鈕,位於X的根窗口上的。用戶能夠隨時按下按鈕,並由窗口管理器觸發用戶指定的命令調用。FvwmButtons僅在使用fvwm做爲窗口管理器時纔有效。oop

buttonbox能夠是任何配置和形狀,並能夠用單色或彩色圖標來表示將被調用的動做,甚至其餘應用程序也能夠被按鈕欄「吞併」,即包含到按鈕欄中。測試

在點擊按鈕時打開面板也是能夠的。有關詳細信息,請參閱建立面板(CREATING PANELS)部分。字體

選項

-g
該選項指定主窗口的幾何形狀。命令行選項優先於配置文件中的其餘幾何設置。flex

-transient
告訴FvwmButtons在遇到子面板已關閉、收到第一個鍵或按鈕按下、從新生成的狀況下,關閉本身,但爲了打開子面板而按下的不算。 這對於想要選擇單個按鈕並自動關閉的子面板特別有用。它能夠用來建立二維圖形菜單。因爲-transient是一個選項,不是一個配置命令,你可使用相同的配置暫時和非暫時的按鈕欄。動畫

-transientpanel
與-transient選項大體相同,但不是關閉整個按鈕欄,而是隱藏窗口。若是按鈕欄做爲另外一個按鈕欄的子面板啓動,這很是有用,由於它避免了在選擇某些按鈕時它必須從新啓動。ui

調用(INVOCATION)

FvwmButton必須由fvwm產生,在命令行直接運行是無效的。能夠經過在配置文件中使用'Module FvwmButtons OptionalName'來調用FvwmButtons。若是FvwmButtons在fvwm的初始化過程當中產生,這應該放在StartFunction中。 也能夠綁定到一個菜單或鼠標按鈕或手勢來自動。

當使用OptionalName參數調用時,OptionalName用於查找配置命令。例如:

 

AddToFunc StartFunction Module FvwmButtons MyButtonBox

 

FvwmButtons將只使用以「*MyButtonBox」開頭的行,而不是默認的「*FvwmButtons」。

配置文件中的配置選項

FvwmButtons支持的命令能夠分爲三類:

 

(1)用於控制FvwmButtons樣式、大小、字體的命令;
(2)用於控制FvwmButtons中按鈕外觀的命令;
(3)用於在FvwmButtons中定義按鈕以及這些按鈕行爲的命令;

 

下面將圍繞這三類命令進行介紹。

控制FvwmButtons的選項

這些選項用於控制FvwmButtons的總體樣式及行爲:

*FvwmButtons: BoxSize algorithm

此選項指定FvwmButtons如何使用Rows和Columns選項(請參見下文)。它能夠是dump、fixed、smart。

若是使用了fixed,而且Rows和Columns都已指定,而且非零,則FvwmButtons使用的是指定的Rows和Columns。若是該框過小以致於沒法容納全部按鈕,則該模塊將啓動失敗。

若是使用了smart,FvwmButtons將會放大框,以使全部的按鈕能夠適應。列的數量會增長到至少最寬按鈕的寬度,並添加新的行直到能夠放置全部的按鈕。爲了最好的容錯建議使用smart選項。

選項dumb既不fixed也不smart,它是默認的。

*FvwmButtons: Rows rows

指定按鈕的行數。默認爲2行。

*FvwmButtons: Columns columns

指定要建立的按鈕的列數。
若是未指定,則列數設置爲請求的按鈕數量除以行數。
若是同時指定了行和列,但按鈕的數量多於行和列所容許的數量,則除非BoxSize選項fixed(即產生錯誤),不然將忽略columns值。

*FvwmButtons: Geometry geometry

指定FvwmButtons窗口的位置和大小。geometry值的格式是一個標準的X11中使用的格式。

*FvwmButtons: Colorset colorset

告訴模塊使用colorset做爲窗口的背景色。有關colorset的詳細信息,請參閱FvwmTheme手冊頁。

*FvwmButtons: File filename

指定在文件filename中找到此按鈕的配置。文件名能夠是完整的路徑名,或者假定是在fvwm的啓動目錄中。
配置文件的格式與fvwm的配置文件相同,但每一行讀起來都像前綴「*FvwmButtons」同樣。
註釋以「#」開頭;使用「\」延續當前行到下一行。

*FvwmButtons: Pixmap pixmapfile

指定要使用的背景像素圖。若是想使用透明背景,則指定none。

控制按鈕的選項

這些選項用於控制FvwmButtons中的按鈕的公共行爲和樣式:

*FvwmButtons: Back color

指定按鈕的背景色。浮雕和陰的影顏色是從背景色中計算的。

*FvwmButtons: ActiveColorset colorset

當鼠標懸停在按鈕上方時,指示模塊使用colorset做爲按鈕的背景色和背景圖,或者做爲標題顏色。

*FvwmButtons: PressColorset colorset

在按下模塊的按鈕時,指示模塊使用colorset做爲按鈕的背景色和背景圖,或者做爲標題顏色。

*FvwmButtons: Font font

指定用於按鈕的字體,或者爲None。

*FvwmButtons: Fore color

指定用於按鈕文本和單色圖標的顏色。

*FvwmButtons: Frame width

指定每一個按鈕周圍的浮雕的寬度。若是這是一個負數,浮雕向內顯示,使按鈕看起來下沉。在激活時,按鈕會擡起。

*FvwmButtons: ButtonGeometry geometry

此選項與「Geometry」選項相似,只不過尺寸是單個按鈕的大小。整個FvwmButtons窗口的大小是經過將按鈕尺寸乘行數和列數來計算的。

*FvwmButtons: Padding width height

此選項指定默認水平填充爲width像素、垂直填充爲heigh像素。除非使用了這個選項,不然根本不填充的窗口和容器除外,按鈕的浮雕和按鈕的其內容之間的空間一般是2像素、上下4px。

如何定義一個按鈕?

下面的這條命令:

 

* FvwmButtons: (options) [title icon command]

 

用於向FvwmButtons中添加按鈕,並控制按鈕的內容、行爲、樣式等等。

[title icon command]
其中的[title icon command]字段是爲了與之前版本的FvwmButtons兼容,不推薦使用:

 

  • title與選項Title name相似,若是標題字段是「-」,則不顯示標題。
  • icon與Icon filename選項相似,若是icon字段是「-」,則不顯示圖標。
  • command與Action command選項相似,或者替代Swallow 「hangon」命令。

 

鑑於此,配置文件中有關FvwmButtons的配置的格式一般爲:*FvwmButtons: (options)。所以,如下介紹的選項主要針對options字段。

注意,包裹options的括號是必須的。若是有多個options,它們之間使用逗號或空格分隔。

<geometry>

指定FvwmButtons窗口或容器中按鈕的大小和位置。<geometry>格式與X11中的geometry相同(<width>x<height>[+|-]<x>[+|-]<y>)。按鈕的寬度爲<width>乘以普通按鈕的寬度、按鈕的高度爲<height>乘以普通按鈕的高度用於指定寬高。若是給出了x和y的值,若是x(y)爲正值,按鈕從容器的左邊(頂部)開始放置,若是x(y)是負值的,按鈕從容器的右邊(底部)開始放置。帶有位置參數(x和y)的按鈕會被放置在沒有位置參數的按鈕以前。若是兩個或多個按鈕被強制重疊,FvwmButtons將退出並顯示錯誤消息。

Action [(options)] command

用於指定在按下Enter或Mouse時,要執行的fvwm命令command。若是command包含逗號或右括號,則須要進行引用。

Action的當前options是:Mouse n。該動做僅對鼠標按鈕n執行。除了通常操做以外,還能夠爲每一個鼠標按鈕定義一個動做。

在command部分,可使用一些預約義的變量:$left、$right、$top、$bottom,這些變量會被所按下的按鈕的左、右、上、下的座標替代。$-left、$-right、$-top、$-bottom一樣會被替換,但座標是從屏幕底部或者右邊緣計算出來的(對於距右邊屏幕邊界5個像素的按鈕, $-right將是5)。 $width和$height被按鈕的寬度或高度替換。變量$fg和$bg被用Back或Fore選項設置的前景色或背景色替換(見下文)。全部這些都是無視引用字符的。字符串'$$'表示'$'。看下面的示例:

 

* FvwmButtons: (Title xload, Action (Mouse 1) `Exec exec xload -fg $fg -bg $bg -geometry -3000-3000`)

 

注意:對於2.5.0以前的fvwm版本,沒法將action分配給吞併應用程序窗口的按鈕(請參閱Swallow選項),只有當按鈕周圍的邊框被點擊時,這些操做才起做用。如今能夠這樣作了,但爲了恢復舊的行爲,能夠在按鈕上使用ActionIgnoresClientWindow:

 

* FvwmButtons: (Action beep, ActionIgnoresClientWindow, Swallow xeyes "Exec exec xeyes")

 

在這個例子中,只有當你點擊按鈕的邊框或者Xeyes窗口的透明部分,而不是在Xeyes窗口自己時,纔會執行該動做。

ActionIgnoresClientWindow

參見Action命令中的說明。

ActionOnPress

除了Popup動做以外,一般操做在按鈕釋放時執行。這個選項改變了這個行爲,這個動做在按鈕按下時執行。
例如,使用Menu或SendToModule生成彈出窗口時,是很好的。或者當Frame爲0時使用,不然按鈕看起來沒有響應。

Back color

指定繪製此框的要使用的背景色。該值用於計算浮雕顏色及陰影顏色。

Center

按鈕的內容在按鈕上居中顯示。這是默認的,但能夠經過Left或Right改變。

Top

按鈕的內容垂直方向上顯示在按鈕的頂部。默認是垂直居中。

Colorset colorset

給定用於容器、一個吞併的應用程序、一個簡單的按鈕的顏色。要將其應用於按鈕或容器,只需將該選項與按鈕或容器說明放在一行中便可。單個按鈕及帶顏色容器的繪製背景須要與X Server進行大量的通訊。因此若是你不知足幾十個帶有色彩背景的按鈕的繪製速度,就不要在這裏使用colorset。將colortset設置爲被吞併應用程序的背景色則沒有此限制,但這徹底取決於吞併的應用程序。它能夠按照你的意願工做,可是因爲它涉及到其餘應用程序的窗口,因此不能保證任何東西。我已經測試了三個應用程序:xosview能夠很好地處理色彩背景;xload只能用於VGradient或純色背景,而模擬xclock會在其處理後留下背景色。

若是吞併的窗口是fvwm模塊(請參閱Swallow的(No)FvwmModule選項),則colorset不會應用於吞併的模塊,應該在模塊配置中使用colorset。若是吞併模塊具備透明色背景,則經過吞服模塊的背景的透明度顯示FvwmButtons背景(而不是按鈕色彩集)。有關colorset的詳細信息,請參閱FvwmTheme模塊的手冊頁。

ActiveColorset colorset

當鼠標懸停在按鈕上方時,使用colorset做爲按鈕的背景色或背景圖像及標題顏色。

PressColorset colorset

當按下按鈕時,使用colorset做爲按鈕的背景色或背景圖像及標題顏色。

Container [(options)]

指定此按鈕將包含一個微型的按鈕框,至關於吞併另外一個FvwmButtons模塊。options與單個按鈕的options相同,可是Container中的options會影響包含的全部按鈕。可用的options有Back、Font、Fore、Frame、Padding。 Title和Swallow選項的Flags能夠設置Title(flags)和Swallow(flags)。還應該指定「Columns width」或「Rows height」,或默認「Columns 2」。有關示例,請參閱Sample configuration部分。

Container按鈕自己(與內容分離)能夠採用Frame和Padding等格式選項,因此能夠在Container上綁定命令,這表示你能夠在Container周圍加一個敏感區,用做執行Action,好比:

 

* FvwmButtons: (2x2, Frame 5, Padding 2 2, Action Beep, Container(Frame 1))

 

一般你會但願至少給容器的大小設置<width>x<height>。

End

表示Container結束,後續的按鈕定義再也不放入Container中,而放入容器的父級中。該選項應該單獨給出:

 

* FvwmButtons: (End)

 

Font fontname

按鈕文本使用的字體。

Fore color

設置標題和單色圖標的前景色。

Frame width

按鈕的浮雕的寬度,單位:px。若是寬度是負數,浮雕是向內凹陷的。激活時,按鈕會擡起來。

Left

按鈕的內容與左側對齊。默認是將內容置於按鈕上。

NoSize

此選項指定在進行按鈕大小的初始計算時不會考慮此按鈕。有用的奇怪的按鈕,只是幾個像素太大,保持在一行,所以炸燬你的整個buttonbox。 「NoSize」至關於「Size 0 0」。

Padding width height

    除了吞併的窗戶和容器以外,按鈕的浮雕與其內容之間的自由空間量一般是2像素,上下4像素,默認狀況下根本不填充。此選項將水平填充設置爲寬度,將垂直填充設置爲高度。

Icon filename

要在按鈕上顯示的圖標的圖像文件名。FvwmButtons搜索fvwm中ImagePath配置項指定的路徑來查找圖標文件。

ActiveIcon filename

圖像文件的名稱。當鼠標懸停在按鈕上方時按鈕上顯示的圖標。若是沒有指定ActiveIcon,將顯示由Icon指定的圖像(若是有的話)。

PressIcon filename

圖像文件的名稱。在按鈕按下時按鈕上顯示的圖標。若是沒有指定PressIcon,將顯示由Icon指定的圖像(若是有的話)。

Id id

id用來標識這個按鈕。id的第一個字符應該是字母。另見「DYNAMICAL ACTIONS」部分。

Left

按鈕的內容左對其。默認是居中的。

NoSize

此選項指定在進行按鈕大小的初始計算時不會考慮此按鈕。對奇怪的按鈕因爲,只是幾個像素太大,沒法保持在一行,所以弄亂整個buttonbox。「NoSize」至關於「Size 0 0」。

Padding width height

除了吞併的窗戶和容器以外,按鈕的浮雕與其內容之間的空間,一般是2px,上下4px,默認狀況下根本不填充。此選項將水平填充設置爲width,將垂直填充設置爲height。

Right

該按鈕的內容與右側對齊。默認居中。

Size width height

指定按鈕內容的寬高,單位像素,而忽略FvwmButton從圖標和標題計算的大小。若是沒有指定此選項,只有吞嚥窗口的按鈕欄不會變得很大,由於FvwmButtons不考慮吞嚥按鈕的大小。請注意,這個選項能夠保證最小的空間;其餘按鈕可能須要buttonbox使用更大的尺寸。

Swallow [(flags)] hangon command

窗口吞併。遍歷全部窗口,當遇到第一個窗口的Name、Class、Resource之一與hangon匹配時,FvwmButtons會捕獲該窗口,並將該窗口顯示在FvwmButtons中。

下面是一個使用Swallow的例子:

 

* FvwmButtons: (Swallow XClock 'Exec xclock -geometry -3000-3000 &')

 

如上示例,遍歷全部窗口,在遇到Name、Class、Resource之一爲「XClock」的的第一個窗口時,將該窗口顯示FvwmButtons中。若是找不到匹配的窗口,則執行後面的「Exec」命令來建立一個。xclock命令的參數「-geometry -3000-3000」使窗口在被FvwmButtons吞併以前顯示在屏幕以外,不然的話你會看到一個窗口閃過。

hangon:用於匹配窗口的Name、Class、Resource,當它們之一與hangon匹配時,將FvwmButtons會捕獲該窗口,並將窗口吞入到該按鈕中。hangon能夠包含通配符星號('*'),用於匹配任何子字符串。
command:若是找不到與hangon匹配的窗口時,則執行command命令來建立一個。注意,Exec命令所建立的窗口的Name、Class、Resource之一也必須與hangon匹配。與上面Action選項中描述的同樣,Swallow也會替換command中的$fg和$bg變量。可是注意,若是使用UseOld和NoClose選項時,在FvwmButtons從新啓動時,被吞併的應用程序是不會從新啓動的。在這種狀況下,若是更改了command,重啓FvwmButtons時,應用是不會發生變化的。
flags:用於控制Swallow的行爲。

也能夠被吞併FVWM模塊。以下示例:

 

* FvwmButtons: (Swallow "FvwmPager" "FvwmPager 0 0")

 

可用的flags以下:

 

NoClose / Close - 當FvwmButtons徹底退出(好比,重啓)時,此按鈕中被吞併的程序是否被」吐出來「或者關閉。默認值是「Close」。「NoClose」能夠與「UseOld」組合時,會使被吞併的窗口在FVWM從新啓動的狀況下依舊存在。

 

 

NoHints / Hints - 是否忽略該按鈕中被吞併程序的提示。這有助於窗口調整其自身大小,以適應按鈕。默認值是「Hints」。

 

 

NoKill / Kill - 指定吞併的程序是經過被殺死來關閉,仍是經過發送消息來關閉。在結束不接受窗口管理器協議的程序時很是有用。默認值是「NoKill」。若是指定了「NoClose」,則」Kill「不起做用。

 

 

NoRespawn / Respawn / SwallowNew - 若是被吞併的程序死了,是否要從新啓動。默認值是」NoRespawn「。若是指定了「Respawn」,則使用原始命令從新啓動程序。當心使用這個選項,程序可能有本身退出的合理理由。若是給出了「SwallowNew」,則程序不會從新生成,可是若是出現具備 hangon名稱的新窗口,則會被當即吞併。

 

 

NoOld / UseOld - 指定在使用command產生一個新窗口以前,按鈕是否會嘗試吞併一個與hangon匹配的、已經存在的窗口。缺省值是「NoOld」。「UseOld」與「NoKill」組合,使窗口能夠在窗口管理器的從新啓動中存活下來。若是你想讓FvwmButtons吞併一箇舊窗口,但失敗時又不會本身產生一個,可指定command爲「Nop」,以下示例:

 

 

* FvwmButtons: (Swallow (UseOld) "Console" Nop)

 

 

若是你想經過本身點擊當前按鈕來啓動它,將它與一個Action結合起來:

 

 

* FvwmButtons: (Swallow (UseOld) "Console" Nop, Action `Exec "Console" console &`)

 

 

NoTitle / UseTitle - 指定是否從被吞併的窗口標題中獲取按鈕的標題。若是給出「UseTitle」,則按鈕上的標題會動態變化,以反映窗口名稱。默認是「NoTitle」。

 

 

NoFvwmModule / FvwmModule - 默認狀況下,若是command的前4個字母是「Fvwm」,或者命令的前6個字母是「Module」,則FvwmButtons將吞併的窗口視爲FVWM模塊窗口。使用NoFvwmModule和FvwmModule來覆蓋這個邏輯。

 

Panel [ (options) ] hangon command

命令Panel與Swallow命令很是類似,均可以吞併窗口,可是Panel命令不會將吞併的窗口顯示出來,直到用戶按下Panel按鈕時,Panel才以滑動動畫打開被吞併的窗口。

參數(options)能夠是:

 

  • 用於Swallow命令中描述的任何flags參數。
  • 除此以外,還包含了「left」、「right」、「up」、「down」選項來指定滑動方向。
  • 選項steps animation-steps定義了動畫步驟的數量。
  • 選項delay ms設置動畫步之間的延遲,以毫秒爲單位。值ms爲」0「表示不延遲。最大延遲時間是10秒(10000)。不使用smooth選項時使用delay選項沒有任何意義。
  • 選項smooth會使Panel在動畫的各個步之間重繪。這樣滑動動畫可能會更平滑,這取決於應用程序、顯示速度。應用程序可能會增加,而不是滑出。動畫可能會變慢。
  • 選項Hints會致使FvwmButtons使用應用程序大小提示來計算動畫步驟的大小。Hints是默認的。若是步數不是您想要的,請嘗試使用NoHints
  • 選項noborder告訴FvwmButtons在計算動畫的位置(至關於在position選項中設置noplr和noptb)時,忽略窗口的邊界。
  • 選項indicator若是設置了,FvwmButtons將在按鈕中繪製一個小三角形,用於打開一個面板。三角形指向面板將彈出的方向。關鍵字indicator後可跟一個正整數,指定indicator的最大寬度和高度,若是沒有這個大小FvwmButtons將使indicator適合按鈕。您可能會想要使用「Padding」選項在indicator和按鈕的邊框之間留下幾個像素。
  • 選項position容許放置面板。語法是position [context-window] [pos] [x y] [border-opts]。參數context-window指的是用於從中計算Panel百分比偏移量的窗口。能夠是Button、Module、Root之一:Button指定面板的按鈕;Module指定FvwmButtons自己;Root指定一個虛擬屏幕。context-window與滑動方向一塊兒定義一個線段,該線段是context-window的邊界之一:用於上/下/左/右滑動的上/下/左/右邊界。參數pos能夠是:center、left/right (用於上下滑動)、top/bottom (用於左右滑動)中的一個。它定義線段上的面板的垂直(向上和向下滑動)或水平(向左和向右滑動)位置。例如,若是pos使用left,則向上滑動,則面板的左側邊界和context-window的左側邊界將對齊。偏移值xy指定面板從默認位置移動多遠。默認狀況下,給定的數值被解釋爲context-window的寬度(高度)的百分比。以「p」結尾將數值解釋爲「像素」。即便使用Root爲上下文,全部偏移量的計算都是相對於按鈕位置的。border-opts可用的值爲:mlr、mtb、noplr、noptb。用於定義包含哪些邊界的寬度。默認狀況下,不考慮FvwmButtons的邊界。mlr改變左側和右側邊界的默認值,mtb改變頂部和底部邊界的默認值。相反,默認狀況下,Panel的邊界被考慮在內。noplr改變默認的左邊界和右邊界,noptb改變頂部和底部邊界的默認值。

 

默認向上滑動5毫秒,動畫共12步驟。要在沒有任何動畫的狀況下顯示面板,請將step設置爲零。默認位置是「Button center」。

有關面板的更多信息,請參閱「CREATING PANELS」部分。

示例以下:

 

# To include the panel in a button
* FvwmButtons: (Panel(down, delay 0, steps 16) SubPanel "Module FvwmButtons SubPanel")
# To define the panel as an instance of
# FvwmButtons with a different name:
* SubPanel: (Icon my_lock.xpm, Action Exec xlock)
* SubPanel: (Icon my_move.xpm, Action Move)
...

 

Title [(options)] name

指定按鈕上的標題。空格能夠經過引用來包含在標題中。若是一個標題在任什麼時候候對於按鈕來講都太長,超出的字符會被截斷。 若是justify是「Right」,頭部被移除,不然尾部被移除。options取值以下:

 

Center - 標題水平居中。 這是默認的。
Left - 標題在左側是合理的。
Right - 居右。
Side - 使標題出如今任何圖標或吞嚥窗口的右側,而不是默認的下面。若是使用小圖標,並將其與「Left」或「Right」選項相結合,可使其看起來相似於fvwm的菜單。

 

ActiveTitle name

鼠標懸停在按鈕上方時,顯示的標題。若是沒有指定ActiveTitle,則顯示由Title指定的文本(若是有的話)。

PressTitle name

按下按鈕時,顯示的標題。若是沒有指定PressTitle,則顯示由Title指定的文本(若是有的話)。

關於command的內容
任何fvwm命令都被FvwmButtons識別。有關更多信息,請參見fvwm(1)。
Exec命令用在Actions中時有一個小擴展,其語法是:

 

Exec ["hangon"] command

 

好比:

 

* FvwmButtons: (Action Exec "xload" xload)

 

hangon字符串必須用雙引號括起來。當FvwmButtons找到這樣一個Exec命令時,該按鈕保持推入狀態,直到遇到Name、Class、Resource與命令引用部分相匹配的窗口。這是爲了向用戶反饋當前操做正在執行而給出的視覺反饋。hangon字符串可能包含匹配任何子字符串的通配符('*')。 若是引用的部分不包含字符(""),則該按鈕將當即彈出。請注意,即便按鈕看起來被按下了,但用戶能夠繼續按下按鈕,並從新執行該命令。

Quoting
任何包含空格的字符串都必須加引號。與早期版本相反的是命令再也不須要引用。在這種狀況下,任何引用字符都將被傳遞給應用程序。 只有逗號','和右括號')'必須在命令中進行引用。引用能夠用三個引號字符中的任何一個來完成:

 

  • 單引號:'Thisisa「引號」'
  • 雙引號:"It'sanother`quote'"
  • 反引號:`Thisisastrangequote`

 

反引號使用並不常見,但會有目的地使用,若是你使用像FvwmCpp這樣的預處理器,並但願它進入你的命令,像這樣:

 

#define BG gray60
* FvwmButtons:(Swallow "xload" `Exec xload -bg BG&`)

 

任何單個字符均可以用前面的反斜槓「\」來引用。

建立面板(CREATING PANELS)

前版本的FvwmButtons(fvwm 2.0.46到2.3.6)有不一樣的處理面板的方法。新面板功能中不能使用舊面板配置。閱讀「CONVERTING OLD PANEL CONFIGURATIONS」以獲取更多信息。

如何建立一個新的面板(HOW TO CREATE NEW PANELS)

這裏側重講解Panel的使用。

任何能夠在fvwm中啓動的有窗口的程序均可以用做面板。一個終端窗口多是你的面板,或者一些應用程序(如xload、xosview),另外一個fvwm模塊,包括FvwmButtons自己。全部你須要知道的是如何從fvwm中啓動你的應用程序。

調用面板的按鈕與其餘按鈕同樣易於配置。本質上你只須要Panel選項:

 

* FvwmButtons: (Panel my_first_panel "Module FvwmButtons -g -30000-30000 my_first_panel")
* FvwmButtons: (Panel my_second_panel "Exec exec xterm -g -30000-30000 -n my_second_panel")

 

這與Swallow選項相似。不一樣之處在於應用程序在啓動時沒有放入按鈕,而是隱藏起來。當您按下面板按鈕時,窗口會滑入視圖中。 '-g -30000-30000'選項告訴應用程序應該在可見屏幕的頂部和左邊很遠的地方建立它。不然,當FvwmButtons啓動時,您會看到它閃爍一下子。有些應用程序不適合這種語法,因此你可能不得不忍受短暫的窗口閃爍。若是你想從另一個FvwmButton實例中建立一個面板,你能夠這樣作,可是你必須給它一個不一樣的名字(上面例子中的'my_first_panel')。若是在相同名稱下運行FvwmButtons,則會遞歸地建立新面板,直到系統資源耗盡而且FvwmButtons崩潰!要使用不一樣的名稱配置第二個按鈕欄,只需在配置文件中將「*new_name」替換爲「*FvwmButtons」。若是您不熟悉Swallow選項,或者想要了解更多關於吞嚥面板的工做原理,請參閱Swallow選項的說明。

如今,面板基本上能夠工做,你須要將須要調整一下。若是不須要面板上的窗口標題,使用fvwm的Style命令。若是按鈕欄是「粘」住的,你可能還想使面板也粘住。可能面板窗口不該該由圖標,以防止其圖標化。Style的配置以下:

 

Style <name_of_panel_window> NoTitle, Sitcky, NoIcon

 

你可能但願你的面板保持打開狀態,直到你選擇了一些東西,能夠在命令中的-g選項以後爲FvwmButtons提供-transientpanel選項。FvwmPager有一個相似的選項「-transient」。

最後但並不是最不重要的是,如今能夠在按鈕中放置一個圖標、一個標題、一個小箭頭,以即可以看到它的做用。標題或圖標能夠照常指定。 要激活箭頭,只需在上面的示例中的「Panel」關鍵字後面添加「(indicator)」,並使用「Padding」選項在箭頭和按鈕邊框之間留下幾個像素。面板打開時的可選方向也能夠一併給出:

 

* FvwmButtons: (Padding 2, Panel(down, indicator) my_first_panel \
"Module FvwmButtons -g -30000-30000 -transientpanel my_first_panel")

 

還有幾個選項能夠用於配置面板如何工做,例如滑動動畫的速度和平滑度。有關更多詳細信息,請參閱Panel選項的說明。

舊配置文件的轉換(CONVERTING OLD PANEL CONFIGURATIONS)

This section describes how to convert a pretty old syntax used in 2.2.x
versions. You may skip it if your syntax is more recent.
With the old panel feature you first had one or more lines defining panels in
your main FvwmButtons configuration:

...
*FvwmButtons(Title WinOps,Panel WinOps)
*FvwmButtons(Title Tools ,Panel Tools)
...
After the last configuration line for the main panel the configuration of the
first panel followed, introduced with a line beginning with *FvwmButtonsPanel:

*FvwmButtonsPanel WinOps
*FvwmButtonsBack bisque2
...

*FvwmButtonsPanel Tools
*FvwmButtonsBack bisque2
...
And perhaps you had style commands for you panels:

Style FvwmButtonsPanel Title, NoHandles, BorderWidth 0
Style FvwmButtonsPanel NoButton 2, NoButton 4, Sticky
The new configuration looks much the same, but now the configuration of the
main panel is independent of the configuration of the sub panels. The lines
invoking the panels use the same syntax as the Swallow option, so you simply
add the name of the window to use as a panel and the command to execute instead
of the panel name. Note that you give the new instance of FvwmButtons a
different name.

*FvwmButtons: (Title WinOps, Panel WinOps \
"Module FvwmButtons WinOps")
*FvwmButtons: (Title Tools , Panel Tools \
"Module FvwmButtons Tools")
If you used something like 'Panel-d' you now have to use 'Panel(down)' instead.
To make the new panel vanish as soon as a button was selected start FvwmButtons
with the '-transientpanel' option:

*FvwmButtons: (Title Tools , Panel(down) Tools \
"Module FvwmButtons -transientpanel Tools")
The rest of the configuration is very easy to change. Delete the lines
'*FvwmButtonsPanel <name>' and add <name> to all of the following configuration
lines for the panel instead. Use the same name in your Style commands:

*WinOps: Back bisque2
...
*Tools: Back bisque2
...
Style "WinOps" Title, NoHandles, BorderWidth 0
Style "WinOps" NoButton 2, NoButton 4, Sticky
Style "Tools" Title, NoHandles, BorderWidth 0
Style "Tools" NoButton 2, NoButton 4, Sticky
That's it. The new panels are much more flexible. Please refer to other parts
of this documentation for details.

WHY WAS THE PANEL FEATURE REWRITTEN?

有幾個緣由。 其中最重要的一點是執行面板的程序代碼很是具備破壞性,形成了不少問題。 同時它也使得FvwmButtons的編寫新功能變得困難。 第二個緣由是大多數用戶根本沒法使其工做 - 這太複雜了。 即便我(新代碼的做者)在第一次工做以前也要花費幾個小時的時間。 第三個緣由是新面板更通用。 任何應用程序均可以是FvwmButtons中的一個面板,而不只僅是FvwmButtons自己的其餘實例。 因此我衷心但願沒有人爲這個變化而生氣。 是的 - 你必須改變你的配置,但新功能配置起來要容易得多,特別是若是你已經知道Swallow選項的工做方式。

排列算法(ARRANGEMENT ALGORITHM)

FvwmButtons試圖經過遞歸地在包括buttonbox自己的每一個容器上使用如下的算法來儘量地安排它的按鈕:

Getting the size right
首先,經過將每一個按鈕的width*height相加來得到須要的按鈕單元區域。容器暫時被認爲是一個正常的按鈕。而後它使用給定的Rows和Columns參數。若是給出的Rows,它將計算須要多少列(Columns),並使用該Columns值,除非Columns較大,在這種狀況下,會在buttonbox的底部獲得一些空的空間。若是給出了Columns的數量,它會計算出全部按鈕須要多少行(Rows)。若是Rows和Columns都沒有給出,它假定你想要Rows爲2,並計算出Columns的值。若是將BoxSize選項設置爲smart,則至少使用最高/最寬按鈕的高度/寬度,而fixed值可防止在行和列都設置爲非零時從新調整框的大小。

Shuffling buttons
如今它有一個足夠大的區域放置按鈕,剩下的就是把它們放在正確的位置。有兩種按鈕:固定按鈕和浮動按鈕。 經過x/y參數將固定按鈕強制放到按鈕框中的特定槽中。全部其餘按鈕被認爲是浮動的。固定的按鈕首先被放置。若是一個固定的按鈕與另外一個按鈕重疊,或者應該放在按鈕窗口以外,則FvwmButtons會退出並顯示一條錯誤消息。以後,浮動按鈕被放置。 該算法試圖將按鈕從左到右,從上到下的風格。若是按鈕位於建議的位置,則放置在該位置,不然當前插槽保持空白,而且將考慮右側的插槽。 在按鈕被放置後,下一個按鈕被嘗試放置在下一個槽中,依此類推,直到全部的按鈕被放置。若是使用BoxSize選項smart,則在按鈕底部的行下方會添加其餘行,直到全部按鈕都被放置爲止。

Containers
Containers按照相同的算法進行排列,實際上它們是在算法找到它們時遞歸地進行混洗的。

Clarifying example
一個例子:假設你有6個按鈕,全部的大小都爲單位大小,除了第二個是2×2,即5*1+1*4=9,9個單位按鈕面積。假設已經要求Columns爲3。擺放次序以下:

 1) +---+---+---+   2) +---+---+---+   3) +---+---+---+
	| 1 |       |      | 1 |       |      | 1 |       |
	+---+       +      +---+   2   +      +---+   2   +
	|           |      |   |       |      | 3 |       |
	+           +      +   +---+---+      +---+---+---+
	|           |      |           |      |   |   |   |
	+-----------+      +---+-------+      +---+---+---+

 4) +---+---+---+   5) +---+-------+   6) +---+-------+
	| 1 |       |      | 1 |       |      | 1 |       |
	+---+   2   +      +---+   2   |      +---+   2   |
	| 3 |       |      | 3 |       |      | 3 |       |
	+---+---+---+      +---+---+---+      +---+-------+
	| 4 |       |      | 4 | 5 |   |      | 4 | 5 | 6 |
	+---+---+---+      +---+---+---+      +---+---+---+

What size will the buttons be?
當FvwmButtons讀取其配置所需的圖標和字體時,能夠找出每一個非吞嚥按鈕所需的大小。容器的單位按鈕的尺寸被設置爲足夠大以容納最大的按鈕而不擠壓它。簡單地說,吞併的窗戶對於從這個方案中獲得的按鈕大小來講是溫馨的。 若是一個特定的配置須要更多的空間來放置一個被吞併的窗口,可使用選項「Size width height」來設置該按鈕。這將告訴FvwmButtons給這個按鈕在浮雕和填充中至少寬度、高度的像素。

DYNAMICAL ACTIONS

A running FvwmButtons instance may receive some commands at run time. This is
achieved using the fvwm command

SendToModule FvwmButtons-Alias <action> <params>
Supported actions:
ChangeButton button_id options

can be used to change the title or icon of a button at run time.
button_id is the id of the button to change as specified using the Id
button option. It may also be a number, in this case the button with the
given number is assumed. And finally, button_id may be in the form +x+y,
where x and y are a column number and a row number of the button to be
changed. It is possible to specify multiple option pairs (name with
value) by delimiting them using comma. Currently options include Title,
ActiveTitle, PressTitle, Colorset, Icon, ActiveIcon and PressIcon. These
options work like the configuration options of the same name.
ExpandButtonVars button_id command
replaces variables present in the command exactly like in the Action
button option and then sends the command back to fvwm. button_id has the
same syntax as described in ChangeButton above.
PressButton button_id [mouse_button]
simulates a mouse click on a button. button_id is the id of the button to
press as specified using the Id button option and mouse_button is the
number of mouse button used to click on the button e.g "1" for the left
mouse button etc. Quotes around the number are not necessary. If
mouse_button option is omitted, mouse button 1 is assumed. This command
behaves exactly as if the mouse button was pressed and released on the
button on in question.
Silent
This prefix may be specified before other actions. It disables all
possible error and warning messages.
Example:

 

 

*FvwmButtons: (Id note1, Title "13:30 - Dinner", Icon clock1.xpm)

 

 

SendToModule FvwmButtons Silent \
ChangeButton note1 Icon clock2.xpm, Title "18:00 - Go Home"

 

簡單的配置示例(SAMPLE CONFIGURATION)

如下是描述FvwmButtons初始化命令,摘錄自.fvwm2rc文件:

##########################################################
# Load any modules which should be started during fvwm
# initialization

# Make sure FvwmButtons is always there.
AddToFunc StartFunction  "I" Module FvwmButtons

# Make it titlebar-less, sticky, and give it an icon
Style "FvwmButtons"     Icon toolbox.xpm, NoTitle, Sticky

# Make the menu/panel look like CDE
Style "WinOps" Title, NoHandles, BorderWidth 0
Style "WinOps" NoButton 2, NoButton 4, Sticky
Style "Tools" Title, NoHandles, BorderWidth 0
Style "Tools" NoButton 2, NoButton 4, Sticky

##########################################################
DestroyModuleConfig FvwmButtons: *
*FvwmButtons: Fore Black
*FvwmButtons: Back rgb:90/80/90
*FvwmButtons: Geometry -135-5
*FvwmButtons: Rows 1
*FvwmButtons: BoxSize smart
*FvwmButtons: Font -*-helvetica-medium-r-*-*-12-*
*FvwmButtons: Padding 2 2

*FvwmButtons: (Title WinOps, Panel WinOps "Module FvwmButtons -transientpanel WinOps")
*FvwmButtons: (Title Tools, Panel Tools "Module FvwmButtons -transientpanel Tools")

*FvwmButtons: (Title Resize, Icon resize.xpm,  Action Resize)
*FvwmButtons: (Title Move,   Icon arrows2.xpm, Action Move  )
*FvwmButtons: (Title Lower,  Icon Down,        Action Lower )
*FvwmButtons: (Title Raise,  Icon Up,          Action Raise )
*FvwmButtons: (Title Kill,   Icon bomb.xpm,    Action Destroy)

*FvwmButtons: (1x1,Container(Rows 3,Frame 1))
*FvwmButtons: (Title Dopey ,Action `Exec "big_win" xterm -T big_win -geometry 80x50 &`)
*FvwmButtons: (Title Snoopy, Font fixed, Action `Exec "small_win" xterm -T small_win &`)
*FvwmButtons: (Title Smokin')
*FvwmButtons: (End)

*FvwmButtons: (Title Xcalc, Icon rcalc.xpm, Action `Exec "Calculator" xcalc &`)
*FvwmButtons: (Title XMag, Icon magnifying_glass2.xpm, Action `Exec "xmag" xmag &`)
*FvwmButtons: (Title Mail, Icon mail2.xpm, Action `Exec "xmh" xmh &`)
*FvwmButtons: (4x1, Swallow "FvwmPager" `FvwmPager 0 3` Frame 3)

*FvwmButtons: (Swallow(UseOld,NoKill) "xload15" `Exec xload \
 -title xload15 -nolabel -bg rgb:90/80/90 -update 15    \
 -geometry -3000-3000 &`)

倒數第二行,做用是一個產生一個FvwmPager模塊,並將它顯示在一個四倍寬度的按鈕中。被使用時,Pager將盡量的填滿按鈕。

最後一行更神奇。注意UseOld和NoKill的組合,當啓動時,它會試圖「吞併」名爲「xload15」的現有窗口,若是失敗了,則使用指定的命令啓動一個名爲xload15的窗口,當結束FvwmButtons時,該窗口會被「吐」出來。吞併的應用程序以「-geometry -3000-3000」啓動,以便在「吞併」以前不可見。

其餘面板在root面板以後指定:

########## PANEL WinOps
DestroyModuleConfig WinOps: *
*WinOps: Back bisque2
*WinOps: Geometry -3-3
*WinOps: Columns 1

*WinOps: (Title Resize, Icon resize.xpm,  Action Resize)
*WinOps: (Title Move,   Icon arrows2.xpm, Action Move  )
*WinOps: (Title Lower,  Icon Down,        Action Lower )
*WinOps: (Title Raise,  Icon Up,          Action Raise )

########## PANEL Tools
DestroyModuleConfig Tools: *
*Tools: Back bisque2
*Tools: Geometry -1-1
*Tools: Columns 1

*Tools: (Title Kill,    Icon bomb.xpm,    Action Destroy)

顏色規範中rgb:90/80/90是X中指定獨立顏色的正確方法,而不該該使用舊的#908090。 若是在你的配置文件中使用了後面的規範,那麼應該使用反斜線(\)對井號(#)進行轉義,不然剩下部分會被解析成註釋。

請注意,使用x/y幾何圖形規格,能夠輕鬆地構建帶間隙的按鈕窗口。下面是另外一個例子。若是沒有按鈕的幾何規格,則沒法完成此操做:

##########################################################
# Another example
##########################################################

# Make it titlebar-less, sticky, and give it an icon
Style "FvwmButtons"     Icon toolbox.xpm, NoTitle, Sticky

DestroyModuleConfig FvwmButtons: *
*FvwmButtons: Font        5x7
*FvwmButtons: Back rgb:90/80/90
*FvwmButtons: Fore        black
*FvwmButtons: Frame       1
# 9x11 pixels per button, 4x4 pixels for the frame
*FvwmButtons: Geometry    580x59+0-0
*FvwmButtons: Rows        5
*FvwmButtons: Columns     64
*FvwmButtons: BoxSize     fixed
*FvwmButtons: Padding     1 1

# Pop up a module menu directly above the button.
*FvwmButtons: (9x1+3+0, Padding 0, Title "Modules",   \
  Action `Menu Modulepopup rectangle $widthx$height+$lleft+$top o+50 -100m`)

# first row of buttons from left to right:
*FvwmButtons: (3x2+0+1, Icon my_lock.xpm, Action `Exec xlock`)
*FvwmButtons: (3x2+3+1, Icon my_recapture.xpm, Action Recapture)
*FvwmButtons: (3x2+6+1, Icon my_resize.xpm, Action Resize)
*FvwmButtons: (3x2+9+1, Icon my_move.xpm, Action Move)
*FvwmButtons: (3x2+12+1, Icon my_fvwmconsole.xpm, Action 'Module FvwmConsole')

# second row of buttons from left to right:
*FvwmButtons: (3x2+0+3, Icon my_exit.xpm, Action QuitSave)
*FvwmButtons: (3x2+3+3, Icon my_restart.xpm, Action Restart)
*FvwmButtons: (3x2+6+3, Icon my_kill.xpm, Action Destroy)
*FvwmButtons: (3x2+9+3, Icon my_shell.xpm, Action 'Exec rxvt')

# big items
*FvwmButtons: (10x5, Swallow (NoKill, NoCLose) "FvwmPager" 'FvwmPager * * -geometry 40x40-1024-1024')
*FvwmButtons: (6x5, Swallow "FvwmXclock" `Exec xclock \
  -name FvwmXclock -geometry 40x40+0-3000 -padding 1  \
  -analog -chime -bg rgb:90/80/90`)
*FvwmButtons: (13x5, Swallow (NoClose) "FvwmIconMan" 'Module FvwmIconMan')
*FvwmButtons: (20x5, Padding 0, Swallow "xosview"     \
  `Exec /usr/X11R6/bin/xosview -cpu -int -page -net   \
  -geometry 100x50+0-3000 -font 5x7`)

存在的問題(BUGS)

Swallow選項的動做(action)部分若是包含了空格,則必須進行引用。

參考文獻

 

  • WikiNotes/FvwmButtons
  • FVWM/FvwmButtons
相關文章
相關標籤/搜索