| ZSHCALSYS(1) | General Commands Manual | ZSHCALSYS(1) |
نام (NAME)
zshcalsys - سیستم تقویم zsh
توضیحات (DESCRIPTION)
این پوسته به همراه مجموعهای از توابع برای جایگزینی و بهبود برنامه سنتی calendar در یونیکس عرضه شده است؛ برنامهای که رویدادهای قریبالوقوع یا آینده را به کاربر هشدار میدهد و جزئیات آنها در یک فایل متنی (معمولاً calendar در دایرکتوری خانگی کاربر) ذخیره میشود. نسخهای که در اینجا ارائه شده است شامل سازوکاری برای هشدار دادن به کاربر هنگام سررسید یک رویداد است.
علاوه بر این، توابع age، before و after ارائه شدهاند که میتوان از آنها در توصیفگر تطبیق مسیر (glob qualifier) استفاده کرد؛ آنها امکان انتخاب فایلها را بر اساس زمان تغییراتشان فراهم میکنند.
ابتدا قالب فایل calendar و تاریخهای مورد استفاده در آن و در تابع age شرح داده شده و سپس توابعی که میتوان برای بررسی و تغییر فایل calendar فراخوانی کرد، توضیح داده میشوند.
توابع موجود در اینجا به در دسترس بودن ماژول zsh/datetime وابسته هستند که معمولاً همراه پوسته نصب میشود. تابع کتابخانهای strptime() باید در دسترس باشد؛ این تابع در بیشتر سیستمعاملهای امروزی موجود است.
قالبهای فایل و تاریخ (FILE AND DATE FORMATS)
قالب فایل تقویم (Calendar File Format)
فایل گاهشمار بهطور پیشفرض ~/calendar است. این مقدار را میتوان از طریق شیوه (style) calendar-file پیکربندی کرد، به بخش STYLES در زیر مراجعه کنید. قالب پایهای شامل مجموعهای از خطوط مجزا و بدون تورفتگی است که هر یک شامل مشخصات تاریخ و زمان و به دنبال آن شرح رویداد است.
بهبودهای گوناگونی برای این قالب بر اساس نحو حالت گاهشمار Emacs پشتیبانی میشود. یک خط دارای تورفتگی نشاندهنده خط ادامهداری است که شرح رویداد را از خط قبلی ادامه میدهد (توجه داشته باشید که تاریخ را نمیتوان به این روش ادامه داد). علامت آمپرسند (&) در ابتدای خط برای سازگاری نادیده گرفته میشود.
یک خط دارای تورفتگی که نخستین نویسه غیرفاصلهای آن # باشد، همراه با مدخل تقویم نمایش داده نمیشود، اما همچنان برای استخراج اطلاعات پویش میشود. از این ویژگی میتوان برای پنهان کردن اطلاعاتی استفاده کرد که برای سیستم گاهشمار مفید است اما برای کاربر کاربردی ندارد، مانند شناسه یکتای مورد استفاده توسط calendar_add.
افزونه Emacs مبنی بر اینکه یک تاریخ بدون شرح میتواند به چندین رویداد بعدی در زمانهای مختلف اشاره کند، پشتیبانی نمیشود.
مگر اینکه شیوه done-file تغییر کرده باشد، هر رویدادی که پردازش شده است به فایلی با همان نام فایل تقویم با پسوند .done الصاق میشود که بنابراین بهطور پیشفرض ~/calendar.done خواهد بود.
یک نمونه در زیر نشان داده شده است.
قالب تاریخ (Date Format)
قالب تاریخ و زمان به گونهای طراحی شده است که انعطافپذیری را بدون ایجاد ابهام فراهم کند. (کلمات «date» و «time» هر دو در مستندات زیر به کار رفتهاند؛ مگر در مواردی که صراحتاً ذکر شده باشد، این مفهوم بیانگر رشتهای است که میتواند شامل مشخصات هر دو، یعنی تاریخ و زمان باشد.) توجه داشته باشید که هیچ پشتیبانی از بومیسازی وجود ندارد؛ نامهای ماهها و روزها باید به زبان انگلیسی باشند و نویسههای جداکننده ثابت هستند. تطبیق نسبت به بزرگی و کوچکی حروف حساس نیست، و تنها سه حرف اول نامها اهمیت دارند، اگرچه به عنوان یک حالت خاص، شکلی که با «month» آغاز شود با «Monday» تطبیق داده نمیشود. علاوه بر این، منطقههای زمانی پشتیبانی نمیشوند؛ تمام زمانها محلی فرض میشوند.
توصیه میشود که کاربران به جای سرک کشیدن به پیچیدگیهای سیستم، قالب تاریخی را که برایشان طبیعیتر است یافته و از همان استفاده کنند. این کار از خطاهای غیرمنتظره جلوگیری میکند. چندین نکته کلیدی باید مورد توجه قرار گیرد.
- •
- بهویژه، به ابهام میان month/day/year و day/month/year هنگامی که ماه عددی است توجه داشته باشید؛ در صورت امکان باید از این قالبها اجتناب کرد. جایگزینهای فراوانی در دسترس هستند.
- •
- سال باید برای جلوگیری از ابهام بهطور کامل ذکر شود، و تنها سالهای بین 1900 تا 2099 (شامل خود آنها) تطبیق داده میشوند.
موارد زیر چند نمونه مشخص را نشان میدهند؛ کاربرانی که در اینجا قالبی متناسب با سلیقه خود مییابند و خود را درگیر پیچیدگیهای نگارش نمیکنند، میتوانند از شرح کامل صرفنظر کنند. از آنجا که تاریخها و زمانها بهطور جداگانه تطبیق داده میشوند (حتی اگر زمان در دل تاریخ قرار گرفته باشد)، هر قالب تاریخی را میتوان با هر قالبی برای زمان روز ترکیب کرد، به شرطی که جداکنندهها واضح باشند (فاصلهها، دونقطهها، ویرگولها).
2007/04/03 13:13 2007/04/03:13:13 2007/04/03 1:13 pm 3rd April 2007, 13:13 April 3rd 2007 1:13 p.m. Apr 3, 2007 13:13 Tue Apr 03 13:13:00 2007 13:13 2007/apr/3
قواعد دقیقتر در ادامه آمده است.
زمانها پیش از تاریخها تجزیه و استخراج میشوند. آنها برای جداسازی ساعت و دقیقه باید از دونقطه استفاده کنند، اگرچه در صورت وجود ثانیه، نقطه پیش از آن مجاز است. این امر قالبهای زمان را به موارد زیر محدود میکند:
- •
- HH:MM[:SS[.FFFFF]] [am|pm|a.m.|p.m.]
- •
- HH:MM.SS[.FFFFF] [am|pm|a.m.|p.m.]
در اینجا، قلابها نشاندهنده عناصر اختیاری هستند که احتمالاً دارای گزینههای جایگزین میباشند. کسر ثانیه شناسایی میشود اما نادیده گرفته خواهد شد. برای زمانهای مطلق (قالب معمولی مورد نیاز فایل calendar و توابع age، before و after) قید تاریخ اجباری است اما زمان روز اختیاری است؛ زمان بازگرداندهشده در آغاز تاریخ خواهد بود. یک حالت استثنا مجاز است: اگر a.m. یا p.m. یا یکی از گونههای آنها وجود داشته باشد، ذکر ساعت بدون دقیقه مجاز است، مانند 3 p.m..
منطقههای زمانی پردازش نمیشوند، هرچند اگر منطقهای به دنبال مشخصات زمان تطبیق داده شود، حذف خواهد شد تا امکان تجزیه تاریخ پیرامون آن فراهم شود. این اتفاق تنها در صورتی رخ میدهد که قالب منطقه زمانی بیش از حد غیرمعمول نباشد. موارد زیر نمونههایی از شکلهای قابل فهم هستند:
+0100 GMT GMT-7 CET+1CDT
هر بخشی از منطقه زمانی که عددی نیست باید دقیقاً سه حرف بزرگ در نام خود داشته باشد.
تاریخها دچار ابهام میان DD/MM/YYYY و MM/DD/YYYY هستند. توصیه میشود در تاریخهای کاملاً عددی از این شکل خودداری شود، اما استفاده از اعداد ترتیبی، مانند 3rd/04/2007، ابهام را برطرف میکند زیرا عدد ترتیبی همواره به عنوان روز ماه تجزیه میشود. سالها باید چهاررقمی باشند (و دو رقم نخست باید 19 یا 20 باشد)؛ 03/04/08 شناخته نمیشود. سایر اعداد میتوانند دارای صفر پیشرو باشند، اما اجباری نیست. موارد زیر پشتیبانی میشوند:
- •
- YYYY/MM/DD
- •
- YYYY-MM-DD
- •
- YYYY/MNM/DD
- •
- YYYY-MNM-DD
- •
- DD[th|st|rd] MNM[,] [ YYYY ]
- •
- MNM DD[th|st|rd][,] [ YYYY ]
- •
- DD[th|st|rd]/MM[,] YYYY
- •
- DD[th|st|rd]/MM/YYYY
- •
- MM/DD[th|st|rd][,] YYYY
- •
- MM/DD[th|st|rd]/YYYY
در اینجا، MNM حداقل سه حرف اول از نام ماه است که بدون حساسیت به بزرگی و کوچکی حروف تطبیق داده میشود. باقیمانده نام ماه میتواند ظاهر شود اما محتوای آن بیاهمیت است؛ بنابراین عباراتی چون janissary، febrile، martial، apricot، maybe، junta و غیره بدون مشکل مدیریت میشوند.
در جاهایی که سال به صورت اختیاری نشان داده شده است، سال جاری فرض میشود. تنها دو حالت از این دست وجود دارد، به شکل Jun 20 یا 14 September (تنها دو شکل متداول، به جز «the» در برخی گونههای زبان انگلیسی که در حال حاضر پشتیبانی نمیشود). البته چنین تاریخهایی در آینده مبهم خواهند شد، بنابراین در حالت ایدهآل باید از آنها خودداری شود..PP زمانها میتوانند پس از تاریخها با یک دونقطه (کولون) بیایند، مانند 1965/07/12:09:45؛ این به منظور فراهم کردن قالبی بدون نویسه فاصلهگذاری (whitespace) است. استفاده از ویرگول و فاصلهگذاری نیز مجاز است، مانند 1965/07/12, 09:45. در حال حاضر ترتیب این جداکنندهها بررسی نمیشود، بنابراین قالبهای غیرمنطقی مانند 1965/07/12, : ,09:45 نیز تطبیق داده خواهند شد. برای سادگی، چنین حالتهایی در فهرست بالا نمایش داده نشدهاند. در غیر این صورت، یک زمان تنها در صورتی به عنوان وابسته به تاریخ شناخته میشود که میان آنها تنها فاصلهگذاری باشد، یا اینکه زمان درون تاریخ گنجانده شده باشد.
روزهای هفته معمولاً بررسی (اسکن) نمیشوند، اما اگر تنها در آغاز الگوی تاریخ ظاهر شوند نادیده گرفته خواهند شد. با این حال، در زمینههایی که تعیین تاریخها نسبت به امروز کاربرد دارد، میتوان روزهای هفته را بدون هیچ مشخصه تاریخی دیگری ارائه داد. روز فرض میشود که یا امروز است یا در طول هفته گذشته. به همین ترتیب، کلمات yesterday، today و tomorrow نیز پردازش میشوند. تمامی تطبیقها بدون حساسیت به حروف بزرگ و کوچک (case-insensitive) هستند. بنابراین اگر امروز دوشنبه (Monday) باشد، Sunday معادل با yesterday است، Monday معادل با today است، اما Tuesday تاریخی مربوط به شش روز پیش را میدهد. این ویژگی معمولاً در فایل تقویم چندان کاربردی نیست. تاریخها در این قالب میتوانند با یک مشخصه زمان ترکیب شوند؛ برای نمونه Tomorrow, 8 p.m..
برای نمونه، قالب استاندارد تاریخ:
Fri Aug 18 17:00:48 BST 2006
با تطبیق HH:MM:SS و حذف آن به همراه منطقه زمانی تطبیقیافته (اما استفادهنشده) پردازش میشود. این کار باقیمانده زیر را بر جای میگذارد:
Fri Aug 18 2006
Fri نادیده گرفته شده و مابقی طبق قوانین استاندارد تطبیق داده میشود.
قالب زمان نسبی (Relative Time Format)
در جاهای مشخصی زمانهای نسبی پردازش میشوند. در اینجا تاریخ مجاز نیست؛ در عوض ترکیبی از دورههای مختلف پشتیبانیشده به همراه یک زمان اختیاری مجاز است. دورهها باید به ترتیب از پرارزشترین به کمارزشترین مرتب شده باشند.
در برخی موارد، زمانی که یک تاریخ لنگر (anchor date) وجود دارد، محاسبات دقیقتری امکانپذیر است: آفستهای ماهها یا سالها به جای گرد شدن، روز درستی را برمیگزینند، و میتوان روز خاصی از ماه را مانند `(1st Friday)' و غیره انتخاب کرد، همانطور که در ادامه با جزئیات بیشتر شرح داده شده است.
لنگرها در موارد زیر در دسترس هستند. اگر یک یا دو زمان به تابع calendar ارسال شود، زمان آغاز به عنوان یک لنگر برای زمان پایان عمل میکند، به شرطی که زمان پایان نسبی باشد (حتی اگر زمان آغاز ضمنی باشد). هنگام بررسی فایلهای تقویم، رویداد زمانبندیشدهای که بررسی میشود، زمان هشدار را هنگامی که صراحتاً با کلیدواژه WARN مشخص شده باشد مبنا (لنگر) قرار میدهد؛ به همین ترتیب، رویداد زمانبندیشده یک دوره تکرار را هنگامی که با کلیدواژه RPT مشخص شده باشد لنگر قرار میدهد، بهطوری که مشخصاتی مانند RPT 2 months, 3rd Thursday به درستی پردازش شوند. در نهایت، آرگومان -R برای calendar_scandate مستقیماً یک لنگر برای محاسبات نسبی فراهم میکند.
دورههای قابل پردازش، به همراه اختصارات ممکن عبارتند از:
- سالها (Years)
- years, yrs, ys, year, yr, y, yearly. یک سال برابر با 365.25 روز است مگر اینکه لنگری وجود داشته باشد.
- ماهها (Months)
- months, mons, mnths, mths, month, mon, mnth, mth, monthly. توجه داشته باشید که m, ms, mn, mns مبهم هستند و پردازش نمیشوند. یک ماه دورهای ۳۰ روزه است نه یک ماه تقویمی، مگر اینکه لنگری وجود داشته باشد.
- هفتهها (Weeks)
- weeks, wks, ws, week, wk, w, weekly
- روزها (Days)
- days, dys, ds, day, dy, d, daily
- ساعتها (Hours)
- hours, hrs, hs, hour, hr, h, hourly
- دقیقهها (Minutes)
- minutes, mins, minute, min، اما نه m، ms, mn یا mns
- ثانیهها (Seconds)
- seconds, secs, ss, second, sec, s
فاصلههای میان اعداد اختیاری هستند، اما میان آیتمها الزامی میباشند، هرچند میتوان از ویرگول نیز (با یا بدون فاصله) استفاده کرد.
شکلهای yearly تا hourly امکان حذف عدد را میدهند؛ در این حالت فرض میشود عدد ۱ است. برای نمونه، 1 d و daily معادل یکدیگرند. توجه داشته باشید که استفاده از آن شکلها همراه با اسامی جمع گیجکننده است؛ 2 yearly معادل 2 years است، نه دو بار در سال، بنابراین توصیه میشود که آنها تنها بدون عدد به کار روند.
هنگامی که زمان لنگر وجود دارد، یک قابلیت افزوده برای مدیریت رویدادهای منظم در قالب «nامین روز مشخص از ماه» وجود دارد. چنین مشخصهای باید بلافاصله پس از هر مشخصه سال و ماه، اما پیش از هر زمان از روز بیاید، و باید در قالب n(th|st|rd) day باشد؛ برای نمونه 1st Tuesday یا 3rd Monday. مانند جاهای دیگر، روزها بدون حساسیت به حروف بزرگ و کوچک تطبیق داده میشوند، باید به زبان انگلیسی باشند، و تنها سه حرف نخست معنادار است، جز اینکه شکلی که با `month' آغاز میشود با `Monday' تطبیق نمییابد. هیچ تلاشی برای پاکسازی (اعتبارسنجی) تاریخ حاصل انجام نمیشود؛ تلاش برای گنجاندن رخدادهای بیش از حد در یک ماه، روز را به ماه بعد منتقل خواهد کرد (اما به شیوهای بدیهی، با حفظ روز درست هفته).
در اینجا چند مثال آورده شده است:
30 years 3 months 4 days 3:42:41 14 days 5 hours Monthly, 3rd Thursday 4d,10hr
در اینجا نمونهای از یک فایل تقویم آورده شده است. این فایل همانگونه که در بالا توصیه شد، از یک قالب تاریخ یکدست استفاده میکند.
Feb 1, 2006 14:30 Pointless bureaucratic meeting Mar 27, 2006 11:00 Mutual recrimination and finger pointing Bring water pistol and waterproofs Mar 31, 2006 14:00 Very serious managerial pontification # UID 12C7878A9A50 Apr 10, 2006 13:30 Even more pointless blame assignment exercise WARN 30 mins May 18, 2006 16:00 Regular moaning session RPT monthly, 3rd Thursday
مدخل دوم دارای یک خط ادامهدار است. مدخل سوم خط ادامهای دارد که هنگام نمایش مدخل نشان داده نخواهد شد، اما شناسهٔ یکتا هنگام بهروزرسانی رویداد توسط تابع calendar_add به کار خواهد رفت. مدخل چهارم ۳۰ دقیقه پیش از رویداد هشداری ایجاد میکند (تا بتوانید خود را بهخوبی آماده کنید). مدخل پنجم پس از یک ماه در سومین پنجشنبه، یعنی ۱۵ ژوئن ۲۰۰۶، در همان ساعت تکرار میشود.
توابع کاربر (USER FUNCTIONS)
این بخش توابعی را شرح میدهد که برای فراخوانی مستقیم توسط کاربر طراحی شدهاند. بخش نخست توابع مرتبط با تقویم کاربر را توصیف میکند؛ بخش دوم استفاده در توصیفکنندههای glob را شرح میدهد.
توابع سامانه تقویم (Calendar system functions)
- calendar [ -abdDsv ] [ -C calfile ] [ -n num ] [ -S showprog ]
- [ [ start ] end ]
- calendar -r [ -abdDrsv ] [ -C calfile ] [ -n num ] [ -S showprog ]
- [ start ]
- نمایش رویدادها در تقویم.
بدون هیچ آرگومانی، رویدادها را از آغاز امروز تا پایان روز کاریِ بعد از امروز نمایش میدهد. به بیان دیگر، اگر امروز جمعه، شنبه یا یکشنبه باشد، رویدادها را تا پایان دوشنبهٔ بعد نشان میدهد؛ در غیر این صورت، امروز و فردا را نمایش میدهد.
اگر end مشخص شود، رویدادها را از آغاز امروز تا زمان و تاریخ دادهشده نشان میدهد، که در قالب توصیفشده در بخش پیشین است. توجه داشته باشید که اگر این مقدار یک تاریخ باشد، زمان برابر با نیمهشب در آغاز آن تاریخ فرض میشود، به طوری که در عمل تمام رویدادهای پیش از تاریخ دادهشده را نمایش میدهد.
مقدار end میتواند با یک + آغاز شود، که در این صورت باقی مشخصات یک قالب زمان نسبی طبق توضیحات بخش پیشین خواهد بود که بازهٔ زمانی از زمان شروع را برای گنجانده شدن مشخص میکند.
اگر start نیز داده شود، رویدادها را از آن زمان و تاریخ آغاز نمایش میدهد. کلمهٔ now میتواند برای مشخص کردن زمان فعلی استفاده شود.
برای پیادهسازی یک هشدار هنگام سررسید رویدادها، عبارت calendar -s را در فایل ~/.zshrc خود قرار دهید.
گزینهها:
- -a
- نمایش تمام موارد در تقویم، بدون در نظر گرفتن start و end.
- -b
- مختصر: خطوط ادامه (یعنی خطوط تورفته پس از خط شامل تاریخ/زمان) نمایش داده نشوند، تنها خط نخست نشان داده شود.
- -B lines
- مختصر: نمایش حداکثر lines خط نخست از مدخل تقویم. `-B 1' معادل `-b' است.
- -C calfile
- مشخص کردن صریح یک فایل تقویم به جای مقدار شیوهٔ calendar-file یا مقدار پیشفرض ~/calendar.
- -d
- انتقال هرگونه رویداد سپریشده از فایل تقویم به فایل «done»، طبق شیوهٔ done-file یا پیشفرض که همان فایل تقویم با افزودن پسوند .done است. این گزینه به صورت ضمنی توسط گزینهٔ -s اعمال میشود.
- -D
- گزینهٔ -d را خاموش میکند، حتی اگر گزینهٔ -s نیز وجود داشته باشد.
- -n num, -num
- نمایش حداقل num رویداد، در صورت وجود در فایل تقویم، بدون در نظر گرفتن start و end.
- -r
- نمایش همهٔ موارد باقیمانده در تقویم، با نادیده گرفتن زمان پایان (end) دادهشده. زمان آغاز (start) رعایت میشود؛ هر آرگومان دادهشده به عنوان زمان start در نظر گرفته میشود.
- -s
- استفاده از دستور sched پوسته برای زمانبندی یک رویداد زماندار که هنگام سررسید رویداد به کاربر هشدار میدهد. توجه داشته باشید که دستور sched تنها در صورتی اجرا میشود که پوسته در یک اعلان تعاملی باشد؛ یک وظیفهٔ پیشزمینه مانع از اجرای وظیفهٔ زمانبندیشده تا زمان پایان آن میشود.
رویداد زماندار معمولاً برنامهٔ calendar_show را برای نمایش رویداد اجرا میکند، همانطور که در بخش توابع ابزاری (UTILITY FUNCTIONS) در زیر شرح داده شده است.
بهطور پیشفرض، هشدار رویداد پنج دقیقه پیش از سررسید آن نشان داده میشود. دورهٔ هشدار را میتوان با شیوهٔ warn-time یا برای یک مدخل تکی در تقویم با گنجاندن WARN reltime در خط نخست مدخل پیکربندی کرد، که در آن reltime یکی از قالبهای معمول زمان نسبی است.
یک رویداد تکرارشونده را میتوان با گنجاندن RPT reldate در خط نخست مدخل مشخص کرد. پس از نمایش رویداد زمانبندیشده، در زمانی به اندازهٔ reldate پس از رویداد کنونی دوباره در فایل تقویم وارد خواهد شد. توجه داشته باشید که در حال حاضر این تنها استفاده از شمارش تکرار است، به طوری که تا پیش از سپری شدن رویداد قبلی، امکان پرسوجو از زمانبندی برای رخداد مجدد یک رویداد در تقویم وجود ندارد.
اگر RPT استفاده شود، همچنین میتوان مشخص کرد که تکرارهای خاصی از یک رویداد باززمانبندی یا لغو شوند. این کار با کلیدواژهٔ OCCURRENCE انجام میشود، که به دنبال آن فاصلهٔ خالی و سپس تاریخ و زمان رخداد در توالی منظم میآید، و در ادامه فاصلهٔ خالی و سپس تاریخ و زمان رویداد باززمانبندیشده یا دقیقاً رشتهٔ CANCELLED قرار میگیرد. در این حالت، تاریخ و زمان باید دقیقاً در قالب «تاریخ با زمان محلی» استفادهشده توسط نوع MIME با شناسهٔ text/calendar (RFC 2445) باشد: <YYYY><MM><DD>T<hh><mm><ss> (به وجود نویسهٔ عینی T توجه کنید). کلمهٔ اول (تکرار منظم) میتواند چیزی غیر از یک تاریخ/زمان معتبر باشد تا نشان دهد رویداد علاوه بر توالی عادی است؛ قراردادی که ظاهر قالببندی را حفظ میکند XXXXXXXXTXXXXXX است.
افزون بر این، ثبت تکرار منظم بعدی سودمند است (زیرا در این صورت ممکن است تاریخ نمایشدادهشده برای یک رویدادِ باززمانبندیشده باشد و بنابراین نتوان از آن برای محاسبهٔ توالی منظم استفاده کرد). این موضوع با RECURRENCE و یک زمان یا تاریخ در همان قالب مشخص میشود. زمانی که calendar_add با رویداد تکرارشوندهای برخورد کند که فاقد چنین نشانهای است، بر پایهٔ تاریخ/زمان خط عنوان، چنین نشانهای را اضافه میکند.
اگر از calendar_add برای بهروزرسانی رخدادها استفاده شود، کلیدواژهٔ UID که در آنجا شرح داده شده است باید هم در مدخل موجود و هم در رخداد اضافهشده وجود داشته باشد تا توالیهای رویداد تکرارشونده شناسایی شوند.
برای نمونه،
Thu May 6, 2010 11:00 Informal chat RPT 1 week # RECURRENCE 20100506T110000 # OCCURRENCE 20100513T110000 20100513T120000 # OCCURRENCE 20100520T110000 CANCELLED
رویدادی که در ساعت 11:00 روز ۱۳ مه ۲۰۱۰ رخ میدهد، یک ساعت دیرتر باززمانبندی میشود. رویدادی که یک هفته بعد رخ میدهد لغو میشود. رخدادها در یک خط ادامه که با نویسهٔ # آغاز میشود مشخص شدهاند، بنابراین معمولاً به عنوان بخشی از رویداد نمایش داده نمیشوند. مانند جاهای دیگر، منطقههای زمانی در ساعتها لحاظ نمیشوند. پس از وقوع رویداد بعدی، تاریخ/زمان خط عنوان `Thu May 13, 2010 12:00' خواهد بود، در حالی که تاریخ/زمان RECURRENCE برابر با `20100513T110000' خواهد بود (توجه داشته باشید رویدادهای لغو شده و جابهجاشده در RECURRENCE به حساب نمیآیند، زیرا مشخصکنندهٔ تکرار منظم بعدی است، اما در تاریخ/زمان خط عنوان لحاظ میشوند).
اجرای calendar -s برای باززمانبندی یک رویداد موجود (برای نمونه در صورتی که فایل تقویم تغییر کرده باشد) ایمن است، و همچنین اجرای آن در چندین نمونه از پوسته مشکلی ندارد، زیرا فایل تقویم هنگام استفاده قفل میشود.
بهطور پیشفرض، رویدادهای منقضیشده به فایل «done» منتقل میشوند؛ گزینهٔ -d را ببینید. برای جلوگیری از این موضوع از -D استفاده کنید.
- -S showprog
- مشخص کردن صریح برنامهای برای استفاده در نمایش رویدادها به جای مقدار شیوهٔ show-prog یا مقدار پیشفرض calendar_show.
- -v
- پرگو (Verbose): نمایش اطلاعات بیشتر دربارهٔ مراحل پردازش. این گزینه برای اطمینان از اینکه تابع تاریخهای موجود در فایل تقویم را با موفقیت تجزیه کرده است، مفید است. calendar_add [ -BL ] event ... یک تکرویداد را در مکان مناسب به تقویم اضافه میکند. رویداد میتواند همانطور که در بخش «Calendar File Format» در بالا توضیح داده شده است، شامل چندین خط باشد. استفاده از این تابع تضمین میکند که فایل تقویم به ترتیب تاریخ و زمان مرتب شده است. همچنین تمهیدات ویژهای را برای قفل کردن فایل در حین تغییر آن در نظر میگیرد. تقویم قدیمی در فایلی با پسوند .old باقی میماند.
گزینه -B نشان میدهد که پشتیبانگیری از فایل تقویم توسط فراخواننده مدیریت میشود و نباید توسط calendar_add انجام گیرد. گزینه -L نشان میدهد که calendar_add نیازی به قفل کردن فایل تقویم ندارد زیرا از قبل قفل شده است. این گزینهها معمولاً مورد نیاز کاربران نخواهند بود.
اگر شیوه reformat-date فعال (true) باشد، تاریخ و زمان ورودی جدید به قالب استاندارد تاریخ بازنویسی خواهد شد: توضیحات این شیوه و شیوه date-format را ببینید.
این تابع میتواند از یک شناسه یکتا ذخیرهشده با هر رویداد استفاده کند تا اطمینان حاصل شود که بهروزرسانیهای رویدادهای موجود بهدرستی پردازش میشوند. ورودی باید شامل کلمه UID، به دنبال آن فاصله خالی (whitespace)، و سپس کلمهای متشکل از ارقام هگزادسیمال با طول دلخواه باشد (تمام ارقام دارای اهمیت هستند، از جمله صفرهای ابتدایی). از آنجا که UID مستقیماً برای کاربر مفید نیست، راحتتر است که آن را در یک خط ادامهدار تو رفته که با یک # شروع میشود پنهان کنید، به عنوان مثال:
Aug 31, 2007 09:30 Celebrate the end of the holidays # UID 045B78A0
خط دوم توسط تابع calendar نمایش داده نخواهد شد.
امکان مشخص کردن کلیدواژه RPT به دنبال CANCELLED به جای یک زمان نسبی وجود دارد. این کار باعث میشود هر رویداد یا مجموعهای از رویدادهای منطبق لغو شود (نیازی نیست رویداد اصلی برای لغو شدن با این روش، به عنوان تکرارشونده علامتگذاری شده باشد). برای تطبیق با یک رویداد موجود در تقویم، یک UID مورد نیاز است.
calendar_add تلاش خواهد کرد تکرارها و رخدادهای رویدادهای تکرارشونده را همانطور که برای زمانبندی رویدادها توسط calendar -s در بالا توضیح داده شد، مدیریت کند. برای زمانبندی مجدد یا لغو یک رویداد تکی، calendar_add باید با ورودیای فراخوانی شود که شامل UID صحیح باشد اما کلیدواژه RPT را شامل نشود، چرا که این مورد به این معنی در نظر گرفته میشود که ورودی برای یک سری از رویدادهای تکرارشونده اعمال میشود و در نتیجه تمام اطلاعات موجود را جایگزین میکند. هر رخدادِ زمانبندیمجددشده یا لغوشده باید یک کلیدواژه OCCURRENCE در ورودی ارائهشده به calendar_add داشته باشد که در فایل تقویم ادغام خواهد شد. هرگونه ارجاع موجود به رخداد جایگزین میشود. رخدادی که به یک رویداد معتبر موجود اشاره نمیکند، به عنوان یک رخداد یکباره به همان ورودی تقویم افزوده میشود.
- calendar_edit
- این تابع ویرایشگر کاربر را برای ویرایش فایل تقویم فراخوانی میکند. اگر آرگومانهایی وجود داشته باشد، به عنوان ویرایشگر مورد استفاده در نظر گرفته میشوند (نام فایل به دستورها الحاق میشود)؛ در غیر این صورت، ویرایشگر توسط متغیر VISUAL (در صورت تنظیم)، وگرنه متغیر EDITOR تعیین میشود.
اگر زمانبند تقویم در حال اجرا بود، پس از ویرایش فایل، calendar -s برای بهروزرسانی آن فراخوانی میشود.
این تابع سیستم تقویم را در حین ویرایش قفل میکند. بنابراین اگر هرگونه احتمال وقوع یک رویداد تقویم در این میان وجود داشته باشد، باید برای ویرایش فایل تقویم از آن استفاده شود. توجه داشته باشید این امر میتواند منجر به معلق ماندن شل دیگری که توابع تقویم در آن فعال است در انتظار قفل شود، بنابراین لازم است در اسرع وقت از ویرایشگر خارج شوید.
- calendar_parse calendar-entry
- این تابع درونی بخشهای یک ورودی تقویم را که به عنوان تنها آرگومان ارسال شده است، تجزیه و تحلیل میکند. در صورتی که آرگومان نتواند به عنوان ورودی تقویم تجزیه شود، تابع وضعیت ۱ و در صورت نادرست بودن تعداد آرگومانهای ارسالی، وضعیت ۲ را برمیگرداند؛ همچنین پارامتر reply را روی یک آرایه انجمنی خالی تنظیم میکند. در غیر این صورت، وضعیت ۰ را برمیگرداند و عناصر آرایه انجمنی reply را به شرح زیر تنظیم مینماید:
- time
- زمان به عنوان رشتهای از ارقام با همان یکای $EPOCHSECONDS.
- schedtime
- زمان زمانبندیشده منظم. اگر این یک رویداد تکرارشونده باشد و رخداد بعدی مجدداً زمانبندی شده باشد، این مقدار ممکن است با زمان واقعی رویداد (time) متفاوت باشد. در این حالت time زمان واقعی و schedtime زمان تکرار منظم قبل از تغییر را ارائه میدهد.
- text1
- متن موجود در خط بدون شامل شدن تاریخ و زمان رویداد، اما شامل هرگونه کلیدواژه و مقادیر WARN یا RPT.
- warntime
- هر زمان هشداری که توسط کلیدواژه WARN به عنوان رشتهای از ارقام شامل زمان هشدار با همان یکای $EPOCHSECONDS مشخص شده باشد. (توجه داشته باشید که این یک زمان مطلق است، نه زمان نسبی ارسالشده.) در صورتی که هیچ کلیدواژه و مقدار WARN منطبق نشود، تنظیم نمیشود.
- warnstr
- رشته خام منطبقشده پس از کلیدواژه WARN، در غیر این صورت تنظیم نمیشود.
- rpttime
- هر زمان تکراری که توسط کلیدواژه RPT به عنوان رشتهای از ارقام شامل زمان تکرار با همان یکای $EPOCHSECONDS مشخص شده باشد. (توجه داشته باشید که این یک زمان مطلق است.) در صورتی که هیچ کلیدواژه و مقدار RPT منطبق نشود، تنظیم نمیشود.
- schedrpttime
- رخداد زمانبندیشده بعدی به صورت منظم برای یک رویداد تکرارشونده قبل از تغییر. این ممکن است با rpttime تفاوت داشته باشد، که زمان واقعی رویدادی است که ممکن است از زمان معمول مجدداً زمانبندی شده باشد.
- rptstr
- رشته خام منطبقشده پس از کلیدواژه RPT، در غیر این صورت تنظیم نمیشود.
- text2
- متن موجود در خط پس از حذف تاریخ و هرگونه کلیدواژه و مقادیر.
- calendar_showdate [ -r ] [ -f fmt ] date-spec ...
- مقدار date-spec دادهشده تفسیر شده و تاریخ و زمان متناظر چاپ میشود. اگر date-spec اولیه با یک + یا - شروع شود، به صورت نسبی نسبت به زمان فعلی در نظر گرفته میشود؛ date-specهای پس از مورد اول، به صورت نسبی نسبت به تاریخی که تا کنون محاسبه شده در نظر گرفته میشوند و وجود + ابتدایی در آن حالت اختیاری است. این امکان را فراهم میسازد تا از سیستم به عنوان یک ماشینحساب تاریخ استفاده شود. به عنوان مثال، calendar_showdate '+1 month, 1st Friday' تاریخ اولین جمعه ماه بعد را نشان میدهد.
با گزینه -r چیزی چاپ نمیشود، اما مقدار تاریخ و زمان بر حسب ثانیه از مبدأ زمان (epoch) در پارامتر REPLY ذخیره میشود.
با گزینه -f fmt قالب تبدیل تاریخ/زمان دادهشده به strftime منتقل میشود؛ یادداشتهای مربوط به شیوه date-format را در زیر ببینید.
به منظور جلوگیری از ابهام با مشخصههای تاریخ نسبی منفی، گزینهها باید در کلمات جداگانه قرار گیرند؛ به عبارت دیگر، -r و -f نباید در یک کلمه ترکیب شوند.
- calendar_sort
- فایل تقویم را به ترتیب تاریخ و زمان مرتب میکند. تقویم قدیمی در فایلی با پسوند .old باقی میماند.
- age
- تابع age میتواند به صورت خودکار بارگذاری (autoload) شده و جدا از سامانه تقویم استفاده شود، اگرچه برای قالببندی تاریخ از تابع calendar_scandate استفاده میکند. این تابع به دستور توکار zsh/stat نیاز دارد، اما تنها از توکار zstat بهره میبرد.
تابع age فایلهایی را که دارای زمان ویرایش معینی هستند برای استفاده به عنوان توصیفکننده تطبیق الگو (glob qualifier) انتخاب میکند. قالب تاریخ همان قالبی است که توسط سامانه تقویم پشتیبانی میشود و در بخش FILE AND DATE FORMATS در بالا توضیح داده شده است.
این تابع میتواند یک یا دو آرگومان دریافت کند، که میتوان آنها را مستقیماً به عنوان آرگومان، یا به طور جداگانه در قالب متغیرهای پوسته ارائه داد.
print *(e:age 2006/10/04 2006/10/09:)
مثال بالا با تمامی فایلهایی که بین آغاز این دو تاریخ ویرایش شدهاند تطبیق مییابد. آرگومان دوم همچنین میتواند یک زمان نسبی باشد که با یک + شروع میشود:
print *(e:age 2006/10/04 +5d:)
مثال بالا معادل مثال قبلی است.
علاوه بر کاربرد ویژهٔ روزهای هفته، today و yesterday، میتوان زمانها را بدون تاریخ نیز مشخص کرد؛ این زمانها به امروز اعمال میشوند. بدیهی است که چنین کاربردهایی در حوالی نیمهشب مشکلساز میشوند.
print *(e-age 12:00 13:30-)
مثال بالا فایلهای ویرایششده در امروز بین ساعت ۱۲:۰۰ و ۱۳:۰۰ را نشان میدهد.
print *(e:age 2006/10/04:)
مثال بالا با تمامی فایلهای ویرایششده در آن تاریخ مطابقت دارد. اگر آرگومان دوم حذف شود، دقیقاً ۲۴ ساعت پس از آرگومان اول در نظر گرفته میشود (حتی اگر آرگومان اول شامل ساعت باشد).
print *(e-age 2006/10/04:10:15 2006/10/04:10:45-)
مثال بالا زمانها را مشخص میکند. توجه داشته باشید که فاصله خالی (whitespace) درون مشخصات زمان و تاریخ باید نقلقول (quote) شود تا اطمینان حاصل شود age آرگومانهای صحیح را دریافت میکند؛ به همین دلیل از دونقطهٔ اضافی برای جداسازی تاریخ و زمان استفاده شده است.
AGEREF=2006/10/04:10:15 AGEREF2=2006/10/04:10:45 print *(+age)
این نمونه همان مثال قبلی را با استفاده از شکل دیگری از ارسال آرگومان نشان میدهد. تاریخها و زمانها در متغیرهای AGEREF و AGEREF2 تا زمان لغو (unset) معتبر میمانند، اما در صورت ارسال هر آرگومانی به عنوان آرگومان صریح به age بازنویسی میشوند. هرگونه آرگومان صریح باعث نادیده گرفته شدن هر دو متغیر میشود.
به جای تاریخ و زمان صریح، میتوان با معرفی نام فایل به همراه یک دونقطه، از زمان ویرایش یک فایل به عنوان تاریخ و زمان برای هر یک از آرگومانها استفاده کرد:
print *(e-age :file1-)
با تمام فایلهایی تطبیق مییابد که در همان روز (۲۴ ساعت که از نیمهشب آغاز میشود) مربوط به file1 ایجاد شدهاند.
print *(e-age :file1 :file2-)
با تمام فایلهایی که نه زودتر از file1 و نه دیرتر از file2 ویرایش شدهاند تطبیق مییابد؛ دقت در اینجا تا نزدیکترین ثانیه است.
- after
- before
- توابع after و before نسخههای سادهتری از age هستند که تنها یک آرگومان میگیرند. این آرگومان مشابه آرگومان age تجزیه میشود؛ اگر آرگومانی داده نشود، متغیر AGEREF بررسی میشود. همانطور که از نام این توابع پیداست، یک فایل در صورتی تطبیق مییابد که زمان ویرایش آن بعد یا قبل از زمان و تاریخ مشخصشده باشد. اگر تنها زمان مشخص شده باشد، تاریخ امروز در نظر گرفته میشود.
بنابراین دو مثال زیر معادل یکدیگر هستند:
print *(e-after 12:00-) print *(e-after today:12:00-)
سازوکار سبک در zsh با استفاده از دستور zstyle در zshmodules(1) شرح داده شده است. این همان سازوکاری است که در سامانهٔ تکمیل (completion) استفاده میشود.
تمام سبکهای زیر در بافتار :datetime:function:، برای نمونه :datetime:calendar: بررسی میشوند.
- calendar-file
- مکان تقویم اصلی. پیشفرض ~/calendar است.
- date-format
- یک رشتهٔ قالببندی strftime (به strftime(3) مراجعه کنید) بههمراه افزونههای zsh که در صورت تکرقمی بودن عدد، ارقام مختلف را بدون صفر یا فاصلهٔ ابتدایی ارائه میدهد، همانطور که برای قالب اعلان %D{string} در بخش EXPANSION OF PROMPT SEQUENCES در zshmisc(1) شرح داده شده است.
این سبک برای قالببندی تاریخها در خروجی calendar (هم برای پشتیبانی از گزینهٔ -v و هم هنگام افزودن مجدد رویدادهای تکرارشونده به فایل تقویم) و همچنین در calendar_showdate به عنوان قالب نهایی خروجی استفاده میشود.
اگر این سبک تنظیم نشده باشد، مقدار پیشفرض مشابه با قالب استاندارد سیستم در خروجی دستور date خواهد بود (که با نام «قالب ctime» نیز شناخته میشود): `%a %b %d %H:%M:%S %Z %Y'.
- done-file
- مکان فایلی که رویدادهای گذشته به آن ضمیمه میشوند. پیشفرض، مکان فایل تقویم با پسوند .done است. این سبک میتواند روی یک رشتهٔ خالی تنظیم شود که در این صورت فایلی برای رویدادهای انجامشده نگهداری نخواهد شد.
- reformat-date
- مقداری بولی که توسط calendar_add استفاده میشود. اگر درست (true) باشد، تاریخ و زمان مدخلهای جدید اضافهشده به تقویم طبق قالب مشخصشده توسط سبک date-format یا پیشفرض آن بازقالببندی خواهد شد. تنها تاریخ و زمان خود رویداد بازقالببندی میشود؛ تاریخها و زمانهای فرعی مانند موارد مربوط به تکرار و زمانهای هشدار دستنخورده باقی میمانند.
- show-prog
- برنامهای که توسط calendar برای نمایش رویدادها اجرا میشود. زمان شروع و پایان رویدادهای درخواستی بر حسب ثانیه از مبدا زمان (epoch) به همراه متن رویداد به آن ارسال خواهد شد. توجه داشته باشید که calendar -s از زمان شروع و پایانی برابر با یکدیگر برای هشدار دادن دربارهٔ رویدادهای خاص استفاده میکند.
پیشفرض تابع calendar_show است.
- warn-time
- مدتزمان پیش از رویداد که در آن یک هشدار نمایش داده میشود، در صورتی که سطر اول رویداد شامل متن EVENT reltime نباشد. پیشفرض ۵ دقیقه است.
توابع کمکی (UTILITY FUNCTIONS)
- calendar_lockfiles
- تلاش میکند فایلهای ارائهشده در آرگومان را قفل کند. برای جلوگیری از مشکلات قفلگذاری فایلهای شبکهای، این کار به روشی ویژه (ad hoc) با تلاش برای ایجاد یک پیوند نمادین به فایل با نام file.lockfile انجام میشود. هیچ تابع سیستمی دیگری برای قفل کردن استفاده نمیشود، بدین معنی که فایل توسط هر ابزاری که از این سازوکار استفاده نمیکند قابل دسترسی و تغییر است. بهویژه، کاربر از ویرایش همزمان فایل تقویم منع نمیشود، مگر اینکه از calendar_edit استفاده شود.
پیش از انصراف، سه بار برای قفل کردن فایل تلاش میشود. اگر پیمانهٔ zsh/zselect در دسترس باشد، فواصل زمانی تلاشها با تأخیر تصادفی (jitter) همراه میشود تا احتمال تلاش مجدد همزمان چند نمونه از تابع فراخواننده کاهش یابد.
فایلهای قفلشده به آرایهٔ lockfiles ضمیمه میشوند که باید برای فراخواننده محلی (local) باشد.
اگر تمام فایلها با موفقیت قفل شوند، وضعیت صفر و در غیر این صورت وضعیت یک برگردانده میشود.
این تابع میتواند به عنوان یک تابع عمومی قفلگذاری فایل استفاده شود، گرچه تنها در صورتی کار خواهد کرد که فقط از همین سازوکار برای قفل کردن فایلها استفاده شود.
- calendar_read
- این یک پشتیبان (backend) است که توسط توابع مختلف دیگر برای تجزیهٔ فایل تقویم (که به عنوان تنها آرگومان ارسال میشود) به کار میرود. آرایهٔ calendar_entries روی فهرست رویدادهای موجود در فایل تنظیم میشود؛ هیچ هرسی انجام نمیشود جز اینکه علامتهای امپرسند (&) از ابتدای سطر حذف میشوند. هر مدخل میتواند شامل چند سطر باشد.
- calendar_scandate
- این یک تابع عمومی برای تجزیهٔ تاریخها و زمانهاست که میتواند مستقل از سامانهٔ تقویم استفاده شود. آرگومان ورودی، مشخصات یک تاریخ یا زمان است همانطور که در بخش FILE AND DATE FORMATS در بالا شرح داده شد. پارامتر REPLY روی تعداد ثانیههای سپریشده از مبدا زمان (epoch) متناظر با آن تاریخ یا زمان تنظیم میشود. بهطور پیشفرض، تاریخ و زمان میتوانند در هر کجای آرگومان ارائهشده قرار داشته باشند.
اگر تاریخ و زمان با موفقیت تجزیه شوند وضعیت صفر، وگرنه یک برگردانده میشود.
گزینهها:
- -a
- تاریخ و زمان به ابتدای آرگومان لنگر میشوند؛ در صورتی که متنی پیش از آنها وجود داشته باشد تطبیق داده نخواهند شد.
- -A
- تاریخ و زمان به هر دو انتهای ابتدا و پایان آرگومان لنگر میشوند؛ در صورت وجود هرگونه متن دیگر در آرگومان تطبیق داده نخواهند شد.
- -d
- فعالسازی خروجی اشکالزدایی اضافی.
- -m
- منفی (منها). هنگامی که -R anchor_time نیز داده شده باشد، زمان نسبی به سمت عقب از anchor_time محاسبه میشود.
- -r
- آرگومان ارسالشده باید به عنوان یک زمان نسبی تجزیه شود.
- -R anchor_time
- آرگومان ارسالشده باید به عنوان یک زمان نسبی تجزیه شود. این زمان نسبت به anchor_time (زمانی بر حسب ثانیه از مبدا زمان) محاسبه میشود و مقدار بازگرداندهشده، زمان مطلقی است که از پیش بردن anchor_time به میزان زمان نسبی دادهشده به دست میآید. این سازوکار اجازه میدهد طول ماهها بهدرستی لحاظ شود. اگر روز نهایی در ماه دادهشده وجود نداشته باشد، آخرین روز ماه پایانی ارائه میشود. برای نمونه، اگر زمان مبنا در ۳۱ ژانویه ۲۰۰۷ باشد و زمان نسبی ۱ ماه باشد، زمان نهایی همان ساعت در ۲۸ فوریه ۲۰۰۷ خواهد بود.
- -s
- علاوه بر تنظیم REPLY، مقدار REPLY2 را روی باقیماندهٔ آرگومان پس از حذف تاریخ و زمان تنظیم میکند. اگر گزینهٔ -A داده شده باشد، این مقدار خالی خواهد بود.
- -t
- پذیرش زمان بدون مشخص کردن تاریخ. تاریخ، امروز فرض میشود. اگر ناقوس نیمهشب در حال نواختن دوازده باشد (دقیقاً در مرز نیمهشب)، رفتار نامشخص خواهد بود.
- calendar_show
- تابعی که بهطور پیشفرض برای نمایش رویدادها استفاده میشود. این تابع زمان شروع و پایان رویدادها (هر دو بر حسب ثانیههای epoch) و شرح رویداد را میپذیرد.
رویداد همواره در خروجی استاندارد چاپ میشود. اگر ویرایشگر خط فرمان فعال باشد (که معمولاً چنین است)، خط فرمان پس از نمایش خروجی دوباره نشان داده خواهد شد.
اگر متغیر DISPLAY مقداردهی شده باشد و زمان شروع و پایان یکسان باشند (که نشاندهندهٔ یک رویداد زمانبندیشده است)، این تابع از دستور xmessage برای نمایش پنجرهای شامل جزئیات رویداد استفاده میکند.
از آنجا که این سیستم کاملاً بر پایهٔ توابع پوسته بنا شده است (همراه با پشتیبانی اندکی از ماژول zsh/datetime)، سازوکارهای بهکاررفته به اندازهٔ موارد ارائهشده توسط یک ابزار تقویم اختصاصی قابلاطمینان و استوار نیستند. در نتیجه، کاربر نباید برای هشدارهای حیاتی به پوسته اتکا کند.
تابعی به نام calendar_delete وجود ندارد.
هیچ پشتیبانیای برای بومیسازی تاریخها و زمانها، یا استفاده از منطقههای زمانی وجود ندارد.
دورههای نسبی ماهها و سالها متغیر بودن تعداد روزها را در نظر نمیگیرند.
تابع calendar_show در حال حاضر بهصورت ثابت برای استفاده از xmessage جهت نمایش هشدارها در نمایشگرهای X Window System برنامهریزی شده است. این مورد باید قابلپیکربندی باشد و در حالت ایدهآل یکپارچگی بهتری با میزکار داشته باشد.
calendar_lockfiles در حین انتظار برای دریافت قفل روی یک فایل، پوسته را معلق میکند. اگر این تابع از یک وظیفهٔ زمانبندیشده فراخوانی شود، باید در عوض رویدادی را که باعث فراخوانی شده است دوباره زمانبندی کند.
| July 12, 2026 | zsh 5.9.2 |