קדימה ואחורה עם cal
הפקודה cal של יוניקס היא דרך מאוד נוחה לראות את לוח השנה והיום הנוכחי כשאנחנו בתוך ה Terminal. מאז המעבר ללינוקס אני משתמש בה המון (בעיקר בגלל שלא מצאתי אפליקציית לוח שנה נוחה כמו זאת של המק). כשאני צריך להיזכר מה התאריך היום או מה היה התאריך לפני כמה ימים זה יראה כך:
$ cal
November 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
יש גם אנשים מוזרים שאוהבים לראות את היומן שלהם מלמעלה למטה אז הם המציאו את ncal:
$ ncal
November 2020
Su 1 8 15 22 29
Mo 2 9 16 23 30
Tu 3 10 17 24
We 4 11 18 25
Th 5 12 19 26
Fr 6 13 20 27
Sa 7 14 21 28
אבל בואו, אנחנו לא כאלה.
אחד הפיצ'רים האהובים עליי ב cal קורה כשאנחנו בתחילת או סוף חודש. אם למשל אני רוצה לדעת מה היה התאריך בדיוק לפני שבוע אני לא יכול לראות את זה בהפעלה רגילה של cal כי אנחנו בשבוע הראשון של החודש ושבוע שעבר היה בחודש הקודם. בדיוק בשביל זה אנחנו יכולים להעביר את המתג -3
ל cal שיגרום לה להציג גם את החודש הקודם וגם את החודש הבא:
2020
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
יש עוד מתגים שמאפשרים שליטה מלאה בכמה חודשים אחורה וקדימה להציג, אבל האמת שחודש קודם וחודש הבא מספיק לרוב הדברים, וממילא כשמציגים יותר מדי חודשים אחורה או קדימה קשה להבין מה רואים מול העיניים.
פיצ'ר שני שאני אוהב ב cal הוא היכולת להציג לוח שנה של כל חודש היסטורי או עתידי פשוט באמצעות בחירת החודש והשנה. הנה כמה דוגמאות:
$ cal 11 2019
November 2019
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
$ cal 11 1918
November 1918
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
$ cal 11 2250
November 2250
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ומפה לשם ככל שאני משתמש יותר ב cal שמתי לב שהרבה פעמים מעניין אותי לראות לוח שנה של חודש מסוים לפי היחס שלו לחודש הנוכחי - למשל הייתי רוצה לבקש ממנו להראות את היומן של "לפני 5 חודשים" או "עוד חודשיים". אחרי שלא מצאתי דרך נוחה לקבל את זה מ cal כתבתי פונקציית zsh פשוטה שנראית כך:
cal() {
if [[ ("$1" = -* || "$1" = +*) && "$1" != -3 ]]
then
current_month=$(date +%m)
current_year=$(date +%Y)
month=$(( ($current_month + $1) % 12 ))
year=$(( $current_year + $1 / 12 ))
cal $month $year
else
command cal "$@"
fi
}
ועכשיו אני יכול להעביר מינוס מספר או פלוס מספר כדי לראות את החודש שבא לפני או אחרי X חודשים (חוץ מ -3
אותה השארתי בהתנהגות ברירת המחדל):
$ cal -4
July 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
$ cal +6
May 2020
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31