用 Zenity 做簡易的 Memo 程式
【摘要】敘述將 Zenity 的文字對話框當成簡易的文書程式。
【目錄】
【前言】【Zenity 的通用選項】
【文字對話框 –text-info 的選項】
【原理】
【指令檔】
【後語】
【前言】
一、Linux 系統大多有 Zenity 程式。它主要是用來顯示對話框,如:月曆、選檔、選色、輸入框等,多達十五種。
其中的 --text-info
(文字對話框)是用來顯示文字訊息。雖然可用在「是否願意接受版權」等場合,但因為可以讀取檔案並編輯內容,所以能當成簡易的備忘錄。
二、本文曾發表在 Google 的 Blogger,近日再次測試修改,分享於此。
三、以下先介紹 Zenity 的通用選項,再談文字對話框 --text-info
的選項,最後解釋所使用的 BASH 指令。
【Zenity 的通用選項】
--title=TITLE
對話框標題
--window-icon=ICONPATH
視窗圖示
--width=WIDTH
對話框之寬
--height=HEIGHT
對話框之高
--timeout=TIMEOUT
自動關閉的秒數
【文字對話框 –text-info 的選項】
--filename=FILENAME
讀取的檔案
--editable
令可更改內容
--checkbox=TEXT
勾選框旁顯示的文字,例如:我已閱讀並接受條件
--ok-label
[OK] 按鈕的標籤
--cancel-label
[Cancel] 按鈕的標籤
【原理】
一、這個文字對話框雖然可以修改內容,但沒有儲存的功能,所以必需想個變通的方法。
此對話框有兩個按鈕:[Cancel] 和 [OK]。
- 按 [Cancel] 會關閉對話框並傳回 1,存在
$?
(離開狀態變數,exit status variable)。 - 按 [OK] 也會關閉對話框,但會在虛擬終端機顯示目前全部的內容,而
$?=0
。
利用這個功能,我們可以檢查 $?
是否為 0。如果是,就將顯示的內容重新導向到檔案,這樣就可以儲存了。
二、假設備忘錄檔名是 zenity.memo,放在自家的 Documents 目錄中。
- 先將要在虛擬終端機顯示的內容重導至系統暫存目錄 /tmp/。
- 然後檢查
$?
是否為 0。 - 若
$?=0
,用暫存目錄的檔案覆寫 $HOME/Documents/zenity.memo。
注意:不能直接重導至 zenity.memo,不然會被清空。
【指令檔】
#!/bin/bash # 定義 memo 的預設檔 DMEMO=$HOME/Documents/zenity.memo # 顯示選檔對話框,可另選他檔 MEMO=$(zenity --file-selection --filename=${DMEMO} --save) # --file-selection:選檔對話框 # --filename:預設檔或目錄 # --save:開啟儲存模式 # 若在選檔對話框按 [Cancel] 按鈕或按鍵盤 [Esc] 鍵,用預設檔 # 若未選他檔,直接按 [OK] 按鈕也是,因已預選 if [ $? -eq 1 ] ; then MEMO=${DMEMO} ; fi # 開啟 memo # 此處將原本的 [OK] 按鈕改名為 [儲存],而 [Cancel] 改為 [取消] # 結束時,若選 [儲存],將內容導至暫存檔 /tmp/zenity.tmp zenity --text-info --title="Zenity Memo - $(basename ${MEMO})" --filename=${MEMO} \ --ok-label "儲存 [Ctrl+Enter]" --cancel-label "取消 [Esc]" \ --editable --width=400 --height=300 > /tmp/zenity.tmp # --text-info:文字對話框 # --title:視窗標題,上面設為檔名 # --filename:顯示此檔內容 # --ok-label:設定 [OK] 按鈕的標籤 # --cancel-label:設定 [Cancel] 按鈕的標籤 # --editable:容許修改內容 # --width:視窗寬度 # --height:視窗高度 # 將內容存回原檔 if [ $? -eq 0 ] ; then cat /tmp/zenity.tmp > ${MEMO} ; fi
【後語】
一、可以設個快捷鍵來執行這個指令檔。
二、不用另外安裝備忘錄/便條程式,將系統有的程式稍微變通一下就可以用了,是本文的重點。