A Simple Calendar/To-Do Program Using Zenity

用 Zenity 做簡易的行事曆程式

【摘要】敘述將 Zenity 的文字對話框當成簡易的行事曆程式。


【目錄】

    【前言
    【Zenity 的通用選項
    【文字對話框 –text-info 的選項
    【calendar 檔
    【指令檔
    【後語

【前言】

一、Linux 系統大多有 Zenity 程式。它主要是用來顯示對話框,如:月曆、選檔、選色、輸入框等,多達十五種。

其中的 --text-info (文字對話框)是用來顯示文字訊息。雖然可用在「是否願意接受版權」等場合,但因為可以讀取檔案,所以能當成簡易的行事曆。


二、本文曾發表在 Google 的 Blogger,近日再次測試修改,分享於此。


三、因為本例要顯示月曆和行事曆,所以會用到系統的 calcalendar 程式。


四、以下先介紹 Zenity 的選項,再談 calendar 檔的語法,最後解釋所使用的 BASH 指令。


zenity-calendar

【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。在文字檔中顯示如下:

sed-content
#!/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 換成自己喜好的文書程式

【後語】

一、可以設個快捷鍵來執行這個指令檔。

二、不用另外安裝行事曆程式,將系統有的程式稍微變通一下就可以用了,是本文的重點。


發表留言