WHEN(1) When 1.1.45 WHEN(1)

when - برنامه تقویم شخصی بسیار ساده و کمینه‌گرا

when

when [options] [commands]

ایده اصلی تنها تایپ `when` در خط فرمان است. نخستین باری که برنامه را اجرا می‌کنید، اطلاعاتی را برای پیکربندی اولیه از شما می‌پرسد. برای ویرایش فایل تقویم در ویرایشگر دلخواه خود، `when e` را اجرا کنید. قالب پایه فایل تقویم به این صورت است:

2003 feb 3 , Fly to Stockholm to accept Nobel Prize.

پس از ایجاد فایل تقویم، اجرای ساده برنامه به‌صورت `when` از خط فرمان، رویدادهای تقویم شما را برای دو هفته آینده چاپ می‌کند.

چاپ رویدادهای پیش‌رو در تقویم شما. (این دستور پیش‌فرض است.)
چاپ تقویم‌ها (شبکه‌هایی شبیه تقویم دیواری، بدون نمایش رویدادها) برای ماه گذشته، ماه جاری و ماه آینده.
فراخوانی ویرایشگر دلخواه شما برای ویرایش فایل تقویم.
چاپ رویدادها برای هفته، ماه یا سال آینده، به‌جای بازه پیش‌فرض دو هفته‌ای.
چاپ روز ژولینی اصلاح‌شده (کاربردی برای یافتن فاصله زمانی میان دو تاریخ).
تنها چاپ تاریخ جاری.

همه گزینه‌های زیر، به جز --help، می‌توانند در فایل تنظیمات تعیین شوند. گزینه‌های بولی (درست/نادرست) را می‌توان در خط فرمان به‌صورت --option یا --nooption، و در فایل تنظیمات با مقداردهی 0 یا 1 تعیین کرد.

چاپ پیام راهنمای خلاصه.
چاپ پیامی کوتاه، شامل نسخه نرم‌افزار.
تنظیم زبان روی LANG. بخش بین‌المللی‌سازی را در ادامه ببینید. این گزینه در حالت عادی مورد نیاز نیست، زیرا زبان به‌صورت خودکار تشخیص داده می‌شود.
گزارش تا چند روز در آینده امتداد یابد. پیش‌فرض: 14
گزارش تا چند روز در گذشته امتداد یابد. همانند گزینه --future، گزینه --past نیز به‌صورت یک آفست نسبت به تاریخ فعلی تفسیر می‌شود، بنابراین معمولاً باید یک مقدار منفی باشد. پیش‌فرض: -1
فایل تقویم شما. حالت پیش‌فرض استفاده از فایلی است که در فایل تنظیمات مشخص شده است، که نخستین بار هنگام اجرای When تنظیم می‌شود.
دستور مورد استفاده برای فراخوانی ویرایشگر شما. پیش‌فرض: "emacs -nw" مثال: when --editor="vim"
تعداد ستون‌های متن برای خروجی (یا 0 اگر نمی‌خواهید سطرها شکسته شوند). پیش‌فرض: 80
--[no]wrap_auto
تلاش برای تشخیص عرض ترمینال و تنظیم عرض خروجی بر همان اساس. این گزینه تنها در صورتی اعمال می‌شود که خروجی یک tty باشد، و تابع حداکثر تعیین‌شده توسط --wrap_max است. هر مقداری را که با --wrap تنظیم شده باشد لغو می‌کند. پیش‌فرض: no
حداکثر تعداد ستون‌های متن برای خروجی (یا -1 اگر سقفی نمی‌خواهید). در ترکیب با --wrap_auto برای حفظ خوانایی در پنجره‌های بسیار بزرگ ترمینال کاربردی است. پیش‌فرض: -1
تعداد ردیف‌های متنی که در پنجره ترمینال جا می‌شوند. هنگام فهرست کردن تقویم، خروجی به این طول بریده می‌شود، مگر اینکه موجب نمایش کمتر از سه روز در آینده شود. اگر گزینه --future به‌صراحت داده شود، یا دستور m یا y استفاده شود، این رفتار لغو می‌شود (حداکثر تعداد ردیف‌ها روی بی‌نهایت تنظیم می‌شود). برای اینکه این گزینه اثر کند، معمولاً باید از --norows_auto نیز استفاده کنید. پیش‌فرض: 40
--[no]rows_auto
تلاش برای تشخیص ارتفاع ترمینال، به‌جای استفاده از مقدار تنظیم‌شده در گزینه --rows. این گزینه تنها در صورتی اعمال می‌شود که خروجی یک tty باشد. هر مقدار تعیین‌شده با --rows را لغو می‌کند. پیش‌فرض: yes
--[no]header
چاپ سرآیندها در بالای خروجی دستورهای i، c، w، m و y. پیش‌فرض: yes
--[no]paging
هنگامی که خروجی طولانی‌تر از مقدار تعیین‌شده توسط rows یا rows_auto باشد، از یک صفحه‌بند برای نمایش خروجی استفاده می‌شود. (متغیرهای محیطی PAGER و LESS رعایت می‌شوند. اگر PAGER تنظیم نشده باشد، پیش‌فرض "less" است.) پیش‌فرض: yes
گزینه‌های اضافی در صورت استفاده از "less" به‌عنوان صفحه‌بند. پیش‌فرض: "-rXFE"
--[no]filter_accents_on_output
آیا نویسه‌های دارای اعراب به نویسه‌های بدون اعراب تبدیل شوند یا خیر. پیش‌فرض: yes، مگر اینکه متغیر محیطی $TERM برابر با "mlterm" یا "xterm" باشد.
--[no]styled_output
اگر خروجی یک ترمینال است، آیا از کدهای ترمینال ANSI برای استایل‌دهی استفاده شود؟ پیش‌فرض: yes
--[no]styled_output_if_not_tty
استایل‌دهی به خروجی حتی اگر ترمینال نباشد. پیش‌فرض: no
اولی تعیین می‌کند که تاریخ امروز هنگام اجرای دستور تقویم (c) چگونه استایل‌دهی شود. دومی تعیین می‌کند که کلمه «today» هنگام اجرای دستور رویدادها (i) چگونه استایل‌دهی شود. پیش‌فرض: bold

استایل خروجی را می‌توان با استفاده از کلیدواژه‌های زیر تعیین کرد: bold، underlined، flashing. برای تغییر رنگ متن، از این کلیدواژه‌ها استفاده کنید: fgblack، fgred، fggreen، fgyellow، fgblue، fgpurple، fgcyan، fgwhite. برای تغییر رنگ پس‌زمینه، از کلیدواژه‌های مشابه استفاده کنید، اما با bg به‌جای fg. مثال: when --calendar_today_style="bold,fgred,bgcyan" c

هدایت فایل تقویم از طریق یک برنامه (pipe) پیش از خواندن آن. پیش‌فرض: ""
وانمود کردن اینکه امروز تاریخ دیگری است.
--[no]neighboring_months
رفتار پیش‌فرض "when c" چاپ تقویم‌های ماه گذشته، ماه جاری و ماه آینده است. با انتخاب --noneighboring_months، می‌توانید از چاپ ماه‌هایی که در محدوده تعیین‌شده توسط --past و --future نیستند خودداری کنید.
--[no]monday_first
شروع هفته از دوشنبه به‌جای یکشنبه. پیش‌فرض: no
--[no]orthodox_easter
محاسبه عید پاک بر اساس تقویم کلیسای ارتدکس شرقی. پیش‌فرض: no
--[no]ampm
نمایش ساعت روز با استفاده از زمان ۱۲-ساعته، به‌جای زمان ۲۴-ساعته. همچنین بر تجزیه زمان‌های ورودی نیز تأثیر می‌گذارد. پیش‌فرض: yes
هنگامی که زمان‌ها با ساعت‌های کمتر از x وارد شوند و AM یا PM به‌صراحت مشخص نشده باشد، به‌طور خودکار فرض می‌شود که PM هستند نه AM. پیش‌فرض: 0
--[no]literal_only
تنها نمایش رویدادهایی که به‌صورت تاریخ‌های صریح داده شده‌اند، مانند "2008 jul 4". عدم نمایش رویدادهایی که با عبارت‌ها تعریف شده‌اند، مانند رویدادهای دوره‌ای نظیر "w=thu". پیش‌فرض: no
این گزینه‌ها به‌طور داخلی برای ساخت و آزمایش استفاده می‌شوند.

When یک برنامه تقویم شخصی بسیار ساده است که برای کاربران حرفه‌ای یونیکس طراحی شده که به دنبال برنامه‌ای کمینه‌گرا هستند. این برنامه می‌تواند کارهایی را که باید در تاریخ‌های مشخص انجام دهید پیگیری کند. برنامه‌های تقویم و «مدیریت اطلاعات شخصی» زیادی وجود دارند، پس چه دلایلی برای استفاده از When وجود دارد؟

برنامه‌ای بسیار کوتاه و ساده است، بنابراین به راحتی می‌توانید خودتان آن را دستکاری کنید. When حدود ۲۴۰۰ خط کد پرل است (بدون احتساب مستندات)، در حالی که برای مثال تقویم خط فرمانی Khal حدود ۱۷۰۰۰ خط و Calcurse حدود ۲۴۰۰۰ خط است.
به هیچ کتابخانه‌ای وابسته نیست، بنابراین نصب آن آسان است. شما باید بتوانید آن را روی هر سیستمی که Perl در دسترس است نصب کنید، حتی اگر مجوزهای نصب کتابخانه‌ها را نداشته باشید.
قالب فایل آن یک فایل متنی ساده است که می‌توانید آن را در ویرایشگر دلخواه خود ویرایش کنید.

اگرچه When باید تقریباً روی هر سیستم‌عاملی که Perl در آن در دسترس است اجرا شود، در این سند فرض بر این است که از توزیعی از یونیکس استفاده می‌کنید.

هنگامی که به عنوان کاربر ریشه (root) وارد شده‌اید، دستور زیر را اجرا کنید:

make install

When را برای نخستین بار با استفاده از این دستور اجرا کنید:

when

از شما اطلاعاتی که برای راه‌اندازی فایل تقویم لازم است پرسیده خواهد شد.

اگر When را پس از راه‌اندازی اولیه دوباره اجرا کنید، باید یک خط متن چاپ کند و تاریخ جاری را به شما اعلام کند. چیز دیگری چاپ نخواهد کرد، زیرا فایل تقویم شما خالی است و هیچ قرار ملاقات پیش‌رویی ندارید.

اکنون می‌توانید رویدادها را در فایل تقویم خود وارد کنید. هر رویداد یک خط متن شبیه به این است:

2003 feb 3 , Fly to Stockholm to accept Nobel Prize.

یک راه راحت برای ویرایش فایل تقویم استفاده از این دستور است:

when e

این دستور شما را وارد ویرایشگر دلخواهتان می‌کند (همان ویرایشگری که هنگام اجرای نخستین بار When انتخاب کردید).

تاریخ باید در قالب سال-ماه-روز باشد، اما می‌توانید ماه را به حروف بنویسید یا آن را به‌صورت عدد وارد کنید. (نام‌های ماه‌ها به حروف بزرگ و کوچک حساس نیستند، و تفاوتی ندارد که February را به‌صورت F، Fe، Feb، Februa یا هر چیز دیگر نشان دهید. فقط باید یک تطابق منحصربه‌فرد باشد. می‌توانید یک نقطه پایانی (.) بگذارید که نادیده گرفته خواهد شد. در زبان چکی، "cer" می‌تواند به‌عنوان اختصار Cerven و "cec" برای Cervenec استفاده شود.) فاصله‌های خالی اضافی تا پیش از رسیدن به متن اصلی پس از کاما نادیده گرفته می‌شوند. خطوط خالی و خطوطی که با علامت # آغاز می‌شوند نادیده گرفته می‌شوند.

اگر اکنون When را اجرا کنید، فهرستی از تمام رویدادهای فایل تقویم شما را که در بازه زمانی خاصی قرار دارند چاپ می‌کند. (بازه از دیروز آغاز می‌شود. When تلاش می‌کند انتهای بازه زمانی را طوری انتخاب کند که خروجی در پنجره ترمینال شما جا شود، اما همیشه حداقل سه روز و حداکثر دو هفته در آینده خواهد بود.) برای دیدن تمام رویدادهای ماه آینده، دستور ``when m'' را اجرا کنید، و به همین ترتیب برای یک سال از y، یا برای یک هفته از w استفاده کنید.

اگر دستور ``when c'' را اجرا کنید، When تقویم‌های ماه گذشته، ماه جاری و ماه آینده را چاپ می‌کند.

می‌توانید این دستورها را ترکیب کنید. برای نمونه، ``when cw'' تقویم‌ها را چاپ کرده و سپس رویدادهای هفته آینده را به شما نشان می‌دهد.

برای رویدادهایی که سالی یک بار رخ می‌دهند، مانند جشن‌های تولد و سالگردها، می‌توانید از علامت * به‌جای سال استفاده کنید:

* dec 25 , Christmas

یا از یک سال به همراه علامت ستاره استفاده کنید:

1920* aug 29 , Charlie Parker turns \a, born in \y

در مثال دوم، \a به شما می‌گوید که چارلی پارکر امسال چند ساله می‌شد، و \y سال تولد او را بازتولید می‌کند، یعنی خروجی به این صورت خواهد بود:

today     2003 Aug 29 Charlie Parker turns 83, born in 1920

برای کارهایی که باید هر هفته انجام دهید، می‌توانید از عبارتی به شکل w=xxx استفاده کنید، که در آن xxx چند حرف نخست نام روز هفته در زبان شما است. (باید حروف کافی برای رفع ابهام ارائه دهید، مثلاً در انگلیسی، w=th یا w=tu، نه صرفاً w=t.) مثال:

w=sun , go to church, 10:00

شما همچنین می‌توانید آزمون‌های پیشرفته‌تری نسبت به این انجام دهید؛ برای اطلاعات بیشتر، بخش «آزمون‌های پیشرفته» را در ادامه ببینید. در اینجا نحوه تنظیم برخی از تعطیلات متداول آمده است:

m=jan & w=mon & a=3 , Martin Luther King Day
* feb 14 , Valentine's Day
m=feb & w=mon & a=3 , Washington's Birthday observed
m=may & w=sun & a=2 , Mother's Day
m=may & w=mon & b=1 , Memorial Day
m=jun & w=sun & a=3 , Father's Day
* jul 4 , Independence Day
m=sep & w=mon & a=1 , Labor Day
m=oct & w=mon & a=2 , Columbus Day
m=nov & w=thu & a=4 , Thanksgiving (U.S.)
m=oct & w=mon & a=2 , Thanksgiving (Canada)
m=may & w=mon & (d>=18 & d<=24) , Victoria Day
* nov 11 , Armistice Day
e=47 , Mardi Gras
e=46 , Ash Wednesday
e=7 , Palm Sunday
e=0 , Easter Sunday
e=0-49 , Pentecost (49 days after easter)

در ایالات متحده، هنگامی که برخی تعطیلات در آخر هفته می‌افتند، کارکنان فدرال و همچنین بسیاری از کارمندان بخش خصوصی، دوشنبه یا جمعه را تعطیل هستند. فهرست کامل در نشانی http://www.opm.gov/operating_status_schedules/fedhol/2011.asp آمده است. اگر می‌خواهید هم تعطیلی و هم روزی را که از کار مرخصی دارید یادآوری کنید، نمونه‌ای از نحوه تنظیم آن در اینجا آمده است:

* jul 4 , Independence Day
m=jul & c=4 , Independence Day (observed as a federal holiday)

خطی که با نویسه # آغاز شود به‌عنوان یک یادداشت (کامنت) در نظر گرفته شده و نادیده گرفته می‌شود. خطی که فقط شامل نویسه‌های فاصله خالی باشد نیز نادیده گرفته می‌شود.

When حداقل پشتیبانی جزئی از زبان‌های چکی، دانمارکی، هلندی، انگلیسی، فرانسوی، آلمانی، یونانی، مجارستانی، ایتالیایی، لهستانی، رومانیایی، اسپانیایی، اوکراینی و پرتغالی دارد. اگر When به زبان شما ترجمه نشده باشد، یا تنها به صورت جزئی ترجمه شده باشد، متنی که ترجمه نشده است به زبان انگلیسی نمایش داده خواهد شد. When باید به طور خودکار زبانی را که استفاده می‌کنید تشخیص دهد (از طریق متغیر محیطی $LANG شما)، و اگر When به آن زبان ترجمه شده باشد، خروجی When به زبان شما خواهد بود، و When همچنین انتظار دارد که از آن زبان در فایل تقویم خود برای نام‌های ماه‌ها و روزهای هفته استفاده کنید.

فایل تقویم شما باید در قالب UTF-8 باشد (یا ASCII، که زیرمجموعه‌ای از UTF-8 است). اگر فایل تقویم شما در کدگذاری دیگری مانند ISO-8859 باشد، When معمولاً قادر به تشخیص آن خواهد بود و از خواندن آن خودداری می‌کند. گزینه‌های خط فرمان نیز می‌توانند شامل UTF-8 باشند.

برخی شبیه‌سازهای ترمینال (aterm و...) نویسه‌های دارای اعراب را به صورت نامفهوم نمایش می‌دهند، اما برخی دیگر (mlterm، xterm...) می‌توانند آن‌ها را به درستی نمایش دهند. When متغیر محیطی $TERM را بررسی می‌کند، و اگر برابر با "mlterm" یا "xterm" باشد، نویسه‌های دارای اعراب نمایش داده می‌شوند. در غیر این صورت، آن‌ها از خروجی فیلتر می‌شوند. می‌توانید با قرار دادن خطی مانند

filter_accents_on_output = 0

یا

filter_accents_on_output = 1

در فایل تنظیمات خود، این رفتار را لغو کنید. خوشحال می‌شوم از کاربرانی بشنوم که می‌توانند سازوکار بهتری برای این کار به‌جای تلاش برای تفسیر متغیر $TERM پیشنهاد کنند.

در ورودی، استفاده از اعراب مجاز است، اما الزامی نیست؛ مثلاً در یک فایل ورودی فرانسوی، تاریخ 2005 Fev 17 می‌تواند با e دارای اعراب یا بدون اعراب وارد شود، و هر دو کار خواهند کرد. اگر یک ماه یا روز ورودی هفته با هیچ‌یک از موارد مربوط به زبان شما مطابقت نداشته باشد، When تلاش می‌کند آن را به‌جای آن به‌عنوان انگلیسی تفسیر کند.

می‌توانید خطی مانند

language = fr

در فایل تنظیمات خود قرار دهید تا زبان خود را تنظیم کنید، یا گزینه --language را در خط فرمان مشخص کنید، اما اگر متغیر محیطی $LANG شما به درستی تنظیم شده باشد، این کار لازم نیست.

اکثر افراد فایل تنظیمات خود را در ~/.when/preferences خواهند داشت. کسانی که ترجیح می‌دهند دایرکتوری خانگی خود را از فایل‌های نقطه‌دار خلوت نگه دارند می‌توانند از یکی از احتمالات استاندارد زیر که توسط استاندارد XDG تعریف شده است استفاده کنند. به ترتیب نزولی اولویت: ${WHEN_CONFIG_HOME}/preferences، ${XDG_CONFIG_HOME}/when/preferences، $HOME/.config/when/preferences، و $HOME/.when/preferences.

هر خط شامل چیزی شبیه به این است:

variable = value

فاصله‌های خالی در همه جا به جز درون مقدار نادیده گرفته می‌شوند. نام‌های متغیرها به حروف بزرگ و کوچک حساس نیستند. خطوط خالی نادیده گرفته می‌شوند. یادداشت‌ها مجاز هستند، با پیشوند #.

یک دستور مفید که پوسته شما هنگام ورود به سیستم اجرا کند این است:

when --past=0 --future=1

برای چاپ تقویم برای یک سال کامل پیش‌رو:

when --past=0 --future=365 c

اگر فراموش کنید هر روز به تقویم خود نگاه کنید، تقویم هیچ فایده‌ای برای شما نخواهد داشت. یک راه آسان برای اینکه هنگام ورود به سیستم ظاهر شود این است که فایل .xsession یا .xinitrc خود را به این شکل درآورید:

/usr/bin/when --past=0 --future=1 &>~/when.today
emacs -geometry 70x25 -bg bisque ~/when.today &
startkde

اگر یک مدیر ورود گرافیکی روی سیستم شما تنظیم شده باشد از فایل .xsession استفاده می‌شود، و اگر تنظیم نشده باشد از .xinitrc استفاده می‌شود. در این مثال، خط اول تقویم شما را در یک فایل خروجی می‌دهد. مسیر کامل به برنامه When داده شده است، زیرا متغیر مسیر (PATH) پوسته شما هنگام اجرای این خط هنوز به درستی مقداردهی اولیه نشده است. خط دوم یک پنجره گرافیکی emacs را باز می‌کند، که رنگ‌آمیزی متمایزی دارد تا توجه شما را جلب کند. خط آخر مدیر پنجره شما را اجرا می‌کند، که در این مثال KDE است. از هر مدیر پنجره‌ای که استفاده می‌کنید، فقط مطمئن شوید که خط از پیش موجود در فایل را که آن را اجرا می‌کند حفظ کنید، و مطمئن شوید که آن خط دقیقاً آخرین خط در فایل باشد.

اگر می‌خواهید رویدادهای مختلفی که در یک روز قرار دارند با ترتیب خاصی چاپ شوند، ساده‌ترین راه این است که آن‌ها را به همان ترتیب در فایل ورودی قرار دهید. با این حال، این روش زمانی که برخی از رویدادها در تاریخ‌هایی باشند که با عبارت‌ها تعیین می‌شوند و نه به‌صورت صریح، کار نخواهد کرد. رایج‌ترین دلیل برای تمایل به چنین کاری این است که کارهایی دارید که باید در ساعات خاصی از روز انجام دهید، و می‌خواهید بر اساس زمان مرتب شوند. در این وضعیت، می‌توانید زمانی را در ابتدای متن رویداد مشخص کنید، و When آن را تشخیص داده و رویدادها را بر اساس زمان مرتب می‌کند. زمان‌ها می‌توانند در قالب h:mm یا hh:mm باشند. اگر --ampm تنظیم شده باشد، پسوند اختیاری a یا p می‌تواند برای AM یا PM استفاده شود، مثلاً 9:30a برای 9:30 ق.ظ. اگر از زمان AM/PM استفاده می‌کنید، می‌توانید به‌عنوان مثال --auto_pm=9 را نیز تنظیم کنید تا ساعت‌های کمتر از ۹ به‌طور خودکار به‌عنوان PM فرض شوند. در اینجا یک مثال آورده شده است:

2010 apr 25 , 7:00 dinner at the anarcho-syndicalist commune
w=sun , 10:00 church

روز ۲۵ آوریل ۲۰۱۰ یک یکشنبه است، بنابراین در آن تاریخ هر دوی این رویدادها نمایش داده خواهند شد. اگر --auto_pm روی 8 یا بالاتر تنظیم شده باشد، 7:00 به‌طور خودکار به‌عنوان 7:00 PM تفسیر می‌شود، و قرار شام در زیر مراسم صبحگاهی کلیسا نمایش داده خواهد شد.

علاوه بر w که در بالا مورد بحث قرار گرفت، متغیرهای متعدد دیگری وجود دارند که می‌توانید آزمایش کنید:

w  -  روز هفته
m  -  ماه
d  -  روز ماه
y  -  سال
j  -  شماره روز ژولینی اصلاح‌شده
a  -  ۱ برای ۷ روز نخست ماه، ۲ برای ۷ روز بعدی و غیره
b  -  ۱ برای ۷ روز پایانی ماه، ۲ برای ۷ روز پیش از آن و غیره
c  -  در دوشنبه یا جمعه، برابر با روز ماه نزدیک‌ترین روز آخر هفته؛ در غیر این صورت -1
n  -  تعداد روزها در این ماه
e  -  تعداد روزها تا عید پاک (غربی) امسال
z  -  روز سال (۱ در روز سال نو)

می‌توانید ماه‌ها را یا به‌صورت عدد m=2، یا به‌صورت نام در زبان خود m=feb مشخص کنید. همچنین می‌توانید از عملگرهای منطقی & (و) و | (یا) استفاده کنید. مثال زیر به شما یادآوری می‌کند که حقوق کارکنان خود را در روز اول و پانزدهم هر ماه پرداخت کنید:

d=1 | d=15 , Pay employees.

این مثال به شما یادآوری می‌کند که در آخرین شنبه هر ماه با گروه موسیقی خود تمرین کنید:

w=sat & b=1 , Rehearse with band.

دو خط زیر:

* dec 25 , Christmas
m=dec & d=25 , Christmas

هر دو دقیقاً یک کار را انجام می‌دهند، اما نسخه اول برای درک ساده‌تر است و باعث اجرای سریع‌تر برنامه می‌شود. (هنگامی که یک آزمون انجام می‌دهید، When باید تمام روزهای بازه تاریخی درخواستی شما را بررسی کند و آزمون را برای هر یک از آن روزها ارزیابی نماید. در رایانه من، اگر یک تقویم برای کل سال با فایلی که شامل ۱۰ آزمون ساده است چاپ کنم، چند ثانیه طول می‌کشد.) پرانتزها نیز می‌توانند استفاده شوند.

بسته به ملیت و دین شما، احتمالاً تعطیلات متعددی دارید که در تاریخ‌های ثابت قرار ندارند. در مسیحیت، بسیاری از این‌ها («اعیاد متحرک») نسبت به یکشنبه عید پاک محاسبه می‌شوند، به همین دلیل متغیر e مفید است.

یک عملگر نقیض (not) وجود دارد، !:

w=fri & !(m=dec & d=25) , poker game

یک عملگر باقیمانده، %، و یک عملگر تفریق، - وجود دارند. با استفاده از این‌ها در کنار متغیر j، برای تجزیه‌گر کوچک When این امکان فراهم می‌شود که شاهکار زیر را انجام دهد:

!(j%14-1) , do something every other Wednesday

منطق پشت این ترفند جالب به این صورت است. ابتدا، با استفاده از دستور `when j --now="2005 jan 26";` تعیین می‌کنیم که اولین چهارشنبه‌ای که می‌خواهیم این کار را در آن انجام دهیم دارای یک روز ژولینی است که در پیمانه ۱۴ برابر با ۱ است. سپس این عبارت را طوری می‌نویسیم که اگر چهارشنبه‌ای باشد که روز ژولینی آن در پیمانه ۱۴ برابر با ۱ باشد، مقدار داخل پرانتز صفر شود و نقیض منطقی آن مقدار درست (true) تولید کند.

شرکت‌پذیری عملگرها و اولویت آن‌ها (از بالاترین به پایین‌ترین) به این صورت است:

left    %
left    -
left    < > <= >=
left    = !=
right   !
left    &
left    |

اگر فایل تقویم شما بیش از حد بزرگ شود، ممکن است ترجیح دهید آن را به بخش‌های کوچک‌تر تقسیم کنید -- شاید یکی برای سالگردها و تولدها، یکی برای تعطیلات تبتی و غیره. یک راه آسان برای انجام این کار نصب برنامه m4 است؛ خط

prefilter = m4 -P

را در فایل تنظیمات خود قرار دهید، و سپس خطوطی مانند زیر را در فایل تقویم خود بگذارید:

m4_include(/home/yourname/.when/birthdays)

$LANG برای تشخیص خودکار زبان کاربر

$TERM برای تلاش جهت تشخیص اینکه آیا شبیه‌ساز ترمینال می‌تواند نویسه‌های دارای اعراب را نمایش دهد یا خیر

$HOME/.when/calendar - مکان پیش‌فرض برای تقویم کاربر (که در فایل تنظیمات به آن اشاره می‌شود)

$HOME/.when/preferences - تنظیمات کاربر. (برای مکان‌های جایگزین که از استاندارد XDG پیروی می‌کنند، بخش بالا را ببینید.)

نام فایل تقویم نمی‌تواند شامل نویسه‌های یونیکد باشد. دلیل این امر این است که تابع File::Glob::glob() در پرل به درستی از یونیکد پشتیبانی نمی‌کند. پیوندهای زیر را ببینید: http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod و http://stackoverflow.com/questions/18436275/should-perls-fileglob-always-be-post-filtered-through-utf8decode

وب‌سایت رسمی When در نشانی زیر در دسترس است:

http://www.lightandmatter.com/when/when.html

که در آن همواره می‌توانید آخرین نسخه نرم‌افزار را بیابید.

برنامه When توسط Ben Crowell نوشته شده است، http://www.lightandmatter.com/personal تفسیرگر جدید و بهبودیافته برای عبارت‌های تاریخ توسط Dimiter Trendafilov نوشته شده است.

Copyright (C) 2003-2012 by Benjamin Crowell.

When یک نرم‌افزار آزاد است؛ می‌توانید آن را تحت شرایط مجوز عمومی گنو (GPL) یا به‌صورت اختیاری مجوز پرل، بازتوزیع کرده و/یا تغییر دهید.

2024-07-14 1.1.45