用 Zenity 做簡易的行事曆程式
【摘要】敘述將 Zenity 的文字對話框當成簡易的行事曆程式。
【目錄】
【前言】【Zenity 的通用選項】
【文字對話框 –text-info 的選項】
【calendar 檔】
【指令檔】
【後語】
【前言】
一、Linux 系統大多有 Zenity 程式。它主要是用來顯示對話框,如:月曆、選檔、選色、輸入框等,多達十五種。
其中的 --text-info
(文字對話框)是用來顯示文字訊息。雖然可用在「是否願意接受版權」等場合,但因為可以讀取檔案,所以能當成簡易的行事曆。
二、本文曾發表在 Google 的 Blogger,近日再次測試修改,分享於此。
三、因為本例要顯示月曆和行事曆,所以會用到系統的 cal
和 calendar
程式。
四、以下先介紹 Zenity 的選項,再談 calendar 檔的語法,最後解釋所使用的 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] 按鈕的標籤
【calendar 檔】
calendar
程式的預設目錄是 $HOME/.calendar/,而預設讀取的檔案是其中的 calendar 檔。
calendar 檔的格式如下:
LANG=utf-8 01 01 元旦 01 28 春節 04 04 清明 05 30 端午 10 04 中秋
- 首先定義編碼。
- 再來就是行事曆,其中日期和事項用跳格(Tab)分開。
- 日期有很多格式,最簡單的是兩個數字:前者是月,後者是日,中間用空格(Space)分開。
- 不符合語法的行會被略過。
【指令檔】
注意:以下第一個 sed
指令中有控制字元,在 html 中無法顯示,但原始檔可以。各位要複製的話,請按 Ctrl+U
。在文字檔中顯示如下:
#!/bin/bash # 將要顯示的月曆、行事曆先儲存在系統的暫存目錄中 cal -A 1 -B 1 | sed -r 's/ _(.)_(.) /\[\1\2\]/; s/^/ /' > /tmp/cal-tmp.txt && echo "" >> /tmp/cal.txt && calendar -A 6 | sed -r 's/^/\t\t/' >> /tmp/cal-tmp.txt # cal:顯示月曆的程式 # -A:顯示當月之後的月曆 # -A 1:顯示下一個月的月曆 # -B:顯示當月之前的月曆 # -B 1:顯示前一個月的月曆 # sed 段:若在虛擬終端機顯示 cal 的月曆,當日會被反白(highlight) # 但在純文字檔中,則顯示其控制字元 [BS] 等,造成排列不整齊 # 若 cal 加 -h 選項不反白,當日又不明顯,所以把它改為方括號 # 另外,也在行首加空格調整位置 # > /tmp/cal-tmp.txt:先儲存在暫存目錄中 # echo "":空一行 # calendar:顯示行事曆的程式 # -A 6:行事曆多顯示未來 6 天的內容,也就是共顯示一週 # sed 段:行首加空白調整位置 # >> /tmp/cal-tmp.txt:將內容附加於前檔 # 用 Zenity 顯示此暫存檔的內容 zenity --text-info \ --title="月曆 與 行事曆" --width=650 --height=500 --filename=/tmp/cal-tmp.txt \ --ok-label "編輯原檔 [Enter]" --cancel-label "關閉窗格 [Esc]" # --text-info:文字對話框 # --title:視窗標題 # --width:視窗寬度 # --height:視窗高度 # --filename:顯示此檔的內容 # --ok-label:設定 [OK] 按鈕的標籤 # --cancel-label:設定 [Cancel] 按鈕的標籤 # 定義按鈕的動作 # 用此對話框的兩個按鈕來關閉窗格或開啟 $HOME/.calendar/calendar 檔,以便修改 if [ $? -eq 0 ] ; then geany "$HOME/.calendar/calendar" ; fi # 按 [編輯原檔 [Enter]](即原本的 [OK])按鈕會關閉對話框,傳回 0 # 所以檢查 $? 是否為 0;若是,用文書程式開啟 $HOME/.calendar/calendar 檔。 # 請將 geany 換成自己喜好的文書程式
【後語】
一、可以設個快捷鍵來執行這個指令檔。
二、不用另外安裝行事曆程式,將系統有的程式稍微變通一下就可以用了,是本文的重點。