1.カレンダーって複数表示が絶対必要だ・・・と思う
年が明けての初めての投稿です。本年もよろしくお願いしま
さて、conky にカレンダーを表示させ、ちょっとした日付の確認に複数月のカレンダーを表示、当日の曜日の色を変えて運用していました(https://github.com/xyphanajay/conky/blob/master/.conkyrcを借用)。が、この変数方式では、当日だけでなく翌月の同じ日付をマークしたりするので、何とか当日だけをマークするように設定できないかと考えていました。
完成形は、こんな状態です。
2.完成したコード
- cal from util-linux 2.39.3
- sed (GNU sed) 4.9
- conky 1.19.6_pre compiled 2023-12-22 for Linux x86_64
${execpi 60 cal -n 2 --color=always | sed -r 's/\x1b\[7m(\s[0-9]{1}|[0-9]{2})\x1b\[0m/${color red}\1${color}/g'}
カレンダー(2ヶ月表示)を60秒ごとに更新し、当日だけを赤色で表示するもの。
3.ちょっと解説
このコードを分解してみます
conkyの命令 | ${execpi 60 | ${color red} | ${color} | | | |||
cal,sedの命令 | cal -n 2 –color=always | sed -r ‘s/\x1b\[7m(\s[0-9]{1}|[0-9]{2})\x1b\[0m/ | \1 | /g’ |
(1)Conky の命令
${execpi 60 ・A・${color red} ・B・ ${color}}
「conkyが 60秒ごとにA を実行し、Bを赤色で表示しなさい」
(2)cal と sed の命令
cal -n 2 –color=always
cal – n 2 は 当月と翌月 cal -n 3 なら翌々月まで表示します。 なお、cal -3 オプションは前月、当月、翌月の3ヶ月表示が可能です。
cal –color=always で無理やり制御文字を表示させます。これをsed変換に使用するためです。
|
パイプ処理です。「左側の命令 | 右側の命令」で、左側の処理結果を右側の処理に渡します。
sed -r ‘s/\x1b\[7m(\s[0-9]{1}|[0-9]{2})\x1b\[0m//g’
cal -n 2 –color=always の出力結果は、以下のように半角スペース数字を基本に、当日だけをカラー化する制御文字と色番号で成り立っています。制御文字分だけ表示が横にずれています。この制御文字だけを消去し、それをconkyでカラー化すれば、当日だけが確実にカラー化されます
※ 0m/ と /g’の間には、\1 が記載されていますが、ワードプレス上では無視されて表示されていません。
- sed -r ‘ s/ 制御文字文のパターン / 置換パターン / g ‘ が基本形で、
- 制御文字分のパターンは \x1b\[7m ・・・\x1b\[0m の分は、^[[7m ^[[0m が当日の数字を反転表示する制御文字とカラーコード
- (\s[0-9]{1}|[0-9]{2}) はスペースと1桁数字 または 2桁数字
- \1 は前段で処理したものを後ろで参照すること。「後方参照」というらしい。
このあたりは「正規表現」というパターン処理技術を利用して、マッチした制御コードとカラーコードを削除し、conkyが表示するところで「参照」させるというもの
4.参考ページ
- http://blog.livedoor.jp/isooki/archives/52080761.html
- https://linux.just4fun.biz/?%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E3%82%92%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E9%99%A4%E3%81%8F%E6%96%B9%E6%B3%95
- https://www-creators.com/archives/4241
コメント