.TH rlwrap 1 "November 7, 2025" .SH "نام (NAME)" rlwrap \- پوشش‌دهنده ریدلاین برای ویرایش خط فرمان، تاریخچه و تکمیل خودکار .de OP .ie \\n(.$-1 .RI "[\ \fB\\$1\fP " "\\$2" "\ ]" .el .RB "[\ " "\\$1" "\ ]" .. .de OB .ie 'yes'yes' .B \\$1[\\$3], \\$2[=\\$3] .el .B \\$1 \\$3 .. .de OA .ie 'yes'yes' این آرگومان اختیاری است؛ در صورت ارائه، باید \ مستقیماً بدون فاصله پس از یک گزینه کوتاه (\fB\\$1\\$3\fP) و پس از یک گزینه بلند با علامت مساوی (\fB\\$2=\\$3\fP) بیاید. .el در این سیستم، آرگومان‌های اختیاری کار نمی‌کنند؛ بنابراین در صورت نیاز، از یک آرگومان (صوری) استفاده کنید (\fB\\$1 \\$4\fP). .. .de OL .ie 'yes'yes' .B \\$1, \\$2 \\$3 .el .B \\$1 \\$3 .. .SH "خلاصه دستور (SYNOPSIS)" .B rlwrap .I [rlwrap\-options] .I command \.\.\. .SH "توضیحات (DESCRIPTION)" دستور \fBrlwrap\fP دستور مشخص‌شده \fIcommand\fP را اجرا کرده و با رهگیری ورودی کاربر، قابلیت‌های ویرایش خط، تاریخچه ماندگار و تکمیل خودکار کتابخانه \fBreadline\fP را برای آن فراهم می‌کند. دستور \fBrlwrap\fP تلاش می‌کند (و \fIتقریباً\fP موفق می‌شود) که کاملاً شفاف عمل کند؛ بدین معنی که شما (یا پوسته شما) نباید هیچ تفاوتی بین \fBcommand\fP و \fBrlwrap command\fP احساس کنید، مگر البته افزوده شدن قابلیت‌های ریدلاین. این موضوع حتی هنگام تغییر مسیر (re-directing)، ارسال به لوله (piping) و ارسال سیگنال‌ها به/از \fIcommand\fP و زمانی که \fIcommand\fP تنظیمات ترمینال، دایرکتوری کاری یا (با گزینه \fB\-U\fP) خط فرمان خود را دستکاری می‌کند، برقرار است. گزینه‌های متعددی برای افزودن تکمیل خودکار (قابل برنامه‌ریزی)، مدیریت ورودی‌های چندخطی، رنگ‌آمیزی و بازنویسی اعلان‌ها (prompts) وجود دارد. اگر به آن‌ها نیازی ندارید (که احتمالاً هم ندارید)، می‌توانید از بقیه این صفحه راهنما صرف‌نظر کنید، گرچه برخی از این گزینه‌ها می‌توانند کار با خط فرمان شما را بسیار راحت‌تر کنند... .SH "گزینه‌ها (OPTIONS)" .TP .OB \-a \-\-always\-readline \fIpassword_prompt\fP همیشه در «حالت ریدلاین» (در ادامه توضیح داده شده) باقی بماند، بدون در نظر گرفتن تنظیمات ترمینال \fIcommand\fP. اگر \fBrlwrap\fP «کاری انجام نمی‌دهد» این گزینه برای استفاده است، چرا که ظاهراً \fIcommand\fP در حال حاضر خودش ویرایش خط را انجام می‌دهد. \fBنکته\fP: با این گزینه، rlwrap گذرواژه‌ها را در خروجی منعکس (و ذخیره) می‌کند، مگر اینکه اعلان گذرواژه \fIcommand\fP را به عنوان آرگومان مشخص کنید. .OA \-a \-\-always\-readline Password: brumbleslurgh گزینه \fB\-N\fP (\fB\-\-no\-children\fP) را می‌توان برای جلوگیری از پوشش‌دهی صفحه‌بندها و ویرایشگرهایی که از \fIcommand\fP فراخوانی می‌شوند به کار برد؛ این کار کارایی آن‌ها را بسیار بهتر می‌کند. .TP .OB \-A \-\-ansi\-colour\-aware \fI!\fP اعلان‌هایی که از رنگ استفاده می‌کنند، یا کدهای CSI دیگر را مثلاً برای تنظیم عنوان پنجره یا فعال‌سازی bracketed\-paste به کار می‌برند، ممکن است باعث سردرگمی rlwrap شوند، به‌ویژه در انتهای خطوط ورودی طولانی. این گزینه معمولاً (اما نه در همه موارد) رفتار rlwrap را در چنین شرایطی بهتر می‌کند. ارائه '!' به عنوان آرگومان باعث می‌شود \fBrlwrap\fP تمام کدهای رنگی را از اعلان حذف کند. .OA \-A \-\-ansi\-colour\-aware ! '' .TP .OL \-b \-\-break\-chars \fIlist_of_characters\fP کاراکترهای مشخص‌شده را به عنوان جداکننده کلمه در نظر می‌گیرد. این تعیین می‌کند چه چیزی هم در زمان تکمیل خودکار و هم در زمان ساخت فهرست کلمات تکمیل از فایل‌های مشخص‌شده با گزینه‌های \fB\-f\fP بعد از آن (نه قبل از آن!) به عنوان یک «کلمه» شناخته شود. فهرست پیش‌فرض: (){}[],'+\-=&^%$#@";|\\ مگر اینکه \-c مشخص شده باشد، \" "quote to keep emacs happy کاراکترهای / و \. (نقطه) به این فهرست پیش‌فرض اضافه می‌شوند. فاصله‌های خالی (Whitespace) همیشه جداکننده کلمه هستند، مگر اینکه به ابتدای فهرست پیشوند \fB"precisely:"\fP را اضافه کنید. به عنوان مثال: \fB\-b $'precisely:\\t'\fP روی تب‌ها تفکیک می‌کند، اما روی فاصله‌ها یا چیز دیگری جداکننده نخواهد بود. به دلیل محدودیتی در \fBrlwrap\fP، خطوط جدید (newlines) همیشه جداکننده کلمه هستند. .TP .OL \-c \-\-complete\-filenames تکمیل نام فایل‌ها (تکمیل نام فایل همیشه به بزرگی و کوچکی حروف حساس است، حتی با گزینه \-i). در لینوکس، OS X، FreeBSD و Solaris، دستور \fBrlwrap\fP دایرکتوری کاری \fIcommand\fP را دنبال می‌کند تا نام فایل‌های نسبی همان‌طور که انتظار می‌رود تکمیل شوند. .TP .OL \-C \-\-command\-name \fIcommand_name|N\fP استفاده از \fIcommand_name\fP به جای \fIcommand\fP برای تعیین نام فایل‌های تاریخچه و تکمیل خودکار، و ارزیابی شرط‌های \fB$if\fP \fIcommand_name\fP در \fB$INPUTRC\fP. آرگومان عددی N > 0 یعنی: استفاده از Nامین آرگومان به عنوان \fIcommand_name\fP (شمارش معکوس از انتهای فهرست آرگومان‌ها). .TP .OL \-D \-\-history\-no\-dupes \fIn\fP میزان سخت‌گیری در حذف موارد تکراری از تاریخچه ورودی. اگر \fIn\fP = \fB0\fP باشد، تمام ورودی‌ها در فهرست تاریخچه نگهداری می‌شوند؛ اگر \fIn\fP = \fB1\fP باشد (پیش‌فرض)، موارد تکراری متوالی از فهرست حذف می‌شوند، در حالی که \fIn\fP = \fB2\fP باعث می‌شود \fBrlwrap\fP تمام رخدادهای قبلی ورودی جاری (در نشست فعال) را از فهرست پاک کند. استفاده از \fB-D 2\fP در ترکیب با کلید \fBoperate\-and\-get\-next\fP ممکن است موارد تاریخچه را به روشی غیرقابل‌پیش‌بینی جابه‌جا کند! .TP .OL \-e \-\-extra-char\-after\-completion \fIchar\fP به طور پیش‌فرض، rlwrap پس از هر متن تکمیل درج‌شده یک فاصله می‌افزاید. با این گزینه می‌توانید آن را به '' (عدم درج هیچ چیز) یا کاراکتری دیگر تغییر دهید. .TP .OL \-E \-\-always\-echo به طور پیش‌فرض، \fBrlwrap\fP با نمایش '***' در هر زمان که کلاینت فلگ ECHO را در ورودی خود پاک کند، از نمایش گذرواژه‌ها جلوگیری می‌کند. این گزینه باعث می‌شود \fBrlwrap\fP این فلگ ECHO را نادیده بگیرد و همیشه ورودی کاربر را منعکس کند (\fB\-aPassword:\fP همچنان طبق انتظار کار خواهد کرد). .TP .OL \-f \-\-file \fIfile\fP تقسیم \fIfile\fP به کلمات (با استفاده از کاراکترهای پیش‌فرض تفکیک کلمه، یا کاراکترهای مشخص‌شده توسط گزینه \-\-break\-chars \fBقبلی\fP)، و افزودن آن‌ها به فهرست کلمات تکمیل. این گزینه می‌تواند بیش از یک بار مشخص شود، و کلمات را به فهرست تکمیل پیش‌فرض در RLWRAP_HOME$ یا /usr/share/rlwrap/completions \fIاضافه می‌کند\fP. مشخص کردن \fB\-f .\fP باعث می‌شود \fBrlwrap\fP از فایل تاریخچه جاری به عنوان فهرست کلمات تکمیل استفاده کند. .TP .OL \-g \-\-forget\-matching \fIregexp\fP فراموش کردن (یعنی هرگز در فهرست تاریخچه قرار ندادن) خطوط ورودی که با عبارت باقاعده POSIX 1003.2 به نام \fIregexp\fP مطابقت دارند. یک مورد استفاده متداول \fB-g '^[[:blank:]]'\fP (یا به سادگی \fB-g '^ '\fP) است تا خطوط ورودی که با فاصله شروع می‌شوند به خاطر سپرده نشوند. تطابق همیشه غیرحساس به بزرگی و کوچکی حروف است. کلاس‌های کاراکتری به سبک \fBperl\fP مانند '\\d' شناخته نمی‌شوند، از '[[:digit:]]' استفاده کنید. برای اطلاعات بیشتر درباره عبارات باقاعده، \fBregex (7)\fP را ببینید. .TP .OL \-h \-\-help چاپ یک پیام راهنمای کوتاه. .TP .OL \-H \-\-history\-filename \fIfile\fP خواندن تاریخچه دستورات از \fIfile\fP (و بازنویسی در آن در صورتی که 0 <= histsize\-\- باشد). .TP .OL \-i \-\-case\-insensitive نادیده گرفتن بزرگی و کوچکی حروف هنگام تکمیل خودکار (تکمیل نام فایل همچنان حساس به حروف باقی می‌ماند). این گزینه باید قبل از هر گزینه \-f بیاید. .TP .OL \-I \-\-pass\-sigint\-as\-sigterm ارسال سیگنال TERM به \fIcommand\fP هنگام دریافت INT (مثلاً زمانی که CTRL\-C را فشار می‌دهید). .TP .OL \-l \-\-logfile \fIfile\fP در حالت ریدلاین، الحاق خروجی \fIcommand\fP (شامل ورودی منعکس‌شده کاربر) به \fIfile\fP (در صورت عدم وجود \fIfile\fP، ایجاد می‌شود). .TP .OB \-m \-\-multi\-line \fInewline_substitute\fP فعال‌سازی ورودی چندخطی با استفاده از یک توالی کاراکتری «جایگزین خط جدید» (به طور پیش‌فرض " \\ "، [فاصله\-بک‌اسلش\-فاصله]). جایگزین‌های خط جدید پیش از ارسال ورودی به \fIcommand\fP به خط جدید تبدیل می‌شوند. با این گزینه، می‌توانید یک ویرایشگر خارجی RLWRAP_EDITOR$ را روی ورودی جاری (گسترش‌یافته) با کلید \fIrlwrap_call_editor\fP (به طور پیش‌فرض CTRL\-^) فراخوانی کنید. .OA \-m \-\-multi\-line ';;' "' \\\\ '" .TP .OL \-M \-\-multi\-line\-ext \fI.ext\fP فراخوانی ویرایشگر چندخطی روی فایل‌های موقت با پسوند نام فایل \fI.ext\fP (برای مثال برای رنگ‌آمیزی خودکار نحو مفید است). .TP .OL \-n \-\-no\-warnings عدم چاپ هشدارها. .TP .OL \-N \-\-no\-children زمانی که \fBrlwrap\fP با گزینه \fB--always-readline\fP فراخوانی می‌شود، صفحه‌بندها و ویرایشگرهایی که توسط کلاینت فراخوانی می‌شوند عملاً غیرقابل‌استفاده خواهند بود، زیرا آن‌ها کلیدهای فشرده‌شده را فقط با فشردن ENTER دریافت می‌کنند. دستور \fBrlwrap -N\fP با سوئیچ به حالت مستقیم در صورتی که تشخیص دهد \fIcommand\fP منتظر یکی از فرزندان خود است، از این مشکل جلوگیری می‌کند. .TP .OL \-o \-\-one\-shot ارسال یک EOF به \fIcommand\fP پس از پذیرش اولین خط ورودی. .TP .OL \-O \-\-only\-cook \fIregexp\fP فقط پردازش (cook) اعلان‌هایی که با \fIregexp\fP مطابقت دارند؛ می‌تواند با '!' شروع شود، به این معنی که \fBتمام\fP اعلان‌های کاندید مطابق بلافاصله پردازش می‌شوند («حالت مطمئن»). .TP .OB \-p \-\-prompt\-colour \fIcolour\fP استفاده از یکی از نام‌های رنگ \fIblack, red, green, yellow, blue, cyan, purple (=magenta)\fP یا \fIwhite\fP، یا یک کد رنگی ANSI مانند $'\\033[1;33m' یا 'ESC[38;5;209m'. یک نام رنگ با حروف بزرگ (\fIYellow\fP یا \fIYELLOW\fP) باعث بولد شدن اعلان می‌شود. اعلان‌هایی که از قبل حاوی توالی‌های اسکیپ (رنگی) یا یکی از «نشانگرهای نادیده‌گیری» ریدلاین (ASCII 0x01 و 0x02) هستند، هرگز رنگ‌آمیزی نمی‌شوند. این گزینه به طور ضمنی \-\-ansi\-colour\-aware را فعال می‌کند. برای کسب اطلاعات بیشتر درباره کدهای رنگ، 'ANSI color' را در گوگل جستجو کنید. .OA \-p \-\-prompt\-colour 'Red' 'Red' .TP .OL \-P \-\-pre\-given \fItext\fP شروع \fBrlwrap\fP در حالی که \fItext\fP در بافر ویرایش آن قرار دارد (این کار گزینه \-\-always\-readline را به طور خودکار فعال می‌کند). .TP .OL \-q \-\-quote\-characters \fIlist_of_characters\fP فرض می‌کند که کاراکترهای داده‌شده هنگام تطبیق پرانتزها به عنوان علامت نقل‌قول عمل می‌کنند. دقت کنید که این فهرست را برای پوسته خود به درستی اسکیپ کنید (مثال: \-q "\\"'", که پیش‌فرض است، یا \-q "\\"" که برای ورودی‌های لیسپ مناسب‌تر خواهد بود). .TP .OL \-r \-\-remember قرار دادن تمام کلمات مشاهده‌شده در ورودی و خروجی در فهرست تکمیل خودکار. .TP .OL \-R \-\-renice تنظیم اولویت \fBrlwrap\fP به صورتی که بهتر (nicer) از \fIcommand\fP باشد (مقایسه کنید با \fBnice (1)\fP). این کار ممکن است از قطع شدن \fIcommand\fP توسط \fBrlwrap\fP برای نمایش اعلان در زمانی که \fIcommand\fP هنوز در حال پردازش خروجی بعدی است، جلوگیری کند. .TP .OL \-s \-\-histsize \fIN\fP محدود کردن فهرست تاریخچه به N ورودی، همراه با کوتاه کردن فایل تاریخچه (پیش‌فرض: 300). اندازه منفی \-N (حتی \-0) همان معنای N را دارد، اما فایل تاریخچه را فقط‌خواندنی در نظر می‌گیرد. .TP .OL \-S \-\-substitute\-prompt \fIprompt\fP جایگزین کردن اعلان مشخص‌شده به جای اعلان خود \fIcommand\fP. عمدتاً زمانی مفید است که \fIcommand\fP اعلانی ندارد. .TP .OL \-t \-\-set\-terminal\-name \fIname\fP تنظیم متغیر TERM دستور \fIcommand\fP به \fIname\fP. برنامه‌هایی را که با کدهای کنترلی پیچیده صفحه باعث سردرگمی \fBrlwrap\fP می‌شوند، گاهی می‌توان با مشخص کردن \fB\-t dumb\fP رام کرد. .TP .OL \-U \-\-mirror-arguments (فقط در لینوکس) ردیابی آرگومان‌های \fIcommand\fP همان‌طور که توسط دستور \fBps (1)\fP دیده می‌شوند، و بازتاب آن‌ها در آرگومان‌های خود \fBrlwrap\fP. این قابلیت می‌تواند برای دستوراتی مفید باشد که آرگومان‌های گذرواژه خط فرمان را بازنویسی می‌کنند که بدون این گزینه توسط \fBrlwrap\fP فاش می‌شدند. این بازتاب فقط پس از اولین ورودی کاربر یا در صورت استفاده از گزینه \fB\-\-polling\fP (که اگر می‌خواهید خط فرمان را پنهان کنید احتمالاً نیاز دارید) پس از چند میلی‌ثانیه انجام می‌شود. .TP .OL \-v \-\-version چاپ نسخه rlwrap. .TP .OL \-w \-\-wait\-before\-prompt \fItimeout\fP برای تعیین اینکه آیا آخرین خروجی \fIcommand\fP یک اعلان است، \fBrlwrap\fP به مدت \fItimeout\fP میلی‌ثانیه پس از دریافت آن منتظر می‌ماند. تنها زمانی که خروجی دیگری نرسد، اعلان پردازش (رنگ‌آمیزی، فیلتر یا جایگزین با اعلان جایگزین) شده و به عنوان اعلان نمایش می‌یابد. پیش از آن، اعلان به صورت «پردازش‌نشده» نمایش داده می‌شود. اکثر کاربران متوجه نخواهند شد، اما کسانی که پردازش سنگین روی اعلان دارند می‌توانند یک علامت منفی قبل از مهلت زمانی قرار دهند، که باعث می‌شود rlwrap اعلان را تا قبل از پردازش نگه دارد («حالت صبور»). این کار از پرش و چشمک‌زدن اعلان جلوگیری می‌کند، اما با خطوط خروجی طولانی تداخل داشته و قابلیت اطمینان سوییچ از حالت مستقیم به حالت ریدلاین را کاهش می‌دهد. مهلت زمانی پیش‌فرض: 40 میلی‌ثانیه. .TP .OL \-W \-\-polling بیدار شدن در هر \fItimeout\fP میلی‌ثانیه، که در آن \fItimeout\fP همان مقدار گزینه \-w (\-\-wait\-before\-prompt) است (به طور پیش‌فرض 40 میلی‌ثانیه). این ویژگی برای تشخیص کاراکتر وقفه اسلیو و فلگ ISIG و تنظیم پیکربندی ترمینال stdin بر همین اساس به کار می‌رود، حتی پیش از آنکه کلیدی را فشار دهید. این گزینه را زمانی امتحان کنید که مثلاً CTRL-C روی \fIcommand\fP با و بدون \fBrlwrap\fP رفتار متفاوتی دارد. .TP .OL \-X \-\-skip_setctty عدم ایجاد یک نشست جدید برای \fIcommand\fP: دستور \fIcommand\fP ترمینال کنترلی فرآیندی را که \fBrlwrap\fP را فراخوانی کرده به ارث می‌برد. این قابلیت می‌تواند برای پوشش دادن دستوراتی مفید باشد که فرزندانی تولید می‌کنند که انتظار می‌رود با خروج خود دستور به کار ادامه دهند (به‌ویژه: سیگنال SIGHUP دریافت نکنند). .TP .OL \-z \-\-filter \fIfilter\fP استفاده از \fIfilter\fP برای تغییر رفتار \fBrlwrap\fP. فیلترها اسکریپت‌های کوچک \fBpython\fP یا \fBperl\fP هستند که توسط \fBrlwrap\fP برای بازنویسی یا سرکوب ورودی، خروجی، اعلان‌ها، موارد تاریخچه و حتی سیگنال‌ها اجرا می‌شوند. می‌توان از آن‌ها برای دور نگه داشتن ورودی حساس از تاریخچه، پیاده‌سازی ماکروهای ساده، کلیدهای میانبر قابل برنامه‌ریزی برای مواردی مانند جستجوی فازی تاریخچه، و تکمیل خودکار برنامه‌پذیر استفاده کرد. دستور \fBrlwrap\fP به همراه یک ماژول \fBperl\fP و یک ماژول \fBpython\fP عرضه می‌شود تا نوشتن فیلترها آسان باشد (مقایسه کنید با \fBRlwrapFilter(3pm)\fP برای ماژول پرل؛ ماژول پایتون بسیار مشابه است). تعدادی فیلتر نمونه در دایرکتوری /usr/share/rlwrap/filters نصب شده است. rlwrap \-z listing تمام فیلترهای نصب‌شده فعلی را فهرست می‌کند، در حالی که rlwrap \-z filter اطلاعات مربوط به \fIfilter\fP را نمایش می‌دهد. اگر \fIfilter\fP به آرگومان نیاز دارد، باید کل خط فرمان فیلتر را داخل کوتیشن قرار دهید: .nf rlwrap \-z 'filter args' command ... rlwrap \-z 'pipeline filter1 ... : filter2 ... : ...' command ... .fi اگر این خط فرمان شامل کاراکترهای کنترلی پوسته باشد، \fBrlwrap\fP آن را برای تجزیه به پوسته سیستم ارسال می‌کند. از آنجا که فیلترها باید از یک پروتکل ویژه پیروی کنند، دستورات پوسته مانند \fBsed\fP و \fBgrep\fP را نمی‌توان مستقیماً به عنوان فیلترهای \fBrlwrap\fP استفاده کرد. با این حال، می‌توان آن‌ها را توسط فیلتر \fBmakefilter\fP به فیلتر تبدیل نمود: rlwrap \-z 'makefilter egrep \-i \-\-color "error|$"' command تمام رخدادهای "error" (یا "Error") را در خروجی \fIcommand\fP رنگ‌آمیزی می‌کند، در حالی که rlwrap \-z 'makefilter --message-type history sed -e s"/whisky/lemonade/"' command تاریخچه نوشیدنی‌های شما را پاکسازی می‌کند. البته هر دو فیلتر را می‌توان با استفاده از فیلتر \fBpipeline\fP ترکیب کرد. .SH "مثال‌ها (EXAMPLES)" .TP 3 اجرای \fBnc\fP (netcat) با قابلیت ویرایش خط فرمان و تاریخچه .B rlwrap\ nc .TP پوشش‌دهی \fBsmbclient\fP (که خود از ریدلاین استفاده می‌کند)، دور نگه داشتن گذرواژه‌ها از تاریخچه و عدم تداخل با صفحه‌بندها (مانند \fBless\fP) که توسط smbclient فراخوانی می‌شوند. .B rlwrap\ \-aPassword:\ \-N\ smbclient //PEANUT/C .TP پوشش‌دهی \fIsensitive_app\fP، مخفی کردن گذرواژه از \fBps\fP (در صورتی که \fIsensitive_app\fP این کار را انجام دهد) و دور نگه داشتن تمام ورودی‌هایی که با فاصله شروع می‌شوند از تاریخچه: .B rlwrap -g '^ ' -U sensitive_app --password MySeCrEt .TP پوشش‌دهی \fBgauche\fP (یک مفسر Scheme) با یک اعلان آبی پررنگ، فعال‌سازی ویرایش چندخطی (با استفاده از پسوند فایل scm.) و در نظر نگرفتن علامت نقل‌قول تکی به عنوان کوت (تا پرانتزها مثلاً در (print 'q) تطابق داشته باشند) .B rlwrap\ \-pBlue \-m\ \-M\ .scm\ \-q'"' gosh " .TP پوشش‌دهی \fBsqlite3\fP، استفاده از فیلتر \fBpipeto\fP برای توانایی هدایت خروجی دستورات SQL از طریق لوله به \fBgrep\fP و/یا \fBless\fP، و تکمیل خودکار (غیرحساس به بزرگی و کوچکی حروف) بر اساس کلمات کلیدی SQL در 'sql_words' .B rlwrap\ \-a\ \-z\ pipeto\ \-i\ \-f\ sql_words\ sqlite3\ contacts.db .TP در یک اسکریپت شل، استفاده از \fBrlwrap\fP در حالت 'تک‌مرحله‌ای' (one\-shot) به عنوان جایگزینی برای \fBread\fP .B order=$(rlwrap\ -pYellow\ \-S\ 'Your pizza?\ '\ \-H past_orders\ \-P\ Margherita\ \-o\ cat) .SH "حالت مستقیم و حالت ریدلاین (DIRECT MODE AND READLINE MODE)" بیشتر دستورات ساده کنسول، ترمینال شما را در حالت «پردازش‌شده» (cooked) یا «خام» (raw) قرار می‌دهند. در حالت پردازش‌شده، ترمینال تا زمانی که کلید ENTER را فشار ندهید منتظر می‌ماند و سپس تمام خط را به برنامه تحویل می‌دهد؛ در حالت خام، هر کلیدی که فشار می‌دهید بلافاصله تحویل داده می‌شود. در حالت پردازش‌شده معمولاً می‌توانید از کلید backspace برای ویرایش ورودی استفاده کنید، اما کلیدهای جهت‌نما برای این کار عمل نمی‌کنند. زمانی که از دستور \fBrlwrap\fP \fIcommand\fP استفاده می‌کنید، \fBrlwrap\fP آن را در یک نشست جداگانه، تحت «شبه‌ترمینال» (pty) کنترلی خود اجرا می‌کند و این pty را تحت نظر می‌گیرد تا ببیند در حالت خام است یا پردازش‌شده. در حالت اول، \fBrlwrap\fP تمام ورودی و خروجی را مستقیماً بین \fIcommand\fP و ترمینال شما کپی می‌کند («حالت مستقیم»). در حالت دوم، \fBrlwrap\fP از ریدلاین برای ویرایش ورودی استفاده می‌کند («حالت ریدلاین») و خروجی \fBcommand\fP را زیر نظر می‌گیرد؛ هر خط پایانی که به خط جدید ختم نشود یک اعلان کاندید است. نحوه رفتار با این اعلان کاندید به این بستگی دارد که در حالت «صبور» باشد یا «ناشکیبا» (در ادامه آمده است). دستورات ساده کنسول هر زمان که خطوط کامل ورودی را بخواهند از حالت پردازش‌شده، و هرگاه فشرده شدن تک‌کلیدها را بخواهند از حالت خام استفاده می‌کنند. این‌ها همان برنامه‌هایی هستند که \fBrlwrap\fP بیشترین کاربرد را برای آن‌ها دارد. دستورات پیچیده‌تر ویرایشگر خط اختصاصی خود را دارند و از این رو همیشه از حالت خام استفاده می‌کنند. در کار با این دستورات، به نظر می‌رسد که \fBrlwrap\fP «کاری انجام نمی‌دهد». بنابراین، اگر زمانی که کاربر برای نخستین بار کلید ENTER را فشار می‌دهد \fBrlwrap\fP در حالت مستقیم باشد، هشداری صادر می‌کند مبنی بر اینکه برای انجام هر کاری به \fB\-\-always\-readline\fP نیاز است (هشدارها را می‌توان با گزینه \fB\-n\fP غیرفعال کرد). .SH "حالت صبور، ناشکیبا و مطمئن (PATIENT, IMPATIENT AND CONFIDENT MODE)" اگر \fIcommand\fP خروجی زیادی بنویسد، این خروجی تمایل دارد به صورت «تکه‌های مجزا» (chunks) نوشته (و خوانده) شود. تمام تکه‌ها به یک خط جدید ختم نمی‌شوند، و ما باید آخرین خطوط آن‌ها («اعلان‌های کاندید») را از اعلان‌های واقعی تشخیص دهیم، به‌ویژه اگر بخواهیم اعلان‌ها را بازنویسی («پردازش») کنیم. دستور \fBrlwrap\fP این مشکل را (تقریباً) با کمی صبر حل می‌کند تا ببیند آیا خروجی بیشتری در راه است یا خیر. این زمان به طور پیش‌فرض 40 میلی‌ثانیه است، اما می‌توان آن را با گزینه \fB\-w\fP تغییر داد. معمولاً \fBrlwrap\fP اعلان کاندید را به محض دریافت می‌نویسد، و پس از سپری شدن زمان انتظار، آن را با نسخه «پردازش‌شده» جایگزین می‌کند. به این رفتار، حالت «ناشکیبا» (impatient) گفته می‌شود. اگر اثر چشمک‌زدن را دوست ندارید (که در زمان پردازش سنگین اعلان می‌تواند آزاردهنده باشد)، می‌توانید \fBrlwrap\fP را با تعیین مقداری منفی در \fB\-w\fP (مثلاً ‎\-w \-40) در «حالت صبور» قرار دهید. در این صورت، Rlwrap اعلان را نگه می‌دارد و تنها پس از پردازش، آن را چاپ می‌کند. اگر اعلان‌ها همیشه با یک عبارت باقاعده مطابقت دارند، می‌توانید «حالت مطمئن» را با \fB--only-cook='!'\fP مشخص کنید (به علامت تعجب توجه نمایید). در این صورت تمام اعلان‌های کاندید مطابق (و فقط آن‌ها) بلافاصله پردازش می‌شوند. با این حال، اگر خروجی بیشتری دریافت شود، به حالت «پردازش‌نشده» بازنمی‌گردند؛ اتفاقی که در صورت اعلان نبودن آن‌ها ممکن است رخ دهد. حالت مطمئن با مقادیر منفی برای گزینه \fB-w\fP کار نمی‌کند. .SH "پردازش و آماده‌سازی اعلان‌ها (COOKING PROMPTS)" اگر و زمانی که \fBrlwrap\fP تشخیص دهد که با یک اعلان مواجه است، بسته به گزینه‌های ارائه‌شده مجموعه‌ای از اقدامات را روی آن انجام می‌دهد: فیلتر کردن (\fB\-z\fP)، جایگزینی (\fB\-S\fP) و رنگ‌آمیزی (\fB\-p\fP)، به همین ترتیب. اعلان «پردازش‌شده» حاصل سپس چاپ می‌شود (در صورت لزوم پس از پاک کردن اعلان «خام»). .SH "کلیدهای ویژه و دستورات قابل انتساب (SPECIAL KEYS AND BINDABLE COMMANDS)" .TP .B Control + O پذیرش خط جاری، اما قرار ندادن آن در فهرست تاریخچه. این عمل دارای نام دستور \fBreadline\fP به صورت \fIrlwrap\-accept\-line\-and\-forget\fP است. .TP .B Control + ^ استفاده از یک ویرایشگر خارجی (به RLWRAP_EDITOR در ادامه مراجعه کنید) برای ویرایش ورودی جاری (این ویژگی تنها در صورتی کار می‌کند که گزینه \-m تنظیم شده باشد). این عمل دارای نام دستور \fBreadline\fP به صورت \fIrlwrap\-call\-editor\fP است. .TP .B (در حال حاضر اختصاص داده نشده) هر کلید (یا توالی کلید، در ادامه ببینید) را می‌توان به دستور \fBreadline\fP با نام \fIrlwrap-direct-keypress\fP اختصاص داد. این کلید (یا کلیدها) پس از آن همیشه مستقیماً به \fIcommand\fP ارسال خواهند شد، حتی زمانی که \fBrlwrap\fP در حالت مستقیم نباشد. .TP .B (در حال حاضر اختصاص داده نشده) هر کلید یا ترکیب کلید را می‌توان به دستور \fBreadline\fP با نام \fIrlwrap-direct-prefix\fP اختصاص داد. این امکان تعریف کلیدهای مستقیم چندکلیدی را از طریق تعریف کلید(های) اول آن‌ها به عنوان یک «پیشوند مستقیم» فراهم می‌سازد. .TP .B (در حال حاضر اختصاص داده نشده) چندین کلید را می‌توان به دستور \fBreadline\fP با نام \fIrlwrap-hotkey\fP اختصاص داد. هر یک از این کلیدها باعث می‌شود خود کلید، خط ورودی جاری و تاریخچه جاری فیلتر شوند (مقایسه کنید با \fBRlwrapFilter(3pm)\fP) از طریق فیلتر فعال (بنابراین در صورت نبود فیلتر اثری نخواهد داشت)، که سپس می‌تواند خط ورودی را بازنویسی کند، مکان‌نما را جابه‌جا نماید و تاریخچه را به‌روزرسانی کند (برای هر کلید به صورتی متفاوت). پس از آن، کاربر همچنان می‌تواند ورودی حاصل را ویرایش کند. .TP .B (در حال حاضر اختصاص داده نشده) دستور \fIrlwrap-hotkey-without-history\fP مانند \fIrlwrap-hotkey\fP عمل می‌کند، اما تاریخچه (که ممکن است بسیار حجیم باشد) به فیلتر ارسال نمی‌شود. اگر فیلتر در هر صورت کار مفیدی با تاریخچه انجام نمی‌داد، این روش کارآمدتر است. .TP .B (در حال حاضر اختصاص داده نشده) دستور \fIoperate-and-get-next\fP خط فعلی را برای بازگشت به برنامه فراخواننده می‌پذیرد گویی کاراکتر خط جدید وارد شده است، و خط بعدی را متناسب با خط جاری از تاریخچه برای ویرایش واکشی می‌کند. کلید میانبر پیش‌فرض \fBreadline\fP (CTRL + O) توسط \fBrlwrap\fP بازنویسی می‌شود، اما می‌توان آن را دوباره در \fB~/.inputrc\fP اختصاص داد. از این دستور در ترکیب با \fB\-D 2\fP (\fB\-\-history\-no\-dupes 2\fP) استفاده نکنید (به بخش‌های بالا مراجعه شود). .PP کلیدهای ویژه صرفاً به این دلیل انتخاب شده‌اند که در حال حاضر به هیچ عملیاتی در ریدلاین اختصاص ندارند. اگر آن‌ها را دوست ندارید (یا مدیر پنجره شما آن‌ها را می‌بلعد)، می‌توان آن‌ها (و ۴ دستور دیگر) را با افزودن خطوطی شبیه به موارد زیر در \fB~/.inputrc\fP به شکلی معقول‌تر بازتعریف کرد: .PP .nf "\eM\-\eC\-m": rlwrap\-accept\-line\-and\-forget # ESC\-ENTER to accept but keep out of history "\eC\-x": rlwrap\-call\-editor # CTRL\-x e to edit (multi-line) input in editor of your choice $if erl # (only) for the Erlang shell: "\eC\-g": rlwrap\-direct\-keypress # pass CTRL\-g directly to enter 'user switch' command $endif "\eC\-t": rlwrap\-direct\-prefix # make it possible to define direct keypresses that start with CTRL\-t ... "\eC\-tx": rlwrap\-direct\-keypress # ... in that case: pass CTRL\-t + x directly. "\eC\-y": rlwrap\-hotkey\-without\-history # CTRL\-y to filter input line (and e.g. insert X selection) .fi .PP مقایسه کنید با صفحه راهنمای \fBreadline(3)\fP. (توجه: دقت کنید کلیدهایی را که از قبل توسط مدیر پنجره یا درایور ترمینال تسخیر شده‌اند، مانند CTRL+S، به کار نبرید، زیرا \fBrlwrap\fP هرگز آن‌ها را دریافت نخواهد کرد). .SH "محیط (ENVIRONMENT)" .TP \fBRLWRAP_HOME\fP: دایرکتوری که فایل‌های تاریخچه و تکمیل خودکار در آن نگهداری می‌شوند. .TP \fBRLWRAP_EDITOR\fP (یا در غیر این صورت \fBEDITOR\fP، یا در غیر این صورت \fBVISUAL\fP): ویرایشگری که برای ورودی چندخطی (و rlwrap-edit-history) به کار می‌رود. مثال: .PP .nf export RLWRAP_EDITOR="vi\ +%L" export RLWRAP_EDITOR="vim\ '+call\ cursor(%L,%C)'" export RLWRAP_EDITOR="emacs +%L:%C %F" .fi .PP اولین مثال در بالا حالت پیش‌فرض است؛ L% و C% با شماره‌های خط و ستون متناظر با موقعیت مکان‌نما در بافر ویرایش \fBrlwrap\fP جایگزین می‌شوند، و F% با نام فایل (موقت) جایگزین می‌گردد. اگر F% استفاده نشود، این نام پس از مقدار (گسترش‌یافته) RLWRAP_EDITOR$ قرار می‌گیرد. .TP \fBRLWRAP_FILTERDIR\fP: اگر یک فیلتر را با یک مسیر نسبی مشخص کنید (rlwrap -z filter یا rlwrap -z dir/filter)، دستور \fBrlwrap\fP مسیر \fB$RLWRAP_FILTERDIR\fP را به این مسیر اضافه خواهد کرد (یا \fB/usr/share/rlwrap/filters\fP اگر این متغیر تنظیم نشده باشد). .SH "سیگنال‌ها (SIGNALS)" .PP تعدادی از سیگنال‌ها به \fIcommand\fP فوروارد می‌شوند: HUP INT QUIT USR1 USR2 TERM و (از طریق تغییر اندازه ترمینال \fIcommand\fP) سیگنال WINCH. تمهیداتی اندیشیده شده تا سیگنال TSTP (معمولاً نتیجه فشار دادن CTRL\-Z از ترمینال) به درستی مدیریت شود؛ به عنوان مثال، پس از تعلیق \fBrlwrap\fP در میانه ویرایش یک خط، ادامه کار (با تایپ 'fg') شما را دقیقاً در همان نقطه‌ای که آن را معلق کرده بودید قرار می‌دهد. یک فیلتر می‌تواند برای تغییر/نادیده گرفتن سیگنال‌ها، یا ارسال خروجی «خارج از باند» به دستور تحت پوشش rlwrap استفاده شود. فیلترهایی (به جز آن‌هایی که سیگنال‌ها را فیلتر می‌کنند) که پاسخگویی آن‌ها بیش از ۱ ثانیه طول بکشد، می‌توانند با CTRL\-C از ترمینال متوقف شوند (اگرچه \fBrlwrap\fP از این وضعیت جان سالم به در نخواهد برد). اگر \fIcommand\fP کلیدهایی را که یک سیگنال خاص را از صفحه‌کلید ارسال می‌کنند تغییر دهد (مانند emacs که به جای CTRL\-C از CTRL\-G استفاده می‌کند)، \fBrlwrap\fP نیز همان کار را خواهد کرد (اما فقط پس از فشرده شدن کلید بعدی؛ برای شفاف‌تر کردن rlwrap در این زمینه از گزینه \fB\-\-polling\fP استفاده کنید). هنگامی که \fIcommand\fP با یک سیگنال خاتمه داده شود (kill)، دستور \fBrlwrap\fP پاکسازی‌های لازم را انجام داده، اداره‌کننده‌های سیگنال خود را بازنشانی می‌کند و سپس با ارسال همان سیگنال به خودش خارج می‌شود. این تضمین می‌کند که پوسته شما همان وضعیت خروجی را مشاهده کند که بدون \fBrlwrap\fP مشاهده می‌کرد. .SH "تغییر مسیر (REDIRECTION)" زمانی که ورودی استاندارد یک ترمینال نباشد (یا هنگام اجرا در داخل یک بافر emacs)، ویرایش ورودی معنایی ندارد، بنابراین \fBrlwrap\fP تمام گزینه‌ها را نادیده گرفته و به سادگی \fIcommand\fP را به جای خود اجرا می‌کند. زمانی که stdout (یا stderr) یک ترمینال نباشد، rlwrap پس از اجرای \fIcommand\fP آن را دوباره روی dev/tty/ (ترمینال کاربر) باز می‌کند، به طوری که خروجی \fIcommand\fP طبق انتظار تغییر مسیر داده می‌شود، اما ورودی صفحه‌کلید و پیام‌های خطای \fBrlwrap\fP همچنان قابل مشاهده باقی می‌مانند. نتیجه این امر این است که \fBrlwrap\fP \fIcommand\fP هنگام تغییر مسیر، کم و بیش مانند \fIcommand\fP رفتار می‌کند. .SH "وضعیت خروج (EXIT STATUS)" در صورت بروز خطای \fBrlwrap\fP مقداری غیرصفر، و در غیر این صورت وضعیت خروج \fIcommand\fP است. دستور \fBrlwrap\fP همیشه ترمینال را در وضعیتی مرتب رها می‌کند، حتی پس از یک فروپاشی (crash). .SH "فایل‌ها (FILES)" دستور \fBrlwrap\fP انتظار دارد فایل‌های تاریخچه و تکمیل خودکار آن در RLWRAP_HOME$ قرار گیرند، اما در صورت عدم تنظیم این متغیر از فایلهای پنهان (dotfiles) در دایرکتوری خانگی کاربر استفاده می‌کند. اگر از \fBrlwrap\fP برای دستورات متعدد و گوناگونی استفاده کنید، این وضعیت به سرعت نامرتب و شلوغ خواهد شد. .TP $RLWRAP_HOME/\fIcommand\fP_history, ~/.\fIcommand\fP_history تاریخچه برای \fIcommand\fP (به یاد داشته باشید که \fIcommand\fP ممکن است با گزینه \fB\-\-command\-name\fP (یا \fB\-C\fP) بازنویسی شود). .TP $RLWRAP_HOME/\fIcommand\fP_completions, ~/.\fIcommand\fP_completions فهرست کلمات تکمیل اختصاصی کاربر برای \fIcommand\fP. دستور \fBrlwrap\fP هرگز درون این فهرست نمی‌نویسد، اما می‌توان از \fB\-l\fP \fIlogfile\fP و سپس \fB\-f\fP \fIlogfile\fP برای شبیه‌سازی اثر گزینه \fB\-r\fP که در میان فراخوانی‌های گوناگون کار کند، استفاده کرد. .TP /usr/share/rlwrap/completions/\fIcommand\fP فهرست کلمات تکمیل سراسری سیستم برای \fIcommand\fP. این فایل تنها در صورتی بررسی می‌شود که فهرست کلمات تکمیل اختصاصی کاربر پیدا نشود. .TP $INPUTRC, ~/.inputrc فایل پیکربندی اختصاصی \fBreadline\fP (برای فرمت آن به \fBreadline\fP (3) مراجعه کنید). دستور \fBrlwrap\fP مقدار \fIapplication name\fP خود را روی \fIcommand\fP تنظیم می‌کند (این مورد را می‌توان با گزینه \fB\-C\fP بازنویسی کرد)، که رفتارهای متفاوتی را برای دستورات مختلف امکان‌پذیر می‌سازد. می‌توان به عنوان مثال خطوط زیر را در \fB~/.inputrc\fP قرار داد: .RS .nf .if t .ft CW $if coqtop set show\-all\-if\-ambiguous On $endif .if t .ft P .fi تا \fBrlwrap\fP در هر زمان که \fBcoqtop\fP را اجرا می‌کند، تمام موارد تکمیل را نمایش دهد. .SH "محدودیت‌ها (LIMITATIONS)" اگرچه \fBrlwrap\fP انعطاف‌پذیر است، خروجی مورد انتظار را فراهم می‌کند (قابلیت ریدلاین)، و به الگوی یونیکس مبنی بر «ابزارهای کوچک متعدد» وفادار است، اما یک راهکار موقتی و وصله‌پینه‌ای به حساب می‌آید. دستور \fBrlwrap\fP نمی‌تواند از وضعیت داخلی \fIcommand\fP مطلع شود، که این موضوع تکمیل خودکار وابسته به متن را غیرممکن می‌سازد. استفاده از کتابخانه GNU Readline از درون خود \fIcommand\fP همچنان با اختلاف بهترین راه‌حل است. علاوه بر این، «برای تانگو دو نفر لازم است»: هیچ راهی برای \fBrlwrap\fP وجود ندارد که وضعیت داخلی خود را با \fIcommand\fP همگام‌سازی کند، که به تعدادی شرایط رقابتی (race conditions) ظریف منجر می‌شود؛ جایی که مثلاً ممکن است \fIcommand\fP وضعیت ترمینال خود را قبل از اینکه \fBrlwrap\fP خروجی \fIcommand\fP را که قبل از تغییر وضعیت نوشته شده بخواند، تغییر داده باشد. شما این شرایط رقابتی را به‌ویژه روی یک ماشین شلوغ و با پردازش و فیلتر کردن سنگین متوجه خواهید شد، هنگامی که ناگهان (و به شکلی غیرقابل‌پیش‌بینی) اعلان‌ها یا خروجی دستور مخدوش یا با رنگ‌های نادرست نمایش می‌یابند. دستور \fBrlwrap\fP می‌تواند تلاش کند، اما اغلب در مدیریت اعلان‌هایی که حاوی کاراکترهای کنترلی هستند شکست می‌خورد (اعلان‌ها و اثر \fB-A\fP و \fB\-t\fP را می‌توان با فیلتر \fBdissect_prompt\fP تحلیل کرد). اگر \fB\-A\fP (\fB--ansi-colour-aware\fP) کمکی نکند، ممکن است برای پاکسازی اعلان به یک فیلتر نیاز باشد. همچنین تعیین \fB--set-term-name\fP با یک ترمینال ساده‌تر یا حتی dumb می‌تواند کمک‌کننده باشد. .SH "نسخه (VERSION)" این صفحه راهنما مربوط به نسخه 0.48 از rlwrap است. .SH "نویسندگان (AUTHORS)" کتابخانه GNU Readline (نوشته Brian Fox و Chet Ramey) تمام کارهای سنگین پشت صحنه را انجام می‌دهد، کد مدیریت pty (نوشته Geoff C. Wing) عملاً بدون تغییر از \fBrxvt\fP برگرفته شده است، و فهرست‌های کلمات تکمیل توسط کتابخانه \fBlibredblack\fP اثر Damian Ivereigh مدیریت می‌شوند. باقی برنامه توسط Hans Lub (hanslub42@gmail.com) نوشته شده است. .SH "همچنین ببینید (SEE ALSO)" .TP .B readline(3), RlwrapFilter(3pm) \" Local variables: \" mode:nroff \" End: