.TH "ZSHCOMPSYS" "1" "July 12, 2026" "zsh 5\&.9\&.2" .SH "نام (NAME)" zshcompsys \- سامانه کامل‌سازی zsh .\" Yodl file: Zsh/compsys.yo .SH "توضیحات (DESCRIPTION)" .PP این سند کد شل را برای سامانه کامل‌سازی «جدید» که به آن \fBcompsys\fP گفته می‌شود، شرح می‌دهد\&. این سامانه در قالب توابع شل و بر اساس ویژگی‌های توصیف‌شده در \fIzshcompwid\fP(1) نوشته شده است\&. .PP این ویژگی‌ها وابسته به زمینه (contextual) بوده و به نقطه‌ای که کامل‌سازی در آن آغاز می‌شود حساس هستند\&. بسیاری از کامل‌سازی‌ها از پیش فراهم شده‌اند\&. به همین دلیل، کاربر می‌تواند بدون دانستن جزئیاتی فراتر از نحوه راه‌اندازی اولیه سامانه، کارهای بسیار زیادی را به انجام برساند؛ این موارد در ادامه در بخش INITIALIZATION شرح داده شده‌اند\&. .PP زمینه‌ای که تعیین می‌کند چه کامل‌سازی‌ای باید انجام شود ممکن است موارد زیر باشد: .PD 0 .TP .PD \(bu موقعیت یک آرگومان یا گزینه: این موارد موقعیتی را در خط فرمان که کامل‌سازی در آن درخواست شده است توصیف می‌کنند\&. برای نمونه «نخستین آرگومان rmdir، کلمه‌ای که کامل می‌شود نام یک دایرکتوری است»؛ .TP \(bu یک زمینه خاص، که نشان‌دهنده عنصری در نحو شل است\&. برای نمونه «یک کلمه در موقعیت دستور» یا «اندیس یک آرایه»\&. .PP مشخصات کامل یک زمینه، شامل عناصر دیگری نیز هست که شرح داده خواهند شد\&. .PP علاوه بر نام دستورها و زمینه‌ها، این سامانه از دو مفهوم دیگر نیز بهره می‌برد: \fIstyles\fP و \fItags\fP\&. این مفاهیم راه‌هایی را برای کاربر فراهم می‌کنند تا رفتار سامانه را پیکربندی نماید\&. .PP برچسب‌ها (tags) نقشی دوگانه ایفا می‌کنند\&. آن‌ها به عنوان یک سامانه طبقه‌بندی برای تطابق‌ها عمل کرده و معمولاً دسته‌ای از اشیاء را نشان می‌دهند که ممکن است کاربر نیاز به تمایز آن‌ها داشته باشد\&. برای مثال، هنگام کامل‌سازی آرگومان‌های دستور \fBls\fP کاربر ممکن است ترجیح دهد پیش از \fBdirectories\fP، مورد \fBfiles\fP را امتحان کند، از این رو هر دوی این‌ها برچسب هستند\&. آن‌ها همچنین به عنوان راست‌ترین عنصر در مشخصات یک زمینه ظاهر می‌شوند\&. .PP سبک‌ها (styles) عملیات‌های گوناگون سامانه کامل‌سازی را اصلاح می‌کنند، از قبیل قالب‌بندی خروجی، و همچنین اینکه چه نوع کامل‌کننده‌هایی استفاده شوند (و با چه ترتیبی)، یا کدام برچسب‌ها بررسی گردند\&. سبک‌ها ممکن است آرگومان‌هایی را بپذیرند و با استفاده از دستور \fBzstyle\fP که در \fIzshmodules\fP(1) توصیف شده است، مدیریت می‌شوند\&. .PP به‌طور خلاصه، برچسب‌ها توصیف می‌کنند که اشیاء کامل‌سازی \fIچه چیزی\fP هستند، و سبک‌ها مشخص می‌کنند که آن‌ها \fBچگونه\fP باید کامل شوند\&. در نقاط مختلفی از اجرا، سامانه کامل‌سازی بررسی می‌کند چه سبک‌ها و/یا برچسب‌هایی برای زمینه جاری تعریف شده‌اند، و از آن برای اصلاح رفتار خود بهره می‌گیرد\&. شرح کامل مدیریت زمینه، که مشخص می‌کند برچسب‌ها و دیگر عناصر زمینه چگونه بر رفتار سبک‌ها اثر می‌گذارند، در ادامه در COMPLETION SYSTEM CONFIGURATION شرح داده شده است\&. .PP هنگامی که یک کامل‌سازی درخواست می‌شود، یک تابع توزیع‌کننده فراخوانی می‌گردد؛ توضیحات مربوط به \fB_main_complete\fP را در فهرست توابع کنترلی در ادامه ببینید\&. این توزیع‌کننده تصمیم می‌گیرد که کدام تابع باید برای تولید کامل‌سازی‌ها فراخوانی شود و آن را فراخوانی می‌کند\&. نتیجه به یک یا چند \fIcompleter\fP واگذار می‌شود؛ توابعی که راهبردهای کامل‌سازی مجزایی را پیاده‌سازی می‌کنند: کامل‌سازی ساده، تصحیح خطا، کامل‌سازی همراه با تصحیح خطا، انتخاب از منو و غیره\&. .PP به‌طور کلی‌تر، توابع شل موجود در سامانه کامل‌سازی از دو نوع هستند: .PD 0 .TP .PD \(bu آن‌هایی که با «\fBcomp\fP» آغاز می‌شوند و باید مستقیماً فراخوانی گردند؛ تعداد این‌ها محدود است؛ .TP \(bu آن‌هایی که با «\fB_\fP» آغاز می‌شوند و توسط کد کامل‌سازی فراخوانی می‌گردند\&. توابع شل این مجموعه، که رفتار کامل‌سازی را پیاده‌سازی کرده و ممکن است به کلیدها متصل (bind) شوند، با نام «widgets» شناخته می‌شوند\&. با نیاز به کامل‌سازی‌های جدید، این توابع گسترش می‌یابند\&. .PP .PP.SH "راه‌اندازی اولیه (INITIALIZATION)" .PP اگر سیستم به‌طور کامل نصب شده باشد، فراخوانی تابع پوسته \fBcompinit\fP از فایل راه‌اندازی اولیه‌تان باید کافی باشد؛ به بخش بعدی مراجعه کنید\&. با این حال، تابع \fBcompinstall\fP می‌تواند توسط کاربر برای پیکربندی جنبه‌های مختلف سامانه تکمیل اجرا شود\&. .PP معمولاً \fBcompinstall\fP کدهایی را درون \fB\&.zshrc\fP قرار می‌دهد، اگرچه اگر آن فایل قابل نوشتن نباشد، آن را در فایل دیگری ذخیره کرده و مکان آن فایل را به شما اعلام می‌کند\&. توجه داشته باشید که اطمینان از اجرای خطوط اضافه‌شده به \fB\&.zshrc\fP بر عهده خودتان است؛ برای مثال، اگر \fB\&.zshrc\fP معمولاً زودتر خاتمه می‌یابد (returns early)، ممکن است نیاز باشد آن‌ها را به جایگاه بالاتری در فایل منتقل کنید\&. تا زمانی که همه این خطوط را در کنار یکدیگر نگه دارید (شامل خطوط توضیحات در ابتدا و انتها)، می‌توانید \fBcompinstall\fP را دوباره اجرا کنید و این دستور به‌درستی این خطوط را پیدا کرده و تغییر می‌دهد\&. با این حال، توجه داشته باشید که هر کدی که به‌صورت دستی به این بخش اضافه کنید با اجرای دوباره \fBcompinstall\fP احتمالاً از بین خواهد رفت، اگرچه خطوطی که از دستور `\fBzstyle\fP\&' استفاده می‌کنند باید به‌خوبی مدیریت شوند\&. .PP کد جدید دفعه بعد که پوسته را آغاز کنید یا \fB\&.zshrc\fP را به‌صورت دستی اجرا کنید اعمال خواهد شد؛ گزینه‌ای نیز برای اعمال فوری آن‌ها وجود دارد\&. با این حال، اگر \fBcompinstall\fP تعاریفی را حذف کرده باشد، برای مشاهده تغییرات باید پوسته را مجدداً راه‌اندازی کنید\&. .PP برای اجرای \fBcompinstall\fP باید مطمئن شوید که در دایرکتوری ذکرشده در پارامتر \fBfpath\fP شما قرار دارد، که اگر zsh به‌درستی پیکربندی شده باشد و تا زمانی که فایل‌های راه‌اندازی شما دایرکتوری‌های مربوطه را از \fBfpath\fP حذف نکنند، از پیش چنین است\&. سپس باید به‌صورت خودکار بارگذاری شود (اجرای `\fBautoload \-U compinstall\fP\&' توصیه می‌شود)\&. هر زمان که از شما اطلاعات خواسته شد می‌توانید فرایند نصب را لغو کنید و فایل \fB\&.zshrc\fP شما اصلاً تغییر نخواهد کرد؛ تغییرات فقط در انتهای کار اعمال می‌شوند، جایی که صریحاً از شما تأیید خواسته می‌شود\&. .PP .SS "استفاده از compinit" .PP این بخش استفاده از \fBcompinit\fP را برای راه‌اندازی اولیه تکمیل در نشست فعلی هنگام فراخوانی مستقیم شرح می‌دهد؛ اگر \fBcompinstall\fP را اجرا کرده باشید، به‌طور خودکار از فایل \fB\&.zshrc\fP شما فراخوانی خواهد شد\&. .PP برای راه‌اندازی اولیه سامانه، تابع \fBcompinit\fP باید در دایرکتوری ذکرشده در پارامتر \fBfpath\fP باشد، و باید به‌صورت خودکار بارگذاری شده (`\fBautoload \-U compinit\fP\&' توصیه می‌شود)، و سپس به‌سادگی به‌صورت `\fBcompinit\fP\&' اجرا شود\&. این کار چند تابع کاربردی را تعریف می‌کند، تمهیدات لازم برای بارگذاری خودکار تمام توابع پوسته موردنیاز را فراهم می‌سازد، و سپس تمام ویجت‌هایی را که عملیات تکمیل را انجام می‌دهند بازتعریف می‌کند تا از سامانه جدید استفاده کنند\&. اگر از ویجت \fBmenu\-select\fP که بخشی از ماژول \fBzsh/complist\fP است استفاده می‌کنید، باید مطمئن شوید که آن ماژول پیش از فراخوانی \fBcompinit\fP بارگذاری شده است تا آن ویجت نیز بازتعریف شود\&. اگر سبک‌های تکمیل (به زیر مراجعه کنید) طوری تنظیم شده باشند که علاوه بر تکمیل، به‌طور پیش‌فرض بسط (expansion) را نیز انجام دهند و کلید TAB به \fBexpand\-or\-complete\fP متصل شده باشد، \fBcompinit\fP آن را دوباره به \fBcomplete\-word\fP متصل می‌کند؛ این کار برای استفاده از فرم صحیح بسط لازم است\&. .PP اگر به استفاده از دستورات تکمیل اولیه نیاز پیدا کردید، همچنان می‌توانید با قرار دادن یک `\fB\&.\fP\&' در ابتدای نام ویجت، کلیدها را به ویجت‌های قدیمی متصل کنید؛ مانند `\fB\&.expand\-or\-complete\fP\&'\&. .PP برای افزایش سرعت اجرای \fBcompinit\fP، می‌توان آن را طوری تنظیم کرد که یک پیکربندی ذخیره‌شده (dumped) تولید کند تا در فراخوانی‌های بعدی خوانده شود؛ این حالت پیش‌فرض است، اما می‌توان با فراخوانی \fBcompinit\fP به همراه گزینه \fB\-D\fP آن را غیرفعال کرد\&. فایل ذخیره‌شده \fB\&.zcompdump\fP نام دارد و در همان دایرکتوری فایل‌های راه‌اندازی (یعنی \fB$ZDOTDIR\fP یا \fB$HOME\fP) قرار می‌گیرد؛ همچنین، می‌توان نام فایلی صریح را با `\fBcompinit \-d\fP \fIdumpfile\fP\&' مشخص کرد\&. در فراخوانی بعدی \fBcompinit\fP، به جای انجام یک راه‌اندازی اولیه کامل، این فایل ذخیره‌شده خوانده خواهد شد\&. .PP اگر تعداد فایل‌های تکمیل تغییر کند، \fBcompinit\fP این موضوع را تشخیص داده و یک فایل ذخیره جدید تولید می‌کند\&. با این حال، اگر نام یک تابع یا آرگومان‌های سطر اول یک تابع \fB#compdef\fP (همان‌طور که در زیر شرح داده شده) تغییر کند، ساده‌ترین راه این است که فایل ذخیره را به‌صورت دستی حذف کنید تا \fBcompinit\fP در اجرای بعدی آن را دوباره ایجاد کند\&. بررسی انجام‌شده برای یافتن توابع جدید را می‌توان با ارائه گزینه \fB\-C\fP نادیده گرفت\&. در این حالت، فایل ذخیره تنها زمانی ایجاد می‌شود که از قبل وجود نداشته باشد\&. از گزینه \fB\-w\fP برای توضیح اینکه چرا یک فایل ذخیره بارگذاری نشده یا چرا دوباره ایجاد شده است، استفاده کنید\&. .PP ذخیره‌سازی در واقع توسط تابع دیگری به نام \fBcompdump\fP انجام می‌شود، اما فقط زمانی نیاز به اجرای دستی آن خواهید داشت که پیکربندی را تغییر دهید (مثلاً با استفاده از \fBcompdef\fP) و سپس بخواهید پیکربندی جدید را ذخیره کنید\&. نام فایل ذخیره‌شده قبلی برای این منظور به خاطر سپرده خواهد شد\&. .PP اگر پارامتر \fB_compdir\fP مقداردهی شده باشد، \fBcompinit\fP از آن به عنوان دایرکتوری‌ای که توابع تکمیل در آن یافت می‌شوند استفاده می‌کند؛ این تنها در صورتی لازم است که آن‌ها از قبل در مسیر جستجوی توابع نباشند\&. .PP به دلایل امنیتی، \fBcompinit\fP همچنین بررسی می‌کند که آیا سامانه تکمیل از فایل‌هایی استفاده می‌کند که متعلق به root یا کاربر فعلی نیستند، یا فایل‌هایی در دایرکتوری‌هایی قرار دارند که برای همه (world) یا گروه قابل نوشتن هستند یا متعلق به root یا کاربر فعلی نیستند\&. در صورت یافتن چنین فایل‌ها یا دایرکتوری‌هایی، \fBcompinit\fP می‌پرسد که آیا سامانه تکمیل واقعاً باید استفاده شود یا خیر\&. برای اجتناب از این بررسی‌ها و استفاده از تمام فایل‌های یافت‌شده بدون پرسش، از گزینه \fB\-u\fP استفاده کنید، و برای اینکه \fBcompinit\fP تمام فایل‌ها و دایرکتوری‌های ناامن را بدون هشدار نادیده بگیرد، از گزینه \fB\-i\fP استفاده کنید\&. اگر گزینه \fB\-C\fP داده شود، به شرطی که dumpfile وجود داشته باشد، این بررسی امنیتی به‌طور کامل نادیده گرفته می‌شود\&. .PP بررسی امنیتی را می‌توان در هر زمان با اجرای تابع \fBcompaudit\fP مجدداً امتحان کرد\&. این همان بررسی استفاده‌شده توسط \fBcompinit\fP است، اما هنگامی که مستقیماً اجرا می‌شود، هرگونه تغییری در \fBfpath\fP به صورت محلی در تابع اعمال شده و ماندگار نمی‌شود\&. دایرکتوری‌های مورد بررسی را می‌توان به عنوان آرگومان ارسال کرد؛ اگر هیچ آرگومانی داده نشود، \fBcompaudit\fP از \fBfpath\fP و \fB_compdir\fP برای یافتن دایرکتوری‌های سامانه تکمیل استفاده می‌کند و در صورت نیاز موارد ناموجود را به \fBfpath\fP اضافه می‌نماید\&. برای اجبار به بررسی دقیقاً همان دایرکتوری‌هایی که در حال حاضر در \fBfpath\fP نام برده شده‌اند، پیش از فراخوانی \fBcompaudit\fP یا \fBcompinit\fP، پارامتر \fB_compdir\fP را روی یک رشته خالی تنظیم کنید\&. .PP تابع \fBbashcompinit\fP سازگاری با سامانه تکمیل برنامه‌پذیر bash را فراهم می‌کند\&. با اجرا، توابع \fBcompgen\fP و \fBcomplete\fP را تعریف می‌کند که متناظر با دستورات درونی (builtins) با همین نام در bash هستند\&. پس از آن، امکان استفاده از مشخصات و توابع تکمیل نوشته‌شده برای bash وجود خواهد داشت\&. .PP.SS "فایل‌های بارگذاری‌خودکار (Autoloaded files)" .PP قاعده برای توابع بارگذاری‌خودکار که در تکمیل استفاده می‌شوند این است که با یک زیرخط (underscore) آغاز شوند؛ همان‌طور که پیش‌تر ذکر شد، پارامتر \fBfpath/FPATH\fP باید شامل دایرکتوری‌ای باشد که این توابع در آن ذخیره شده‌اند\&. اگر \fBzsh\fP به‌درستی روی سیستم شما نصب شده باشد، \fBfpath/FPATH\fP به‌طور خودکار شامل دایرکتوری‌های مورد نیاز برای توابع استاندارد است\&. .PP برای نصب‌های ناقص، چنانچه \fBcompinit\fP تعداد کافی فایل که با زیرخط آغاز می‌شوند (کمتر از بیست عدد) در مسیر جستجو نیابد، با افزودن دایرکتوری \fB_compdir\fP به مسیر جستجو تلاش می‌کند موارد بیشتری را پیدا کند\&. اگر آن دایرکتوری دارای یک زیردایرکتوری به نام \fBBase\fP باشد، تمام زیردایرکتوری‌ها به مسیر اضافه خواهند شد\&. افزون بر این، اگر زیردایرکتوری \fBBase\fP دارای یک زیردایرکتوری با نام \fBCore\fP باشد، \fBcompinit\fP تمام زیردایرکتوری‌های زیردایرکتوری‌ها را به مسیر خواهد افزود: این امر اجازه می‌دهد تا توابع با همان قالبی که در توزیع کد منبع \fBzsh\fP قرار دارند در دسترس باشند\&. .PP هنگامی که \fBcompinit\fP اجرا می‌شود، تمام چنین فایل‌های قابل دسترسی از طریق \fBfpath/FPATH\fP را جستجو کرده و خط اول هر یک از آن‌ها را می‌خواند\&. این خط باید شامل یکی از برچسب‌های شرح داده شده در زیر باشد\&. فایل‌هایی که نخستین خط آن‌ها با یکی از این برچسب‌ها شروع نشود، بخشی از سیستم تکمیل تلقی نمی‌شوند و رفتار ویژه‌ای با آن‌ها نخواهد شد\&. .PP برچسب‌ها عبارتند از: .PP .PD 0 .TP .PD \fB#compdef\fP \fIname\fP \&.\&.\&. [ \fB\-\fP{\fBp\fP|\fBP\fP} \fIpattern\fP \&.\&.\&. [ \fB\-N\fP \fIname\fP \&.\&.\&. ] ] فایل به‌صورت قابل بارگذاری خودکار درمی‌آید و تابع تعریف‌شده در آن هنگام تکمیل \fIname\fPها فراخوانی خواهد شد؛ هر کدام از این نام‌ها، یا نام دستوری است که آرگومان‌های آن باید تکمیل شوند یا یکی از بافت‌های ویژه به شکل \fB\-\fP\fIcontext\fP\fB\-\fP است که در ادامه شرح داده شده‌اند\&. .RS .PP هر \fIname\fP ممکن است به شکل `\fIcmd\fP\fB=\fP\fIservice\fP\&' نیز باشد\&. هنگام تکمیل دستور \fIcmd\fP، تابع معمولاً به‌گونه‌ای رفتار می‌کند که گویی به جای آن، دستور (یا بافت ویژه) \fIservice\fP تکمیل می‌شود\&. این کار روشی برای تغییر رفتار توابعی فراهم می‌کند که می‌توانند تکمیل‌های مختلفی را انجام دهند\&. این قابلیت با تنظیم پارامتر \fB$service\fP هنگام فراخوانی تابع پیاده‌سازی می‌شود؛ تابع می‌تواند به هر نحوی که بخواهد آن را تفسیر کند، و توابع ساده‌تر احتمالاً آن را نادیده خواهند گرفت\&. .PP اگر خط \fB#compdef\fP شامل یکی از گزینه‌های \fB\-p\fP یا \fB\-P\fP باشد، کلمات پس از آن به‌عنوان الگو (pattern) در نظر گرفته می‌شوند\&. تابع زمانی فراخوانی خواهد شد که تکمیل برای دستور یا بافتی که با یکی از الگوها مطابقت دارد، درخواست شود\&. گزینه‌های \fB\-p\fP و \fB\-P\fP به ترتیب برای مشخص کردن الگوهایی به کار می‌روند که باید پیش یا پس از سایر تکمیل‌ها آزموده شوند\&. بنابراین \fB\-P\fP ممکن است برای مشخص کردن اقدامات پیش‌فرض استفاده شود\&. .PP گزینه \fB\-N\fP پس از یک لیست به دنبال \fB\-p\fP یا \fB\-P\fP به کار می‌رود؛ این گزینه مشخص می‌کند که کلمات باقی‌مانده دیگر الگوها را تعریف نمی‌کنند\&. امکان جابه‌جایی میان این سه گزینه به هر تعداد دفعات لازم وجود دارد\&. .RE .TP \fB#compdef \-k\fP \fIstyle key\-sequence\fP \&.\&.\&. این گزینه یک ویجت (widget) ایجاد می‌کند که رفتاری شبیه به ویجت توکار \fIstyle\fP دارد و آن را به \fIkey\-sequence\fPهای مشخص‌شده (در صورت وجود) متصل (bind) می‌کند\&. مقدار \fIstyle\fP باید یکی از ویجت‌های توکار باشد که تکمیل را انجام می‌دهند، یعنی \fBcomplete\-word\fP، \fBdelete\-char\-or\-list\fP، \fBexpand\-or\-complete\fP، \fBexpand\-or\-complete\-prefix\fP، \fBlist\-choices\fP، \fBmenu\-complete\fP، \fBmenu\-expand\-or\-complete\fP، یا \fBreverse\-menu\-complete\fP\&. اگر ماژول \fBzsh/complist\fP بارگذاری شده باشد (به \fIzshmodules\fP(1) مراجعه کنید) ویجت \fBmenu\-select\fP نیز در دسترس خواهد بود\&. .RS .PP هنگامی که یکی از \fIkey\-sequence\fPها تایپ شود، تابع درون فایل برای تولید مطابقت‌ها فراخوانی خواهد شد\&. توجه داشته باشید که اگر کلیدی از پیش متصل شده باشد (یعنی به چیزی غیر از \fBundefined\-key\fP متصل باشد)، اتصال آن تغییر نخواهد کرد\&. ویجت ایجادشده نامی یکسان با فایل دارد و می‌تواند مانند همیشه با استفاده از \fBbindkey\fP به هر کلید دیگری متصل شود\&. .RE .TP \fB#compdef \-K\fP \fIwidget\-name\fP \fIstyle\fP \fIkey\-sequence\fP [ \fIname\fP \fIstyle\fP \fIseq\fP \&.\&.\&. ] این گزینه شبیه به \fB\-k\fP است، به جز این‌که برای هر جفت \fIwidget\-name\fP و \fIstyle\fP تنها یک آرگومان \fIkey\-sequence\fP می‌تواند داده شود\&. با این حال، کل این مجموعه سه‌تایی از آرگومان‌ها را می‌توان با مجموعه‌ای دیگر تکرار کرد\&. به‌ویژه توجه داشته باشید که \fIwidget\-name\fP در هر مجموعه باید متمایز باشد\&. اگر با `\fB_\fP\&' آغاز نشود، این نویسه اضافه خواهد شد\&. نام \fIwidget\-name\fP نباید با نام هیچ ویجت موجودی تداخل داشته باشد: نام‌های مبتنی بر نام تابع بیشترین کاربرد را دارند\&. برای مثال، .RS .PP .RS .nf \fB#compdef \-K _foo_complete complete\-word "^X^C" \e _foo_list list\-choices "^X^D"\fP .fi .RE .PP (همگی در یک خط) یک ویجت \fB_foo_complete\fP را برای تکمیل، متصل به `\fB^X^C\fP\&' و یک ویجت \fB_foo_list\fP را برای فهرست کردن، متصل به `\fB^X^D\fP' تعریف می‌کند\&. .RE .TP \fB#autoload\fP [ \fIoptions\fP ] توابع دارای برچسب \fB#autoload\fP برای بارگذاری خودکار علامت‌گذاری می‌شوند، اما در غیر این صورت رفتار ویژه‌ای با آن‌ها صورت نمی‌گیرد\&. معمولاً قرار است این توابع از درون یکی از توابع تکمیل فراخوانی شوند\&. هرگونه \fIoptions\fP ارائه‌شده به دستور توکار \fBautoload\fP منتقل خواهد شد؛ یک کاربرد معمول آن \fB+X\fP برای واداشتن تابع به بارگذاری فوری است\&. توجه داشته باشید که پرچم‌های \fB\-U\fP و \fB\-z\fP همیشه به‌صورت ضمنی اضافه می‌شوند\&. .PP نویسه \fB#\fP بخشی از نام برچسب است و هیچ فاصله خالی‌ای پس از آن مجاز نیست\&. برچسب‌های \fB#compdef\fP از تابع \fBcompdef\fP شرح داده شده در زیر استفاده می‌کنند؛ تفاوت اصلی این است که نام تابع به‌طور ضمنی ارائه می‌شود\&. .PP بافت‌های ویژه‌ای که می‌توان برای آن‌ها توابع تکمیل تعریف کرد عبارتند از: .PP .PD 0 .TP .PD \fB\-array\-value\-\fP سمت راست یک انتساب آرایه (`\fIname\fP\fB=(\fP\fI\&.\&.\&.\fP\fB)\fP\&') .TP \fB\-assign\-parameter\-\fP نام یک پارامتر در یک انتساب، یعنی در سمت چپ یک `\fB=\fP\&' .TP \fB\-brace\-parameter\-\fP نام یک بسط پارامتر درون آکولادها (`\fB${\fP\fI\&.\&.\&.\fP\fB}\fP\&') .TP \fB\-command\-\fP یک کلمه در جایگاه دستور .TP \fB\-condition\-\fP یک کلمه درون یک شرط (`\fB[[\fP\fI\&.\&.\&.\fP\fB]]\fP\&') .TP \fB\-default\-\fP هر کلمه‌ای که هیچ تکمیل دیگری برای آن تعریف نشده باشد .TP \fB\-equal\-\fP کلمه‌ای که با علامت مساوی شروع می‌شود .TP \fB\-first\-\fP این مورد پیش از هر تابع تکمیل دیگری امتحان می‌شود\&. تابع فراخوانی‌شده ممکن است پارامتر \fB_compskip\fP را روی یکی از مقادیر مختلف تنظیم کند: \fBall\fP: هیچ تکمیل دیگری امتحان نمی‌شود؛ رشته‌ای شامل زیررشته \fBpatterns\fP: هیچ تابع تکمیل الگویی فراخوانی نخواهد شد؛ رشته‌ای حاوی \fBdefault\fP: تابع مربوط به بافت `\fB\-default\-\fP\&' فراخوانی نمی‌شود، اما توابع تعریف‌شده برای دستورها فراخوانی خواهند شد\&. .TP \fB\-math\-\fP درون بافت‌های ریاضی، مانند `\fB((\fP\fI\&.\&.\&.\fP\fB))\fP\&' .TP \fB\-parameter\-\fP نام یک بسط پارامتر (`\fB$\fP\fI\&.\&.\&.\fP\&') .TP \fB\-redirect\-\fP کلمه پس از یک عملگر تغییر مسیر (redirection)\&. .TP \fB\-subscript\-\fP محتوای یک اندیس پارامتر\&. .TP \fB\-tilde\-\fP پس از علامت تیلدا در ابتدای کلمه (`\fB~\fP\&')، اما پیش از اولین ممیز اسلش در کلمه\&. .TP \fB\-value\-\fP در سمت راست یک انتساب\&. .PP پیاده‌سازی‌های پیش‌فرضی برای هر یک از این بافت‌ها ارائه شده است\&. در بیشتر موارد، بافت \fB\-\fP\fIcontext\fP\fB\-\fP توسط یک تابع متناظر به نام \fB_\fP\fIcontext\fP پیاده‌سازی می‌شود (برای مثال، بافت `\fB\-tilde\-\fP\&' و تابع `\fB_tilde\fP')\&. .PP بافت‌های \fB\-redirect\-\fP و \fB\-value\-\fP امکان دریافت اطلاعات اضافی مختص بافت را فراهم می‌کنند\&. (در داخل سیستم، این سازوکار از طریق فراخوانی تابع \fB_dispatch\fP توسط توابع هر بافت مدیریت می‌شود\&.) اطلاعات اضافی با ویرگول جدا شده و اضافه می‌گردند\&. .PP برای بافت \fB\-redirect\-\fP، اطلاعات اضافی به فرم `\fB\-redirect\-,\fP\fIop\fP\fB,\fP\fIcommand\fP\&' است، که در آن \fIop\fP عملگر تغییر مسیر و \fIcommand\fP نام دستور موجود در خط است\&. چنانچه هنوز دستوری روی خط وجود نداشته باشد، فیلد \fIcommand\fP خالی خواهد بود\&..PP برای بافت \fB\-value\-\fP، ساختار به‌صورت `\fB\-value\-,\fP\fIname\fP\fB,\fP\fIcommand\fP\&' است، که در آن \fIname\fP نام پارامتر در سمت چپ انتساب است\&. در مورد عناصر یک آرایهٔ انجمنی، برای نمونه `\fBassoc=(key \fP\&'، \fIname\fP به `\fIname\fP\fB\-\fP\fIkey\fP\&' گسترش می‌یابد\&. در برخی بافت‌های خاص، مانند کامل‌کردن پس از `\fBmake CFLAGS=\fP\&'، بخش \fIcommand\fP نام دستور را مشخص می‌کند، در اینجا \fBmake\fP؛ در غیر این صورت خالی است\&. .PP تعریف کامل‌سازی‌های کاملاً خاص ضروری نیست، چرا که توابع ارائه‌شده تلاش خواهند کرد تا با جایگزینی تدریجی عناصر با `\fB\-default\-\fP\&'، کامل‌سازی‌ها را تولید کنند\&. برای نمونه، هنگام کامل‌کردن پس از `\fBfoo=\fP\&'، تابع \fB_value\fP نام‌های `\fB\-value\-,foo,\fP\&' (به خالی بودن بخش \fIcommand\fP توجه کنید)، `\fB\-value\-,foo,\-default\-\fP\&' و `\fB\-value\-,\-default\-,\-default\-\fP' را به ترتیب امتحان خواهد کرد تا زمانی که تابعی برای مدیریت این بافت پیدا کند\&. .PP به‌عنوان یک مثال: .PP .RS .nf \fBcompdef \&'_files \-g "*\&.log"' '\-redirect\-,2>,\-default\-'\fP .fi .RE .PP فایل‌های منطبق با `\fB*\&.log\fP\&' را پس از `\fB2> \fP' برای هر دستوری که گردانندهٔ خاص‌تری برای آن تعریف نشده باشد، کامل می‌کند\&. .PP همچنین: .PP .RS .nf \fBcompdef _foo \-value\-,\-default\-,\-default\-\fP .fi .RE .PP مشخص می‌کند که \fB_foo\fP کامل‌سازی‌ها را برای مقادیر پارامترهایی که هیچ تابع خاصی برای آن‌ها تعریف نشده است، ارائه می‌دهد\&. این کار معمولاً توسط خود تابع \fB_value\fP انجام می‌شود\&. .PP همین قوانین جستجو هنگام جستجوی سبک‌ها (styles) (همان‌طور که در زیر شرح داده شده) استفاده می‌شوند؛ برای نمونه .PP .RS .nf \fBzstyle \&':completion:*:*:\-redirect\-,2>,*:*' file\-patterns '*\&.log'\fP .fi .RE .PP روش دیگری است تا کامل‌سازی پس از `\fB2> \fP\&' فایل‌های منطبق با `\fB*\&.log\fP\&' را کامل کند\&. .PP .SS "توابع (Functions)" .PP تابع زیر توسط \fBcompinit\fP تعریف شده است و می‌توان آن را مستقیماً فراخوانی کرد\&. .PP .PD 0 .TP .PD 0 \fBcompdef\fP [ \fB\-ane\fP ] \fIfunction name\fP \&.\&.\&. [ \fB\-\fP{\fBp\fP|\fBP\fP} \fIpattern\fP \&.\&.\&. [ \fB\-N\fP \fIname\fP \&.\&.\&.]] .TP .PD 0 \fBcompdef \-d\fP \fIname\fP \&.\&.\&. .TP .PD 0 \fBcompdef \-k\fP [ \fB\-an\fP ] \fIfunction style key\-sequence\fP [ \fIkey\-sequence\fP \&.\&.\&. ] .TP .PD \fBcompdef \-K\fP [ \fB\-an\fP ] \fIfunction name style key\-seq\fP [ \fIname style seq\fP \&.\&.\&. ] حالت نخست، \fIfunction\fP را برای فراخوانی جهت کامل‌سازی در بافت‌های داده‌شده تعریف می‌کند، همان‌طور که برای برچسب \fB#compdef\fP در بالا شرح داده شد\&. .RS .PP به‌عنوان روشی دیگر، تمام آرگومان‌ها می‌توانند ساختار `\fIcmd\fP\fB=\fP\fIservice\fP\&' داشته باشند\&. در اینجا \fIservice\fP باید پیش‌تر توسط خطوط `\fIcmd1\fP\fB=\fP\fIservice\fP\&' در فایل‌های \fB#compdef\fP، همان‌طور که در بالا شرح داده شد، تعریف شده باشد\&. آرگومان مربوط به \fIcmd\fP به همان روش \fIservice\fP کامل خواهد شد\&. .PP آرگومان \fIfunction\fP می‌تواند رشته‌ای حاوی تقریباً هر کد پوسته‌ای نیز باشد\&. اگر این رشته دارای یک علامت مساوی باشد، حالت بالا اولویت خواهد داشت\&. گزینهٔ \fB\-e\fP می‌تواند برای این مشخص شود که آرگومان نخست حتی در صورت داشتن علامت مساوی، به‌عنوان کد پوسته ارزیابی شود\&. این رشته با استفاده از دستور توکار \fBeval\fP برای تولید کامل‌سازی‌ها اجرا خواهد شد\&. این امر روشی فراهم می‌کند تا از تعریف یک تابع کامل‌سازی جدید بی‌نیاز شوید\&. برای نمونه، جهت کامل‌کردن فایل‌های خاتمه‌یافته به `\fB\&.h\fP\&' به‌عنوان آرگومان‌های دستور \fBfoo\fP: .PP .RS .nf \fBcompdef \&'_files \-g "*\&.h"' foo\fP .fi .RE .PP گزینهٔ \fB\-n\fP از بازنویسی هرگونه کامل‌سازی تعریف‌شده از قبل برای دستور یا بافت جلوگیری می‌کند\&. .PP گزینهٔ \fB\-d\fP هرگونه کامل‌سازی تعریف‌شده برای دستور یا بافت‌های فهرست‌شده را حذف می‌کند\&. .PP مؤلفه‌های \fIname\fP می‌توانند شامل گزینه‌های \fB\-p\fP، \fB\-P\fP و \fB\-N\fP نیز باشند، همان‌طور که برای برچسب \fB#compdef\fP شرح داده شد\&. اثر آن‌ها بر روی فهرست آرگومان‌ها یکسان است، و بین تعاریف الگوهای آزموده‌شده در ابتدا، الگوهای آزموده‌شده در انتها، و دستورها و بافت‌های عادی جابه‌جا می‌شود\&. .PP پارامتر \fB$_compskip\fP می‌تواند توسط هر تابعی که برای یک بافت الگو تعریف شده، مقداردهی شود\&. اگر به مقداری حاوی زیررشتهٔ `\fBpatterns\fP\&' تنظیم شود، هیچ‌یک از توابع الگو فراخوانی نخواهند شد؛ اگر به مقداری حاوی زیررشتهٔ `\fBall\fP\&' تنظیم شود، هیچ تابع دیگری فراخوانی نخواهد شد\&. تنظیم \fB$_compskip\fP به این روش، به‌ویژه هنگام استفاده از گزینهٔ \fB\-p\fP بسیار کاربردی است، چرا که در غیر این صورت، توزیع‌کننده پس از فراخوانی تابعِ بافت الگو، به سراغ توابع اضافی (احتمالاً تابع پیش‌فرض) خواهد رفت، که در صورت عدم مدیریت صحیح می‌تواند نمایش حالت‌های کامل‌سازی را مخدوش کند\&. .PP حالت همراه با \fB\-k\fP یک ابزارک با نامی یکسان با \fIfunction\fP تعریف می‌کند که برای هر یک از \fIkey\-sequence\fPها فراخوانی خواهد شد؛ این مشابه برچسب \fB#compdef \-k\fP است\&. این تابع باید کامل‌سازی‌های مورد نیاز را تولید کند و در غیر این صورت مانند ابزارک درونی عمل خواهد کرد که نام آن به‌عنوان آرگومان \fIstyle\fP داده شده است\&. ابزارک‌های قابل استفاده برای این منظور عبارتند از: \fBcomplete\-word\fP، \fBdelete\-char\-or\-list\fP، \fBexpand\-or\-complete\fP، \fBexpand\-or\-complete\-prefix\fP، \fBlist\-choices\fP، \fBmenu\-complete\fP، \fBmenu\-expand\-or\-complete\fP، و \fBreverse\-menu\-complete\fP، و همچنین \fBmenu\-select\fP در صورتی که ماژول \fBzsh/complist\fP بارگذاری شده باشد\&. گزینهٔ \fB\-n\fP از مقید شدن کلید در صورتی که پیش‌تر به چیزی غیر از \fBundefined\-key\fP مقید شده باشد، جلوگیری می‌کند\&. .PP حالت دارای \fB\-K\fP مشابه است و چندین ابزارک را بر اساس همان \fIfunction\fP تعریف می‌کند، که هر یک از آن‌ها نیازمند مجموعه‌ای از سه آرگومان \fIname\fP، \fIstyle\fP و \fIkey\-seq\fPuence هستند، که دو مورد آخر همانند \fB\-k\fP بوده و مورد اول باید یک نام ابزارک یکتا باشد که با یک زیرخط آغاز می‌شود\&. .PP در هر جا که قابل اعمال باشد، گزینهٔ \fB\-a\fP تابع \fIfunction\fP را خودکاربارگذاری‌پذیر (autoloadable) می‌کند، که معادل \fBautoload \-U \fP\fIfunction\fP است\&. .RE .PP تابع \fBcompdef\fP می‌تواند برای مرتبط ساختن توابع کامل‌سازی موجود با دستورهای جدید استفاده شود\&. برای نمونه، .PP .RS .nf \fBcompdef _pids foo\fP .fi .RE .PP از تابع \fB_pids\fP برای کامل‌کردن شناسه‌های فرآیند برای دستور \fBfoo\fP استفاده می‌کند\&. .PP همچنین به تابع \fB_gnu_generic\fP که در زیر شرح داده شده توجه کنید، که می‌تواند برای کامل‌کردن گزینه‌ها برای دستورهایی که گزینهٔ `\fB\-\fP\fB\-help\fP\&' را درک می‌کنند، استفاده شود\&. .PP.SH "پیکربندی سامانه تکمیل (COMPLETION SYSTEM CONFIGURATION)" .PP این بخش مروری کوتاه بر نحوه کارکرد سامانه تکمیل (completion) ارائه می‌دهد و سپس با جزئیات بیشتر به چگونگی پیکربندی زمان و نحوه تولید موارد منطبق (matches) توسط کاربران می‌پردازد\&. .PP .SS "مرور کلی (Overview)" .PP هنگامی که تلاش برای تکمیل در نقطه‌ای از خط فرمان صورت می‌گیرد، سامانه تکمیل شروع به ساختن بافتار (context) می‌کند\&. بافتار نمایانگر تمام چیزهایی است که پوسته درباره معنای خط فرمان و اهمیت موقعیت مکان‌نما می‌داند\&. این موارد شامل چندین فاکتور است، از جمله واژه دستور (مانند `\fBgrep\fP\&' یا `\fBzsh\fP\&') و گزینه‌هایی که ممکن است واژه فعلی آرگومانی برای آن‌ها باشد (مانند گزینه `\fB\-o\fP\&' برای \fBzsh\fP که یک گزینه پوسته را به عنوان آرگومان دریافت می‌کند)\&. .PP بافتار بسیار عمومی آغاز می‌شود ("ما در حال شروع یک تکمیل هستیم") و با دریافت اطلاعات بیشتر، خاص‌تر می‌شود ("واژه فعلی در موقعیتی است که معمولاً یک نام دستور است" یا "واژه فعلی ممکن است یک نام متغیر باشد" و غیره)\&. بنابراین بافتار در طول یک فراخوانی یکسان از سامانه تکمیل تغییر خواهد کرد\&. .PP این اطلاعات بافتار در یک رشته متشکل از چندین فیلد جداشده با دونقطه (:) فشرده می‌شود که در ادامه این مستندات به سادگی به عنوان `بافتار\&' نامیده می‌شود\&. توجه داشته باشید که کاربر سامانه تکمیل به ندرت نیازمند سرهم‌بندی یک رشته بافتار است، مگر آنکه به عنوان مثال تابع جدیدی برای تکمیل یک دستور تازه نوشته شود\&. آنچه ممکن است کاربر نیاز به انجام آن داشته باشد، نوشتن یک الگوی \fIstyle\fP است که در صورت نیاز با یک بافتار مطابقت داده می‌شود تا گزینه‌های حساس به بافتار که سامانه تکمیل را پیکربندی می‌کنند جستجو شوند\&. .PP چند بند بعدی توضیح می‌دهند که چگونه یک بافتار در مجموعه توابع تکمیل سرهم‌بندی می‌شود\&. به دنبال آن، بحثی درباره چگونگی تعریف \fIstyle\fPها خواهد آمد\&. استایل‌ها مواردی مانند چگونگی تولید تطابق‌ها را تعیین می‌کنند؛ شبیه به گزینه‌های پوسته اما با کنترل بسیار بیشتر\&. آن‌ها با دستور توکار \fBzstyle\fP تعریف می‌شوند (ببینید: \fIzshmodules\fP(1))\&. .PP رشته بافتار همیشه از مجموعه‌ای ثابت از فیلدها تشکیل شده است که با دونقطه جدا شده و قبل از اولین فیلد نیز یک دونقطه آغازین قرار دارد\&. فیلدهایی که هنوز مشخص نیستند خالی گذاشته می‌شوند، اما دونقطه‌های اطراف آن‌ها در هر حال نمایش داده می‌شوند\&. فیلدها همیشه به ترتیبِ \fB:completion:\fP\fIfunction\fP\fB:\fP\fIcompleter\fP\fB:\fP\fIcommand\fP\fB:\fP\fIargument\fP\fB:\fP\fItag\fP\&. قرار می‌گیرند\&. این فیلدها معانی زیر را دارند: .PP .PD 0 .TP .PD \(bu رشته دقیق \fBcompletion\fP که نشان می‌دهد این استایل توسط سامانه تکمیل استفاده می‌شود\&. این بخش بافتار را از موارد استفاده‌شده توسط، به عنوان مثال، ابزارک‌های zle و توابع ZFTP متمایز می‌کند\&. .TP \(bu بخش \fIfunction\fP، چنانچه تکمیل به جای سامانه تکمیل عادی از یک ابزارکِ دارای نام فراخوانی شود\&. معمولاً این بخش خالی است، اما توسط ابزارک‌های خاصی مانند \fBpredict\-on\fP و توابع گوناگون در دایرکتوری \fBWidget\fP توزیع، روی نام آن تابع و اغلب به صورت اختصاری تنظیم می‌شود\&. .TP \(bu بخش \fIcompleter\fP که در حال حاضر فعال است؛ نام تابع بدون زیرخط (underscore) آغازین و با تبدیل سایر زیرخط‌ها به خط تیره (hyphen)\&. یک `completer\&' کنترل کلی نحوه انجام تکمیل را بر عهده دارد؛ `\fBcomplete\fP\&' ساده‌ترین آن‌هاست، اما تکمیل‌کننده‌های دیگری نیز برای انجام کارهای مرتبط مانند تصحیح، یا تغییر رفتار یک completer بعدی وجود دارند\&. برای اطلاعات بیشتر به بخش `Control Functions\&' در زیر مراجعه کنید\&. .TP \(bu بخش \fIcommand\fP یا یک \fB\-\fP\fIcontext\fP\fB\-\fP خاص، دقیقاً همان‌طور که پس از برچسب \fB#compdef\fP یا تابع \fBcompdef\fP ظاهر می‌شود\&. توابع تکمیل برای دستوراتی که زیردستور (sub-command) دارند، معمولاً این فیلد را طوری تغییر می‌دهند که شامل نام دستور و به دنبال آن یک علامت منفی و زیردستور باشد\&. برای نمونه، تابع تکمیل دستور \fBcvs\fP هنگام تکمیل آرگومان‌های زیردستور \fBadd\fP، این فیلد را روی \fBcvs\-add\fP تنظیم می‌کند\&. .TP \(bu بخش \fIargument\fP؛ این فیلد مشخص می‌کند که در حال تکمیل کدام آرگومان خط فرمان یا گزینه هستیم\&. برای آرگومان‌های دستور، این بخش معمولاً به شکل \fBargument\-\fP\fIn\fP است که در آن \fIn\fP شماره آرگومان است، و برای آرگومان‌های گزینه‌ها به شکل \fBoption\-\fP\fIopt\fP\fB\-\fP\fIn\fP است که در آن \fIn\fP شماره آرگومان مربوط به گزینه \fIopt\fP است\&. با این حال، این حالت تنها زمانی صادق است که خط فرمان با گزینه‌ها و آرگومان‌های استاندارد سبک UNIX تجزیه شود؛ بنابراین بسیاری از تکمیل‌ها این مورد را تنظیم نمی‌کنند\&. .TP \(bu بخش \fItag\fP\&. همان‌طور که قبلاً توضیح داده شد، برچسب‌ها (tags) برای تفکیک انواع تطابق‌هایی که یک تابع تکمیل می‌تواند در یک بافتار خاص تولید کند به کار می‌روند\&. هر تابع تکمیل می‌تواند از هر نام برچسبی که می‌خواهد استفاده کند، اما فهرستی از موارد رایج‌تر در زیر آمده است\&. .PP بافتار به تدریج همگام با اجرای توابع سرهم می‌شود؛ با نقطه ورود اصلی آغاز می‌گردد که \fB:completion:\fP و در صورت نیاز عنصر \fIfunction\fP را اضافه می‌کند\&. سپس تکمیل‌کننده عنصر \fIcompleter\fP را اضافه می‌نماید\&. تکمیل بافتاری نیز گزینه‌های \fIcommand\fP و \fIargument\fP را می‌افزاید\&. در نهایت، هنگامی که انواع تکمیل مشخص شدند، \fItag\fP افزوده می‌شود\&. برای نمونه، نام بافتارِ .PP .RS .nf \fB\fB:completion::complete:dvips:option\-o\-1:files\fP\fP .fi .RE .PP بیانگر آن است که تکمیل عادی به عنوان اولین آرگومانِ گزینه \fB\-o\fP از دستور \fBdvips\fP درخواست شده است: .PP .RS .nf \fB\fBdvips \-o \&.\&.\&.\fP\fP .fi .RE .PP و تابع تکمیل نام‌های فایل را تولید خواهد کرد\&. .PP معمولاً تکمیل برای همه برچسب‌های ممکن به ترتیبی که توسط تابع تکمیل مشخص شده است امتحان می‌شود\&. با این حال، این مورد را می‌توان با استفاده از استایل \fBtag\-order\fP تغییر داد\&. در این صورت، تکمیل به فهرست برچسب‌های مشخص‌شده و با همان ترتیب معین محدود می‌گردد\&. .PP دستور قابل اتصال \fB_complete_help\fP تمام بافتارها و برچسب‌های موجود برای تکمیل را در یک نقطه خاص نشان می‌دهد\&. این ویژگی روشی آسان برای یافتن اطلاعات مربوط به \fBtag\-order\fP و سایر استایل‌ها فراهم می‌کند\&. این دستور در بخش `Bindable Commands\&' در زیر شرح داده شده است\&. .PP سامانه تکمیل هنگام جستجوی استایل‌ها از نام‌های کامل بافتار، شامل برچسب، استفاده می‌کند\&. بنابراین، جستجوی مقدار یک استایل شامل دو چیز است: بافتار، که با خاص‌ترین (مناسب‌ترین) الگو تطبیق داده می‌شود، و خود نام استایل، که باید دقیقاً مطابقت داشته باشد\&. مثال‌های زیر نشان می‌دهند که الگوها می‌توانند برای استایل‌هایی با کاربرد گسترده به‌صورت کلی، یا برای استایل‌هایی در شرایط خاص‌تر، با هر میزان از دقت مورد نظر تعریف شوند\&. .PP برای نمونه، بسیاری از توابع تکمیل می‌توانند تطابق‌ها را در دو حالت ساده و پرگو (verbose) تولید کنند و از استایل \fBverbose\fP برای تصمیم‌گیری در مورد استفاده از هر فرم بهره می‌برند\&. برای اینکه تمام این توابع از حالت پرگو استفاده کنند، خط زیر را: .PP .RS .nf \fBzstyle \&':completion:*' verbose yes\fP .fi .RE .PP در یک فایل راه‌اندازی (احتمالاً \fB\&.zshrc\fP) قرار دهید\&. این کار در هر بافتاری درون سامانه تکمیل به استایل \fBverbose\fP مقدار \fByes\fP می‌دهد، مگر اینکه آن بافتار تعریف خاص‌تری داشته باشد\&. بهتر است از دادن الگو به صورت `\fB*\fP\&' خودداری کنید، مبادا که این استایل خارج از سامانه تکمیل معنای دیگری داشته باشد\&. .PP بسیاری از این استایل‌های عمومی را می‌توان به سادگی با استفاده از تابع \fBcompinstall\fP پیکربندی کرد\&. .PP مثالی خاص‌تر از کاربرد استایل \fBverbose\fP، تکمیل مربوط به دستور توکار \fBkill\fP است\&. اگر این استایل تنظیم شده باشد، دستور توکار متن‌های کامل کارها (jobs) و خطوط فرمان فرآیندها را فهرست می‌کند؛ در غیر این صورت، تنها شماره‌های کار و PIDs ساده را نشان می‌دهد\&. برای خاموش کردن این استایل تنها برای این مورد: .PP .RS .nf \fBzstyle \&':completion:*:*:kill:*:*' verbose no\fP .fi .RE .PP برای کنترل بیشتر، استایل می‌تواند از یکی از برچسب‌های `\fBjobs\fP\&' یا `\fBprocesses\fP\&' استفاده کند\&. برای غیرفعال کردن نمایش پرگو تنها برای کارها: .PP .RS .nf \fBzstyle \&':completion:*:*:kill:*:jobs' verbose no\fP .fi .RE.PP گزینهٔ \fB\-e\fP در \fBzstyle\fP حتی اجازه می‌دهد کد تابع تکمیل به عنوان آرگومان یک سبک (style) قرار گیرد؛ این امر مستلزم درک نسبی از سازوکارهای داخلی توابع تکمیل است (نگاه کنید به \fIzshcompwid\fP(1)))\&. برای نمونه، .PP .RS .nf \fB\fBzstyle \-e \&':completion:*' hosts 'reply=($myhosts)'\fP\fP .fi .RE .PP این کار باعث می‌شود مقدار سبک \fBhosts\fP هر بار که به نام یک میزبان نیاز است، از متغیر \fBmyhosts\fP خوانده شود؛ این ویژگی زمانی مفید است که مقدار \fBmyhosts\fP بتواند به‌صورت پویا تغییر کند\&. برای یک نمونهٔ کاربردی دیگر، به مثال موجود در توضیحات سبک \fBfile\-list\fP در ادامه نگاه کنید\&. این شیوه می‌تواند کُند باشد و برای سبک‌هایی که به‌طور مکرر بررسی می‌شوند مانند \fBmenu\fP و \fBlist\-rows\-first\fP باید از آن اجتناب کرد\&. .PP توجه داشته باشید که ترتیب \fIتعریف شدن\fP سبک‌ها اهمیتی ندارد؛ سازوکار سبک‌ها از خاص‌ترین تطابق ممکن برای یک سبک خاص جهت تعیین مجموعه مقادیر استفاده می‌کند\&. رشته‌ها بر الگوها ترجیح داده می‌شوند (برای مثال، `\fB:completion::complete:::foo\fP\&' خاص‌تر از `\fB:completion::complete:::*\&'\fP است)، و الگوهای طولانی‌تر نسبت به الگوی `\fB*\fP\&' برتری دارند\&. برای جزئیات به \fIzmodules\fP(1) نگاه کنید\&. .PP الگوهای بافتی که برای تطبیق بخش‌های میانی بافت \-\- یعنی \fIcompleter\fP، \fIcommand\fP، و \fIargument\fP در \fB:completion:\fP\fIfunction\fP\fB:\fP\fIcompleter\fP\fB:\fP\fIcommand\fP\fB:\fP\fIargument\fP\fB:\fP\fItag\fP \-\- از چیزی غیر از نویسهٔ عام (\fB*\fP) استفاده می‌کنند، باید شامل هر شش دونقطه (\fB:\fP) به‌صورت صریح باشند\&. بدون این کار، الگویی مانند \fB:completion:*:foo:*\fP ممکن است \fBfoo\fP را با مؤلفه‌ای غیر از مؤلفهٔ موردنظر تطبیق دهد (برای مثال، تطبیق با \fIcompleter\fP در حالی که تطبیق با \fIcommand\fP مدنظر بوده است)\&. .PP نام سبک‌ها مانند نام برچسب‌ها اختیاری است و به تابع تکمیل بستگی دارد\&. با این حال، دو بخش بعدی برخی از متداول‌ترین برچسب‌ها و سبک‌ها را فهرست می‌کنند\&. .PP .SS "برچسب‌های استاندارد (Standard Tags)" .PP برخی از موارد زیر تنها هنگام جستجوی سبک‌های خاص استفاده می‌شوند و به نوع تطابق اشاره ندارند\&. .PP .PD 0 .TP .PD \fBaccounts\fP برای جستجوی سبک \fBusers\-hosts\fP استفاده می‌شود .TP \fBall\-expansions\fP توسط تکمیل‌کنندهٔ \fB_expand\fP هنگام افزودن رشتهٔ منفردِ شامل تمام بسط‌های ممکن استفاده می‌شود .TP \fBall\-files\fP برای نام‌های تمام فایل‌ها (متمایز از یک زیرمجموعهٔ خاص، برچسب \fBglobbed\-files\fP را ببینید)\&. .TP \fBarguments\fP برای آرگومان‌های یک دستور .TP \fBarrays\fP برای نام‌های پارامترهای آرایه‌ای .TP \fBassociation\-keys\fP برای کلیدهای آرایه‌های انجمنی؛ هنگام تکمیل درون اندیس پارامتری از این نوع استفاده می‌شود .TP \fBbookmarks\fP هنگام تکمیل نشانک‌ها (برای نمونه برای URLها و مجموعه توابع \fBzftp\fP) .TP \fBbuiltins\fP برای نام‌های دستورهای داخلی (builtin) .TP \fBcharacters\fP برای نویسه‌های تکی در آرگومان‌های دستورهایی مانند \fBstty\fP\&. همچنین هنگام تکمیل رده‌های نویسه‌ای پس از قلاب باز استفاده می‌شود .TP \fBcolormapids\fP برای شناسه‌های جدول رنگ (colormap ID) در سامانهٔ X .TP \fBcolors\fP برای نام‌های رنگ‌ها .TP \fBcommands\fP برای نام‌های دستورهای خارجی\&. همچنین توسط دستورهای پیچیده مانند \fBcvs\fP هنگام تکمیل نام‌های زیردستورها استفاده می‌شود\&. .TP \fBcontexts\fP برای بافت‌ها در آرگومان‌های دستور داخلی \fBzstyle\fP .TP \fBcorrections\fP توسط تکمیل‌کننده‌های \fB_approximate\fP و \fB_correct\fP برای تصحیح‌های احتمالی استفاده می‌شود .TP \fBcursors\fP برای نام‌های مکان‌نما که توسط برنامه‌های سامانهٔ X استفاده می‌شوند .TP \fBdefault\fP در برخی بافت‌ها برای ارائهٔ یک پیش‌فرض در زمانی که برچسب‌های خاص‌تر نیز معتبر هستند استفاده می‌شود\&. توجه داشته باشید این برچسب زمانی استفاده می‌شود که تنها فیلد \fIfunction\fP از نام بافت تنظیم شده باشد .TP \fBdescriptions\fP هنگام جستجوی مقدار سبک \fBformat\fP برای تولید توضیحات مربوط به انواع تطابق‌ها استفاده می‌شود .TP \fBdevices\fP برای نام‌های فایل‌های ویژهٔ دستگاه .TP \fBdirectories\fP برای نام‌های دایرکتوری‌ها \-\- هنگامی که آرایهٔ \fBcdpath\fP تنظیم شده باشد، هنگام تکمیل آرگومان‌های \fBcd\fP و دستورهای داخلی مرتبط، به‌جای آن از \fBlocal\-directories\fP استفاده می‌شود .TP \fBdirectory\-stack\fP برای مدخل‌های موجود در پشتهٔ دایرکتوری .TP \fBdisplays\fP برای نام‌های نمایشگر (display) سامانهٔ X .TP \fBdomains\fP برای دامنه‌های شبکه .TP \fBemail\-\fP\fIplugin\fP برای نشانی‌های ایمیل از پسانهٔ `\fB_email\-\fP\fIplugin\fP\&' متعلق به \fB_email_addresses\fP .TP \fBexpansions\fP توسط تکمیل‌کنندهٔ \fB_expand\fP برای واژه‌های منفرد (در مقایسه با مجموعهٔ کامل بسط‌ها) حاصل از بسط یک واژه در خط فرمان استفاده می‌شود .TP \fBextensions\fP برای افزونه‌های سرور X .TP \fBfile\-descriptors\fP برای شماره‌های توصیف‌گرهای باز فایل .TP \fBfiles\fP برچسب عمومی تطبیق فایل که توسط توابع تکمیل نام فایل استفاده می‌شود .TP \fBfonts\fP برای نام‌های قلم سامانهٔ X .TP \fBfstypes\fP برای انواع سیستم‌های فایل (برای نمونه برای دستور \fBmount\fP) .TP \fBfunctions\fP نام‌های توابع \-\- معمولاً توابع پوسته، گرچه برخی دستورهای خاص ممکن است انواع دیگری از توابع را شناسایی کنند .TP \fBglobbed\-files\fP برای نام‌های فایل در صورتی که نام از طریق تطبیق الگو تولید شده باشد .TP \fBgroups\fP برای نام‌های گروه‌های کاربری .TP \fBhistory\-words\fP برای واژه‌های برگرفته از تاریخچه .TP \fBhosts\fP برای نام‌های میزبان .TP \fBindexes\fP برای اندیس‌های آرایه .TP \fBinterfaces\fP برای رابط‌های شبکه .TP \fBjobs\fP برای کارها (همان‌طور که توسط دستور داخلی `\fBjobs\fP\&' فهرست می‌شوند) .TP \fBkeymaps\fP برای نام‌های نگاشت‌های کلید در zsh .TP \fBkeysyms\fP برای نام‌های keysym سامانهٔ X.TP \fBlibraries\fP برای نام‌های کتابخانه‌های سیستم .TP \fBlimits\fP برای محدودیت‌های سیستم .TP \fBlocal\-directories\fP برای نام دایرکتوری‌هایی که زیردایرکتوریِ دایرکتوری کاری جاری هستند، هنگام تکمیل آرگومان‌های دستور توکار \fBcd\fP و دستورهای توکار مرتبط (با \fBpath\-directories\fP مقایسه شود) \-\- هنگامی که آرایهٔ \fBcdpath\fP تنظیم نشده باشد، به‌جای آن از \fBdirectories\fP استفاده می‌شود .TP \fBmailboxes\fP برای پوشه‌های رایانامه .TP \fBmanuals\fP برای نام‌های صفحات راهنما (manual pages) .TP \fBmaps\fP برای نام‌های نگاشت (مانند نگاشت‌های NIS) .TP \fBmessages\fP برای جستجوی سبک \fBformat\fP جهت پیام‌ها استفاده می‌شود .TP \fBmodifiers\fP برای نام‌های کلیدهای تبدیل X (اصلاح‌کننده‌های X) .TP \fBmodules\fP برای ماژول‌ها (مانند ماژول‌های \fBzsh\fP) .TP \fBmy\-accounts\fP برای جستجوی سبک \fBusers\-hosts\fP استفاده می‌شود .TP \fBnamed\-directories\fP برای دایرکتوری‌های نام‌گذاری‌شده (حدسش را نمی‌زدید، مگر نه؟) .TP \fBnames\fP برای انواع مختلف نام‌ها .TP \fBnewsgroups\fP برای گروه‌های USENET .TP \fBnicknames\fP برای نام‌های مستعار نگاشت‌های NIS .TP \fBoptions\fP برای گزینه‌های دستور .TP \fBoriginal\fP توسط تکمیل‌کننده‌های \fB_approximate\fP، \fB_correct\fP و \fB_expand\fP هنگام ارائهٔ رشتهٔ اصلی به عنوان یک تطابق استفاده می‌شود .TP \fBother\-accounts\fP برای جستجوی سبک \fBusers\-hosts\fP استفاده می‌شود .TP \fBpackages\fP برای بسته‌ها (مانند بسته‌های \fBrpm\fP یا بسته‌های نصب‌شدهٔ \fBDebian\fP) .TP \fBparameters\fP برای نام‌های پارامترها .TP \fBpath\-directories\fP برای نام‌های دایرکتوری‌های یافت‌شده با جستجو در آرایهٔ \fBcdpath\fP هنگام تکمیل آرگومان‌های \fBcd\fP و دستورهای توکار مرتبط (با \fBlocal\-directories\fP مقایسه شود) .TP \fBpaths\fP برای جستجوی مقادیر سبک‌های \fBexpand\fP، \fBambiguous\fP و \fBspecial\-dirs\fP استفاده می‌شود .TP \fBpods\fP برای podهای perl (فایل‌های مستندات) .TP \fBports\fP برای درگاه‌های ارتباطی (پورت‌ها) .TP \fBprefixes\fP برای پیشوندها (مانند پیشوندهای یک URL) .TP \fBprinters\fP برای نام‌های صف چاپگر .TP \fBprocesses\fP برای شناسه‌های فرایند (PID) .TP \fBprocesses\-names\fP برای جستجوی سبک \fBcommand\fP هنگام تولید نام‌های فرایندها برای \fBkillall\fP استفاده می‌شود .TP \fBsequences\fP برای توالی‌ها (مانند توالی‌های \fBmh\fP) .TP \fBsessions\fP برای نشست‌ها در مجموعه توابع \fBzftp\fP .TP \fBsignals\fP برای نام‌های سیگنال .TP \fBstrings\fP برای رشته‌ها (مانند رشته‌های جایگزینی برای دستور توکار \fBcd\fP) .TP \fBstyles\fP برای سبک‌های استفاده‌شده توسط دستور توکار zstyle .TP \fBsuffixes\fP برای پسوندهای نام فایل .TP \fBtags\fP برای برچسب‌ها (مانند برچسب‌های \fBrpm\fP) .TP \fBtargets\fP برای هدف‌های makefile .TP \fBtime\-zones\fP برای منطقه‌های زمانی (مانند هنگام تنظیم پارامتر \fBTZ\fP) .TP \fBtypes\fP برای انواع هر چیزی (مانند انواع آدرس برای دستور \fBxhost\fP) .TP \fBurls\fP برای جستجوی سبک‌های \fBurls\fP و \fBlocal\fP هنگام تکمیل URLها استفاده می‌شود .TP \fBusers\fP برای نام‌های کاربری .TP \fBvalues\fP برای یکی از مجموعه‌ای از مقادیر در فهرست‌های خاص .TP \fBvariant\fP توسط \fB_pick_variant\fP برای جستجوی دستوری که باید هنگام تعیین برنامهٔ نصب‌شده برای یک نام دستور خاص اجرا شود، استفاده می‌شود\&. .TP \fBvisuals\fP برای جلوه‌های بصری X (visualها) .TP \fBwarnings\fP برای جستجوی سبک \fBformat\fP جهت هشدارها استفاده می‌شود .TP \fBwidgets\fP برای نام‌های ویجت‌های zsh .TP \fBwindows\fP برای شناسه‌های پنجره‌های X .TP \fBzsh\-options\fP برای گزینه‌های پوسته .PP.SS "سبک‌های استاندارد (Standard Styles)" .PP توجه داشته باشید که مقادیر چندین مورد از این سبک‌ها بیانگر مقادیر بولی (boolean) هستند\&. هر یک از رشته‌های `\fBtrue\fP\&'، `\fBon\fP'، `\fByes\fP\&' و `\fB1\fP' می‌توانند برای مقدار `true' و هر یک از رشته‌های `\fBfalse\fP\&'، `\fBoff\fP'، `\fBno\fP' و `\fB0\fP' برای مقدار `false\&' استفاده شوند\&. رفتار به ازای هر مقدار دیگری تعریف‌نشده است مگر در مواردی که صراحتاً ذکر شده باشد\&. در صورت تنظیم نشدن سبک، مقدار پیش‌فرض ممکن است `true\&' یا `false' باشد\&. .PP برخی از این سبک‌ها ابتدا برای هر برچسب (tag) ممکنِ متناظر با یک نوع تطابق بررسی می‌شوند، و اگر سبکی یافت نشد، برای برچسب \fBdefault\fP بررسی می‌گردند\&. بارزترین سبک‌های این دسته عبارتند از \fBmenu\fP، \fBlist\-colors\fP و سبک‌های کنترل‌کنندهٔ فهرست‌بندی تکمیل مانند \fBlist\-packed\fP و \fBlast\-prompt\fP\&. هنگام بررسی برای برچسب \fBdefault\fP، تنها فیلد \fIfunction\fP از بافتار تنظیم خواهد شد، به طوری که سبکی که از برچسب \fBdefault\fP استفاده می‌کند معمولاً به شکلی شبیه به این تعریف می‌شود: .PP .RS .nf \fBzstyle \&':completion:*:default' menu \&.\&.\&.\fP .fi .RE .PP .PD 0 .TP .PD \fBaccept\-exact\fP این سبک علاوه بر برچسب‌های معتبر برای بافتار فعلی، برای برچسب \fBdefault\fP نیز بررسی می‌شود\&. اگر روی `true\&' تنظیم شده باشد و هر یک از تطابق‌های آزمایشی با رشتهٔ موجود در خط فرمان یکسان باشد، این تطابق بلافاصله پذیرفته خواهد شد (حتی اگر در غیر این صورت مبهم تلقی می‌شد)\&. .RS .PP هنگام تکمیل مسیرها (جایی که برچسب استفاده‌شده `\fBpaths\fP\&' است)، این سبک علاوه بر مقادیر بولی، هر تعداد الگو را نیز به عنوان مقدار می‌پذیرد\&. نام‌های مسیری که با یکی از این الگوها مطابقت داشته باشند بلافاصله پذیرفته می‌شوند، حتی اگر خط فرمان حاوی اجزای مسیر دیگری باشد که تا حدی تایپ شده‌اند و این اجزا با هیچ فایلی در دایرکتوری پذیرفته‌شده مطابقت نداشته باشند\&. .PP این سبک همچنین توسط تکمیل‌کنندهٔ \fB_expand\fP استفاده می‌شود تا تصمیم بگیرد آیا کلماتی که با مدک (tilde) یا بسط پارامتر شروع می‌شوند باید بسط داده شوند یا خیر\&. به عنوان مثال، اگر پارامترهای \fBfoo\fP و \fBfoobar\fP وجود داشته باشند، رشتهٔ `\fB$foo\fP\&' تنها در صورتی بسط داده می‌شود که \fBaccept\-exact\fP روی `true\&' تنظیم شده باشد؛ در غیر این صورت سیستم تکمیل مجاز خواهد بود که \fB$foo\fP را به \fB$foobar\fP تکمیل کند\&. اگر سبک روی `\fBcontinue\fP\&' تنظیم شده باشد، \fB_expand\fP بسط را به عنوان یک تطابق اضافه می‌کند و به سیستم تکمیل نیز اجازه داده می‌شود تا ادامه دهد\&. .RE .TP \fBaccept\-exact\-dirs\fP این سبک برای تکمیل نام فایل استفاده می‌شود\&. بر خلاف \fBaccept\-exact\fP، این یک مقدار بولی است\&. به طور پیش‌فرض، تکمیل نام فایل تمام اجزای یک مسیر را بررسی می‌کند تا ببیند آیا تکمیلی برای آن جزء وجود دارد یا خیر، حتی اگر آن جزء با یک دایرکتوری موجود مطابقت داشته باشد\&. به عنوان مثال، هنگام تکمیل پس از \fB/usr/bin/\fP، تابع تکمیل‌های ممکن را برای \fB/usr\fP نیز بررسی می‌کند\&. .RS .PP هنگامی که این سبک `true\&' باشد، هر پیشوندی از یک مسیر که با یک دایرکتوری موجود مطابقت داشته باشد، بدون هیچ تلاشی برای تکمیل بیشتر آن پذیرفته می‌شود\&. بنابراین، در مثال ارائه‌شده، مسیر \fB/usr/bin/\fP بلافاصله پذیرفته شده و تکمیل در آن دایرکتوری امتحان می‌شود\&. .PP این سبک همچنین هنگام تکمیل پس از دایرکتوری‌هایی که با ارجاع به آن‌ها ظاهر می‌شوند (مانند دایرکتوری‌های \fB\&.zfs\fP در ZFS یا دایرکتوری‌های \fB\&.snapshot\fP در NetApp) مفید است\&. وقتی این سبک تنظیم شده باشد، شل وجود دایرکتوری را در دایرکتوری والد بررسی نمی‌کند\&. .PP اگر می‌خواهید این رفتار را به طور کامل غیرفعال کنید، سبک \fBpath\-completion\fP (پایین‌تر را ببینید) را روی `false\&' تنظیم کنید\&. .RE .TP \fBadd\-space\fP این سبک توسط تکمیل‌کنندهٔ \fB_expand\fP استفاده می‌شود\&. اگر روی `true\&' (پیش‌فرض) باشد، یک فاصله پس از تمام کلمات حاصل از بسط درج می‌شود، یا در مورد نام‌های دایرکتوری یک اسلش درج می‌گردد\&. اگر مقدار `\fBfile\fP\&' باشد، تکمیل‌کننده تنها به نام فایل‌های موجود فاصله اضافه می‌کند\&. هر یک از مقادیر بولی `true\&' یا مقدار `\fBfile\fP\&' را می‌توان با `\fBsubst\fP' ترکیب کرد، که در این صورت تکمیل‌کننده به کلمات تولیدشده از بسط یک جایگزینی به شکل `\fB$(\fP\fI\&.\&.\&.\fP\fB)\fP\&' یا `\fB${\fP\fI\&.\&.\&.\fP\fB}\fP' فاصله اضافه نمی‌کند\&. .RS .PP تکمیل‌کنندهٔ \fB_prefix\fP از این سبک به عنوان یک مقدار بولی ساده استفاده می‌کند تا تصمیم بگیرد آیا باید یک فاصله قبل از پسوند درج شود یا خیر\&. .RE .TP \fBambiguous\fP این سبک هنگام تکمیل اجزای غیرنهایی مسیرهای فایل اعمال می‌شود، به عبارت دیگر مواردی که دارای اسلش انتهایی هستند\&. اگر تنظیم شده باشد، مکان‌نما پس از اولین جزء مبهم باقی می‌ماند، حتی اگر تکمیل منویی در حال استفاده باشد\&. این سبک همیشه با برچسب \fBpaths\fP بررسی می‌شود\&. .TP \fBassign\-list\fP هنگام تکمیل پس از علامت مساوی که به عنوان یک انتساب تلقی می‌شود، سیستم تکمیل معمولاً تنها یک نام فایل را کامل می‌کند\&. در برخی موارد مقدار ممکن است فهرستی از نام‌های فایل باشد که با دونقطه (colon) از هم جدا شده‌اند، مانند \fBPATH\fP و پارامترهای مشابه\&. این سبک می‌تواند روی فهرستی از الگوهای منطبق با نام چنین پارامترهایی تنظیم شود\&. .RS .PP حالت پیش‌فرض این است که وقتی کلمه روی خط فرمان از قبل حاوی یک دونقطه باشد، تکمیل به صورت فهرست انجام شود\&. .RE .TP \fBauto\-description\fP در صورت تنظیم، مقدار این سبک به عنوان توضیحات برای گزینه‌هایی استفاده می‌شود که توسط توابع تکمیل توصیف نشده‌اند اما دقیقاً یک آرگومان دارند\&. توالی `\fB%d\fP\&' در مقدار، با توضیحات مربوط به این آرگومان جایگزین خواهد شد\&. بسته به ترجیحات شخصی، ممکن است تنظیم این سبک روی چیزی مانند `\fBspecify: %d\fP\&' مفید باشد\&. توجه داشته باشید که این ممکن است برای برخی دستورها کار نکند\&. .TP \fBavoid\-completer\fP این سبک توسط تکمیل‌کنندهٔ \fB_all_matches\fP استفاده می‌شود تا تصمیم بگیرد آیا رشتهٔ متشکل از تمام تطابق‌ها باید به فهرستی که در حال حاضر تولید می‌شود اضافه شود یا خیر\&. مقدار آن فهرستی از نام‌های تکمیل‌کننده‌ها است\&. اگر هر یک از آن‌ها نام تکمیل‌کننده‌ای باشد که تطابق‌ها را در این تکمیل تولید کرده است، رشته اضافه نخواهد شد\&. .RS .PP مقدار پیش‌فرض این سبک `\fB_expand _oldlist _correct _approximate\fP\&' است؛ یعنی شامل تکمیل‌کننده‌هایی است که تقریباً هیچ‌گاه رشته‌ای حاوی تمام تطابق‌ها برای آن‌ها مورد نظر نخواهد بود\&. .RE .TP \fBcache\-path\fP این سبک مسیری را مشخص می‌کند که در آن هر فایل حافظهٔ پنهان (cache) شامل داده‌های تخلیه‌شدهٔ تکمیل ذخیره می‌شود\&. مقدار پیش‌فرض آن `\fB$ZDOTDIR/\&.zcompcache\fP\&'، یا در صورت تعریف نشدن \fB$ZDOTDIR\fP، `\fB$HOME/\&.zcompcache\fP\&' است\&. حافظهٔ پنهان تکمیل استفاده نخواهد شد مگر اینکه سبک \fBuse\-cache\fP تنظیم شده باشد\&. .TP \fBcache\-policy\fP این سبک تابعی را مشخص می‌کند که برای تشخیص نیاز یا عدم نیاز به بازسازی یک حافظهٔ پنهان استفاده خواهد شد\&. بخش مربوط به تابع \fB_cache_invalid\fP در ادامه را ببینید\&. .TP \fBcall\-command\fP این سبک در توابع مربوط به دستورهایی مانند \fBmake\fP و \fBant\fP استفاده می‌شود؛ جایی که فراخوانی مستقیم دستور برای تولید تطابق‌ها مشکلاتی مانند کند بودن به همراه دارد یا همانند مورد \fBmake\fP می‌تواند بالقوه باعث اجرای اقداماتی در makefile شود\&. اگر روی `true\&' تنظیم شده باشد، دستور برای تولید تطابق‌ها فراخوانی می‌شود\&. مقدار پیش‌فرض این سبک `false\&' است\&. .TP \fBcommand\fP در بسیاری از جاها، توابع تکمیل برای تولید فهرست تکمیل‌ها نیاز به فراخوانی دستورهای خارجی دارند\&. از این سبک می‌توان برای جایگزینی دستوری که در برخی از این موارد فراخوانی می‌شود استفاده کرد\&. عناصر مقدار با فاصله به هم متصل می‌شوند تا یک خط فرمان برای اجرا تشکیل دهند\&. مقدار همچنین می‌تواند با یک خط تیره شروع شود، که در این حالت دستور معمول به انتها افزوده خواهد شد؛ این امر بیش از همه برای قرار دادن `\fBbuiltin\fP\&' یا `\fBcommand\fP' در ابتدا مفید است تا اطمینان حاصل شود که نسخهٔ مناسب دستور فراخوانی می‌شود، برای مثال برای جلوگیری از فراخوانی یک تابع شل همنام با یک دستور خارجی\&. .RS .PP به عنوان مثال، تابع تکمیل برای شناسه‌های فرایند از این سبک با برچسب \fBprocesses\fP برای تولید شناسه‌هایی جهت تکمیل و فهرست فرایندها برای نمایش (اگر سبک \fBverbose\fP برابر `true\&' باشد) استفاده می‌کند\&. فهرست تولیدشده توسط این دستور باید شبیه خروجی دستور \fBps\fP باشد\&. سطر اول نمایش داده نمی‌شود، اما در آن برای یافتن رشتهٔ `\fBPID\fP\&' (یا `\fBpid\fP') جستجو صورت می‌گیرد تا موقعیت شناسه‌های فرایند در سطرهای بعدی مشخص شود\&. اگر سطر حاوی `\fBPID\fP\&' نباشد، اولین اعداد در هر یک از سطرهای دیگر به عنوان شناسه‌های فرایند برای تکمیل در نظر گرفته می‌شوند\&. .PP توجه داشته باشید که تابع تکمیل معمولاً باید برای هر تلاش در جهت تولید فهرست تکمیل، دستور مشخص‌شده را فراخوانی کند\&. بنابراین باید دقت شود که تنها دستورهایی مشخص شوند که اجرای آن‌ها زمان کوتاهی می‌برد، و به ویژه از هر دستوری که ممکن است هرگز پایان نیابد اجتناب شود\&. .RE .TP \fBcommand\-path\fP این سبک فهرستی از دایرکتوری‌ها برای جستجوی دستورها جهت تکمیل است\&. مقدار پیش‌فرض این سبک، مقدار پارامتر ویژهٔ \fBpath\fP است\&..TP \fBcommands\fP این سبک توسط تابعی استفاده می‌شود که زیردستورها را برای اسکریپت‌های مقداردهی اولیه سیستم (واقع در \fB/etc/init\&.d\fP یا جایی نزدیک به آن) کامل می‌کند\&. مقادیر آن دستورهای پیش‌فرضی را مشخص می‌کنند که باید برای آن دسته از دستورهایی کامل شوند که تابع کامل‌سازی قادر به تشخیص خودکار آن‌ها نیست\&. مقدار پیش‌فرض برای این سبک، دو رشته‌ی `\fBstart\fP\&' و `\fBstop\fP' است\&. .TP \fBcomplete\fP این سبک توسط تابع \fB_expand_alias\fP هنگامی که به عنوان یک دستور مقیدشدنی فراخوانی می‌شود، به کار می‌رود\&. اگر روی `true\&' تنظیم شده باشد و کلمه‌ی موجود در خط فرمان نام یک نام مستعار (alias) نباشد، نام‌های مستعار منطبق کامل خواهند شد\&. .TP \fBcomplete\-options\fP این سبک توسط کامل‌کننده برای دستورهای \fBcd\fP، \fBchdir\fP و \fBpushd\fP استفاده می‌شود\&. برای این دستورها، از یک \fB\-\fP برای معرفی یک مدخل پشته‌ی دایرکتوری استفاده می‌شود و کامل‌سازی این موارد بسیار رایج‌تر از کامل‌سازی گزینه‌ها است\&. بنابراین، مگر اینکه مقدار این سبک `true\&' باشد، گزینه‌ها حتی پس از یک \fB\-\fP اولیه کامل نخواهند شد\&. اگر روی `true\&' باشد، گزینه‌ها پس از یک \fB\-\fP اولیه کامل می‌شوند، مگر اینکه یک \fB\-\fP\fB\-\fP مقدم در خط فرمان وجود داشته باشد\&. .TP \fBcompleter\fP رشته‌هایی که به عنوان مقدار این سبک ارائه می‌شوند، نام توابع کامل‌کننده مورد استفاده را مشخص می‌کنند\&. توابع کامل‌کننده‌ی موجود در بخش `Control Functions\&' در زیر شرح داده شده‌اند\&. .RS .PP هر رشته می‌تواند نام یک تابع کامل‌کننده یا رشته‌ای به شکل `\fIfunction\fP\fB:\fP\fIname\fP\&' باشد\&. در حالت اول، فیلد \fIcompleter\fP بافتار شامل نام کامل‌کننده بدون زیرخط ابتدایی و با جایگزینی تمام زیرخط‌های دیگر با خط تیره خواهد بود\&. در حالت دوم، \fIfunction\fP نام کامل‌کننده‌ای است که باید فراخوانی شود، اما بافتار شامل \fIname\fP تعریف‌شده توسط کاربر در فیلد \fIcompleter\fP بافتار خواهد بود\&. اگر \fIname\fP با یک خط تیره شروع شود، رشته‌ی مربوط به بافتار همانند حالت اول از نام تابع کامل‌کننده به همراه \fIname\fP که به آن الحاق شده ساخته می‌شود\&. به عنوان مثال: .PP .RS .nf \fBzstyle \&':completion:*' completer _complete _complete:\-foo\fP .fi .RE .PP در اینجا، کامل‌سازی کامل‌کننده‌ی \fB_complete\fP را دو بار فراخوانی می‌کند، یک بار با استفاده از `\fBcomplete\fP\&' و یک بار با استفاده از `\fBcomplete\-foo\fP' در فیلد \fIcompleter\fP بافتار\&. به طور معمول، استفاده از یک کامل‌کننده بیش از یک بار فقط زمانی منطقی است که با فرم `\fIfunctions\fP\fB:\fP\fIname\fP\&' استفاده شود، زیرا در غیر این صورت نام بافتار در تمام فراخوانی‌های کامل‌کننده یکسان خواهد بود؛ استثناهای احتمالی این قاعده کامل‌کننده‌های \fB_ignored\fP و \fB_prefix\fP هستند\&. .PP مقدار پیش‌فرض برای این سبک `\fB_complete _ignored\fP\&' است: فقط کامل‌سازی انجام خواهد شد، ابتدا با استفاده از سبک \fBignored\-patterns\fP و آرایه‌ی \fB$fignore\fP، و سپس بدون نادیده گرفتن تطابق‌ها\&. .RE .TP \fBcondition\fP این سبک توسط تابع کامل‌کننده‌ی \fB_list\fP استفاده می‌شود تا تصمیم بگیرد آیا درج تطابق‌ها باید بدون قید و شرط به تعویق بیفتد یا خیر\&. مقدار پیش‌فرض `true\&' است\&. .TP \fBdelimiters\fP این سبک هنگام افزودن یک جداکننده برای استفاده با اصلاح‌کننده‌های تاریخچه یا توصیف‌کننده‌های glob که آرگومان‌های تفکیک‌شده دارند، به کار می‌رود\&. این سبک آرایه‌ای از جداکننده‌های ترجیحی برای افزودن است\&. نویسه‌های غیرخاص ترجیح داده می‌شوند زیرا در غیر این صورت ممکن است سیستم کامل‌سازی سردرگم شود\&. فهرست پیش‌فرض \fB:\fP، \fB+\fP، \fB/\fP، \fB\-\fP، \fB%\fP است\&. این فهرست می‌تواند خالی باشد تا کاربر را وادار به تایپ یک جداکننده کند\&. .TP \fBdisabled\fP اگر روی `true\&' تنظیم شود، کامل‌کننده و دستور مقیدشدنی \fB_expand_alias\fP تلاش خواهند کرد نام‌های مستعار غیرفعال را نیز بسط دهند\&. مقدار پیش‌فرض `false\&' است\&. .TP \fBdomains\fP فهرستی از نام‌های دامنه‌های شبکه برای کامل‌سازی\&. اگر تنظیم نشده باشد، نام‌های دامنه از فایل \fB/etc/resolv\&.conf\fP گرفته خواهند شد\&. .TP \fBenviron\fP سبک environ هنگام کامل‌سازی برای `\fBsudo\fP\&' استفاده می‌شود\&. این سبک به آرایه‌ای از انتساب‌های `\fIVAR\fP\fB=\fP\fIvalue\fP\&' تنظیم می‌شود تا قبل از فراخوانی کامل‌سازی برای دستور هدف، به محیط محلی صادر شوند\&. .RS .nf \fBzstyle \&':completion:*:sudo::' environ \e PATH="/sbin:/usr/sbin:$PATH" HOME="/root"\fP .fi .RE .TP \fBexpand\fP این سبک هنگام کامل‌سازی رشته‌های متشکل از چند بخش، مانند نام مسیرها، استفاده می‌شود\&. .RS .PP اگر یکی از مقادیر آن رشته‌ی `\fBprefix\fP\&' باشد، کلمه‌ی تا حدی تایپ‌شده از خط تا جای ممکن بسط داده می‌شود حتی اگر بخش‌های انتهایی قابل کامل‌سازی نباشند\&. .PP اگر یکی از مقادیر آن رشته‌ی `\fBsuffix\fP\&' باشد، نام‌های منطبق برای مؤلفه‌های پس از اولین مؤلفه‌ی مبهم نیز اضافه خواهند شد\&. این بدان معناست که رشته‌ی حاصل طولانی‌ترین رشته‌ی غیرمبهم ممکن است\&. با این حال، می‌توان از کامل‌سازی منویی برای پیمایش در میان تمام تطابق‌ها استفاده کرد\&. .RE .TP \fBextra\-verbose\fP اگر این سبک روی `true\&' تنظیم شود، فهرست کامل‌سازی حتی پرگوتر خواهد بود\&. .RS .PP در حال حاضر، این سبک برای برچسب‌های \fBcommands\fP و \fBparameters\fP استفاده می‌شود\&. اگر برای برچسب \fBcommands\fP (یا \fBparameters\fP) مقدار `true\&' داشته باشد، توضیحات کوتاهی از دستورها (یا مقادیر پارامترها) همراه با نام‌های دستور (یا پارامتر) نمایش داده می‌شوند\&. .RE .TP \fBfake\fP این سبک می‌تواند برای هر بافتار کامل‌سازی تنظیم شود\&. این سبک رشته‌های اضافی را مشخص می‌کند که همواره در آن بافتار کامل خواهند شد\&. قالب هر رشته به صورت `\fIvalue\fP\fB:\fP\fIdescription\fP\&' است؛ دونقطه و شرح می‌توانند حذف شوند، اما هر دونقطه‌ی لفظی در \fIvalue\fP باید با یک بک‌اسلش نقل‌قول شود\&. هر \fIdescription\fP ارائه‌شده در کنار مقدار در فهرست‌های کامل‌سازی نمایش داده می‌شود\&. .RS .PP هنگام مشخص کردن رشته‌های ساختگی، استفاده از یک بافتار به اندازه‌ی کافی محدودکننده حائز اهمیت است\&. توجه داشته باشید که سبک‌های \fBfake\-files\fP و \fBfake\-parameters\fP قابلیت‌های بیشتری را هنگام کامل‌سازی فایل‌ها یا پارامترها ارائه می‌دهند\&. .RE .TP \fBfake\-always\fP این سبک دقیقاً مانند سبک \fBfake\fP کار می‌کند، با این تفاوت که سبک \fBignored\-patterns\fP روی آن اعمال نمی‌شود\&. این ویژگی این امکان را فراهم می‌کند که با تنظیم الگوهای نادیده‌گرفته‌شده روی `\fB*\fP\&'، یک مجموعه از تطابق‌ها را کاملاً بازنویسی کرد\&. .RS .PP مثال زیر روشی برای تکمیل هر برچسب با داده‌های دلخواه نشان می‌دهد، در حالی که برای اهداف نمایشی مانند یک برچسب جداگانه رفتار کند\&. در این مثال، از قابلیت‌های سبک \fBtag\-order\fP برای تقسیم برچسب \fBnamed\-directories\fP به دو برچسب هنگام انجام کامل‌سازی با کامل‌کننده‌ی استاندارد \fBcomplete\fP برای آرگومان‌های \fBcd\fP استفاده می‌کنیم\&. برچسب \fBnamed\-directories\-normal\fP طبق روال عادی رفتار می‌کند، اما برچسب \fBnamed\-directories\-mine\fP شامل مجموعه‌ای ثابت از دایرکتوری‌ها است\&. این کار تأثیر افزودن گروه تطابق `\fBextra directories\fP\&' با کامل‌سازی‌های ارائه‌شده را دارد\&. .PP .RS .nf \fBzstyle \&':completion::complete:cd:*' tag\-order \e \&'named\-directories:\-mine:extra\e directories named\-directories:\-normal:named\e directories *\&' zstyle \&':completion::complete:cd:*:named\-directories\-mine' \e fake\-always mydir1 mydir2 zstyle \&':completion::complete:cd:*:named\-directories\-mine' \e ignored\-patterns \&'*'\fP .fi .RE .RE .TP \fBfake\-files\fP این سبک هنگام کامل‌سازی فایل‌ها استفاده می‌شود و بدون برچسب جستجو می‌گردد\&. مقادیر آن به شکل `\fIdir\fP\fB:\fP\fInames\&.\&.\&.\fP\&' هستند\&. این کار \fInames\fP (رشته‌های جداشده با فاصله) را به عنوان تطابق‌های احتمالی هنگام کامل‌سازی در دایرکتوری \fIdir\fP اضافه می‌کند، حتی اگر چنین فایل‌هایی در واقعیت وجود نداشته باشند\&. دایرکتوری \fIdir\fP ممکن است یک الگو باشد؛ نویسه‌های الگو یا دونقطه‌ها در \fIdir\fP باید با بک‌اسلش نقل‌قول شوند تا به صورت تحت‌اللفظی تلقی گردند\&. .RS .PP این ویژگی می‌تواند در سیستم‌هایی که از سیستم‌های فایل ویژه‌ای پشتیبانی می‌کنند که نام مسیرهای سطح بالای آن‌ها را نمی‌توان فهرست کرد یا با الگوهای glob تولید نمود مفید باشد (اما برای روش کلی‌تر برخورد با این مشکل، \fBaccept\-exact\-dirs\fP را ببینید)\&. همچنین می‌توان از آن برای دایرکتوری‌هایی استفاده کرد که کاربر مجوز خواندن آن‌ها را ندارد\&..PP از ساختار الگو می‌توان برای افزودن یک مدخل `magic\&' خاص به تمام دایرکتوری‌های یک سیستم‌فایل به‌خصوص استفاده کرد\&. .RE .TP \fBfake\-parameters\fP این سبک توسط تابع کامل‌سازی برای نام پارامترها استفاده می‌شود\&. مقادیر آن نام‌های پارامترهایی هستند که ممکن است هنوز مقداردهی نشده باشند اما با این وجود باید کامل شوند\&. هر نام همچنین می‌تواند با یک دونقطه و رشته‌ای که نوع پارامتر را تعیین می‌کند دنبال شود (مانند `\fBscalar\fP\&'، `\fBarray\fP' یا `\fBinteger\fP')\&. اگر نوع مشخص شده باشد، نام تنها در صورتی کامل خواهد شد که در آن زمینه خاص، پارامترهایی از آن نوع لازم باشند\&. نام‌هایی که هیچ نوعی برای آن‌ها تعیین نشده است همیشه کامل خواهند شد\&. .TP \fBfile\-list\fP این سبک مشخص می‌کند آیا فایل‌هایی که با سازوکار استاندارد توکار کامل شده‌اند با یک فهرست طولانی مشابه \fBls \-l\fP فهرست‌بندی شوند یا خیر\&. توجه داشته باشید که این ویژگی برای دریافت اطلاعات فایل از ماژول پوسته \fBzsh/stat\fP استفاده می‌کند؛ این امر دستور توکار \fBstat\fP را بارگذاری می‌کند که جایگزین هر برنامه اجرایی خارجی \fBstat\fP خواهد شد\&. برای جلوگیری از این موضوع، می‌توان کد زیر را در یک فایل مقداردهی اولیه گنجاند: .RS .PP .RS .nf \fBzmodload \-i zsh/stat disable stat\fP .fi .RE .PP این سبک می‌تواند روی مقدار `true\&' (یا `\fBall\fP')، یا یکی از مقادیر `\fBinsert\fP\&' یا `\fBlist\fP' تنظیم شود؛ که نشان‌دهنده آن است که فایل‌ها در همه شرایط، یا هنگام تلاش برای درج نام فایل، یا هنگام فهرست کردن نام‌های فایل بدون تلاش برای درج آن، با قالب طولانی فهرست شوند\&. .PP به‌طور کلی‌تر، این مقدار می‌تواند آرایه‌ای از هر یک از مقادیر بالا باشد، که در صورت تمایل \fB=\fP\fInum\fP به دنبال آن می‌آید\&. اگر \fInum\fP وجود داشته باشد، حداکثر تعداد تطابق‌هایی را مشخص می‌کند که سبک فهرست‌بندی طولانی برای آن‌ها استفاده خواهد شد\&. برای مثال، .PP .RS .nf \fBzstyle \&':completion:*' file\-list list=20 insert=10\fP .fi .RE .PP مشخص می‌کند که قالب طولانی هنگام فهرست کردن حداکثر ۲۰ فایل یا درج فایلی با حداکثر ۱۰ تطابق استفاده خواهد شد (به فرض اینکه اصلاً قرار باشد فهرستی نشان داده شود، برای مثال در یک کامل‌سازی مبهم)، در غیر این صورت از قالب کوتاه استفاده می‌شود\&. .PP .RS .nf \fBzstyle \-e \&':completion:*' file\-list \e \&'(( ${+NUMERIC} )) && reply=(true)'\fP .fi .RE .PP مشخص می‌کند هر زمانی که یک آرگومان عددی ارائه شود قالب طولانی استفاده خواهد شد، در غیر این صورت قالب کوتاه به‌کار می‌رود\&. .RE .TP \fBfile\-patterns\fP این سبک توسط تابع استاندارد برای کامل‌سازی نام فایل‌ها، یعنی \fB_files\fP، استفاده می‌شود\&. اگر این سبک تنظیم نشده باشد، بسته به انواع فایل‌هایی که فراخوانندهٔ \fB_files\fP انتظار دارد، حداکثر تا سه برچسب پیشنهاد می‌شود: `\fBglobbed\-files\fP\&'، `\fBdirectories\fP' و `\fBall\-files\fP'\&. دو برچسب اول (`\fBglobbed\-files\fP\&' و `\fBdirectories\fP') معمولاً با هم پیشنهاد می‌شوند تا کامل‌سازی فایل‌ها در زیردایرکتوری‌ها آسان‌تر شود\&. .RS .PP سبک \fBfile\-patterns\fP جایگزین‌هایی برای برچسب‌های پیش‌فرض ارائه می‌دهد که دیگر استفاده نمی‌شوند\&. مقدار آن از عناصری به شکل `\fIpattern\fP\fB:\fP\fItag\fP\&' تشکیل شده است؛ هر رشته می‌تواند شامل هر تعداد از چنین مشخصاتی باشد که با فاصله از هم جدا شده‌اند\&. .PP الگوی \fIpattern\fP الگویی است که باید برای تولید نام فایل‌ها استفاده شود\&. هر رخداد از دنباله `\fB%p\fP\&' با هر الگو(هایی) که توسط تابع فراخوانندهٔ \fB_files\fP ارسال شده است جایگزین می‌شود\&. دونقطه‌ها در الگو باید با یک بک‌اسلش همراه باشند تا از دونقطه قبل از \fItag\fP قابل تمایز شوند\&. اگر بیش از یک الگو مورد نیاز باشد، الگوها را می‌توان درون آکولادها و جدا شده با کاما قرار داد\&. .PP برچسب‌های (\fItag\fPهای) تمام رشته‌ها در این مقدار توسط \fB_files\fP پیشنهاد خواهند شد و هنگام جستجوی سایر سبک‌ها استفاده می‌شوند\&. هر \fItag\fP در همان کلمه، هم‌زمان و قبل از کلمات بعدی پیشنهاد خواهد شد\&. اگر هیچ `\fB:\fP\fItag\fP\&' داده نشود، برچسب `\fBfiles\fP' استفاده خواهد شد\&. .PP همچنین به دنبال \fItag\fP می‌تواند یک دونقطه اختیاری دوم و یک شرح (description) بیاید، که برای `\fB%d\fP\&' در مقدار سبک \fBformat\fP (اگر تنظیم شده باشد) به جای شرح پیش‌فرضی که تابع کامل‌سازی ارائه می‌دهد استفاده خواهد شد\&. گنجاندن شرح همچنین به گزینه‌های وابسته مانند گروه‌بندی کامل‌سازی تقدم می‌بخشد، بنابراین می‌توان از آن در جایی که فایل‌ها باید جدا شوند استفاده کرد\&. .PP برای مثال، برای اینکه دستور \fBrm\fP ابتدا فقط نام فایل‌های شیء (object files) و سپس در صورت عدم وجود فایل شیء منطبق، نام تمام فایل‌ها را کامل کند: .PP .RS .nf \fBzstyle \&':completion:*:*:rm:*:*' file\-patterns \e \&'*\&.o:object\-files' '%p:all\-files'\fP .fi .RE .PP برای تغییر رفتار پیش‌فرض کامل‌سازی فایل \-\- پیشنهاد فایل‌های منطبق با یک الگو و دایرکتوری‌ها در اولین تلاش، سپس تمام فایل‌ها \-\- به گونه‌ای که فقط فایل‌های منطبق در اولین تلاش، سپس دایرکتوری‌ها، و در نهایت تمام فایل‌ها پیشنهاد شوند: .PP .RS .nf \fBzstyle \&':completion:*' file\-patterns \e \&'%p:globbed\-files' '*(\-/):directories' '*:all\-files'\fP .fi .RE .PP این روش حتی در جایی که هیچ الگوی خاصی وجود ندارد کار می‌کند: \fB_files\fP تمام فایل‌ها را با استفاده از الگوی `\fB*\fP\&' در مرحله اول مطابقت می‌دهد و هنگامی که این الگو را ببیند متوقف می‌شود\&. همچنین توجه داشته باشید که هرگز یک الگو را بیش از یک بار برای یک تلاش کامل‌سازی امتحان نخواهد کرد\&. .PP برای جدا کردن دایرکتوری‌ها در یک گروه جداگانه از فایل‌ها، اما همچنان کامل‌سازی آن‌ها در اولین تلاش، باید شرحی ارائه شود\&. توجه داشته باشید که دایرکتوری‌ها باید به‌صراحت از globbed\-files مستثنی شوند زیرا `\fB*\fP\&' با دایرکتوری‌ها نیز تطابق می‌یابد\&. برای گروه‌بندی، تنظیم سبک \fBgroup\-name\fP نیز الزامی است\&. .PP .RS .nf \fBzstyle \&':completion:*' file\-patterns \e \&'%p(^\-/):globbed\-files *(\-/):directories:location'\fP .fi .RE .PP در طول اجرای توابع کامل‌سازی، گزینه \fBEXTENDED_GLOB\fP فعال است، بنابراین نویسه‌های `\fB#\fP\&'، `\fB~\fP' و `\fB^\fP' در الگوها معانی خاصی دارند\&. .RE .TP \fBfile\-sort\fP تابع استاندارد کامل‌سازی نام فایل از این سبک بدون برچسب برای تعیین ترتیبی که نام‌ها باید فهرست شوند استفاده می‌کند؛ کامل‌سازی منو با همان ترتیب بین آن‌ها جابه‌جا خواهد شد\&. مقادیر ممکن عبارتند از: `\fBsize\fP\&' برای مرتب‌سازی بر اساس اندازه فایل؛ `\fBlinks\fP\&' برای مرتب‌سازی بر اساس تعداد پیوندهای فایل؛ `\fBmodification\fP\&' (یا `\fBtime\fP' یا `\fBdate\fP') برای مرتب‌سازی بر اساس زمان آخرین تغییر؛ `\fBaccess\fP\&' برای مرتب‌سازی بر اساس زمان آخرین دسترسی؛ و `\fBinode\fP\&' (یا `\fBchange\fP') برای مرتب‌سازی بر اساس زمان آخرین تغییر inode\&. اگر سبک روی هر مقدار دیگری تنظیم شود، یا تنظیم نشده باشد، فایل‌ها بر اساس نام و به ترتیب حروف الفبا مرتب خواهند شد\&. اگر مقدار شامل رشته `\fBreverse\fP\&' باشد، مرتب‌سازی به ترتیب معکوس انجام می‌شود\&. اگر مقدار شامل رشته `\fBfollow\fP\&' باشد، برچسب‌های زمانی به مقصدهای پیوندهای نمادین مرتبط می‌شوند؛ مقدار پیش‌فرض استفاده از برچسب‌های زمانی خود پیوندها است\&. .TP \fBfile\-split\-chars\fP مجموعه‌ای از نویسه‌ها که باعث می‌شود \fIتمام\fP کامل‌سازی‌های فایل برای زمینه داده‌شده در نقطه‌ای که هر یک از نویسه‌ها رخ می‌دهد تفکیک شوند\&. یک کاربرد معمول، تنظیم سبک روی \fB:\fP است؛ سپس هر چیزی تا و شامل آخرین \fB:\fP در رشته فعلی هنگام کامل‌سازی فایل‌ها نادیده گرفته می‌شود\&. از آنجا که این رفتار بسیار سخت‌گیرانه و کلی است، معمولاً ترجیح داده می‌شود توابع کامل‌سازی برای زمینه‌هایی که این رفتار در آن‌ها مفید است به‌روزرسانی شوند\&. .TP \fBfilter\fP پلاگین \fBldap\fP در کامل‌سازی نشانی‌های رایانامه (نگاه کنید به \fB_email_addresses\fP) از این سبک برای مشخص کردن صفت‌هایی استفاده می‌کند که هنگام پالایش مدخل‌ها باید با آن‌ها تطابق داده شود\&. برای مثال، اگر سبک روی `\fBsn\fP\&' تنظیم شده باشد، تطابق در برابر نام‌های خانوادگی انجام می‌شود\&. فیلترسازی استاندارد LDAP استفاده می‌شود بنابراین تطابق معمول کامل‌سازی نادیده گرفته می‌شود\&. اگر این سبک تنظیم نشده باشد، از پلاگین LDAP صرف‌نظر می‌شود\&. همچنین ممکن است لازم باشد سبک \fBcommand\fP را تنظیم کنید تا نحوه اتصال به کارساز LDAP خود را مشخص نمایید\&. .TP \fBforce\-list\fP این سبک نمایش فهرستی از کامل‌سازی‌ها را در هر نقطه‌ای که فهرست‌بندی انجام می‌شود اجباری می‌کند، حتی در مواردی که فهرست معمولاً پنهان می‌شود\&. برای مثال، در حالت عادی فهرست تنها در صورتی نشان داده می‌شود که دست‌کم دو تطابق متفاوت وجود داشته باشد\&. با تنظیم این سبک روی `\fBalways\fP\&'، فهرست همیشه نشان داده خواهد شد، حتی اگر تنها یک تطابق تکی وجود داشته باشد که بلافاصله پذیرفته شود\&. این سبک همچنین می‌تواند روی یک عدد تنظیم شود\&. در این حالت، اگر دست‌کم به همان تعداد تطابق وجود داشته باشد، حتی اگر همه آن‌ها رشته یکسانی را درج کنند، فهرست نشان داده خواهد شد\&. .RS.PP این استایل برای برچسب پیش‌فرض و همچنین برای هر برچسب معتبر جهت کامل‌سازی فعلی بررسی می‌شود\&. بنابراین فهرست‌بندی می‌تواند تنها برای انواع خاصی از تطابق اجباری شود\&. .RE .TP \fBformat\fP اگر این استایل برای برچسب \fBdescriptions\fP تنظیم شود، مقدار آن به عنوان رشته‌ای برای نمایش در بالای تطابق‌ها در فهرست‌های کامل‌سازی استفاده می‌شود\&. توالی «\fB%d\fP\&» در این رشته با توضیح کوتاهی از ماهیت این تطابق‌ها جایگزین خواهد شد\&. این رشته ممکن است همچنین حاوی توالی‌های مشخصه خروجی باشد که توسط \fBcompadd \-X\fP فهمیده می‌شوند (ببینید \fIzshcompwid\fP(1))\&. .RS .PP این استایل پیش از بررسی برای برچسب \fBdescriptions\fP، برای هر برچسب معتبر جهت کامل‌سازی فعلی بررسی می‌شود\&. بنابراین می‌توان رشته‌های قالب‌بندی متفاوتی را برای انواع مختلف تطابق تعریف کرد\&. .PP همچنین توجه داشته باشید که برخی از توابع کامل‌ساز توالی‌های «\fB%\fP\&» اضافی تعریف می‌کنند\&. این موارد ذیل توابع کامل‌سازی که از آن‌ها استفاده می‌کنند شرح داده شده‌اند\&. .PP برخی توابع کامل‌سازی پیام‌هایی را نمایش می‌دهند که ممکن است با تنظیم این استایل برای برچسب \fBmessages\fP سفارشی‌سازی شوند\&. در اینجا، «\fB%d\fP\&» با پیامی که توسط تابع کامل‌سازی ارائه شده است جایگزین می‌شود\&. .PP در نهایت، رشته قالب‌بندی با برچسب \fBwarnings\fP بررسی می‌شود، برای استفاده در زمانی که اصلاً هیچ تطابقی تولید نشود\&. در این حالت «\fB%d\fP\&» با توضیحات تطابق‌های مورد انتظار که با فاصله جدا شده‌اند جایگزین می‌شود\&. توالی «\fB%D\fP\&» با همان توضیحات جداشده با خطوط جدید جایگزین می‌شود\&. .PP استفاده از مشخص‌کننده‌های پهنای فیلد به سبک printf با «\fB%d\fP\&» و توالی‌های گریز مشابه ممکن است\&. این کار توسط دستور توکار \fBzformat\fP از ماژول \fBzsh/zutil\fP مدیریت می‌شود، ببینید \fIzshmodules\fP(1)\&. .RE .TP \fBgain\-privileges\fP اگر روی \fBtrue\fP تنظیم شود، این استایل استفاده از دستورهایی مانند \fBsudo\fP یا \fBdoas\fP را برای کسب امتیازات بیشتر هنگام بازیابی اطلاعات جهت کامل‌سازی فعال می‌کند\&. این کار تنها زمانی انجام می‌شود که دستوری مانند \fBsudo\fP در خط فرمان ظاهر شود\&. برای اجبار به استفاده از مثلاً \fBsudo\fP یا بازنویسی هر پیشوندی که ممکن است به دلیل \fBgain\-privileges\fP افزوده شود، می‌توان از استایل \fBcommand\fP با مقداری که با یک خط تیره شروع می‌شود استفاده کرد\&. .TP \fBglob\fP این مورد توسط کامل‌ساز \fB_expand\fP استفاده می‌شود\&. اگر روی «true\&» (پیش‌فرض) تنظیم شود، انطباق الگو (globbing) روی کلمات حاصل از جایگزینی قبلی (استایل \fBsubstitute\fP را ببینید) یا در غیر این صورت رشته اصلی از خط آزمایش خواهد شد\&. .TP \fBglobal\fP اگر این مورد روی «true\&» (پیش‌فرض) تنظیم شود، کامل‌ساز \fB_expand_alias\fP و دستور قابل اتصال تلاش خواهند کرد تا نام‌های مستعار سراسری (global aliases) را بسط دهند\&. .TP \fBgroup\-name\fP سیستم کامل‌سازی می‌تواند انواع مختلف تطابق‌ها را که در فهرست‌های جداگانه ظاهر می‌شوند، گروه‌بندی کند\&. این استایل می‌تواند برای تعیین نام گروه‌ها برای برچسب‌های مشخص استفاده شود\&. به عنوان مثال، در موقعیت دستور، سیستم کامل‌سازی نام دستورهای توکار و خارجی، نام‌های مستعار، توابع پوسته، پارامترها و کلمات رزرو شده را به عنوان کامل‌سازی‌های ممکن تولید می‌کند\&. برای داشتن دستورهای خارجی و توابع پوسته در فهرست‌های جداگانه: .RS .PP .RS .nf \fBzstyle \&':completion:*:*:\-command\-:*:commands' \e group\-name commands zstyle \&':completion:*:*:\-command\-:*:functions' \e group\-name functions\fP .fi .RE .PP در نتیجه، هر تطابق با همان برچسب در همان گروه نمایش داده خواهد شد\&. .PP اگر نام ارائه‌شده رشته خالی باشد، نام برچسب مربوط به تطابق‌ها به عنوان نام گروه استفاده خواهد شد\&. بنابراین، برای نمایش جداگانه تمام انواع مختلف تطابق‌ها، می‌توان به سادگی تنظیم کرد: .PP .RS .nf \fBzstyle \&':completion:*' group\-name ''\fP .fi .RE .PP تمام تطابق‌هایی که هیچ نام گروهی برای آن‌ها تعریف نشده است در گروهی به نام \fB\-default\-\fP قرار خواهند گرفت\&. .PP برای نمایش نام گروه در خروجی، استایل \fBformat\fP (رجوع شود به آن) را ذیل برچسب \fBdescriptions\fP ببینید\&. .RE .TP \fBgroup\-order\fP این استایل مکمل استایل \fBgroup\-name\fP است تا ترتیب نمایش گروه‌های تعریف‌شده با آن استایل را مشخص کند (مقایسه کنید با \fBtag\-order\fP که تعیین می‌کند اصلاً کدام کامل‌سازی‌ها ظاهر شوند)\&. گروه‌های نام‌برده به ترتیب ارائه‌شده نشان داده می‌شوند؛ هر گروه دیگر به ترتیبی که توسط تابع کامل‌سازی تعریف شده است نشان داده خواهد شد\&. .RS .PP برای مثال، برای اینکه هنگام کامل‌سازی در موقعیت دستور، نام‌های دستورهای توکار، توابع پوسته و دستورهای خارجی به همین ترتیب ظاهر شوند: .PP .RS .nf \fBzstyle \&':completion:*:*:\-command\-:*:*' group\-order \e builtins functions commands\fP .fi .RE .RE .TP \fBgroups\fP فهرستی از نام‌های گروه‌های یونیکس (UNIX)\&. اگر این مقدار تنظیم نشده باشد، نام گروه‌ها از پایگاه داده YP یا فایل «\fB/etc/group\fP\&» گرفته می‌شود\&. .TP \fBhidden\fP اگر روی «true\&» تنظیم شود، تطابق‌های زمینه داده‌شده فهرست نخواهند شد، اگرچه هرگونه توضیحی برای تطابق‌ها که با استایل \fBformat\fP تنظیم شده باشد نمایش داده خواهد شد\&. اگر روی «\fBall\fP\&» تنظیم شود، حتی توضیحات نیز نمایش داده نخواهد شد\&. .RS .PP توجه داشته باشید که تطابق‌ها همچنان کامل خواهند شد؛ آن‌ها فقط در فهرست نشان داده نمی‌شوند\&. برای جلوگیری از در نظر گرفته شدن تطابق‌ها به عنوان کامل‌سازی‌های ممکن به طور کلی، می‌توان استایل \fBtag\-order\fP را همانطور که در ادامه شرح داده شده است تغییر داد\&. .RE .TP \fBhosts\fP فهرستی از نام‌های میزبان‌هایی که باید کامل شوند\&. اگر این مقدار تنظیم نشده باشد، نام میزبان‌ها از فایل «\fB/etc/hosts\fP\&» گرفته می‌شود\&. .TP \fBhosts\-ports\fP این استایل توسط دستورهایی استفاده می‌شود که به نام‌های میزبان و پورت‌های شبکه نیاز داشته یا آن‌ها را می‌پذیرند\&. رشته‌های موجود در این مقدار باید به شکل «\fIhost\fP\fB:\fP\fIport\fP\&» باشند\&. پورت‌های معتبر با حضور نام‌های میزبان مشخص می‌شوند؛ چندین پورت برای یک میزبان یکسان می‌توانند ظاهر شوند\&. .TP \fBignore\-line\fP این استایل برای هر برچسب معتبر برای کامل‌سازی فعلی بررسی می‌شود\&. اگر روی «true\&» تنظیم شود، هیچ‌یک از کلماتی که در حال حاضر روی خط هستند به عنوان کامل‌سازی‌های ممکن در نظر گرفته نخواهند شد\&. اگر روی «\fBcurrent\fP\&» تنظیم شود، کلمه‌ای که مکان‌نما روی آن قرار دارد به عنوان یک کامل‌سازی ممکن در نظر گرفته نخواهد شد\&. مقدار «\fBcurrent\-shown\fP\&» مشابه است اما تنها در صورتی اعمال می‌شود که فهرست کامل‌سازی‌ها در حال حاضر روی صفحه نمایش داده شده باشد\&. در نهایت، اگر این استایل روی «\fBother\fP\&» تنظیم شود، تمام کلمات روی خط به جز کلمه فعلی از کامل‌سازی‌های ممکن کنار گذاشته خواهند شد\&. .RS .PP مقادیر «\fBcurrent\fP\&» و «\fBcurrent\-shown\fP» تا حدی شبیه نقطه مقابل استایل \fBaccept\-exact\fP هستند: فقط رشته‌هایی با نویسه‌های جاافتاده کامل خواهند شد\&. .PP توجه داشته باشید که تقریباً به طور قطع نمی‌خواهید این استایل را برای یک زمینه عمومی مانند «\fB:completion:*\fP\&» روی «true» یا «\fBother\fP\&» تنظیم کنید\&. زیرا این کار از کامل‌سازی، برای مثال، چندباره گزینه‌ها جلوگیری می‌کند حتی اگر دستور مورد نظر گزینه را بیش از یک بار بپذیرد\&. .RE .TP \fBignore\-parents\fP این استایل بدون برچسب توسط تابعی که نام مسیرها را کامل می‌کند بررسی می‌شود تا تعیین کند که آیا نام دایرکتوری‌هایی که قبلاً در کلمه فعلی ذکر شده‌اند، یا نام دایرکتوری کاری فعلی نادیده گرفته شوند یا خیر\&. این مقدار باید شامل یک یا هر دو مورد از رشته‌های زیر باشد: .RS .PP .PD 0 .TP .PD \fBparent\fP نام هر دایرکتوری که مسیر آن قبلاً در کلمه روی خط وجود داشته باشد نادیده گرفته می‌شود\&. برای مثال، هنگام کامل‌سازی پس از \fBfoo/\&.\&./\fP، دایرکتوری \fBfoo\fP به عنوان یک کامل‌سازی معتبر در نظر گرفته نخواهد شد\&..TP \fBpwd\fP نام دایرکتوری کاری فعلی کامل نخواهد شد؛ بنابراین، برای نمونه، کامل‌سازی پس از \fB\&.\&./\fP از نام دایرکتوری فعلی استفاده نخواهد کرد\&. .PP علاوه بر این، مقدار می‌تواند شامل یک یا هر دو مورد از موارد زیر باشد: .PP .PD 0 .TP .PD \fB\&.\&.\fP نادیده گرفتن دایرکتوری‌های مشخص‌شده تنها زمانی که کلمه‌ی روی خط شامل زیررشته‌ی `\fB\&.\&./\fP\&' باشد\&. .TP \fBdirectory\fP نادیده گرفتن دایرکتوری‌های مشخص‌شده تنها هنگامی که نام دایرکتوری‌ها کامل می‌شوند، نه در هنگام کامل‌سازی نام فایل‌ها\&. .PP مقادیر مستثنی‌شده مشابه با مقادیر سبک \fBignored\-patterns\fP عمل می‌کنند، بنابراین می‌توان آن‌ها را با استفاده از کامل‌کننده‌ی \fB_ignored\fP دوباره به بررسی بازگرداند\&. .RE .TP \fBignored\-patterns\fP فهرستی از الگوها؛ هر مورد آزمایشی کامل‌سازی که با یکی از الگوها مطابقت داشته باشد از بررسی کنار گذاشته خواهد شد\&. کامل‌کننده‌ی \fB_ignored\fP می‌تواند در فهرست کامل‌کننده‌ها قرار گیرد تا موارد منطبقِ نادیده‌گرفته‌شده را بازیابی کند\&. این نگارشی با قابلیت پیکربندی بیشتر از پارامتر شل \fB$fignore\fP است\&. .RS .PP توجه داشته باشید که گزینه‌ی \fBEXTENDED_GLOB\fP در طول اجرای توابع کامل‌سازی تنظیم می‌شود، بنابراین نویسه‌های `\fB#\fP\&'، `\fB~\fP' و `\fB^\fP' در الگوها دارای معانی ویژه‌ای هستند\&. .RE .TP \fBinsert\fP این سبک توسط کامل‌کننده‌ی \fB_all_matches\fP به کار می‌رود تا تصمیم بگیرد آیا فهرست تمام تطابق‌ها بدون قید و شرط درج شود یا این که فهرست به عنوان یک تطابق دیگر اضافه گردد\&. .TP \fBinsert\-ids\fP هنگام کامل‌سازی شناسه‌های فرآیند (PID)، برای نمونه به عنوان آرگومان‌های دستورات توکار \fBkill\fP و \fBwait\fP، نام یک دستور ممکن است به شناسه‌ی فرآیند مناسب تبدیل شود\&. مشکلی زمانی رخ می‌دهد که نام فرآیند تایپ‌شده یکتا نباشد\&. به‌طور پیش‌فرض (یا اگر این سبک به صراحت روی `\fBmenu\fP\&' تنظیم شده باشد) نام بی‌درنگ به مجموعه‌ای از شناسه‌های ممکن تبدیل می‌شود، و کامل‌سازی منویی آغاز خواهد شد تا میان آن‌ها پیمایش کند\&. .RS .PP اگر مقدار سبک `\fBsingle\fP\&' باشد، شل تا زمانی که کاربر به اندازه‌ی کافی برای یکتا کردن دستور تایپ نکرده باشد منتظر می‌ماند و پس از آن نام را به شناسه تبدیل می‌کند؛ تلاش‌ها برای کامل‌سازی تا آن زمان ناموفق خواهد بود\&. اگر مقدار هر رشته‌ی دیگری باشد، کامل‌سازی منویی زمانی شروع خواهد شد که رشته‌ی تایپ‌شده توسط کاربر طولانی‌تر از پیشوند مشترک شناسه‌های مربوطه باشد\&. .RE .TP \fBinsert\-sections\fP این سبک با برچسب‌هایی به قالب `\fBmanuals\&.\fP\fIX\fP\&' هنگام کامل‌سازی نام صفحات راهنما استفاده می‌شود\&. اگر تنظیم شده باشد و \fIX\fP در نام برچسب با شماره‌ی بخش صفحه‌ای که در حال کامل شدن است مطابقت داشته باشد، شماره‌ی بخش همراه با نام صفحه درج می‌شود\&. برای نمونه، با در نظر گرفتن: .RS .PP .RS .nf \fBzstyle \&':completion:*:manuals\&.*' insert\-sections true\fP .fi .RE .PP دستور \fBman ssh_\fP ممکن است به \fBman 5 ssh_config\fP کامل شود\&. .PP مقدار همچنین می‌تواند روی یکی از `\fBprepend\fP\&' یا `\fBsuffix\fP' تنظیم شود\&. `\fBprepend\fP\&' مانند مثال بالا رفتاری مشابه `true' دارد، در حالی که `\fBsuffix\fP\&' عبارت \fBman ssh_\fP را به صورت \fBman ssh_config\&.5\fP کامل می‌کند\&. .PP این قابلیت به‌ویژه در ترکیب با \fBseparate\-sections\fP سودمند است، چرا که اطمینان می‌دهد صفحه‌ی درخواست‌شده از \fBman\fP با صفحه‌ی نمایش‌داده‌شده در فهرست کامل‌سازی مطابقت دارد، به‌ویژه زمانی که چندین صفحه با نام یکسان وجود دارند (مانند \fBprintf(1)\fP و \fBprintf(3)\fP)\&. .PP پیش‌فرض این سبک `false\&' است\&. .RE .TP \fBinsert\-tab\fP اگر این سبک روی `true\&' تنظیم شده باشد، سامانه‌ی کامل‌سازی هنگامی که هیچ نویسه‌ی غیرخالی در سمت چپ مکان‌نما وجود ندارد، به جای انجام کامل‌سازی، یک نویسه‌ی TAB درج خواهد کرد (با فرض این که برای شروع کامل‌سازی استفاده شده باشد)\&. اگر روی `false\&' تنظیم شود، کامل‌سازی حتی در آنجا نیز انجام خواهد شد\&. .RS .PP مقدار همچنین می‌تواند شامل زیررشته‌های `\fBpending\fP\&' یا `\fBpending=\fP\fIval\fP\&' باشد\&. در این حالت، هنگامی که ورودی پردازش‌نشده‌ای در انتظار باشد، نویسه‌ی تایپ‌شده به جای شروع کامل‌سازی درج خواهد شد\&. اگر یک \fIval\fP مشخص شده باشد، چنانچه دست‌کم به همان تعداد نویسه ورودی پردازش‌نشده وجود داشته باشد، کامل‌سازی انجام نخواهد شد\&. این امر معمولاً هنگام جای‌گذاری (paste) نویسه‌ها در ترمینال مفید است\&. با این حال توجه داشته باشید که این سازوکار به تنظیم صحیح پارامتر ویژه‌ی \fB$PENDING\fP از ماژول \fBzsh/zle\fP وابسته است که روی تمام پلتفرم‌ها تضمین نمی‌شود\&. .PP مقدار پیش‌فرض این سبک `true\&' است، مگر برای کامل‌سازی درون دستور توکار \fBvared\fP که مقدار آن `false\&' می‌باشد\&. .RE .TP \fBinsert\-unambiguous\fP این سبک توسط کامل‌کننده‌های \fB_match\fP و \fB_approximate\fP استفاده می‌شود\&. این کامل‌کننده‌ها اغلب همراه با کامل‌سازی منویی به کار می‌روند زیرا کلمه‌ی تایپ‌شده ممکن است شباهت اندکی به کامل‌سازی نهایی داشته باشد\&. با این حال، اگر این سبک `true\&' باشد، کامل‌کننده تنها زمانی کامل‌سازی منویی را آغاز می‌کند که نتواند هیچ رشته‌ی اولیه‌ی غیرمبهمی دست‌کم به طول رشته‌ی اولیه‌ی تایپ‌شده توسط کاربر پیدا کند\&. .RS .PP در مورد کامل‌کننده‌ی \fB_approximate\fP، فیلد completer در زمینه از قبل روی یکی از مقادیر \fBcorrect\-\fP\fInum\fP یا \fBapproximate\-\fP\fInum\fP تنظیم شده خواهد بود که در آن \fInum\fP تعداد خطاهای پذیرفته‌شده است\&. .PP در مورد کامل‌کننده‌ی \fB_match\fP، این سبک می‌تواند روی رشته‌ی `\fBpattern\fP\&' نیز تنظیم شود\&. در این صورت اگر الگو به صورت غیرمبهم مطابقت نداشته باشد، الگوی روی خط بدون تغییر باقی می‌ماند\&. .RE .TP \fBkeep\-prefix\fP این سبک توسط کامل‌کننده‌ی \fB_expand\fP استفاده می‌شود\&. اگر روی `true\&' باشد، کامل‌کننده سعی خواهد کرد پیشوندی شامل مدک (tilde) یا بسط پارامتر را حفظ کند\&. از این رو، برای نمونه، رشته‌ی `\fB~/f*\fP\&' به جای `\fB/home/user/foo\fP' به `\fB~/foo\fP\&' بسط می‌یابد\&. اگر این سبک روی `\fBchanged\fP\&' (پیش‌فرض) تنظیم شده باشد، پیشوند تنها در صورتی بدون تغییر باقی می‌ماند که تغییرات دیگری میان کلمات بسط‌یافته و کلمه‌ی اصلی از خط فرمان رخ داده باشد\&. هر مقدار دیگری بسط پیشوند را بدون قید و شرط اجباری می‌کند\&. .RS .PP رفتار \fB_expand\fP هنگامی که این سبک `true\&' باشد این است که در صورتی که یک بسط تکی با پیشوند بازیابی‌شده با مقدار اصلی یکسان باشد، موجب صرف‌نظر کردن \fB_expand\fP می‌شود؛ بنابراین هر کامل‌کننده‌ی باقی‌مانده‌ای ممکن است فراخوانی شود\&. .RE .TP \fBknown\-hosts\-files\fP این سبک باید شامل فهرستی از فایل‌ها برای جستجوی نام‌های میزبان و (در صورت تنظیم بودن سبک \fBuse\-ip\fP) آدرس‌های IP در قالبی سازگار با فایل‌های \fBknown_hosts\fP مربوط به ssh باشد\&. در صورت عدم تنظیم، از فایل‌های \fB/etc/ssh/ssh_known_hosts\fP و \fB~/\&.ssh/known_hosts\fP استفاده می‌شود\&. .TP \fBlast\-prompt\fP این شکل انعطاف‌پذیرتری از گزینه‌ی \fBALWAYS_LAST_PROMPT\fP است\&. اگر `true\&' باشد، سامانه‌ی کامل‌سازی پس از نمایش فهرست کامل‌سازی تلاش خواهد کرد تا مکان‌نما را به خط فرمان قبلی بازگرداند\&. این سبک ابتدا برای تمام برچسب‌های معتبر برای کامل‌سازی فعلی، و سپس برای برچسب \fBdefault\fP بررسی می‌شود\&. اگر این سبک برای تمام انواع تطابق `true\&' باشد، مکان‌نما به خط قبلی بازگردانده خواهد شد\&. توجه داشته باشید که برخلاف گزینه‌ی \fBALWAYS_LAST_PROMPT\fP، این سبک مستقل از آرگومان عددی عمل می‌کند\&. .TP \fBlist\fP این سبک توسط دستور مقیدشدنیِ \fB_history_complete_word\fP استفاده می‌شود\&. اگر روی `true\&' تنظیم شود تأثیری ندارد\&. اگر روی `false' تنظیم شود تطابق‌ها فهرست نخواهند شد\&. این سبک تنظیمات گزینه‌های کنترل‌کننده‌ی رفتار فهرست‌بندی، به‌ویژه \fBAUTO_LIST\fP را لغو می‌کند\&. زمینه همواره با `\fB:completion:history\-words\fP\&' آغاز می‌شود\&. .TP \fBlist\-colors\fP اگر ماژول \fBzsh/complist\fP بارگذاری شده باشد، این سبک می‌تواند برای تعیین مشخصات رنگ به کار رود\&. این سازوکار جایگزین استفاده از پارامترهای \fBZLS_COLORS\fP و \fBZLS_COLOURS\fP توصیف‌شده در بخش `The zsh/complist Module\&' در \fIzshmodules\fP(1) می‌شود، اما نحو (syntax) آن یکسان است\&. .RS .PP اگر این سبک برای برچسب \fBdefault\fP تنظیم شود، رشته‌های موجود در مقدار به عنوان مشخصاتی در نظر گرفته می‌شوند که باید در همه‌جا به کار روند\&. اگر برای برچسب‌های دیگر تنظیم شود، این مشخصات تنها برای تطابق‌هایی از نوع توصیف‌شده توسط برچسب استفاده می‌شوند\&. برای بهترین عملکرد، سبک \fBgroup\-name\fP باید روی یک رشته‌ی خالی تنظیم شود\&. .PP علاوه بر تنظیم سبک‌ها برای برچسب‌های خاص، همچنین امکان استفاده از نام‌های گروه که به صراحت توسط برچسب \fBgroup\-name\fP مشخص شده‌اند، همراه با نحو `\fB(group)\fP\&' مجاز توسط پارامترهای \fBZLS_COLORS\fP و \fBZLS_COLOURS\fP با استفاده‌ی ساده از برچسب \fBdefault\fP وجود دارد\&..PP امکان استفاده از هر مشخصات رنگی که از پیش برای نسخهٔ GNU دستور \fBls\fP تنظیم شده است وجود دارد: .PP .RS .nf \fBzstyle \&':completion:*:default' list\-colors \e ${(s\&.:\&.)LS_COLORS}\fP .fi .RE .PP رنگ‌های پیش‌فرض مشابه دستور GNU \fBls\fP هستند و با تنظیم این سبک روی یک رشتهٔ خالی (یعنی \fB\&''\fP) قابل دریافت می‌باشند\&. .RE .TP \fBlist\-dirs\-first\fP این مورد توسط تکمیل فایل استفاده می‌شود و با تنظیم خاصی از سبک \fBfile\-patterns\fP مطابقت دارد\&. در صورت تنظیم، دایرکتوری‌های پیش‌فرض برای تکمیل، به صورت جداگانه و پیش از تکمیل سایر فایل‌ها فهرست می‌شوند\&. .TP \fBlist\-grouped\fP اگر این سبک `true\&' (پیش‌فرض) باشد، سامانهٔ تکمیل سعی خواهد کرد با گروه‌بندی تطابق‌ها، برخی فهرست‌های تکمیل را فشرده‌تر کند\&. برای نمونه، گزینه‌های دستوراتی که دارای توضیحات یکسانی هستند (که هنگام تنظیم سبک \fBverbose\fP روی `true\&' نشان داده می‌شوند) به صورت یک مدخل واحد ظاهر خواهند شد\&. با این حال، می‌توان از انتخاب منو (menu selection) برای چرخش در میان تمام تطابق‌ها استفاده کرد\&. .TP \fBlist\-packed\fP این سبک برای هر برچسب معتبر در بافتار (context) جاری و همچنین برچسب \fBdefault\fP ارزیابی می‌شود\&. اگر روی `true\&' تنظیم شده باشد، تطابق‌های مربوطه به گونه‌ای در فهرست‌ها ظاهر می‌شوند که گویی گزینهٔ \fBLIST_PACKED\fP تنظیم شده است\&. اگر روی `false\&' تنظیم شود، به طور عادی فهرست می‌گردند\&. .TP \fBlist\-prompt\fP اگر این سبک برای برچسب \fBdefault\fP تنظیم شده باشد، فهرست‌های تکمیلی که در صفحه جا نمی‌شوند قابل پیمایش خواهند بود (توضیحات پودمان \fBzsh/complist\fP در \fIzshmodules\fP(1) را ببینید)\&. مقدار آن در صورتی که رشتهٔ خالی نباشد، پس از هر صفحهٔ کامل نمایش داده می‌شود و پوسته برای فشردن یک کلید اعلان خواهد داد؛ اگر این سبک روی رشتهٔ خالی تنظیم شود، یک اعلان پیش‌فرض استفاده خواهد شد\&. .RS .PP این مقدار می‌تواند شامل توالی‌های گریز زیر باشد: `\fB%l\fP\&' یا `\fB%L\fP'، که با شمارهٔ آخرین سطر نمایش‌یافته و تعداد کل سطرها جایگزین می‌شوند؛ `\fB%m\fP\&' یا `\fB%M\fP'، شمارهٔ آخرین تطابق نشان‌داده‌شده و تعداد کل تطابق‌ها؛ و `\fB%p\fP\&' و `\fB%P\fP'، عبارت `\fBTop\fP' در ابتدای فهرست، `\fBBottom\fP\&' در انتهای آن و در غیر این صورت موقعیت به صورت درصدی از طول کل نشان داده می‌شود\&. در هر مورد، شکل با حروف بزرگ با یک رشته با عرض ثابت که از سمت راست با فاصله‌ها پر شده جایگزین می‌شود، در حالی که شکل با حروف کوچک با رشته‌ای با عرض متغیر جایگزین خواهد شد\&. همانند سایر رشته‌های اعلان، توالی‌های گریز `\fB%S\fP\&'، `\fB%s\fP'، `\fB%B\fP'، `\fB%b\fP'، `\fB%U\fP'، `\fB%u\fP\&' برای ورود و خروج از حالت‌های نمایشی standout، bold و underline، و `\fB%F\fP\&'، `\fB%f\fP'، `\fB%K\fP'، `\fB%k\fP' برای تغییر رنگ پیش‌زمینه و پس‌زمینه نیز در دسترس هستند، به همراه شکل `\fB%{\fP\&.\&.\&.\fB%}\fP\&' برای محصور کردن توالی‌های گریزی که با عرض صفر (یا با یک آرگومان عددی، عرضی دیگر) نمایش داده می‌شوند\&. .PP پس از حذف این اعلان، متغیر \fBLISTPROMPT\fP باید unset شود تا حذف آن اثر بگذارد\&. .RE .TP \fBlist\-rows\-first\fP این سبک به همان شیوهٔ سبک \fBlist\-packed\fP بررسی می‌شود و تعیین می‌کند که آیا تطابق‌ها به شیوهٔ سطر-اول (rows\-first) فهرست‌بندی شوند، گویی گزینهٔ \fBLIST_ROWS_FIRST\fP تنظیم شده است، یا خیر\&. .TP \fBlist\-separator\fP مقدار این سبک در فهرست‌بندی تکمیل برای جداسازی رشتهٔ مورد نظر برای تکمیل از توضیحات، در صورت امکان (مثلاً هنگام تکمیل گزینه‌ها)، استفاده می‌شود\&. مقدار پیش‌فرض آن `\fB\-\fP\fB\-\fP\&' (دو خط تیره) است\&. .TP \fBlist\-suffixes\fP این سبک توسط تابعی که نام فایل‌ها را تکمیل می‌کند به کار می‌رود\&. اگر `true\&' باشد و تکمیل بر روی رشته‌ای شامل چندین جزء مسیر که به طور ناقص تایپ شده‌اند امتحان شود، تمام اجزای مبهم نمایش داده خواهند شد\&. در غیر این صورت، تکمیل در اولین جزء مبهم متوقف می‌شود\&. .TP \fBlocal\fP این مورد برای استفاده با توابعی است که URLهایی را تکمیل می‌کنند که فایل‌های متناظر آن‌ها مستقیماً از سامانهٔ فایل (file system) در دسترس هستند\&. مقدار آن باید شامل سه رشته باشد: یک نام میزبان (hostname)، مسیر صفحات وب پیش‌فرض برای سرور، و نام دایرکتوری مورد استفاده توسط کاربری که صفحات وب را در ناحیهٔ خانگی (home) خود قرار می‌دهد\&. .RS .PP برای نمونه: .PP .RS .nf \fBzstyle \&':completion:*' local toast \e /var/http/public/toast public_html\fP .fi .RE .PP تکمیل پس از `\fBhttp://toast/stuff/\fP\&' به دنبال فایل‌ها در دایرکتوری \fB/var/http/public/toast/stuff\fP می‌گردد، در حالی که تکمیل پس از `\fBhttp://toast/~yousir/\fP\&' به دنبال فایل‌ها در دایرکتوری \fB~yousir/public_html\fP خواهد گشت\&. .RE .TP \fBmail\-directory\fP در صورت تنظیم، zsh فرض می‌کند که فایل‌های mailbox در دایرکتوری مشخص‌شده قرار دارند\&. مقدار پیش‌فرض آن `\fB~/Mail\fP\&' است\&. .TP \fBmatch\-original\fP این سبک توسط تکمیل‌کنندهٔ \fB_match\fP استفاده می‌شود\&. اگر روی \fBonly\fP تنظیم شود، \fB_match\fP تلاش خواهد کرد تا تطابق‌ها را بدون درج یک `\fB*\fP\&' در موقعیت مکان‌نما تولید کند\&. اگر روی هر مقدار غیرخالی دیگری تنظیم شود، ابتدا سعی می‌کند تطابق‌ها را بدون درج `\fB*\fP\&' تولید کند و اگر نتیجه‌ای در بر نداشت، دوباره با درج `\fB*\fP\&' تلاش خواهد کرد\&. اگر تنظیم نشده باشد یا روی رشتهٔ خالی تنظیم شود، تطبیق فقط با درج `\fB*\fP\&' انجام خواهد شد\&. .TP \fBmatcher\fP این سبک برای هر برچسب معتبر در بافتار جاری به طور جداگانه بررسی می‌شود\&. مقدار آن پیش از هر مشخصات تطابقی ارائه‌شده توسط سبک \fBmatcher\-list\fP قرار می‌گیرد، بنابراین می‌تواند از طریق استفاده از یک مشخصهٔ \fBx:\fP آن‌ها را لغو (override) کند\&. مقدار باید به شکلی باشد که در بخش «Completion Matching Control» در \fIzshcompwid\fP(1) توصیف شده است\&. برای نمونه‌هایی از این مورد، توضیحات سبک \fBtag\-order\fP را ببینید\&. .RS .PP برای نکاتی در مقایسهٔ استفاده از این سبک و سبک \fBmatcher\-list\fP، به بخش ذیل توضیحات سبک \fBtag\-order\fP مراجعه کنید\&. .RE .TP \fBmatcher\-list\fP این سبک می‌تواند روی فهرستی از مشخصات تطابق تنظیم شود که قرار است در همه‌جا اعمال گردند\&. مشخصات تطابق در بخش «Completion Matching Control» در \fIzshcompwid\fP(1) توصیف شده‌اند\&. سامانهٔ تکمیل آن‌ها را یکی پس از دیگری برای هر تکمیل‌کنندهٔ انتخاب‌شده امتحان می‌کند\&. برای نمونه، برای اینکه ابتدا تکمیل ساده امتحان شود و در صورت عدم تولید تطابق، تکمیل غیرحساس به بزرگی و کوچکی حروف اعمال گردد: .RS .PP .RS .nf \fBzstyle \&':completion:*' matcher\-list '' 'm:{a\-zA\-Z}={A\-Za\-z}'\fP .fi .RE .PP به طور پیش‌فرض هر مشخصه جایگزین مورد قبلی می‌شود؛ با این حال، اگر پیشوند یک مشخصه \fB+\fP باشد، به فهرست موجود اضافه خواهد شد\&. بنابراین می‌توان بدون تکرار، مشخصاتی به مراتب عمومی‌تر ایجاد کرد: .PP .RS .nf \fBzstyle \&':completion:*' matcher\-list \e \&'' '+m:{a\-z}={A\-Z}' '+m:{A\-Z}={a\-z}'\fP .fi .RE .PP ایجاد مشخصات تطابق معتبر برای تکمیل‌کننده‌های خاص با استفاده از فیلد سوم بافتار امکان‌پذیر است\&. این مورد تنها برای تکمیل‌کننده‌هایی اعمال می‌شود که matcher\-list سراسری را لغو می‌کنند، که در زمان نگارش این مستند تنها شامل \fB_prefix\fP و \fB_ignored\fP است\&. برای نمونه، برای استفاده از تکمیل‌کننده‌های \fB_complete\fP و \fB_prefix\fP اما مجاز دانستن تکمیل غیرحساس به بزرگی و کوچکی حروف تنها با \fB_complete\fP: .PP .RS .nf \fBzstyle \&':completion:*' completer _complete _prefix zstyle \&':completion:*:complete:*:*:*' matcher\-list \e \&'' 'm:{a\-zA\-Z}={A\-Za\-z}'\fP .fi .RE .PP نام‌های تعریف‌شده توسط کاربر، همان‌طور که برای سبک \fBcompleter\fP توضیح داده شد، در دسترس هستند\&. این امر امکان امتحان کردن یک تکمیل‌کننده را برای چند بار، هر بار با مشخصات تطابق متفاوت، فراهم می‌سازد\&. برای نمونه، برای امتحان کردن تکمیل عادی بدون مشخصات تطابق، سپس تکمیل عادی با تطبیق غیرحساس به بزرگی و کوچکی حروف، سپس تصحیح، و در پایان تکمیل کلمه به صورت جزئی (partial\-word): .PP .RS.nf \fBzstyle \&':completion:*' completer \e _complete _correct _complete:foo zstyle \&':completion:*:complete:*:*:*' matcher\-list \e \&'' 'm:{a\-zA\-Z}={A\-Za\-z}' zstyle \&':completion:*:foo:*:*:*' matcher\-list \e \&'m:{a\-zA\-Z}={A\-Za\-z} r:|[\-_\&./]=* r:|=*'\fP .fi .RE .PP اگر این سبک در هر زمینه‌ای تنظیم نشده باشد، هیچ مشخصهٔ تطبیقی اعمال نمی‌گردد\&. همچنین توجه داشته باشید که برخی از کامل‌کننده‌ها مانند \fB_correct\fP و \fB_approximate\fP اصلاً از مشخصه‌های تطبیق استفاده نمی‌کنند، هرچند که این کامل‌کننده‌ها حتی اگر \fBmatcher\-list\fP شامل بیش از یک عنصر باشد، تنها یک‌بار فراخوانی خواهند شد\&. .PP در مواردی که مشخصه‌های چندگانه مفید هستند، توجه داشته باشید که کامل‌سازی به صورت \fIکامل\fP برای هر عنصر از \fBmatcher\-list\fP انجام می‌شود، که می‌تواند به‌سرعت کارایی پوسته را کاهش دهد\&. به عنوان یک قاعدهٔ سرانگشتی، یک تا سه رشته کارایی قابل قبولی ارائه می‌دهند\&. از سوی دیگر، قرار دادن چندین مقدارِ جداشده با فاصله درون یک رشته، تأثیر محسوسی بر کارایی ندارد\&. .PP اگر تطبیق‌دهندهٔ فعلی وجود نداشته باشد یا خالی باشد، و گزینهٔ \fBNO_CASE_GLOB\fP فعال باشد، تطبیق برای فایل‌ها در هر حال بدون حساسیت به بزرگی و کوچکی حروف انجام می‌شود\&. با این حال، هر تطبیق‌دهنده‌ای در صورت نیاز باید تطبیق غیرحساس به بزرگی و کوچکی حروف را به صراحت مشخص کند\&. .PP برای نکاتی در زمینهٔ مقایسهٔ استفاده از این سبک و سبک \fBmatcher\fP، به توضیحاتِ سبک \fBtag\-order\fP مراجعه کنید\&. .RE .TP \fBmax\-errors\fP این سبک توسط توابع کامل‌کنندهٔ \fB_approximate\fP و \fB_correct\fP برای تعیین حداکثر تعداد خطاهای مجاز به کار می‌رود\&. کامل‌کننده تلاش خواهد کرد تا کامل‌سازی‌ها را ابتدا با اجازه دادن به یک خطا، سپس دو خطا و به همین ترتیب تولید کند تا زمانی که یک یا چند تطبیق پیدا شود یا به حداکثر تعداد خطاهای تعیین‌شده توسط این سبک برسد\&. .RS .PP اگر مقدار این سبک شامل رشتهٔ `\fBnumeric\fP\&' باشد، تابع کامل‌کننده هر آرگومان عددی را به عنوان حداکثر تعداد خطاهای مجاز در نظر می‌گیرد\&. برای نمونه با: .PP .RS .nf \fBzstyle \&':completion:*:approximate:::' max\-errors 2 numeric\fP .fi .RE .PP در صورتی که هیچ آرگومان عددی داده نشود دو خطا مجاز است، اما با یک آرگومان عددی شش (مانند `\fBESC\-6 TAB\fP\&')، تا شش خطا پذیرفته می‌شود\&. بنابراین با مقدار `\fB0 numeric\fP\&'، هیچ کامل‌سازی اصلاحی انجام نخواهد شد مگر اینکه یک آرگومان عددی ارائه شود\&. .PP اگر مقدار شامل رشتهٔ `\fBnot\-numeric\fP\&' باشد، کامل‌کننده هنگام دریافت آرگومان عددی تلاش \fIنخواهد کرد\fP که کامل‌سازی‌های تصحیح‌شده تولید کند؛ بنابراین در این حالت عددِ تعیین‌شده باید بزرگ‌تر از صفر باشد\&. به عنوان مثال، `\fB2 not\-numeric\fP\&' مشخص می‌کند که کامل‌سازی اصلاحی معمولاً با دو خطا انجام می‌شود، اما اگر آرگومان عددی داده شود، کامل‌سازی اصلاحی انجام نخواهد گرفت\&. .PP مقدار پیش‌فرض برای این سبک `\fB2 numeric\fP\&' است\&. .RE .TP \fBmax\-matches\-width\fP این سبک برای تعیین موازنه بین عرض نمایشِ اختصاص‌یافته به تطبیق‌ها و عرض نمایشِ توضیحات آن‌ها در زمان فعال بودن سبک \fBverbose\fP به کار می‌رود\&. این مقدار، تعداد ستون‌های نمایش را برای رزرو کردن به تطبیق‌ها مشخص می‌کند\&. مقدار پیش‌فرض نصف عرض صفحه نمایش است\&. .RS .PP این ویژگی بیشترین تأثیر را زمانی دارد که چندین تطبیق دارای توضیحات یکسان بوده و به همین دلیل با یکدیگر گروه‌بندی شوند\&. افزایش این مقدار امکان گروه‌بندی تطبیق‌های بیشتری را فراهم می‌کند؛ کاهش آن نیز باعث می‌شود بخش بیشتری از توضیحات قابل مشاهده باشد\&. .RE .TP \fBmenu\fP اگر این مقدار در زمینهٔ هر یک از برچسب‌های تعریف‌شده برای کامل‌سازی فعلی برابر با `true\&' باشد، کامل‌سازی منویی (menu completion) استفاده خواهد شد\&. مقدار مشخص‌شده برای یک برچسب خاص بر مقدار برچسب `\fBdefault\fP\&' اولویت خواهد داشت\&. .RS .PP اگر هیچ‌یک از مقادیر یافت‌شده به این روش `true\&' نباشد اما حداقل یکی روی `\fBauto\fP\&' تنظیم شده باشد، پوسته طوری رفتار می‌کند که گویی گزینهٔ \fBAUTO_MENU\fP تنظیم شده است\&. .PP اگر یکی از مقادیر به صراحت روی `false\&' تنظیم شده باشد، کامل‌سازی منویی صراحتاً غیرفعال خواهد شد و بر گزینهٔ \fBMENU_COMPLETE\fP و سایر تنظیمات اولویت خواهد داشت\&. .PP در قالب `\fByes=\fP\fInum\fP\&'، که در آن `\fByes\fP' می‌تواند هر یک از مقادیر معادل `true\&' باشد (`\fByes\fP'، `\fBtrue\fP'، `\fBon\fP' و `\fB1\fP')، چنانچه حداقل به تعداد \fInum\fP تطبیق وجود داشته باشد، کامل‌سازی منویی فعال خواهد شد\&. در قالب `\fByes=long\fP\&'، اگر فهرست در صفحه جا نشود، کامل‌سازی منویی فعال می‌شود\&. این مقدار در حالتی که ویجت به طور معمول تنها کامل‌سازی‌ها را فهرست می‌کند، کامل‌سازی منویی را فعال نمی‌سازد، اما در آن حالت می‌توان کامل‌سازی منویی را با مقدار `\fByes=long\-list\fP\&' فعال کرد (معمولاً مقدار `\fBselect=long\-list\fP\&' که جلوتر شرح داده شده مفیدتر است چرا که کنترل پیمایش را فراهم می‌کند)\&. .PP به طور مشابه، با هر یک از مقادیر معادل `false\&' (مانند `\fBno=10\fP')، در صورتی که تعداد تطبیق‌ها برابر با \fInum\fP یا بیشتر باشد، از کامل‌سازی منویی استفاده \fIنخواهد شد\fP\&. .PP مقدار این ویجت همچنین انتخاب منویی را، همان‌گونه که توسط پودمان \fBzsh/complist\fP پیاده‌سازی شده، کنترل می‌کند\&. مقادیر زیر می‌توانند در کنار یا به جای مقادیر بالا قرار گیرند\&. .PP اگر مقدار شامل رشتهٔ `\fBselect\fP\&' باشد، انتخاب منویی بدون قید و شرط آغاز خواهد شد\&. .PP در قالب `\fBselect=\fP\fInum\fP\&'، انتخاب منویی تنها زمانی آغاز می‌شود که حداقل \fInum\fP تطبیق وجود داشته باشد\&. اگر مقادیر مربوط به بیش از یک برچسب حاوی یک عدد باشند، کوچک‌ترین عدد اعمال می‌شود\&. .PP انتخاب منویی را می‌توان با تعیین مقداری حاوی رشتهٔ `\fBno\-select\fP\&' به صورت صریح غیرفعال کرد\&. .PP همچنین می‌توان با استفاده از مقدار `\fBselect=long\fP\&'، انتخاب منویی را تنها در صورتی که فهرست تطبیق‌ها در صفحه جا نشود آغاز کرد\&. برای آغاز انتخاب منویی حتی زمانی که ویجت فعلی تنها عمل فهرست‌کردن را انجام می‌دهد، از مقدار `\fBselect=long\-list\fP\&' استفاده کنید\&. .PP برای فعال کردن کامل‌سازی منویی یا انتخاب منویی در صورتی که تعداد مشخصی تطبیق وجود داشته باشد \fIیا\fP فهرست تطبیق‌ها در صفحه جا نشود، هر دو مقدار `\fByes=\fP\&' و `\fBselect=\fP' می‌توانند دو بار مشخص شوند؛ یک بار با یک عدد و بار دیگر با `\fBlong\fP\&' یا `\fBlong\-list\fP'\&. .PP در نهایت، امکان فعال‌سازی دو حالت خاص از انتخاب منویی وجود دارد\&. کلمهٔ `\fBinteractive\fP\&' در این مقدار باعث می‌شود تا بلافاصله پس از آغاز انتخاب منویی، حالت تعاملی فعال گردد؛ برای توضیحات مربوط به حالت تعاملی به شرح پودمان \fBzsh/complist\fP در \fIzshmodules\fP(1) مراجعه کنید\&. گنجاندن رشتهٔ `\fBsearch\fP\&' همین رفتار را برای حالت جستجوی افزایشی فراهم می‌کند\&. برای انتخاب جستجوی افزایشی رو به عقب، رشتهٔ `\fBsearch\-backward\fP\&' را اضافه کنید\&. .RE .TP \fBmuttrc\fP در صورت تنظیم، مسیر فایل پیکربندی mutt را تعیین می‌کند\&. مقدار پیش‌فرض آن `\fB~/\&.muttrc\fP\&' است\&. .TP \fBnumbers\fP این سبک به همراه برچسب \fBjobs\fP به کار می‌رود\&. اگر برابر با `true\&' باشد، پوسته به جای کوتاه‌ترین پیشوند غیرمبهم از متن دستور کار (job)، شماره‌های کار را کامل می‌کند\&. اگر مقدار یک عدد باشد، شماره‌های کار تنها زمانی استفاده می‌شوند که برای رفع ابهام، به همان تعداد کلمه از شرح کارها نیاز باشد\&. برای نمونه، اگر مقدار `\fB1\fP\&' باشد، رشته‌ها تنها زمانی به کار خواهند رفت که همهٔ کارها در کلمهٔ نخست خط فرمان خود متفاوت باشند\&. .TP \fBold\-list\fP این سبک توسط کامل‌کنندهٔ \fB_oldlist\fP به کار می‌رود\&. اگر روی `\fBalways\fP\&' تنظیم شده باشد، ویجت‌های استانداردی که کار فهرست‌کردن را انجام می‌دهند، فهرست فعلی تطبیق‌ها را صرف‌نظر از شیوهٔ تولید آن‌ها حفظ خواهند کرد؛ این رفتار را می‌توان با مقدار `\fBnever\fP\&' صراحتاً غیرفعال کرد که عملکرد بدون کامل‌کنندهٔ \fB_oldlist\fP را ارائه می‌دهد\&. اگر سبک تنظیم نشده باشد، یا هر مقدار دیگری داشته باشد، فهرست موجود از کامل‌سازی‌ها در صورتی که پیش‌تر نمایش داده نشده باشد نشان داده خواهد شد؛ در غیر این صورت، فهرست کامل‌سازی استاندارد تولید می‌شود؛ این رفتار پیش‌فرضِ \fB_oldlist\fP است\&. با این حال، اگر یک فهرست قدیمی وجود داشته باشد و این سبک حاوی نام تابع کامل‌کننده‌ای باشد که فهرست را تولید کرده است، فهرست قدیمی حتی اگر توسط ویجتی که کار فهرست‌کردن را انجام نمی‌دهد تولید شده باشد، مجدداً استفاده خواهد شد\&. .RS .PP برای نمونه، فرض کنید \fB^Xc\fP را تایپ می‌کنید تا از ویجت \fB_correct_word\fP استفاده کنید، که فهرستی از تصحیحات را برای کلمهٔ زیر مکان‌نما تولید می‌کند\&. به طور معمول، فشردن \fB^D\fP یک فهرست استاندارد از کامل‌سازی‌ها برای کلمهٔ موجود در خط فرمان تولید کرده و آن را نمایش می‌دهد\&. با \fB_oldlist\fP، در عوض همان فهرست تصحیحاتی که از قبل تولید شده است نشان داده خواهد شد\&. .PP به عنوان نمونه‌ای دیگر کامل‌کنندهٔ \fB_match\fP را در نظر بگیرید: با تنظیم سبک \fBinsert\-unambiguous\fP روی `true\&'، این کامل‌کننده در صورت وجود تنها یک رشتهٔ پیشوند مشترک را درج می‌کند\&. با این حال، این عمل ممکن است بخش‌هایی از الگوی اصلی را حذف کند، به طوری که کامل‌سازی‌های بعدی بتوانند تطبیق‌های بیشتری نسبت به تلاش نخست تولید نمایند\&. با استفاده از کامل‌کنندهٔ \fB_oldlist\fP و تنظیم این سبک روی \fB_match\fP، فهرست تطبیق‌های تولیدشده در تلاش نخست دوباره مورد استفاده قرار خواهد گرفت\&. .RE.TP \fBold\-matches\fP این سبک توسط کامل‌کنندهٔ \fB_all_matches\fP استفاده می‌شود تا تصمیم بگیرد که آیا در صورت وجود یک فهرست قدیمی از تطابق‌ها، باید از آن استفاده شود یا خیر\&. این ویژگی با یکی از مقادیر «true» یا با رشتهٔ «\fBonly\fP» انتخاب می‌شود\&. اگر مقدار آن «\fBonly\fP» باشد، \fB_all_matches\fP فقط از یک فهرست قدیمی استفاده خواهد کرد و هیچ تأثیری بر فهرست تطابق‌هایی که در حال حاضر تولید می‌شوند نخواهد داشت\&. .RS .PP اگر این سبک تنظیم شده باشد، معمولاً فراخوانی نامشروط کامل‌کنندهٔ \fB_all_matches\fP توصیه نمی‌شود\&. یک کاربرد ممکن این است که این سبک یا سبک \fBcompleter\fP همراه با گزینهٔ \fB\-e\fP در دستور \fBzstyle\fP تعریف شود تا سبک به صورت شرطی اعمال گردد\&. .RE .TP \fBold\-menu\fP این سبک توسط کامل‌کنندهٔ \fB_oldlist\fP استفاده می‌شود\&. این سبک نحوهٔ رفتار تکمیل منویی (menu completion) را زمانی که یک تکمیل قبلاً درج شده و کاربر کلید استاندارد تکمیل مانند \fBTAB\fP را می‌فشارد، کنترل می‌کند\&. رفتار پیش‌فرض \fB_oldlist\fP این است که تکمیل منویی همیشه با فهرست موجود از تکمیل‌ها ادامه می‌یابد\&. با این حال، اگر این سبک روی «false» تنظیم شود، در صورتی که فهرست قدیمی توسط یک دستور تکمیلِ متفاوت تولید شده باشد، یک تکمیل جدید آغاز می‌شود؛ این همان رفتار پوسته بدون کامل‌کنندهٔ \fB_oldlist\fP است\&. .RS .PP برای مثال، فرض کنید \fB^Xc\fP را برای تولید فهرستی از اصلاحات وارد می‌کنید و تکمیل منویی به یکی از روش‌های معمول آغاز می‌شود\&. در حالت عادی، یا با تنظیم این سبک روی «false»، فشردن \fBTAB\fP در این مرحله تلاش برای تکمیل خط به همان شکلی که اکنون ظاهر شده است را آغاز می‌کند\&. با \fB_oldlist\fP، به جای آن، چرخش در میان فهرست اصلاحات ادامه می‌یابد\&. .RE .TP \fBoriginal\fP این سبک توسط کامل‌کننده‌های \fB_approximate\fP و \fB_correct\fP استفاده می‌شود تا مشخص شود آیا رشتهٔ اصلی باید به عنوان یک تکمیل ممکن اضافه شود یا خیر\&. به طور معمول، این کار تنها در صورتی انجام می‌شود که حداقل دو اصلاح ممکن وجود داشته باشد، اما اگر این سبک روی «true» تنظیم شود، همیشه افزوده می‌شود\&. توجه داشته باشید که این سبک با قرار گرفتن فیلد کامل‌کننده در نام زمینه (context) به صورت \fBcorrect\-\fP\fInum\fP یا \fBapproximate\-\fP\fInum\fP بررسی خواهد شد، که در آن \fInum\fP تعداد خطاهای پذیرفته‌شده است\&. .TP \fBpackageset\fP این سبک هنگام تکمیل آرگومان‌های برنامهٔ «\fBdpkg\fP» دبیان استفاده می‌شود\&. این سبک حاوی یک جایگزینی برای مجموعه بسته‌های پیش‌فرض در یک زمینهٔ مشخص است\&. برای مثال: .RS .PP .RS .nf \fBzstyle \&':completion:*:complete:dpkg:option\-\-status\-1:*' \e packageset avail\fP .fi .RE .PP باعث می‌شود به جای صرفاً بسته‌های نصب‌شده، بسته‌های موجود (available) نیز برای «\fBdpkg \-\fP\fB\-status\fP» تکمیل شوند\&. .RE .TP \fBpath\fP تابعی که نام رنگ‌ها را تکمیل می‌کند، از این سبک با برچسب \fBcolors\fP استفاده می‌کند\&. مقدار آن باید مسیر فایلی شامل نام رنگ‌ها در قالب فایل \fBrgb\&.txt\fP مربوط به X11 باشد\&. اگر سبک تنظیم نشده باشد اما این فایل در یکی از مکان‌های استاندارد مختلف یافت شود، به عنوان پیش‌فرض استفاده خواهد شد\&. .TP \fBpath\-completion\fP این سبک توسط فرایند تکمیل نام فایل استفاده می‌شود\&. به طور پیش‌فرض، تکمیل نام فایل تمام مؤلفه‌های یک مسیر را بررسی می‌کند تا ببیند آیا تکمیلی برای آن مؤلفه وجود دارد یا خیر\&. برای مثال، \fB/u/b/z\fP می‌تواند به \fB/usr/bin/zsh\fP تکمیل شود\&. تنظیم صریح این سبک روی «false» این رفتار را برای مؤلفه‌های مسیر تا قبل از \fB/\fPِ پیش از مکان‌نما بازمی‌دارد؛ این امر تنظیمات \fBaccept\-exact\-dirs\fP را لغو می‌کند\&. .RS .PP حتی با تنظیم این سبک روی «false»، همچنان با فعال کردن گزینهٔ \fBCOMPLETE_IN_WORD\fP و برگرداندن مکان‌نما به مؤلفهٔ نخست در مسیری که قرار است تکمیل شود، امکان تکمیل چند مسیره وجود دارد\&. برای مثال، اگر مکان‌نما بعد از \fB/u\fP باشد، \fB/u/b/z\fP می‌تواند به \fB/usr/bin/zsh\fP تکمیل شود\&. .RE .TP \fBpine\-directory\fP در صورت تنظیم، دایرکتوری حاوی فایل‌های صندوق پستی PINE را مشخص می‌کند\&. هیچ پیش‌فرضی وجود ندارد، زیرا جستجوی بازگشتی در این دایرکتوری برای کسانی که از PINE استفاده نمی‌کنند نامطلوب است\&. .TP \fBports\fP فهرستی از نام‌های سرویس‌های اینترنتی (پورت‌های شبکه) برای تکمیل\&. اگر تنظیم نشده باشد، نام سرویس‌ها از فایل «\fB/etc/services\fP» گرفته می‌شود\&. .TP \fBprefix\-hidden\fP این سبک برای تکمیل‌های خاصی که پیشوند مشترک دارند استفاده می‌شود، مانند گزینه‌های دستور که با خط تیره شروع می‌شوند\&. اگر مقدار آن «true» باشد، پیشوند در فهرست تطابق‌ها نمایش داده نخواهد شد\&. .RS .PP مقدار پیش‌فرض این سبک «false» است\&. .RE .TP \fBprefix\-needed\fP این سبک نیز برای تطابق‌هایی با پیشوند مشترک کاربرد دارد\&. اگر روی «true» تنظیم شود، این پیشوند مشترک باید توسط کاربر تایپ شود تا تطابق‌ها ایجاد شوند\&. .RS .PP این سبک برای برچسب‌های تکمیل \fBoptions\fP، \fBsignals\fP، \fBjobs\fP، \fBfunctions\fP و \fBparameters\fP قابل اعمال است\&. .PP برای گزینه‌های دستور، این بدان معناست که کاراکتر ابتدایی «\fB\-\fP»، «\fB+\fP» یا «\fB\-\fP\fB\-\fP» باید به صراحت تایپ شود تا نام گزینه‌ها تکمیل شود\&. .PP برای سیگنال‌ها، وارد کردن «\fB\-\fP» در ابتدا برای تکمیل نام سیگنال الزامی است\&. .PP برای کارها (jobs)، وارد کردن «\fB%\fP» در ابتدا برای تکمیل نام کار الزامی است\&. .PP برای نام‌های توابع و پارامترها، یک «\fB_\fP» یا «\fB\&.\fP» ابتدایی لازم است تا نام‌های تابع یا پارامتری که با این کاراکترها آغاز می‌شوند تکمیل گردند\&. .PP مقدار پیش‌فرض این سبک برای تکمیل‌های \fBfunction\fP و \fBparameter\fP برابر «false»، و در غیر این صورت «true» است\&. .RE .TP \fBpreserve\-prefix\fP این سبک هنگام تکمیل نام مسیرها استفاده می‌شود\&. مقدار آن باید الگویی منطبق بر پیشوند ابتدایی کلمهٔ در حال تکمیل باشد که باید تحت هر شرایطی دست‌نخورده باقی بماند\&. برای مثال، در برخی سیستم‌های Unices یک «\fB//\fP» (اسلش دوتایی) ابتدایی معنای خاصی دارد؛ تنظیم این سبک روی رشتهٔ «\fB//\fP» آن را حفظ خواهد کرد\&. به عنوان مثالی دیگر، تنظیم این سبک روی «\fB?:/\fP» در محیط Cygwin اجازه می‌دهد تکمیل پس از «\fBa:/\&.\&.\&.\fP» و موارد مشابه انجام شود\&. .TP \fBrange\fP این سبک توسط کامل‌کنندهٔ \fB_history\fP و دستور قابل اتصالِ \fB_history_complete_word\fP استفاده می‌شود تا تصمیم گرفته شود کدام کلمات باید تکمیل شوند\&. .RS .PP اگر یک عدد منفرد باشد، تنها آخرین \fIN\fP کلمه از تاریخچه تکمیل خواهند شد\&. .PP اگر دامنه‌ای به شکل «\fImax\fP\fB:\fP\fIslice\fP» باشد، آخرین \fIslice\fP کلمه تکمیل خواهند شد؛ سپس اگر تطابقی حاصل نشد، \fIslice\fP کلمهٔ قبل از آن‌ها امتحان می‌شوند و به همین ترتیب ادامه می‌یابد\&. این فرایند زمانی متوقف می‌شود که حداقل یک تطابق پیدا شود، یا به اندازهٔ \fImax\fP کلمه بررسی شده باشد\&. .PP حالت پیش‌فرض این است که تمام کلمات تاریخچه به صورت یکجا تکمیل شوند\&. .RE .TP \fBrecursive\-files\fP اگر این سبک تنظیم شود، مقدار آن آرایه‌ای از الگوها است که با «\fB$PWD/\fP» مقایسه می‌شوند: به اسلش انتهایی توجه کنید که اجازه می‌دهد دایرکتوری‌ها در الگو با قرار گرفتن اسلش در هر دو طرف، بدون ابهام مرزبندی شوند\&. اگر تکمیل فایل معمولی با شکست مواجه شود و کلمهٔ موجود در خط فرمان هنوز بخش دایرکتوری در نام خود نداشته باشد، سبک با استفاده از همان برچسبی که برای تکمیل انجام‌شده استفاده شد فراخوانی می‌شود، سپس عناصر آن به نوبت در برابر \fB$PWD/\fP آزمایش می‌شوند\&. اگر یکی از آن‌ها مطابقت داشته باشد، پوسته تکمیل را با پیشوند کردن کلمهٔ روی خط فرمان با هر دایرکتوری در بسط \fB**/*(/)\fP به نوبت دوباره آزمایش می‌کند\&. معمولاً عناصر این سبک برای محدود کردن تعداد دایرکتوری‌های ذیل دایرکتوری فعلی به مقداری معقول تنظیم می‌شوند، برای مثال «\fB*/\&.git/*\fP»\&. .RS .PP برای مثال: .PP .RS .nf \fBzstyle \&':completion:*' recursive\-files '*/zsh/*'\fP .fi .RE .PP اگر دایرکتوری جاری \fB/home/pws/zsh/Src\fP باشد، آنگاه عبارت \fBzle_tr\fP می‌تواند به \fBZle/zle_tricky\&.c\fP تکمیل شود\&. .RE.TP \fBregular\fP این سبک توسط کامل‌کننده و دستور قابل انتساب \fB_expand_alias\fP استفاده می‌شود\&. اگر روی `true\&' (پیش‌فرض) تنظیم شود، نام‌های مستعار معمولی تنها در موقعیت دستور گسترش می‌یابند\&. اگر روی `false\&' تنظیم شود، نام‌های مستعار معمولی هرگز گسترش نخواهند یافت\&. اگر روی `\fBalways\fP\&' تنظیم شود، نام‌های مستعار معمولی حتی اگر در موقعیت دستور نباشند نیز گسترش می‌یابند\&. .TP \fBrehash\fP اگر این سبک هنگام کامل‌کردن دستورهای خارجی تنظیم شده باشد، فهرست داخلی (هش) دستورها برای هر جستجو با اجرای دستور \fBrehash\fP به‌روزرسانی می‌شود\&. این کار با افت سرعت همراه است که احتمالاً تنها زمانی محسوس خواهد بود که دایرکتوری‌های موجود در مسیر دسترسی کندی به فایل داشته باشند\&. .TP \fBremote\-access\fP اگر روی `false\&' تنظیم شود، از برقراری اتصالات اینترنتی توسط برخی دستورهای خاص برای دریافت اطلاعات از راه دور جلوگیری خواهد شد\&. این شامل کامل‌سازی برای دستور \fBCVS\fP نیز می‌شود\&. .RS .PP همواره این امکان وجود ندارد که مشخص شود آیا اتصالات واقعاً به یک پایگاه راه دور هستند یا خیر، بنابراین ممکن است از برخی اتصالات به‌طور غیرضروری جلوگیری شود\&. .RE .TP \fBremove\-all\-dups\fP دستور قابل انتساب \fB_history_complete_word\fP و کامل‌کنندهٔ \fB_history\fP از این سبک برای تصمیم‌گیری در این مورد استفاده می‌کنند که آیا همهٔ تطابق‌های تکراری باید حذف شوند یا فقط موارد تکراری متوالی\&. .TP \fBselect\-prompt\fP اگر این سبک برای برچسب \fBdefault\fP تنظیم شده باشد، مقدار آن در طول انتخاب از منو (به سبک \fBmenu\fP در بالا مراجعه کنید) زمانی که فهرست کامل‌سازی به‌طور کامل در صفحه جا نمی‌شود، نمایش داده خواهد شد\&. همان نویسه‌های گریز مربوط به سبک \fBlist\-prompt\fP در اینجا نیز معتبر هستند، جز اینکه شماره‌ها به تطابق یا خطی که نشانگر روی آن قرار دارد اشاره می‌کنند\&. وقتی مقدار برابر با یک رشتهٔ خالی باشد، از یک اعلان پیش‌فرض استفاده می‌شود\&. .TP \fBselect\-scroll\fP این سبک برای برچسب \fBdefault\fP بررسی می‌شود و تعیین می‌کند که یک فهرست کامل‌سازی هنگام انتخاب از منو (به سبک \fBmenu\fP در بالا مراجعه کنید) در صورتی که فهرست به‌طور کامل در صفحه جا نشود، چگونه پیمایش شود\&. اگر مقدار `\fB0\fP\&' (صفر) باشد، فهرست به‌اندازهٔ نصف صفحه پیمایش می‌شود؛ اگر یک عدد صحیح مثبت باشد، فهرست به تعداد خطوط داده‌شده پیمایش می‌شود؛ اگر یک عدد منفی باشد، فهرست به‌اندازهٔ یک صفحهٔ کامل منهای مقدار مطلق تعداد خطوط داده‌شده پیمایش خواهد شد\&. حالت پیش‌فرض، پیمایش خط‌به‌خط است\&. .TP \fBseparate\-sections\fP این سبک با برچسب \fBmanuals\fP هنگام کامل‌کردن نام صفحات راهنما استفاده می‌شود\&. اگر روی `true\&' باشد، مدخل‌های بخش‌های مختلف به‌طور جداگانه با استفاده از نام‌های برچسبی به شکل `\fBmanuals\&.\fP\fIX\fP\&' اضافه می‌شوند، که در آن \fIX\fP شمارهٔ بخش است\&. هنگامی که سبک \fBgroup\-name\fP نیز فعال باشد، صفحات بخش‌های مختلف به‌طور جداگانه نمایش داده خواهند شد\&. این سبک همچنین به‌طور مشابه با سبک \fBwords\fP هنگام کامل‌کردن کلمات برای دستور dict استفاده می‌شود\&. این کار اجازه می‌دهد کلمات از پایگاه‌های دادهٔ لغت‌نامهٔ مختلف به‌طور جداگانه افزوده شوند\&. همچنین ببینید: \fBinsert\-sections\fP\&. .RS .PP مقدار پیش‌فرض برای این سبک `false\&' است\&. .RE .TP \fBshow\-ambiguity\fP اگر ماژول \fBzsh/complist\fP بارگذاری شده باشد، از این سبک می‌توان برای برجسته‌سازی نخستین نویسهٔ مبهم در فهرست‌های کامل‌سازی استفاده کرد\&. مقدار آن یا مشخصهٔ رنگی مانند موارد پشتیبانی‌شده توسط سبک \fBlist\-colors\fP است یا با مقدار `true\&'، حالت پیش‌فرض خط زیرین انتخاب می‌شود\&. برجسته‌سازی تنها در صورتی اعمال می‌شود که رشته‌های نمایشی کامل‌سازی با تطابق‌های واقعی مطابقت داشته باشند\&. .TP \fBshow\-completer\fP هر زمان که یک کامل‌کنندهٔ جدید آزمایش شود، این سبک بررسی می‌شود\&. اگر روی `true\&' باشد، سامانهٔ کامل‌سازی یک پیام پیشرفت در ناحیهٔ فهرست نشان می‌دهد که مشخص می‌کند چه کامل‌کننده‌ای در حال آزمایش است\&. با یافتن کامل‌سازی‌ها، این پیام با هر خروجی جدید بازنویسی می‌شود و پس از پایان کامل‌سازی حذف خواهد شد\&. .TP \fBsingle\-ignored\fP این سبک توسط کامل‌کنندهٔ \fB_ignored\fP هنگامی که تنها یک تطابق وجود دارد استفاده می‌شود\&. اگر مقدار آن `\fBshow\fP\&' باشد، تنها تطابق موجود نمایش داده می‌شود اما درج نخواهد شد\&. اگر مقدار `\fBmenu\fP\&' باشد، هم آن تطابق منفرد و هم رشتهٔ اصلی به عنوان تطابق اضافه می‌شوند و کامل‌سازی منویی آغاز می‌شود، که انتخاب هر یک از آن‌ها را آسان می‌سازد\&. .TP \fBsort\fP این سبک اجازه می‌دهد ترتیب استاندارد تطابق‌ها بازنویسی شود\&. .RS .PP اگر مقدار آن `\fBtrue\fP\&' یا `\fBfalse\fP' باشد، مرتب‌سازی فعال یا غیرفعال می‌شود\&. افزون بر این، مقادیر مرتبط با گزینهٔ `\fB\-o\fP\&' در \fBcompadd\fP نیز می‌توانند مشخص شوند: \fBmatch\fP، \fBnosort\fP، \fBnumeric\fP، \fBreverse\fP\&. اگر برای زمینه تنظیم نشده باشد، رفتار استاندارد ویجت فراخواننده استفاده می‌شود\&. .PP این سبک ابتدا در برابر زمینهٔ کامل شامل برچسب آزمایش می‌شود، و اگر مقداری حاصل نشد، در برابر زمینهٔ بدون برچسب بررسی خواهد شد\&. .PP در بسیاری از موارد که یک ویجت فراخواننده صراحتاً ترتیب خاصی را به جای پیش‌فرض انتخاب می‌کند، مقدار `\fBtrue\fP\&' نادیده گرفته می‌شود\&. نمونه‌ای که این موضوع در آن صدق نمی‌کند، تاریخچهٔ دستورها است که در آن پیش‌فرضِ مرتب‌سازی زمانیِ تطابق‌ها را می‌توان با تنظیم این سبک روی `true\&' بازنویسی کرد\&. .PP در کامل‌کنندهٔ \fB_expand\fP، اگر روی `true\&' تنظیم شده باشد، بسط‌های تولیدشده همیشه مرتب خواهند شد\&. اگر روی `\fBmenu\fP\&' تنظیم شود، بسط‌ها تنها زمانی مرتب می‌شوند که به عنوان رشته‌های تکی ارائه شوند، نه در رشته‌ای که حاوی همهٔ بسط‌های ممکن است\&. .RE .TP \fBspecial\-dirs\fP در حالت عادی، کد کامل‌سازی نام‌های دایرکتوری `\fB\&.\fP\&' و `\fB\&.\&.\fP' را به عنوان گزینه‌های کامل‌سازی ارائه نمی‌دهد\&. اگر این سبک روی `true\&' تنظیم شود، هر دو مورد `\fB\&.\fP' و `\fB\&.\&.\fP' را به عنوان کامل‌سازی‌های ممکن اضافه خواهد کرد؛ اگر روی `\fB\&.\&.\fP\&' تنظیم شود، تنها `\fB\&.\&.\fP' اضافه خواهد شد\&. .RS .PP مثال زیر \fBspecial\-dirs\fP را زمانی که پیشوند فعلی خالی باشد، یک `\fB\&.\fP\&' تکی باشد، یا تنها شامل مسیری باشد که با `\fB\&.\&./\fP\&' شروع می‌شود، روی `\fB\&.\&.\fP\&' تنظیم می‌کند\&. در غیر این صورت مقدار آن `false' است\&. .PP .RS .nf \fBzstyle \-e \&':completion:*' special\-dirs \e \&'[[ $PREFIX = (\&.\&./)#(|\&.|\&.\&.) ]] && reply=(\&.\&.)'\fP .fi .RE .RE .TP \fBsqueeze\-slashes\fP اگر روی `true\&' تنظیم شود، توالی‌های اسلش در مسیرهای نام فایل (به عنوان مثال در `\fBfoo//bar\fP\&') مانند یک تک‌اسلش رفتار خواهند شد\&. این رفتار معمول مسیرهای یونیکس است\&. با این حال، به‌طور پیش‌فرض تابع کامل‌سازی فایل به‌گونه‌ای عمل می‌کند که گویی یک `\fB*\fP\&' بین اسلش‌ها قرار دارد\&. .TP \fBstop\fP اگر روی `true\&' تنظیم شود، دستور قابل انتساب \fB_history_complete_word\fP هنگام رسیدن به ابتدا یا انتهای تاریخچه یک بار متوقف می‌شود\&. فراخوانی مجدد \fB_history_complete_word\fP سپس به انتهای مخالف تاریخچه بازمی‌گردد\&. اگر این سبک روی `false\&' (پیش‌فرض) تنظیم شود، \fB_history_complete_word\fP مانند کامل‌سازی منویی بلافاصله دور می‌زند\&. .TP \fBstrip\-comments\fP اگر روی `true\&' تنظیم شود، این سبک باعث می‌شود متن‌های توضیحی غیرضروری از تطابق‌های کامل‌سازی حذف شوند\&. در حال حاضر این سبک تنها هنگام کامل‌کردن نشانی‌های ایمیل استفاده می‌شود که در آن هر نام نمایشی از نشانی‌ها حذف شده و آن‌ها را به شکل سادهٔ \fIuser@host\fP خلاصه می‌کند\&. .TP \fBsubst\-globs\-only\fP این سبک توسط کامل‌کنندهٔ \fB_expand\fP استفاده می‌شود\&. اگر روی `true\&' تنظیم شود، بسط تنها در صورتی استفاده خواهد شد که از الگوخوانی (globbing) حاصل شده باشد؛ بنابراین، اگر بسط‌ها از کاربرد سبک \fBsubstitute\fP (توضیح‌داده‌شده در زیر) حاصل شده باشند اما با الگوخوانی بیشتر تغییر نکرده باشند، رد خواهند شد\&. .RS .PP مقدار پیش‌فرض برای این سبک `false\&' است\&. .RE .TP \fBsubstitute\fP این سبک بولی کنترل می‌کند که آیا کامل‌کنندهٔ \fB_expand\fP ابتدا تلاش کند همهٔ جایگزینی‌ها را در رشته بسط دهد (مانند `\fB$(\fP\fI\&.\&.\&.\fP\fB)\fP\&' و `\fB${\fP\fI\&.\&.\&.\fP\fB}\fP') یا خیر\&. .RS .PP مقدار پیش‌فرض `true\&' است\&. .RE .TP \fBsuffix\fP این سبک توسط کامل‌کنندهٔ \fB_expand\fP استفاده می‌شود اگر کلمه با یک مدک (tilde) شروع شود یا حاوی بسط پارامتر باشد\&. اگر روی `true\&' تنظیم شود، کلمه تنها در صورتی بسط می‌یابد که پسوندی نداشته باشد؛ یعنی چیزی مانند `\fB~foo\fP\&' یا `\fB$foo\fP' باشد نه `\fB~foo/\fP' یا `\fB$foo/bar\fP\&'، مگر اینکه خود آن پسوند شامل نویسه‌های واجد شرایط برای بسط باشد\&. مقدار پیش‌فرض برای این سبک `true\&' است\&. .TP \fBtag\-order\fP این سبک سازوکاری برای مرتب‌سازی نحوهٔ استفاده از برچسب‌های موجود در یک زمینهٔ خاص فراهم می‌کند\&. .RS .PP مقادیر این سبک مجموعه‌هایی از فهرست‌های برچسب‌ها هستند که با فاصله جدا شده‌اند\&. برچسب‌های موجود در هر مقدار به‌طور هم‌زمان آزمایش می‌شوند؛ اگر تطابقی یافت نشود، مقدار بعدی استفاده خواهد شد\&. (برای استثنایی بر این رفتار، سبک \fBfile\-patterns\fP را ببینید\&.).PP برای مثال: .PP .RS .nf \fBzstyle \&':completion:*:complete:\-command\-:*:*' tag\-order \e \&'commands functions'\fP .fi .RE .PP مشخص می‌کند که تکمیل در جایگاه دستور، ابتدا دستورهای خارجی و توابع پوسته را پیشنهاد دهد\&. اگر هیچ تکمیلی یافت نشود، برچسب‌های باقی‌مانده امتحان خواهند شد\&. .PP علاوه بر نام‌های برچسب، هر رشته در مقدار می‌تواند یکی از قالب‌های زیر را داشته باشد: .PP .PD 0 .TP .PD \fB\-\fP اگر هر مقداری تنها شامل یک خط پیوند باشد، آنگاه \fIفقط\fP برچسب‌های مشخص‌شده در سایر مقادیر تولید می‌شوند\&. به‌طور معمول، اگر برچسب‌های مشخص‌شده هیچ تطابقی ایجاد نکنند، تمام برچسب‌هایی که به‌صراحت انتخاب نشده‌اند در آخر امتحان می‌شوند\&. این بدان معناست که یک مقدار منفرد که تنها شامل یک خط پیوند باشد، تکمیل را خاموش می‌کند\&. .TP \fB!\fP \fItags\fP\&.\&.\&. رشته‌ای که با علامت تعجب شروع می‌شود، نام برچسب‌هایی را مشخص می‌کند که \fIنباید\fP استفاده شوند\&. اثر آن همانند این است که تمام برچسب‌های ممکن دیگر برای این زمینه فهرست شده باشند\&. .TP \fItag\fP\fB:\fP\fIlabel\fP \&.\&.\&. در اینجا، \fItag\fP یکی از برچسب‌های استاندارد و \fIlabel\fP یک نام دلخواه است\&. تطابق‌ها طبق معمول تولید می‌شوند اما نام \fIlabel\fP در زمینه‌ها به‌جای \fItag\fP به کار می‌رود\&. این در کلماتی که با \fB!\fP شروع می‌شوند کاربردی ندارد\&. .RS .PP اگر \fIlabel\fP با یک خط پیوند آغاز شود، \fItag\fP به ابتدای \fIlabel\fP اضافه می‌شود تا نام مورد استفاده برای جستجو را تشکیل دهد\&. این را می‌توان به کار برد تا سیستم تکمیل یک برچسب خاص را بیش از یک بار امتحان کند و برای هر تلاش تنظیمات سبک متفاوتی را ارائه دهد؛ برای مثال به بخش زیر مراجعه کنید\&. .RE .TP \fItag\fP\fB:\fP\fIlabel\fP\fB:\fP\fIdescription\fP مانند حالت قبل، اما \fBdescription\fP به‌جای توضیحات پیش‌فرضی که تابع تکمیل ارائه می‌دهد، جایگزین «\fB%d\fP\&» در مقدار سبک \fBformat\fP خواهد شد\&. فاصله‌ها در توضیحات باید با یک بک‌اسلش نقل‌قول شوند\&. هر «\fB%d\fP\&» که در \fIdescription\fP بیاید، با توضیحی که تابع تکمیل ارائه داده جایگزین می‌شود\&. .PP در هر یک از قالب‌های بالا، برچسب می‌تواند یک الگو یا چند الگو به شکل «\fB{\fP\fIpat1\fP\fB,\fP\fIpat2\&.\&.\&.\fP\fB}\fP\&» باشد\&. در این حالت تمام برچسب‌های منطبق استفاده خواهند شد، مگر مواردی که به‌صراحت در همان رشته ذکر شده باشند\&. .PP یکی از کاربردهای این ویژگی‌ها، امتحان بیش از یک‌بار یک برچسب است، با تنظیم سبک‌های دیگر به شکل‌های متفاوت در هر تلاش، در حالی که همچنان از همهٔ برچسب‌های دیگر بدون نیاز به تکرار همهٔ آن‌ها استفاده شود\&. برای مثال، برای اینکه تکمیل نام‌های توابع در جایگاه دستور، در اولین باری که تکمیل امتحان می‌شود، از تمام توابع تکمیلی که با زیرخط شروع می‌شوند صرف‌نظر کند: .PP .RS .nf \fBzstyle \&':completion:*:*:\-command\-:*:*' tag\-order \e \&'functions:\-non\-comp *' functions zstyle \&':completion:*:functions\-non\-comp' \e ignored\-patterns \&'_*'\fP .fi .RE .PP در اولین تلاش، تمام برچسب‌ها ارائه می‌شوند اما برچسب \fBfunctions\fP با \fBfunctions\-non\-comp\fP جایگزین خواهد شد\&. سبک \fBignored\-patterns\fP برای این برچسب تنظیم شده است تا توابعی را که با زیرخط شروع می‌شوند مستثنی کند\&. اگر هیچ تطابقی وجود نداشته باشد، مقدار دوم سبک \fBtag\-order\fP استفاده می‌شود که توابع را با استفاده از برچسب پیش‌فرض تکمیل می‌کند، که این بار احتمالاً شامل تمام نام‌های توابع خواهد بود\&. .PP تطابق‌های یک برچسب را می‌توان به گروه‌های مختلف تقسیم کرد\&. برای مثال: .PP .RS .nf \fBzstyle \&':completion:*' tag\-order \e \&'options:\-long:long\e options options:\-short:short\e options options:\-single\-letter:single\e letter\e options\&' zstyle \&':completion:*:options\-long' \e ignored\-patterns \&'[\-+](|\-|[^\-]*)' zstyle \&':completion:*:options\-short' \e ignored\-patterns \&'\-\-*' '[\-+]?' zstyle \&':completion:*:options\-single\-letter' \e ignored\-patterns \&'???*'\fP .fi .RE .PP با تنظیم سبک \fBgroup\-names\fP، گزینه‌هایی که با «\fB\-\fP\fB\-\fP\&» شروع می‌شوند، گزینه‌هایی که با یک «\fB\-\fP» یا «\fB+\fP» منفرد شروع شده اما شامل چندین نویسه هستند، و گزینه‌های تک‌حرفی، در گروه‌های جداگانه همراه با توضیحات متفاوت نمایش داده خواهند شد\&. .PP یکی دیگر از کاربردهای الگوها، امتحان مشخصات تطابق چندگانه به‌صورت متوالی است\&. سبک \fBmatcher\-list\fP قابلیت مشابهی را ارائه می‌دهد، اما در مراحل بسیار ابتدایی سیستم تکمیل بررسی می‌شود و بنابراین نمی‌توان آن را برای دستورهای منفرد یا برای زمینه‌های خاص‌تر تنظیم کرد\&. در اینجا نحوهٔ امتحان تکمیل عادی بدون هیچ مشخصهٔ تطابق آورده شده است، و اگر تطابقی حاصل نشد، با تطابق غیرحساس به حروف بزرگ و کوچک دوباره امتحان شود، در حالی که اثر آن به آرگومان‌های دستور \fBfoo\fP محدود شده است: .PP .RS .nf \fBzstyle \&':completion:*:*:foo:*:*' tag\-order '*' '*:\-case' zstyle \&':completion:*\-case' matcher 'm:{a\-z}={A\-Z}'\fP .fi .RE .PP ابتدا، تمام برچسب‌های ارائه‌شده هنگام تکمیل پس از \fBfoo\fP با استفاده از نام برچسب عادی امتحان می‌شوند\&. اگر هیچ تطابقی حاصل نشود، مقدار دوم \fBtag\-order\fP به کار می‌رود که تمام برچسب‌ها را دوباره امتحان می‌کند، با این تفاوت که این بار \fB\-case\fP برای جستجوی سبک‌ها به نام هرکدام الحاق شده است\&. بنابراین این بار، مقدار سبک \fBmatcher\fP از دومین فراخوانی \fBzstyle\fP در مثال استفاده می‌شود تا تکمیل غیرحساس به حروف بزرگ و کوچک شود\&. .PP می‌توان از گزینهٔ \fB\-e\fP از دستور توکار \fBzstyle\fP برای تعیین شرایط استفاده از برچسب‌های خاص بهره برد\&. برای مثال: .PP .RS .nf \fBzstyle \-e \&'*:\-command\-:*' tag\-order ' if [[ \-n $PREFIX$SUFFIX ]]; then reply=( ) else reply=( \- ) fi\&'\fP .fi .RE .PP تکمیل در جایگاه دستور تنها در صورتی تلاش خواهد شد که رشتهٔ تایپ‌شده تا این لحظه خالی نباشد\&. این مورد با استفاده از پارامتر ویژهٔ \fBPREFIX\fP بررسی می‌شود؛ برای توضیح پارامترهایی که درون ابزارک‌های تکمیل ویژه هستند به zshcompwid مراجعه کنید\&. تنظیم \fBreply\fP روی یک آرایهٔ خالی، رفتار پیش‌فرض یعنی امتحان کردن هم‌زمان همهٔ برچسب‌ها را فراهم می‌کند؛ تنظیم آن روی آرایه‌ای که تنها شامل یک خط پیوند است، استفاده از همهٔ برچسب‌ها و در نتیجه تمام تکمیل‌ها را غیرفعال می‌کند\&. .PP اگر هیچ سبک \fBtag\-order\fP برای زمینه‌ای تعریف نشده باشد، رشته‌های «\fB(|*\-)argument\-* (|*\-)option\-* values\fP\&» و «\fBoptions\fP» به همراه تمام برچسب‌های ارائه‌شده توسط تابع تکمیل، برای ارائه یک رفتار پیش‌فرض معقول استفاده می‌شوند که باعث می‌شود آرگومان‌ها (خواه آرگومان‌های عادی دستور یا آرگومان‌های گزینه‌ها) برای بیشتر دستورها پیش از نام گزینه‌ها تکمیل شوند\&. .RE .TP \fBurls\fP این سبک به همراه برچسب \fBurls\fP توسط توابعی که URLها را تکمیل می‌کنند، استفاده می‌شود\&. .RS .PP اگر مقدار از بیش از یک رشته تشکیل شده باشد، یا اگر تنها رشتهٔ موجود، نام یک فایل یا دایرکتوری نباشد، رشته‌ها به عنوان URLهایی برای تکمیل استفاده می‌شوند\&. .PP اگر مقدار تنها شامل یک رشته باشد که نام یک فایل عادی است، URLها از آن فایل گرفته می‌شوند (که در آن URLها ممکن است با فاصله یا خط جدید جدا شده باشند)\&. .PP در نهایت، اگر تنها رشته در این مقدار، نام یک دایرکتوری باشد، سلسله‌مراتب دایرکتوری با ریشه در این دایرکتوری، گزینه‌های تکمیل را مشخص می‌کند\&. دایرکتوری سطح بالا باید روش دسترسی به فایل باشد، مانند «\fBhttp\fP\&»، «\fBftp\fP»، «\fBbookmark\fP» و غیره\&. در بسیاری از موارد سطح بعدی دایرکتوری‌ها یک نام فایل خواهد بود\&. این سلسله‌مراتب دایرکتوری می‌تواند به اندازهٔ نیاز به سطوح عمیق‌تر برود\&..PP برای نمونه، .PP .RS .nf \fBzstyle \&':completion:*' urls ~/\&.urls mkdir \-p ~/\&.urls/ftp/ftp\&.zsh\&.org/pub \fP .fi .RE .PP تکمیل تمام مؤلفه‌های نشانی وب \fBftp://ftp\&.zsh\&.org/pub\fP را پس از دستورهای مناسبی مانند `\fBnetscape\fP\&' یا `\fBlynx\fP' ممکن می‌سازد\&. با این حال توجه داشته باشید که روش‌های دسترسی و فایل‌ها به‌طور جداگانه کامل می‌شوند؛ بنابراین اگر سبک \fBhosts\fP تنظیم شده باشد، میزبان‌ها می‌توانند بدون ارجاع به سبک \fBurls\fP تکمیل شوند\&. .PP برای اطلاعات بیشتر، به توضیحات درون خود تابع \fB_urls\fP مراجعه کنید (به‌عنوان مثال `\fBmore $^fpath/_urls(N)\fP\&')\&. .RE .TP \fBuse\-cache\fP اگر این سبک تنظیم شود، لایهٔ حافظهٔ موقت تکمیل برای هر تکمیلی که از آن استفاده می‌کند (از طریق توابع \fB_store_cache\fP، \fB_retrieve_cache\fP و \fB_cache_invalid\fP) فعال می‌شود\&. دایرکتوری حاوی فایل‌های حافظهٔ موقت را می‌توان با سبک \fBcache\-path\fP تغییر داد\&. .TP \fBuse\-compctl\fP اگر این سبک روی رشته‌ای تنظیم شود که برابر با \fBfalse\fP، \fB0\fP، \fBno\fP و \fBoff\fP \fIنباشد\fP، سامانهٔ تکمیل ممکن است از هرگونه مشخصهٔ تکمیلی که با دستور توکار \fBcompctl\fP تعریف شده است استفاده کند\&. اگر سبک تنظیم نشده باشد، این کار تنها در صورتی انجام می‌شود که ماژول \fBzsh/compctl\fP بارگذاری شده باشد\&. این رشته همچنین می‌تواند شامل زیررشتهٔ `\fBfirst\fP\&' برای استفاده از تکمیل‌های تعریف‌شده با `\fBcompctl \-T\fP\&'، و زیررشتهٔ `\fBdefault\fP\&' برای استفاده از تکمیل تعریف‌شده با `\fBcompctl \-D\fP' باشد\&. .RS .PP توجه داشته باشید که این سبک تنها برای تسهیل گذار از \fBcompctl\fP به سامانهٔ تکمیل جدید در نظر گرفته شده است و ممکن است در آینده حذف شود\&. .PP همچنین توجه داشته باشید که تعاریف \fBcompctl\fP تنها در صورتی استفاده خواهند شد که هیچ تابع تکمیل خاصی برای دستور مورد نظر وجود نداشته باشد\&. برای نمونه، اگر تابعی به نام \fB_foo\fP برای تکمیل آرگومان‌های دستور \fBfoo\fP وجود داشته باشد، \fBcompctl\fP هرگز برای \fBfoo\fP فراخوانی نخواهد شد\&. با این حال، اگر \fBfoo\fP تنها از تکمیل پیش‌فرض استفاده کند، نسخهٔ \fBcompctl\fP امتحان خواهد شد\&. .RE .TP \fBuse\-ip\fP به‌طور پیش‌فرض، تابع \fB_hosts\fP که نام‌های میزبان را کامل می‌کند، نشانی‌های IP را از مدخل‌های خوانده‌شده از پایگاه‌های دادهٔ میزبان مانند فایل‌های NIS و ssh حذف می‌کند\&. اگر این سبک `true\&' باشد، نشانی‌های IP متناظر نیز می‌توانند تکمیل شوند\&. این سبک در هر زمینه‌ای که سبک \fBhosts\fP تنظیم شده باشد استفاده نمی‌شود؛ همچنین توجه داشته باشید که باید پیش از ایجاد حافظهٔ موقت نام‌های میزبان (معمولاً در نخستین تلاش برای تکمیل) تنظیم شود\&. .TP \fBusers\fP می‌توان این سبک را روی فهرستی از نام‌های کاربری برای تکمیل تنظیم کرد\&. اگر تنظیم نشود، تمام نام‌های کاربری تکمیل خواهند شد\&. توجه داشته باشید که در صورت تنظیم، تنها همان فهرست کاربران تکمیل خواهد شد؛ چرا که در برخی سامانه‌ها پرس‌وجوی تمام کاربران می‌تواند زمان بسیار زیادی ببرد\&. .TP \fBusers\-hosts\fP مقادیر این سبک باید به شکل `\fIuser\fP\fB@\fP\fIhost\fP\&' یا `\fIuser\fP\fB:\fP\fIhost\fP' باشند\&. این سبک برای دستورهایی استفاده می‌شود که به جفت‌های نام کاربر و میزبان نیاز دارند\&. این دستورها نام‌های کاربری را (تنها) از این سبک تکمیل می‌کنند، و تکمیل بعدی نام میزبان را به میزبان‌هایی محدود خواهند کرد که در یکی از مقادیر این سبک با آن کاربر جفت شده‌اند\&. .RS .PP امکان گروه‌بندی مقادیر برای مجموعه‌ای از دستورها که ورود از راه دور را مجاز می‌دانند، مانند \fBrlogin\fP و \fBssh\fP، با استفاده از برچسب \fBmy\-accounts\fP وجود دارد\&. به همین ترتیب، مقادیر برای مجموعه‌ای از دستورها که معمولاً به حساب‌های کاربری افراد دیگر اشاره دارند، مانند \fBtalk\fP و \fBfinger\fP، می‌توانند با استفاده از برچسب \fBother\-accounts\fP گروه‌بندی شوند\&. دستورهای دوگانه‌تر می‌توانند از برچسب \fBaccounts\fP استفاده کنند\&. .RE .TP \fBusers\-hosts\-ports\fP مانند \fBusers\-hosts\fP است اما برای دستورهایی مانند \fBtelnet\fP استفاده می‌شود و شامل رشته‌هایی به شکل `\fIuser\fP\fB@\fP\fIhost\fP\fB:\fP\fIport\fP\&' است\&. .TP \fBverbose\fP اگر تنظیم شود، همان‌طور که به‌طور پیش‌فرض چنین است، فهرست تکمیل با جزئیات بیشتری نمایش داده می‌شود\&. به‌ویژه اگر این سبک `true\&' باشد، بسیاری از دستورها توضیحاتی را برای گزینه‌ها نشان می‌دهند\&. .TP \fBword\fP این سبک توسط تکمیل‌کنندهٔ \fB_list\fP استفاده می‌شود که تا زمان تلاش دوم برای تکمیل در حالتی که خط تغییر نکرده باشد، از درج موارد تکمیلی جلوگیری می‌کند\&. روش معمول برای تشخیص تغییر خط این است که کل محتوای آن بین دو مرتبه مقایسه شود\&. اگر این سبک `true\&' باشد، مقایسه به‌جای آن تنها روی کلمهٔ فعلی انجام می‌شود\&. بنابراین اگر تکمیل روی کلمهٔ دیگری با همان محتوا انجام گیرد، تکمیل به تأخیر نخواهد افتاد\&. .PP.SH "توابع کنترلی (CONTROL FUNCTIONS)" .PP اسکریپت مقداردهی اولیه \fBcompinit\fP تمام ویجت‌هایی را که تکمیل را انجام می‌دهند بازتعریف می‌کند تا تابع ویجت ارائه‌شده \fB_main_complete\fP را فراخوانی کنند\&. این تابع به عنوان یک پوشش (wrapper) عمل می‌کند که توابع به‌اصطلاح «completer» (تکمیل‌کننده) را برای تولید تطابق‌ها فراخوانی می‌کند\&. اگر \fB_main_complete\fP با آرگومان‌هایی فراخوانی شود، این آرگومان‌ها به عنوان نام توابع تکمیل‌کننده‌ای در نظر گرفته می‌شوند که باید به ترتیب داده‌شده فراخوانی گردند\&. اگر هیچ آرگومانی داده نشود، مجموعه‌ای از توابع که باید آزمایش شوند از سبک \fBcompleter\fP گرفته می‌شود\&. برای نمونه، جهت استفاده از تکمیل عادی و تصحیح در صورتی که هیچ تطابقی تولید نشود: .PP .RS .nf \fBzstyle \&':completion:*' completer _complete _correct\fP .fi .RE .PP پس از فراخوانی \fBcompinit\fP\&. مقدار پیش‌فرض برای این سبک `\fB_complete _ignored\fP\&' است، یعنی در حالت عادی تنها تکمیل معمول آزمایش می‌شود؛ ابتدا با اثر سبک \fBignored\-patterns\fP و سپس بدون آن\&. تابع \fB_main_complete\fP از وضعیت خروج توابع تکمیل‌کننده استفاده می‌کند تا تصمیم بگیرد آیا تکمیل‌کننده‌های دیگر باید فراخوانی شوند یا خیر\&. اگر وضعیت خروج صفر باشد، هیچ تکمیل‌کننده دیگری آزمایش نمی‌شود و تابع \fB_main_complete\fP بازمی‌گردد\&. .PP اگر نخستین آرگومان به \fB_main_complete\fP یک خط پیوند منفرد (\-) باشد، آرگومان‌ها به عنوان نام‌های تکمیل‌کننده‌ها در نظر گرفته نخواهند شد\&. در عوض، آرگومان دوم نامی را مشخص می‌کند که در فیلد \fIcompleter\fP از بافت (context) استفاده شود و آرگومان‌های دیگر نام دستور و آرگومان‌هایی را مشخص می‌کنند که برای تولید تطابق‌ها باید فراخوانی شوند\&. .PP توابع تکمیل‌کننده زیر در توزیع گنجانده شده‌اند، هرچند کاربران می‌توانند توابع خود را بنویسند\&. توجه داشته باشید که در بافت‌ها، زیرخط (underscore) ابتدایی حذف می‌شود؛ برای نمونه، تکمیل پایه‌ای در بافت `\fB:completion::complete:\fP\fI\&.\&.\&.\fP\&' انجام می‌گیرد\&. .PP .PD 0 .TP .PD \fB_all_matches\fP این تکمیل‌کننده می‌تواند برای افزودن رشته‌ای شامل تمام تطابق‌های دیگر به کار رود\&. از آنجا که بر تکمیل‌کننده‌های بعدی اثر می‌گذارد، باید به عنوان نخستین تکمیل‌کننده در فهرست قرار گیرد\&. فهرست تمام تطابق‌ها تحت تأثیر سبک‌های \fBavoid\-completer\fP و \fBold\-matches\fP که در بالا شرح داده شدند قرار می‌گیرد\&. .RS .PP ممکن است استفاده از تابع \fB_generic\fP که در زیر توضیح داده شده برای مقید کردن \fB_all_matches\fP به کلید میانبر اختصاصی خود مفید باشد، برای نمونه: .PP .RS .nf \fBzle \-C all\-matches complete\-word _generic bindkey \&'^Xa' all\-matches zstyle \&':completion:all\-matches:*' old\-matches only zstyle \&':completion:all\-matches::::' completer _all_matches\fP .fi .RE .PP توجه داشته باشید که این دستور به خودی خود تکمیلی تولید نمی‌کند: ابتدا از هر یک از روش‌های استاندارد برای ایجاد فهرستی از تکمیل‌ها استفاده کنید، سپس \fB^Xa\fP را برای نمایش تمام تطابق‌ها به کار ببرید\&. در عوض می‌توان یک تکمیل‌کننده استاندارد را به فهرست اضافه کرد و درخواست نمود که فهرست تمام تطابق‌ها مستقیماً درج شود: .PP .RS .nf \fBzstyle \&':completion:all\-matches::::' completer \e _all_matches _complete zstyle \&':completion:all\-matches:*' insert true\fP .fi .RE .PP در این حالت سبک \fBold\-matches\fP نباید تنظیم شود\&. .RE .TP \fB_approximate\fP این تابع شبیه تکمیل‌کننده پایه \fB_complete\fP است اما اجازه می‌دهد تا تکمیل‌ها دستخوش تصحیح شوند\&. بیشینه تعداد خطاها را می‌توان با سبک \fBmax\-errors\fP تعیین کرد؛ برای آگاهی از نحوه شمارش خطاها، توضیحات مربوط به تطابق تقریبی را در \fIzshexpn\fP(1) ببینید\&. معمولاً این تکمیل‌کننده تنها پس از تکمیل‌کننده عادی \fB_complete\fP آزمایش خواهد شد: .RS .PP .RS .nf \fBzstyle \&':completion:*' completer _complete _approximate\fP .fi .RE .PP این کار تکمیلِ همراه با تصحیح را فقط و فقط در صورتی ارائه می‌دهد که تکمیل عادی هیچ تکمیل ممکنی تولید نکند\&. هنگامی که تکمیل‌های تصحیح‌شده یافت شوند، تکمیل‌کننده به طور عادی تکمیل منویی را آغاز می‌کند که به شما اجازه می‌دهد در میان این رشته‌ها پیمایش کنید\&. .PP این تکمیل‌کننده هنگام تولید تصحیح‌های ممکن و رشته اصلی، از برچسب‌های \fBcorrections\fP و \fBoriginal\fP استفاده می‌کند\&. سبک \fBformat\fP برای برچسب اول می‌تواند شامل توالی‌های اضافی `\fB%e\fP\&' و `\fB%o\fP' باشد که به ترتیب با تعداد خطاهای پذیرفته‌شده برای تولید تصحیح‌ها و رشته اصلی، جایگزین خواهند شد\&. .PP تکمیل‌کننده تعداد خطاهای مجاز را به تدریج تا حد تعیین‌شده توسط سبک \fBmax\-errors\fP افزایش می‌دهد؛ بنابراین اگر تکمیلی با یک خطا پیدا شود، هیچ تکمیلی با دو خطا نمایش داده نخواهد شد، و به همین ترتیب\&. این تابع نام تکمیل‌کننده را در بافت تغییر می‌دهد تا نشان دهد چه تعداد خطا در حال آزمایش است: در تلاش اول فیلد completer شامل `\fBapproximate\-1\fP\&'، در تلاش دوم `\fBapproximate\-2\fP'، و غیره خواهد بود\&. .PP هنگامی که \fB_approximate\fP از تابع دیگری فراخوانی می‌شود، تعداد خطاهای قابل پذیرش را می‌توان با گزینه \fB\-a\fP ارسال کرد\&. قالب آرگومان مشابه سبک \fBmax\-errors\fP و همگی در یک رشته است\&. .PP توجه داشته باشید که فراخوانی این تکمیل‌کننده (و تکمیل‌کننده \fB_correct\fP که در زیر ذکر شده) به ویژه هنگامی که تعداد زیادی خطا مجاز باشد، می‌تواند بسیار سنگین و پرهزینه باشد\&. یک راه برای جلوگیری از این موضوع، تنظیم سبک \fBcompleter\fP با استفاده از گزینه \fB\-e\fP برای zstyle است به طوری که برخی از تکمیل‌کننده‌ها تنها زمانی استفاده شوند که تکمیل برای بار دوم روی همان رشته امتحان شود، مثلاً: .PP .RS .nf \fBzstyle \-e \&':completion:*' completer ' if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then _last_try="$HISTNO$BUFFER$CURSOR" reply=(_complete _match _prefix) else reply=(_ignored _correct _approximate) fi\&'\fP .fi .RE .PP این پیکربندی از پارامتر \fBHISTNO\fP و پارامترهای خاص \fBBUFFER\fP و \fBCURSOR\fP که درون ویجت‌های zle و تکمیل در دسترس هستند استفاده می‌کند تا متوجه شود آیا خط فرمان از آخرین باری که تکمیل آزمایش شده تغییر کرده است یا خیر\&. تنها در این صورت است که تکمیل‌کننده‌های \fB_ignored\fP، \fB_correct\fP و \fB_approximate\fP فراخوانی می‌شوند\&. .RE .TP \fB_canonical_paths\fP [ \fB\-A\fP \fIvar\fP ] [ \fB\-N\fP ] [ \fB\-MJV12nfX\fP ] \fItag\fP \fIdescr\fP [ \fIpaths\fP \&.\&.\&. ] این تابع تکمیل، تمامی مسیرهای داده‌شده به آن را تکمیل می‌کند، و همچنین تلاش می‌کند پیشنهادهایی را ارائه دهد که به همان فایلِ یکی از مسیرهای داده‌شده اشاره می‌کنند (مسیر نسبی هنگامی که یک مسیر مطلق داده شده باشد، و برعکس؛ هنگامی که \fB\&.\&.\fP در کلمه مورد نظر برای تکمیل وجود داشته باشد؛ و برخی مسیرهای به‌دست‌آمده از پیوندهای نمادین)\&. .RS .PP گزینه \fB\-A\fP در صورت تعیین، مسیرها را از متغیر آرایه مشخص‌شده می‌گیرد\&. مسیرها همچنین می‌توانند همان‌طور که در بالا نشان داده شد در خط فرمان مشخص شوند\&. گزینه \fB\-N\fP در صورت تعیین، از متعارف‌سازی مسیرهای داده‌شده پیش از استفاده برای تکمیل، در صورتی که از قبل متعارف باشند، جلوگیری می‌کند\&. گزینه‌های \fB\-M\fP، \fB\-J\fP، \fB\-V\fP، \fB\-1\fP، \fB\-2\fP، \fB\-n\fP، \fB\-F\fP و \fB\-X\fP به \fBcompadd\fP فرستاده می‌شوند\&. .PP برای توضیحات درباره \fItag\fP و \fIdescr\fP به \fB_description\fP مراجعه کنید\&. .RE .TP \fB_cmdambivalent\fP آرگومان‌های مکانی باقی‌مانده را به عنوان یک دستور خارجی تکمیل می‌کند\&. اگر دو یا چند آرگومان مکانی در خط فرمان باقی مانده باشد، دستور خارجی و آرگومان‌های آن به عنوان آرگومان‌های مجزا (به شیوه‌ای مناسب برای تکمیل \fB/usr/bin/env\fP) تکمیل می‌شوند، و در غیر این صورت به عنوان یک رشته دستوری نقل‌قول‌شده (به شیوه \fBsystem(\&.\&.\&.)\fP) تکمیل می‌گردد\&. همچنین \fB_cmdstring\fP و \fB_precommand\fP را ببینید\&. .RS .PP این تابع هیچ آرگومانی نمی‌پذیرد\&. .RE .TP \fB_cmdstring\fP یک دستور خارجی را به عنوان یک آرگومان منفرد، همانند \fBsystem(\&.\&.\&.)\fP تکمیل می‌کند\&. .TP \fB_complete\fP این تکمیل‌کننده تمام تکمیل‌های ممکن را به شیوه‌ای حساس به بافت (context\-sensitive) ایجاد می‌کند، یعنی با استفاده از تنظیمات تعریف‌شده توسط تابع \fBcompdef\fP که در بالا توضیح داده شد و تنظیمات فعلی تمام پارامترهای خاص\&. این امر رفتار تکمیل عادی را فراهم می‌کند\&. .RS .PP برای تکمیل آرگومان‌های دستورها، \fB_complete\fP از تابع ابزاری \fB_normal\fP استفاده می‌کند که به نوبه خود مسئول یافتن تابع خاص مربوطه است؛ این تابع در زیر شرح داده شده است\&. بافت‌های گوناگون به صورت \fB\-\fP\fIcontext\fP\fB\-\fP به طور ویژه رسیدگی می‌شوند\&. تمام این موارد در بالا به عنوان آرگومان‌های ممکن برای برچسب \fB#compdef\fP ذکر شده‌اند\&..PP پیش از تلاش برای یافتن تابعی برای یک بافت (context) خاص، \fB_complete\fP بررسی می‌کند که آیا پارامتر «\fBcompcontext\fP\&» مقداردهی شده است یا خیر\&. مقداردهی «\fBcompcontext\fP\&» اجازه می‌دهد توزیع معمول کامل‌سازی بازنویسی (override) شود، که در مواردی مانند تابعی که از \fBvared\fP برای ورودی استفاده می‌کند مفید است\&. اگر به صورت یک آرایه مقداردهی شود، عناصر آن به عنوان تطابق‌های ممکن در نظر گرفته می‌شوند که با برچسب (tag) «\fBvalues\fP\&» و شرح (description) «\fBvalue\fP» کامل خواهند شد\&. اگر به صورت یک آرایهٔ انجمنی (associative array) مقداردهی شود، کلیدها به عنوان کامل‌سازی‌های ممکن و مقادیر (در صورت غیرخالی بودن) به عنوان شرح برای تطابق‌ها استفاده می‌شوند\&. اگر «\fBcompcontext\fP\&» به رشته‌ای حاوی دونقطه تنظیم شود، باید به قالب «\fItag\fP\fB:\fP\fIdescr\fP\fB:\fP\fIaction\fP\&» باشد\&. در این حالت، \fItag\fP و \fIdescr\fP برچسب و شرح مورد استفاده را مشخص می‌کنند و \fIaction\fP تعیین می‌کند چه چیزی باید در یکی از قالب‌های پذیرفته‌شده توسط تابع کمکی \fB_arguments\fP که در زیر شرح داده شده کامل شود\&. .PP در نهایت، اگر «\fBcompcontext\fP\&» به رشته‌ای بدون دونقطه تنظیم شود، مقدار آن به عنوان نام بافتِ مورد استفاده در نظر گرفته شده و تابع تعریف‌شده برای آن بافت فراخوانی خواهد شد\&. بدین منظور، بافت ویژه‌ای به نام \fB\-command\-line\-\fP وجود دارد که کل خطوط فرمان (دستورها و آرگومان‌های آن‌ها) را کامل می‌کند\&. این بافت توسط خود سیستم کامل‌سازی استفاده نمی‌شود، اما با این وجود در صورت فراخوانی صریح، مدیریت می‌گردد\&. .RE .TP \fB_correct\fP برای کلمهٔ فعلی تصحیح تولید می‌کند، اما نه کامل‌سازی؛ این کامل‌کننده مشابه \fB_approximate\fP است اما بر خلاف آن، اجازهٔ هیچ تعداد نویسهٔ اضافی در مکان‌نما را نمی‌دهد\&. اثر آن مشابه غلط‌یابی املایی است\&. این تابع بر اساس \fB_approximate\fP است، اما فیلد completer در نام بافت، \fBcorrect\fP است\&. .RS .PP برای مثال، با: .PP .RS .nf \fBzstyle \&':completion:::::' completer \e _complete _correct _approximate zstyle \&':completion:*:correct:::' max\-errors 2 not\-numeric zstyle \&':completion:*:approximate:::' max\-errors 3 numeric\fP .fi .RE .PP تصحیح تا دو خطا را خواهد پذیرفت\&. اگر یک آرگومان عددی داده شود، تصحیح انجام نخواهد شد، اما کامل‌سازیِ تصحیح‌کننده انجام می‌شود و به تعداد خطاهایی که با آرگومان عددی داده شده خطا می‌پذیرد\&. بدون یک آرگومان عددی، ابتدا تصحیح و سپس کامل‌سازیِ تصحیح‌کننده امتحان خواهد شد که اولی دو خطا و دومی سه خطا را می‌پذیرد\&. .PP هنگامی که \fB_correct\fP به عنوان یک تابع فراخوانی می‌شود، تعداد خطاهای قابل پذیرش ممکن است پس از گزینهٔ \fB\-a\fP مشخص شود\&. این آرگومان در قالبی مشابه مقادیر سبک \fBaccept\fP، همه در قالب یک رشته است\&. .PP این تابع کامل‌کننده برای استفاده بدون کامل‌کنندهٔ \fB_approximate\fP یا همان‌طور که در مثال آمده، درست قبل از آن در نظر گرفته شده است\&. استفاده از آن پس از کامل‌کنندهٔ \fB_approximate\fP بی‌فایده است؛ چرا که \fB_approximate\fP حداقل رشته‌های تصحیح‌شدهٔ تولیدشده توسط کامل‌کنندهٔ \fB_correct\fP را تولید خواهد کرد \-\- و احتمالاً فراتر از آن را نیز شامل می‌شود\&. .RE .TP \fB_expand\fP این تابع کامل‌کننده در واقع کامل‌سازی انجام نمی‌دهد، بلکه بررسی می‌کند آیا کلمهٔ روی خط فرمان واجد شرایط گسترش (expansion) است یا خیر، و در این صورت، کنترلی دقیق بر نحوهٔ انجام این گسترش فراهم می‌کند\&. برای رخ دادن این امر، سیستم کامل‌سازی باید با \fBcomplete\-word\fP فراخوانی شود، نه با \fBexpand\-or\-complete\fP (کلید پیش‌فرض مقیدشده برای \fBTAB\fP)، زیرا در غیر این صورت رشته پیش از آغاز سیستم کامل‌سازی توسط سازوکار داخلی پوسته گسترش خواهد یافت\&. همچنین توجه داشته باشید که این کامل‌کننده باید قبل از تابع کامل‌کنندهٔ \fB_complete\fP فراخوانی شود\&. .RS .PP برچسب‌های مورد استفاده هنگام تولید گسترش‌ها عبارتند از: \fBall\-expansions\fP برای رشته‌ای که شامل تمام گسترش‌های ممکن است، \fBexpansions\fP هنگام افزودن گسترش‌های ممکن به عنوان تطابق‌های تکی، و \fBoriginal\fP هنگام افزودن رشتهٔ اصلی از خط فرمان\&. ترتیبی که این رشته‌ها (در صورت تولید) ارائه می‌شوند را می‌توان طبق معمول با سبک‌های \fBgroup\-order\fP و \fBtag\-order\fP کنترل کرد\&. .PP رشتهٔ قالب برای \fBall\-expansions\fP و برای \fBexpansions\fP ممکن است حاوی توالی «\fB%o\fP\&» باشد که با رشتهٔ اصلی از خط فرمان جایگزین خواهد شد\&. .PP نوع گسترشی که باید آزموده شود توسط سبک‌های \fBsubstitute\fP، \fBglob\fP و \fBsubst\-globs\-only\fP کنترل می‌شود\&. .PP همچنین می‌توان \fB_expand\fP را به عنوان یک تابع فراخوانی کرد، که در این حالت حالت‌های مختلف را می‌توان با گزینه‌ها انتخاب کرد: \fB\-s\fP برای \fBsubstitute\fP، \fB\-g\fP برای \fBglob\fP و \fB\-o\fP برای \fBsubst\-globs\-only\fP\&. .RE .TP \fB_expand_alias\fP اگر کلمه‌ای که مکان‌نما روی آن قرار دارد یک نام مستعار (alias) باشد، گسترش می‌یابد و هیچ کامل‌کنندهٔ دیگری فراخوانی نمی‌شود\&. انواع نام‌های مستعاری را که باید گسترش یابند می‌توان با سبک‌های \fBregular\fP، \fBglobal\fP و \fBdisabled\fP کنترل کرد\&. .RS .PP این تابع یک دستور قابل اتصال به کلید نیز هست؛ بخش «دستورهای مقیدشدنی (Bindable Commands)» را در زیر ببینید\&. .RE .TP \fB_extensions\fP اگر مکان‌نما در پی رشتهٔ «\fB*\&.\fP\&» باشد، پسوندهای نام فایل کامل می‌شوند\&. پسوندها از فایل‌های موجود در دایرکتوری فعلی یا دایرکتوری مشخص‌شده در ابتدای کلمهٔ فعلی گرفته می‌شوند\&. برای تطابق‌های دقیق، کامل‌سازی ادامه می‌یابد تا به سایر کامل‌کننده‌ها مانند \fB_expand\fP اجازه دهد الگو را گسترش دهند\&. سبک‌های استاندارد \fBadd\-space\fP و \fBprefix\-hidden\fP رعایت می‌شوند\&. .TP \fB_external_pwds\fP دایرکتوری‌های کاری فعلیِ سایر فرایندهای zsh متعلق به کاربر فعلی را کامل می‌کند\&. .RS .PP این تابع برای استفاده از طریق \fB_generic\fP، متصل‌شده به یک ترکیب کلید سفارشی در نظر گرفته شده است\&. توجه داشته باشید که تطبیق الگو فعال است، بنابراین تطبیق مشابه نحوهٔ عملکرد آن با کامل‌کنندهٔ \fB_match\fP انجام می‌شود\&. .RE .TP \fB_history\fP کلمات را از تاریخچهٔ دستورات پوسته کامل می‌کند\&. این کامل‌کننده می‌تواند توسط سبک‌های \fBremove\-all\-dups\fP و \fBsort\fP کنترل شود، درست مانند دستور مقیدشدنی \fB_history_complete_word\fP؛ بخش «دستورهای مقیدشدنی (Bindable Commands)» در زیر و بخش «پیکربندی سیستم کامل‌سازی (Completion System Configuration)» در بالا را ببینید\&. .TP \fB_ignored\fP سبک \fBignored\-patterns\fP را می‌توان به فهرستی از الگوها تنظیم کرد که با کامل‌سازی‌های ممکن مقایسه می‌شوند؛ موارد منطبق حذف می‌گردند\&. با این کامل‌کننده، آن تطابق‌ها می‌توانند دوباره برقرار شوند، درست مانند اینکه هیچ سبک \fBignored\-patterns\fP تنظیم نشده باشد\&. این کامل‌کننده در واقع فهرست تطابق‌های خود را تولید می‌کند؛ اینکه چه کامل‌کننده‌هایی فراخوانی شوند به همان شیوه‌ای تعیین می‌شود که برای کامل‌کنندهٔ \fB_prefix\fP مشخص شده است\&. سبک \fBsingle\-ignored\fP نیز همان‌طور که در بالا شرح داده شد در دسترس است\&. .TP \fB_list\fP این کامل‌کننده اجازه می‌دهد درج تطابق‌ها تا زمانی که برای بار دوم بدون تغییر کلمه روی خط فرمان تلاش برای کامل‌سازی شود، به تعویق بیفتد\&. در تلاش اول، تنها فهرست تطابق‌ها نشان داده خواهد شد\&. این کامل‌کننده تحت تأثیر سبک‌های \fBcondition\fP و \fBword\fP قرار دارد؛ بخش «پیکربندی سیستم کامل‌سازی (Completion System Configuration)» در بالا را ببینید\&. .TP \fB_match\fP این کامل‌کننده برای استفاده پس از کامل‌کنندهٔ \fB_complete\fP در نظر گرفته شده است\&. رفتاری مشابه دارد اما رشتهٔ روی خط فرمان می‌تواند الگویی برای تطبیق با کامل‌سازی‌های آزمایشی باشد\&. این رفتار اثری مشابه گزینهٔ \fBGLOB_COMPLETE\fP ایجاد می‌کند\&. .RS .PP به طور معمول، کامل‌سازی با گرفتن الگو از خط فرمان، درج یک «\fB*\fP\&» در موقعیت مکان‌نما و مقایسهٔ الگوی حاصل با کامل‌سازی‌های ممکن تولیدشده انجام خواهد شد\&. این رفتار را می‌توان با سبک \fBmatch\-original\fP که در بالا توضیح داده شد تغییر داد\&. .PP تطابق‌های تولیدشده در یک کامل‌سازی منویی ارائه خواهند شد، مگر اینکه سبک \fBinsert\-unambiguous\fP روی «true\&» تنظیم شده باشد؛ برای سایر گزینه‌های این سبک توضیحات بالا را ببینید\&. .PP توجه داشته باشید مشخصات تطبیق‌دهنده‌ای که به صورت سراسری تعریف شده‌اند یا توسط توابع کامل‌سازی استفاده می‌شوند (سبک‌های \fBmatcher\-list\fP و \fBmatcher\fP) مورد استفاده قرار نخواهند گرفت\&. .RE .TP \fB_menu\fP این کامل‌کننده به عنوان یک تابع نمونهٔ ساده نوشته شد تا نشان دهد چگونه می‌توان کامل‌سازی منویی را در کد پوسته فعال کرد\&. با این حال، اثر قابل‌توجه غیرفعال‌سازی انتخاب منو (menu selection) را دارد که می‌تواند برای ویجت‌های مبتنی بر \fB_generic\fP مفید باشد\&. این کامل‌کننده باید به عنوان نخستین کامل‌کننده در فهرست استفاده شود\&. توجه داشته باشید که این رفتار مستقل از تنظیم گزینهٔ \fBMENU_COMPLETE\fP است و با سایر ویجت‌های کامل‌سازی منویی مانند \fBreverse\-menu\-complete\fP یا \fBaccept\-and\-menu\-complete\fP کار نمی‌کند\&. .TP \fB_oldlist\fP این کامل‌کننده نحوهٔ رفتار ویجت‌های استاندارد کامل‌سازی را هنگام وجود یک فهرست موجود از کامل‌سازی‌ها که ممکن است توسط یک کامل‌سازی خاص تولید شده باشد (یعنی یک دستور کامل‌سازی با اتصال کلید جداگانه)، کنترل می‌کند\&. این امکان را فراهم می‌سازد که کلیدهای معمولی کامل‌سازی به جای تولید فهرست جدیدی از کامل‌سازی‌های بافتی معمولی، همچنان از فهرست کامل‌سازی‌های تولیدشده بدین ترتیب استفاده کنند\&. این کامل‌کننده باید در فهرست کامل‌کننده‌ها پیش از هر ویجتی که تطابق تولید می‌کند ظاهر شود\&. این تابع از دو سبک استفاده می‌کند: \fBold\-list\fP و \fBold\-menu\fP؛ بخش «پیکربندی سیستم کامل‌سازی (Completion System Configuration)» در بالا را ببینید\&..TP \fB_precommand\fP یک دستور خارجی را در آرگومان‌های جداشده با کلمه کامل می‌کند، همانند \fBexec\fP و \fB/usr/bin/env\fP\&. .TP \fB_prefix\fP از این کامل‌کننده می‌توان برای آزمودن تکمیل با نادیده گرفتن پسوند (تمام موارد پس از مکان‌نما) استفاده کرد\&. به عبارت دیگر، پسوند بخشی از کلمه برای تکمیل در نظر گرفته نخواهد شد\&. تأثیر آن مشابه دستور \fBexpand\-or\-complete\-prefix\fP است\&. .RS .PP سبک \fBcompleter\fP برای تصمیم‌گیری دربارهٔ اینکه کدام کامل‌کننده‌های دیگر برای تولید تطابق‌ها فراخوانی شوند استفاده می‌شود\&. اگر این سبک تنظیم نشده باشد، فهرست کامل‌کننده‌های تعیین‌شده برای زمینهٔ فعلی به کار می‌رود \-\- البته به جز خودِ کامل‌کنندهٔ \fB_prefix\fP\&. علاوه بر این، اگر این کامل‌کننده بیش از یک بار در فهرست کامل‌کننده‌ها بیاید، تنها آن کامل‌کننده‌هایی فراخوانی می‌شوند که در آخرین فراخوانی \fB_prefix\fP هنوز آزموده نشده‌اند\&. .PP برای نمونه، این سبک سراسری \fBcompleter\fP را در نظر بگیرید: .PP .RS .nf \fBzstyle \&':completion:*' completer \e _complete _prefix _correct _prefix:foo\fP .fi .RE .PP در اینجا، کامل‌کنندهٔ \fB_prefix\fP تکمیل عادی را با نادیده گرفتن پسوند می‌آزماید\&. اگر این کار تطابقی تولید نکند، و فراخوانی کامل‌کنندهٔ \fB_correct\fP پس از آن نیز تطابقی ندهد، \fB_prefix\fP برای بار دوم فراخوانی می‌شود و این بار تنها تصحیح را با نادیده گرفتن پسوند می‌آزماید\&. در دومین فراخوانی، بخش کامل‌کنندهٔ زمینه به صورت `\fBfoo\fP\&' ظاهر می‌شود\&. .PP برای استفاده از \fB_prefix\fP به عنوان آخرین چاره و آزمودن تنها تکمیل عادی در هنگام فراخوانی آن: .PP .RS .nf \fBzstyle \&':completion:*' completer _complete \&.\&.\&. _prefix zstyle \&':completion::prefix:*' completer _complete\fP .fi .RE .PP سبک \fBadd\-space\fP نیز رعایت می‌شود\&. اگر بر روی `true\&' تنظیم شده باشد، آنگاه \fB_prefix\fP یک فاصله بین تطابق‌های تولیدشده (در صورت وجود) و پسوند درج خواهد کرد\&. .PP توجه داشته باشید که این کامل‌کننده تنها در صورتی مفید است که گزینهٔ \fBCOMPLETE_IN_WORD\fP تنظیم شده باشد؛ در غیر این صورت، مکان‌نما پیش از فراخوانی کد تکمیل به انتهای کلمهٔ فعلی منتقل می‌شود و در نتیجه پسوندی وجود نخواهد داشت\&. .RE .TP \fB_user_expand\fP این کامل‌کننده رفتاری مشابه کامل‌کنندهٔ \fB_expand\fP دارد، اما به جای آن، بسط‌های تعریف‌شده توسط کاربران را انجام می‌دهد\&. سبک‌های \fBadd\-space\fP و \fBsort\fP که مخصوص کامل‌کنندهٔ \fB_expand\fP هستند، علاوه بر سبک‌های دیگر که به صورت عمومی‌تر توسط سامانهٔ تکمیل مدیریت می‌شوند، با \fB_user_expand\fP نیز قابل استفاده‌اند\&. برچسب \fBall\-expansions\fP نیز در دسترس است\&. .RS .PP بسط وابسته به این است که سبک آرایه‌ای \fBuser\-expand\fP برای زمینهٔ فعلی تعریف شده باشد؛ به یاد داشته باشید که زمینه برای کامل‌کننده‌ها نسبت به تکمیل زمینه‌ای کلی‌تر است، چرا که زمینهٔ کامل هنوز تعیین نشده است\&. عناصر این آرایه می‌توانند یکی از شکل‌های زیر را داشته باشند: .PP .PD 0 .TP \fB$\fP\fIhash\fP \fIhash\fP نام یک آرایهٔ متناظر است\&. توجه داشته باشید که این یک عبارت پارامتری کامل نیست، صرفاً یک \fB$\fP است که به شیوهٔ مناسب نقل‌قول شده تا از بسط فوری جلوگیری شود، و به دنبال آن نام یک آرایهٔ متناظر می‌آید\&. اگر کلمهٔ آزمایشی بسط با یک کلید در \fIhash\fP مطابقت داشته باشد، بسط حاصل مقدار متناظر با آن خواهد بود\&. .PP .TP \fI_func\fP \fI_func\fP نام یک تابع پوسته است که نام آن باید با \fB_\fP آغاز شود، اما از جنبه‌های دیگر برای سامانهٔ تکمیل خاص نیست\&. تابع با کلمهٔ آزمایشی به عنوان یک آرگومان فراخوانی می‌شود\&. اگر قرار است کلمه بسط داده شود، تابع باید آرایهٔ \fBreply\fP را روی فهرستی از بسط‌ها تنظیم کند\&. به صورت اختیاری، می‌تواند \fBREPLY\fP را روی کلمه‌ای تنظیم کند که به عنوان توضیحی برای مجموعهٔ بسط‌ها استفاده شود\&. وضعیت خروج تابع اهمیتی ندارد\&. .PP .PD .RE .PP.SH "دستورهای مقیدشدنی (BINDABLE COMMANDS)" .PP علاوه بر کامل‌سازی‌های وابسته به زمینه‌ای که ارائه شده‌اند و انتظار می‌رود به شیوه‌ای شهودی و روشن کار کنند، چند ویجت نیز رفتارهای خاصی را پیاده‌سازی می‌کنند که می‌توانند به‌طور جداگانه به کلیدها مقید شوند\&. موارد زیر فهرستی از این ویجت‌ها و انتساب‌های پیش‌فرض آن‌ها است\&. .PP .PD 0 .TP .PD \fB_bash_completions\fP این تابع توسط دو ویجت \fB_bash_complete\-word\fP و \fB_bash_list\-choices\fP استفاده می‌شود\&. هدف از وجود آن، سازگاری با انتساب‌های کامل‌سازی در bash است\&. آخرین نویسهٔ انتساب مشخص می‌کند چه چیزی کامل می‌شود: «\fB!\fP\&»، نام‌های دستورات؛ «\fB$\fP»، متغیرهای محیطی؛ «\fB@\fP\&»، نام‌های میزبان؛ «\fB/\fP»، نام‌های فایل؛ «\fB~\fP»، نام‌های کاربری\&. در bash، انتسابی که پیش از آن «\fB\ee\fP\&» بیاید کامل‌سازی را انجام می‌دهد، و اگر پیش از آن «\fB^X\fP» بیاید گزینه‌ها را فهرست می‌کند\&. از آنجا که برخی از این انتساب‌ها با انتساب‌های استاندارد zsh تداخل دارند، تنها «\fB\ee~\fP\&» و «\fB^X~\fP» به‌طور پیش‌فرض مقید شده‌اند\&. برای افزودن بقیه، موارد زیر باید پس از اجرای \fBcompinit\fP به \fB\&.zshrc\fP افزوده شوند: .RS .PP .RS .nf \fBfor key in \&'!' '$' '@' '/' '~'; do bindkey "\ee$key" _bash_complete\-word bindkey "^X$key" _bash_list\-choices done\fP .fi .RE .PP این مورد شامل انتساب‌ها برای «\fB~\fP\&» نیز می‌شود، در صورتی که پیش‌تر به چیز دیگری مقید شده باشند؛ کد کامل‌سازی انتساب‌های کاربر را بازنویسی نمی‌کند\&. .RE .TP \fB_correct_filename\fP (\fB^XC\fP) مسیر نام فایل را در موقعیت فعلی مکان‌نما تصحیح می‌کند\&. تا شش خطا را در نام مجاز می‌داند\&. همچنین می‌توان آن را با یک آرگومان برای تصحیح مسیر نام فایل، مستقل از zle فراخوانی کرد؛ تصحیح در خروجی استاندارد چاپ می‌شود\&. .TP \fB_correct_word\fP (\fB^Xc\fP) تصحیح آرگومان فعلی را با استفاده از کامل‌سازی‌های زمینه‌ای معمول به‌عنوان انتخاب‌های ممکن انجام می‌دهد\&. این کار رشتهٔ «\fBcorrect\-word\fP\&» را در فیلد \fIfunction\fP از نام زمینه ذخیره کرده و سپس کامل‌ساز \fB_correct\fP را فراخوانی می‌کند\&. .TP \fB_expand_alias\fP (\fB^Xa\fP) این تابع می‌تواند به‌عنوان یک کامل‌ساز و همچنین به‌عنوان یک دستور مقیدشدنی استفاده شود\&. اگر کلمه‌ای که مکان‌نما روی آن قرار دارد یک نام مستعار (alias) باشد، آن را بسط می‌دهد\&. انواع نام‌های مستعار بسط‌یافته را می‌توان با سبک‌های \fBregular\fP، \fBglobal\fP و \fBdisabled\fP کنترل کرد\&. .RS .PP هنگامی که به‌عنوان یک دستور مقیدشدنی استفاده می‌شود، یک ویژگی اضافی وجود دارد که می‌تواند با تنظیم سبک \fBcomplete\fP روی «true\&» انتخاب شود\&. در این حالت، اگر کلمه نام یک alias نباشد، \fB_expand_alias\fP تلاش می‌کند بدون بسط دادن کلمه، آن را به یک نام کامل alias تکمیل کند\&. این تابع مکان‌نما را مستقیماً پس از کلمهٔ کامل‌شده قرار می‌دهد، به‌طوری که فراخوانی دوبارهٔ \fB_expand_alias\fP، نام alias را که اکنون کامل شده است بسط خواهد داد\&. .RE .TP \fB_expand_word\fP (\fB^Xe\fP) بسط را روی کلمهٔ فعلی انجام می‌دهد: معادل دستور استاندارد \fBexpand\-word\fP، اما با استفاده از کامل‌ساز \fB_expand\fP\&. پیش از فراخوانی آن، فیلد \fIfunction\fP از زمینه روی «\fBexpand\-word\fP\&» تنظیم می‌شود\&. .TP \fB_generic\fP این تابع به‌عنوان یک ویجت تعریف نشده و به‌طور پیش‌فرض به کلیدی مقید نیست\&. با این حال، می‌توان از آن برای تعریف یک ویجت استفاده کرد که در این صورت نام ویجت را در فیلد \fIfunction\fP از زمینه ذخیره کرده و سامانهٔ کامل‌سازی را فراخوانی می‌کند\&. این ویژگی تعریف آسان ویجت‌های کامل‌سازی سفارشی را با مجموعه‌ای از تنظیمات سبک مختص به خود امکان‌پذیر می‌سازد\&. برای مثال، برای تعریف ویجتی که کامل‌سازی عادی را انجام داده و گزینش منو را آغاز می‌کند: .RS .PP .RS .nf \fBzle \-C foo complete\-word _generic bindkey \&'\&.\&.\&.' foo zstyle \&':completion:foo:*' menu yes select=1\fP .fi .RE .PP به‌طور ویژه توجه داشته باشید که سبک \fBcompleter\fP را می‌توان برای زمینه تنظیم کرد تا مجموعه توابع مورد استفاده برای تولید تطابق‌های ممکن تغییر کند\&. اگر \fB_generic\fP همراه با آرگومان فراخوانی شود، آن آرگومان‌ها به‌جای موارد تعریف‌شده توسط سبک \fBcompleter\fP، به‌عنوان فهرست کامل‌سازها به \fB_main_complete\fP ارسال می‌شوند\&. .RE .TP \fB_history_complete_word\fP (\fB\ee/\fP) کلمات را از تاریخچهٔ دستورات پوسته کامل می‌کند\&. این دستور از سبک‌های \fBlist\fP، \fBremove\-all\-dups\fP، \fBsort\fP و \fBstop\fP استفاده می‌کند\&. .TP \fB_most_recent_file\fP (\fB^Xm\fP) نام تازه‌ترین فایل ویرایش‌شده را که با الگوی خط فرمان (که ممکن است خالی باشد) مطابقت دارد کامل می‌کند\&. در صورت دریافت آرگومان عددی \fIN\fP، نام \fIN\fP‌اُمین فایل تازه‌ویرایش‌شده را کامل می‌کند\&. توجه داشته باشید که کامل‌سازی (در صورت وجود) همواره یکتا است\&. .TP \fB_next_tags\fP (\fB^Xn\fP) این دستور مجموعهٔ تطابق‌های مورد استفاده را به تطابق‌های برچسب بعدی، یا مجموعه‌ای از برچسب‌ها (خواه آن‌طور که توسط سبک \fBtag\-order\fP مشخص شده یا طبق پیش‌فرض تنظیم شده است) تغییر می‌دهد؛ در غیر این صورت این تطابق‌ها در دسترس نمی‌بودند\&. فراخوانی‌های متوالی این دستور، در میان تمام مجموعه‌های ممکن برچسب‌ها گردش می‌کند\&. .TP \fB_read_comp\fP (\fB^X^R\fP) رشته‌ای را از کاربر درخواست می‌کند و از آن برای انجام کامل‌سازی روی کلمهٔ فعلی استفاده می‌کند\&. دو حالت برای این رشته وجود دارد\&. نخست، می‌تواند مجموعه‌ای از کلمات باشد که با «\fB_\fP\&» آغاز می‌شوند، برای مثال «\fB_files \-/\fP»؛ در این حالت تابع به همراه هرگونه آرگومان برای تولید کامل‌سازی‌ها فراخوانی خواهد شد\&. بخش‌های غیرمبهم نام تابع به‌طور خودکار کامل می‌شوند (کامل‌سازی عادی در این مرحله در دسترس نیست) تا زمانی که یک فاصله تایپ شود\&. .RS .PP دوم، هر رشتهٔ دیگری به‌عنوان مجموعه‌ای از آرگومان‌ها به \fBcompadd\fP ارسال می‌شود و بنابراین باید عبارتی باشد که مشخص می‌کند چه چیزی باید کامل شود\&. .PP هنگام خواندن رشته، مجموعهٔ بسیار محدودی از دستورات ویرایشی در دسترس است: «\fBDEL\fP\&» و «\fB^H\fP» آخرین نویسه را حذف می‌کنند؛ «\fB^U\fP» خط را پاک می‌کند، و «\fB^C\fP\&» و «\fB^G\fP» تابع را لغو می‌کنند، در حالی که «\fBRET\fP» کامل‌سازی را می‌پذیرد\&. توجه داشته باشید که رشته عیناً به‌صورت یک خط فرمان به کار می‌رود، بنابراین آرگومان‌ها باید بر اساس قواعد استاندارد پوسته نقل‌قول شوند\&. .PP پس از خوانده شدن یک رشته، فراخوانی بعدی \fB_read_comp\fP به‌جای خواندن یک رشتهٔ جدید، از همان رشتهٔ موجود استفاده خواهد کرد\&. برای اجبار به خواندن یک رشتهٔ جدید، \fB_read_comp\fP را با یک آرگومان عددی فراخوانی کنید\&. .RE .TP \fB_complete_debug\fP (\fB^X?\fP) این ویجت کامل‌سازی عادی را انجام می‌دهد، اما ردگیری (trace) دستورات پوسته‌ای را که توسط سامانهٔ کامل‌سازی اجرا می‌شوند در یک فایل موقت ذخیره می‌کند\&. هر تلاش برای کامل‌سازی، فایل اختصاصی خود را دریافت می‌کند\&. دستوری برای مشاهدهٔ هر یک از این فایل‌ها بر روی پشتهٔ بافر ویرایشگر قرار می‌گیرد\&. .TP \fB_complete_help\fP (\fB^Xh\fP) این ویجت اطلاعاتی را دربارهٔ نام‌های زمینه، برچسب‌ها و توابع کامل‌سازی استفاده‌شده هنگام کامل‌سازی در موقعیت فعلی مکان‌نما نمایش می‌دهد\&. اگر یک آرگومان عددی غیر از \fB1\fP (مانند «\fBESC\-2 ^Xh\fP\&») به آن داده شود، سبک‌های استفاده‌شده و زمینه‌هایی که برای آن‌ها به کار رفته‌اند نیز نشان داده خواهند شد\&. .RS .PP توجه داشته باشید که اطلاعات مربوط به سبک‌ها ممکن است ناقص باشد؛ این امر به اطلاعات موجود از توابع کامل‌سازی فراخوانی‌شده بستگی دارد که آن هم به‌نوبهٔ خود توسط سبک‌ها و سایر تنظیمات خود کاربر تعیین می‌شود\&. .RE .TP \fB_complete_help_generic\fP برخلاف سایر دستورات فهرست‌شده در اینجا، این مورد باید به‌جای یک ویجت کامل‌سازی، به‌عنوان یک ویجت عادی ZLE ایجاد شود (یعنی با \fBzle \-N\fP)\&. این ویجت برای تولید راهنما همراه با ویجتی که به ویجت \fB_generic\fP توضیح‌داده‌شده در بالا مقید است به کار می‌رود\&. .RS .PP اگر این ویجت با استفاده از نام تابع ایجاد شود، همان‌طور که به‌طور پیش‌فرض چنین است، هنگام اجرا یک توالی کلید را می‌خواند\&. انتظار می‌رود این توالی به فراخوانی یک تابع کامل‌سازی که از ویجت \fB_generic\fP استفاده می‌کند مقید شده باشد\&. آن ویجت اجرا خواهد شد و اطلاعات با همان قالبی که ویجت \fB_complete_help\fP برای کامل‌سازی زمینه‌ای نمایش می‌دهد، ارائه خواهد شد\&. .PP اگر نام ویجت شامل \fBdebug\fP باشد، برای مثال اگر به‌صورت «\fBzle \-N _complete_debug_generic _complete_help_generic\fP\&» ایجاد شده باشد، رشته‌کلید یک ویجت عمومی را مانند قبل خوانده و اجرا می‌کند، اما سپس اطلاعات اشکال‌زدایی را همان‌گونه که توسط \fB_complete_debug\fP برای کامل‌سازی زمینه‌ای انجام می‌شود تولید خواهد کرد\&. .PP اگر نام ویجت شامل \fBnoread\fP باشد، رشته‌کلیدی را نخواهد خواند، بلکه ترتیبی می‌دهد که استفادهٔ بعدی از یک ویجت عمومی اجراشده در همان پوسته، اثری همانند آنچه در بالا توضیح داده شد داشته باشد\&. .PP این ویجت با تنظیم پارامتر پوستهٔ \fBZSH_TRACE_GENERIC_WIDGET\fP کار می‌کند که توسط \fB_generic\fP خوانده می‌شود\&. لغو تنظیم این پارامتر، هرگونه اثر معلق حالت \fBnoread\fP را باطل می‌کند\&..PP برای نمونه، پس از اجرای موارد زیر: .PP .RS .nf \fBzle \-N _complete_debug_generic _complete_help_generic bindkey \&'^x:' _complete_debug_generic\fP .fi .RE .PP فشردن «\fBC\-x :\fP\&» و به‌دنبال آن توالی کلیدهای مربوط به یک ابزارک (widget) عمومی، باعث می‌شود که خروجی ردیابی (trace output) آن ابزارک در یک فایل ذخیره شود\&. .RE .TP \fB_complete_tag\fP (\fB^Xt\fP) این ابزارک، برچسب‌های نماد (symbol tags) ایجاد شده توسط برنامه‌های \fBetags\fP یا \fBctags\fP (توجه داشته باشید که ارتباطی با برچسب‌های سامانهٔ تکمیل ندارد) که در فایلی به نام \fBTAGS\fP (با قالب استفاده شده توسط \fBetags\fP) یا \fBtags\fP (با قالب ایجاد شده توسط \fBctags\fP) ذخیره شده‌اند را تکمیل می‌کند\&. این تابع سلسله‌مراتب مسیر را رو به بالا برای یافتن اولین وقوع هر یک از این فایل‌ها جستجو می‌کند؛ اگر هر دو موجود باشند، فایل \fBTAGS\fP ترجیح داده می‌شود\&. می‌توانید مسیر کامل فایل \fBTAGS\fP یا \fBtags\fP را به ترتیب با تنظیم پارامترهای \fB$TAGSFILE\fP یا \fB$tagsfile\fP مشخص کنید\&. برچسب‌های تکمیل متناظر استفاده شده، به ترتیب برگرفته از emacs و vi، برابر با \fBetags\fP و \fBvtags\fP هستند\&. .PP .SH "توابع کمکی (UTILITY FUNCTIONS)" .PP در ادامه توضیحاتی برای توابع کمکی که ممکن است هنگام نوشتن توابع تکمیل مفید باشند آمده است\&. اگر توابع در زیردایرکتوری‌ها نصب شده باشند، بیشتر آن‌ها در زیردایرکتوری \fBBase\fP قرار دارند\&. همانند توابع نمونه برای دستورها در این توزیع، تمام توابع کمکی تولیدکنندهٔ تطابق‌ها از این قرارداد پیروی می‌کنند که در صورت تولید موارد تکمیل وضعیت خروج صفر، و در صورتی که هیچ تکمیل منطبقی نتواند اضافه شود وضعیت غیر صفر را برمی‌گردانند\&. .PP .PD 0 .TP .PD \fB_absolute_command_paths\fP این تابع دستورهای خارجی را به‌صورت مسیرهای مطلق تکمیل می‌کند (برخلاف \fB_command_names \-e\fP که نام‌های پایهٔ آن‌ها را تکمیل می‌کند)\&. این تابع هیچ آرگومانی نمی‌پذیرد\&. .TP \fB_all_labels\fP [ \fB\-x\fP ] [ \fB\-12VJ\fP ] \fItag\fP \fIname\fP \fIdescr\fP [ \fIcommand\fP \fIarg\fP \&.\&.\&. ] این یک رابط کاربری مناسب برای تابع \fB_next_label\fP در زیر است که حلقهٔ نشان داده‌شده در مثال \fB_next_label\fP را پیاده‌سازی می‌کند\&. دستور \fIcommand\fP و آرگومان‌های آن برای تولید تطابق‌ها فراخوانی می‌شوند\&. گزینه‌های ذخیره‌شده در پارامتر \fIname\fP به‌طور خودکار درون \fIarg\fPهای ارسال‌شده به \fIcommand\fP درج خواهند شد\&. معمولاً آن‌ها مستقیماً پس از \fIcommand\fP قرار می‌گیرند، اما اگر یکی از \fIarg\fPها یک خط تیره منفرد باشد، دقیقاً پیش از آن درج می‌شوند\&. اگر خط تیره آخرین آرگومان باشد، پیش از فراخوانی \fIcommand\fP از فهرست آرگومان‌ها حذف خواهد شد\&. این امر اجازه می‌دهد تا از \fB_all_labels\fP تقریباً در همهٔ مواردی که تطابق‌ها را می‌توان با یک فراخوانی دستور توکار \fBcompadd\fP یا با فراخوانی یکی از توابع کمکی تولید کرد، استفاده شود\&. .RS .PP برای نمونه: .PP .RS .nf \fBlocal expl \&.\&.\&. if _requested foo; then \&.\&.\&. _all_labels foo expl \&'\&.\&.\&.' compadd \&.\&.\&. \- $matches fi\fP .fi .RE .PP رشته‌های درون پارامتر \fBmatches\fP را با استفاده از \fBcompadd\fP همراه با گزینه‌های اضافی که بر گزینه‌های تولیدشده توسط \fB_all_labels\fP تقدم دارند، تکمیل می‌کند\&. .RE .TP \fB_alternative\fP [ \fB\-O\fP \fIname\fP ] [ \fB\-C\fP \fIname\fP ] \fIspec\fP \&.\&.\&. این تابع در موارد ساده‌ای که چندین برچسب در دسترس هستند مفید است\&. این تابع اساساً حلقه‌ای مشابه آنچه برای تابع \fB_tags\fP در زیر توضیح داده شده را پیاده‌سازی می‌کند\&. .RS .PP برچسب‌های مورد استفاده و کنشی که در صورت درخواست یک برچسب باید انجام شود، با استفاده از \fIspec\fPهایی با قالب زیر توصیف می‌شوند: «\fItag\fP\fB:\fP\fIdescr\fP\fB:\fP\fIaction\fP\&»\&. برچسب‌های \fItag\fP با استفاده از \fB_tags\fP ارائه می‌شوند و در صورت درخواست برچسب، \fIaction\fP با شرحِ داده‌شده در \fIdescr\fP اجرا می‌شود\&. کنش‌های \fIaction\fP همان مواردی هستند که توسط تابع \fB_arguments\fP (توضیح داده شده در زیر) پذیرفته می‌شوند، با استثنائات زیر: .PD 0 .TP .PD \(bu قالب‌های «\fB\->\fP\fIstate\fP\&» و «\fB=\fP\fI\&.\&.\&.\fP» پشتیبانی نمی‌شوند\&. .TP \(bu قالب «\fB((a\e:bar b\e:baz\fP\fB))\fP\&» نیازی به گریز دادن دونقطه ندارد، زیرا \fIspec\fPها هیچ فیلد جداشده با دونقطه‌ای پس از \fIaction\fP ندارند\&. .PP برای نمونه، \fIaction\fP می‌تواند یک فراخوانی سادهٔ تابع باشد: .PP .RS .nf \fB_alternative \e \&'users:user:_users' \e \&'hosts:host:_hosts'\fP .fi .RE .PP نام‌های کاربری و نام‌های میزبان را به عنوان تطابق‌های ممکن ارائه می‌دهد که به ترتیب توسط توابع \fB_users\fP و \fB_hosts\fP تولید شده‌اند\&. .PP همانند \fB_arguments\fP، این تابع از \fB_all_labels\fP برای اجرای کنش‌ها استفاده می‌کند که روی تمام مجموعه‌های برچسب پیمایش می‌کند\&. مدیریت ویژه تنها زمانی مورد نیاز است که یک برچسب معتبر اضافی وجود داشته باشد، برای نمونه درون تابعی که از \fB_alternative\fP فراخوانی شده است\&. .PP گزینهٔ «\fB\-O\fP \fIname\fP\&» به همان روشی استفاده می‌شود که در تابع \fB_arguments\fP به کار می‌رود\&. به عبارت دیگر، عناصر آرایهٔ \fIname\fP هنگام اجرای یک کنش به \fBcompadd\fP ارسال خواهند شد\&. .PP همانند \fB_tags\fP، این تابع از گزینهٔ \fB\-C\fP برای تعیین نام متفاوتی برای فیلد زمینهٔ آرگومان (argument context field) پشتیبانی می‌کند\&. .RE .TP .PD 0 \fB_arguments \fP[ \fB\-nswWCRS\fP ] [ \fB\-A\fP \fIpat\fP ] [ \fB\-O\fP \fIname\fP ] [ \fB\-M\fP \fImatchspec\fP ] .TP .PD 0 \fB \fP[ \fB:\fP ] \fIspec\fP \&.\&.\&. .TP .PD 0 \fB_arguments \fP[ \fIopt\fP \&.\&.\&. ] \fB\-\fP\fB\-\fP [ \fB\-l\fP ] [ \fB\-i\fP \fIpats\fP ] [ \fB\-s\fP \fIpair\fP ] .TP .PD \fB \fP[ \fIhelpspec\fP \&.\&.\&.] این تابع می‌تواند برای ارائهٔ مشخصات کامل جهت تکمیل دستوری استفاده شود که آرگومان‌های آن از قراردادهای استاندارد گزینه و آرگومان یونیکس پیروی می‌کنند\&. .RS .PP \fIنمای کلی گزینه‌ها\fP .PP گزینه‌های خود \fB_arguments\fP باید در کلمات جداگانه باشند، یعنی \fB\-s \-w\fP، نه \fB\-sw\fP\&. به‌دنبال گزینه‌ها، \fIspec\fPهایی می‌آیند که گزینه‌ها و آرگومان‌های دستور مورد تحلیل را توصیف می‌کنند\&. برای جلوگیری از ابهام، تمام گزینه‌های خود \fB_arguments\fP می‌توانند با یک دونقطهٔ منفرد از فرم‌های \fIspec\fP جدا شوند\&. .PP فرم «\fB\-\fP\fB\-\fP\&» برای استنتاج فرم‌های \fIspec\fP از خروجی راهنمای (help) دستور در حال تحلیل استفاده می‌شود و در ادامه با جزئیات شرح داده شده است\&. \fIopt\fPها برای فرم «\fB\-\fP\fB\-\fP\&» در غیر این صورت همان گزینه‌های فرم نخست هستند\&. توجه داشته باشید که «\fB\-s\fP\&» پس از «\fB\-\fP\fB\-\fP» معنایی متمایز از «\fB\-s\fP» پیش از «\fB\-\fP\fB\-\fP\&» دارد و هر دو می‌توانند حضور داشته باشند\&. .PP گزینه‌های سوییچ \fB\-s\fP، \fB\-S\fP، \fB\-A\fP، \fB\-w\fP و \fB\-W\fP بر نحوهٔ تجزیهٔ گزینه‌های خط فرمانِ مورد تحلیل توسط \fB_arguments\fP تأثیر می‌گذارند\&. این سوییچ‌ها برای دستورهایی با تجزیهٔ آرگومان استاندارد مفید هستند\&. .PP گزینه‌های \fB_arguments\fP دارای معانی زیر هستند: .PP .PD 0 .TP .PD \fB\-n\fP با این گزینه، \fB_arguments\fP پارامتر \fBNORMARG\fP را روی موقعیت نخستین آرگومان عادی در آرایهٔ \fB$words\fP قرار می‌دهد، یعنی موقعیت پس از پایان گزینه‌ها\&. اگر به آن آرگومان نرسیده باشد، \fBNORMARG\fP روی \fB\-1\fP تنظیم می‌شود\&. در صورتی که گزینهٔ \fB\-n\fP ارسال شود، فراخواننده باید «\fBinteger NORMARG\fP\&» را اعلان کند؛ در غیر این صورت از پارامتر استفاده نمی‌شود\&. .TP \fB\-s\fP فعال‌سازی \fIپشته‌سازی گزینه‌ها (option stacking)\fP برای گزینه‌های تک‌حرفی، که به موجب آن چندین گزینهٔ تک‌حرفی می‌توانند در یک کلمه ترکیب شوند\&. برای نمونه، دو گزینهٔ «\fB\-x\fP\&» و «\fB\-y\fP» می‌توانند در یک کلمهٔ واحد «\fB\-xy\fP\&» ترکیب شوند\&. به‌طور پیش‌فرض، هر کلمه با یک نام گزینهٔ منفرد متناظر است («\fB\-xy\fP\&» یک گزینهٔ منفرد با نام «\fBxy\fP» است)\&. .RS.PP گزینه‌هایی که با یک خط تیره یا علامت مثبت آغاز می‌شوند، واجد شرایط انباشتگی (stacking) هستند؛ کلماتی که با دو خط تیره آغاز می‌شوند واجد شرایط نیستند\&. .PP توجه داشته باشید که \fB\-s\fP پس از \fB\-\fP\fB\-\fP معنای متفاوتی دارد که در بخش با عنوان `استخراج شکل‌های \fIspec\fP از خروجی راهنما\&' مستند شده است\&. .RE .TP \fB\-w\fP در ترکیب با \fB\-s\fP، امکان انباشتگی گزینه‌ها را حتی در صورتی که یک یا چند مورد از گزینه‌ها آرگومان بپذیرند فراهم می‌کند\&. برای مثال، اگر \fB\-x\fP یک آرگومان بپذیرد، بدون \fB\-s\fP، مقدار `\fB\-xy\fP\&' به عنوان یک گزینه واحد (پردازش‌نشده) در نظر گرفته می‌شود؛ با \fB\-s\fP، مقدار \fB\-xy\fP گزینه‌ای با آرگومان `\fBy\fP\&' خواهد بود؛ با وجود هر دو گزینه \fB\-s\fP و \fB\-w\fP، مقدار \fB\-xy\fP شامل گزینه \fB\-x\fP و گزینه \fB\-y\fP است که آرگومان‌های مربوط به \fB\-x\fP (و در صورت آرگومان‌پذیر بودن، مربوط به \fB\-y\fP) همچنان باید در کلمات بعدی بیایند\&. .TP \fB\-W\fP این گزینه قابلیت \fB\-w\fP را یک مرحله جلوتر می‌برد: تکمیل گزینه‌های تک‌حرفی حتی پس از آرگومانی که در همان کلمه آمده است ممکن می‌شود\&. با این حال، تکمیل واقعی گزینه‌ها در این نقطه به کنش (action) انجام‌شده بستگی دارد\&. برای کنترل بیشتر، از یک تابع کمکی مانند \fB_guard\fP به عنوان بخشی از کنش استفاده کنید\&. .TP \fB\-C\fP پارامتر \fBcurcontext\fP را برای کنشی به فرم `\fB\->\fP\fIstate\fP\&' تغییر می‌دهد\&. این موضوع در ادامه با جزئیات بررسی شده است\&. .TP \fB\-R\fP هنگامی که قرار است یک \fB$state\fP در نحو `\fB\->\fP\fIstring\fP\&' پردازش شود، به جای صفر، وضعیت خروج ۳۰۰ را بازمی‌گرداند\&. .TP \fB\-S\fP پس از ظاهر شدن `\fB\-\fP\fB\-\fP\&' در خط، گزینه‌ها را تکمیل نمی‌کند، و `\fB\-\fP\fB\-\fP\&' را نادیده می‌گیرد\&. برای مثال، با \fB\-S\fP، در خط .RS .PP .RS .nf \fBfoobar \-x \-\- \-y\fP .fi .RE .PP عبارت `\fB\-x\fP\&' یک گزینه محسوب می‌شود، `\fB\-y\fP' یک آرگومان در نظر گرفته می‌شود، و `\fB\-\fP\fB\-\fP\&' هیچ‌کدام تلقی نمی‌شود\&. .RE .TP \fB\-A\fP \fIpat\fP پس از نخستین آرگومان غیرگزینه‌ای در خط، گزینه‌ها را تکمیل نمی‌کند\&. \fIpat\fP الگویی است که با تمامی رشته‌هایی که نباید به عنوان آرگومان در نظر گرفته شوند مطابقت می‌کند\&. برای نمونه، جهت متوقف کردن تکمیل گزینه‌ها توسط \fB_arguments\fP پس از نخستین آرگومان عادی، اما نادیده گرفتن تمام رشته‌هایی که با خط تیره آغاز می‌شوند حتی اگر توسط یکی از \fIoptspec\fPها تعریف نشده باشند، فرم مورد استفاده `\fB\-A "\-*"\fP\&' است\&. .TP \fB\-O\fP \fIname\fP عناصر آرایه \fIname\fP را به عنوان آرگومان به توابعی که برای اجرای \fIaction\fPها فراخوانی می‌شوند ارسال می‌کند\&. این موضوع در ادامه با جزئیات بررسی شده است\&. .TP \fB\-M\fP \fImatchspec\fP از مشخصات تطابق \fImatchspec\fP برای تکمیل نام‌ها و مقادیر گزینه‌ها استفاده می‌کند\&. مشخصات تطابق پیش‌فرض امکان تکمیل بخشی از کلمه را پس از `\fB_\fP\&' و `\fB\-\fP\&' فراهم می‌سازد، مانند تکمیل `\fB\-f\-b\fP' به `\fB\-foo\-bar\fP'\&. مقدار پیش‌فرض \fImatchspec\fP عبارت است از: .RS .nf \fB\fBr:|[_\-]=* r:|=*\fP\fP .fi .RE .TP \fB\-0\fP هنگام مقداردهی به مقادیر آرایه انجمنی `\fBopt_args\fP\&'، از گریز دادن دو نقطه‌ها و خط‌های مورب وارو با بک‌اسلش خودداری کرده و از NUL به جای دو نقطه برای اتصال مقادیر چندگانه استفاده می‌کند\&. این گزینه در ادامه با جزئیات بیشتر تحت عنوان \fI\fIspec\fPs: actions\fP توضیح داده شده است\&. .PP \fI\fIspec\fPها: نمای کلی\fP .PP هر یک از قالب‌های زیر یک \fIspec\fP است که مجموعه‌های مجزایی از گزینه‌ها یا آرگومان‌ها را در خط فرمانِ در حال تجزیه توصیف می‌کند\&. .PP .PD 0 .TP .PD 0 \fIn\fP\fB:\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD \fIn\fP\fB::\fP\fImessage\fP\fB:\fP\fIaction\fP این مورد آرگومان عادی \fIn\fPام را توصیف می‌کند\&. پیام \fImessage\fP در بالای تطابق‌های تولیدشده چاپ خواهد شد و \fIaction\fP نشان‌دهنده چیزی است که می‌تواند در این موقعیت تکمیل شود (به پایین مراجعه کنید)\&. اگر دو علامت دو نقطه قبل از \fImessage\fP قرار گیرد، آرگومان اختیاری است\&. اگر \fImessage\fP فقط شامل فضای خالی باشد، هیچ چیزی در بالای تطابق‌ها چاپ نخواهد شد مگر اینکه خود کنش یک رشته توضیحی اضافه کند\&. .TP .PD 0 \fB:\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD \fB::\fP\fImessage\fP\fB:\fP\fIaction\fP مشابه حالت قبل است، اما آرگومان \fIبعدی\fP را با هر شماره‌ای که باشد توصیف می‌کند\&. اگر همه آرگومان‌ها به این شکل و با ترتیب صحیح مشخص شوند، نیازی به ذکر شماره‌ها نخواهد بود\&. .TP .PD 0 \fB*:\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD 0 \fB*::\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD \fB*:::\fP\fImessage\fP\fB:\fP\fIaction\fP این مورد چگونگی تکمیل آرگومان‌ها (معمولاً آرگومان‌های غیرگزینه‌ای، آن‌هایی که با \fB\-\fP یا \fB+\fP آغاز نمی‌شوند) را در زمانی که هیچ‌یک از دو شکل اول ارائه نشده باشند، توصیف می‌کند\&. هر تعداد آرگومان را می‌توان به این شیوه تکمیل کرد\&. .RS .PP با وجود دو علامت دو نقطه قبل از \fImessage\fP، آرایه ویژه \fBwords\fP و پارامتر ویژه \fBCURRENT\fP هنگام اجرا یا ارزیابی \fIaction\fP تغییر می‌یابند تا فقط به آرگومان‌های عادی اشاره کنند\&. با وجود سه علامت دو نقطه قبل از \fImessage\fP، آن‌ها تغییر می‌یابند تا فقط به آرگومان‌های عادی پوشش‌داده‌شده توسط این توصیف اشاره کنند\&. .RE .TP .PD 0 \fIoptspec\fP .TP .PD \fIoptspec\fP\fB:\fP\fI\&.\&.\&.\fP این مورد یک گزینه را توصیف می‌کند\&. علامت دو نقطه نشان‌دهنده پردازش یک یا چند آرگومان برای گزینه است؛ اگر وجود نداشته باشد، فرض می‌شود که گزینه هیچ آرگومانی نمی‌پذیرد\&. .RS .PP قالب‌های زیر برای \fIoptspec\fP اولیه در دسترس هستند، صرف‌نظر از اینکه گزینه دارای آرگومان باشد یا خیر\&. .PP .PD 0 .TP .PD \fB*\fP\fIoptspec\fP در اینجا \fIoptspec\fP یکی از قالب‌های باقی‌مانده در زیر است\&. این مورد نشان می‌دهد که \fIoptspec\fP بعدی ممکن است تکرار شود\&. در غیر این صورت، اگر گزینه مربوطه از قبل در سمت چپ مکان‌نما در خط فرمان وجود داشته باشد، دوباره پیشنهاد نخواهد شد\&. .TP .PD 0 \fB\-\fP\fIoptname\fP .TP .PD \fB+\fP\fIoptname\fP در ساده‌ترین حالت، \fIoptspec\fP تنها نام گزینه است که با علامت منفی یا مثبت آغاز می‌شود، مانند `\fB\-foo\fP\&'\&. نخستین آرگومان برای گزینه (در صورت وجود) باید به عنوان کلمه‌ای \fIجداگانه\fP مستقیماً پس از گزینه قرار گیرد\&. .RS .PP هر یک از عبارات `\fB\-+\fP\fIoptname\fP\&' و `\fB+\-\fP\fIoptname\fP' را می‌توان برای تعیین اینکه هر دوی \fB\-\fP\fIoptname\fP و \fB+\fP\fIoptname\fP معتبر هستند به کار برد\&. .PP در تمامی قالب‌های باقی‌مانده، علامت `\fB\-\fP\&' ابتدایی می‌تواند با `\fB+\fP\&' جایگزین شده یا به همین صورت با آن جفت شود\&. .RE .TP \fB\-\fP\fIoptname\fP\fB\-\fP نخستین آرگومان گزینه باید مستقیماً پس از نام گزینه و \fIدر همان کلمه\fP بیاید\&. برای نمونه، `\fB\-foo\-:\fP\fI\&.\&.\&.\fP\&' مشخص می‌کند که گزینه و آرگومان تکمیل‌شده شبیه `\fB\-foo\fP\fIarg\fP\&' خواهند بود\&. .TP \fB\-\fP\fIoptname\fP\fB+\fP نخستین آرگومان می‌تواند بلافاصله پس از \fIoptname\fP در همان کلمه ظاهر شود، یا به عنوان کلمه‌ای جداگانه بعد از گزینه بیاید\&. برای نمونه، `\fB\-foo+:\fP\fI\&.\&.\&.\fP\&' مشخص می‌کند که گزینه و آرگومان تکمیل‌شده به یکی از صورت‌های `\fB\-foo\fP\fIarg\fP\&' یا `\fB\-foo\fP \fIarg\fP' خواهند بود\&. .TP \fB\-\fP\fIoptname\fP\fB=\fP آرگومان می‌تواند به عنوان کلمه بعدی ظاهر شود، یا در همان کلمه نام گزینه قرار گیرد به شرطی که با یک علامت مساوی از آن جدا شده باشد، برای نمونه `\fB\-foo=\fP\fIarg\fP\&' یا `\fB\-foo\fP \fIarg\fP'\&..TP \fB\-\fP\fIoptname\fP\fB=\-\fP آرگومان مربوط به این گزینه باید پس از یک علامت مساوی در همان کلمه بیاید، و نمی‌تواند در آرگومان بعدی داده شود\&. .TP \fIoptspec\fP\fB[\fP\fIexplanation\fP\fB]\fP یک رشته توضیح می‌تواند با قرار گرفتن در قلاب‌ها (کروشه‌ها) به هر یک از صورت‌های قبلی \fIoptspec\fP اضافه شود، مانند `\fB\-q[query operation]\fP\&'\&. .RS .PP سبک \fBverbose\fP برای تصمیم‌گیری درباره اینکه آیا رشته‌های توضیح به همراه گزینه در فهرست کامل‌سازی نمایش داده شوند یا خیر به کار می‌رود\&. .PP اگر هیچ رشته توضیحی در داخل قلاب داده نشده باشد اما سبک \fBauto\-description\fP تنظیم شده باشد و تنها یک آرگومان برای این \fIoptspec\fP شرح داده شده باشد، مقدار این سبک نمایش داده می‌شود، به طوری که هر بار مشاهده توالی `\fB%d\fP\&' در آن با \fImessage\fP اولین \fIoptarg\fP که پس از \fIoptspec\fP می‌آید جایگزین می‌گردد؛ پایین‌تر را ببینید\&. .RE .PP امکان وجود گزینه‌هایی با نویسه لفظی `\fB+\fP\&' یا `\fB=\fP' وجود دارد، اما آن نویسه باید نقل‌قول (اسکیپ) شود، برای نمونه `\fB\-\e+\fP\&'\&. .PP هر \fIoptarg\fP که پس از یک \fIoptspec\fP می‌آید باید یکی از صورت‌های زیر را داشته باشد: .PP .PD 0 .TP .PD 0 \fB:\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD \fB::\fP\fImessage\fP\fB:\fP\fIaction\fP یک آرگومان برای گزینه؛ با \fImessage\fP و \fIaction\fP مانند آرگومان‌های معمولی رفتار می‌شود\&. در صورت نخست، آرگومان اجباری است، و در صورت دوم اختیاری است\&. .RS .PP این گروه ممکن است برای گزینه‌هایی که چندین آرگومان می‌پذیرند تکرار شود\&. به بیان دیگر، \fB:\fP\fImessage1\fP\fB:\fP\fIaction1\fP\fB:\fP\fImessage2\fP\fB:\fP\fIaction2\fP مشخص می‌کند که گزینه دو آرگومان می‌گیرد\&. .RE .TP .PD 0 \fB:*\fP\fIpattern\fP\fB:\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD 0 \fB:*\fP\fIpattern\fP\fB::\fP\fImessage\fP\fB:\fP\fIaction\fP .TP .PD \fB:*\fP\fIpattern\fP\fB:::\fP\fImessage\fP\fB:\fP\fIaction\fP این مورد چندین آرگومان را توصیف می‌کند\&. تنها آخرین \fIoptarg\fP برای گزینه‌ای که چندین آرگومان می‌پذیرد می‌تواند در این صورت داده شود\&. اگر \fIpattern\fP خالی باشد (یعنی \fB:*:\fP)، تمام کلمه‌های باقی‌مانده در خط باید به گونه‌ای که توسط \fIaction\fP شرح داده شده کامل شوند؛ در غیر این صورت، تمام کلمه‌ها تا و شامل کلمه‌ای که با \fIpattern\fP تطابق دارد باید با استفاده از \fIaction\fP کامل‌سازی شوند\&. .RS .PP با دونقطه‌های چندگانه مانند حالت‌های `\fB*:\fP\fI\&.\&.\&.\fP\&' برای آرگومان‌های معمولی رفتار می‌شود: هنگامی که قبل از \fImessage\fP دو دونقطه آمده باشد، آرایه ویژه \fBwords\fP و پارامتر ویژه \fBCURRENT\fP در طول اجرا یا ارزیابی \fIaction\fP تغییر می‌یابند تا تنها به کلمه‌های پس از گزینه ارجاع دهند\&. هنگامی که سه دونقطه قبل از آن باشد، آن‌ها تغییر می‌یابند تا تنها به کلمه‌های تحت پوشش این توصیف اشاره نمایند\&. .RE .RE .PP هر دونقطه لفظی در یک \fIoptname\fP، \fImessage\fP یا \fIaction\fP باید با یک بک‌اسلش پیشوند شود، `\fB\e:\fP\&'\&. .PP هر یک از صورت‌های بالا می‌تواند با فهرستی در پرانتز شامل نام‌های گزینه و شماره‌های آرگومان آغاز شود\&. اگر گزینه داده‌شده در خط فرمان باشد، گزینه‌ها و آرگومان‌های مشخص‌شده در پرانتز پیشنهاد نخواهند شد\&. برای نمونه، `\fB(\-two \-three 1)\-one:\fP\fI\&.\&.\&.\fP\&' گزینه `\fB\-one\fP' را کامل می‌کند؛ اگر این در خط فرمان ظاهر شود، گزینه‌های \fB\-two\fP و \fB\-three\fP و اولین آرگومان معمولی پس از آن کامل‌سازی نخواهند شد\&. `\fB(\-foo):\fP\fI\&.\&.\&.\fP\&' کامل‌سازی یک آرگومان معمولی را مشخص می‌کند؛ اگر آن آرگومان از پیش وجود داشته باشد، \fB\-foo\fP کامل نخواهد شد\&. .PP موارد دیگر ممکن است در فهرست گزینه‌های مستثنی‌شده ظاهر شوند تا موارد مختلف دیگری را نشان دهند که هنگام مطابقت با مشخصه کنونی نباید اعمال شوند: یک ستاره تنها (\fB*\fP) برای آرگومان‌های باقیمانده (یعنی مشخصه‌ای به صورت `\fB*:\fP\fI\&.\&.\&.\fP\&')؛ یک دونقطه (\fB:\fP) برای تمام آرگومان‌های عادی (غیر گزینه)؛ و یک خط تیره (\fB\-\fP) برای تمام گزینه‌ها\&. برای نمونه، اگر `\fB(*)\fP\&' قبل از یک گزینه بیاید و آن گزینه در خط فرمان ظاهر شود، فهرست آرگومان‌های باقی‌مانده (آن‌هایی که در جدول بالا نشان داده شده و با `\fB*:\fP\&' شروع می‌شوند) کامل‌سازی نخواهند شد\&. .PP برای کمک به استفاده مجدد از مشخصه‌ها، می‌توان قبل از هر یک از صورت‌های بالا یک `\fB!\fP\&' قرار داد؛ آن‌گاه آن صورت دیگر کامل نخواهد شد، هرچند اگر گزینه یا آرگومان در خط فرمان ظاهر شود، طبق معمول نادیده گرفته می‌شوند\&. کاربرد اصلی این ویژگی زمانی است که آرگومان‌ها توسط یک آرایه داده شوند و \fB_arguments\fP مکرراً برای زمینه‌های خاص‌تر فراخوانی شود: در اولین فراخوانی `\fB_arguments $global_options\fP\&' به کار می‌رود، و در فراخوانی‌های بعدی `\fB_arguments !$^global_options\fP\&'\&. .PP \fI\fIspec\fPها: \fIaction\fPها\fP .PP در هر یک از صورت‌های بالا، \fIaction\fP تعیین می‌کند که کامل‌سازی‌ها چگونه باید تولید شوند\&. به جز صورت `\fB\->\fP\fIstring\fP\&' در زیر، \fIaction\fP با فراخوانی تابع \fB_all_labels\fP برای پردازش تمام برچسب‌های tag اجرا خواهد شد\&. هیچ رسیدگی خاصی به برچسب‌ها نیاز نیست مگر اینکه یک فراخوانی تابع، برچسب جدیدی معرفی کند\&. .PP توابعی که برای اجرای \fIaction\fPها فراخوانی می‌شوند، با عنصرهای آرایه‌ای که توسط گزینه `\fB\-O\fP \fIname\fP\&' نام‌گذاری شده است به عنوان آرگومان فراخوانی خواهند شد\&. برای نمونه این می‌تواند برای ارسال همان مجموعه گزینه‌ها برای دستور توکار \fBcompadd\fP به تمام \fIaction\fPها استفاده شود\&. .PP صورت‌های \fIaction\fP به شرح زیر هستند\&. .PP .PD 0 .TP .PD \fB \fP(یک فاصله تکی بدون نقل‌قول) این در مواردی مفید است که یک آرگومان مورد نیاز است اما تولید تطابق‌ها برای آن ممکن یا مطلوب نیست\&. \fImessage\fP نمایش داده خواهد شد اما هیچ کامل‌سازی‌ای فهرست نمی‌شود\&. توجه داشته باشید که حتی در این مورد نیز دونقطه در پایان \fImessage\fP مورد نیاز است؛ این دونقطه تنها زمانی می‌تواند حذف شود که نه \fImessage\fP و نه \fIaction\fP داده نشده باشد\&. .TP \fB(\fP\fIitem1\fP \fIitem2\fP \fI\&.\&.\&.\fP\fB)\fP یکی از موارد از فهرستی از تطابق‌های ممکن، برای نمونه: .RS .PP .RS .nf \fB\fB:foo:(foo bar baz\fP\fB)\fP\fP .fi .RE .RE .TP \fB((\fIitem1\fP\e:\fIdesc1\fP \fI\&.\&.\&.\fP))\fP مشابه مورد بالا، اما با توضیحات برای هر تطابق ممکن\&. به بک‌اسلش قبل از دونقطه توجه کنید\&. برای نمونه، .RS .PP .RS .nf \fB\fB:foo:((a\e:bar b\e:baz\fP\fB))\fP\fP .fi .RE .PP اگر سبک \fBdescription\fP همراه با تگ \fBvalues\fP در زمینه تنظیم شده باشد، تطابق‌ها همراه با توضیحاتشان فهرست خواهند شد\&. .RE .TP \fB\->\fP\fIstring\fP در این صورت، \fB_arguments\fP آرگومان‌ها و گزینه‌ها را پردازش کرده و سپس کنترل را با پارامترهایی تنظیم‌شده که وضعیت پردازش را نشان می‌دهند، به تابع فراخوان بازمی‌گرداند؛ سپس تابع فراخوان تمهیدات لازم خود را برای تولید کامل‌سازی‌ها به کار می‌بندد\&. برای نمونه، توابعی که یک ماشین وضعیت را پیاده‌سازی می‌کنند می‌توانند از این نوع کنش استفاده کنند\&. .RS .PP جایی که \fB_arguments\fP با \fIaction\fP در قالب `\fB\->\fP\fIstring\fP\&' مواجه می‌شود، تمام فاصله‌های خالی ابتدا و انتهای \fIstring\fP را حذف کرده و آرایه \fBstate\fP را برابر با مجموعه‌ای از تمام \fIstring\fPهایی که باید برای آن‌ها یک کنش انجام شود تنظیم می‌کند\&. به عنصرهای آرایه \fBstate_descr\fP فیلد \fImessage\fP متناظر از هر \fIoptarg\fP دارای چنین \fIaction\fPی اختصاص می‌یابد\&. .PP به‌طور پیش‌فرض و همگام با تمام دیگر توابع خوش‌رفتار کامل‌سازی، _arguments در صورتی که قادر به افزودن تطابق‌ها باشد وضعیت صفر و در غیر این صورت مقداری غیرصفر را بازمی‌گرداند\&. با این حال، اگر گزینه \fB\-R\fP داده شده باشد، \fB_arguments\fP در عوض وضعیت 300 را بازمی‌گرداند تا نشان دهد که \fB$state\fP باید مدیریت شود\&. .PP علاوه بر \fB$state\fP و \fB$state_descr\fP، دستور \fB_arguments\fP همچنین پارامترهای سراسری `\fBcontext\fP\&'، `\fBline\fP' و `\fBopt_args\fP' را همان‌طور که در زیر شرح داده شده است مقداردهی می‌کند، و هیچ‌یک از تغییرات اعمال‌شده بر پارامترهای ویژه مانند \fBPREFIX\fP و \fBwords\fP را بازنشانی نمی‌کند\&. این امر به تابع فراخوان حق انتخاب می‌دهد که این پارامترها را بازنشانی کند یا تغییرات آن‌ها را انتشار دهد\&..PP بنابراین تابعی که \fB_arguments\fP را با حداقل یک کنش (action) حاوی `\fB\->\fP\fIstring\fP\&' فراخوانی می‌کند، باید متغیرهای محلی مناسب را اعلان نماید: .PP .RS .nf \fBlocal context state state_descr line typeset \-A opt_args\fP .fi .RE .PP تا از تغییر محیط سراسری (global environment) توسط \fB_arguments\fP جلوگیری به عمل آید\&. .RE .TP \fB{\fP\fIeval\-string\fP\fB}\fP رشته‌ای در میان آکولاد به عنوان کد شل ارزیابی می‌شود تا موارد منطبق را تولید کند\&. این شبیه به کنش `\fB \fP\fIword\fP \fI\&.\&.\&.\fP\&' است که در زیر شرح داده شده، اما محدود به یک دستور منفرد نیست\&. .TP \fB= \fP\fIaction\fP اگر \fIaction\fP با `\fB= \fP\&' (یک علامت مساوی به همراه یک فاصله) آغاز شود، \fB_arguments\fP محتوای فیلد \fIargument\fP از بافت فعلی را به عنوان نخستین عنصر جدید در آرایه ویژه \fBwords\fP درج کرده و مقدار پارامتر ویژه \fBCURRENT\fP را افزایش می‌دهد\&. این کار اثر درج یک کلمه صوری (dummy word) در خط دستور کامل‌سازی را بدون تغییر دادن نقطه‌ای که کامل‌سازی در آن رخ می‌دهد، به همراه دارد\&. .RS .PP این قابلیت بیشترین کاربرد را در کنار مشخص‌کننده‌هایی دارد که کلمات خط دستور را که قرار است \fIaction\fP روی آن‌ها عمل کند محدود می‌سازند (حالت‌های دو دونقطه و سه دونقطه در بالا)\&. یک کاربرد ویژه زمانی است که خودِ یک \fIaction\fP موجب فراخوانی \fB_arguments\fP روی یک محدوده محدودشده شود؛ استفاده از این ترفند برای درج یک نام دستور مناسب در محدوده الزامی است تا فراخوانی دوم به \fB_arguments\fP بتواند خط را تجزیه کند\&. .RE .TP .PD 0 \fB \fP\fIword\fP \fI\&.\&.\&.\fP .TP .PD \fIword\fP \fI\&.\&.\&.\fP این حالت تمام فرم‌های دیگر به جز موارد فوق را پوشش می‌دهد\&. اگر \fIaction\fP با یک فاصله آغاز شود، فهرست باقی‌مانده کلمات بدون تغییر فراخوانی خواهند شد\&. .RS .PP در غیر این صورت، با چند رشته اضافی که پس از کلمه اول قرار می‌گیرند فراخوانی می‌شود؛ این رشته‌ها باید به عنوان گزینه‌هایی به دستور توکار \fBcompadd\fP ارسال شوند\&. آن‌ها اطمینان حاصل می‌کنند وضعیتی که توسط \fB_arguments\fP تعیین شده، به ویژه توضیحات گزینه‌ها و آرگومان‌ها، به درستی به دستور کامل‌سازی منتقل گردد\&. این آرگومان‌های اضافی از پارامتر آرایه‌ای `\fBexpl\fP\&' گرفته می‌شوند؛ این پارامتر پیش از اجرای \fIaction\fP تنظیم خواهد شد و از این رو می‌توان در داخل آن بدان ارجاع داد، معمولاً در بسطی به فرم `\fB$expl[@]\fP\&' که عناصر خالی آرایه را حفظ می‌کند\&. .RE .PP در حین اجرای کنش، آرایه `\fBline\fP\&' با آرگومان‌های عادی خط دستور مقداردهی می‌شود، یعنی کلمات خط دستور پس از نام دستور به استثنای تمام گزینه‌ها و آرگومان‌های آن‌ها\&. گزینه‌ها در آرایه انجمنی `\fBopt_args\fP\&' با نام گزینه‌ها به عنوان کلید و آرگومان‌های آن‌ها به عنوان مقدار ذخیره می‌شوند\&. به طور پیش‌فرض، تمام دونقطه‌ها و بک‌اسلش‌ها در مقدار، با بک‌اسلش گریز داده می‌شوند (escaped)، و اگر یک گزینه دارای چند آرگومان باشد (برای نمونه، هنگام استفاده از یک \fIoptspec\fP به فرم `\fB*\fP\fIoptspec\fP\&')، آن‌ها با دونقطه (بدون گریز) به هم متصل می‌شوند\&. با این حال، اگر گزینه \fB\-0\fP داده شده باشد، هیچ گریزی با بک‌اسلش انجام نمی‌گیرد و مقادیر چندگانه با بایت‌های NUL به هم وصل می‌شوند\&. برای نمونه، پس از `\fBzsh \-o foo:foo \-o bar:bar \-o \fP\&'، محتوای `\fBopt_args\fP\&' .PP .RS .nf \fBtypeset \-A opt_args=( [\-o]=\&'foo\e:foo:bar\e:bar:' )\fP .fi .RE .PP به طور پیش‌فرض، و .PP .RS .nf \fBtypeset \-A opt_args=( [\-o]=$\&'foo:foo\ex00bar:bar\ex00' )\fP .fi .RE .PP در صورتی خواهد بود که \fB_arguments\fP با گزینه \fB\-0\fP فراخوانی شده باشد\&. .PP پارامتر `\fBcontext\fP\&' هنگام بازگشت به تابع فراخواننده برای انجام کنشی به فرم `\fB\->\fP\fIstring\fP\&' تنظیم می‌شود\&. این پارامتر با آرایه‌ای از عناصر متناظر با عناصر \fB$state\fP مقداردهی می‌گردد\&. هر عنصر، نامی مناسب برای فیلد آرگومان در بافت (context) است: یا رشته‌ای به فرم `\fBoption\fP\fI\-opt\fP\fB\-\fP\fIn\fP\&' برای \fIn\fPاُمین آرگومان از گزینه \fI\-opt\fP، یا رشته‌ای به فرم `\fBargument\-\fP\fIn\fP\&' برای \fIn\fPاُمین آرگومان\&. برای آرگومان‌های باقی‌مانده («rest»)، یعنی آن‌هایی که در انتهای فهرست هستند و بر اساس موقعیت پردازش نمی‌شوند، \fIn\fP رشته `\fBrest\fP\&' خواهد بود\&. برای نمونه، هنگام کامل‌سازی آرگومان گزینه \fB\-o\fP، این نام `\fBoption\-o\-1\fP\&' است، در حالی که برای دومین آرگومان عادی (غیر از گزینه) `\fBargument\-2\fP\&' خواهد بود\&. .PP علاوه بر این، در طول ارزیابی \fIaction\fP، نام بافت در پارامتر \fBcurcontext\fP تغییر می‌یابد تا همان رشته‌ای که در پارامتر \fBcontext\fP ذخیره شده است به انتهای آن افزوده شود\&. .PP گزینه \fB\-C\fP به \fB_arguments\fP اعلام می‌کند که پارامتر \fBcurcontext\fP را برای کنشی به فرم `\fB\->\fP\fIstate\fP\&' تغییر دهد\&. این، پارامتر استانداردی است که برای پیگیری بافت فعلی به کار می‌رود\&. در اینجا این متغیر (و نه آرایه \fBcontext\fP) باید برای تابع فراخواننده محلی (local) شود تا از پس دادن مقدار تغییریافته جلوگیری شود، و در آغاز تابع باید با مقدار فعلی مقداردهی اولیه گردد: .PP .RS .nf \fBlocal curcontext="$curcontext"\fP .fi .RE .PP این مورد در جایی مفید است که امکان معتبر بودن هم‌زمان چندین وضعیت با یکدیگر وجود ندارد\&. .PP \fIگروه‌بندی گزینه‌ها (Grouping Options)\fP .PP گزینه‌ها را می‌توان برای ساده‌سازی فهرست‌های استثنا گروه‌بندی کرد\&. یک گروه با `\fB+\fP\&' و به دنبال آن نام گروه در کلمه بعدی معرفی می‌شود\&. سپس می‌توان در یک فهرست استثنا به کل گروه‌ها ارجاع داد، یا از یک نام گروه برای ابهام‌زدایی میان دو فرم از یک گزینه مشابه استفاده کرد\&. برای نمونه: .PP .RS .nf \fB_arguments \e \&'(group2\-\-x)\-a' \e + group1 \e \-m \e \&'(group2)\-n' \e + group2 \e \-x \-y\fP .fi .RE .PP اگر نام یک گروه به فرم `\fB(\fP\fIname\fP\fB)\fP\&' تعیین شود، در این صورت تنها یک مقدار از آن گروه در هر زمان کامل‌سازی خواهد شد؛ به بیان دقیق‌تر، تمام مشخصه‌ها نسبت به سایر مشخصه‌های موجود در آن گروه مانعة‌الجمع (mutually exclusive) هستند\&. این برای تعریف گزینه‌هایی که نام مستعار (alias) یکدیگرند مفید است\&. برای نمونه: .PP .RS .nf \fB_arguments \e \-a \-b \e + \&'(operation)' \e {\-c,\-\-compress}\&'[compress]' \e {\-d,\-\-decompress}\&'[decompress]' \e {\-l,\-\-list}\&'[list]'\fP .fi .RE .PP اگر گزینه‌ای در یک گروه روی خط دستور ظاهر شود، در آرایه انجمنی `\fBopt_args\fP\&' با کلید '\fIgroup\fP\fB\-\fP\fIoption\fP' ذخیره می‌گردد\&. در مثال بالا، در صورتی که گزینه `\fB\-c\fP\&' روی خط دستور حضور داشته باشد، کلید `\fBoperation\-\-c\fP\&' استفاده می‌شود\&. .PP \fIتعیین مجموعه‌های چندگانه آرگومان‌ها (Specifying Multiple Sets of Arguments)\fP .PP تعیین چندین مجموعه از گزینه‌ها و آرگومان‌ها در حالی که مجموعه‌ها با خط‌تیره‌های تکی از یکدیگر جدا شده‌اند امکان‌پذیر است\&. تفاوت این حالت با گروه‌ها در این است که مجموعه‌ها نسبت به یکدیگر مانعة‌الجمع در نظر گرفته می‌شوند\&. .PP مشخصه‌های پیش از اولین مجموعه و مشخصه‌های برگرفته از هر گروه، برای تمام مجموعه‌ها مشترک هستند\&. برای نمونه: .PP .RS .nf \fB_arguments \e \-a \e \- set1 \e \-c \e \- set2 \e \-d \e \&':arg:(x2 y2)'\fP .fi .RE.PP این، دو مجموعه را تعریف می‌کند\&. هنگامی که خط فرمان شامل گزینهٔ `\fB\-c\fP\&' باشد، گزینهٔ `\fB\-d\fP' و آرگومان به عنوان تکمیل‌های احتمالی در نظر گرفته نخواهند شد\&. هنگامی که شامل `\fB\-d\fP\&' یا یک آرگومان باشد، گزینهٔ `\fB\-c\fP\&' در نظر گرفته نخواهد شد\&. با این حال، پس از `\fB\-a\fP' هر دو مجموعه همچنان معتبر تلقی خواهند شد\&. .PP همانند گروه‌ها، نام یک مجموعه می‌تواند در فهرست‌های استثنا (exclusion lists) ظاهر شود؛ چه به تنهایی یا پیش از مشخصهٔ یک گزینه یا آرگومان عادی\&. .PP کد تکمیل باید خط فرمان را برای هر مجموعه به طور جداگانه تجزیه کند\&. این کار می‌تواند کند باشد، بنابراین مجموعه‌ها تنها باید در صورت لزوم استفاده شوند\&. یک جایگزین مفید اغلب مشخصهٔ گزینه‌ای به همراه rest\-arguments است (مانند `\fB\-foo:*:\&.\&.\&.\fP\&')؛ در اینجا گزینهٔ \fB\-foo\fP تمام آرگومان‌های باقیمانده را طبق تعاریف \fIoptarg\fP می‌بلعد\&. .PP \fIاستخراج فرم‌های \fIspec\fP از خروجی راهنما\fP .PP گزینهٔ `\fB\-\fP\fB\-\fP\&' به \fB_arguments\fP امکان می‌دهد تا نام گزینه‌های طولانی را که از گزینهٔ `\fB\-\fP\fB\-help\fP\&' (که در بسیاری از دستورهای GNU استاندارد است) پشتیبانی می‌کنند، استخراج کند\&. کلمهٔ دستور با آرگومان `\fB\-\fP\fB\-help\fP\&' فراخوانی شده و خروجی آن برای نام گزینه‌ها بررسی می‌شود\&. مشخصاً، ارسال این مورد به دستورهایی که ممکن است از این گزینه پشتیبانی نکنند می‌تواند خطرناک باشد چرا که رفتار دستور نامشخص است\&. .PP علاوه بر گزینه‌ها، `\fB_arguments \-\fP\fB\-\fP\&' تلاش خواهد کرد تا در صورت معتبر بودن فرم `\fB\-\fP\fB\-\fP\fIopt\fP\fB=\fP\fIval\fP\&'، انواع آرگومان‌های در دسترس برای گزینه‌ها را استنتاج کند\&. همچنین می‌توان با بررسی متن راهنمای دستور و افزودن \fIhelpspec\fP به فرم `\fIpattern\fP\fB:\fP\fImessage\fP\fB:\fP\fIaction\fP\&' نکاتی راهنما ارائه کرد؛ توجه داشته باشید که سایر فرم‌های \fIspec\fP در \fB_arguments\fP استفاده نمی‌شوند\&. الگوی \fIpattern\fP با متن راهنمای یک گزینه تطبیق داده می‌شود، و در صورت تطابق، \fImessage\fP و \fIaction\fP مانند سایر مشخص‌کننده‌های آرگومان استفاده می‌شوند\&. حالت خاص `\fB*:\fP\&' به این معناست که هر دو \fImessage\fP و \fIaction\fP خالی هستند، که این امر باعث می‌شود گزینه‌های فاقد شرح در خروجی راهنما، در فهرست‌ها جلوتر از گزینه‌های دارای شرح مرتب شوند\&. .PP برای مثال: .PP .RS .nf \fB_arguments \-\- \&'*\e*:toggle:(yes no)' \e \&'*=FILE*:file:_files' \e \&'*=DIR*:directory:_files \-/' \e \&'*=PATH*:directory:_files \-/'\fP .fi .RE .PP در اینجا، `\fByes\fP\&' و `\fBno\fP' به عنوان آرگومانِ گزینه‌هایی که شرح آن‌ها به علامت ستاره ختم می‌شود تکمیل خواهند شد؛ نام‌های فایل برای گزینه‌هایی که شامل زیررشتهٔ `\fB=FILE\fP\&' در شرح خود هستند تکمیل می‌شوند؛ و دایرکتوری‌ها برای گزینه‌هایی که شرح آن‌ها حاوی `\fB=DIR\fP\&' یا `\fB=PATH\fP' است تکمیل خواهند شد\&. سه مورد آخر در واقع پیش‌فرض هستند و بنابراین نیازی به ذکر صریح آن‌ها نیست، هرچند امکان لغو و بازنویسی کاربرد این الگوها وجود دارد\&. متن راهنمای نمونه‌ای که از این قابلیت استفاده می‌کند عبارت است از: .PP .RS .nf \fB \-C, \-\-directory=DIR change to directory DIR\fP .fi .RE .PP به طوری که مشخصات فوق باعث می‌شود دایرکتوری‌ها پس از `\fB\-\fP\fB\-directory\fP\&' تکمیل شوند، هرچند پس از `\fB\-C\fP' تکمیل نخواهند شد\&. .PP همچنین توجه داشته باشید که \fB_arguments\fP سعی می‌کند به طور خودکار اختیاری بودن آرگومان یک گزینه را تشخیص دهد\&. این مورد را می‌توان با دو برابر کردن دونقطه قبل از \fImessage\fP به طور صریح مشخص کرد\&. .PP اگر \fIpattern\fP به `\fB(\-)\fP\&' ختم شود، این بخش از الگو حذف شده و \fIaction\fP تنها بلافاصله پس از `\fB=\fP\&' اعمال می‌شود، نه در کلمهٔ بعدی\&. این همان رفتار یک مشخصهٔ عادی تعریف‌شده با فرم `\fB=\-\fP\&' است\&. .PP به‌طور پیش‌فرض، دستور (همراه با گزینهٔ `\fB\-\-help\fP\&') پس از بازنشانی تمامی دسته‌بندی‌های لوکال (به‌جز \fBLC_CTYPE\fP) به `\fBC\fP\&' اجرا می‌شود\&. اگر مشخص باشد که خروجی راهنمای محلی‌شده به درستی عمل می‌کند، می‌توان گزینهٔ `\fB\-l\fP\&' را پس از `\fB_arguments \-\fP\fB\-\fP\&' مشخص کرد تا دستور در لوکال فعلی اجرا شود\&. .PP عبارت `\fB_arguments \-\fP\fB\-\fP\&' می‌تواند با گزینهٔ `\fB\-i\fP \fIpatterns\fP\&' دنبال شود تا الگوهایی را برای گزینه‌هایی که نباید تکمیل شوند ارائه دهد\&. الگوها را می‌توان به عنوان نام یک پارامتر آرایه‌ای یا به صورت یک فهرست لفظی در پرانتز مشخص کرد\&. برای مثال، .PP .RS .nf \fB_arguments \-\- \-i \e "(\-\-(en|dis)able\-FEATURE*)"\fP .fi .RE .PP باعث خواهد شد که تکمیل از گزینه‌های `\fB\-\fP\fB\-enable\-FEATURE\fP\&' و `\fB\-\fP\fB\-disable\-FEATURE\fP' صرف‌نظر کند (این مثال با \fBconfigure\fP گنو مفید است)\&. .PP فرم `\fB_arguments \-\fP\fB\-\fP\&' همچنین می‌تواند با گزینهٔ `\fB\-s\fP \fIpair\fP\&' برای توصیف نام‌های مستعار گزینه دنبال شود\&. مقدار \fIpair\fP از فهرستی از الگوهای متناوب و جایگزین‌های متناظر تشکیل شده است که درون پرانتز قرار گرفته و نقل‌قول شده‌اند به طوری که یک کلمه-آرگومان منفرد را در فراخوانی \fB_arguments\fP تشکیل دهند\&. .PP برای مثال، خروجی راهنمای برخی اسکریپت‌های \fBconfigure\fP گزینه‌ها را فقط به صورت `\fB\-\fP\fB\-enable\-foo\fP\&' توصیف می‌کند، اما اسکریپت شکل منفی `\fB\-\fP\fB\-disable\-foo\fP\&' را نیز می‌پذیرد\&. برای مجاز ساختن تکمیل شکل دوم: .PP .RS .nf \fB_arguments \-\- \-s "((#s)\-\-enable\- \-\-disable\-)"\fP .fi .RE .PP \fIنکات متفرقه\fP .PP در نهایت، توجه داشته باشید که \fB_arguments\fP عموماً انتظار دارد تابع اصلیِ مدیریت‌کنندهٔ هر تکمیلی باشد که برای آن استفاده شده است\&. ممکن است اثرات جانبی داشته باشد که نحوهٔ برخورد با هرگونه تطابق اضافه‌شده توسط سایر توابعی را که پس از آن فراخوانی می‌شوند تغییر دهد\&. برای ترکیب \fB_arguments\fP با سایر توابع، آن توابع باید یا قبل از \fB_arguments\fP فراخوانی شوند، یا به عنوان یک \fIaction\fP درون یک \fIspec\fP، و یا در گرداننده‌های مربوط به کنش‌های `\fB\->\fP\fIstate\fP\&'\&. .PP در اینجا یک مثال عمومی‌تر از استفاده از \fB_arguments\fP آورده شده است: .PP .RS .nf \fB_arguments \&'\-l+:left border:' \e \&'\-format:paper size:(letter A4)' \e \&'*\-copy:output file:_files::resolution:(300 600)' \e \&':postscript file:_files \-g \e*\&.\e(ps\e|eps\e)' \e \&'*:page number:'\fP .fi .RE .PP این، سه گزینه را توصیف می‌کند: `\fB\-l\fP\&'، `\fB\-format\fP' و `\fB\-copy\fP\&'\&. گزینهٔ نخست یک آرگومان می‌گیرد که با عنوان `\fIleft border\fP\&' توصیف شده است و به دلیل خالی بودن کنش، هیچ تکمیلی برای آن ارائه نخواهد شد\&. آرگومان آن ممکن است مستقیماً پس از `\fB\-l\fP\&' بیاید یا به عنوان کلمهٔ بعدی در خط فرمان داده شود\&. .PP گزینهٔ `\fB\-format\fP\&' یک آرگومان در کلمهٔ بعدی می‌گیرد که با عنوان `\fIpaper size\fP\&' توصیف شده است و فقط رشته‌های `\fBletter\fP\&' و `\fBA4\fP' برای آن تکمیل خواهند شد\&. .PP گزینهٔ `\fB\-copy\fP\&' ممکن است بیش از یک بار در خط فرمان ظاهر شود و دو آرگومان می‌گیرد\&. اولی اجباری است و به عنوان یک نام فایل تکمیل خواهد شد\&. دومی اختیاری است (به دلیل وجود دونقطهٔ دوم قبل از شرح `\fIresolution\fP\&') و از میان رشته‌های `\fB300\fP\&' و `\fB600\fP' تکمیل خواهد شد\&. .PP دو شرح پایانی مشخص می‌کنند چه مواردی باید به عنوان آرگومان‌ها تکمیل شوند\&. اولی آرگومان نخست را به عنوان یک `\fIpostscript file\fP\&' شرح می‌دهد و باعث می‌شود فایل‌هایی که به `\fBps\fP' یا `\fBeps\fP' ختم می‌شوند تکمیل شوند\&. شرح آخر به تمامی آرگومان‌های دیگر شرح `\fIpage number\fP\&' را اختصاص می‌دهد اما تکمیلی ارائه نمی‌کند\&. .RE .TP \fB_as_if\fP \fIcommand\fP [\fIarg\fP \&.\&.\&. ] این تابع زمانی مفید است که یک دستور باید طوری تکمیل شود که گویی دستور دیگری با آرگومان‌های خاصی است\&. برای مثال، برای تکمیل \fBfoo\fP طوری که گویی \fBbar \-\-baz\fP است، از دستور زیر استفاده کنید: .RS .PP .RS .nf \fBcompdef \&'_as_if bar \-\-baz' foo\fP .fi .RE .RE .TP \fB_cache_invalid\fP \fIcache_identifier\fP این تابع در صورتی که حافظهٔ پنهان تکمیل‌های متناظر با شناسهٔ کش داده‌شده نیاز به بازسازی داشته باشد، وضعیت صفر را برمی‌گرداند\&. این وضعیت با جستجوی سبک \fBcache\-policy\fP برای زمینهٔ فعلی تعیین می‌شود\&. این سبک باید نام تابعی را مشخص کند که با مسیر کامل فایل کش مربوطه به عنوان تنها آرگومان اجرا شود\&. .RS .PP مثال: .PP .RS.nf \fB_example_caching_policy () { # rebuild if cache is more than a week old local \-a oldp oldp=( "$1"(Nm+7) ) (( $#oldp )) }\fP .fi .RE .RE .TP \fB_call_function\fP \fIreturn\fP \fIname\fP [ \fIarg\fP \&.\&.\&. ] اگر تابع \fIname\fP وجود داشته باشد، با آرگومان‌های \fIarg\fP فراخوانی می‌شود\&. آرگومان \fIreturn\fP نام پارامتری را مشخص می‌کند که وضعیت بازگشتی تابع \fIname\fP باید در آن ذخیره شود؛ چنانچه \fIreturn\fP خالی بوده یا تنها یک خط تیره باشد، نادیده گرفته می‌شود\&. .RS .PP وضعیت بازگشتی خودِ \fB_call_function\fP در صورتی که تابع \fIname\fP وجود داشته و فراخوانی شده باشد صفر، و در غیر این صورت غیرصفر است\&. .RE .TP \fB_call_program\fP [ \fB\-l\fP ] [ \fB\-p\fP ] \fItag\fP \fIstring\fP \&.\&.\&. این تابع سازوکاری را برای کاربر فراهم می‌کند تا استفاده از یک دستور خارجی را بازنویسی کند\&. این تابع سبک \fBcommand\fP را با برچسب (\fItag\fP) ارائه‌شده جستجو می‌کند\&. اگر این سبک تنظیم شده باشد، مقدار آن به‌عنوان دستور برای اجرا به کار می‌رود\&. رشته‌های \fIstring\fP حاصل از فراخوانی \fB_call_program\fP، یا حاصل از سبک در صورت تنظیم بودن، با فاصله‌ای در میانشان به یکدیگر متصل می‌شوند و رشتهٔ حاصل ارزیابی می‌گردد\&. وضعیت بازگشتی، همان وضعیت بازگشتی دستور فراخوانی‌شده است\&. .RS .PP به‌طور پیش‌فرض، دستور در محیطی اجرا می‌شود که در آن تمام دسته‌بندی‌های محلی‌سازی (به‌جز \fBLC_CTYPE\fP) با فراخوانی تابع کمکی \fB_comp_locale\fP (پایین را ببینید) به `\fBC\fP\&' بازنشانی می‌شوند\&. اگر گزینهٔ `\fB\-l\fP\&' داده شود، دستور با محلی‌سازی فعلی اجرا می‌شود\&. .PP اگر گزینهٔ `\fB\-p\fP\&' ارائه شود، نشان می‌دهد که خروجی دستور تحت تأثیر مجوزهایی است که با آن‌ها اجرا می‌شود\&. اگر سبک \fBgain\-privileges\fP روی true تنظیم شده باشد، \fB_call_program\fP در صورت وجود دستورهایی مانند \fBsudo\fP در خط فرمان، از آن‌ها برای مطابقت دادن مجوزها با آنچه دستور نهایی احتمالاً تحت آن اجرا می‌شود، استفاده خواهد کرد\&. هنگام جستجوی سبک‌های \fBgain\-privileges\fP و \fBcommand\fP، مؤلفهٔ دستورِ بافتار zstyle با یک ممیز (`\fB/\fP\&') و به‌دنبال آن دستوری که برای ارتقای مجوزها استفاده می‌شود، پایان می‌یابد\&. .RE .TP \fB_combination\fP [ \fB\-s\fP \fIpattern\fP ] \fItag\fP \fIstyle\fP \fIspec\fP \&.\&.\&. \fIfield\fP \fIopts\fP \&.\&.\&. این تابع برای کامل‌کردن ترکیب‌هایی از مقادیر استفاده می‌شود؛ برای نمونه جفت‌های نام میزبان و نام کاربری\&. آرگومان \fIstyle\fP سبکی را مشخص می‌کند که جفت‌ها را تعریف می‌نماید؛ این سبک در یک بافتار با برچسب مشخص‌شدهٔ \fItag\fP جستجو می‌شود\&. .RS .PP نام سبک شامل نام‌های فیلد است که با خط پیوند از یکدیگر جدا شده‌اند، مانند `\fBusers\-hosts\-ports\fP\&'\&. برای هر فیلدی که مقدار آن از پیش دانسته شده است، یک \fIspec\fP به شکل `\fIfield\fP\fB=\fP\fIpattern\fP\&' داده می‌شود\&. برای نمونه، اگر خط فرمان تا اینجا کاربری به نام `\fBpws\fP\&' را مشخص کرده باشد، باید آرگومان `\fBusers=pws\fP\&' ظاهر شود\&. .PP آرگومان بعدی فاقد علامت مساوی، به‌عنوان نام فیلدی در نظر گرفته می‌شود که کامل‌سازی‌ها باید برای آن تولید شوند (احتمالاً فیلدی نیست که مقدارش از پیش مشخص باشد)\&. .PP تطابق‌های تولیدشده از مقدار سبک برگرفته می‌شوند\&. این مقادیر باید شامل مقادیر ممکن برای ترکیب‌ها با ترتیب مناسب باشند (در مثال بالا: کاربران، میزبان‌ها، درگاه‌ها)\&. مقادیر فیلدهای گوناگون با دونقطه (:) از یکدیگر جدا می‌شوند\&. این ساختار را می‌توان با گزینهٔ \fB\-s\fP در \fB_combination\fP که یک الگو را مشخص می‌کند، تغییر داد\&. این الگو معمولاً یک ردهٔ نویسه است؛ مانند `\fB\-s "[:@]"\fP\&' در مورد سبک \fBusers\-hosts\fP\&. هر مشخصهٔ `\fIfield\fP\fB=\fP\fIpattern\fP\&' کامل‌سازی‌ها را به عناصری از سبک محدود می‌کند که فیلدهای همخوانِ مناسبی دارند\&. .PP اگر هیچ سبکی با نام داده‌شده برای برچسب مشخص تعریف نشده باشد، یا اگر هیچ‌یک از رشته‌های موجود در مقدار سبک مطابقت نداشته باشند، اما نام تابعی برای فیلد مورد نظر که پیش از آن یک زیرخط آمده باشد تعریف شده باشد، آن تابع برای تولید تطابق‌ها فراخوانی خواهد شد\&. برای مثال، اگر سبک `\fBusers\-hosts\-ports\fP\&' تعریف نشده باشد یا هنگام نیاز به میزبان هیچ نام میزبان همخوانی وجود نداشته باشد، تابع `\fB_hosts\fP\&' به‌طور خودکار فراخوانی خواهد شد\&. .PP اگر نام یکسانی برای بیش از یک فیلد به کار رود، چه در `\fIfield\fP\fB=\fP\fIpattern\fP\&' و چه در آرگومانی که نام فیلد جهت کامل‌سازی را مشخص می‌کند، شمارهٔ فیلد (شروع از یک) می‌تواند پس از نام فیلد و با جدا شدن توسط دونقطه آورده شود\&. .PP تمام آرگومان‌های پس از نام فیلدِ مورد نظر، هنگام تولید تطابق‌ها از مقدار سبک به \fBcompadd\fP، یا در صورت فراخوانی توابع مربوط به فیلدها به آن توابع، ارسال می‌شوند\&. .RE .TP \fB_command_names\fP [ \fB\-e\fP | \fB\-\fP ] این تابع کلماتی را که در جایگاه دستور معتبر هستند کامل می‌کند: نام‌های مستعار (aliases)، دستورهای توکار (builtins)، دستورهای جدول هش (hashed commands)، توابع و موارد دیگر\&. با پرچم \fB\-e\fP، فقط دستورهای جدول هش کامل می‌شوند\&. پرچم \fB\-\fP نادیده گرفته می‌شود\&. .TP \fB_comp_locale\fP این تابع تمام دسته‌بندی‌های محلی‌سازی به جز \fBLC_CTYPE\fP را به `\fBC\fP\&' بازنشانی می‌کند تا خروجی دستورهای خارجی به‌آسانی توسط سامانهٔ کامل‌سازی تحلیل‌پذیر باشد\&. \fBLC_CTYPE\fP مقدار فعلی خود را (با در نظر گرفتن \fBLC_ALL\fP و \fBLANG\fP) حفظ می‌کند و تضمین می‌نماید که نویسه‌های غیر ASCII در نام‌های فایل همچنان به‌درستی مدیریت شوند\&. .RS .PP این تابع معمولاً فقط باید درون یک زیرپوسته (subshell) اجرا شود، زیرا محلی‌سازی جدید به محیط صادر (export) می‌شود\&. کاربرد متداول آن به صورت `\fB$(_comp_locale; \fP\fIcommand\fP \&.\&.\&.\fB)\fP\&' خواهد بود\&. .RE .TP \fB_completers\fP [ \fB\-p\fP ] این تابع نام‌های کامل‌کننده‌ها (completers) را کامل می‌کند\&. .RS .PP .PD 0 .TP .PD \fB\-p\fP گنجاندن زیرخط ابتدایی (`\fB_\fP\&') در تطابق‌ها\&. .RE .TP \fB_default\fP این تابع متناظر با بافتار ویژهٔ \fB\-default\-\fP است که در زمان عدم تعریف هیچ کامل‌سازی‌ای اِعمال می‌شود\&. فراخوانی آن در شرایط خطای خاص، مانند کامل‌سازی پس از یک زیردستور ناشناخته، سودمند است\&. این کار مفهوم کاهش تدریجی کیفیت در صورت بروز خطا (graceful degradation) را در سامانهٔ کامل‌سازی پیاده می‌کند و به آن امکان می‌دهد تا به کامل‌سازی پایه‌ای موارد پرکاربردی مانند نام فایل‌ها رجوع کند\&. .TP .PD 0 \fB_describe \fP[\fB\-12JVx\fP] [ \fB\-oO\fP | \fB\-t\fP \fItag\fP ] \fIdescr\fP \fIname1\fP [ \fIname2\fP ] [ \fIopt\fP \&.\&.\&. ] .TP .PD \fB \fP[ \fB\-\fP\fB\-\fP \fIname1\fP [ \fIname2\fP ] [ \fIopt\fP \&.\&.\&. ] \&.\&.\&. ] این تابع کامل‌سازی‌ها را با توضیحات مرتبط می‌سازد\&. می‌توان چندین گروهِ جداشده با \fB\-\fP\fB\-\fP را ارائه کرد که بالقوه دارای گزینه‌های کامل‌سازی \fIopt\fP متفاوتی هستند\&. .RS .PP در صورتی که سبک \fBformat\fP برای برچسب \fBdescriptions\fP تنظیم شده باشد، \fIdescr\fP به‌عنوان رشته‌ای جهت نمایش در بالای تطابق‌ها در نظر گرفته می‌شود\&. .PP به دنبال آن، نام یک یا دو آرایه می‌آید\&. متناوباً، آرایه‌ها را می‌توان طبق قواعد شرح‌داده‌شده در زیر، با استفاده از نحو \fB(\fP\fIitem\fP \fI\&.\&.\&.\fP\fB)\fP به‌صورت درون‌خطی ارائه کرد\&. (برخلاف \fB_arguments\fP فرمت جداگانهٔ \fB((\fP\fI\&.\&.\&.\fP\fB))\fP وجود ندارد\&.) .PP آرایهٔ \fIname1\fP شامل کامل‌سازی‌های ممکن به همراه توضیحات (اختیاری) آن‌ها به شکل `\fIcompletion\fP\fB:\fP\fIdescription\fP\&' است\&. هر علامت دونقطهٔ واقعی در \fIcompletion\fP باید با یک ممیز وارونه (backslash) نقل‌قول (گریز داده) شود\&. اگر \fIname2\fP ارائه شود، باید شمار عناصر آن با \fIname1\fP برابر باشد؛ در این حالت عناصر متناظر، به‌جای رشته‌های \fIcompletion\fP از \fIname1\fP، به‌عنوان کامل‌سازی‌های ممکن افزوده می‌شوند\&. فهرست کامل‌سازی، توضیحات را از \fIname1\fP حفظ خواهد کرد\&. .PP در نهایت، مجموعه‌ای از گزینه‌ها برای ارسال به \fBcompadd\fP می‌توانند ظاهر شوند\&. .PP اگر گزینهٔ `\fB\-o\fP\&' قبل از اولین آرگومان ظاهر شود، با تطابق‌های افزوده‌شده مانند نام‌های گزینه‌های دستور رفتار می‌شود (توجه: نه گزینه‌های پوسته)، که معمولاً در خط فرمان پس از یک `\fB\-\fP\&'، `\fB\-\fP\fB\-\fP' یا `\fB+\fP' قرار می‌گیرند\&. در این حالت \fB_describe\fP از سبک‌های \fBprefix\-hidden\fP، \fBprefix\-needed\fP و \fBverbose\fP برای بررسی این‌که آیا رشته‌ها باید به‌عنوان کامل‌سازی افزوده شوند و آیا توضیحات باید نمایش داده شوند یا خیر استفاده می‌کند\&. بدون گزینهٔ `\fB\-o\fP\&'، تنها سبک \fBverbose\fP برای تصمیم‌گیری در مورد چگونگی نمایش توضیحات به کار می‌رود\&. اگر به‌جای `\fB\-o\fP' از `\fB\-O\fP\&' استفاده شود، گزینه‌های دستور مانند بالا کامل می‌شوند اما \fB_describe\fP سبک \fBprefix\-needed\fP را مدیریت نخواهد کرد\&. .PP با گزینهٔ \fB\-t\fP می‌توان یک \fItag\fP را مشخص کرد\&. مقدار پیش‌فرض `\fBvalues\fP\&' یا در صورت ارائهٔ گزینهٔ \fB\-o\fP، `\fBoptions\fP' است\&. .PP گزینه‌های \fB\-1\fP، \fB\-2\fP، \fB\-J\fP، \fB\-V\fP و \fB\-x\fP به \fB_next_label\fP ارسال می‌شوند\&. .PP در صورت انتخاب توسط سبک \fBlist\-grouped\fP، رشته‌های دارای توضیح یکسان در کنار هم در فهرست نمایش داده خواهند شد\&. .PP تابع \fB_describe\fP از تابع \fB_all_labels\fP برای تولید تطابق‌ها استفاده می‌کند، بنابراین نیازی نیست که درون حلقه‌ای بر روی برچسب‌های تگ قرار گیرد\&. .RE.TP \fB_description\fP [ \fB\-x\fP ] [ \fB\-12VJ\fP ] \fItag\fP \fIname\fP \fIdescr\fP [ \fIspec\fP \&.\&.\&. ] این تابع نباید با تابع پیشین اشتباه گرفته شود؛ این تابع به‌عنوان یک تابع کمکی برای ایجاد گزینه‌ها برای \fBcompadd\fP به کار می‌رود\&. این تابع در درون بسیاری از توابع سطح بالاتر کامل‌سازی تعبیه شده و بنابراین اغلب نیازی به فراخوانی مستقیم آن نیست\&. .RS .PP سبک‌های فهرست‌شده در زیر با استفاده از \fItag\fP داده‌شده در بافت جاری بررسی می‌شوند\&. گزینه‌های حاصل برای \fBcompadd\fP در آرایه‌ای با نام \fIname\fP قرار می‌گیرند (این نام به‌طور سنتی `\fBexpl\fP\&' است، اما این قرارداد اجباری نیست)\&. شرح مربوط به مجموعه تطابق‌های متناظر در \fIdescr\fP به تابع فرستاده می‌شود\&. .PP سبک‌های بررسی‌شده عبارتند از: \fBformat\fP، \fBhidden\fP، \fBmatcher\fP، \fBignore\-line\fP، \fBignored\-patterns\fP، \fBgroup\-name\fP و \fBsort\fP\&. سبک \fBformat\fP ابتدا برای \fItag\fP داده‌شده و در صورت پیدا نشدن مقدار، برای برچسب \fBdescriptions\fP بررسی می‌شود، در حالی که باقی سبک‌ها فقط برای برچسب داده‌شده به‌عنوان آرگومان اول بررسی می‌شوند\&. این تابع همچنین \fB_setup\fP را فراخوانی می‌کند که سبک‌های بیشتری را بررسی می‌نماید\&. .PP رشتهٔ بازگردانده‌شده توسط سبک \fBformat\fP (در صورت وجود) به گونه‌ای اصلاح خواهد شد که توالی `\fB%d\fP\&' با \fIdescr\fP ارائه‌شده به‌عنوان آرگومان سوم بدون هیچ فاصلهٔ خالی ابتدا یا انتها جایگزین شود\&. اگر پس از حذف فاصله‌های خالی، \fIdescr\fP رشته‌ای خالی باشد، از سبک format استفاده نخواهد شد و گزینه‌های قرارگرفته در آرایهٔ \fIname\fP شامل رشتهٔ توضیحی برای نمایش در بالای تطابق‌ها نخواهند بود\&. .PP اگر \fB_description\fP با بیش از سه آرگومان فراخوانی شود، \fIspec\fPهای اضافی باید به صورت `\fIchar\fP\fB:\fP\fIstr\fP\&' باشند\&. این‌ها جایگزینی‌های توالی گریز را برای سبک \fBformat\fP فراهم می‌کنند: هر بار تکرار `\fB%\fP\fIchar\fP\&' با \fIstring\fP جایگزین خواهد شد\&. اگر هیچ \fIspec\fP اضافی داده نشود اما شرح در \fIdescr\fP با یک ساختار رایج مطابقت داشته باشد، توالی‌های گریز بیشتری برای عناصر آن شرح تنظیم می‌شوند\&. این عناصر با مقدار پیش‌فرض (`\fB%o\fP\&')، واحدها (`\fB%m\fP')، دامنهٔ مقادیر مجاز (`\fB%r\fP\&') و بخش اولیهٔ باقی‌مانده از شرح (`\fB%h\fP') مطابقت دارند\&. ساختاری که شرح به خود می‌گیرد شامل مشخص کردن واحدها و دامنه در پرانتز و مقدار پیش‌فرض در براکت است، برای نمونه: .PP .RS .nf \fB_description times expl \&'timeout (seconds) (0\-60) [20]'\fP .fi .RE .PP هنگام قالب‌بندی این عناصر، استفاده از عبارت‌های شرطی \fBzformat\fP امکان‌پذیر است\&. بنابراین، برای نمونه، برای افزودن `\fBdefault:\fP\&' به‌عنوان یک برچسب تنها زمانی که یک مقدار پیش‌فرض برای نمایش وجود دارد، سبک \fBformat\fP می‌تواند شامل `\fB%(o\&.default: %o\&.)\fP\&' باشد\&. .PP اگر گزینهٔ \fB\-x\fP داده شود، شرح با استفاده از گزینهٔ \fB\-x\fP به جای \fB\-X\fP پیش‌فرض به \fBcompadd\fP فرستاده خواهد شد\&. این بدان معناست که شرح حتی در صورت نبود تطابق‌های متناظر نیز نمایش داده خواهد شد\&. .PP گزینه‌های قرارگرفته در آرایهٔ \fIname\fP سبک \fBgroup\-name\fP را در نظر می‌گیرند، بنابراین در صورت لزوم تطابق‌ها در یک گروه جداگانه قرار می‌گیرند\&. عناصر گروه معمولاً مرتب شده‌اند (با ارسال گزینهٔ \fB\-J\fP به \fBcompadd\fP)، اما اگر گزینه‌ای که با `\fB\-V\fP\&'، `\fB\-J\fP\&'، `\fB\-1\fP' یا `\fB\-2\fP' آغاز می‌شود به \fB_description\fP ارسال گردد، آن گزینه در آرایه گنجانده خواهد شد\&. از این رو، نامرتب کردن گروه کامل‌سازی با دادن گزینهٔ `\fB\-V\fP\&'، `\fB\-1V\fP\&' یا `\fB\-2V\fP' امکان‌پذیر است\&. .PP در بیشتر موارد، این تابع به این صورت استفاده خواهد شد: .PP .RS .nf \fBlocal expl _description files expl file compadd "$expl[@]" \- "$files[@]"\fP .fi .RE .PP به استفاده از پارامتر \fBexpl\fP، خط تیره و فهرست تطابق‌ها توجه کنید\&. تقریباً تمام فراخوانی‌های \fBcompadd\fP در سامانهٔ کامل‌سازی از ساختار مشابهی استفاده می‌کنند؛ این امر تضمین می‌کند که سبک‌های تعیین‌شده توسط کاربر به‌درستی به توابع توکاری که بخش‌های درونی کامل‌سازی را پیاده‌سازی می‌کنند منتقل شوند\&. .RE .TP \fB_dir_list\fP [ \fB\-s\fP \fIsep\fP ] [ \fB\-S\fP ] فهرستی از نام دایرکتوری‌های جداشده با دونقطه (با همان قالب \fB$PATH\fP) را کامل می‌کند\&. .RS .PP .PD 0 .TP .PD \fB\-s\fP \fIsep\fP استفاده از \fIsep\fP به‌عنوان جداکنندهٔ میان موارد\&. مقدار پیش‌فرض \fIsep\fP یک دونقطه (`\fB:\fP\&') است\&. .TP \fB\-S\fP افزودن \fIsep\fP به جای اسلش (`\fB/\fP\&') به‌عنوان پسوند با قابلیت حذف خودکار\&. .RE .TP \fB_dispatch\fP \fIcontext string\fP \&.\&.\&. بافت جاری را روی \fIcontext\fP تنظیم کرده و با جست‌وجو در فهرست نام‌های دستور یا بافت‌های ویژه (همان‌طور که در بالا برای \fBcompdef\fP شرح داده شد) که در قالب \fIstring\fPها داده شده‌اند، به دنبال توابع کامل‌سازی برای مدیریت این بافت می‌گردد\&. نخستین تابع کامل‌سازی که برای یکی از بافت‌های موجود در فهرست تعریف شده باشد، برای تولید تطابق‌ها استفاده می‌شود\&. به‌طور معمول، آخرین \fIstring\fP مقدار \fB\-default\-\fP است تا تابع مربوط به کامل‌سازی پیش‌فرض به‌عنوان جایگزین (fallback) به کار رود\&. .RS .PP این تابع پارامتر \fB$service\fP را روی \fIstring\fP در حال آزمایش تنظیم کرده، و فیلد \fIcontext/command\fP (چهارمین فیلد) از پارامتر \fB$curcontext\fP را روی \fIcontext\fP ارائه‌شده به‌عنوان آرگومان اول قرار می‌دهد\&. .RE .TP \fB_email_addresses\fP [ \fB\-c\fP ] [ \fB\-n\fP \fIplugin\fP ] نشانی‌های ایمیل را کامل می‌کند\&. نشانی‌ها توسط پلاگین‌ها فراهم می‌شوند\&. .RS .PP .PD 0 .TP .PD \fB\-c\fP نشانی‌های خام \fBlocalhost@domain\&.tld\fP را بدون بخش نام یا توضیح کامل می‌کند\&. بدون این گزینه، رشته‌های منطبق با RFC822 مانند `\fIFirstname Lastname\fP \fB<\fP\fIaddress\fP\fB>\fP\&' کامل می‌شوند\&. .TP \fB\-n\fP \fIplugin\fP نام‌های مستعار را از \fIplugin\fP کامل می‌کند\&. .PP پلاگین‌های زیر به‌طور پیش‌فرض در دسترس هستند: \fB_email\-ldap\fP (سبک \fBfilter\fP را ببینید)، \fB_email\-local\fP (نشانی‌های یونیکس \fIuser\fP\fB@\fP\fIhostname\fP را کامل می‌کند)، \fB_email\-mail\fP (نام‌های مستعار را از \fB~/\&.mailrc\fP کامل می‌کند)، \fB_email\-mush\fP، \fB_email\-mutt\fP و \fB_email\-pine\fP\&. .PP نشانی‌های حاصل از پلاگین \fB_email\-\fP\fIfoo\fP تحت برچسب `\fBemail\-\fP\fIfoo\fP\&' افزوده می‌شوند\&. .PP \fIنوشتن پلاگین‌ها\fP .PP پلاگین‌ها به‌صورت توابع جداگانه‌ای با نام‌هایی که با `\fB_email\-\fP\&' آغاز می‌شوند، نوشته می‌شوند\&. آن‌ها با گزینهٔ \fB\-c\fP و گزینه‌های \fBcompadd\fP فراخوانی می‌شوند\&. آن‌ها باید یا خودشان کامل‌سازی را انجام دهند یا آرایهٔ \fB$reply\fP را روی فهرستی از عناصر `\fIalias\fP\fB:\fP\fIaddress\fP\&' تنظیم کرده و مقدار \fB300\fP را بازگردانند\&. پلاگین‌های جدید به‌طور خودکار شناسایی و اجرا خواهند شد\&. .RE .TP \fB_files\fP تابع \fB_files\fP یک پوشش (wrapper) برای \fB_path_files\fP است\&. این تابع از تمامی قابلیت‌های آن با برخی بهبودها پشتیبانی می‌کند \-\- به‌ویژه اینکه سبک \fBlist\-dirs\-first\fP را در نظر می‌گیرد، و به کاربران اجازه می‌دهد تا رفتار گزینه‌های \fB\-g\fP و \fB\-/\fP را با سبک \fBfile\-patterns\fP لغو کنند\&. بنابراین در بیشتر موارد باید \fB_files\fP بر \fB_path_files\fP ترجیح داده شود\&. .RS .PP این تابع تمام مجموعه گزینه‌های مجاز برای \fB_path_files\fP را که در زیر شرح داده شده‌اند می‌پذیرد\&. .RE .TP \fB_gnu_generic\fP این تابع یک پوشش ساده برای تابع \fB_arguments\fP شرح‌داده‌شده در بالا است\&. می‌توان از آن برای تشخیص خودکار گزینه‌های بلندی که توسط دستورهایی که در پاسخ به گزینهٔ `\fB\-\fP\fB\-help\fP\&' فهرستی تولید می‌کنند درک می‌شوند، استفاده کرد\&. هدف این است که مستقلاً به‌عنوان یک تابع کامل‌سازی سطح بالا به کار رود\&. برای نمونه، برای فعال‌سازی کامل‌سازی گزینه‌ها برای دستورهای \fBfoo\fP و \fBbar\fP، عبارت زیر را .RS .PP .RS .nf \fBcompdef _gnu_generic foo bar\fP .fi .RE .PP پس از فراخوانی \fBcompinit\fP استفاده کنید\&..PP سامانهٔ تکمیل به صورت ارائه‌شده در استفاده از این تابع محتاطانه عمل می‌کند، زیرا مهم است اطمینان حاصل شود که دستور گزینهٔ `\fB\-\fP\fB\-help\fP\&' را می‌فهمد\&. .RE .TP \fB_guard\fP [ \fIoptions\fP ] \fIpattern descr\fP این تابع در صورتی که \fIpattern\fP با رشته‌ای که باید تکمیل شود مطابقت داشته باشد، \fIdescr\fP را نمایش می‌دهد\&. این تابع برای استفاده در \fIaction\fP برای مشخصه‌های ارسال‌شده به \fB_arguments\fP و توابع مشابه در نظر گرفته شده است\&. .RS .PP وضعیت بازگشتی در صورتی که پیام نمایش داده شده باشد و کلمه برای تکمیل خالی نباشد صفر، و در غیر این صورت غیرصفر است\&. .PP پیش از \fIpattern\fP می‌تواند هر یک از گزینه‌های قابل‌فهم برای \fBcompadd\fP قرار گیرد که از \fB_description\fP منتقل می‌شوند، یعنی \fB\-M\fP، \fB\-J\fP، \fB\-V\fP، \fB\-1\fP، \fB\-2\fP، \fB\-n\fP، \fB\-F\fP و \fB\-X\fP\&. همهٔ این گزینه‌ها نادیده گرفته خواهند شد\&. این امر به‌خوبی با قراردادهای ارسال آرگومانِ کنش‌ها برای \fB_arguments\fP سازگار است\&. .PP به عنوان مثال، دستوری را در نظر بگیرید که گزینه‌های \fB\-n\fP و \fB\-none\fP را می‌پذیرد، به طوری که پس از \fB\-n\fP باید در همان کلمه یک مقدار عددی بیاید\&. با استفاده از: .PP .RS .nf \fB_arguments \&'\-n\-: :_guard "[0\-9]#" "numeric value"' '\-none'\fP .fi .RE .PP می‌توان کاری کرد که \fB_arguments\fP هم پیام `\fBnumeric value\fP\&' را نمایش دهد و هم گزینه‌ها را پس از `\fB\-n\fP' تکمیل کند\&. اگر پس از `\fB\-n\fP' در حال حاضر یک یا چند رقم آمده باشد (الگوی ارسال‌شده به \fB_guard\fP)، تنها پیام نمایش داده خواهد شد؛ اگر پس از `\fB\-n\fP\&' نویسهٔ دیگری آمده باشد، فقط گزینه‌ها تکمیل می‌شوند\&. .RE .TP .PD 0 \fB_message\fP [ \fB\-r12\fP ] [ \fB\-VJ\fP \fIgroup\fP ] \fIdescr\fP .TP .PD \fB_message \-e\fP [ \fItag\fP ] \fIdescr\fP از \fIdescr\fP به همان روش آرگومان سوم تابع \fB_description\fP استفاده می‌شود، با این تفاوت که رشتهٔ حاصل فارغ از اینکه تطابقی تولید شده باشد یا خیر، همواره نمایش داده خواهد شد\&. این قابلیت برای نمایش پیام راهنما در جاهایی که هیچ تکمیلی نمی‌تواند تولید شود مفید است\&. .RS .PP سبک \fBformat\fP همراه با برچسب \fBmessages\fP برای یافتن پیام بررسی می‌شود؛ برچسب معمول، \fBdescriptions\fP، تنها در صورتی استفاده می‌شود که این سبک با برچسب اولی تنظیم نشده باشد\&. .PP اگر گزینهٔ \fB\-r\fP داده شود، هیچ سبکی استفاده نمی‌شود؛ \fIdescr\fP دقیقاً به عنوان رشته‌ای که باید نمایش داده شود در نظر گرفته می‌شود\&. این حالت زمانی بیشترین کاربرد را دارد که \fIdescr\fP از یک فهرست آرگومانِ از پیش پردازش‌شده آمده باشد که خود حاوی یک شرح بسط‌یافته است\&. توجه داشته باشید که این گزینه تجزیهٔ توالی‌های `\fB%\fP\&' انجام‌شده توسط \fBcompadd\fP را غیرفعال نمی‌کند\&. .PP گزینه‌های \fB\-12VJ\fP و \fIgroup\fP به \fBcompadd\fP ارسال می‌شوند و بنابراین گروهی را که رشتهٔ پیام به آن افزوده می‌شود تعیین می‌کنند\&. .PP شکل دوم \fB\-e\fP شرحی را برای تکمیل‌های با برچسب \fItag\fP فراهم می‌کند تا حتی در صورت نبود تطابقی برای آن برچسب، نشان داده شود\&. این شکل توسط \fB_arguments\fP در حالتی که هیچ کنشی برای مشخصهٔ یک گزینه وجود نداشته باشد، فراخوانی می‌شود\&. می‌توان برچسب را حذف کرد و در این صورت، برچسب از پارامتر \fB$curtag\fP گرفته می‌شود؛ این پارامتر توسط سامانهٔ تکمیل نگهداری می‌شود و بنابراین معمولاً درست است\&. توجه داشته باشید که اگر در زمان فراخوانی این تابع هیچ تطابقی وجود نداشته باشد، \fBcompstate[insert]\fP پاک می‌شود، بنابراین تطابق‌های اضافی که بعداً تولید شوند در خط فرمان درج نخواهند شد\&. .RE .TP \fB_multi_parts\fP [ \fB\-i\fP ] \fIsep\fP \fIarray\fP آرگومان \fIsep\fP یک نویسهٔ جداکننده است\&. \fIarray\fP می‌تواند نام یک پارامتر آرایه‌ای یا یک آرایهٔ صریح به شکل `\fB(foo bar\fP\fB)\fP\&' باشد، فهرستی داخل پرانتز از کلمات که با فاصله از هم جدا شده‌اند\&. تکمیل‌های احتمالی، رشته‌های حاصل از آرایه هستند\&. با این حال، هر بخش که توسط \fIsep\fP جدا شده است به‌طور جداگانه تکمیل خواهد شد\&. برای مثال، تابع \fB_tar\fP از `\fB_multi_parts\fP \fB/\fP \fIpatharray\fP\&' برای تکمیل مسیرهای جزئی فایل از آرایهٔ ارائه‌شده از مسیرهای کامل فایل استفاده می‌کند\&. .RS .PP گزینهٔ \fB\-i\fP باعث می‌شود \fB_multi_parts\fP یک تطابق یکتا را درج کند حتی اگر مستلزم درج چندین جداکننده باشد\&. این رفتار معمولاً در مورد نام فایل‌ها مورد انتظار نیست، اما انواع خاص دیگری از تکمیل، به عنوان مثال مواردی با مجموعه‌ای ثابت از احتمالات، ممکن است برای این شکل مناسب‌تر باشند\&. .PP همانند سایر توابع کمکی، این تابع گزینه‌های `\fB\-V\fP\&'، `\fB\-J\fP\&'، `\fB\-1\fP'، `\fB\-2\fP'، `\fB\-n\fP'، `\fB\-f\fP'، `\fB\-X\fP'، `\fB\-M\fP'، `\fB\-P\fP\&'، `\fB\-S\fP'، `\fB\-r\fP'، `\fB\-R\fP' و `\fB\-q\fP' را می‌پذیرد و آن‌ها را به دستور توکار \fBcompadd\fP ارسال می‌کند\&. .RE .TP \fB_next_label\fP [ \fB\-x\fP ] [ \fB\-12VJ\fP ] \fItag\fP \fIname\fP \fIdescr\fP [ \fIoption\fP \&.\&.\&. ] این تابع برای پیاده‌سازی حلقه روی عنوان‌های مختلف برچسب (tag labels) برای یک برچسب خاص، همان‌طور که در بالا برای سبک \fBtag\-order\fP شرح داده شد، استفاده می‌شود\&. در هر فراخوانی بررسی می‌کند که آیا عنوان‌های برچسب بیشتری وجود دارد یا خیر؛ در صورت وجود، وضعیت صفر و در غیر این صورت غیرصفر برمی‌گرداند\&. از آنجا که این تابع نیازمند تنظیم بودن یک برچسب جاری است، همیشه باید پس از فراخوانی \fB_tags\fP یا \fB_requested\fP بیاید\&. .RS .PP گزینه‌های \fB\-x12VJ\fP و سه آرگومان نخست به تابع \fB_description\fP ارسال می‌شوند\&. در صورت لزوم، در این فراخوانی \fItag\fP با یک عنوان برچسب جایگزین خواهد شد\&. هر شرحی که در سبک \fBtag\-order\fP داده شده باشد، بر \fIdescr\fP ارسال‌شده به \fB_next_label\fP ترجیح داده می‌شود\&. .PP گزینه‌های ارائه‌شده پس از \fIdescr\fP در پارامتر تعیین‌شده توسط \fIname\fP تنظیم می‌شوند، و بنابراین باید به \fBcompadd\fP یا هر تابعی که برای افزودن تطابق‌ها فراخوانی می‌شود ارسال گردند\&. .PP در اینجا یک کاربرد معمول از این تابع برای برچسب \fBfoo\fP آورده شده است\&. فراخوانی \fB_requested\fP مشخص می‌کند که آیا اصلاً برچسب \fBfoo\fP مورد نیاز است یا خیر؛ حلقه روی \fB_next_label\fP هر عنوانی را که برای آن برچسب در سبک \fBtag\-order\fP تعریف شده مدیریت می‌کند\&. .PP .RS .nf \fBlocal expl ret=1 \&.\&.\&. if _requested foo; then \&.\&.\&. while _next_label foo expl \&'\&.\&.\&.'; do compadd "$expl[@]" \&.\&.\&. && ret=0 done \&.\&.\&. fi return ret\fP .fi .RE .RE .TP \fB_normal\fP [ \fB\-P\fP | \fB\-p\fP \fIprecommand\fP ] این تابع استاندارد برای مدیریت تکمیل در خارج از هرگونه \fB\-\fP\fIcontext\fP\fB\-\fP خاص فراخوانی می‌شود\&. این تابع هم برای تکمیل کلمهٔ دستور و هم آرگومان‌های یک دستور فراخوانی می‌شود\&. در حالت دوم، \fB_normal\fP به دنبال تکمیل خاصی برای آن دستور می‌گردد، و اگر موردی پیدا نشود، از تکمیل زمینهٔ \fB\-default\-\fP استفاده می‌کند\&. .RS .PP کاربرد دوم، بررسی مجدد خط فرمان مشخص‌شده توسط آرایهٔ \fB$words\fP و پارامتر \fB$CURRENT\fP پس از تغییر یافتن آن‌ها است\&. برای مثال، تابع \fB_precommand\fP که تکمیل را پس از مشخص‌کننده‌های پیش‌دستور نظیر \fBnohup\fP انجام می‌دهد، کلمهٔ اول را از آرایهٔ \fBwords\fP حذف می‌کند، از مقدار پارامتر \fBCURRENT\fP یکی می‌کاهد، و سپس `\fB_normal \-p $service\fP\&' را فراخوانی می‌کند\&. نتیجه آن است که با `\fBnohup\fP \fIcmd \&.\&.\&.\fP\&' همانند `\fIcmd \&.\&.\&.\fP' رفتار می‌شود\&. .PP .PD 0 .TP .PD \fB\-P\fP فهرست پیش‌دستورها را بازنشانی می‌کند\&. این گزینه زمانی باید استفاده شود که در حال تکمیل خط فرمانی باشیم که صرف‌نظر از پیش‌دستورهای قبلی، دستورهای داخلی (مانند دستورهای توکار و توابع) را مجاز می‌داند (مانند `\fBzsh \-c\fP\&')\&. .TP \fB\-p\fP \fIprecommand\fP مقدار \fIprecommand\fP را به انتهای فهرست پیش‌دستورها اضافه می‌کند\&. این گزینه باید تقریباً در همهٔ مواردی که \fB\-P\fP کاربرد ندارد، استفاده شود\&. .PP اگر نام دستور با یکی از الگوهای ارائه‌شده توسط یکی از گزینه‌های \fB\-p\fP یا \fB\-P\fP به \fBcompdef\fP مطابقت داشته باشد، تابع تکمیل مربوطه فراخوانی شده و سپس پارامتر \fB_compskip\fP بررسی می‌شود\&. اگر این متغیر مقداردهی شده باشد، تکمیل در همان نقطه متوقف می‌شود حتی اگر هیچ تطابقی پیدا نشده باشد\&. این همان اثری است که در زمینهٔ \fB\-first\-\fP وجود دارد\&. .RE .TP \fB_numbers\fP [ \fIoption\fP \&.\&.\&. ] [ \fIdescription\fP ] [ \fIsuffix\fP \&.\&.\&. ] این تابع می‌تواند در جاهایی استفاده شود که پس از یک عدد، پسوندی برای نمایش یکاها (واحدها) می‌آید\&. پسوندهای یکا تکمیل می‌شوند و همچنین می‌توانند در شرحی که هنگام فراخوانی تکمیل برای عدد پیشین استفاده می‌شود، گنجانده شوند\&. .RS .PP علاوه بر گزینه‌های رایج \fBcompadd\fP، تابع \fB_numbers\fP گزینه‌های زیر را می‌پذیرد:.PP .PD 0 .TP .PD \fB\-t\fP \fItag\fP برچسبی را برای استفاده به جای برچسب پیش‌فرض \fBnumbers\fP تعیین می‌کند\&. .TP \fB\-u\fP \fIunits\fP واحدهای پیش‌فرض را برای عدد مشخص می‌کند، مانند \fBbytes\fP\&. .TP \fB\-l\fP \fImin\fP کمترین مقدار ممکن را برای عدد تعیین می‌کند\&. .TP \fB\-m\fP \fImax\fP بیشترین مقدار ممکن را برای عدد تعیین می‌کند\&. .TP \fB\-d\fP \fIdefault\fP مقدار پیش‌فرض را تعیین می‌کند\&. .TP \fB\-N\fP اجازه دادن به اعداد منفی\&. اگر بازه شامل یک عدد منفی باشد، این مورد به صورت ضمنی اعمال می‌شود\&. .TP \fB\-f\fP اجازه دادن به اعداد اعشاری\&. .PP در جایی که یک پسوند خاص نمایانگر واحدهای پیش‌فرض برای یک عدد باشد، باید یک دو‌نقطه (colon) به ابتدای آن اضافه شود\&. علاوه بر این، پسوندها می‌توانند با یک دو‌نقطه و یک توضیح همراه شوند\&. بنابراین برای مثال، دستور زیر اجازه می‌دهد سن چیزی، یا بر حسب ثانیه یا با یک پسوند اختیاری با واحد زمانی طولانی‌تر مشخص شود: .PP .RS .nf \fB_numbers \-u seconds age :s:seconds m:minutes h:hours d:days\fP .fi .RE .PP معمولاً مفید است که واحدها هنگام تکمیل بر اساس مرتبه بزرگی نمایش داده شوند\&. برای تسهیل این امر، ترتیبی که در آن مشخص شده‌اند حفظ می‌شود\&. .PP هنگامی که سبک \fBformat\fP با برچسب \fBdescriptions\fP یا برچسب مشخص‌شده با \fB\-t\fP جستجو می‌شود، فهرست پسوندها به صورت دنباله گریز `\fB%x\fP\&' در دسترس است\&. این علاوه بر دنباله‌های معمولی است که ذیل سبک \fBformat\fP مستند شده‌اند\&. شکلی که این فهرست به خود می‌گیرد نیز قابل پیکربندی است\&. بدین منظور، سبک \fBformat\fP ابتدا با برچسب \fBunit\-suffixes\fP جستجو می‌شود\&. قالب بازیابی‌شده به نوبت روی هر پسوند اعمال می‌شود و سپس نتایج برای تشکیل فهرست تکمیل‌شده به یکدیگر متصل می‌شوند\&. برای قالب \fBunit\-suffixes\fP، شناسه `\fB%x\fP\&' به پسوند منفرد و `\fB%X\fP\&' به توضیحات آن بسط می‌یابد\&. `\fB%d\fP' نشان‌دهنده یک پسوند پیش‌فرض است و می‌تواند در یک شرط استفاده شود\&. نمایه و نمایه معکوس به ترتیب در `\fB%i\fP\&' و `\fB%r\fP' تنظیم می‌شوند و برای متنی که فقط همراه با اولین و آخرین پسوند در فهرست گنجانده می‌شود مفید هستند\&. بنابراین برای مثال، دستور زیر پسوندها را به صورت یک فهرست جداشده با کاما به هم متصل می‌کند: .PP .RS .nf \fBzstyle \&':completion:*:unit\-suffixes' format '%x%(r::,)'\fP .fi .RE .RE .PP .TP \fB_options\fP این تابع می‌تواند برای تکمیل نام گزینه‌های شل استفاده شود\&. این تابع یک مشخصه تطبیق‌دهنده ارائه می‌دهد که `\fBno\fP\&' ابتدایی را نادیده می‌گیرد، زیرخط‌ها را نادیده می‌گیرد و به حروف بزرگ اجازه می‌دهد تا با معادل‌های کوچک خود مطابقت پیدا کنند (برای مثال، `\fBglob\fP\&'، `\fBnoglob\fP\&' و `\fBNO_GLOB\fP' همگی تکمیل می‌شوند)\&. هر آرگومانی به دستور توکار \fBcompadd\fP ارسال می‌شود\&. .TP \fB_options_set\fP و \fB_options_unset\fP این توابع فقط گزینه‌های تنظیم‌شده یا تنظیم‌نشده را با همان مشخصه تطبیقی که در تابع \fB_options\fP استفاده شده است تکمیل می‌کنند\&. .RS .PP توجه داشته باشید که برای کارکرد درست این توابع، باید چند خط را در تابع \fB_main_complete\fP از حالت توضیح خارج کنید\&. خطوط مورد نظر برای ذخیره تنظیمات گزینه‌های فعال، پیش از اینکه ابزارک تکمیل گزینه‌های مورد نیاز خود را به صورت محلی تنظیم کند، استفاده می‌شوند\&. بنابراین این توابع معمولاً توسط سیستم تکمیل استفاده نمی‌شوند\&. .RE .TP \fB_parameters\fP این تابع برای تکمیل نام پارامترهای شل استفاده می‌شود\&. .RS .PP گزینه `\fB\-g\fP \fIpattern\fP\&' تکمیل را به پارامترهایی محدود می‌کند که نوع آنها با \fIpattern\fP مطابقت دارد\&. نوع یک پارامتر همان چیزی است که توسط `\fBprint ${(t)\fP\fIparam\fP\fB}\fP\&' نمایش داده می‌شود، از این رو استفاده هوشمندانه از `\fB*\fP\&' در \fIpattern\fP احتمالاً ضروری است\&. .PP تمام آرگومان‌های دیگر به دستور توکار \fBcompadd\fP ارسال می‌شوند\&. .RE .TP \fB_path_files\fP این تابع در سرتاسر سیستم تکمیل برای تکمیل نام فایل‌ها به کار می‌رود\&. این تابع امکان تکمیل مسیرهای جزئی را فراهم می‌کند\&. برای مثال، رشته `\fB/u/i/s/sig\fP\&' ممکن است به `\fB/usr/include/sys/signal\&.h\fP\&' تکمیل شود\&. .RS .PP گزینه‌های پذیرفته‌شده توسط هر دو تابع \fB_path_files\fP و \fB_files\fP عبارتند از: .PP .PD 0 .TP .PD \fB\-f\fP تکمیل تمام نام‌های فایل\&. این حالت پیش‌فرض است\&. .TP \fB\-/\fP مشخص می‌کند که فقط دایرکتوری‌ها باید تکمیل شوند\&. .TP \fB\-g\fP \fIpattern\fP مشخص می‌کند فقط فایل‌هایی که با \fIpattern\fP مطابقت دارند باید تکمیل شوند\&. .TP \fB\-W\fP \fIpaths\fP پیشوندهای مسیری را مشخص می‌کند که باید برای تولید نام فایل‌ها به ابتدای رشته ورودی خط فرمان اضافه شوند، اما نباید به عنوان تکمیل درج شوند و نباید در فهرست‌های گزینه‌های تکمیل نشان داده شوند\&. در اینجا، \fIpaths\fP می‌تواند نام یک پارامتر آرایه‌ای، یک فهرست دقیق از مسیرها درون پرانتز یا یک نام مسیر مطلق باشد\&. .TP \fB\-F\fP \fIignored\-files\fP رفتاری مشابه با گزینه متناظر در دستور توکار \fBcompadd\fP دارد\&. این گزینه کنترل مستقیمی بر نام فایل‌هایی که باید نادیده گرفته شوند فراهم می‌کند\&. اگر این گزینه مشخص نشده باشد، از سبک \fBignored\-patterns\fP استفاده می‌شود\&. .PP هر دو تابع \fB_path_files\fP و \fB_files\fP گزینه‌های زیر را نیز که به \fBcompadd\fP فرستاده می‌شوند، می‌پذیرند: `\fB\-J\fP\&'، `\fB\-V\fP'، `\fB\-1\fP\&'، `\fB\-2\fP'، `\fB\-n\fP'، `\fB\-X\fP'، `\fB\-M\fP'، `\fB\-P\fP'، `\fB\-S\fP'، `\fB\-q\fP\&'، `\fB\-r\fP' و `\fB\-R\fP'\&. .PP در نهایت، تابع \fB_path_files\fP از سبک‌های \fBexpand\fP، \fBambiguous\fP، \fBspecial\-dirs\fP، \fBlist\-suffixes\fP و \fBfile\-sort\fP که در بالا توضیح داده شدند، استفاده می‌کند\&. .RE .TP .PD 0 \fB_pick_variant \fP[ \fB\-b\fP \fIbuiltin\-label\fP ] [ \fB\-c\fP \fIcommand\fP ] [ \fB\-r\fP \fIname\fP ] .TP .PD \fB \fP\fIlabel\fP\fB=\fP\fIpattern\fP \&.\&.\&. \fIlabel\fP [ \fIarg\fP \&.\&.\& ] این تابع برای رفع شرایطی استفاده می‌شود که در آن یک نام دستور واحد نیازمند بیش از یک نوع رسیدگی است، چه به این دلیل که چندین گونه مختلف دارد یا به این دلیل که تداخل نام بین دو دستور متفاوت وجود دارد\&. .RS .PP دستور برای اجرا از اولین عنصر آرایه \fBwords\fP گرفته می‌شود مگر اینکه توسط گزینه \fB\-c\fP لغو شود\&. این دستور اجرا شده و خروجی آن با یک سری از الگوها مقایسه می‌شود\&. آرگومان‌هایی که باید به دستور ارسال شوند را می‌توان در انتها پس از تمام آرگومان‌های دیگر مشخص کرد\&. الگوهایی که باید به ترتیب بررسی شوند توسط آرگومان‌های \fIlabel\fP\fB=\fP\fIpattern\fP مشخص می‌شوند؛ اگر خروجی `\fIcommand\fP \fIarg\fP \&.\&.\&.\&' حاوی \fIpattern\fP باشد، آنگاه \fIlabel\fP به عنوان برچسب گونه دستور انتخاب می‌شود\&. اگر هیچ‌یک از الگوها مطابقت نداشته باشند، برچسب نهایی دستور انتخاب شده و وضعیت خروج 1 بازگردانده می‌شود\&. .PP اگر گزینه `\fB\-b\fP \fIbuiltin\-label\fP\&' داده شود، دستور آزمایش می‌شود تا بررسی شود آیا به عنوان یک دستور توکار شل (احتمالاً autoload شده) ارائه شده است یا خیر؛ در این صورت، برچسب \fIbuiltin\-label\fP به عنوان برچسب این گونه انتخاب می‌شود\&. .PP اگر گزینه `\fB\-r\fP \fIname\fP\&' داده شود، \fIlabel\fP انتخاب‌شده در پارامتری با نام \fIname\fP ذخیره می‌شود\&. .PP نتایج همچنین در آرایه انجمنی \fB_cmd_variant\fP با نمایه‌ای از نام دستور اجراشده حافظه‌نهان (cache) می‌شوند\&. .RE .TP \fB_regex_arguments\fP \fIname\fP \fIspec\fP \&.\&.\&. این تابع یک تابع تکمیل با نام \fIname\fP تولید می‌کند که با مشخصات \fIspec\fPها، یعنی مجموعه‌ای از عبارات باقاعده همان‌طور که در زیر شرح داده شده است، مطابقت می‌یابد\&. پس از اجرای \fB_regex_arguments\fP، تابع \fIname\fP باید مانند یک تابع تکمیل معمولی فراخوانی شود\&. الگویی که باید تطبیق داده شود توسط محتویات آرایه \fBwords\fP تا موقعیت فعلی مکان‌نما که با نویسه‌های تهی به هم متصل شده‌اند، ارائه می‌شود؛ هیچ نشانه‌گذاری یا نقل‌قولی اعمال نمی‌شود\&. .RS.PP آرگومان‌ها به‌صورت مجموعه‌هایی از حالت‌های جایگزین گروه‌بندی می‌شوند که با «\fB|\fP\&» از یکدیگر جدا شده‌اند و یک‌به‌یک تا زمانی که یکی مطابقت یابد، آزمایش می‌شوند\&. هر جایگزین از یک یا چند مشخصه تشکیل شده است که از چپ به راست بررسی می‌شوند و هر الگوی منطبق‌شده به نوبهٔ خود از خط فرمانِ در حال آزمایش حذف می‌شود، تا زمانی که تمام گروه با موفقیت تطبیق یابد یا یکی با شکست مواجه شود؛ در حالت دوم، جایگزین بعدی آزمایش می‌شود\&. این ساختار را می‌توان با استفاده از پرانتزها تا هر عمق دلخواهی تکرار کرد؛ تطبیق از داخل به بیرون پیش می‌رود\&. .PP اگر هیچ آزمایشی موفق نشود اما رشتهٔ باقی‌مانده از خط فرمان فاقد نویسهٔ تهی (null) باشد (به این معنی که کلمهٔ باقی‌مانده همان کلمه‌ای است که تکمیل‌ها باید برای آن تولید شوند)، رویهٔ ویژه‌ای اعمال می‌شود\&. هدف تکمیل به کلمهٔ باقی‌مانده محدود شده و هر \fIaction\fP برای الگوهای متناظر اجرا می‌شود\&. در این حالت، هیچ چیزی از رشتهٔ خط فرمان حذف نمی‌شود\&. ترتیب ارزیابی \fIaction\fPها را می‌توان با سبک \fBtag\-order\fP تعیین کرد؛ قالب‌های گوناگونِ پشتیبانی‌شده توسط \fB_alternative\fP را می‌توان در \fIaction\fP به کار برد\&. از \fIdescr\fP برای مقداردهی اولیهٔ پارامتر آرایه‌ای \fBexpl\fP استفاده می‌شود\&. .PP آرگومان‌های مشخصه یکی از شکل‌های زیر را به خود می‌گیرند، که در آن‌ها فرانویسه‌هایی مانند «\fB(\fP\&»، «\fB)\fP»، «\fB#\fP» و «\fB|\fP» باید نقل‌قول (quote) شوند\&. .PP .PD 0 .TP .PD \fB/\fP\fIpattern\fP\fB/\fP [\fB%\fP\fIlookahead\fP\fB%\fP] [\fB\-\fP\fIguard\fP] [\fB:\fP\fItag\fP\fB:\fP\fIdescr\fP\fB:\fP\fIaction\fP] این یک مؤلفهٔ اولیه ساده است\&. تابع بررسی می‌کند که آیا الگوی ترکیبی «\fB(#b)((#B)\fP\fIpattern\fP\fB)\fP\fIlookahead\fP\fB*\fP\&» با رشتهٔ خط فرمان مطابقت دارد یا خیر\&. در صورت تطابق، «\fIguard\fP\&» ارزیابی شده و وضعیت خروج آن برای تعیین موفقیت آزمایش بررسی می‌شود\&. تضمین شده است که رشتهٔ \fIpattern\fP به صورت «\fB[]\fP\&» هرگز مطابقت پیدا نکند\&. پیش از بررسی الگوی بعدی، \fIlookahead\fP از خط فرمان حذف نمی‌شود\&. .RS .PP آرگومانی که با \fB:\fP شروع می‌شود، به همان روش آرگومانِ \fB_alternative\fP استفاده می‌شود\&. .PP یک مؤلفه به شرح زیر استفاده می‌شود: \fIpattern\fP آزمایش می‌شود تا مشخص گردد آیا مؤلفه از پیش در خط فرمان وجود دارد یا خیر\&. در صورت وجود، مشخصه‌های بعدی بررسی می‌شوند تا موردی برای تکمیل پیدا شود\&. اگر به مؤلفه‌ای برسد اما هنوز چنین الگویی در خط فرمان وجود نداشته باشد، از رشتهٔ حاوی \fIaction\fP برای تولید موارد منطبق جهت درج در آن نقطه استفاده می‌شود\&. .RE .TP \fB/\fP\fIpattern\fP\fB/+\fP [\fB%\fP\fIlookahead\fP\fB%\fP] [\fB\-\fP\fIguard\fP] [\fB:\fP\fItag\fP\fB:\fP\fIdescr\fP\fB:\fP\fIaction\fP] این شبیه به «\fB/\fP\fIpattern\fP\fB/\fP \&.\&.\&.\&» است، اما بخش سمت چپ رشتهٔ خط فرمان (یعنی بخشی که پیش‌تر توسط الگوهای قبلی مطابقت داده شده است) نیز به عنوان بخشی از هدف تکمیل در نظر گرفته می‌شود\&. .TP \fB/\fP\fIpattern\fP\fB/\-\fP [\fB%\fP\fIlookahead\fP\fB%\fP] [\fB\-\fP\fIguard\fP] [\fB:\fP\fItag\fP\fB:\fP\fIdescr\fP\fB:\fP\fIaction\fP] این شبیه به «\fB/\fP\fIpattern\fP\fB/\fP \&.\&.\&.\&» است، اما \fIaction\fPهای الگوی کنونی و الگوهای از پیش منطبق‌شده نادیده گرفته می‌شوند، حتی اگر «\fIpattern\fP\&» بعدی با رشتهٔ خالی مطابقت داشته باشد\&. .TP \fB(\fP \fIspec\fP \fB)\fP می‌توان از پرانتزها برای گروه‌بندی \fIspec\fPها استفاده کرد؛ توجه داشته باشید که هر پرانتز یک آرگومان مستقل برای \fB_regex_arguments\fP محسوب می‌شود\&. .TP \fIspec\fP \fB#\fP این مورد اجازه می‌دهد \fIspec\fP به هر تعداد دلخواه تکرار شود\&. .TP \fIspec\fP \fIspec\fP این دو \fIspec\fP باید یکی پس از دیگری، همان‌طور که در بالا شرح داده شد، مطابقت داده شوند\&. .TP \fIspec\fP \fB|\fP \fIspec\fP هر یک از این دو \fIspec\fP می‌توانند تطبیق داده شوند\&. .PP تابع \fB_regex_words\fP می‌تواند به عنوان یک تابع کمکی برای تولید تطابق‌ها برای مجموعه‌ای از کلمات جایگزین، احتمالاً به همراه آرگومان‌های خودشان، به عنوان یک آرگومان خط فرمان استفاده شود\&. .PP مثال‌ها: .PP .RS .nf \fB_regex_arguments _tst /$\&'[^\e0]#\e0'/ \e /$\&'[^\e0]#\e0'/ :'compadd aaa'\fP .fi .RE .PP این دستور تابعی به نام \fB_tst\fP تولید می‌کند که \fBaaa\fP را به عنوان تنها آرگومان خود تکمیل می‌کند\&. \fItag\fP و \fIdescription\fP برای action جهت اختصار حذف شده‌اند (این ساختار کار می‌کند اما در استفاده‌های معمول توصیه نمی‌شود)\&. مؤلفهٔ اول با کلمهٔ دستور مطابقت می‌یابد که دلخواه است؛ مؤلفهٔ دوم با هر آرگومانی تطبیق پیدا می‌کند\&. از آنجا که آرگومان نیز دلخواه است، هر مؤلفهٔ بعدی به حضور \fBaaa\fP وابسته نخواهد بود\&. .PP .RS .nf \fB_regex_arguments _tst /$\&'[^\e0]#\e0'/ \e /$\&'aaa\e0'/ :'compadd aaa'\fP .fi .RE .PP این نمونه کاربردی معمول‌تر است؛ مشابه مورد پیشین است، اما هر الگوی بعدی تنها در صورتی تطبیق می‌یابد که \fBaaa\fP به عنوان آرگومان نخست وجود داشته باشد\&. .PP .RS .nf \fB_regex_arguments _tst /$\&'[^\e0]#\e0'/ \e( \e /$\&'aaa\e0'/ :'compadd aaa' \e /$\&'bbb\e0'/ :'compadd bbb' \e) \e#\fP .fi .RE .PP در این مثال، تعداد نامحدودی از آرگومان‌های دستور ممکن است تکمیل شوند\&. آرگومان‌های فرد به صورت \fBaaa\fP و آرگومان‌های زوج به صورت \fBbbb\fP تکمیل می‌شوند\&. تکمیل با شکست مواجه می‌شود مگر اینکه مجموعه آرگومان‌های \fBaaa\fP و \fBbbb\fP پیش از آرگومان کنونی، به درستی تطبیق یافته باشند\&. .PP .RS .nf \fB_regex_arguments _tst /$\&'[^\e0]#\e0'/ \e \e( /$\&'aaa\e0'/ :'compadd aaa' \e| \e /$\&'bbb\e0'/ :'compadd bbb' \e) \e#\fP .fi .RE .PP این مثال نیز مشابه است، اما برای هر آرگومان، هر یک از \fBaaa\fP یا \fBbbb\fP می‌توانند تکمیل شوند\&. در این حالت، می‌توان از \fB_regex_words\fP برای تولید یک عبارت مناسب برای آرگومان‌ها استفاده کرد\&. .PP .RE .TP \fB_regex_words\fP \fItag\fP \fIdescription\fP \fIspec\fP \&.\&.\&. این تابع می‌تواند برای تولید آرگومان‌هایی برای دستور \fB_regex_arguments\fP استفاده شود که می‌توانند در هر نقطه‌ای که مجموعه‌ای از قواعد مورد انتظار است، درج شوند\&. \fItag\fP و \fIdescription\fP یک برچسب و شرح استاندارد مربوط به بافت (context) فعلی را ارائه می‌دهند\&. هر \fIspec\fP شامل دو یا سه آرگومان است که با دو نقطه از هم جدا شده‌اند: توجه داشته باشید که در این حالت هیچ دو نقطه‌ای در ابتدای عبارت وجود ندارد\&. .RS .PP هر \fIspec\fP یکی از مجموعه‌کلماتی را که می‌توان در این نقطه تکمیل کرد، به همراه آرگومان‌هایش مشخص می‌کند\&. بنابراین، در هنگام استفاده در حالت تکمیل معمولی (غیر regex)، تقریباً معادل تابع \fB_arguments\fP است\&. .PP بخشی از \fIspec\fP که پیش از اولین دونقطه قرار دارد، کلمه‌ای است که باید تکمیل شود\&. این بخش می‌تواند شامل یک \fB*\fP باشد؛ کل کلمه، قبل و بعد از \fB*\fP تکمیل می‌شود، اما تنها متن پیش از \fB*\fP برای تطبیق بافت الزامی است، به طوری که آرگومان‌های بعدی می‌توانند پس از شکل اختصاری تکمیل گردند\&. .PP بخش دوم \fIspec\fP شرحی برای کلمهٔ در حال تکمیل است\&. .PP بخش اختیاری سوم از \fIspec\fP توصیف می‌کند کلماتی که پس از کلمهٔ فعلی می‌آیند، چگونه باید تکمیل شوند\&. این بخش ارزیابی خواهد شد تا از بروز مشکلات مرتبط با نقل‌قول (quoting) جلوگیری شود\&. بدین معنا که معمولاً حاوی ارجاعی به یک آرایه شامل آرگومان‌های regex از پیش تولید شده است\&. .PP گزینهٔ \fB\-t\fP \fIterm\fP به جای فاصلهٔ معمول، یک پایان‌دهنده برای کلمه تعیین می‌کند\&. این پایان‌دهنده به عنوان یک پسوند با حذف خودکار، به همان روش گزینهٔ \fB\-s\fP \fIsep\fP در تابع \fB_values\fP مدیریت می‌شود\&. .PP نتیجهٔ پردازش توسط \fB_regex_words\fP در آرایهٔ \fBreply\fP قرار می‌گیرد که باید برای تابع فراخواننده به صورت محلی (local) تعریف شود\&. اگر مجموعهٔ کلمات و آرگومان‌ها قابلیت تطبیق مکرر داشته باشند، باید یک \fB#\fP به آرایهٔ تولید شده در آن نقطه الحاق شود\&. .PP برای مثال: .PP .RS .nf \fBlocal \-a reply _regex_words mydb\-commands \&'mydb commands' \e \&'add:add an entry to mydb:$mydb_add_cmds' \e \&'show:show entries in mydb' _regex_arguments _mydb "$reply[@]" _mydb "$@"\fP .fi .RE.PP این یک تابع کامل‌سازی را برای دستور \fBmydb\fP نشان می‌دهد که دو آرگومان دستور، \fBadd\fP و \fBshow\fP را می‌پذیرد\&. دستور \fBshow\fP هیچ آرگومانی نمی‌پذیرد، در حالی که آرگومان‌های \fBadd\fP از پیش در آرایهٔ \fBmydb_add_cmds\fP آماده شده‌اند؛ به احتمال زیاد توسط یک فراخوانی قبلی به \fB_regex_words\fP\&. .RE .TP \fB_requested\fP [ \fB\-x\fP ] [ \fB\-12VJ\fP ] \fItag\fP [ \fIname\fP \fIdescr\fP [ \fIcommand\fP [ \fIarg\fP \&.\&.\&. ] ] این تابع برای تصمیم‌گیری در این مورد فراخوانی می‌شود که آیا برچسبی (tag) که پیش‌تر با فراخوانی \fB_tags\fP (پایین را ببینید) ثبت شده است، توسط کاربر درخواست شده و در نتیجه باید کامل‌سازی برای آن انجام گیرد یا خیر\&. در صورتی که برچسب درخواست شده باشد، وضعیت خروج صفر و در غیر این صورت غیرصفر بازمی‌گرداند\&. این تابع معمولاً به عنوان بخشی از یک حلقه روی برچسب‌های گوناگون به صورت زیر استفاده می‌شود: .RS .PP .RS .nf \fB_tags foo bar baz while _tags; do if _requested foo; then \&.\&.\&. # perform completion for foo fi \&.\&.\&. # test the tags bar and baz in the same way \&.\&.\&. # exit loop if matches were generated done\fP .fi .RE .PP توجه داشته باشید که بررسی تولید شدن مطابقت‌ها تا انتهای حلقهٔ \fB_tags\fP انجام نمی‌شود\&. این امر بدان سبب است که کاربر بتواند سبک \fBtag\-order\fP را برای تعیین مجموعه‌ای از برچسب‌ها که باید به طور همزمان کامل شوند، تنظیم کند\&. .PP اگر \fIname\fP و \fIdescr\fP ارائه شده باشند، \fB_requested\fP تابع \fB_description\fP را با این آرگومان‌ها به همراه گزینه‌های ارائه‌شده به \fB_requested\fP فراخوانی می‌کند\&. .PP اگر \fIcommand\fP ارائه شود، تابع \fB_all_labels\fP بلافاصله با همان آرگومان‌ها فراخوانی خواهد شد\&. در موارد ساده این امکان وجود دارد که بررسی برچسب و تطبیق در یک مرحله انجام پذیرد\&. برای نمونه: .PP .RS .nf \fBlocal expl ret=1 _tags foo bar baz while _tags; do _requested foo expl \&'description' \e compadd foobar foobaz && ret=0 \&.\&.\&. (( ret )) || break done\fP .fi .RE .PP اگر \fIcommand\fP دستور \fBcompadd\fP نباشد، با این حال باید برای مدیریت همان گزینه‌ها آماده باشد\&. .RE .TP \fB_retrieve_cache\fP \fIcache_identifier\fP این تابع اطلاعات کامل‌سازی را از فایل ارائه‌شده توسط \fIcache_identifier\fP بازیابی می‌کند؛ این فایل در دایرکتوری مشخص‌شده با سبک \fBcache\-path\fP که پیش‌فرض آن \fB~/\&.zcompcache\fP است، ذخیره می‌شود\&. وضعیت خروج در صورت بازیابی موفقیت‌آمیز، صفر است\&. این تابع تنها در صورتی اقدام به بازیابی می‌کند که سبک \fBuse\-cache\fP تنظیم شده باشد، بنابراین می‌توانید این تابع را بدون نگرانی دربارهٔ اینکه آیا کاربر قصد استفاده از لایهٔ حافظهٔ پنهان (cache) را داشته است یا خیر، فراخوانی کنید\&. .RS .PP برای جزئیات بیشتر به \fB_store_cache\fP در زیر مراجعه نمایید\&. .RE .TP \fB_sep_parts\fP به این تابع آرایه‌ها و جداکننده‌ها به صورت یکی در میان به عنوان آرگومان داده می‌شوند\&. آرایه‌ها کامل‌سازی‌هایی را برای بخش‌هایی از رشته‌ها که باید توسط جداکننده‌ها جدا شوند، مشخص می‌کنند\&. آرایه‌ها می‌توانند نام متغیرهای آرایه‌ای یا فهرستی از کلمات درون پرانتز و گیومه باشند\&. برای نمونه، با آرایهٔ `\fBhosts=(ftp news)\fP\&' فراخوانی `\fB_sep_parts '(foo bar)' @ hosts\fP' رشتهٔ `\fBf\fP\&' را به `\fBfoo\fP' و رشتهٔ `\fBb@n\fP' را به `\fBbar@news\fP\&' کامل خواهد کرد\&. .RS .PP این تابع گزینه‌های `\fB\-V\fP\&'، `\fB\-J\fP'، `\fB\-1\fP\&'، `\fB\-2\fP'، `\fB\-n\fP'، `\fB\-X\fP'، `\fB\-M\fP'، `\fB\-P\fP'، `\fB\-S\fP'، `\fB\-r\fP\&'، `\fB\-R\fP' و `\fB\-q\fP' دستور \fBcompadd\fP را می‌پذیرد و آن‌ها را به دستور توکار \fBcompadd\fP که برای افزودن مطابقت‌ها استفاده می‌شود، منتقل می‌کند\&. .RE .TP \fB_sequence\fP [ \fB\-s\fP \fIsep\fP ] [ \fB\-n\fP \fImax\fP ] [ \fB\-d\fP ] \fIfunction\fP [ \fB\-\fP ] \&.\&.\&. این تابع پوششی برای سایر توابع جهت کامل‌سازی موارد در یک فهرست جداسازی‌شده است\&. از همان تابع برای کامل‌سازی هر مورد در فهرست استفاده می‌شود\&. جداکننده با گزینهٔ \fB\-s\fP مشخص می‌شود\&. اگر \fB\-s\fP حذف شود، از `\fB,\fP\&' استفاده خواهد شد\&. مقادیر تکراری تطبیق داده نمی‌شوند مگر اینکه \fB\-d\fP مشخص شده باشد\&. اگر تعداد ثابت یا حداکثری از موارد در فهرست وجود دارد، می‌توان آن را با گزینهٔ \fB\-n\fP تعیین کرد\&. .RS .PP گزینه‌های عمومی \fBcompadd\fP به تابع منتقل می‌شوند\&. استفاده مستقیم از \fBcompadd\fP همراه با \fB_sequence\fP امکان‌پذیر است، هرچند ممکن است در این موقعیت \fB_values\fP مناسب‌تر باشد\&. .RE .TP \fB_setup\fP \fItag\fP [ \fIgroup\fP ] این تابع پارامترهای ویژه‌ای را که سیستم کامل‌سازی استفاده می‌کند، متناسب با \fItag\fP داده‌شده به عنوان نخستین آرگومان، راه‌اندازی می‌کند\&. این تابع از سبک‌های \fBlist\-colors\fP، \fBlist\-packed\fP، \fBlist\-rows\-first\fP، \fBlast\-prompt\fP، \fBaccept\-exact\fP، \fBmenu\fP و \fBforce\-list\fP استفاده می‌کند\&. .RS .PP آرگومان اختیاری \fIgroup\fP نام گروهی را مشخص می‌کند که مطابقت‌ها در آن قرار خواهند گرفت\&. اگر ارائه نشود، از \fItag\fP به عنوان نام گروه استفاده خواهد شد\&. .PP این تابع به طور خودکار از \fB_description\fP فراخوانی می‌شود و از این رو به طور معمول نیازی به فراخوانی صریح آن نیست\&. .RE .TP \fB_store_cache\fP \fIcache_identifier\fP \fIparam\fP \&.\&.\&. این تابع در کنار \fB_retrieve_cache\fP و \fB_cache_invalid\fP، یک لایهٔ حافظهٔ پنهان (کش) را پیاده‌سازی می‌کند که در هر تابع کامل‌سازی قابل استفاده است\&. داده‌های به‌دست‌آمده از طریق عملیات‌های سنگین در پارامترها ذخیره می‌شوند؛ سپس این تابع مقادیر آن پارامترها را درون یک فایل می‌ریزد\&. پس از آن، داده‌ها را می‌توان حتی در نمونه‌های مختلف شل، با سرعت بالا از طریق \fB_retrieve_cache\fP از آن فایل بازیابی کرد\&. .RS .PP آرگومان \fIcache_identifier\fP فایلی را مشخص می‌کند که داده‌ها باید در آن ریخته شوند\&. فایل در دایرکتوری تعیین‌شده با سبک \fBcache\-path\fP ذخیره می‌شود که پیش‌فرض آن \fB~/\&.zcompcache\fP است\&. آرگومان‌های باقی‌ماندهٔ \fIparam\fP، پارامترهایی هستند که باید در فایل ریخته شوند\&. .PP در صورت ذخیره‌سازی موفقیت‌آمیز، وضعیت خروج صفر است\&. این تابع تنها در صورتی اقدام به ذخیره‌سازی می‌کند که سبک \fBuse\-cache\fP تنظیم شده باشد، بنابراین می‌توانید این تابع را بدون نگرانی دربارهٔ تمایل کاربر به استفاده از لایهٔ حافظه پنهان فراخوانی کنید\&. .PP تابع کامل‌سازی در صورتی که پیشاپیش داده‌های کامل‌سازی را به صورت پارامتر در دسترس داشته باشد، می‌تواند از فراخوانی \fB_retrieve_cache\fP خودداری کند\&. با این حال، در این شرایط باید \fB_cache_invalid\fP را فراخوانی کند تا بررسی نماید که آیا داده‌های موجود در پارامترها و حافظه پنهان هنوز معتبر هستند یا خیر\&. .PP برای نمونه‌ای ساده از کاربرد لایهٔ حافظه پنهان، تابع کامل‌سازی _perl_modules را ببینید\&. .RE .TP \fB_tags\fP [ [ \fB\-C\fP \fIname\fP ] \fItag\fP \&.\&.\&. ] اگر با آرگومان‌ها فراخوانی شود، این آرگومان‌ها به عنوان نام برچسب‌های معتبر برای کامل‌سازی‌ها در بافتار جاری در نظر گرفته می‌شوند\&. این برچسب‌ها به صورت داخلی ذخیره شده و با استفاده از سبک \fBtag\-order\fP مرتب می‌گردند\&. .RS .PP سپس، \fB_tags\fP به طور مکرر بدون آرگومان از همان تابع کامل‌سازی فراخوانی می‌شود\&. این عمل به ترتیب نخستین، دومین و غیره مجموعه از برچسب‌های درخواست‌شده توسط کاربر را انتخاب می‌کند\&. در صورتی که دست‌کم یکی از برچسب‌ها درخواست شده باشد، وضعیت خروج صفر و در غیر این صورت غیرصفر است\&. برای بررسی اینکه آیا باید یک برچسب خاص بررسی شود، تابع \fB_requested\fP باید فراخوانی شود (بالا را ببینید)\&. .PP اگر `\fB\-C\fP \fIname\fP\&' داده شود، \fIname\fP در طول فراخوانی \fB_tags\fP به طور موقت در فیلد \fIargument\fP (فیلد پنجم) از بافتار در پارامتر \fBcurcontext\fP ذخیره می‌شود؛ این فیلد در هنگام خروج بازیابی می‌گردد\&. این ویژگی به \fB_tags\fP اجازه می‌دهد تا از بافتاری دقیق‌تر استفاده کند، بدون آنکه نیازی به تغییر و بازنشانی پارامتر \fBcurcontext\fP (که همین اثر را دارد) باشد\&. .RE .TP \fB_tilde_files\fP مشابه \fB_files\fP عمل می‌کند، اما علامت‌های مد (tilde) ابتدایی را مطابق با قواعد بسط نام فایل بازگشایی می‌کند، بنابراین کامل‌سازی‌های پیشنهادی با یک `\fB~\fP\&' آغاز نمی‌شوند حتی اگر نام فایل در خط فرمان با آن آغاز شده باشد\&. .TP \fB_values\fP [ \fB\-O\fP \fIname\fP ] [ \fB\-s\fP \fIsep\fP ] [ \fB\-S\fP \fIsep\fP ] [ \fB\-wC\fP ] \fIdesc\fP \fIspec\fP \&.\&.\&. این تابع برای کامل‌سازی کلیدواژه‌های دلخواه (مقادیر) و آرگومان‌های آن‌ها، یا فهرست‌هایی از این ترکیب‌ها به کار می‌رود\&. .RS .PP اگر آرگومان نخست گزینهٔ `\fB\-O\fP \fIname\fP\&' باشد، به همان شیوه‌ای که در تابع \fB_arguments\fP انجام می‌شود، به کار خواهد رفت\&. به بیان دیگر، عناصر آرایهٔ \fIname\fP در هنگام اجرای یک کنش (action) به \fBcompadd\fP ارسال خواهند شد\&..PP اگر نخستین آرگومان (یا نخستین آرگومان پس از `\fB\-O\fP \fIname\fP\&') برابر `\fB\-s\fP\&' باشد، آرگومان بعدی به‌عنوان نویسه‌ای به کار می‌رود که مقادیر چندگانه را از هم جدا می‌کند\&. این نویسه به‌طور خودکار پس از هر مقدار به شیوه‌ای با قابلیت حذف خودکار (auto\-removable، پایین‌تر را ببینید) افزوده می‌شود؛ برخلاف تکمیل با استفاده از \fB_arguments\fP، تمامی مقادیر کامل‌شده توسط `\fB_values \-s\fP\&' در همان کلمه بر روی خط فرمان ظاهر می‌شوند\&. اگر این گزینه وجود نداشته باشد، در هر کلمه تنها یک مقدار کامل خواهد شد\&. .PP به‌طور معمول، \fB_values\fP تنها از کلمهٔ جاری برای تعیین مقادیری که از قبل روی خط فرمان حضور دارند (و در نتیجه نباید دوباره کامل شوند) استفاده می‌کند\&. اگر گزینهٔ \fB\-w\fP داده شود، آرگومان‌های دیگر نیز بررسی می‌شوند\&. .PP نخستین آرگومان غیرگزینه‌ای، \fIdesc\fP، به‌عنوان رشته‌ای برای چاپ شدن به عنوان شرح پیش از فهرست کردن مقادیر به کار می‌رود\&. .PP تمامی آرگومان‌های دیگر، مقادیر ممکن و آرگومان‌های آن‌ها را با همان قالبی که تابع \fB_arguments\fP برای توصیف گزینه‌ها به کار می‌برد، شرح می‌دهند (بالا را ببینید)\&. تنها تفاوت‌ها این است که در ابتدا نیازی به علامت منفی یا مثبت نیست، مقادیر تنها می‌توانند یک آرگومان داشته باشند، و اشکال عملیاتی (actions) که با علامت مساوی آغاز می‌شوند پشتیبانی نمی‌شوند\&. .PP نویسهٔ جداکنندهٔ یک مقدار از آرگومانش را می‌توان با استفاده از گزینهٔ \fB\-S\fP تنظیم کرد (مشابه \fB\-s\fP، به همراه نویسه‌ای که در آرگومان بعدی به‌عنوان جداکننده به کار می‌رود)\&. به‌طور پیش‌فرض، علامت مساوی به‌عنوان جداکننده میان مقادیر و آرگومان‌ها استفاده خواهد شد\&. .PP مثال: .PP .RS .nf \fB_values \-s , \&'description' \e \&'*foo[bar]' \e \&'(two)*one[number]:first count:' \e \&'two[another number]::second count:(1 2 3)'\fP .fi .RE .PP این دستور سه مقدار ممکن را توصیف می‌کند: `\fBfoo\fP\&'، `\fBone\fP' و `\fBtwo\fP\&'\&. اولی با `\fBbar\fP' توصیف شده است، هیچ آرگومانی نمی‌پذیرد و ممکن است بیش از یک بار ظاهر شود\&. دومی با `\fBnumber\fP\&' توصیف شده است، ممکن است بیش از یک بار ظاهر شود، و یک آرگومان اجباری را می‌پذیرد که با `\fBfirst count\fP\&' توصیف شده است؛ هیچ عملیاتی مشخص نشده است، بنابراین کامل نخواهد شد\&. عبارت `\fB(two)\fP\&' در ابتدا بیان می‌کند که اگر مقدار `\fBone\fP' روی خط باشد، مقدار `\fBtwo\fP\&' دیگر به‌عنوان یک تکمیل ممکن در نظر گرفته نخواهد شد\&. در پایان، آخرین مقدار (`\fBtwo\fP\&') با `\fBanother number\fP\&' توصیف شده و یک آرگومان اختیاری را می‌پذیرد که با `\fBsecond count\fP\&' توصیف شده است و تکمیل‌های آن (که پس از یک `\fB=\fP\&' ظاهر می‌شوند) مقادیر `\fB1\fP'، `\fB2\fP' و `\fB3\fP' هستند\&. تابع \fB_values\fP فهرست‌هایی از این مقادیر را که با کاما از هم جدا شده‌اند کامل خواهد کرد\&. .PP مشابه \fB_arguments\fP، این تابع هنگام اجرای \fIaction\fP، مؤلفهٔ نام زمینهٔ (context name component) دیگری را موقتاً به مؤلفهٔ آرگومان‌ها (عنصر پنجم) در زمینهٔ جاری اضافه می‌کند\&. در اینجا این نام صرفاً نام مقداری است که آرگومانش در حال تکمیل است\&. .PP سبک \fBverbose\fP برای تصمیم‌گیری دربارهٔ این موضوع استفاده می‌شود که آیا توضیحات مقادیر (اما نه توضیحات آرگومان‌ها) چاپ شوند یا خیر\&. .PP آرایهٔ انجمنی \fBval_args\fP برای گزارش مقادیر و آرگومان‌های آن‌ها به کار می‌رود؛ این سازوکار مشابه آرایهٔ انجمنی \fBopt_args\fP است که توسط \fB_arguments\fP استفاده می‌شود\&. بنابراین تابعی که \fB_values\fP را فراخوانی می‌کند، باید پارامترهای محلی \fBstate\fP، \fBstate_descr\fP، \fBline\fP، \fBcontext\fP و \fBval_args\fP را اعلان کند: .PP .RS .nf \fBlocal context state state_descr line typeset \-A val_args\fP .fi .RE .PP هنگام استفاده از عملیاتی به صورت `\fB\->\fP\fIstring\fP\&'\&. با این تابع، پارامتر \fBcontext\fP بر روی نام مقداری که آرگومان آن باید کامل شود تنظیم خواهد شد\&. توجه داشته باشید که برای \fB_values\fP، متغیرهای \fBstate\fP و \fBstate_descr\fP به جای آرایه، اسکالر هستند\&. تنها یک حالت منطبق برگردانده می‌شود\&. .PP همچنین توجه داشته باشید که \fB_values\fP معمولاً نویسه‌ای را که به‌عنوان جداکننده میان مقادیر استفاده شده، به‌صورت یک پسوند با قابلیت حذف خودکار (مشابه یک `\fB/\fP\&' پس از یک دایرکتوری) می‌افزاید\&. با این حال، این امر برای عملیات `\fB\->\fP\fIstring\fP\&' ممکن نیست زیرا تطابق‌های مربوط به آرگومان توسط تابع فراخواننده تولید می‌شوند\&. برای دستیابی به رفتار معمول، تابع فراخواننده می‌تواند با ارسال گزینه‌های `\fB\-qS\fP \fIx\fP\&' چه به‌طور مستقیم و چه غیرمستقیم به \fBcompadd\fP، جداکنندهٔ \fIx\fP را به‌عنوان یک پسوند اضافه کند\&. .PP گزینهٔ \fB\-C\fP به همان روشی مدیریت می‌شود که در \fB_arguments\fP رفتار می‌شود\&. در آن صورت، پارامتر \fBcurcontext\fP باید به‌جای \fBcontext\fP محلی گردد (همان‌طور که در بالا شرح داده شد)\&. .RE .TP \fB_wanted\fP [ \fB\-x\fP ] [ \fB\-C\fP \fIname\fP ] [ \fB\-12VJ\fP ] \fItag\fP \fIname\fP \fIdescr\fP \fIcommand\fP [ \fIarg\fP \&.\&.\&.] در بسیاری از زمینه‌ها، تکمیل تنها می‌تواند یک مجموعهٔ خاص از تطابق‌ها را تولید کند، که معمولاً با یک برچسب (tag) منفرد مطابقت دارد\&. با این حال، همچنان لازم است مشخص شود که آیا کاربر به تطابق‌هایی از این نوع نیاز دارد یا خیر\&. این تابع در چنین مواردی مفید است\&. .RS .PP آرگومان‌های \fB_wanted\fP مشابه آرگومان‌های \fB_requested\fP هستند، یعنی آرگومان‌هایی که باید به \fB_description\fP منتقل شوند\&. با این حال، در این حالت دستور \fIcommand\fP اختیاری نیست؛ تمام پردازش برچسب‌ها، شامل پیمایش روی تگ‌ها و برچسب‌های تگ (tag labels) و تولید تطابق‌ها، به‌طور خودکار توسط \fB_wanted\fP انجام می‌شود\&. .PP بنابراین برای ارائهٔ تنها یک برچسب و افزودن فوری تطابق‌های متناظر با شرح داده‌شده: .PP .RS .nf \fBlocal expl _wanted tag expl \&'description' \e compadd \-\- \fImatch1\fP \fImatch2\fP\&.\&.\&.\fP .fi .RE .PP همچنین به کاربرد \fB_wanted\fP در تابع نمونه در زیربخش `Dynamic named directories\&' در \fIzshexpn\fP(1) نگاه کنید\&. .PP توجه داشته باشید که همانند \fB_requested\fP، دستور \fIcommand\fP باید قادر به پذیرش گزینه‌هایی باشد که به \fBcompadd\fP پاس داده می‌شوند\&. .PP مشابه \fB_tags\fP، این تابع از گزینهٔ \fB\-C\fP برای مشخص کردن نامی متفاوت برای فیلد زمینهٔ آرگومان پشتیبانی می‌کند\&. گزینهٔ \fB\-x\fP نیز همان مفهومی را دارد که برای \fB_description\fP دارد\&. .RE .TP \fB_widgets\fP [ \fB\-g\fP \fIpattern\fP ] این تابع نام‌های ویجت‌های zle را کامل می‌کند (بخش `Widgets\&' را در \fIzshzle\fP(1) ببینید)\&. الگوی \fIpattern\fP در صورت وجود، در برابر مقادیر پارامتر ویژهٔ \fB$widgets\fP تطبیق داده می‌شود که در بخش `The zsh/zleparameter Module\&' در \fIzshmodules\fP(1) مستند شده است\&. .PP.SH "متغیرهای سیستم تکمیل (COMPLETION SYSTEM VARIABLES)" .PP تعدادی متغیر استاندارد وجود دارند که توسط تابع \fB_main_complete\fP مقداردهی اولیه شده و سپس توسط توابع دیگر استفاده می‌شوند\&. .PP متغیرهای استاندارد عبارتند از: .PP .PD 0 .TP .PD \fB_comp_caller_options\fP سیستم تکمیل از \fBsetopt\fP برای تنظیم تعدادی گزینه استفاده می‌کند\&. این امر اجازه می‌دهد تا توابع بدون نگرانی در مورد سازگاری با هر ترکیب ممکنی از گزینه‌های کاربر نوشته شوند\&. با این حال، گاهی اوقات سیستم تکمیل باید بداند که ترجیحات گزینه‌ای کاربر چه هستند\&. این موارد در آرایهٔ انجمنی \fB_comp_caller_options\fP ذخیره می‌شوند\&. نام گزینه‌ها، که با حروف کوچک و بدون خط زیرین (underscore) نوشته می‌شوند، به یکی از دو رشتهٔ `\fBon\fP\&' یا `\fBoff\fP' نگاشت می‌شوند\&. .TP \fB_comp_priv_prefix\fP توابع تکمیل مانند \fB_sudo\fP می‌توانند آرایهٔ \fB_comp_priv_prefix\fP را روی یک پیشوند دستوری تنظیم کنند که ممکن است سپس توسط \fB_call_program\fP برای تطبیق مجوزها هنگام فراخوانی برنامه‌ها جهت تولید موارد منطبق استفاده شود\&. .PP دو قابلیت دیگر توسط تابع \fB_main_complete\fP ارائه می‌شود\&. آرایه‌های \fBcompprefuncs\fP و \fBcomppostfuncs\fP ممکن است حاوی نام توابعی باشند که باید بلافاصله قبل یا بعد از تلاش برای تکمیل فراخوانی شوند\&. یک تابع فقط یک بار فراخوانی خواهد شد مگر اینکه صراحتاً خود را مجدداً درون آرایه درج کند\&. .PP .SH "دایرکتوری‌های تکمیل (COMPLETION DIRECTORIES)" .PP در توزیع کد منبع، فایل‌ها در زیرشاخه‌های مختلفی از دایرکتوری \fBCompletion\fP قرار دارند\&. آنها ممکن است با همان ساختار، یا درون یک دایرکتوری واحد برای توابع نصب شده باشند\&. آنچه در ادامه می‌آید، توصیفی از فایل‌های موجود در ساختار دایرکتوری اصلی است\&. اگر می‌خواهید یک فایل نصب‌شده را تغییر دهید، باید آن را در دایرکتوری‌ای کپی کنید که در \fBfpath\fP شما قبل از دایرکتوری استانداردی که فایل در آن قرار دارد ظاهر شود\&. .PP .PD 0 .TP .PD \fBBase\fP توابع اصلی و ویجت‌های ویژهٔ تکمیل که به‌طور خودکار به کلیدها مقید (bind) شده‌اند\&. شما قطعاً به بیشتر این موارد نیاز خواهید داشت، اگرچه احتمالاً نیازی به تغییر دادن آن‌ها نخواهید داشت\&. بسیاری از این موارد در بالا مستند شده‌اند\&. .TP \fBZsh\fP توابعی برای تکمیل آرگومان‌های دستورهای داخلی (builtin) پوسته و توابع کمکی برای این منظور\&. برخی از این‌ها توسط توابع موجود در دایرکتوری \fBUnix\fP نیز استفاده می‌شوند\&. .TP \fBUnix\fP توابعی برای تکمیل آرگومان‌های دستورهای خارجی و مجموعه‌هایی از دستورها\&. ممکن است نیاز باشد این توابع برای سیستم شما اصلاح شوند، اگرچه در بسیاری از موارد تلاشی صورت می‌گیرد تا مشخص شود کدام نسخه از یک دستور موجود است\&. برای مثال، تکمیل برای دستور \fBmount\fP سعی می‌کند سیستمی را که بر روی آن اجرا می‌شود تعیین کند، در حالی که تکمیل برای بسیاری از ابزارهای دیگر سعی می‌کند تشخیص دهد آیا نسخهٔ GNU از دستور در حال استفاده است یا خیر، و بنابراین آیا گزینهٔ \fB\-\fP\fB\-help\fP پشتیبانی می‌شود یا نه\&. .TP \fBX\fP، \fBAIX\fP، \fBBSD\fP، \&.\&.\&. توابع تکمیل و کمکی برای دستورهایی که تنها روی برخی سیستم‌ها در دسترس هستند\&. این موارد به صورت سلسله‌مراتبی مرتب نشده‌اند، بنابراین برای مثال، هر دو دایرکتوری \fBLinux\fP و \fBDebian\fP، و همچنین دایرکتوری \fBX\fP، ممکن است بر روی سیستم شما مفید باشند\&.