.TH TKNEWSBIFF 1 "1 January 1994" .SH "نام (NAME)" tknewsbiff \- نمایش پنجره بازشو هنگام دریافت اخبار جدید در گروه‌های خبری .SH "خلاصه دستور (SYNOPSIS)" .B tknewsbiff [ .I server or config-file ] .br .SH "مقدمه (INTRODUCTION)" .B tknewsbiff هنگامی که اخبار خوانده‌نشده‌ای در گروه‌های خبری مورد علاقه شما وجود داشته باشد یک پنجره بازشو نمایش می‌دهد و پس از خواندن اخبار توسط شما، پنجره را می‌بندد. .B tknewsbiff می‌تواند به صورت اختیاری صدایی پخش کند، برنامه خبرخوان شما را اجرا کند و غیره. .SH "انتخاب گروه‌های خبری (SELECTING NEWSGROUPS)" به صورت پیش‌فرض، فایل پیکربندی ‎~/.tknewsbiff‎ نحوه رفتار .B tknewsbiff را مشخص می‌کند. نحو این فایل از قوانین معمول Tcl پیروی می‌کند - با این حال، حتی اگر Tcl را بلد نباشید، به جز پیچیده‌ترین پیکربندی‌ها، بقیه موارد کاملاً واضح خواهند بود. هر گروه خبری (یا مجموعه‌ای از گروه‌های خبری) که باید تحت نظر قرار گیرد، با استفاده از دستور "watch" مشخص می‌شود؛ به عنوان مثال: .nf watch dc.dining watch nist.* watch comp.unix.wizard -threshold 3 watch *.sources.* -threshold 20 .fi به ازای هر الگوی گروه خبری، هر گروهی که با آن مطابقت داشته باشد و شما در آن عضویت داشته باشید (مطابق با فایل newsrc شما)، برای گزارش‌دهی واجد شرایط خواهد بود. به صورت پیش‌فرض، .B tknewsbiff در صورتی که حداقل یک مقاله خوانده‌نشده وجود داشته باشد، وضعیت آن گروه را گزارش می‌کند. گزینه "-threshold" مقدار آستانه را به عدد بعد از خود تغییر می‌دهد. برای مثال، "-threshold 3" به این معناست که پیش از گزارش گروه خبری توسط .BR tknewsbiff ، باید حداقل سه مقاله خوانده‌نشده وجود داشته باشد. اگر هیچ دستور watch داده نشود (یا هیچ فایل پیکربندی وجود نداشته باشد)، تمام گروه‌هایی که در آن‌ها عضویت دارید تحت نظر قرار می‌گیرند. برای صرف‌نظر کردن از گروه‌های خبری که در حالت عادی گزارش می‌شدند، از دستور "ignore" استفاده کنید. برای مثال، موارد زیر با تمام گروه‌های خبری comp.* و nist.* مطابقت دارند، به جز گروه‌های nist.posix یا گروه‌های بحث (.d): .nf watch comp.* watch nist.* ignore nist.posix.* ignore *.d .fi گزینه "-new" دستوری را تعیین می‌کند که هنگام گزارش گروه خبری برای نخستین بار به عنوان گروهی با اخبار خوانده‌نشده، اجرا می‌شود. برای مثال، خطوط زیر دستور یونیکس "play" را برای پخش صدا فراخوانی می‌کنند: .nf watch dc.dining -new "exec play /usr/local/sounds/yumyum.au" watch rec.auto* -new "exec play /usr/local/sounds/vroom.au" .fi می‌توانید با تعریف رویه‌ها (procedures)، از طولانی شدن دستورات بکاهید. برای نمونه، اگر گزینه‌های متعددی با -new دارید که همگی فایل صوتی پخش می‌کنند، می‌توانید یک رویه صوتی تعریف کنید. این کار باعث می‌شود عبارت‌های -new بسیار کوتاه‌تر شوند: .nf proc play {sound} { exec play /usr/local/sounds/$sound.au } watch dc.dining -new "play yumyum" watch rec.auto* -new "play vroom" .fi به عنوان یک نکته جانبی، می‌توانید یک کاراکتر "&" در انتهای دستور "exec" بگذارید تا دستورات به صورت غیرهمگام (asynchronously) اجرا شوند؛ هرچند احتمالاً هنگام پخش فایل‌های صوتی انجام این کار ایده مناسبی نیست. متغیر "newsgroup" یک متغیر فقط‌خواندنی است که نام گروه خبری در حال گزارش را دربردارد. این ویژگی هنگامی که اقدام با یک الگو تحریک می‌شود مفید است. برای مثال، خط زیر می‌تواند نام گروه خبری را به یک ترکیب‌کننده گفتار ارسال کند: .nf watch * -new { exec play herald.au exec speak "New news has arrived in $newsgroup." } .fi گزینه "\-display" دستوری را تعیین می‌کند که هر بار گروه خبری با اخبار خوانده‌نشده گزارش می‌شود، اجرا گردد. دستور ویژه "display" دستور پیش‌فرض است؛ این دستور زمان‌بندی می‌کند که هنگام بازنویسی صفحه نمایش tknewsbiff، مقدار $newsgroup روی صفحه نوشته شود. برای مثال، با تعیین صریح گزینه -display بدون دستور display، می‌توانید نمایش گروه‌های خبری را که قبلاً از طریق -new گزارش شده‌اند غیرفعال کنید: .nf watch dc.dining -new {exec play yumyum.au} -display {} .fi اگر می‌خواهید اقدامی را مکرراً اجرا کنید و در عین حال .I همچنان گروه خبری را به شیوه پیش‌فرض نمایش دهید، دستور display را به صراحت از طریق گزینه -display فراخوانی کنید؛ به عنوان مثال: .nf watch *security* -display { exec play red-alert.au display } .fi اقدامات مرتبط با گزینه‌های -new و -display تنها یک بار برای هر گروه خبری منطبق اجرا می‌شوند. دستور اجراشده همان دستوری است که با اولین الگوی منطبق در فایل پیکربندی که حد آستانه را رعایت می‌کند مرتبط است. هر دستوری که صرفاً در فایل پیکربندی ذکر شده باشد، هر بار پیش از حلقه به‌روزرسانی در tknewsbiff اجرا می‌شود. رویه رزروشده (اما تعریف‌شده توسط کاربر) با نام "user"، بلافاصله پس از زمان‌بندی گروه‌های خبری برای درج در صفحه نمایش و پیش از نمایش واقعی آن‌ها اجرا می‌گردد. برای مثال، فرض کنید مقالات خوانده‌نشده در چندین گروه rec.auto ظاهر می‌شوند و شما برای هر یک صدای یکسانی پخش می‌کنید. برای جلوگیری از پخش مکرر و پشت سر هم صدا، کاری کنید که دستور -new صرفاً یک فلگ را مقداردهی کند. سپس در رویه user، اگر این فلگ تنظیم شده بود، صدا را پخش کرده و فلگ را بازنشانی نمایید. از رویه user همچنین می‌توان برای اجرای یک برنامه خبرخوان استفاده کرد. این کار از باز شدن چند برنامه خبرخوان صرفاً به دلیل وجود اخبار در چندین گروه خبری جلوگیری می‌کند. (البته باید بررسی شود که برنامه خبرخوان از قبل در حال اجرا نباشد.) .SH "متغیرهای بیشتر (MORE VARIABLES)" خطوط نمونه زیر متغیرهایی را نشان می‌دهند که می‌توانند بر رفتار .B tknewsbiff تأثیر بگذارند: .nf set delay 120 set server news.nist.gov set server_timeout 60 set newsrc ~/.newsrc set width 40 set height 20 set active_file /usr/news/lib/active .fi برنامه .B tknewsbiff به تناوب بین بررسی اخبار خوانده‌نشده و به خواب رفتن جابه‌جا می‌شود. متغیر "delay" مشخص می‌کند که برنامه چند ثانیه باید به خواب برود. متغیر "server" نام یک سرور اخبار NNTP را مشخص می‌کند. مقدار پیش‌فرض "news" است. متغیر "server" تنها در صورتی استفاده می‌شود که متغیر "active_file" تنظیم نشده باشد. متغیر "server_timeout" مشخص می‌کند که پیش از انصراف، چند ثانیه برای دریافت پاسخ از سرور باید منتظر ماند. مقدار 1- به معنای انتظار همیشگی یا تا زمان سررسید مهلت خود سرور است. مقدار پیش‌فرض ۶۰ ثانیه است. متغیر "newsrc" نام فایل ‎.newsrc‎ شما را تعیین می‌کند. به صورت پیش‌فرض، .B tknewsbiff در دایرکتوری خانگی شما به دنبال فایل newsrc می‌گردد. در صورت یافتن یک فایل newsrc مخصوص سرور، از آن استفاده می‌شود. برای مثال اگر سرور را روی "cubit.nist.gov" تنظیم کرده باشید، .B tknewsbiff به دنبال ‎~/.newsrc-cubit.nist.gov‎ می‌گردد (این قاعده برنامه Emacs gnus است - که هنگام خواندن اخبار از چندین سرور بسیار کارآمد است). اگر فایل newsrc ویژه‌ای برای سرور موجود نباشد، .B tknewsbiff از ‎~/.newsrc‎ استفاده می‌کند. متغیر "width" عرض پنجره‌ای را که .B tknewsbiff برای نمایش اطلاعات استفاده می‌کند، تعیین می‌کند. اگر نام هر گروه خبری بیش از حد طولانی باشد، کوتاه می‌شود تا تعداد مقالات همچنان قابل نمایش باشد. می‌توانید اندازه پنجره را به صورت دستی تغییر دهید تا بخش‌های کوتاه‌شده را ببینید. با این حال، اگر فایل پیکربندی شما متغیر width را تنظیم کند، دفعه بعد که .B tknewsbiff اخبار خوانده‌نشده را بررسی کند و صفحه نمایش خود را به‌روزرسانی کند، پنجره به همان اندازه اولیه بازگردانده می‌شود. متغیر "height" حداکثر ارتفاعی را که .B tknewsbiff برای نمایش اطلاعات به کار می‌گیرد، تعیین می‌کند. اگر گروه‌های خبری کمتری گزارش شوند، .B tknewsbiff پنجره را به تناسب کوچک‌تر می‌کند. شما می‌توانید اندازه پنجره را به صورت دستی تغییر دهید، اما اگر فایل پیکربندی شما متغیر height را تعیین کرده باشد، در بررسی بعدی اخبار خوانده‌نشده، پنجره به اندازه تنظیم‌شده بازمی‌گردد. متغیر "active_file" نام فایل فعال اخبار را مشخص می‌کند. در صورت تنظیم شدن، فایل فعال مستقیماً و با اولویت نسبت به استفاده از NNTP خوانده می‌شود (حتی اگر متغیر "server" تنظیم شده باشد). این قابلیت به‌ویژه برای آزمایش فایل‌های پیکربندی جدید مفید است، زیرا می‌توانید یک فایل فعال ساختگی را ویرایش کنید و سپس دکمه ۲ را کلیک نمایید تا بلافاصله واکنش .B tknewsbiff را مشاهده کنید (بخش دکمه‌ها را در زیر ببینید). اگر متغیر محیطی DOTDIR تنظیم شده باشد، مقدار آن به عنوان دایرکتوری یافتن تمام دات‌فایل‌ها به جای دایرکتوری خانگی استفاده می‌شود. به طور خاص، این متغیر بر فایل پیکربندی .B tknewsbiff و فایل ‎.newsrc‎ تأثیر می‌گذارد (به شرطی که متغیر newsrc به طور صریح تنظیم نشده باشد). .SH "پایش سرورهای خبری مختلف (WATCHING DIFFERENT NEWS SERVERS)" برای تحت نظر گرفتن چندین سرور، برنامه .B tknewsbiff را چندین بار اجرا کنید. (از آنجا که به فایل‌های ‎.newsrc‎ متفاوتی نیاز دارید و سرورها نیز گروه‌های خبری و شماره مقالات مختلفی دارند، تلاش برای انجام این کار در یک پردازش منفرد فایده‌ای ندارد.) می‌توانید با یک آرگومان مناسب، .B tknewsbiff را به سرور دیگری هدایت کنید. این آرگومان هم به عنوان نام فایل پیکربندی و هم به عنوان پسوندی برای رشته "‎~/.tknewsbiff-‎" بررسی می‌شود؛ بنابراین اگر می‌خواهید سرور "kidney" را تحت نظر بگیرید، اطلاعات پیکربندی tknewsbiff را در ‎~/.tknewsbiff-kidney‎ ذخیره کنید. دو دستور زیر هر دو از آن فایل پیکربندی استفاده خواهند کرد: .nf tknewsbiff kidney tknewsbiff ~/.tknewsbiff-kidney .fi در هر دو حالت، سرور واقعی برای برقراری ارتباط با مقدار متغیر server در فایل پیکربندی تعیین می‌شود. اگر هیچ فایل پیکربندی پیدا نشود، از آرگومان به عنوان نام سرور برای ارتباط استفاده می‌شود. این قابلیت امکان اجرای .B tknewsbiff را بدون هیچ‌گونه آماده‌سازی قبلی فراهم می‌کند. اگر آرگومان کلیدواژه ویژه "active" باشد (یا به "active/" ختم شود)، به عنوان نام یک فایل فعال به کار می‌رود. این مقدار به نوبه خود برای مقداردهی اولیه متغیر "active_file" استفاده می‌شود تا .B tknewsbiff به جای استفاده از NNTP، مستقیماً از فایل فعال بخواند. ایجاد فایل فعال اختصاصی روشی آسان برای آزمایش فایل پیکربندی شماست. برای مثال، پس از اجرای دستور زیر، می‌توانید فایل فعال خود را مکرراً ویرایش کرده و دستور update-now را (با فشردن دکمه ۲ یا تنظیم متغیر delay روی مقداری بسیار کم) فعال نمایید تا نحوه واکنش .B tknewsbiff را مشاهده کنید. فایل فعال باید از قالب یک فایل فعال واقعی پیروی کند: یک گروه خبری در هر خط. پس از نام گروه خبری، بالاترین شماره مقاله و پایین‌ترین شماره مقاله قرار می‌گیرد. در پایان، حرف y یا m می‌آید. حرف m نشان‌دهنده مدیریت‌شده بودن (moderated) گروه است و حرف y نشان می‌دهد که ارسال پست مجاز است. .SH "پنجره (WINDOW)" هنگامی که اخبار خوانده‌نشده یافت شود، یک پنجره بازشو به نمایش درمی‌آید. این پنجره نام گروه‌های خبری و تعداد مقالات خوانده‌نشده در هر یک را فهرست می‌کند (مگر اینکه توسط گزینه -display لغو شده باشد). زمانی که دیگر هیچ خبر خوانده‌نشده‌ای وجود نداشته باشد، پنجره ناپدید می‌شود (اگرچه پردازش همچنان در پس‌زمینه اجرا خواهد ماند). .SH "کلیدها و دکمه‌ها (BUTTONS)" تخصیص دکمه‌ها یا کلیدها از طریق دستورات bind انجام می‌شود و شما می‌توانید آن‌ها را آزادانه تغییر دهید. دستورات پیش‌فرض bind به شرح زیر هستند: .nf bind .list <1> help bind .list <2> update-now bind .list <3> unmapwindow .fi به صورت پیش‌فرض، دکمه ۱ (کلیک چپ) به "help" اختصاص یافته است. دستور help باعث می‌شود .B tknewsbiff یک پنجره راهنما نمایش دهد. به صورت پیش‌فرض، دکمه ۲ (کلیک وسط) به "update-now" متصل است. دستور update-now سبب می‌شود .B tknewsbiff فوراً وجود اخبار خوانده‌نشده را بررسی کند. اگر سرور اخبار شما کند باشد یا تعداد بسیار زیادی گروه خبری داشته باشد، یا اینکه الگوهای زیادی در فایل پیکربندی خود داشته باشید، به‌روزرسانی واقعی پنجره توسط .B tknewsbiff ممکن است زمان قابل توجهی طول بکشد. به صورت پیش‌فرض، دکمه ۳ (کلیک راست) به "unmapwindow" متصل است. دستور unmapwindow باعث می‌شود .B tknewsbiff پنجره را تا زمان یافتن اخبار خوانده‌نشده بعدی از صفحه نمایش حذف کند (دستور mapwindow مجدداً پنجره را بازمی‌گرداند). به عنوان مثال، در اینجا کدی آورده شده است که هنگام فشردن همزمان کلید Shift و دکمه ۱ در پنجره لیست، یک xterm باز کرده و rn را اجرا می‌کند: .nf bind .list { exec xterm -e rn & } .fi این هم مثالی مشابه است، با این تفاوت که به برنامه rn می‌گوید فقط گروه خبری را که هنگام کلیک زیر نشانگر موشوار بوده است بررسی کند (متغیر "display_list" در ادامه این صفحه راهنما توضیح داده شده است): .nf bind .list { exec xterm -e rn [lindex $display_list [.list nearest %y]] & } .fi .SH "سایر دستورات و متغیرها (OTHER COMMANDS AND VARIABLES)" دستورات توکار اشاره‌شده تا اینجا عبارتند از: watch, ignore, display, help, update-now, unmapwindow و mapwindow. هرگونه دستور زبان Tcl و Tk نیز می‌تواند به کار رود. به طور مشخص، فهرست گروه‌های خبری در ویجت فهرست ‎".list"‎ و نوار پیمایش در ویجت نوار پیمایش ‎".scroll"‎ ذخیره شده‌اند. برای مثال اگر می‌خواهید رنگ پس‌زمینه و پیش‌زمینه فهرست گروه‌های خبری را تغییر دهید، می‌توانید بنویسید: .nf .list config -bg honeydew1 -fg orchid2 .fi این موارد همچنین از طریق پایگاه‌داده منابع X (X resource database) نیز قابل کنترل هستند. با این وجود، فایل پیکربندی اجازه می‌دهد دستوراتی با هر مقداری از پیچیدگی به جای انتساب‌های ساده ارزیابی شوند. برخی دستورات Tcl/Tk می‌توانند عملکرد صحیح .B tknewsbiff را مختل کنند. این موضوع برای هرکسی که دانش کافی برای نوشتن چنین دستوراتی دارد کاملاً آشکار خواهد بود. به عنوان یک مثال ساده، برنامه فرض می‌کند فونت موجود در کادر فهرست دارای عرض ثابت (fixed-width) است؛ اگر از قلمی با عرض متغیر استفاده کنید، گروه‌های خبری احتمالاً در یک راستا تراز نخواهند شد. متغیرهای زیر در دسترس بوده و می‌توانند برای کاربردهای خاص مورد استفاده قرار گیرند. سایر متغیرها خصوصی هستند. متغیرها و دستورات خصوصی با "_" آغاز می‌شوند، بنابراین نیازی به نگرانی در مورد تداخل تصادفی نام‌ها وجود ندارد. آرایه "db" پایگاه‌داده‌ای است که اطلاعات مربوط به اخبار خوانده‌شده و خوانده‌نشده را نگهداری می‌کند: ‎db($newsgroup,hi)‎ بالاترین شماره مقاله موجود است و ‎db($newsgroup,seen)‎ بالاترین شماره مقاله‌ای است که شما خوانده‌اید. تعدادی از لیست‌ها اطلاعات مفیدی را نگهداری می‌کنند: متغیر "active_list" فهرستی از گروه‌های خبری شناخته‌شده است؛ "seen_list" فهرستی از گروه‌های خبری است که هنگام پردازش گزینه‌های -new و -display تاکنون مشاهده شده‌اند؛ "previous_seen_list" همان "seen_list" چرخه قبلی است؛ "ignore_list" فهرستی از الگوهای گروه‌های خبری نادیده‌گرفته‌شده است؛ "watch_list" فهرستی از الگوهای گروه‌های خبری تحت نظر است؛ و "display_list" فهرستی از گروه‌های خبری است که در فرصت بعدی نمایش داده خواهند شد. .SH "به‌روزرسانی فایل‌ها (UPDATING YOUR FILES)" برنامه .B tknewsbiff هر بار که برای بررسی اخبار خوانده‌نشده فعال می‌شود، به طور خودکار فایل پیکربندی شما را دوباره می‌خواند. برای وادار کردن .B tknewsbiff به بازخوانی فوری فایل (مانند زمانی که در حال آزمایش پیکربندی جدیدی هستید یا به تازگی فایل newsrc خود را ویرایش کرده‌اید)، دکمه ۲ را در صفحه نمایش فشار دهید (بخش دکمه‌ها را در بالا ببینید). .SH "هشدارها (CAVEATS)" برنامه .B tknewsbiff تعداد مقالات خوانده‌نشده را به صورت تفاضل بالاترین شماره مقاله موجود از بالاترین شماره مقاله‌ای که خوانده‌اید تعریف می‌کند؛ بنابراین اگر آخرین مقاله یک گروه خبری را خوانده باشید اما مقالات ماقبل آن را نخوانده باشید، .B tknewsbiff تصور می‌کند که هیچ مقاله خوانده‌نشده‌ای وجود ندارد. (با خواندن فایل فعال انجام کاری بهتر از این غیرممکن است و انجام دقیق‌تر این کار از طریق پروتکل NNTP بسیار زمان‌بر خواهد بود، چرا که سرورها روش کارآمدی برای گزارش حفره‌ها و وقفه‌های میان مقالات گروه‌های خبری خود ارائه نمی‌دهند). خوشبختانه این تعریف از نظر بیشتر افراد یک مزیت تلقی می‌شود؛ زیرا به شما امکان می‌دهد مقالاتی را بخوانید و سپس آن‌ها را "unread" علامت‌گذاری کنید، بدون اینکه .B tknewsbiff به صورت مداوم خوانده‌نشده بودن آن‌ها را به شما یادآوری کند. .SH "نگرانی‌های بی‌مورد (UNWARRANTED CONCERNS)" مدیر سرور اخبار شما ممکن است نگران باشد که استفاده همزمان تعداد زیادی از کاربران از .B tknewsbiff بار سنگینی به سرور NNTP تحمیل کند. در عمل، این تأثیر حتی با فواصل زمانی تأخیر بسیار کم نیز ناچیز است. برنامه .B tknewsbiff برای جمع‌آوری تمام اطلاعات مورد نیاز خود تنها از یک پرس‌وجوی واحد NNTP استفاده می‌کند - این برنامه صرفاً درخواست دریافت فایل فعال (active file) را می‌دهد. سرور NNTP هیچ‌گونه محاسبه، قالب‌بندی و پردازشی انجام نمی‌دهد و صرفاً فایل را ارسال می‌کند؛ تمام پردازش‌های اصلی به صورت محلی در خود برنامه .B tknewsbiff انجام می‌شود. .SH "اشکالات (BUGS)" این صفحه راهنما از خود برنامه طولانی‌تر است! .SH "همچنین ببینید (SEE ALSO)" .I "Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs" \fRby Don Libes, O'Reilly and Associates, January 1995. .SH "نویسندگان (AUTHORS)" Don Libes, National Institute of Standards and Technology (NIST)