.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "WHEN 1" .TH WHEN 1 2024-07-14 1.1.45 "When 1.1.45" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" when \- برنامه تقویم شخصی بسیار ساده و کمینه‌گرا .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" when .PP when [options] [commands] .PP ایده اصلی تنها تایپ `when` در خط فرمان است. نخستین باری که برنامه را اجرا می‌کنید، اطلاعاتی را برای پیکربندی اولیه از شما می‌پرسد. برای ویرایش فایل تقویم در ویرایشگر دلخواه خود، `when e` را اجرا کنید. قالب پایه فایل تقویم به این صورت است: .PP .Vb 1 \& 2003 feb 3 , Fly to Stockholm to accept Nobel Prize. .Ve .PP پس از ایجاد فایل تقویم، اجرای ساده برنامه به‌صورت `when` از خط فرمان، رویدادهای تقویم شما را برای دو هفته آینده چاپ می‌کند. .SH "دستورها (COMMANDS)" .IX Header "COMMANDS" .IP \fBi\fR 8 .IX Item "i" چاپ رویدادهای پیش‌رو در تقویم شما. (این دستور پیش‌فرض است.) .IP \fBc\fR 8 .IX Item "c" چاپ تقویم‌ها (شبکه‌هایی شبیه تقویم دیواری، بدون نمایش رویدادها) برای ماه گذشته، ماه جاری و ماه آینده. .IP \fBe\fR 8 .IX Item "e" فراخوانی ویرایشگر دلخواه شما برای ویرایش فایل تقویم. .IP \fBw\fR,\fBm\fR,\fBy\fR 8 .IX Item "w,m,y" چاپ رویدادها برای هفته، ماه یا سال آینده، به‌جای بازه پیش‌فرض دو هفته‌ای. .IP \fBj\fR 8 .IX Item "j" چاپ روز ژولینی اصلاح‌شده (کاربردی برای یافتن فاصله زمانی میان دو تاریخ). .IP \fBd\fR 8 .IX Item "d" تنها چاپ تاریخ جاری. .SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" همه گزینه‌های زیر، به جز \-\-help، می‌توانند در فایل تنظیمات تعیین شوند. گزینه‌های بولی (درست/نادرست) را می‌توان در خط فرمان به‌صورت \-\-option یا \&\-\-nooption، و در فایل تنظیمات با مقداردهی 0 یا 1 تعیین کرد. .IP \-\-help 8 .IX Item "--help" چاپ پیام راهنمای خلاصه. .IP \-\-version 8 .IX Item "--version" چاپ پیامی کوتاه، شامل نسخه نرم‌افزار. .IP \-\-language=LANG 8 .IX Item "--language=LANG" تنظیم زبان روی LANG. بخش بین‌المللی‌سازی را در ادامه ببینید. این گزینه در حالت عادی مورد نیاز نیست، زیرا زبان به‌صورت خودکار تشخیص داده می‌شود. .IP \-\-future=DAYS 8 .IX Item "--future=DAYS" گزارش تا چند روز در آینده امتداد یابد. پیش‌فرض: 14 .IP \-\-past=DAYS 8 .IX Item "--past=DAYS" گزارش تا چند روز در گذشته امتداد یابد. همانند گزینه \-\-future، گزینه \&\-\-past نیز به‌صورت یک آفست نسبت به تاریخ فعلی تفسیر می‌شود، بنابراین معمولاً باید یک مقدار منفی باشد. پیش‌فرض: \-1 .IP \-\-calendar=FILE 8 .IX Item "--calendar=FILE" فایل تقویم شما. حالت پیش‌فرض استفاده از فایلی است که در فایل تنظیمات مشخص شده است، که نخستین بار هنگام اجرای When تنظیم می‌شود. .IP \-\-editor=COMMAND 8 .IX Item "--editor=COMMAND" دستور مورد استفاده برای فراخوانی ویرایشگر شما. پیش‌فرض: "emacs \-nw" مثال: when \-\-editor="vim" .IP \-\-wrap=COLUMNS 8 .IX Item "--wrap=COLUMNS" تعداد ستون‌های متن برای خروجی (یا 0 اگر نمی‌خواهید سطرها شکسته شوند). پیش‌فرض: 80 .IP \-\-[no]wrap_auto 8 .IX Item "--[no]wrap_auto" تلاش برای تشخیص عرض ترمینال و تنظیم عرض خروجی بر همان اساس. این گزینه تنها در صورتی اعمال می‌شود که خروجی یک tty باشد، و تابع حداکثر تعیین‌شده توسط \-\-wrap_max است. هر مقداری را که با \-\-wrap تنظیم شده باشد لغو می‌کند. پیش‌فرض: no .IP \-\-wrap_max=COLUMNS 8 .IX Item "--wrap_max=COLUMNS" حداکثر تعداد ستون‌های متن برای خروجی (یا \-1 اگر سقفی نمی‌خواهید). در ترکیب با \-\-wrap_auto برای حفظ خوانایی در پنجره‌های بسیار بزرگ ترمینال کاربردی است. پیش‌فرض: \-1 .IP \-\-rows=ROWS 8 .IX Item "--rows=ROWS" تعداد ردیف‌های متنی که در پنجره ترمینال جا می‌شوند. هنگام فهرست کردن تقویم، خروجی به این طول بریده می‌شود، مگر اینکه موجب نمایش کمتر از سه روز در آینده شود. اگر گزینه \-\-future به‌صراحت داده شود، یا دستور m یا y استفاده شود، این رفتار لغو می‌شود (حداکثر تعداد ردیف‌ها روی بی‌نهایت تنظیم می‌شود). برای اینکه این گزینه اثر کند، معمولاً باید از \-\-norows_auto نیز استفاده کنید. پیش‌فرض: 40 .IP \-\-[no]rows_auto 8 .IX Item "--[no]rows_auto" تلاش برای تشخیص ارتفاع ترمینال، به‌جای استفاده از مقدار تنظیم‌شده در گزینه \-\-rows. این گزینه تنها در صورتی اعمال می‌شود که خروجی یک tty باشد. هر مقدار تعیین‌شده با \-\-rows را لغو می‌کند. پیش‌فرض: yes .IP \-\-[no]header 8 .IX Item "--[no]header" چاپ سرآیندها در بالای خروجی دستورهای i، c، w، m و y. پیش‌فرض: yes .IP \-\-[no]paging 8 .IX Item "--[no]paging" هنگامی که خروجی طولانی‌تر از مقدار تعیین‌شده توسط rows یا rows_auto باشد، از یک صفحه‌بند برای نمایش خروجی استفاده می‌شود. (متغیرهای محیطی PAGER و LESS رعایت می‌شوند. اگر PAGER تنظیم نشده باشد، پیش‌فرض "less" است.) پیش‌فرض: yes .IP \-\-paging_less_options 8 .IX Item "--paging_less_options" گزینه‌های اضافی در صورت استفاده از "less" به‌عنوان صفحه‌بند. پیش‌فرض: "\-rXFE" .IP \-\-[no]filter_accents_on_output 8 .IX Item "--[no]filter_accents_on_output" آیا نویسه‌های دارای اعراب به نویسه‌های بدون اعراب تبدیل شوند یا خیر. پیش‌فرض: yes، مگر اینکه متغیر محیطی \f(CW$TERM\fR برابر با "mlterm" یا "xterm" باشد. .IP \-\-[no]styled_output 8 .IX Item "--[no]styled_output" اگر خروجی یک ترمینال است، آیا از کدهای ترمینال ANSI برای استایل‌دهی استفاده شود؟ پیش‌فرض: yes .IP \-\-[no]styled_output_if_not_tty 8 .IX Item "--[no]styled_output_if_not_tty" استایل‌دهی به خروجی حتی اگر ترمینال نباشد. پیش‌فرض: no .IP \-\-calendar_today_style=STYLE 8 .IX Item "--calendar_today_style=STYLE" .PD 0 .IP \-\-items_today_style=STYLE 8 .IX Item "--items_today_style=STYLE" .PD اولی تعیین می‌کند که تاریخ امروز هنگام اجرای دستور تقویم (c) چگونه استایل‌دهی شود. دومی تعیین می‌کند که کلمه «today» هنگام اجرای دستور رویدادها (i) چگونه استایل‌دهی شود. پیش‌فرض: bold .Sp استایل خروجی را می‌توان با استفاده از کلیدواژه‌های زیر تعیین کرد: bold، underlined، flashing. برای تغییر رنگ متن، از این کلیدواژه‌ها استفاده کنید: fgblack، fgred، fggreen، fgyellow، fgblue، fgpurple، fgcyan، fgwhite. برای تغییر رنگ پس‌زمینه، از کلیدواژه‌های مشابه استفاده کنید، اما با bg به‌جای fg. مثال: when \-\-calendar_today_style="bold,fgred,bgcyan" c .IP \-\-prefilter 8 .IX Item "--prefilter" هدایت فایل تقویم از طریق یک برنامه (pipe) پیش از خواندن آن. پیش‌فرض: "" .IP "\-\-now=""Y M D""" 8 .IX Item "--now=""Y M D""" وانمود کردن اینکه امروز تاریخ دیگری است. .IP \-\-[no]neighboring_months 8 .IX Item "--[no]neighboring_months" رفتار پیش‌فرض "when c" چاپ تقویم‌های ماه گذشته، ماه جاری و ماه آینده است. با انتخاب \-\-noneighboring_months، می‌توانید از چاپ ماه‌هایی که در محدوده تعیین‌شده توسط \&\-\-past و \-\-future نیستند خودداری کنید. .IP \-\-[no]monday_first 8 .IX Item "--[no]monday_first" شروع هفته از دوشنبه به‌جای یکشنبه. پیش‌فرض: no .IP \-\-[no]orthodox_easter 8 .IX Item "--[no]orthodox_easter" محاسبه عید پاک بر اساس تقویم کلیسای ارتدکس شرقی. پیش‌فرض: no .IP \-\-[no]ampm 8 .IX Item "--[no]ampm" نمایش ساعت روز با استفاده از زمان ۱۲\-ساعته، به‌جای زمان ۲۴\-ساعته. همچنین بر تجزیه زمان‌های ورودی نیز تأثیر می‌گذارد. پیش‌فرض: yes .IP \-\-auto_pm=x 8 .IX Item "--auto_pm=x" هنگامی که زمان‌ها با ساعت‌های کمتر از x وارد شوند و AM یا PM به‌صراحت مشخص نشده باشد، به‌طور خودکار فرض می‌شود که PM هستند نه AM. پیش‌فرض: 0 .IP \-\-[no]literal_only 8 .IX Item "--[no]literal_only" تنها نمایش رویدادهایی که به‌صورت تاریخ‌های صریح داده شده‌اند، مانند "2008 jul 4". عدم نمایش رویدادهایی که با عبارت‌ها تعریف شده‌اند، مانند رویدادهای دوره‌ای نظیر "w=thu". پیش‌فرض: no .IP \-\-test_expression 8 .IX Item "--test_expression" .PD 0 .IP \-\-bare_version 8 .IX Item "--bare_version" .IP \-\-make_filter_regex 8 .IX Item "--make_filter_regex" .IP \-\-test_accent_filtering 8 .IX Item "--test_accent_filtering" .PD این گزینه‌ها به‌طور داخلی برای ساخت و آزمایش استفاده می‌شوند. .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" \&\fBWhen\fR یک برنامه تقویم شخصی بسیار ساده است که برای کاربران حرفه‌ای یونیکس طراحی شده که به دنبال برنامه‌ای کمینه‌گرا هستند. این برنامه می‌تواند کارهایی را که باید در تاریخ‌های مشخص انجام دهید پیگیری کند. برنامه‌های تقویم و «مدیریت اطلاعات شخصی» زیادی وجود دارند، پس چه دلایلی برای استفاده از \fBWhen\fR وجود دارد؟ .IP "برنامه‌ای بسیار کوتاه و ساده است، بنابراین به راحتی می‌توانید خودتان آن را دستکاری کنید. When حدود ۲۴۰۰ خط کد پرل است (بدون احتساب مستندات)، در حالی که برای مثال تقویم خط فرمانی Khal حدود ۱۷۰۰۰ خط و Calcurse حدود ۲۴۰۰۰ خط است." 4 .IX Item "برنامه‌ای بسیار کوتاه و ساده است، بنابراین به راحتی می‌توانید خودتان آن را دستکاری کنید. When حدود ۲۴۰۰ خط کد پرل است (بدون احتساب مستندات)، در حالی که برای مثال تقویم خط فرمانی Khal حدود ۱۷۰۰۰ خط و Calcurse حدود ۲۴۰۰۰ خط است." .PD 0 .IP "به هیچ کتابخانه‌ای وابسته نیست، بنابراین نصب آن آسان است. شما باید بتوانید آن را روی هر سیستمی که Perl در دسترس است نصب کنید، حتی اگر مجوزهای نصب کتابخانه‌ها را نداشته باشید." 4 .IX Item "به هیچ کتابخانه‌ای وابسته نیست، بنابراین نصب آن آسان است. شما باید بتوانید آن را روی هر سیستمی که Perl در دسترس است نصب کنید، حتی اگر مجوزهای نصب کتابخانه‌ها را نداشته باشید." .IP "قالب فایل آن یک فایل متنی ساده است که می‌توانید آن را در ویرایشگر دلخواه خود ویرایش کنید." 4 .IX Item "قالب فایل آن یک فایل متنی ساده است که می‌توانید آن را در ویرایشگر دلخواه خود ویرایش کنید." .PD .PP اگرچه \fBWhen\fR باید تقریباً روی هر سیستم‌عاملی که Perl در آن در دسترس است اجرا شود، در این سند فرض بر این است که از توزیعی از یونیکس استفاده می‌کنید. .SH "نصب و شروع به کار (INSTALLATION AND GETTING STARTED)" .IX Header "INSTALLATION AND GETTING STARTED" هنگامی که به عنوان کاربر ریشه (root) وارد شده‌اید، دستور زیر را اجرا کنید: .PP .Vb 1 \& make install .Ve .PP \&\fBWhen\fR را برای نخستین بار با استفاده از این دستور اجرا کنید: .PP .Vb 1 \& when .Ve .PP از شما اطلاعاتی که برای راه‌اندازی فایل تقویم لازم است پرسیده خواهد شد. .SH "کاربرد (USE)" .IX Header "USE" اگر \fBWhen\fR را پس از راه‌اندازی اولیه دوباره اجرا کنید، باید یک خط متن چاپ کند و تاریخ جاری را به شما اعلام کند. چیز دیگری چاپ نخواهد کرد، زیرا فایل تقویم شما خالی است و هیچ قرار ملاقات پیش‌رویی ندارید. .PP اکنون می‌توانید رویدادها را در فایل تقویم خود وارد کنید. هر رویداد یک خط متن شبیه به این است: .PP .Vb 1 \& 2003 feb 3 , Fly to Stockholm to accept Nobel Prize. .Ve .PP یک راه راحت برای ویرایش فایل تقویم استفاده از این دستور است: .PP .Vb 1 \& when e .Ve .PP این دستور شما را وارد ویرایشگر دلخواهتان می‌کند (همان ویرایشگری که هنگام اجرای نخستین بار \fBWhen\fR انتخاب کردید). .PP تاریخ باید در قالب سال-ماه-روز باشد، اما می‌توانید ماه را به حروف بنویسید یا آن را به‌صورت عدد وارد کنید. (نام‌های ماه‌ها به حروف بزرگ و کوچک حساس نیستند، و تفاوتی ندارد که February را به‌صورت F، Fe، Feb، Februa یا هر چیز دیگر نشان دهید. فقط باید یک تطابق منحصربه‌فرد باشد. می‌توانید یک نقطه پایانی (.) بگذارید که نادیده گرفته خواهد شد. در زبان چکی، "cer" می‌تواند به‌عنوان اختصار Cerven و "cec" برای Cervenec استفاده شود.) فاصله‌های خالی اضافی تا پیش از رسیدن به متن اصلی پس از کاما نادیده گرفته می‌شوند. خطوط خالی و خطوطی که با علامت # آغاز می‌شوند نادیده گرفته می‌شوند. .PP اگر اکنون \fBWhen\fR را اجرا کنید، فهرستی از تمام رویدادهای فایل تقویم شما را که در بازه زمانی خاصی قرار دارند چاپ می‌کند. (بازه از دیروز آغاز می‌شود. \fBWhen\fR تلاش می‌کند انتهای بازه زمانی را طوری انتخاب کند که خروجی در پنجره ترمینال شما جا شود، اما همیشه حداقل سه روز و حداکثر دو هفته در آینده خواهد بود.) برای دیدن تمام رویدادهای ماه آینده، دستور ``when m'' را اجرا کنید، و به همین ترتیب برای یک سال از y، یا برای یک هفته از w استفاده کنید. .PP اگر دستور ``when c'' را اجرا کنید، \fBWhen\fR تقویم‌های ماه گذشته، ماه جاری و ماه آینده را چاپ می‌کند. .PP می‌توانید این دستورها را ترکیب کنید. برای نمونه، ``when cw'' تقویم‌ها را چاپ کرده و سپس رویدادهای هفته آینده را به شما نشان می‌دهد. .PP برای رویدادهایی که سالی یک بار رخ می‌دهند، مانند جشن‌های تولد و سالگردها، می‌توانید از علامت * به‌جای سال استفاده کنید: .PP .Vb 1 \& * dec 25 , Christmas .Ve .PP یا از یک سال به همراه علامت ستاره استفاده کنید: .PP .Vb 1 \& 1920* aug 29 , Charlie Parker turns \ea, born in \ey .Ve .PP در مثال دوم، \ea به شما می‌گوید که چارلی پارکر امسال چند ساله می‌شد، و \ey سال تولد او را بازتولید می‌کند، یعنی خروجی به این صورت خواهد بود: .PP .Vb 1 \& today 2003 Aug 29 Charlie Parker turns 83, born in 1920 .Ve .PP برای کارهایی که باید هر هفته انجام دهید، می‌توانید از عبارتی به شکل w=xxx استفاده کنید، که در آن xxx چند حرف نخست نام روز هفته در زبان شما است. (باید حروف کافی برای رفع ابهام ارائه دهید، مثلاً در انگلیسی، w=th یا w=tu، نه صرفاً w=t.) مثال: .PP .Vb 1 \& w=sun , go to church, 10:00 .Ve .PP شما همچنین می‌توانید آزمون‌های پیشرفته‌تری نسبت به این انجام دهید؛ برای اطلاعات بیشتر، بخش «آزمون‌های پیشرفته» را در ادامه ببینید. در اینجا نحوه تنظیم برخی از تعطیلات متداول آمده است: .PP .Vb 10 \& m=jan & w=mon & a=3 , Martin Luther King Day \& * feb 14 , Valentine\*(Aqs Day \& m=feb & w=mon & a=3 , Washington\*(Aqs Birthday observed \& m=may & w=sun & a=2 , Mother\*(Aqs Day \& m=may & w=mon & b=1 , Memorial Day \& m=jun & w=sun & a=3 , Father\*(Aqs 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) .Ve .PP در ایالات متحده، هنگامی که برخی تعطیلات در آخر هفته می‌افتند، کارکنان فدرال و همچنین بسیاری از کارمندان بخش خصوصی، دوشنبه یا جمعه را تعطیل هستند. فهرست کامل در نشانی http://www.opm.gov/operating_status_schedules/fedhol/2011.asp آمده است. اگر می‌خواهید هم تعطیلی و هم روزی را که از کار مرخصی دارید یادآوری کنید، نمونه‌ای از نحوه تنظیم آن در اینجا آمده است: .PP .Vb 2 \& * jul 4 , Independence Day \& m=jul & c=4 , Independence Day (observed as a federal holiday) .Ve .SH "یادداشت‌ها (COMMENTS)" .IX Header "COMMENTS" خطی که با نویسه # آغاز شود به‌عنوان یک یادداشت (کامنت) در نظر گرفته شده و نادیده گرفته می‌شود. خطی که فقط شامل نویسه‌های فاصله خالی باشد نیز نادیده گرفته می‌شود. .SH "بین‌المللی‌سازی (INTERNATIONALIZATION)" .IX Header "INTERNATIONALIZATION" \&\fBWhen\fR حداقل پشتیبانی جزئی از زبان‌های چکی، دانمارکی، هلندی، انگلیسی، فرانسوی، آلمانی، یونانی، مجارستانی، ایتالیایی، لهستانی، رومانیایی، اسپانیایی، اوکراینی و پرتغالی دارد. اگر \fBWhen\fR به زبان شما ترجمه نشده باشد، یا تنها به صورت جزئی ترجمه شده باشد، متنی که ترجمه نشده است به زبان انگلیسی نمایش داده خواهد شد. \&\fBWhen\fR باید به طور خودکار زبانی را که استفاده می‌کنید تشخیص دهد (از طریق متغیر محیطی \f(CW$LANG\fR شما)، و اگر \fBWhen\fR به آن زبان ترجمه شده باشد، خروجی \fBWhen\fR به زبان شما خواهد بود، و \&\fBWhen\fR همچنین انتظار دارد که از آن زبان در فایل تقویم خود برای نام‌های ماه‌ها و روزهای هفته استفاده کنید. .PP فایل تقویم شما باید در قالب UTF\-8 باشد (یا ASCII، که زیرمجموعه‌ای از UTF\-8 است). اگر فایل تقویم شما در کدگذاری دیگری مانند ISO\-8859 باشد، \fBWhen\fR معمولاً قادر به تشخیص آن خواهد بود و از خواندن آن خودداری می‌کند. گزینه‌های خط فرمان نیز می‌توانند شامل UTF\-8 باشند. .PP برخی شبیه‌سازهای ترمینال (aterm و...) نویسه‌های دارای اعراب را به صورت نامفهوم نمایش می‌دهند، اما برخی دیگر (mlterm، xterm...) می‌توانند آن‌ها را به درستی نمایش دهند. \&\fBWhen\fR متغیر محیطی \f(CW$TERM\fR را بررسی می‌کند، و اگر برابر با "mlterm" یا "xterm" باشد، نویسه‌های دارای اعراب نمایش داده می‌شوند. در غیر این صورت، آن‌ها از خروجی فیلتر می‌شوند. می‌توانید با قرار دادن خطی مانند .PP .Vb 1 \& filter_accents_on_output = 0 .Ve .PP یا .PP .Vb 1 \& filter_accents_on_output = 1 .Ve .PP در فایل تنظیمات خود، این رفتار را لغو کنید. خوشحال می‌شوم از کاربرانی بشنوم که می‌توانند سازوکار بهتری برای این کار به‌جای تلاش برای تفسیر متغیر \f(CW$TERM\fR پیشنهاد کنند. .PP در ورودی، استفاده از اعراب مجاز است، اما الزامی نیست؛ مثلاً در یک فایل ورودی فرانسوی، تاریخ 2005 Fev 17 می‌تواند با e دارای اعراب یا بدون اعراب وارد شود، و هر دو کار خواهند کرد. اگر یک ماه یا روز ورودی هفته با هیچ‌یک از موارد مربوط به زبان شما مطابقت نداشته باشد، \fBWhen\fR تلاش می‌کند آن را به‌جای آن به‌عنوان انگلیسی تفسیر کند. .PP می‌توانید خطی مانند .PP .Vb 1 \& language = fr .Ve .PP در فایل تنظیمات خود قرار دهید تا زبان خود را تنظیم کنید، یا گزینه \-\-language را در خط فرمان مشخص کنید، اما اگر متغیر محیطی \f(CW$LANG\fR شما به درستی تنظیم شده باشد، این کار لازم نیست. .SH "مکان و قالب فایل تنظیمات (LOCATION AND FORMAT OF THE PREFERENCES FILE)" .IX Header "LOCATION AND FORMAT OF THE PREFERENCES FILE" اکثر افراد فایل تنظیمات خود را در ~/.when/preferences خواهند داشت. کسانی که ترجیح می‌دهند دایرکتوری خانگی خود را از فایل‌های نقطه‌دار خلوت نگه دارند می‌توانند از یکی از احتمالات استاندارد زیر که توسط استاندارد XDG تعریف شده است استفاده کنند. به ترتیب نزولی اولویت: ${WHEN_CONFIG_HOME}/preferences، ${XDG_CONFIG_HOME}/when/preferences، \&\f(CW$HOME\fR/.config/when/preferences، و \f(CW$HOME\fR/.when/preferences. .PP هر خط شامل چیزی شبیه به این است: .PP .Vb 1 \& variable = value .Ve .PP فاصله‌های خالی در همه جا به جز درون مقدار نادیده گرفته می‌شوند. نام‌های متغیرها به حروف بزرگ و کوچک حساس نیستند. خطوط خالی نادیده گرفته می‌شوند. یادداشت‌ها مجاز هستند، با پیشوند #. .SH "مثال‌های بیشتر (MORE EXAMPLES)" .IX Header "MORE EXAMPLES" یک دستور مفید که پوسته شما هنگام ورود به سیستم اجرا کند این است: .PP .Vb 1 \& when \-\-past=0 \-\-future=1 .Ve .PP برای چاپ تقویم برای یک سال کامل پیش‌رو: .PP .Vb 1 \& when \-\-past=0 \-\-future=365 c .Ve .SH "نمایش تقویم هنگام ورود به سیستم (POPPING UP YOUR CALENDAR WHEN YOU LOG IN)" .IX Header "POPPING UP YOUR CALENDAR WHEN YOU LOG IN" اگر فراموش کنید هر روز به تقویم خود نگاه کنید، تقویم هیچ فایده‌ای برای شما نخواهد داشت. یک راه آسان برای اینکه هنگام ورود به سیستم ظاهر شود این است که فایل .xsession یا .xinitrc خود را به این شکل درآورید: .PP .Vb 3 \& /usr/bin/when \-\-past=0 \-\-future=1 &>~/when.today \& emacs \-geometry 70x25 \-bg bisque ~/when.today & \& startkde .Ve .PP اگر یک مدیر ورود گرافیکی روی سیستم شما تنظیم شده باشد از فایل .xsession استفاده می‌شود، و اگر تنظیم نشده باشد از .xinitrc استفاده می‌شود. در این مثال، خط اول تقویم شما را در یک فایل خروجی می‌دهد. مسیر کامل به برنامه \fBWhen\fR داده شده است، زیرا متغیر مسیر (PATH) پوسته شما هنگام اجرای این خط هنوز به درستی مقداردهی اولیه نشده است. خط دوم یک پنجره گرافیکی emacs را باز می‌کند، که رنگ‌آمیزی متمایزی دارد تا توجه شما را جلب کند. خط آخر مدیر پنجره شما را اجرا می‌کند، که در این مثال KDE است. از هر مدیر پنجره‌ای که استفاده می‌کنید، فقط مطمئن شوید که خط از پیش موجود در فایل را که آن را اجرا می‌کند حفظ کنید، و مطمئن شوید که آن خط دقیقاً آخرین خط در فایل باشد. .SH "مرتب‌سازی بر اساس زمان روز (SORTING BY TIME OF DAY)" .IX Header "SORTING BY TIME OF DAY" اگر می‌خواهید رویدادهای مختلفی که در یک روز قرار دارند با ترتیب خاصی چاپ شوند، ساده‌ترین راه این است که آن‌ها را به همان ترتیب در فایل ورودی قرار دهید. با این حال، این روش زمانی که برخی از رویدادها در تاریخ‌هایی باشند که با عبارت‌ها تعیین می‌شوند و نه به‌صورت صریح، کار نخواهد کرد. رایج‌ترین دلیل برای تمایل به چنین کاری این است که کارهایی دارید که باید در ساعات خاصی از روز انجام دهید، و می‌خواهید بر اساس زمان مرتب شوند. در این وضعیت، می‌توانید زمانی را در ابتدای متن رویداد مشخص کنید، و \fBWhen\fR آن را تشخیص داده و رویدادها را بر اساس زمان مرتب می‌کند. زمان‌ها می‌توانند در قالب h:mm یا hh:mm باشند. اگر \-\-ampm تنظیم شده باشد، پسوند اختیاری a یا p می‌تواند برای AM یا PM استفاده شود، مثلاً 9:30a برای 9:30 ق.ظ. اگر از زمان AM/PM استفاده می‌کنید، می‌توانید به‌عنوان مثال \-\-auto_pm=9 را نیز تنظیم کنید تا ساعت‌های کمتر از ۹ به‌طور خودکار به‌عنوان PM فرض شوند. در اینجا یک مثال آورده شده است: .PP .Vb 2 \& 2010 apr 25 , 7:00 dinner at the anarcho\-syndicalist commune \& w=sun , 10:00 church .Ve .PP روز ۲۵ آوریل ۲۰۱۰ یک یکشنبه است، بنابراین در آن تاریخ هر دوی این رویدادها نمایش داده خواهند شد. اگر \-\-auto_pm روی 8 یا بالاتر تنظیم شده باشد، 7:00 به‌طور خودکار به‌عنوان 7:00 PM تفسیر می‌شود، و قرار شام در زیر مراسم صبحگاهی کلیسا نمایش داده خواهد شد. .SH "آزمون‌های پیشرفته (FANCY TESTS)" .IX Header "FANCY TESTS" علاوه بر w که در بالا مورد بحث قرار گرفت، متغیرهای متعدد دیگری وجود دارند که می‌توانید آزمایش کنید: .PP .Vb 11 \& w \- روز هفته \& m \- ماه \& d \- روز ماه \& y \- سال \& j \- شماره روز ژولینی اصلاح‌شده \& a \- ۱ برای ۷ روز نخست ماه، ۲ برای ۷ روز بعدی و غیره \& b \- ۱ برای ۷ روز پایانی ماه، ۲ برای ۷ روز پیش از آن و غیره \& c \- در دوشنبه یا جمعه، برابر با روز ماه نزدیک‌ترین روز آخر هفته؛ در غیر این صورت \-1 \& n \- تعداد روزها در این ماه \& e \- تعداد روزها تا عید پاک (غربی) امسال \& z \- روز سال (۱ در روز سال نو) .Ve .PP می‌توانید ماه‌ها را یا به‌صورت عدد m=2، یا به‌صورت نام در زبان خود m=feb مشخص کنید. همچنین می‌توانید از عملگرهای منطقی & (و) و | (یا) استفاده کنید. مثال زیر به شما یادآوری می‌کند که حقوق کارکنان خود را در روز اول و پانزدهم هر ماه پرداخت کنید: .PP .Vb 1 \& d=1 | d=15 , Pay employees. .Ve .PP این مثال به شما یادآوری می‌کند که در آخرین شنبه هر ماه با گروه موسیقی خود تمرین کنید: .PP .Vb 1 \& w=sat & b=1 , Rehearse with band. .Ve .PP دو خط زیر: .PP .Vb 2 \& * dec 25 , Christmas \& m=dec & d=25 , Christmas .Ve .PP هر دو دقیقاً یک کار را انجام می‌دهند، اما نسخه اول برای درک ساده‌تر است و باعث اجرای سریع‌تر برنامه می‌شود. (هنگامی که یک آزمون انجام می‌دهید، \fBWhen\fR باید تمام روزهای بازه تاریخی درخواستی شما را بررسی کند و آزمون را برای هر یک از آن روزها ارزیابی نماید. در رایانه من، اگر یک تقویم برای کل سال با فایلی که شامل ۱۰ آزمون ساده است چاپ کنم، چند ثانیه طول می‌کشد.) پرانتزها نیز می‌توانند استفاده شوند. .PP بسته به ملیت و دین شما، احتمالاً تعطیلات متعددی دارید که در تاریخ‌های ثابت قرار ندارند. در مسیحیت، بسیاری از این‌ها («اعیاد متحرک») نسبت به یکشنبه عید پاک محاسبه می‌شوند، به همین دلیل متغیر e مفید است. .PP یک عملگر نقیض (not) وجود دارد، !: .PP .Vb 1 \& w=fri & !(m=dec & d=25) , poker game .Ve .PP یک عملگر باقیمانده، %، و یک عملگر تفریق، \- وجود دارند. با استفاده از این‌ها در کنار متغیر j، برای تجزیه‌گر کوچک \&\fBWhen\fR این امکان فراهم می‌شود که شاهکار زیر را انجام دهد: .PP .Vb 1 \& !(j%14\-1) , do something every other Wednesday .Ve .PP منطق پشت این ترفند جالب به این صورت است. ابتدا، با استفاده از دستور `when j \-\-now="2005 jan 26"` تعیین می‌کنیم که اولین چهارشنبه‌ای که می‌خواهیم این کار را در آن انجام دهیم دارای یک روز ژولینی است که در پیمانه ۱۴ برابر با ۱ است. سپس این عبارت را طوری می‌نویسیم که اگر چهارشنبه‌ای باشد که روز ژولینی آن در پیمانه ۱۴ برابر با ۱ باشد، مقدار داخل پرانتز صفر شود و نقیض منطقی آن مقدار درست (true) تولید کند. .PP شرکت‌پذیری عملگرها و اولویت آن‌ها (از بالاترین به پایین‌ترین) به این صورت است: .PP .Vb 7 \& left % \& left \- \& left < > <= >= \& left = != \& right ! \& left & \& left | .Ve .SH "شامل کردن فایل‌ها (INCLUDING FILES)" .IX Header "INCLUDING FILES" اگر فایل تقویم شما بیش از حد بزرگ شود، ممکن است ترجیح دهید آن را به بخش‌های کوچک‌تر تقسیم کنید \-\- شاید یکی برای سالگردها و تولدها، یکی برای تعطیلات تبتی و غیره. یک راه آسان برای انجام این کار نصب برنامه m4 است؛ خط .PP .Vb 1 \& prefilter = m4 \-P .Ve .PP را در فایل تنظیمات خود قرار دهید، و سپس خطوطی مانند زیر را در فایل تقویم خود بگذارید: .PP .Vb 1 \& m4_include(/home/yourname/.when/birthdays) .Ve .SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" \&\fR\f(CB$LANG\fR\fB\fR برای تشخیص خودکار زبان کاربر .PP \&\fR\f(CB$TERM\fR\fB\fR برای تلاش جهت تشخیص اینکه آیا شبیه‌ساز ترمینال می‌تواند نویسه‌های دارای اعراب را نمایش دهد یا خیر .SH "فایل‌ها (FILES)" .IX Header "FILES" \&\fR\f(CB$HOME\fR\fB\fR/.when/calendar \- مکان پیش‌فرض برای تقویم کاربر (که در فایل تنظیمات به آن اشاره می‌شود) .PP \&\fR\f(CB$HOME\fR\fB\fR/.when/preferences \- تنظیمات کاربر. (برای مکان‌های جایگزین که از استاندارد XDG پیروی می‌کنند، بخش بالا را ببینید.) .SH "اشکالات (BUGS)" .IX Header "BUGS" نام فایل تقویم نمی‌تواند شامل نویسه‌های یونیکد باشد. دلیل این امر این است که تابع \fBFile::Glob::glob()\fR در پرل به درستی از یونیکد پشتیبانی نمی‌کند. پیوندهای زیر را ببینید: 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 .SH "اطلاعات بیشتر (OTHER INFORMATION)" .IX Header "OTHER INFORMATION" وب‌سایت رسمی \fBWhen\fR در نشانی زیر در دسترس است: .PP .Vb 1 \& http://www.lightandmatter.com/when/when.html .Ve .PP که در آن همواره می‌توانید آخرین نسخه نرم‌افزار را بیابید. .SH "نویسنده (AUTHOR)" .IX Header "AUTHOR" برنامه \fBWhen\fR توسط Ben Crowell نوشته شده است، http://www.lightandmatter.com/personal تفسیرگر جدید و بهبودیافته برای عبارت‌های تاریخ توسط Dimiter Trendafilov نوشته شده است. .SH "حق نشر و مجوز (COPYRIGHT AND LICENSE)" .IX Header "COPYRIGHT AND LICENSE" \&\fBCopyright (C)\fR 2003\-2012 by Benjamin Crowell. .PP \&\fBWhen\fR یک نرم‌افزار آزاد است؛ می‌توانید آن را تحت شرایط مجوز عمومی گنو (GPL) یا به‌صورت اختیاری مجوز پرل، بازتوزیع کرده و/یا تغییر دهید.