.\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "JOE" "" "March 2016" "" "" . .SH "نام (NAME)" \fBJOE\fR \- ویرایشگر متنی قدرتمند Joe\'s Own Editor . .SH "خلاصه دستور (SYNOPSIS)" \fBjoe [global\-options] [ [local\-options] filename ]\.\.\.\fR . .br \fBjstar [global\-options] [ [local\-options] filename ]\.\.\.\fR . .br \fBjmacs [global\-options] [ [local\-options] filename ]\.\.\.\fR . .br \fBrjoe [global\-options] [ [local\-options] filename ]\.\.\.\fR . .br \fBjpico [global\-options] [ [local\-options] filename ]\.\.\.\fR . .SH "توضیحات (DESCRIPTION)" برنامه \fBJOE\fR یک ویرایشگر قدرتمند تمام‌صفحه برای کنسول است\. این برنامه دارای رابط کاربری «بدون حالت» (mode\-less) مشابه با بسیاری از ویرایشگرهای کاربرپسند رایانه‌های شخصی است\. کاربران نرم‌افزار WordStar شرکت Micro\-Pro یا زبان‌های «Turbo» شرکت Borland در این ویرایشگر کاملاً احساس آشنایی خواهند کرد\. با این وجود، \fBJOE\fR یک ویرایشگر متنی تمام‌صفحه و کامل برای UNIX است و ویژگی‌های متعددی را برای ویرایش برنامه‌ها و متون ارائه می‌دهد\. . .P همچنین \fBJOE\fR چندین ویرایشگر دیگر را شبیه‌سازی می‌کند\. ویرایشگر \fBJSTAR\fR یک بازسازی نزدیک از WordStar همراه با افزونه‌های متعدد \fBJOE\fR است\. ویرایشگر \fBJPICO\fR بازسازی نزدیکی از ویرایشگر PICO سیستم ایمیل Pine است، اما با گسترش‌ها و بهبودهای بسیار\. ویرایشگر \fBJMACS\fR یک شبیه‌ساز GNU\-EMACS است\. ویرایشگر \fBRJOE\fR نسخه محدودشده‌ای از \fBJOE\fR است که تنها اجازه ویرایش فایل‌های مشخص‌شده در خط فرمان را می‌دهد\. . .P اگرچه \fBJOE\fR در واقع شامل پنج ویرایشگر مجزا است، اما همچنان به یک فایل اجرایی با پنج نام مختلف نیاز دارد\. افزودن پسوند «rc» به انتهای نام هر ویرایشگر، نام فایل پیکربندی اولیه‌سازی \fBJOE\fR را مشخص می‌کند که رفتار و ویژگی‌های ویرایشگر را تعیین می‌نماید\. . .P برنامه \fBJOE\fR یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) منتشرشده توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation) بازتوزیع کرده یا تغییر دهید\. برنامه \fBJOE\fR از طریق اینترنت در نشانی \fIhttp://www\.sourceforge\.net/projects/joe\-editor\fR در دسترس است\. . .SH "نحوه استفاده (USAGE)" برای اجرای ویرایشگر، دستور \fBjoe\fR را تایپ کرده و در ادامه نام صفر یا چند فایل را که قصد ویرایش آن‌ها را دارید وارد کنید\. پیش از نام هر فایل می‌توان یک گزینه محلی قرار داد (به جدول گزینه‌های محلی در ادامه مراجعه کنید)\. سایر گزینه‌های سراسری که بر کل ویرایشگر اعمال می‌شوند را نیز می‌توان در خط فرمان مشخص کرد (به جدول گزینه‌های سراسری در ادامه مراجعه کنید)\. اگر در حال ویرایش فایلی جدید هستید، می‌توانید نام فایل را هنگام فراخوانی ویرایشگر یا هنگام ذخیره آن درون برنامه وارد نمایید\. ساختار اصلاح‌شده‌ای برای نام فایل‌ها ارائه شده است که امکان ویرایش خروجی برنامه‌ها، ورودی/خروجی استاندارد، یا بخش‌هایی از فایل‌ها و دستگاه‌ها را فراهم می‌کند\. برای جزئیات بیشتر به بخش \fIFilenames\fR در ادامه مراجعه کنید\. . .P پس از ورود به ویرایشگر، می‌توانید متن را تایپ کرده و از توالی کلیدهای کنترلی ویژه برای انجام کارهای ویرایشی استفاده نمایید\. برای اطلاع از توالی‌های کنترلی، ادامه این صفحه راهنما را بخوانید یا برای مشاهده راهنما در ویرایشگر کلیدهای \fB^K H\fR را فشار دهید\. . .P نکاتی فنی درباره جزئیات عملکرد کلیدها: . .P علامت \fB^\fR به این معنی است که کلید \fBControl\fR را پایین نگه داشته و هم‌زمان کلید بعدی را فشار می‌دهید (مشابه عملکرد کلید \fBShift\fR برای حروف بزرگ)\. تعدادی از دنباله‌های کلید کنترلی روی کلیدهای دیگر نیز نگاشت شده‌اند تا نیازی به فشردن کلید Control نباشد: کلید \fBEsc\fR به جای \fB^[\fR، کلید \fBDel\fR به جای \fB^?\fR، کلید \fBBackspace\fR به جای \fB^H\fR، کلید \fBTab\fR به جای \fB^I\fR، کلید \fBReturn\fR یا \fBEnter\fR به جای \fB^M\fR و کلید \fBLinefeed\fR به جای \fB^J\fR کار می‌کند\. ممکن است برخی صفحه‌کلیدها با بعضی کلیدهای کنترلی مشکل داشته باشند\. معمولاً می‌توان \fB^\fR_، \fB^^\fR و \fB^@\fR را بدون نگه‌داشتن Shift وارد کرد (برای مثال، ترکیب‌های \fB^\-\fR، \fB^6\fR و \fB^2\fR را امتحان کنید)\. برخی صفحه‌کلیدها ممکن است این ترکیب‌ها را به کلیدهای دیگری اختصاص داده باشند؛ کلیدهای \fB^\.\fR، \fB^,\fR و \fB^/\fR را امتحان کنید\. کلید \fB^Space\fR معمولاً می‌تواند به جای \fB^@\fR استفاده شود\. کاراکترهای \fB^\e\fR و \fB^]\fR توسط بسیاری از برنامه‌های ارتباطی مانند telnet و kermit تفسیر می‌شوند؛ معمولاً کافی است کلید را دو بار فشار دهید تا از برنامه ارتباطی عبور کند\. . .P در برخی صفحه‌کلیدها، پایین نگه‌داشتن کلید \fBAlt\fR هنگام زدن کلیدی دیگر، معادل فشردن \fBEsc\fR قبل از زدن آن کلید است\. . .P پس از فشردن \fB^K H\fR، نخستین پنجره راهنما در بالای صفحه ظاهر می‌شود\. در حالی که پنجره راهنما باز است، می‌توانید به تایپ و ویرایش متن ادامه دهید\. برای ورق زدن و مشاهده سایر مباحث راهنما، کلیدهای \fBEsc ,\fR و \fBEsc \.\fR (یعنی فشردن \fBEsc ,\fR و سپس \fBEsc \.\fR) را بزنید\. برای بستن پنجره راهنما از \fB^K H\fR استفاده کنید\. . .P شما می‌توانید چیدمان صفحه‌کلید، صفحه‌های راهنما و تنظیمات رفتاری پیش‌فرض متعددی را با کپی کردن فایل پیکربندی اولیه‌سازی \fBJOE\fR (که معمولاً \fB/etc/joe/joerc\fR است) به نام \fB\.joerc\fR در دایرکتوری خانگی خود و سپس ویرایش آن سفارشی‌سازی کنید\. به بخش \fIjoerc\fR در ادامه مراجعه کنید\. . .P جهت استفاده از \fBJOE\fR به عنوان ویرایشگر پیش‌فرض برای ایمیل و اخبار (News)، باید متغیرهای محیطی \fBEDITOR\fR و \fBVISUAL\fR را در فایل راه‌اندازی پوسته خود (\fB\.cshrc\fR یا \fB\.profile\fR) طوری مقداردهی کنید که به \fBJOE\fR اشاره کنند (مسیر برنامه معمولاً \fB/usr/bin/joe\fR است)\. . .P چندین پارامتر فراخوانی دیگر نیز وجود دارند که در مواقع خاص، به‌ویژه در حالتی که صفحه ترمینال شما به درستی به‌روزرسانی نمی‌شود، باید تنظیم گردند\. به بخش \fIEnvironment variables\fR در ادامه مراجعه کنید\. . .P \fI\fR . .SH "گزینه‌ها (OPTIONS)" این گزینه‌ها همچنین می‌توانند در فایل joerc مشخص شوند\. گزینه‌های محلی را می‌توان بسته به پسوند نام فایل تنظیم کرد\. برنامه‌ها (با پسوند \.c، \.h یا \.p) معمولاً قابلیت تورفتگی خودکار (autoindent) فعال دارند\. شکستن خودکار خطوط (Wordwrap) در سایر فایل‌ها فعال است، اما برای فایل‌های rc غیرفعال شده است\. . .P یک گزینه با تعیین به این صورت فعال می‌شود: . .IP "" 4 . .nf \-wordwrap . .fi . .IP "" 0 . .P یک گزینه با تعیین به این صورت غیرفعال می‌شود: . .IP "" 4 . .nf \-\-wordwrap . .fi . .IP "" 0 . .P برخی گزینه‌ها آرگومان می‌پذیرند\. آرگومان‌ها به این صورت داده می‌شوند: . .IP "" 4 . .nf \-lmargin 5 . .fi . .IP "" 0 . .P گزینه‌های سراسری زیر را می‌توان در خط فرمان مشخص نمود: . .IP "\(bu" 4 asis . .br کاراکترهایی با کدهای بالاتر از ۱۲۷ به همان صورت اصلی به ترمینال ارسال خواهند شد، به جای آنکه به عنوان معکوس کاراکتر متناظر زیر ۱۲۸ ارسال شوند\. اگر این گزینه کار نکرد، کارگزار ترمینال خود را بررسی کنید\. این گزینه در صورت استفاده از کدگذاری UTF\-8 هیچ تأثیری ندارد\. . .br . .IP "\(bu" 4 assume_256color . .br شبیه‌ساز ترمینال شبه‌ANSI را دارای پشتیبانی از ۲۵۶ رنگ در نظر می‌گیرد، حتی اگر ورودی termcap بگوید که پشتیبانی نمی‌شود\. . .br . .IP "\(bu" 4 assume_color . .br شبیه‌ساز ترمینال شبه‌ANSI را دارای پشتیبانی از رنگ در نظر می‌گیرد، حتی اگر ورودی termcap بگوید که پشتیبانی نمی‌شود\. . .br . .IP "\(bu" 4 text_color \fBcolor\fR . .br تنظیم رنگ متن\. . .br . .IP "\(bu" 4 status_color \fBcolor\fR . .br تنظیم رنگ نوار وضعیت\. . .br . .IP "\(bu" 4 help_color \fBcolor\fR . .br تنظیم رنگ راهنما\. . .br . .IP "\(bu" 4 menu_color \fBcolor\fR . .br تنظیم رنگ منوها\. . .br . .IP "\(bu" 4 prompt_color \fBcolor\fR . .br تنظیم رنگ اعلان‌ها (prompts)\. . .br . .IP "\(bu" 4 msg_color \fBcolor\fR . .br تنظیم رنگ پیام‌ها\. . .br . .IP "\(bu" 4 autoswap . .br در صورت نیاز، هنگام اجرای دستورهای رونوشت یا انتقال بلوک، به طور خودکار \fB^K B\fR را با \fB^K K\fR جابه‌جا می‌کند تا یک بلوک متنی معتبر علامت‌گذاری شود\. . .br ..IP "\(bu" 4 backpath path . .br مسیر دایرکتوری‌ای را تنظیم می‌کند که تمام فایل‌های پشتیبان باید در آن ذخیره شوند\. اگر این گزینه تنظیم نشده باشد (پیش‌فرض)، فایل‌های پشتیبان در همان دایرکتوری حاوی فایل ذخیره می‌شوند\. . .br . .IP "\(bu" 4 backup_file_suffix string . .br رشته پسوند مورد استفاده برای نام فایل‌های پشتیبان را تنظیم می‌کند\. اگر تنظیم نشده باشد (پیش‌فرض)، این پسوند ~ است\. . .br . .IP "\(bu" 4 baud nnn . .br نرخ باود (baud rate) را برای بهینه‌سازی صفحه ترمینال تنظیم می‌کند (مقداری که توسط stty گزارش شده را نادیده می‌گیرد)\. برنامه JOE برای نرخ‌های باود زیر 19200 تاخیرهایی اعمال می‌کند که میان‌گیر tty را دور می‌زند تا تایپ پیشاپیش (typeahead) بتواند خروجی صفحه را متوقف کند\. دستورهای پیمایش (scrolling) برای نرخ باود 38400 و بالاتر استفاده نخواهند شد\. این قابلیت برای X\-termها و سایر کنسول‌های tty که عملاً از روی خط سریال اجرا نمی‌شوند مفید است\. . .br . .IP "\(bu" 4 beep . .br هنگامی که دستورهای ویرایشی با خطا مواجه می‌شوند، مثلاً وقتی مکان‌نما از حد مجاز فراتر می‌رود، بوق هشدار (beep) را فعال می‌کند\. . .br . .IP "\(bu" 4 break_links . .br در صورت فعال بودن، JOE ابتدا پیش از نوشتن فایل آن را حذف می‌کند تا پیوندهای سخت (hard\-links) و پیوندهای نمادین (symbolic\-links) شکسته شوند\. . .br . .IP "\(bu" 4 break_hardlinks . .br در صورت فعال بودن، و در صورتی که فایل یک پیوند نمادین نباشد، JOE ابتدا پیش از نوشتن فایل آن را حذف می‌کند تا پیوندهای سخت شکسته شوند\. . .br . .IP "\(bu" 4 brpaste . .br هنگام شروع JOE، دستوری را به شبیه‌ساز ترمینال ارسال می‌کند که «حالت چسباندن قلاب‌دار» (bracketed paste mode) را فعال می‌سازد (تنها در صورتی که ترمینال از مجموعه دستورات ANSI پشتیبانی کند)\. در این حالت، متنی که در پنجره چسبانده می‌شود با ESC [ 2 0 0 ~ و ESC [ 2 0 1 ~ احاطه می‌گردد\. . .br . .IP "\(bu" 4 columns nnn . .br تعداد ستون‌ها در شبیه‌ساز ترمینال را تنظیم می‌کند (در صورتی که مدخل termcap نادرست باشد)\. این گزینه تنها در سیستم‌های قدیمی که فاقد ioctl «دریافت اندازه پنجره» (get window size) هستند کاربرد دارد\. . .br . .IP "\(bu" 4 csmode . .br حالت جستجوی ادامه‌دار را فعال می‌کند: فشردن‌های متوالی \fB^K F\fR به جای درخواست جستجوی جدید، جستجوی فعلی را تکرار می‌کنند\. . .br . .IP "\(bu" 4 dopadding . .br به JOE امکان می‌دهد تا کاراکترهای فاصله‌گذار (padding) NUL را به ترمینال ارسال کند (برای ترمینال‌های بسیار قدیمی)\. . .br . .IP "\(bu" 4 exask . .br در صورت تنظیم، \fB^K X\fR پیش از ذخیره فایل، نام جدیدی را درخواست می‌کند\. . .br . .IP "\(bu" 4 floatmouse . .br در صورت تنظیم، کلیک‌های ماوس می‌توانند مکان‌نما را فراتر از انتهای خطوط قرار دهند\. . .br . .IP "\(bu" 4 guess_crlf . .br در صورت تنظیم، JOE تلاش می‌کند قالب فایل را بین MS\-DOS یا UNIX حدس بزند\. . .br . .IP "\(bu" 4 guess_indent . .br در صورت تنظیم، JOE تلاش می‌کند بر اساس محتوای فایل، نویسه تورفتگی و گام تورفتگی را حدس بزند\. الگوریتم بدین صورت است که بزرگ‌ترین مقسوم‌علیه مشترک سه تورفتگی رایج‌تر در فایل را پیدا می‌کند\. . .br . .IP "\(bu" 4 guess_non_utf8 . .br در صورت تنظیم، حدس زدن فایل‌های غیر UTF\-8 را در لوکال‌های UTF\-8 فعال می‌کند\. . .br . .IP "\(bu" 4 guess_utf8 . .br در صورت تنظیم، حدس زدن فایل‌های UTF\-8 را در لوکال‌های غیر UTF\-8 فعال می‌کند\. . .br . .IP "\(bu" 4 guess_utf16 . .br در صورت تنظیم، حدس زدن فایل‌های UTF\-16 را فعال می‌کند\. اگر یک فایل UTF\-16BE یا UTF\-16LE تشخیص داده شود، هنگام بارگذاری به UTF\-8 تبدیل شده و در حین ذخیره مجدداً به UTF\-16 بازگردانده می‌شود\. . .br . .IP "\(bu" 4 helpon . .br در صورت تنظیم، برنامه از ابتدا با راهنمای برخطِ فعال شروع به کار می‌کند\. . .br . .IP "\(bu" 4 help_is_utf8 . .br در صورت تنظیم، فرض می‌شود که متن راهنما در فایل joerc از نوع UTF\-8 است\. . .br . .IP "\(bu" 4 icase . .br در صورت تنظیم، جستجو به‌طور پیش‌فرض به بزرگی و کوچکی حروف حساس نخواهد بود\. . .br . .IP "\(bu" 4 joe_state . .br خواندن و نوشتن در فایل ~/\.joe_state را فعال می‌کند\. . .br . .IP "\(bu" 4 joexterm . .br اگر xterm با گزینه \-\-paste64 برای پشتیبانی بهتر از ماوس پیکربندی شده است، این گزینه را فعال کنید\. . .br . .IP "\(bu" 4 keepup . .br در صورت تنظیم، شماره ستون در خط وضعیت به‌طور مداوم به‌روزرسانی می‌شود، در غیر این صورت فقط یک بار در ثانیه به‌روزرسانی خواهد شد\. . .br ..IP "\(bu" 4 language \fBlanguage\fR . .br زبان را برای aspell تعیین می‌کند\. . .br . .IP "\(bu" 4 lightoff . .br برجسته‌سازی \fB^K B\fR \fB^K K\fR را پس از یک عملیات بلوک به‌طور خودکار خاموش می‌کند\. . .br . .IP "\(bu" 4 lines nnn . .br تعداد خطوط را در شبیه‌ساز ترمینال تنظیم می‌کند (در صورتی که مدخل termcap نادرست باشد)\. این گزینه فقط در سامانه‌های قدیمی که ioctl مربوط به \(lqget window size\(rq را ندارند مفید است\. . .br . .IP "\(bu" 4 marking . .br حالت نشانه‌گذاری را فعال می‌کند: متن میان \fB^K B\fR و مکان‌نما را برجسته می‌کند\. . .br . .IP "\(bu" 4 menu_above . .br منوها را به جای پایین اعلان‌ها، بالای آن‌ها قرار می‌دهد\. . .br . .IP "\(bu" 4 menu_explorer . .br هنگام انتخاب یک دایرکتوری در منو باقی می‌ماند (در غیر این صورت دایرکتوری به مسیر افزوده شده و مکان‌نما به اعلان بازمی‌گردد)\. . .br . .IP "\(bu" 4 menu_jump . .br با فشرده شدن \fBTab\fR \fBTab\fR به منوی انتخاب فایل می‌پرد\. . .br . .IP "\(bu" 4 mid . .br اگر این گزینه تنظیم شود و مکان‌نما به بیرون پنجره حرکت کند، پنجره طوری پیمایش می‌شود که مکان‌نما در مرکز قرار گیرد\. این گزینه در ترمینال‌های کند که فاقد دستورهای پیمایش هستند اجباری است\. . .br . .IP "\(bu" 4 left nn . .br تعداد ستون‌هایی را تعیین می‌کند که با عبور مکان‌نما از لبه سمت چپ یا هنگام اجرای دستور crawll، صفحه به سمت چپ پیمایش می‌شود\. اگر nn منفی باشد، کسری از صفحه است که باید پیمایش شود؛ برای مثال، \-2 به معنای پیمایش 1/2 صفحه است\. . .br . .IP "\(bu" 4 right nn . .br تعداد ستون‌هایی را تعیین می‌کند که با عبور مکان‌نما از لبه سمت راست یا هنگام اجرای دستور crawlr، صفحه به سمت راست پیمایش می‌شود\. اگر nn منفی باشد، کسری از صفحه است که باید پیمایش شود؛ برای مثال، \-3 به معنای پیمایش 1/3 صفحه است\. . .br . .IP "\(bu" 4 mouse . .br پشتیبانی از ماوس xterm را فعال می‌کند\. . .br . .IP "\(bu" 4 nobackups . .br فایل‌های پشتیبان را غیرفعال می‌کند\. . .br . .IP "\(bu" 4 nocurdir . .br پیشوند دایرکتوری جاری را در اعلان‌ها غیرفعال می‌کند\. . .br . .IP "\(bu" 4 noexmsg . .br پیام خروج را غیرفعال می‌کند (\(lqFile not changed so no update needed\(rq)\. . .br . .IP "\(bu" 4 nolinefeeds . .br ارسال linefeedها را جهت حفظ تاریخچه صفحه در بافر پیمایش به عقب شبیه‌ساز ترمینال غیرفعال می‌کند (تنها زمانی کاربرد دارد که حالت notite فعال باشد)\. . .br . .br . .IP "\(bu" 4 nolocks . .br قفل‌های فایل سازگار با EMACS را غیرفعال می‌کند\. . .br . .IP "\(bu" 4 nomodcheck . .br بررسی دوره‌ای تغییرات فایل را غیرفعال می‌کند\. . .br . .IP "\(bu" 4 nonotice . .br این گزینه از نمایش اعلان حق نشر در زمان شروع ویرایشگر جلوگیری می‌کند\. . .br . .IP "\(bu" 4 nosta . .br این گزینه بالاترین خط وضعیت را حذف می‌کند\. این ویژگی برای مواقعی که فقط می‌خواهید متن خود را روی صفحه ببینید یا اگر از vt52 استفاده می‌کنید مناسب است\. . .br . .IP "\(bu" 4 notagsmenu . .br منوی انتخاب برای جستجوی tags با نتایج چندگانه را غیرفعال می‌کند\. . .br . .IP "\(bu" 4 notite . .br توالی‌های ti و te در termcap را که معمولاً برای ذخیره و بازیابی محتویات صفحه ترمینال هنگام شروع و خروج JOE تنظیم شده‌اند غیرفعال می‌کند\. . .br . .IP "\(bu" 4 pastehack . .br اگر ورودی صفحه‌کلید به‌صورت یک بلوک یکپارچه دریافت شود، آن را جای‌گذاری ماوس فرض کرده و autoindent و wordwrap را غیرفعال می‌کند\. . .br ..IP "\(bu" 4 noxon . .br غیرفعال‌سازی کنترل جریان \fB^S\fR و \fB^Q\fR، که احتمالاً اجازه می‌دهد از \fB^S\fR و \fB^Q\fR به عنوان کلیدهای ویرایشگر استفاده شود\. . .br . .IP "\(bu" 4 orphan . .br یتیم کردن فایل‌های اضافیِ داده‌شده در خط فرمان به جای باز کردن پنجره برای آن‌ها (فایل‌ها بارگذاری می‌شوند، اما برای دسترسی به آن‌ها باید از دستورهای switch\-buffer استفاده کنید)\. . .br . .IP "\(bu" 4 pg nnn . .br تعیین تعداد خطوطی که در حین Page Up و Page Down حفظ می‌شوند (از \-1 برای ۱/۲ اندازه پنجره استفاده کنید)\. . .br . .IP "\(bu" 4 regex . .br استفاده پیش‌فرض از نحو استاندارد عبارات باقاعده (regular expression)، به جای نحو JOE (که در آن نویسه‌های خاص تنها زمانی معنای ویژه دارند که پیش از آن‌ها بک‌اسلش بیاید)\. . .br . .IP "\(bu" 4 restore . .br تنظیم برای بازیابی موقعیت مکان‌نما به آخرین موقعیت در فایل‌های پیش‌تر ویرایش‌شده\. . .br . .IP "\(bu" 4 rtbutton . .br جابه‌جا کردن دکمه‌های چپ و راست ماوس\. . .br . .IP "\(bu" 4 search_prompting . .br نمایش رشته جست‌وجوی قبلی در دستور جست‌وجو (مشابه PICO)\. . .br . .IP "\(bu" 4 skiptop nnn . .br هنگامی که روی N تنظیم شود، N خط نخست صفحه ترمینال توسط JOE استفاده نمی‌شود و در عوض با محتوای اصلی خود رها می‌شود\. این ویژگی برای برنامه‌هایی که JOE را فراخوانی می‌کنند تا پیامی برای کاربر باقی بگذارند مفید است\. . .br . .IP "\(bu" 4 square . .br فعال‌سازی حالت بلوک مستطیلی\. . .br . .IP "\(bu" 4 transpose . .br جابه‌جا کردن سطرها با ستون‌ها در تمام منوها\. . .br .IP "\(bu" 4 title . .br نمایش زمینه (عنوان‌ها) در خط وضعیت. در صورت فعال بودن، خط اول تابعی که مکان‌نما در آن قرار دارد روی خط وضعیت نشان داده می‌شود\. فایل نحو context.jsf مشخص می‌کند کدام خطوط، خطوط عنوان هستند\. . .br . .IP "\(bu" 4 type . .br انتخاب نوع فایل، با بازنویسی نوع تشخیص‌داده‌شده به صورت خودکار\. انواع فایل در فایل \fBftyperc\fR تعریف شده‌اند\. . .br . .IP "\(bu" 4 undo_keep nnn . .br تعیین تعداد رکوردهای واگرد (undo) جهت نگه‌داری (0 به معنای نامحدود است)\. . .br . .IP "\(bu" 4 usetabs . .br تنظیم برای مجاز کردن استفاده از تب‌ها در عملیات بلوک مستطیلی\. . .br . .IP "\(bu" 4 wrap . .br فعال‌سازی چرخش جست‌وجو و بازگشت به ابتدای فایل\. . .br . .IP "" 0 . .P گزینه‌های محلی زیر را می‌توان در خط فرمان مشخص کرد: . .IP "\(bu" 4 +nnn . .br مکان‌نما روی خط مشخص‌شده کار خود را آغاز می‌کند\. . .br . .IP "\(bu" 4 autoindent . .br فعال‌سازی حالت تورفتگی خودکار\. هنگامی که روی یک خط تورفته کلید \fBEnter\fR را می‌زنید، تورفتگی روی خط جدید تکرار می‌شود\. . .br . .IP "\(bu" 4 c_comment . .br فعال‌سازی پرش از روی کامنت‌های سبک C یعنی /\fI\.\.\.\fR/ با استفاده از \fB^G\fR . .br . .IP "\(bu" 4 cpara \fBcharacters\fR . .br تعیین فهرست نویسه‌هایی که می‌توانند بندها (پاراگراف‌ها) را تورفته کنند\. . .br . .IP "\(bu" 4 cnotpara \fBcharacters\fR . .br تعیین فهرست نویسه‌هایی که آغازگر خطوطی هستند که قطعاً بخشی از پاراگراف‌ها نیستند\. . .br . .IP "\(bu" 4 cpp_comment . .br فعال‌سازی پرش از روی کامنت‌های سبک ++C یعنی // \.\.\. با استفاده از \fB^G\fR . .br . .IP "\(bu" 4 crlf . .br استفاده JOE از دنباله CR\-LF به عنوان پایان خط به جای LF تنها\. این ویژگی برای ویرایش فایل‌های MS\-DOS یا VMS است\. . .br ..IP "\(bu" 4 encoding \fBencoding\fR . .br تنظیم کدگذاری فایل (مانند utf\-8 یا 8859\-1)\. . .br . .IP "\(bu" 4 flowed . .br تنظیم برای افزودن اجباری یک فاصله اضافی در انتهای هر خط از یک بند، به جز خط آخر\. . .br . .IP "\(bu" 4 force . .br در صورت فعال بودن، اگر هنگام ذخیره فایل نویسه خط جدید پایانی وجود نداشته باشد، به انتهای فایل افزوده می‌شود\. . .br . .IP "\(bu" 4 french . .br در صورت فعال بودن، در قالب‌بندی مجدد بندها به جای دو فاصله، تنها یک فاصله بعد از نقطه‌ها درج می‌شود\. . .br . .IP "\(bu" 4 hex . .br فعال‌سازی حالت hex\-dump\. . .br . .IP "\(bu" 4 highlight . .br فعال‌سازی برجسته‌سازی نحو (syntax highlighting)\. . .br . .IP "\(bu" 4 highlighter_context . .br فعال‌سازی استفاده از فایل نحو برای شناسایی توضیحات و رشته‌هایی که باید در تطبیق \fB^G\fR نادیده گرفته شوند\. . .br . .IP "\(bu" 4 indentc nnn . .br تعیین نویسه تورفتگی برای تغییر مکان به چپ و تغییر مکان به راست (\fB^K ,\fR و \fB^K \.\fR)\. برای \fBSpace\fR از 32 و برای \fBTab\fR از 9 استفاده کنید\. . .br . .IP "\(bu" 4 indentfirst . .br در صورت فعال بودن، کلید home هوشمند ابتدا به نقطه تورفتگی پرش می‌کند؛ در غیر این صورت، ابتدا به ستون 1 می‌پرد\. . .br . .IP "\(bu" 4 istep nnn . .br گام تورفتگی را تنظیم می‌کند\. . .br . .IP "\(bu" 4 linums . .br فعال‌سازی نمایش شماره خطوط\. . .br . .IP "\(bu" 4 lmargin . .br تنظیم حاشیه چپ\. . .br . .IP "\(bu" 4 lmsg . .br تعریف پیام نوار وضعیت در سمت چپ\. . .br . .IP "\(bu" 4 overwrite . .br فعال‌سازی حالت رونویسی (overtype)\. تایپ کردن به جای درج پیش از نویسه‌ها، نویسه‌های موجود را بازنویسی می‌کند\. . .br . .IP "\(bu" 4 picture . .br فعال‌سازی حالت "picture" \- به مکان‌نما اجازه می‌دهد از انتهای خطوط عبور کند\. . .br . .IP "\(bu" 4 pound_comment . .br دستور \fB^G\fR توضیحات # \.\.\. را نادیده می‌گیرد\. . .br . .IP "\(bu" 4 purify . .br در صورت نیاز، اصلاح تورفتگی پیش از جابه‌جایی یا پس‌بر هوشمند\. برای نمونه، اگر تورفتگی از ترکیبی از تب‌ها و فاصله‌ها استفاده کند و indentc روی فاصله تنظیم شده باشد، تورفتگی پیش از عملیات جابه‌جایی به تماماً فاصله تبدیل خواهد شد\. . .br . .IP "\(bu" 4 rdonly . .br تنظیم حالت فقط‌خواندنی\. . .br . .IP "\(bu" 4 rmargin nnn . .br تنظیم حاشیه راست\. . .br . .IP "\(bu" 4 rmsg \fBstring\fR . .br تعریف پیام نوار وضعیت در سمت راست\. . .br . .IP "\(bu" 4 semi_comment . .br دستور \fB^G\fR توضیحات ; \.\.\. را نادیده می‌گیرد\. . .br . .IP "\(bu" 4 single_quoted . .br دستور \fB^G\fR عبارت‌های \'\.\.\.\' را نادیده می‌گیرد\. . .br . .IP "\(bu" 4 smartbacks . .br فعال‌سازی پس‌بر و تب هوشمند\. هنگامی که این حالت فعال باشد، پس‌بر و تب بر اساس مقادیر گزینه‌های istep و indentc تورفتگی را ایجاد کرده یا تورفتگی را برمی‌گردانند\. . .br ..IP "\(bu" 4 smarthome . .br کلید Home ابتدا مکان‌نما را به ابتدای خط، و در صورت فشردن دوباره، به نخستین نویسه غیرخالی منتقل می‌کند\. . .br . .IP "\(bu" 4 smsg \fBstring\fR . .br تعیین قالب دستور وضعیت هنگامی که مکان‌نما روی یک نویسه قرار دارد\. . .br . .IP "\(bu" 4 spaces . .br درج فاصله (space) هنگام فشرده شدن کلید \fBTab\fR\. . .br . .IP "\(bu" 4 syntax \fBsyntax\fR . .br تنظیم نحو برای برجسته‌سازی نحوی (syntax highlighting)\. . .br . .IP "\(bu" 4 tab nnn . .br تنظیم عرض توقف تب (tab stop width)\. . .br . .IP "\(bu" 4 text_delimiters \fBword delimiter list\fR . .br تعیین فهرستی از جداکننده‌های کلمات که \fB^G\fR میان آن‌ها جابه‌جا خواهد شد\. . .IP "" 0 . .P برای نمونه، "begin=end:if=elif=else=endif" بدان معناست که \fB^G\fR میان if، elif، else و endif متناظر می‌پرد\. . .IP "\(bu" 4 vhdl_comment . .br دستور \fB^G\fR از کامنت‌های \-\- \.\.\. چشم‌پوشی می‌کند\. . .br . .IP "\(bu" 4 wordwrap . .br هنگامی که فراتر از حاشیه سمت راست تایپ کنید، JOE کلمه پیشین را به خط بعد منتقل می‌کند (wordwrap)\. . .br . .IP "\(bu" 4 zmsg \fBstring\fR . .br تعیین قالب دستور وضعیت هنگامی که مکان‌نما در انتهای فایل است\. . .br . .IP "\(bu" 4 xmsg \fBstring\fR . .br تعیین پیام راه‌اندازی (معمولاً اعلان حق نشر یا کپی‌رایت)\. . .br . .IP "\(bu" 4 aborthint \fBstring\fR . .br تعیین توالی کلیدی که برای لغو عملیات در اعلان‌ها نمایش داده می‌شود (معمولاً ^C)\. . .br . .IP "\(bu" 4 helphint \fBstring\fR . .br تعیین توالی کلیدی که برای راهنما در اعلان‌ها نمایش داده می‌شود (معمولاً ^K H)\. . .br . .IP "" 0 . .SS "رنگ‌ها و مشخصه‌ها (Colors and attributes)" مشخصه‌ها و حداکثر یک رنگ پیش‌زمینه و یک رنگ پس‌زمینه را با هم ترکیب کنید تا آرگومان‌هایی برای گزینه‌های رنگ مانند text_color ایجاد شوند\. برای نمونه: bold+bg_green+blue . .IP "\(bu" 4 مشخصه‌ها: bold، inverse، blink، dim، underline، و italic . .IP "\(bu" 4 رنگ‌های پیش‌زمینه: white، cyan، magenta، blue، yellow، green، red، یا black . .IP "\(bu" 4 رنگ‌های پس‌زمینه: bg_white، bg_cyan، bg_magenta، bg_blue، bg_yellow، bg_green، bg_red، یا bg_black . .IP "" 0 . .P در یک شبیه‌ساز پایانه ۱۶ رنگی یا ۲۵۶ رنگی (export TERM=xterm\-16color)، این رنگ‌های روشن‌تر از حالت عادی در دسترس خواهند بود: . .IP "\(bu" 4 پیش‌زمینه: WHITE، CYAN، MAGENTA، BLUE، YELLOW، GREEN، RED یا BLACK . .IP "\(bu" 4 پس‌زمینه: bg_WHITE، bg_CYAN، bg_MAGENTA، bg_BLUE، bg_YELLOW، bg_GREEN، bg_RED یا bg_BLACK . .IP "" 0 . .P در یک شبیه‌ساز پایانه ۲۵۶ رنگی (export TERM=xterm\-256color)، این موارد در دسترس قرار می‌گیرند: . .IP "\(bu" 4 fg_RGB و bg_RGB، که در آن‌ها R، G و B در بازه 0 تا 5 قرار دارند\. بنابراین: fg_500 رنگ قرمز روشن است\. . .IP "\(bu" 4 fg_NN و bg_NN طیف‌های خاکستری را مشخص می‌کنند، که در آن‌ها شدت روشنایی، یعنی NN، در بازه 0 تا 23 است\. . .IP "" 0 ..SS "رشته‌های تعریف خط وضعیت (Status line definition strings)" گزینه \-lmsg رشته چپ‌چین و گزینه \-rmsg رشته راست‌چین را تعریف می‌کند\. نخستین نویسه در \-rmsg نویسه پرکننده پس‌زمینه است\. . .P گزینه \-smsg دستور وضعیت (\fB^K Space\fR) را تعریف می‌کند\. گزینه \-zmsg نیز زمانی که مکان‌نما در انتهای فایل است آن را تعیین می‌نماید\. آخرین نویسه smsg یا zmsg نویسه پرکننده است\. . .P دنباله‌های گریز (escape sequences) زیر را می‌توان در این رشته‌ها به کار برد: . .IP "" 4 . .nf %t زمان ۱۲ ساعته %u زمان ۲۴ ساعته %T مقدار O برای حالت رونویسی (overtype)، مقدار I برای حالت درج (insert) %W مقدار W در صورت فعال بودن شکستن کلمات (wordwrap) %I مقدار A در صورت فعال بودن دندانه‌گذاری خودکار (autoindent) %X نشانگر حالت مستطیلی (Rectangle mode) %n نام فایل %m عبارت \'(Modified)\' در صورت تغییر یافتن فایل %* نویسه \'*\' در صورت تغییر یافتن فایل %R نشانگر فقط‌خواندنی %r شماره سطر (خط) %c شماره ستون %o آفست بایتی در فایل %O آفست بایتی در فایل به مبنای ۱۶ (hex) %a مقدار اسکی (Ascii) نویسه زیر مکان‌نما %A مقدار اسکی نویسه زیر مکان‌نما به مبنای ۱۶ (hex) %w عرض نویسه زیر مکان‌نما %p درصد موقعیت مکان‌نما در فایل %l تعداد خطوط فایل %k کلیدهای پیشوندی واردشده %S عبارت \'*SHELL*\' در صورت اجرای یک پوسته در پنجره %M پیام ضبط ماکرو %y نحو (Syntax) %e کدگذاری (Encoding) %x بافتار (نخستین خط بدون دندانه‌گذاری با حرکت به عقب) %dd روز %dm ماه %dY سال %Ename% مقدار متغیر محیطی %Tname% مقدار گزینه (ON یا OFF برای گزینه‌های بولی) . .fi . .IP "" 0 . .P این دنباله‌های گریز قالب‌بندی نیز قابل استفاده هستند: . .IP "" 4 . .nf \ei معکوس (Inverse) \eu زیرخط (Underline) \eb برجسته (Bold) \ed کم‌رنگ (Dim) \ef چشمک‌زن (Blink) \el مورب (Italic) . .fi . .IP "" 0 . .P . .br . .SH "ویرایش پایه‌ای (Basic Editing)" هنگامی که نویسه‌ها را در ویرایشگر تایپ می‌کنید، آن‌ها به طور معمول در فایل در حال ویرایش درج می‌شوند (یا اگر مکان‌نما در انتهای فایل باشد، به فایل افزوده می‌شوند)\. این حالت کاری معمول ویرایشگر است\. اگر می‌خواهید بخشی از متن موجود را جایگزین کنید، باید متن پیشین را پیش یا پس از نوشتن متن جایگزین، حذف کنید\. از کلید \fBBackspace\fR می‌توان برای پاک کردن متن استفاده کرد: مکان‌نما را به بعد از متنی که قصد حذف آن را دارید ببرید و \fBBackspace\fR را به تعداد دفعات لازم بفشارید\. . .P برای ایجاد شکست خط (line\-break) کلید \fBEnter\fR یا \fBReturn\fR را بفشارید\. برای نمونه، اگر مکان‌نما در میانه یک خط باشد و کلید \fBEnter\fR را بفشارید، خط به دو نیم تقسیم شده و مکان‌نما در ابتدای خط دوم قرار می‌گیرد\. برای حذف شکست خط، در ابتدای یک خط کلید \fBBackspace\fR را بفشارید\. . .P از کلیدهای جهت‌نما برای حرکت در فایل استفاده کنید\. اگر صفحه‌کلید شما این کلیدها را ندارد (یا بنا به دلایلی کار نمی‌کنند)، از \fB^F\fR برای حرکت به جلو (راست)، \fB^B\fR برای حرکت به عقب (چپ)، \fB^P\fR برای رفتن به خط قبلی (بالا) و \fB^N\fR برای رفتن به خط بعدی (پایین) استفاده کنید\. کلیدهای جهت‌نمای چپ و راست تنها یک نویسه در هر بار به جلو یا عقب در متن جابه‌جا می‌شوند: اگر در ابتدای یک خط باشید و جهت‌نمای چپ را فشار دهید، به انتهای خط پیشین خواهید رفت\. کلیدهای جهت‌نمای بالا و پایین مکان‌نما را به اندازه‌ای به جلو و عقب جابه‌جا می‌کنند که در همان ستونی قرار گیرد که در خط قبلی قرار داشت\. . .P اگر می‌خواهید متن ورودی را دندانه‌گذاری (indent) کنید، می‌توانید از کلید \fBTab\fR بهره ببرید\. این کلید یک نویسه کنترلی ویژه درج می‌کند که باعث می‌شود نویسه‌های پس از آن از توقف‌گاه تب (tab stop) بعدی آغاز شوند\. توقف‌گاه‌های تب معمولاً هر ۸ ستون یک‌بار قرار دارند، اما این فاصله با دستور \fB^T D\fR قابل تغییر است\. برنامه‌نویسان زبان‌های C و PASCAL معمولاً توقف‌گاه‌های تب را روی هر ۴ ستون تنظیم می‌کنند\. . .P چنانچه بنا به دلیلی صفحه پایانه شما به‌هم ریخت (برای نمونه، در صورت دریافت اعلان رایانامه از biff)، می‌توانید با فشردن \fB^R\fR صفحه نمایش ویرایشگر را تازه‌سازی کنید\. . .P کلیدهای بسیار دیگری نیز برای حذف متن و جابه‌جایی در فایل وجود دارد\. برای نمونه، فشردن \fB^D\fR نویسه‌ای را که مکان‌نما روی آن قرار دارد حذف می‌کند، بر خلاف \fBBackspace\fR که به سمت عقب حذف انجام می‌دهد\. همچنین اگر مکان‌نما در انتهای یک خط باشد، \fB^D\fR شکست خط را حذف خواهد کرد\. برای حذف کل خطی که مکان‌نما روی آن است \fB^Y\fR و برای حذف متن از جایگاه مکان‌نما تا انتهای خط، \fB^J\fR را تایپ کنید\. . .P برای بردن مکان‌نما به ابتدای خط جاری \fB^A\fR را بفشارید\. برای بردن مکان‌نما به انتهای خط \fB^E\fR را بفشارید\. فشردن \fB^U\fR یا \fB^V\fR صفحه را به اندازه نیم صفحه به بالا یا پایین پیمایش (scroll) می‌کند\. . .br «پیمایش» بدین معناست که متن روی صفحه جابه‌جا می‌شود، اما مکان‌نما نسبت به قاب صفحه در جایگاه خود باقی می‌ماند\. برای بردن مکان‌نما به ابتدا یا انتهای فایل، کلیدهای \fB^K U\fR یا \fB^K V\fR را بفشارید\. برای مشاهده دستورهای حذف و جابه‌جایی بیشتر، به صفحه‌های راهنمای درون ویرایشگر مراجعه کنید\. . .P در صورت بروز اشتباه، می‌توانید \fB^_\fR را برای بازگردانی («undo») آن بفشارید\. در بیشتر صفحه‌کلیدها تنها با زدن \fB^\-\fR به \fB^_\fR دسترسی دارید، اما در برخی ممکن است نیاز باشد کلیدهای \fBShift\fR و \fBControl\fR را هم‌زمان نگه دارید\. چنانچه عملیات بازگردانی را بیش از اندازه انجام دادید، می‌توانید با فشردن \fB^^\fR تغییرات را دوباره برگردانید («redo») (در اکثر صفحه‌کلیدها این کار با زدن \fB^6\fR انجام می‌شود)\. . .SS "تاریخچه موقعیت مکان‌نما (Cursor position history)" اگر در نقطه‌ای از فایل در حال ویرایش بودید و موقتاً نیاز شد بخش دیگری از فایل را ببینید یا ویرایش کنید، می‌توانید با فشردن \fB^K \-\fR به جایگاه اولیه خود بازگردید\. این دستور در واقع شما را به آخرین نقطه‌ای که در فایل تغییری ایجاد کرده‌اید برمی‌گرداند\. می‌توانید با \fB^K \-\fR و \fB^K =\fR در تاریخچه موقعیت‌ها گام بردارید، همان‌گونه که با دستورهای «undo» و «redo» در تاریخچه تغییرات جابه‌جا می‌شوید\. . .SS "ذخیره و خروج (Save and exit)" هنگامی که کار ویرایش فایل به پایان رسید، \fB^K X\fR را برای خروج از ویرایشگر بفشارید\. چنانچه فایلی که در حال ویرایش آن هستید نام‌گذاری نشده باشد، از شما درخواست نام خواهد شد\. . .P هنگام ویرایش یک فایل، در حقیقت تنها یک کپی از آن را ویرایش می‌کنید\. بنابراین اگر تصمیم گرفتید تغییراتی را که در یک نشست ویرایشی انجام داده‌اید اعمال نکنید، می‌توانید با فشردن \fB^C\fR بدون ذخیره‌سازی از ویرایشگر خارج شوید\. . .P اگر فایلی را ویرایش کرده و تغییرات را ذخیره کنید، یک نسخه پشتیبان از آن فایل در دایرکتوری جاری و با افزودن نویسه \fB~\fR به نام آن ایجاد می‌شود که دربردارنده نسخه اصلی فایل است\. . .SS "عملیات فایل (File operations)" می‌توانید \fB^K D\fR را برای ذخیره فایل جاری بفشارید (احتمالاً با نامی متفاوت از نام اصلی فایل)\. پس از ذخیره فایل، می‌توانید برای ویرایش فایلی دیگر \fB^K E\fR را بفشارید\. . .P چنانچه قصد دارید تنها بخش مشخصی از فایل را ذخیره نمایید، بخش \fIBlocks\fR را در ادامه بررسی کنید\. . .P اگر می‌خواهید فایلی دیگر را درون فایل در حال ویرایش بگنجانید، از \fB^K R\fR برای درج آن استفاده کنید\. . .P \fI\fR ..SS "نام فایل‌ها (Filenames)" هر جا که JOE انتظار دارد نام فایلی را وارد کنید، چه در خط فرمان و چه در اعلان‌های درون ویرایشگر، می‌توانید موارد زیر را نیز تایپ کنید: . .IP "\(bu" 4 !command . .IP "" 0 . .P برای خواندن یا نوشتن داده از یا به یک دستور شل\. برای مثال، از \fBjoe \'!ls\'\fR برای دریافت رونوشتی از فهرست دایرکتوری خود جهت ویرایش استفاده کنید، یا از درون ویرایشگر از \fB^K D !mail jhallen@world\.std\.com\fR برای ارسال فایلی که در حال ویرایش آن هستید استفاده نمایید\. . .IP "\(bu" 4 >>filename . .IP "" 0 . .P از این مورد برای الحاق متن ویرایش‌شده توسط JOE به انتهای فایل "filename" استفاده کنید\. . .IP "\(bu" 4 filename,START,SIZE . .IP "" 0 . .P از این مورد برای دسترسی به بخش ثابتی از یک فایل یا دستگاه استفاده کنید\. مقادیر \fBSTART\fR و \fBSIZE\fR ممکن است در مبنای ده‌دهی (مثال: 123)، هشت‌هشتی (مثال: 0777) یا شانزده‌شانزدهی (مثال: 0xFF) وارد شوند\. برای مثال، از \fBjoe /dev/fd0,508,2\fR برای ویرایش بایت‌های 508 و 509 از نخستین فلاپی‌درایو در لینوکس استفاده کنید\. . .IP "\(bu" 4 \- . .IP "" 0 . .P از این مورد برای دریافت ورودی از ورودی استاندارد یا نوشتن خروجی در خروجی استاندارد استفاده کنید\. برای مثال، اگر می‌خواهید در مورد سهمیهٔ کم دیسک خود شکایت کنید، می‌توانید JOE را در یک لوله از دستورات قرار دهید: \fBquota \-v | joe | mail root\fR\. . .SS "استفاده از JOE در اسکریپت شل (Using JOE in a shell script)" در گذشته JOE برای دسترسی به ترمینال از /dev/tty استفاده می‌کرد\. این کار مشکلی را با برنامه‌های خاتمه‌دهندهٔ نشست‌های بیکار ایجاد می‌کرد (آن‌ها JOE را متوقف می‌کردند زیرا به دستگاه tty واقعی برای مدتی طولانی دسترسی پیدا نمی‌شد)، بنابراین اکنون JOE تنها زمانی از /dev/tty استفاده می‌کند که نیاز به هدایت لوله‌ای یک فایل به درون JOE داشته باشید، مانند: . .IP "" 4 . .nf echo "hi" | joe . .fi . .IP "" 0 . .P اگر می‌خواهید از JOE در یک اسکریپت شل استفاده کنید که stdin/stdout آن تغییر مسیر داده شده است، اما نیازی به هدایت لوله‌ای به آن ندارید، به‌سادگی باید stdin/stdout مربوط به JOE را به /dev/tty تغییر مسیر دهید: . .IP "" 4 . .nf joe filename /dev/tty . .fi . .IP "" 0 . .P . .br . .br . .SS "شکستن خط و قالب‌بندی (Word wrap and formatting)" اگر در فایلی به زبان C یا PASCAL از لبهٔ سمت راست صفحه فراتر تایپ کنید، صفحه به سمت راست پیمایش خواهد کرد تا مکان‌نما را دنبال کند\. اگر در یک فایل معمولی (فایلی که نام آن به \.c، \.h یا \.p ختم نمی‌شود) از لبهٔ راست صفحه فراتر تایپ کنید، JOE به‌طور خودکار آخرین کلمه را به خط بعدی می‌شکند تا نیازی به زدن کلید \fBEnter\fR نداشته باشید\. به این حالت، شکستن خط بر پایهٔ کلمه (word\-wrap mode) گفته می‌شود\. حالت Word\-wrap را می‌توان با دستور \fB^T W\fR روشن یا خاموش کرد\. فایل مقداردهی اولیهٔ JOE معمولاً به‌گونه‌ای تنظیم شده است که این حالت به‌طور خودکار برای همهٔ فایل‌های غیربرنامه‌ای فعال باشد\. برای تغییر این مورد و سایر پیش‌فرض‌ها، بخش مربوط به فایل \fIjoerc\fR را در ادامه ببینید\. . .P به‌جز حالت Word\-wrap، نرم‌افزار JOE بر خلاف برخی از واژه‌پردازها پاراگراف‌ها را به‌طور خودکار قالب‌بندی‌شده نگه نمی‌دارد\. در عوض، اگر نیاز دارید پاراگرافی بازقالب‌بندی شود، \fB^K J\fR را بزنید\. این دستور پاراگرافی را که مکان‌نما در آن قرار دارد «پر می‌کند» و تا حد امکان بیشترین کلمات ممکن را در یک خط جای می‌دهد\. در این حالت، پاراگراف بلوکی از متن است که از بالا و پایین با یک خط خالی جدا شده باشد\. . .P حاشیه‌هایی که JOE برای قالب‌بندی پاراگراف و شکستن کلمات استفاده می‌کند با دستورات \fB^T L\fR و \fB^T R\fR قابل تنظیم هستند\. اگر حاشیهٔ چپ روی مقداری غیر از 1 تنظیم شده باشد، هنگامی که تایپ را در ابتدای یک خط شروع می‌کنید، مکان‌نما بلافاصله به حاشیهٔ چپ خواهد پرید\. . .P تعدادی گزینه وجود دارند که بازقالب‌بند پاراگراف و شکنندهٔ کلمات را کنترل می‌کنند: . .IP "\(bu" 4 گزینهٔ \fBcpara\fR فهرستی از نویسه‌هایی را تعیین می‌کند که می‌توانند به پاراگراف تورفتگی دهند\. برای مثال، در رایانامه محتوای نقل‌قول‌شده با \fB>\fR در ابتدای خط مشخص می‌شود، بنابراین این نویسه باید در فهرست cpara قرار گیرد\. . .IP "\(bu" 4 گزینهٔ \fBcnotpara\fR فهرستی از نویسه‌هایی را تعیین می‌کند که اگر اولین نویسهٔ غیرفاصله‌ای یک خط باشند، نشان می‌دهند که آن خط نباید به عنوان بخشی از پاراگراف برای قالب‌بندی در نظر گرفته شود\. برای مثال، خطوطی که در nroff با \'\.\' شروع می‌شوند نمی‌توانند خطوط پاراگراف باشند\. . .IP "\(bu" 4 حالت تورفتگی خودکار (Autoindent) بر قالب‌بند تأثیر می‌گذارد\. اگر autoindent غیرفعال باشد، فقط خط اول تورفته خواهد شد\. اگر autoindent فعال باشد، کل پاراگراف تورفتگی پیدا می‌کند\. . .IP "\(bu" 4 گزینهٔ \fBfrench\fR مشخص می‌کند چه تعداد فاصله پس از نقطه‌ها درج شود\. . .IP "\(bu" 4 هنگامی که \fBflowed\fR فعال باشد، پس از هر خط پاراگراف به‌جز خط آخر یک فاصله درج می‌شود\. این مورد در برخی برنامه‌ها نشان می‌دهد که خطوط در کنار هم متعلق به یک پاراگراف واحد هستند\. . .IP "\(bu" 4 هنگامی که \fBovertype\fR فعال باشد، شکنندهٔ کلمات خطوط جدید درج نخواهد کرد\. . .IP "" 0 . .SS "وسط‌چین کردن (Centering)" اگر می‌خواهید خطی را در میان حاشیه‌ها وسط‌چین کنید، از دستور \fB^K A\fR استفاده کنید\. . .SS "غلط‌یاب املایی (Spell checker)" برای بررسی املای کلمه‌ای که مکان‌نما روی آن قرار دارد با استفاده از برنامهٔ aspell (یا برنامهٔ ispell در صورتی که فایل joerc را تغییر دهید)، کلیدهای \fBEsc N\fR را بزنید\. برای بررسی بلوک مشخص‌شده، یا در صورت مشخص نبودن هیچ بلوکی بررسی کل فایل، \fBEsc L\fR را بزنید\. . .P برنامهٔ JOE زبان و کدگذاری نویسه‌ها را به غلط‌یاب املایی ارسال می‌کند\. برای تغییر زبان، \fB^T V\fR را بزنید\. برای مثال، از en_US برای انگلیسی استفاده کنید\. . .SS "حالت رونویسی (Overtype mode)" گاهی اوقات خسته‌کننده است که پیش یا پس از درج متن جدید، مجبور به حذف متن قدیمی باشید\. این اتفاق برای مثال زمانی رخ می‌دهد که در حال ویرایش یک جدول هستید و می‌خواهید موقعیت ستون‌های سمت راست جدول را حفظ کنید\. . .br زمانی که این رخ می‌دهد، می‌توانید ویرایشگر را با \fB^T T\fR در حالت رونویسی قرار دهید\. . .br هنگامی که ویرایشگر در این حالت است، نویسه‌هایی که تایپ می‌کنید جایگزین نویسه‌های موجود می‌شوند، همان‌گونه که در یک ماشین تحریر ایده‌آل رخ می‌دهد\. همچنین، هنگامی که مکان‌نما در ابتدا یا انتهای یک خط نباشد، کلید \fBBackspace\fR به‌جای حذف نویسهٔ سمت چپ، صرفاً به سمت چپ حرکت می‌کند\. حالت رونویسی روشی طبیعی برای کار با متن به‌صورت الکترونیکی نیست، بنابراین باید با فشردن مجدد \fB^T T\fR هر چه سریع‌تر به حالت درج (insert\-mode) بازگردید\. . .P اگر در حالی که در حالت رونویسی هستید نیاز به درج کردن داشتید، \fB^@\fR را بزنید\. این کار یک \fBSpace\fR تنها را در متن درج می‌کند\. ..SS "نویسه‌های کنترلی و متا (Control and Meta characters)" هر نویسه با یک عدد نمایش داده می‌شود\. برای مثال، عدد نویسهٔ \'A\' برابر با 65 و عدد نویسهٔ \'1\' برابر با 49 است\. تمام نویسه‌هایی که به‌طور معمول مشاهده می‌کنید عددهایی در بازهٔ 32 \- 126 دارند (این انتساب اختیاری ویژه میان نویسه‌ها و عددها مجموعه نویسهٔ ASCII نامیده می‌شود)\. عددهای خارج از این بازه، از 0 تا 255، معمولاً نمایش داده نمی‌شوند، اما گاهی معانی ویژهٔ دیگری دارند\. برای نمونه، عدد 10 برای شکستن خط استفاده می‌شود\. می‌توانید این \fBنویسه‌های کنترلی\fR ویژه و غیرقابل‌نمایش را ابتدا با فشردن \fB^Q\fR و سپس فشردن نویسه‌ای در بازهٔ \fB@ A B C \.\.\. X Y Z [ ^ ] \e _\fR برای به‌دست آوردن شماره‌های 0 \- 31، و ? برای 127 وارد کنید\. به عنوان مثال، اگر \fB^Q J\fR را بفشارید، یک نویسهٔ شکست خط درج خواهید کرد، یا اگر \fB^Q I\fR را بفشارید، یک نویسهٔ \fBTab\fR درج می‌کنید (که دقیقاً همان کار کلید \fBTab\fR را انجام می‌دهد)\. یک نویسهٔ کنترلی کاربردی برای درج، 12 (\fB^Q L\fR) است که در بیشتر چاپگرها باعث رفتن به بالای صفحهٔ بعد می‌شود\. متوجه خواهید شد که JOE این نویسه را با یک L زیرخط‌دار نمایش می‌دهد\. می‌توانید نویسه‌های بالاتر از 127، یعنی \fBنویسه‌های متا\fR را با فشردن ابتدایی \fB^\e\fR وارد نمایید\. این کار مقدار 128 را به نویسهٔ بعدی (احتمالاً کنترلی) واردشده می‌افزاید\. ویرایشگر JOE نویسه‌های بالاتر از 128 را به صورت ویدئوی معکوس (inverse\-video) نمایش می‌دهد\. برخی زبان‌های خارجی که حروفی بیشتر از انگلیسی دارند، از نویسه‌های متا برای باقی الفبای خود استفاده می‌کنند\. باید ویرایشگر را در حالت \fBasis\fR قرار دهید تا این نویسه‌ها بدون تغییر به پایانه فرستاده شوند\. . .P \fBنکته:\fR ویرایشگر JOE اکنون در حالت عادی تمام 8 بیت را به پایانه می‌فرستد مگر اینکه محلی‌سازی (locale) روی C یا POSIX تنظیم شده باشد\. اگر لوکال C یا POSIX باشد، پرچم \fBasis\fR تعیین می‌کند که آیا \fBنویسه‌های متا\fR در ویدئوی معکوس نمایش داده شوند یا مستقیماً به پایانه ارسال گردند\. . .P \fBنکته:\fR در نسخه‌های قدیمی‌تر JOE، باید از \fBEsc \'\fR برای وارد کردن نویسه‌های کنترلی استفاده می‌کردید\. . .SH "مجموعه‌های نویسه و UTF\-8 (Character sets and UTF\-8)" برنامهٔ JOE به‌طور بومی از دو دسته مجموعه نویسه پشتیبانی می‌کند: UTF\-8 و کدگذاری‌شده به‌صورت بایتی (مانند ISO\-8859\-1)\. برای این مجموعه‌های نویسه، فایل همان‌گونه که هست در حافظه بارگذاری می‌شود و هنگام ذخیره‌سازی دقیقاً حفظ می‌گردد، حتی اگر شامل خطاهای کدگذاری UTF\-8 باشد\. . .P این برنامه هنوز نمی‌تواند به‌طور بومی از دیگر دسته‌های اصلی مانند UTF\-16 یا GB2312 پشتیبانی کند\. محدودیت‌های دیگری نیز وجود دارد: مجموعه‌های نویسه باید از LF (0x0A) یا CR\-LF (0x0D \- 0x0A) به عنوان پایان‌دهندهٔ خط استفاده کنند، فاصله باید 0x20 و تب باید 0x09 باشد\. اساساً، فایل‌ها باید فایل‌های متنی سازگار با UNIX یا MS\-DOS باشند\. . .P این بدان معناست که EBCDIC به‌درستی کار نخواهد کرد (اگرچه در هر صورت نیاز به مدیریت خطوط با طول رکورد ثابت دارید) و مجموعه‌های نویسه‌ای که از خطوط پایان‌یافته با CR استفاده می‌کنند (سیستم‌های قدیمی مک) هنوز کار نخواهند کرد\. . .P اکنون JOE از UTF\-16 (هم big endian و هم little endian) پشتیبانی می‌کند\. این پشتیبانی از طریق تبدیل به UTF\-8 در هنگام بارگذاری و تبدیل مجدد به UTF\-16 در زمان ذخیره‌سازی انجام می‌شود\. . .P پایانه و فایل می‌توانند کدگذاری‌های متفاوتی داشته باشند\. برنامهٔ JOE بین این دو تبدیل انجام می‌دهد\. در حال حاضر، یکی از این دو باید UTF\-8 باشد تا تبدیل کار کند\. . .P مجموعه نویسهٔ پایانه و مجموعه نویسهٔ پیش‌فرضی که برای فایل‌ها در نظر گرفته می‌شود توسط متغیر محیطی \'LC_ALL\' تعیین می‌گردد (و اگر تنظیم نشده باشد، LC_CTYPE و LANG نیز بررسی می‌شوند)\. . .P برای مثال، اگر LC_ALL روی مقدار زیر تنظیم شده باشد: . .IP "" 4 . .nf de_DE . .fi . .IP "" 0 . .P آنگاه مجموعه نویسه ISO\-8859\-1 خواهد بود\. . .P اگر LC_ALL روی مقدار زیر تنظیم شده باشد: . .IP "" 4 . .nf de_DE\.UTF\-8 . .fi . .IP "" 0 . .P مجموعه نویسه UTF\-8 خواهد بود\. . .P کلیدهای \fB^T E\fR را بفشارید تا کدگذاری فایل را تغییر دهید\. در این اعلان، دو بار \fBTab\fR \fBTab\fR را بزنید تا فهرستی از کدگذاری‌های موجود به دست آورید\. چندین مجموعه نویسهٔ توکار وجود دارد، به علاوه می‌توانید مجموعه‌های نویسه را در دایرکتوری‌های ~/\.joe/charmaps و /usr/share/joe/charmaps نصب کنید\. . .P مسیر /usr/share/i18n/charmaps را برای فایل‌های نمونهٔ مجموعه نویسه بررسی کنید\. تنها مجموعه‌های نویسهٔ بایت‌محور کار خواهند کرد\. همچنین فایل نباید فشرده‌شده با gzip باشد (همهٔ فایل‌های charmap در مسیر /usr/share/i18n/charmaps روی رایانهٔ من فشرده بودند)\. تجزیه‌کننده بسیار نامنعطف است، بنابراین فایل اساساً باید دقیقاً شبیه نمونهٔ موجود در /usr/share/joe/charmaps باشد\. . .P می‌توانید \fB^K Space\fR را برای دیدن مجموعه نویسهٔ فعلی بفشارید\. . .P اگر کدگذاری فایل UTF\-8 باشد، می‌توانید \fB^Q x\fR را برای وارد کردن یک نویسهٔ یونیکد بفشارید\. . .SH "اعلان‌ها (Prompts)" بیشتر اعلان‌ها تاریخچه‌ای از پاسخ‌هایی که به آن‌ها می‌دهید را ضبط می‌کنند\. می‌توانید کلیدهای جهت‌نمای بالا و پایین را برای پیمایش در این تاریخچه‌ها بفشارید\. . .P اعلان‌ها در واقع پنجره‌هایی تک‌خطی و بدون سطر وضعیت هستند، بنابراین می‌توانید از هر دستور ویرایشی که معمولاً روی متن به کار می‌برید، در داخل اعلان‌ها نیز استفاده کنید\. تاریخچهٔ اعلان در واقع خطوط دیگری از همان «فایل اعلان» است\. از این رو در صورت تمایل می‌توانید با دستور معمول \fB^K F\fR در تاریخچهٔ اعلان به عقب جستجو کنید\. . .P از آن‌جا که اعلان‌ها پنجره هستند، می‌توانید با \fB^K P\fR و \fB^K N\fR نیز از آن‌ها بیرون رفته و پنجره را تعویض کنید\. . .SS "منوهای تکمیل خودکار و گزینش (Completion and selection menus)" در تقریباً هر اعلانی می‌توانید کلید \fBTab\fR را بفشارید تا از JOE بخواهید کلمه‌ای را که تایپ می‌کنید تکمیل کند\. اگر JOE بوق زد، یا هیچ تکمیلی وجود ندارد یا گزینه‌های متعددی وجود دارد\. همانند پوستهٔ «bash»، دو بار کلید \fBTab\fR را بزنید تا فهرستی از تمام گزینه‌های ممکن نشان داده شود\. این فهرست در واقع یک منو است، اما به‌طور پیش‌فرض، مکان‌نما وارد آن نمی‌شود زیرا معمولاً تایپ کردن انتخابتان آسان‌تر است\. با این حال، می‌توانید با \fB^K P\fR (رفتن به پنجرهٔ قبلی) به پنجرهٔ منو بروید و با کلیدهای جهت‌نما و انتخاب خود را انجام دهید\. همچنین در یک منو، می‌توانید نخستین حرف هر یک از موارد را بفشارید تا مکان‌نما مستقیماً به آن مورد بپرد\. منوی گزینه‌های \fB^T\fR به این شکل کار می‌کند\. . .P اگر منو برای گنجیدن در پنجره بیش از حد بزرگ باشد، می‌توانید کلیدهای Page Up و Page Down را برای پیمایش آن بفشارید (حتی اگر مکان‌نما را وارد آن نکرده باشید)\. . .P تکمیل با \fBTab\fR در اعلان‌های جستجو و جایگزینی نیز کار می‌کند\. در این حالت، JOE تلاش می‌کند کلمه را بر پایهٔ محتویات بافر تکمیل کند\. اگر می‌خواهید خود نویسهٔ \fBTab\fR را جستجو کنید، می‌توانید آن را با \fB^Q Tab\fR وارد نمایید\. . .P همچنین، می‌توانید در یک پنجرهٔ متنی کلیدهای \fBEsc Enter\fR را بفشارید تا از JOE بخواهید کلمه‌ای را که تایپ می‌کنید تکمیل کند\. مانند اعلان جستجو، JOE تلاش می‌کند کلمه را بر پایهٔ محتویات بافر تکمیل نماید\. اگر دوبار \fBEsc Enter\fR را بفشارید، منویی از گزینه‌های ممکن ظاهر خواهد شد\. . .SH "من کجا هستم؟ (Where am I?)" کلیدهای \fB^K Space\fR را بفشارید تا JOE شمارهٔ خط، شمارهٔ ستون و شمارهٔ بایت را در آخرین خط صفحه نمایش دهد\. عددی که به نویسهٔ زیر مکان‌نما اختصاص دارد (کد ASCII آن) نیز نمایش داده می‌شود\. می‌توانید با قرار دادن توالی‌های گریز مناسب در رشته‌های پیکربندی نوار وضعیت، کاری کنید که شمارهٔ خط و/یا شمارهٔ ستون همیشه در نوار وضعیت نمایش داده شوند\. برای جزئیات، فایل joerc را ویرایش کنید\. . .SH "اگر تصادفاً ^K را زدم چه؟ (What if I hit ^K by accident?)" کلید فاصله (space bar) را فشار دهید\. این کار فرمانی بی‌خطر را اجرا می‌کند (شمارهٔ خط را در نوار وضعیت نشان می‌دهد)\. . .SH "تعلیق موقت ویرایشگر (Temporarily suspending the editor)" اگر نیاز دارید ویرایشگر را موقتاً متوقف کرده و به پوسته بازگردید، \fB^K Z\fR را بفشارید\. برای مثال، ممکن است بخواهید ویرایش هر آنچه را انجام می‌دهید متوقف کنید تا به یک رایانامه پاسخ دهید یا همین صفحهٔ راهنما را بخوانید\. برای بازگشت به ویرایشگر باید \fBfg\fR یا \fBexit\fR را تایپ کنید (هنگامی که \fB^K Z\fR را می‌زنید به شما گفته خواهد شد کدام یک را تایپ کنید)\. . .SH "جستجوی متن (Searching for text)" کلیدهای \fB^K F\fR را بفشارید تا ویرایشگر برای شما به جلو یا عقب به دنبال بخشی از متن (\fBstring\fR) بگردد\. از شما متنی که می‌خواهید جستجو کنید پرسیده خواهد شد\. پس از زدن \fBEnter\fR، از شما خواسته می‌شود گزینه‌ها را وارد کنید\. . .br می‌توانید مجدداً کلید \fBEnter\fR را فشار دهید تا ویرایشگر بلافاصله به سمت جلو متن را جستجو کند، یا می‌توانید یک یا چند مورد از این گزینه‌ها را وارد کنید: . .IP "\(bu" 4 \fBb\fR . .br . .IP "" 0 . .P جستجو به سمت عقب به جای جلو\. . .IP "\(bu" 4 \fBi\fR . .br . .IP "" 0 . .P یکسان در نظر گرفتن حروف بزرگ و کوچک هنگام جستجو\. در حالت عادی حروف بزرگ و کوچک متفاوت در نظر گرفته می‌شوند\. . .IP "\(bu" 4 \fBnnn\fR . .br . .IP "" 0 . .P (که در آن \fBnnn\fR یک عدد است) اگر عددی وارد کنید، JOE به دنبال Nـمین رخداد متن می‌گردد\. این ویژگی برای رفتن به مکان‌های مشخصی در فایل‌هایی با ساختار منظم سودمند است\. . .IP "\(bu" 4 \fBr\fR . .br . .IP "" 0 . .P جایگزینی متن\. اگر گزینهٔ \fBr\fR را وارد کنید، سپس متن جایگزین از شما پرسیده خواهد شد\. هر بار که ویرایشگر متن جستجوشده را پیدا کند، از شما پرسیده می‌شود که آیا مایلید متن یافت‌شده را با متن جایگزین تعویض کنید یا خیر\. می‌توانید کلیدهای زیر را بفشارید: \fBy\fR برای جایگزینی متن و سپس یافتن مورد بعدی، \fBn\fR برای جایگزین نکردن این متن و رفتن به مورد بعدی، \fBr\fR برای جایگزینی تمام رخدادهای باقی‌مانده از متن مورد جستجو در ادامهٔ فایل بدون درخواست تأیید (مشروط به گزینهٔ \fBnnn\fR در بالا)، یا \fB^C\fR برای توقف جستجو و جایگزینی\. . .P همچنین می‌توانید \fBB\fR یا \fBBackspace\fR را برای بازگشت به متن پیش‌تر یافت‌شده بفشارید (اگر جایگزین شده باشد، جایگزینی واگردانی می‌شود)\. . .IP "\(bu" 4 \fBa\fR . .br . .IP "" 0 . .P جستجو تمامی بافرهای بارگذاری‌شده را شامل می‌شود\. بنابراین برای جایگزینی همه نمونه‌های "foo" با "bar" در تمام فایل‌های \.c در دایرکتوری جاری: . .IP "" 4 . .nf joe *\.c ^K F foo ra bar . .fi . .IP "" 0 . .IP "\(bu" 4 \fBe\fR . .br . .IP "" 0 . .P جستجو تمامی فایل‌ها را در فهرست خطای grep یا make در بر می‌گیرد\. می‌توانید از یک دستور UNIX برای ساخت فهرستی از فایل‌ها و جستجو و جایگزینی در سرتاسر آن فهرست بهره بگیرید\. بنابراین برای جایگزینی همه نمونه‌های "foo" با "bar" در تمام فایل‌های \.c که با f آغاز می‌شوند\. همچنین می‌توانید به جای grep از "ls" و "find" برای ساخت فهرست فایل‌ها استفاده کنید\. . .IP "" 4 . .nf Esc G grep \-n foo f*\.c ^K F foo re bar . .fi ..IP "" 0 . .IP "\(bu" 4 \fBx\fR . .br . .IP "" 0 . .P در صورت دادن این گزینه، JOE از نحو استاندارد برای عبارت‌های باقاعده استفاده خواهد کرد\. در نحو استاندارد، این نویسه‌ها مستقیماً معنای ویژهٔ خود را دارند و نیازی به گریز دادن (escape) آن‌ها با بک‌اسلش نیست: \., *, +, ?, {, }, (, ), |, ^, $ و [\. . .IP "\(bu" 4 \fBy\fR . .br . .IP "" 0 . .P ویرایشگر JOE به‌جای نحو استاندارد، از نحو اختصاصی JOE برای عبارت‌های باقاعده استفاده خواهد کرد\. این گزینه بر گزینهٔ «\-regex» اولویت دارد\. . .IP "\(bu" 4 \fBv\fR . .br . .IP "" 0 . .P ویرایشگر JOE اطلاعات اشکال‌زدایی مربوط به عبارت باقاعده را به گزارش راه‌اندازی (startup log) ارسال خواهد کرد\. این گزارش را می‌توان با دستور showlog مشاهده کرد\. . .P می‌توانید برای تکرار جستجوی قبلی \fB^L\fR را فشار دهید\. . .P می‌توانید در اعلان گزینه‌های جستجو و جایگزینی، \fB^K H\fR را فشار دهید تا فهرستی از تمام گزینه‌های جستجو و جایگزینی نشان داده شود\. . .SS "عبارت‌های باقاعده (Regular Expressions)" تعدادی توالی نویسه‌ایِ ویژه می‌توانند به عنوان متن جستجو وارد شوند: . .IP "\(bu" 4 \fB\e*\fR . .br . .IP "" 0 . .P این توالی صفر یا چند مورد از مورد سمت چپ را می‌یابد\. برای مثال، اگر \fBAB\e*C\fR را به عنوان متن جستجو بدهید، JOE تلاش خواهد کرد تا یک A که به دنبال آن هر تعداد B، و سپس یک C آمده است را بیابد\. . .IP "\(bu" 4 \fB\e+\fR . .br . .IP "" 0 . .P این توالی یک یا چند مورد از مورد سمت چپ را می‌یابد\. برای مثال، اگر \fBAB\e+C\fR را به عنوان متن جستجو بدهید، JOE تلاش خواهد کرد تا یک A که به دنبال آن یک یا چند B، و سپس یک C آمده است را بیابد\. . .IP "\(bu" 4 \fB\e?\fR . .br . .IP "" 0 . .P این توالی نشان می‌دهد که مورد سمت چپ اختیاری است\. برای مثال، اگر \fBAB\e?C\fR را به عنوان متن جستجو بدهید، JOE رشته‌های AC یا ABC را خواهد یافت\. . .IP "\(bu" 4 \fB\e{min,max}\fR . .br . .IP "" 0 . .P این توالی مشخص می‌کند که JOE باید رشته‌ای با تعداد تکرار مشخصی از مورد سمت چپ پیدا کند\. برای مثال، \fBAX\e{2,5}B\fR با این رشته‌ها مطابقت خواهد داشت: AXXB، AXXXB، AXXXXB، و AXXXXXB\. مقدار Min می‌تواند برای نشان دادن ۰ تکرار حذف شود\. مقدار Max (و ویرگول) می‌تواند برای نشان دادن هر تعداد تکرار حذف شود\. . .IP "\(bu" 4 \fB\e\.\fR . .br . .IP "" 0 . .P این توالی دقیقاً یک نویسه را می‌یابد\. برای مثال، اگر \fBA\e\.B\fR را به عنوان متن جستجو بدهید، JOE رشتهٔ AXB را پیدا می‌کند، اما AB یا AXXB را نخواهد یافت\. . .IP "\(bu" 4 \fB\e!\fR . .br . .IP "" 0 . .P این توالی مانند \fB\.\fR عمل می‌کند، اما با یک عبارت متوازن در زبان C مطابقت می‌یابد\. برای مثال، اگر \fBmalloc(\e!\e*)\fR را جستجو کنید، آنگاه JOE تمام فراخوانی‌های تابع به \fBmalloc\fR را پیدا می‌کند، حتی اگر یک \fB)\fR درون پرانتزها باشد\. . .IP "\(bu" 4 \fB\e|\fR . .br . .IP "" 0 . .P این توالی مورد سمت چپ یا مورد سمت راست را می‌یابد\. برای مثال، اگر \fBA\e|B\fR را به عنوان متن جستجو بدهید، JOE تلاش خواهد کرد تا یا یک A یا یک B پیدا کند\. . .IP "\(bu" 4 \fB\e( \e)\fR . .br . .IP "" 0 . .P از این‌ها برای گروه‌بندی نویسه‌ها در کنار یکدیگر استفاده کنید\. برای مثال، اگر \fB\e(foo\e)\e+\fR را جستجو کنید، JOE رشته‌هایی مانند «foo» و «foofoofoo» را پیدا خواهد کرد\. . .IP "\(bu" 4 \fB^ \e$\fR . .br . .IP "" 0 . .P این نویسه‌ها با ابتدا و انتهای خطوط مطابقت پیدا می‌کنند\. برای مثال، اگر \fB^test\e$\fR را بدهید، JOE کلمهٔ \fBtest\fR را به‌تنهایی در یک خط خواهد یافت\. . .IP "\(bu" 4 \fB\e\fI\e\e\fR\fR . .br . .IP "" 0 . .P این‌ها با ابتدا و انتهای کلمات مطابقت دارند\. برای مثال، اگر \fB\e\fIis\e\e\fR\fR را وارد کنید، JOE کلمهٔ «is» را پیدا می‌کند، اما «is» موجود در «this» را نخواهد یافت\. . .IP "\(bu" 4 \fB\e[\.\.\.]\fR . .br . .IP "" 0 . .P این توالی با هر نویسهٔ تکی که درون قلاب‌ها ظاهر شود مطابقت می‌یابد\. برای مثال، اگر \fB\e[Tt]his\fR به عنوان رشتهٔ جستجو وارد شود، JOE هر دو رشتهٔ \fBThis\fR و \fBthis\fR را پیدا می‌کند\. بازه‌هایی از نویسه‌ها نیز می‌توانند درون قلاب‌ها وارد شوند\. برای مثال، \fB\e[A\-Z]\fR هر نویسهٔ حرف بزرگ را می‌یابد\. اگر نخستین نویسهٔ داده‌شده درون قلاب‌ها \fB^\fR باشد، JOE تلاش می‌کند هر نویسه‌ای را که درون قلاب‌ها نیست پیدا کند\. برای گنجاندن خودِ \fB\-\fR، آن را به عنوان آخرین یا نخستین نویسه (احتمالاً پس از \fB^\fR) قرار دهید\. . .IP "\(bu" 4 \fB\e\e\fR . .br . .IP "" 0 . .P با یک نویسهٔ \e منفرد مطابقت می‌یابد\. . .IP "\(bu" 4 \fB\en\fR . .br . .IP "" 0 . .P این توالی نویسهٔ ویژهٔ پایان خط یا شکست خط (line\-break) را می‌یابد\. . .P همچنین می‌توان تعدادی توالی نویسه‌ای ویژه را در رشتهٔ جایگزینی قرار داد: . .IP "\(bu" 4 \fB\e&\fR . .br . .IP "" 0 . .P این توالی با متنی که با رشتهٔ جستجو مطابقت پیدا کرده است جایگزین می‌شود\. برای مثال، اگر رشتهٔ جستجو \fB\e\fI\e*\e\e\fR\fR باشد که با کلمات مطابقت دارد، و شما \fB"\e&"\fR را بدهید، JOE علامت‌های نقل‌قول را اطراف کلمات قرار خواهد داد\. ..IP "\(bu" 4 \fB\e1 \- \e9\fR . .br . .IP "" 0 . .P این‌ها با متنی که با Nامین گروه‌بندی مطابقت یافته است جایگزین می‌شوند؛ یعنی متن داخل Nامین مجموعه از \e( \e)\. . .IP "\(bu" 4 \fB\el, \eu\fR . .br . .IP "" 0 . .P نویسه بعدی متن جایگزینی را به حروف کوچک یا بزرگ تبدیل می‌کند\. . .IP "\(bu" 4 \fB\eL, \eU\fR . .br . .IP "" 0 . .P تمام متن جایگزینی بعدی را به حروف کوچک یا بزرگ تبدیل می‌کند\. تبدیل با رسیدن به \eE متوقف می‌شود\. . .IP "\(bu" 4 \fB\e\e\fR . .br . .IP "" 0 . .P اگر نیاز دارید یک \fB\e\fR در رشته جایگزینی قرار دهید، از این استفاده کنید\. . .IP "\(bu" 4 \fB\en\fR . .br . .IP "" 0 . .P اگر نیاز دارید یک شکست خط در رشته جایگزینی قرار دهید، از این استفاده کنید\. . .P چند مثال: . .P فرض کنید فهرستی از نشانی‌ها دارید که هر کدام در یک خط جداگانه قرار دارند، با "Address:" شروع می‌شوند و اجزای آن‌ها با کاما از یکدیگر جدا شده‌اند\. مانند زیر: . .P Address: S\. Holmes, 221b Baker St\., London, England . .P اگر بخواهید این فهرست را بازآرایی کنید تا ابتدا کشور، سپس شهر، سپس نام شخص، و در نهایت نشانی قرار گیرد، می‌توانید این کار را انجام دهید: . .P کلیدهای \fB^K F\fR را برای شروع جستجو فشار دهید، و بنویسید: . .P \fBAddress:\e(\e\.\e*\e),\e(\e\.\e*\e),\e(\e\.\e*\e),\e(\e\.\e*\e)\e$\fR . .P تا با "Address:"، چهار بخشِ جداشده با کاما، و سپس پایان خط مطابقت پیدا کند\. وقتی گزینه‌ها درخواست شد، \fBr\fR را برای جایگزینی رشته تایپ کنید و سپس بنویسید: . .P \fBAddress:\e4,\e3,\e1,\e2\fR . .P تا اطلاعات را آن‌طور که می‌خواهید جابه‌جا کند\. پس از فشردن کلید return، جستجو آغاز می‌شود و خط نمونه به این شکل تغییر خواهد کرد: . .P Address: England, London, S\. Holmes, 221b Baker St\. . .P \fI\fR . .SS "توالی‌های گریز (Escape sequences)" ویرایشگر JOE توالی‌های گریز زیر را در رشته‌های جستجو و جایگزینی درک می‌کند: . .IP "\(bu" 4 \ex{10ffff} . .br . .IP "" 0 . .P این با یک نقطه کد (code point) یونیکدِ مشخص که در مبنای شانزده داده شده مطابقت می‌یابد\. . .IP "\(bu" 4 \exFF . .br . .IP "" 0 . .P این با نویسه‌ای خاص که در مبنای شانزده مشخص شده مطابقت می‌یابد\. . .IP "\(bu" 4 \e377 . .br . .IP "" 0 . .P این با نویسه‌ای خاص که در مبنای هشت مشخص شده مطابقت می‌یابد\. . .IP "\(bu" 4 \ep{Ll} . .br . .IP "" 0 . .P این با هر نویسه‌ای در رده یا بلوک یونیکد نام‌برده مطابقت می‌یابد\. . .P نام‌های بلوک، مانند "Latin\-1 Supplement" یا "Arabic" را می‌توان در اینجا یافت: . .P بلوک‌های یونیکد \fIftp://ftp\.unicode\.org/Public/8\.0\.0/ucd/Blocks\.txt\fR . .P نام‌های رده مانند "Ll" را می‌توان در اینجا یافت: . .P رده‌های یونیکد \fIftp://ftp\.unicode\.org/Public/5\.1\.0/ucd/UCD\.html#General_Category_Values\fR . .P توجه داشته باشید که یک تک‌حرف با تمام نام‌های رده که با آن حرف آغاز می‌شوند مطابقت دارد\. به عنوان مثال، \ep{N} (هر عددی) شامل \ep{Nd} (رقم ده‌دهی)، \ep{Nl} (عدد حرفی) و \ep{No} (سایر ارقام) می‌شود\. . .IP "\(bu" 4 \ed . .br . .IP "" 0 . .P این با هر رقم یونیکد مطابقت می‌یابد\. این معادل با \ep{Nd} است\. . .IP "\(bu" 4 \eD . .br . .IP "" 0 . .P این با هر چیزی به جز رقم یونیکد مطابقت می‌یابد\. این معادل با \e[^\ep{Nd}] است\. . .IP "\(bu" 4 \ew . .br . .IP "" 0 . .P این با هر نویسه کلمه‌ای مطابقت می‌یابد\. این معادل با \e[^\ep{C}\ep{P}\ep{Z}] است\. . .IP "\(bu" 4 \eW . .br . .IP "" 0 . .P این با هر چیزی به جز یک نویسه کلمه‌ای مطابقت می‌یابد\. این معادل با \e[\ep{C}\ep{P}\ep{Z}] است\. . .IP "\(bu" 4 \es . .br ..IP "" 0 . .P این با هر نویسه فاصله‌ای مطابقت دارد\. این معادل با \e[\et\er\ef\en\ep{Z}] است\. . .IP "\(bu" 4 \eS . .br . .IP "" 0 . .P این با هر چیزی به جز یک نویسه فاصله مطابقت دارد\. این معادل با \e[^\et\er\ef\en\ep{Z}] است\. . .IP "\(bu" 4 \ei . .br . .IP "" 0 . .P این با یک نویسه آغازگر شناسه مطابقت دارد\. این معادل با \e[\ep{L}\ep{Pc}\ep{Nl}] است\. . .IP "\(bu" 4 \eI . .br . .IP "" 0 . .P این با هر چیزی به جز یک نویسه آغازگر شناسه مطابقت دارد\. این معادل با \e[^\ep{L}\ep{Pc}\ep{Nl}] است\. . .IP "\(bu" 4 \ec . .br . .IP "" 0 . .P این با یک نویسه ادامه‌دهنده شناسه مطابقت دارد\. این معادل با \e[\ei\ep{Mn}\ep{Mc}\ep{Nd}\ex{200c}\ex{200d}] است\. . .IP "\(bu" 4 \eC . .br . .IP "" 0 . .P این با هر چیزی به جز یک نویسه ادامه‌دهنده شناسه مطابقت دارد\. این معادل با \e[^\ei\ep{Mn}\ep{Mc}\ep{Nd}\ex{200c}\ex{200d}] است\. . .IP "\(bu" 4 \et تب (Tab) . .IP "\(bu" 4 \en خط جدید (Newline) . .IP "\(bu" 4 \er بازگشت به ابتدای سطر (Carriage return) . .IP "\(bu" 4 \eb پس‌بر (Backspace) . .IP "\(bu" 4 \ea هشدار (Alert) . .IP "\(bu" 4 \ef تعویض صفحه (Formfeed) . .IP "\(bu" 4 \ee فرار (Escape) . .IP "\(bu" 4 \e\e بک‌اسلش (Backslash) . .IP "" 0 . .SH "جستجوی افزایشی (Incremental search)" برای شروع جستجوی افزایشی رو به جلو از \fBEsc S\fR، یا برای شروع جستجوی افزایشی رو به عقب از \fBEsc R\fR استفاده کنید\. هم‌زمان با تایپ رشته جستجو، مکان‌نما به نخستین متنی که با عبارت باقاعده واردشده تا آن لحظه تطابق داشته باشد، خواهد پرید\. . .P کلیدهای \fBEsc S\fR یا \fBEsc R\fR را دوباره فشار دهید تا رخداد بعدی متن پیدا شود یا جهت جستجو تغییر کند\. . .P کلیدهای \fB^S\fR، \fB^\e\fR و \fB^L\fR اثری مشابه با \fBEsc S\fR دارند\. \fB^R\fR اثری مشابه با \fBEsc R\fR دارد\. این کلیدها برای پشتیبانی از JMACS در نظر گرفته شده‌اند\. . .P برای لغو آخرین عملِ جستجوی افزایشی، کلید \fBBackspace\fR را فشار دهید\. آخرین عمل می‌تواند تکرار جستجوی پیشین یا وارد کردن یک نویسه جدید باشد\. . .P برای درج نویسه‌های کنترلی در متن جستجو، از \fB^Q\fR استفاده کنید\. پیش‌تر، از ` نیز می‌شد برای این کار استفاده کرد\. . .P برای خروج از جستجوی افزایشی، هر کلید دیگری را فشار دهید\. . .SH "رفتن به جداکننده متناظر (Goto matching delimiter)" برای پرش بین جداکننده‌های متناظر، کلید \fB^G\fR را بزنید\. این ویژگی هم روی جداکننده‌های نویسه‌ای (مانند \'(\' و \')\') و هم روی جداکننده‌های کلمه‌ای برای زبان‌هایی مانند Pascal و Verilog که از "begin" و "end" برای جداسازی بلوک‌ها استفاده می‌کنند، کار می‌کند\. همچنین برای تطبیق برچسب‌های آغاز و پایان در XML کاربرد دارد\. اگر کلمه‌ای شناخته‌شده نباشد، \fB^G\fR جستجویی را با انتقال آن کلمه به اعلان جستجو آغاز می‌کند\. . .P برای کارکرد \fB^G\fR روی جداکننده‌های کلمه‌ای، مکان‌نما باید روی نخستین حرف کلمه قرار گرفته باشد\. بنابراین در XML، اگر مکان‌نما روی < در باشد، به > خواهد پرید\. اما اگر روی \'f\' باشد، به متناظر خواهد پرید\. به‌همین ترتیب، در C، کلید \fB^G\fR بین #if، #else و #endif جابه‌جا خواهد شد، اما لازم است مکان‌نما را روی حرف قرار دهید، نه روی \'#\'\. . .P کلید \fB^G\fR آن‌قدر هوشمند است که از جداکننده‌های موجود در بخش‌های درون نقل‌قول یا کامنت‌ها صرف‌نظر کند\. شما باید به JOE اعلام کنید که زبان شما این موارد را چگونه مشخص می‌کند: برای نمونه‌هایی از نحوه انجام این کار، فایل \fBftyperc\fR را ببینید\. . .P تعدادی گزینه وجود دارد که رفتار \fB^G\fR را کنترل می‌کنند\. این گزینه‌ها مشخص می‌کنند که \fB^G\fR از چه نوع کامنت‌هایی می‌تواند رد شود: . .IP "\(bu" 4 c_comment . .IP "\(bu" 4 cpp_comment . .IP "\(bu" 4 pount_comment . .IP "\(bu" 4 semi_comment . .IP "\(bu" 4 vhdl_comment . .IP "" 0 . .P این گزینه‌ها تعیین می‌کنند که \fB^G\fR از چه نوع رشته‌هایی می‌تواند صرف‌نظر کند: . .IP "\(bu" 4 single_quoted . .IP "\(bu" 4 double_quoted . .IP "" 0 . .P این گزینه به یک فایل نحو (syntax) نشانه‌گذاری‌شده امکان می‌دهد مشخص کند چه متنی می‌تواند به عنوان کامنت یا رشته در نظر گرفته شود تا \fB^G\fR از آن رد شود: . .IP "\(bu" 4 highlighter_context . .IP "" 0 . .P این گزینه استفاده از فایل‌های نحو را برای شناسایی کامنت‌ها و رشته‌هایی که باید هنگام تطبیق \fB^G\fR نادیده گرفته شوند، فعال می‌کند\. وضعیت‌های فایل نحو باید با کلمات کلیدی \fBstring\fR و \fBcomment\fR نشانه‌گذاری شوند تا این ویژگی کار کند\. . .IP "\(bu" 4 text_delimiters . .IP "" 0 . .P این گزینه فهرستی از جداکننده‌های کلمه‌ای را برای تطابق فراهم می‌کند\. برای نمونه، "begin=end:if=elif=else=endif" بدان معناست که \fB^G\fR بین if، elif، else و endif متناظر می‌پرد\. همچنین بین begin و end نیز جابه‌جا خواهد شد\. . .P کلید \fB^G\fR دارای یک جدول داخلی برای مطابقت دادن جداکننده‌های نویسه‌ای است؛ می‌داند که \fB(\fR با \fB)\fR جفت می‌شود\. . .P کلید \fB^G\fR دارای یک تجزیه‌کننده داخلی برای مدیریت تطابق برچسب‌های آغاز/پایان در XML است\. . .P \fI\fR ..SH "ناحیه‌ها (Regions)" اگر می‌خواهید بخش خاصی از متن را جابه‌جا، کپی، ذخیره یا حذف کنید، می‌توانید این کار را با بلوک‌های مشخص‌شده (هایلایت‌شده) انجام دهید\. ابتدا مکان‌نما را به ابتدای بخشی از متن که می‌خواهید روی آن کار کنید برده و \fB^K B\fR را فشار دهید\. سپس مکان‌نما را به نویسهٔ بلافاصله پس از انتهای متنی که می‌خواهید تغییر کند ببرید و \fB^K K\fR را فشار دهید\. متن بین \fB^K B\fR و \fB^K K\fR باید مشخص (هایلایت) شود\. اکنون می‌توانید مکان‌نما را به جای دیگری در سند خود ببرید و برای انتقال متن مشخص‌شده به آنجا، \fB^K M\fR را فشار دهید\. . .br می‌توانید با فشردن \fB^K C\fR یک رونوشت از متن مشخص‌شده تهیه کرده و آن را در محل قرارگیری مکان‌نما درج کنید\. دستور \fB^K Y\fR متن مشخص‌شده را حذف می‌کند\. دستور \fB^K W\fR متن مشخص‌شده را در یک فایل می‌نویسد\. . .P یک دستور بسیار مفید \fB^K /\fR است که یک بلوک متن را از طریق یک دستور UNIX فیلتر می‌کند\. برای نمونه، اگر فهرستی از واژه‌ها را با \fB^K B\fR و \fB^K K\fR انتخاب کرده و سپس \fB^K / sort\fR را تایپ کنید، فهرست واژه‌ها مرتب‌سازی خواهد شد\. دستور مفید دیگر UNIX برای \fB^K /\fR، دستور \fBtr\fR است\. اگر \fB^K / tr a\-z A\-Z\fR را تایپ کنید، تمام حروف موجود در بلوک مشخص‌شده به حروف بزرگ تبدیل خواهند شد\. . .SS "چگونه انتخاب یک ناحیهٔ مشخص‌شده را لغو کنیم؟" پس از پایان کار با عملیات‌های یک ناحیه، اگر وجود هایلایت برایتان مهم نیست می‌توانید آن را روشن رها کنید (اما مواظب باشید تصادفاً \fB^K Y\fR را نزنید)\. با این حال اگر این موضوع واقعاً شما را آزار می‌دهد، کافی است \fB^K B ^K K\fR را بزنید تا مشخص‌سازی خاموش شود\. . .P از نسخهٔ JOE 4\.2 به بعد، می‌توانید برای لغو انتخاب ناحیه، \fB^C\fR را بزنید\. . .SS "روش‌های جدید برای انتخاب ناحیه‌ها" روش سنتی این است که در ابتدا \fB^K B\fR و در انتها \fB^K K\fR را بزنید\. این کلیدها نشانگرهایی به نام‌های markb و markk را تنظیم می‌کنند\. پس از تنظیم آن‌ها، می‌توانید با \fBEsc B\fR به markb و با \fBEsc K\fR به markk پرش کنید\. . .P روش جدید: کلیدهای Ctrl\-\fBRight Arrow\fR را برای شروع انتخاب به سمت راست بزنید\. با هر بار فشردن Ctrl\-\fBRight Arrow\fR، بلوک یک نویسه بیشتر به سمت راست گسترش می‌یابد\. این کار از یک ماکروی ساده استفاده می‌کند: "begin_marking,rtarw,toggle_marking"\. . .P متأسفانه روش استانداردی برای دریافت توالی کلیدی که شبیه‌ساز ترمینال هنگام فشردن Ctrl\-\fBRight Arrow\fR ارسال می‌کند وجود ندارد\. در عوض باید خودتان این توالی را مشخص کرده و آن را مستقیماً در فایل joerc وارد کنید\. مثال‌هایی برای Xterm و gnome\-terminal ارائه شده است\. در JOE، کلیدهای \fB^Q\fR Ctrl\-\fBRight Arrow\fR را بزنید تا توالی روی صفحهٔ نمایش شما نشان داده شود\. توجه داشته باشید که Putty از \fBEsc Esc [ C\fR استفاده می‌کند که با \fB^Q Right Arrow\fR ظاهر نخواهد شد (همچنین \fBEsc Esc\fR دستور تنظیم نشانک است، بنابراین برای انجام این کار در Putty باید انتساب کلید آن را لغو کنید)\. . .P همچنین اگر توالی این کلیدها مشخص باشد، می‌توانید کلید Ctrl\-\fBDelete\fR را برای برش (Cut) و Ctrl\-\fBInsert\fR را برای چسباندن (Paste) بزنید\. . .P در صورت فعال بودن پشتیبانی از ماوس در JOE، از ماوس نیز می‌توان برای انتخاب متن استفاده کرد\. . .SH "تورفتگی بلوک‌های برنامه (Indenting program blocks)" حالت تورفتگی خودکار با دستور \fB^T I\fR تغییر وضعیت می‌دهد\. فایل \fBjoerc\fR معمولاً به گونه‌ای تنظیم شده است که برای فایل‌هایی با نام‌های منتهی به \.p، \.c یا \.h، حالت تورفتگی خودکار فعال باشد\. هنگامی که حالت تورفتگی خودکار فعال باشد و کلید \fBEnter\fR را بزنید، مکان‌نما در همان ستونی قرار می‌گیرد که نخستین نویسهٔ غیرفاصله‌ای در خط اصلی قرار داشت\. . .P می‌توانید از دستورهای \fB^K ,\fR و \fB^K \.\fR برای شیفت دادن یک بلوک متن به چپ یا راست استفاده کنید\. اگر هنگام اجرای این دستورها هیچ هایلایتی تنظیم نشده باشد، بلوک برنامه (همان‌طور که با تورفتگی مشخص شده است) که مکان‌نما در آن قرار دارد انتخاب می‌شود و با دستورهای بعدی \fB^K ,\fR و \fB^K \.\fR جابه‌جا خواهد شد\. . .P تعداد ستون‌هایی که این دستورها شیفت می‌دهند و نویسهٔ مورد استفاده برای شیفت دادن را می‌توان از طریق گزینه‌های istep و indentc تنظیم کرد\. این گزینه‌ها در منوی \fB^T\fR در دسترس هستند\. همچنین، از \fB^T =\fR می‌توان برای انتخاب سریع از میان چند مقدار متداول برای گام و نویسهٔ تورفتگی استفاده کرد\. . .P ویرایشگر JOE چندین گزینهٔ اضافی مربوط به ایجاد تورفتگی در برنامه‌ها دارد: . .IP "\(bu" 4 smartbacks . .br فعال‌سازی پس‌بر (backspace) و تب هوشمند\. هنگامی که این حالت تنظیم باشد، کلیدهای \fBBackspace\fR و \fBTab\fR بر اساس مقادیر گزینه‌های istep و indentc، تورفتگی را اعمال یا حذف می‌کنند\. . .br . .IP "\(bu" 4 smarthome . .br کلیدهای \fBHome\fR و \fB^A\fR ابتدا مکان‌نما را به ابتدای خط می‌برند، سپس اگر دوباره فشرده شوند، به نخستین نویسهٔ غیرخالی منتقل می‌کنند\. . .br . .IP "\(bu" 4 indentfirst . .br کلید خانگی هوشمند (Smart home) به‌جای اینکه ابتدا به ابتدای خط برود، نخست به اولین نویسهٔ غیرخالی می‌رود\. . .br . .IP "\(bu" 4 purify . .br اصلاح تورفتگی در صورت نیاز، پیش از شیفت دادن یا پس‌بر هوشمند\. برای نمونه، اگر در تورفتگی از ترکیبی از تب‌ها و فاصله‌ها استفاده شده باشد و indentc روی فاصله تنظیم شده باشد، پیش از عملیات شیفت دادن، تمام تورفتگی به فاصله تبدیل خواهد شد\. . .br . .IP "\(bu" 4 guess_indent . .br هنگامی که این گزینه فعال باشد، JOE تلاش می‌کند نویسه و گام تورفتگی را بر اساس محتویات فایل حدس بزند\. الگوریتم بدین صورت است که بزرگ‌ترین مقسوم‌علیه مشترک سه تورفتگی رایج‌تر در فایل را پیدا می‌کند\. . .br . .IP "" 0 . .SH "حالت مستطیلی (Rectangle mode)" کلیدهای \fB^T X\fR را بزنید تا \fB^K B\fR و \fB^K K\fR به‌جای بلوک‌های جریانی متنی، بلوک‌های مستطیلی را انتخاب کنند\. این حالت با عنوان حالت ستونی (columnar mode) نیز شناخته می‌شود\. این حالت برای جابه‌جایی، کپی، حذف یا ذخیرهٔ ستون‌های متن مفید است\. همچنین می‌توانید ستون‌های متن را با دستور \fB^K /\fR فیلتر کنید \- برای نمونه اگر بخواهید یک ستون را مرتب کنید\. دستور درج فایل، یعنی \fB^K R\fR نیز تحت تأثیر این حالت قرار می‌گیرد\. . .P هنگامی که حالت مستطیلی انتخاب می‌شود، حالت رونویسی (overtype mode) نیز مفید است (\fB^T T\fR)\. با انتخاب حالت رونویسی، مستطیل‌ها به‌جای درج شدن پیش از متن موجود، جایگزین آن می‌شوند\. همچنین دستور حذف بلوک (\fB^K Y\fR) به‌جای حذف کردن مستطیل انتخاب‌شده، آن را با \fBSpaces\fR و \fBTabs\fR خالی (پاک) می‌کند\. حالت رونویسی به‌ویژه برای دستور فیلتر کردن بلوک (\fB^K /\fR) بسیار سودمند است، زیرا عرض اولیهٔ ستون انتخاب‌شده را حفظ می‌کند\. . .SH "حالت تصویر (Picture mode)" از \fB^T P\fR برای ورود به حالت تصویر یا خروج از آن استفاده کنید\. حالت تصویر در ترسیم اشکال ASCII کمک می‌کند\. . .P حالت تصویر نحوهٔ مدیریت مواردی را توسط JOE کنترل می‌کند که در آن مکان‌نما فراتر از انتهای خطوط قرار دارد\. این وضعیت زمانی رخ می‌دهد که از کلیدهای جهت‌نمای بالا یا پایین برای انتقال مکان‌نما از انتهای یک خط بلند به یک خط کوتاه استفاده می‌کنید\. . .P اگر در این حالت تلاش کنید نویسه‌ای تایپ کنید: . .P اگر حالت تصویر خاموش باشد، مکان‌نما به انتهای خط می‌پرد و نویسه را در آنجا درج می‌کند\. . .P اگر حالت تصویر روشن باشد، خط با نویسه‌های فاصله پر می‌شود تا نویسه بتواند در موقعیت مکان‌نما درج شود\. . .SH "پنجره‌ها (Windows)" شما می‌توانید بیش از یک فایل را به‌طور هم‌زمان ویرایش کنید یا دو یا چند بخش مختلف از یک فایل یکسان را ویرایش نمایید\. برای این کار، \fB^K O\fR را بزنید تا صفحه به دو پنجره تقسیم شود\. از \fB^K P\fR یا \fB^K N\fR برای انتقال مکان‌نما به پنجرهٔ بالایی یا پنجرهٔ پایینی استفاده کنید\. از \fB^K E\fR برای ویرایش یک فایل جدید در یکی از پنجره‌ها بهره بگیرید\. هنگامی که فایل را با \fB^K X\fR ذخیره کنید یا با \fB^C\fR آن را لغو نمایید، پنجره بسته خواهد شد\. اگر فایلی را که در دو پنجره باز است لغو کنید، یکی از پنجره‌ها بسته می‌شود نه خود فایل\. . .P می‌توانید \fB^K O\fR را درون یک پنجره بزنید تا پنجره‌های بیشتری ایجاد شوند\. اگر پنجره‌های زیادی روی صفحه دارید، اما نمی‌خواهید آن‌ها را ببندید، می‌توانید \fB^K I\fR را بزنید\. این کار فقط پنجره‌ای را که مکان‌نما در آن قرار دارد نمایش می‌دهد؛ یا اگر در ابتدا فقط یک پنجره روی صفحه بود، تلاش می‌کند تا تمام پنجره‌های پنهان‌شده را در صفحه جا دهد\. اگر تعداد پنجره‌ها بیش از گنجایش صفحه باشد، می‌توانید روی پایین‌ترین پنجره \fB^K N\fR یا روی بالاترین پنجره \fB^K P\fR را بزنید تا به آن‌ها دسترسی پیدا کنید\. . .P اگر در خط فرمان بیش از یک نام فایل به JOE داده باشید، هر فایل در پنجرهٔ متفاوتی قرار خواهد گرفت\. . .P می‌توانید ارتفاع پنجره‌ها را با دستورهای \fB^K G\fR و \fB^K T\fR تغییر دهید\. ..SS "مدل سامانه‌ی پنجره‌بندی (Windowing system model)" ویرایشگر JOE مدل نامعمولی برای سامانه‌ی پنجره‌بندی خود دارد\. اساساً شما حلقه‌ای از پنجره‌ها در اختیار دارید، اما ممکن است تنها بخشی از این حلقه روی صفحه جا شود\. پنجره‌هایی که روی صفحه نیستند همچنان وجود دارند، فقط به بیرون پیمایش شده‌اند\. هنگامی که در پایین‌ترین پنجره‌ی صفحه کلیدهای \fB^K N\fR را فشار می‌دهید، پنجره‌های بیشتری را از حلقه به روی صفحه می‌آورد و احتمالاً باعث می‌شود پنجره‌ی بالایی از دید خارج شود\. . .P ویرایشگر JOE بومی تلاش می‌کند هر بافر بارگذاری‌شده را در یک پنجره نگه دارد تا کاربران بتوانند با پیمایش در میان پنجره‌ها، همه‌ی بافرها را پیدا کنند\. دستور \fBexplode\fR (\fB^K I\fR) یا تمام پنجره‌ها را به اندازه‌ی کل صفحه گسترش می‌دهد تا تنها یک پنجره در صفحه جا شود، یا همه‌ی آن‌ها را تا جای ممکن کوچک می‌کند تا تعداد زیادی پنجره در صفحه جای گیرند\. . .P از سوی دیگر، JOE از بافرهای «یتیم» (orphan) پشتیبانی می‌کند \- فایل‌هایی که در ویرایشگر بارگذاری شده‌اند، اما در هیچ پنجره‌ای قرار ندارند\. \fB^C\fR معمولاً یک پنجره را می‌بندد و بافری را که درون آن بود دور می‌اندازد\. اگر روی آخرین پنجره‌ی باقی‌مانده \fB^C\fR را بزنید، معمولاً از ویرایشگر خارج می‌شود\. با این حال، اگر بافرهای یتیم وجود داشته باشند، \fB^C\fR در عوض آن‌ها را در این پنجره‌ی نهایی بارگذاری می‌کند تا به شما فرصت دهد صریحاً آن‌ها را دور بیندازید\. اگر گزینه‌ی \fBorphan\fR در خط فرمان داده شود، مانند \fBjoe \-orphan *\.c\fR، آن‌گاه JOE تنها نخستین فایل را در یک پنجره بارگذاری کرده و تمام فایل‌های دیگر را به عنوان بافر یتیم رها می‌کند\. . .P همچنین \fBorphan\fR کنترل می‌کند که آیا دستور ویرایش \fB^K E\fR یک پنجره‌ی جدید برای فایل تازه بارگذاری‌شده ایجاد کند، یا پنجره‌ی فعلی را دوباره استفاده کند (و بافر قبلی آن را یتیم سازد)\. . .P دستور \fBbufed\fR نام بافری را برای جابه‌جایی به درون یک پنجره درخواست می‌کند\. فهرست تکمیل خودکار آن تمام بافرها، از جمله بافرهای یتیم و بافرهایی که در پنجره‌های دیگر ظاهر شده‌اند را نشان می‌دهد\. کلیدهای \fBEsc V\fR و \fBEsc U\fR (دستورهای \fBnbuf\fR و \fBpbuf\fR) به شما اجازه می‌دهند درون یک پنجره‌ی واحد در میان تمام بافرها به صورت چرخشی پیمایش کنید\. . .P پنجره‌ها پشته‌ای از بافرهای مقیم را نگهداری می‌کنند تا از قابلیت پنجره‌ی پوسته‌ی (shell) بالاپر پشتیبانی شود\. هنگامی که یک پنجره‌ی بالاپر بسته می‌شود، بافر قبلی به پنجره بازگردانده می‌شود\. . .SH "بافرهای موقت (Scratch buffers)" بافرهای چرک‌نویس (scratch) بافرهایی هستند که JOE تلاشی برای نگهداری یا حفظ آن‌ها نمی‌کند\. ویرایشگر JOE برای ذخیره‌ی بافرهای چرک‌نویس تغییریافته سؤالی نمی‌پرسد\. پنجره‌های پوسته‌ی بالاپر، گزارش راه‌اندازی (startup log) و پنجره‌های پیام compile و grep همگی بافرهای چرک‌نویس هستند\. می‌توانید با دستور \fBscratch\fR بافر چرک‌نویس خود را بسازید\. . .P دستورهای زیر بافرهای چرک‌نویس را بارگذاری می‌کنند: . .IP "\(bu" 4 \fBshowlog\fR نمایش گزارش راه‌اندازی . .IP "\(bu" 4 \fBmwind\fR نمایش پنجره‌ی پیام (پیام‌های compile / grep از دستورهای \fBEsc C\fR و \fBEsc G\fR)\. . .IP "" 0 . .SH "ماکروهای صفحه‌کلید (Keyboard macros)" ماکروها به شما اجازه می‌دهند زنجیره‌ای از کلیدهای فشرده‌شده را ضبط کرده و آن‌ها را با فشردن دو کلید بازپخش کنید\. این قابلیت برای خودکارسازی کارهای تکراری مفید است\. برای شروع ضبط ماکرو، \fB^K [\fR را به همراه عددی از 0 تا 9 فشار دهید\. خط وضعیت عبارت (Macro n recording\.\.\.) را نمایش خواهد داد\. اکنون، رشته‌کلیدهایی را که می‌خواهید تکرار شوند تایپ کنید\. دستورهایی که وارد می‌کنید اثر معمول خود را خواهند داشت\. برای متوقف کردن ضبط ماکرو \fB^K ]\fR را بزنید\. برای اجرای یک دور از کلیدهای ضبط‌شده، \fB^K\fR را به همراه شماره‌ای که ماکرو را در آن ضبط کرده‌اید فشار دهید\. . .P برای نمونه، اگر می‌خواهید عبارت «**» را در ابتدای تعدادی از خطوط قرار دهید، می‌توانید تایپ کنید: . .P \fB^K [ 0 ^A **\fR\fIdown arrow\e\fR \fB^K ]\fR . .P که ضبط ماکرو را آغاز می‌کند، مکان‌نما را به ابتدای خط می‌برد، «**» را درج می‌کند، مکان‌نما را یک خط به پایین می‌برد و سپس ضبط را پایان می‌دهد\. از آنجا که کلیدهای لازم برای قرار دادن مکان‌نما در خط بعدی را در ماکرو گنجاندیم، می‌توانیم بارها و بارها از این ماکرو بدون نیاز به حرکت دستی مکان‌نما استفاده کنیم؛ نکته‌ای که همواره هنگام ضبط ماکرو باید به یاد داشته باشید\. . .SS "زیرروال‌های ماکروی صفحه‌کلید (Keyboard macro subroutines)" اگر متوجه شدید ماکرویی که در حال ضبط آن هستید خود دارای مجموعه‌ای تکراری از کلیدها است، تا زمانی که از شماره‌ی ماکروی متفاوتی استفاده کنید، می‌توانید یک ماکرو درون ماکروی دیگر ضبط نمایید\. همچنین می‌توانید ماکروهایی را که پیش‌تر ضبط شده‌اند از درون ماکروهای جدید اجرا کنید\. . .SS "تعلیق برای پرس‌وجو (Query suspend)" اگر ماکروی شما شامل درخواستی برای ورودی کاربر است، و می‌خواهید کاربر هر بار با اجرای ماکرو آن ورودی را وارد کند، در نقطه‌ای از ضبط ماکرو که نیاز به اقدام کاربر است کلیدهای \fB^K ?\fR را فشار دهید\. ورودی صفحه‌کلید در این نقطه ضبط نخواهد شد\. هنگامی که کاربر ورودی اعلان را تکمیل کند، ضبط ماکرو ادامه می‌یابد\. . .P هنگام اجرای ماکرو، پخش‌کننده‌ی ماکرو در نقطه‌ای که \fB^K ?\fR وارد شده بود مکث می‌کند تا اجازه‌ی ورود اطلاعات توسط کاربر را بدهد\. هنگامی که کاربر اعلان را کامل کرد، پخش‌کننده باقی‌مانده‌ی ماکرو را ادامه می‌دهد\. . .SS "تکرار (Repeat)" می‌توانید از دستور تکرار، \fB^K \e\fR، برای تکرار یک ماکرو یا هر دستور ویرایشی دیگر یا حتی یک نویسه‌ی معمولی، به تعداد دفعات مشخص استفاده کنید\. \fB^K \e\fR را بزنید، تعداد دفعاتی که می‌خواهید دستور تکرار شود را وارد کرده و \fBEnter\fR را بفشارید\. دستور ویرایشی بعدی که وارد می‌کنید به همان تعداد بار تکرار خواهد شد\. برای نمونه، جهت حذف ۲۰ خط بعدی متن، تایپ کنید: . .P \fB^K \e 20\fR\fIreturn\fR\fB^Y\fR . .SH "ماکروها و دستورها (Macros and commands)" ماکرو فهرستی از دستورها است که با ویرگول از هم جدا شده‌اند\. هنگامی که ماکرو اجرا می‌شود، هر دستور تا رسیدن به انتهای فهرست یا تا زمانی که یکی از دستورها شکست بخورد (مقدار بازگشتی غیرصفر از دستور)، اجرا می‌شود\. اگر بوق‌ها را فعال کرده باشید (\fB^T B\fR)، دستورهای ناموفق صدای بوق تولید می‌کنند\. . .P کلیدهای \fBEsc D\fR را بزنید تا مجموعه‌ی فعلی ماکروهای صفحه‌کلید به عنوان متن در بافر جاری درج شوند\. برای نمونه، ماکروی درج «**» که در بالا ذکر شد، به این شکل است: . .IP "" 4 . .nf home,"**",dnarw ^K 0 Macro 0 . .fi . .IP "" 0 . .P می‌توانید این را در فایل \.joerc خود درج کرده و توالی کلید (یعنی \fBK 0\fR) را به موردی پایدارتر تغییر دهید\. . .SS "تعریف توسط کاربر (Define your own)" می‌توانید ماکروها را به توالی‌های کلید متصل کنید یا ماکروهای نام‌گذاری‌شده‌ی خود را در فایل joerc تعریف نمایید\. برای نمونه، دستور زیر یک ماکرو به نام \fBfoo\fR تعریف می‌کند: . .IP "" 4 . .nf :def foo eof,bol . .fi . .IP "" 0 . .P دستور \fBfoo\fR مکان‌نما را در ابتدای آخرین خط فایل قرار می‌دهد\. \fBeof\fR به انتهای فایل می‌پرد\. \fBbol\fR به ابتدای یک خط می‌پرد\. زمانی که یک ماکرو به این شیوه نام‌گذاری شد، در فهرست تکمیل خودکار اعلان دستور \fBEsc X\fR نشان داده خواهد شد\. . .SS "خط فرمان (Command prompt)" می‌توانید یک ماکرو را با تایپ مستقیم آن در خط فرمان اجرا کنید\. کلیدهای \fBEsc X\fR را فشار دهید تا خط فرمان نمایان شود\. در این اعلان، کلید \fBTab\fR را برای دیدن فهرست تکمیل خودکار تمامی دستورهای موجود فشار دهید\. . .P در اینجا \fIفهرست کاملی از دستورها\fR آورده شده است\. . .SS "تغییردهنده‌ی عدم توقف ماکرو (Macro don\'t stop modifier)" گاهی اوقات انتظار دارید دستورها گاهی شکست بخورند، اما می‌خواهید باقی دستورهای فهرست در هر صورت اجرا شوند\. برای علامت‌گذاری دستوری که مجاز به شکست است، پسوند \'!\' را به آن اضافه کنید\. برای نمونه، در اینجا ماکرویی آورده شده است که در پنجره‌ی بالایی صفحه را به پایین پیمایش می‌کند: . .IP "" 4 . .nf prevw,pgdn!,nextw . .fi . .IP "" 0 . .P اگر prevw شکست بخورد، ماکرو طبق معمول متوقف می‌شود\. اما حتی اگر pgdn شکست بخورد (برای نمونه اگر از پیش در انتهای بافر باشید)، nextw اجرا خواهد شد تا مکان‌نما به پنجره‌ی اصلی بازگردد\. . .SS "تغییردهنده‌های آرگومان تکرار ماکرو (Macro repeat argument modifiers)" آرگومان‌های تکرار را می‌توان با \fB^K \e\fR مشخص کرد\. هنگامی که یک دستور با آرگومان تکرار اجرا می‌شود، به تعداد دفعات مشخص‌شده تکرار خواهد شد\. اگر آرگومان تکرار منفی باشد، دستور معکوس آن (در صورت وجود) به جای آن اجرا می‌شود\. برای نمونه، اگر «rtarw» را ۳\- بار تکرار کنید، «ltarw» ۳ بار تکرار خواهد شد\. اگر یک آرگومان منفی برای دستوری داده شود که معکوسی ندارد، آرگومان تکرار نادیده گرفته می‌شود\. . .P به‌طور معمول، اگر یک آرگومان تکرار برای یک ماکرو مشخص شود، ماکرو صرفاً به تعداد دفعات مشخص‌شده تکرار می‌شود\. اگر یک آرگومان منفی داده شود، آرگومان نادیده گرفته می‌شود\. . .P گاهی می‌خواهید آرگومان‌های منفی را برای ماکروها مجاز کنید و رفتار آن‌ها تغییر یابد\. برای این کار، به انتهای هر دستوری در ماکرو که باید با آرگومان منفی به معکوس خود تبدیل شود، پسوند \'\-\' اضافه کنید\. برای نمونه، ماکروی پایین بردن صفحه در پنجره‌ی دیگر این‌گونه است: . .IP "" 4 . .nf prevw,pgdn\-!,nextw . .fi . .IP "" 0 . .P حال اگر این ماکرو را با آرگومان ۲\- اجرا کنید، دو بار تکرار خواهد شد، اما به جای pgdn دستور pgup اجرا می‌شود\. (توجه داشته باشید که می‌توان چندین تغییردهنده‌ی پسوندی را پس از هر دستور قرار داد)\. . .P گاهی وقتی یک آرگومان تکرار به ماکرو داده می‌شود، می‌خواهید تنها یکی از دستورهای فهرست تکرار شود، نه کل ماکرو\. این کار را می‌توان به صورت زیر مشخص کرد: . .IP "" 4 . .nf prevw,pgdn#!,nextw . .fi . .IP "" 0 . .P اگر این دستور با آرگومان ۲ اجرا شود، prevw یک بار اجرا می‌شود، pgdn دو بار اجرا می‌شود، و nextw یک بار اجرا خواهد شد\. . .P در نهایت، معناشناسی‌های حتی پیچیده‌تر را می‌توان با دستور «if» بیان کرد: . .IP "" 4 . .nf if~,"arg<0",then, ltarw, else, rtarw, endif . .fi . .IP "" 0 . .P هنگامی که ماکرو اجرا می‌شود، متغیر ریاضی «arg» برابر با آرگومان تکرار داده‌شده قرار می‌گیرد\. متغیر «argset» در صورتی که کاربر آرگومانی تعیین کرده باشد، حتی اگر ۱ باشد، روی true تنظیم می‌شود\. اگر هیچ آرگومانی داده نشده باشد، مقدار argset برابر false خواهد بود\. . .P اگر به انتهای هر دستوری در فهرست علامت ~ اضافه شود (مانند if در بالا)، ماکرو حتی در صورت وجود آرگومان تکرار نخواهد شد\. با این حال، مقدار \'arg\' همچنان برابر با تعداد تکرار مشخص‌شده قرار می‌گیرد\. ..SS "تعامل \'psh\'/\'query\'" دستور \'psh\' موقعیت‌های \fB^K B\fR و \fB^K K\fR را در یک پشته ذخیره می‌کند\. با اتمام ماکرو، (یا هنگامی که دستور \'pop\' فراخوانی شود) موقعیت‌ها بازگردانده می‌شوند\. . .P دستور \'query\' اجرای ماکرو را تا زمان کامل شدن کادر محاوره‌ای جاری معلق می‌کند\. این دستور همچنین عملیات خودکار \'pop\' را که در پایان یک ماکرو رخ می‌دهد به تعویق می‌اندازد\- بنابراین اگر ماکرو با یک کادر محاوره به پایان برسد، معمولاً می‌خواهید \'query\' را فراخوانی کنید تا از بازیابی زودهنگام موقعیت‌های \fB^K B\fR و \fB^K K\fR جلوگیری شود\. . .SH "جستجوی برچسب‌ها (Tags search)" اگر در حال ویرایش یک برنامهٔ بزرگ C با تعداد زیادی فایل منبع هستید، می‌توانید از برنامهٔ \fBctags\fR برای ایجاد یک فایل \fBtags\fR استفاده کنید\. این فایل شامل فهرستی از نمادهای برنامه و فایل‌ها و موقعیت‌هایی است که نمادها در آن تعریف شده‌اند\. . .P ابتدا فایل tags را با برنامهٔ «ctags» ایجاد کنید\. برای مثال: . .IP "" 4 . .nf ctags *\.c *\.h . .fi . .IP "" 0 . .P این کار فایلی به نام «tags» در دایرکتوری جاری ایجاد خواهد کرد\. . .P برنامهٔ JOE به دنبال فایل «tags» در دایرکتوری جاری می‌گردد\. اگر چنین فایلی وجود نداشته باشد، تلاش می‌کند فایلی را باز کند که توسط متغیر محیطی TAGS مشخص شده است\. . .P مسیرها در فایل tags همیشه نسبت به مکان خود فایل tags سنجیده می‌شوند\. . .P فایل tags شامل فهرستی از مکان‌های تعریف شناسه در یکی از این قالب‌ها است: . .IP "" 4 . .nf identifier filename /search\-expression/[;comments] identifier filename ?search\-expression?[;comments] identifier filename line\-number[;comments] . .fi . .IP "" 0 . .P برخی نسخه‌های ctags نام‌های کلاس را در شناسه‌ها می‌گنجانند: . .IP "" 4 . .nf class::member . .fi . .IP "" 0 . .P در این حالت، JOE با هر یک از این رشته‌ها مطابقت خواهد داد: . .IP "" 4 . .nf member ::member class::member . .fi . .IP "" 0 . .P برخی نسخه‌های ctags نام فایل را در شناسه قرار می‌دهند: . .IP "" 4 . .nf filename:identifier . .fi . .IP "" 0 . .P در این حالت JOE تنها زمانی شناسه را پیدا می‌کند که نام بافر با نام فایل تطابق داشته باشد\. . .P عبارت search\-expression یک عبارت باقاعدهٔ vi است، اما JOE تنها از نویسه‌های ویژهٔ زیر پشتیبانی می‌کند: . .IP "" 4 . .nf ^ در ابتدا یعنی عبارت از ابتدای سطر آغاز می‌شود $ در انتها یعنی عبارت در انتهای سطر پایان می‌پذیرد \ex درج علامت گریز برای x (نادیده‌گرفتن معنای ویژه /، ?، ^ یا $) . .fi . .IP "" 0 . .P کلیدهای \fB^K ;\fR را بزنید تا اعلان جستجوی برچسب‌ها نمایان شود\. اگر مکان‌نما روی یک شناسه قرار داشته باشد، اعلان از پیش با آن شناسه پر می‌شود\. قابلیت تکمیل با Tab در این اعلان کار می‌کند (از فایل tags برای یافتن موارد تکمیل استفاده می‌کند)\. . .P هنگامی که \fBEnter\fR را می‌زنید، جستجوی برچسب‌ها آغاز می‌شود: . .P اگر یک و تنها یک تطابق وجود داشته باشد، JOE مستقیماً به محل تعریف پرش می‌کند\. . .P اگر چندین تطابق وجود داشته باشد، رفتار برنامه توسط گزینهٔ notagsmenu کنترل می‌شود\. اگر notagsmenu فعال باشد، JOE به اولین تعریف پرش می‌کند\. چنانچه پیش از فشردن هر کلید دیگری دوباره \fB^K ;\fR را بزنید، JOE به تعریف بعدی پرش می‌کند و به همین ترتیب ادامه می‌یابد\. دستور «tagjump» نیز این عملکرد را انجام می‌دهد\. . .P اگر notagsmenu غیرفعال باشد، JOE منویی از تمام تطابق‌ها را نمایش می‌دهد\. شما مورد دلخواه خود را انتخاب می‌کنید و JOE به آن می‌پرد\. اگر پیش از فشردن کلید دیگری دوباره \fB^K ;\fR را بزنید، همان منو دوباره نمایان می‌شود در حالی که مکان‌نما در موقعیت اصلی خود باقی مانده است\. . .P می‌توانید \fB^K \-\fR را بزنید تا مکان‌نما به مکان اصلی پیش از جستجوی برچسب‌ها بازگردد (اغلب \fB^C\fR نیز کارساز خواهد بود)\. . .P از آنجا که \fB^K ;\fR فایل تعریف را در پنجرهٔ جاری بارگذاری می‌کند، احتمالاً ابتدا می‌خواهید پنجره را با \fB^K O\fR تقسیم کنید تا هم فایل اصلی و هم فایل تعریف بارگذاری شده باشند\. ..SH "ماشین‌حساب (Calculator)" ویرایشگر JOE دارای یک ماشین‌حساب داخلی است که می‌توان آن را با \fBEsc M\fR فراخوانی کرد\. . .SS "توابع ریاضی (Math functions)" sin, cos, tan, exp, sqrt, cbrt, ln, log, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, int, floor, ceil, abs, erf, erfc, j0, j1, y0, y1 . .SS "متغیرها (Variables)" . .IP "\(bu" 4 e . .br تنظیم‌شده بر روی \'e\' . .br . .IP "\(bu" 4 pi . .br تنظیم‌شده بر روی \'pi\' . .br . .IP "\(bu" 4 top . .br تنظیم‌شده بر روی شماره خط بالای پنجره . .br . .IP "\(bu" 4 lines . .br تنظیم‌شده بر روی تعداد خطوط فایل . .br . .IP "\(bu" 4 line . .br تنظیم‌شده بر روی شماره خط فعلی . .br . .IP "\(bu" 4 col . .br تنظیم‌شده بر روی شماره ستون فعلی . .br . .IP "\(bu" 4 byte . .br تنظیم‌شده بر روی شماره بایت فعلی . .br . .IP "\(bu" 4 size . .br تنظیم‌شده بر روی اندازه بافر . .br . .IP "\(bu" 4 height . .br تنظیم‌شده بر روی ارتفاع پنجره . .br . .IP "\(bu" 4 width . .br تنظیم‌شده بر روی عرض پنجره . .br . .IP "\(bu" 4 char . .br تنظیم‌شده بر روی مقدار ASCII نویسه زیر مکان‌نما . .br . .IP "\(bu" 4 markv . .br درست (True) در صورتی که یک بلوک معتبر تعیین شده باشد (^KB \.\.\. ^KK) . .br . .IP "\(bu" 4 rdonly . .br درست (True) در صورتی که فایل فقط‌خواندنی باشد . .br . .IP "\(bu" 4 arg . .br آرگومان تکرار فعلی . .br . .IP "\(bu" 4 argset . .br درست (True) در صورتی که آرگومان تکرار مشخص شده باشد . .br . .IP "\(bu" 4 is_shell . .br درست (True) در صورتی که در یک پنجره پوسته فعال اجرا شده باشد . .br . .IP "\(bu" 4 no_windows . .br تعداد پنجره‌های بافر روی صفحه نمایش . .br . .IP "\(bu" 4 ans . .br نتیجه عبارت قبلی . .br . .IP "" 0 ..SS "دستورها (Commands)" . .IP "\(bu" 4 hex . .br حالت نمایش هگزادسیمال (Hex) . .br . .IP "\(bu" 4 dec . .br حالت نمایش ده‌دهی (Decimal) . .br . .IP "\(bu" 4 ins . .br درج \'ans\' در بافر . .br . .IP "\(bu" 4 sum . .br مجموع اعداد در بلوک . .br . .IP "\(bu" 4 cnt . .br شمارش اعداد در بلوک . .br . .IP "\(bu" 4 avg . .br میانگین مقادیر اعداد در بلوک . .br . .IP "\(bu" 4 dev . .br انحراف معیار اعداد در بلوک . .br . .IP "\(bu" 4 eval . .br ارزیابی عبارت‌های ریاضی در بلوک (یا کل فایل اگر بلوکی تعیین نشده باشد)\. . .br . .IP "\(bu" 4 joe(\.\.\.) . .br اجرای یک ماکروی JOE (آرگومان در همان قالب ماکروهای فایل joerc است)\. مقدار بازگشتی ماکروی JOE برگردانده می‌شود (برای موفقیت ماکرو، مقدار true (غیرصفر) بازگردانده می‌شود)\. . .br . .IP "" 0 . .P برای مثال: . .IP "" 4 . .nf joe(sys,"[ 1 == 1 ]",rtn) . .fi . .IP "" 0 . .P عبارت ([ 1 == 1 ]) یک دستور شل است\. "[" مترادفی برای دستور یونیکسی "test" است\. . .P مقدار true را برمی‌گرداند\. . .P به یاد داشته باشید: آرگومان دستور ماکروی "if" در JOE یک عبارت ریاضی است\. بنابراین برای مثال، ماکروی: . .IP "" 4 . .nf if,"joe(sys,\e"[ 1 == 1 ]\e",rtn)",then,"TRUE",endif . .fi . .IP "" 0 . .P عبارت TRUE را درون بافر تایپ می‌کند\. ..SS "عملگرها (Operators):" . .IP "\(bu" 4 !x . .br نقیض منطقی x\. . .br . .IP "\(bu" 4 x . .br رساندن x به توان y\. . .br . .IP "\(bu" 4 a*b . .br ضرب\. . .br . .IP "\(bu" 4 a/b . .br تقسیم\. . .br . .IP "\(bu" 4 a%b . .br باقی‌مانده\. . .br . .IP "\(bu" 4 a+b . .br جمع\. . .br . .IP "\(bu" 4 a\-b . .br تفریق\. . .br . .IP "\(bu" 4 ab . .br درست است اگر a بزرگتر از b باشد\. . .br . .IP "\(bu" 4 a>=b . .br درست است اگر a بزرگتر یا مساوی b باشد\. . .br . .IP "\(bu" 4 a==b . .br درست است اگر a برابر با b باشد\. . .br . .IP "\(bu" 4 a!=b . .br درست است اگر a برابر با b نباشد\. . .br . .IP "\(bu" 4 a&&b . .br درست است اگر هم a و هم b درست باشند\. . .br . .IP "\(bu" 4 a||b . .br درست است اگر a یا b درست باشد\. . .br . .IP "\(bu" 4 a?b:c . .br اگر a درست باشد b بازگردانده می‌شود، در غیر این صورت c\. . .br . .IP "\(bu" 4 a=b . .br انتساب b به a\. . .br . .IP "\(bu" 4 a:b . .br اجرای a، سپس اجرای b\. . .br . .IP "" 0 . .TP &&، || و ? : از نظر اثرات جانبی مانند C و sh عمل می‌کنند: اگر . .TP سمت چپ && نادرست باشد، سمت راست ارزیابی نمی‌شود\. جداکننده عبارت است\. ..SH "پنجره‌های پوسته (Shell windows)" برای اجرای یک پوستهٔ خط فرمان در یکی از پنجره‌های JOE، کلیدهای \fB^K \'\fR را بفشارید\. هنگامی که مکان‌نما در انتهای پنجرهٔ پوسته قرار دارد (اگر نیست، از \fB^K V\fR استفاده کنید)، هر آنچه تایپ کنید به‌جای بافر به پوسته ارسال می‌شود\. هرگونه خروجی از پوسته یا از دستورهای اجراشده در پوسته به انتهای پنجرهٔ پوسته افزوده می‌شود (اگر مکان‌نما در انتهای پنجرهٔ پوسته باشد، همراه این خروجی حرکت خواهد کرد)\. این فرمان برای ضبط نتایج دستورهای پوسته مفید است؛ برای نمونه خروجی \fBmake\fR، نتیجهٔ جستجو با \fBgrep\fR در مجموعه‌ای از فایل‌ها برای یافتن یک رشته، یا فهرست دایرکتوری‌ها از نشست‌های \fBFTP\fR\. علاوه بر نویسه‌های قابل تایپ، کلیدهای \fB^C\fR، \fBBackspace\fR، \fBDel\fR، \fBReturn\fR و \fB^D\fR نیز به پوسته ارسال می‌شوند\. برای توقف ضبط خروجی پوسته، دستور \fBexit\fR را در پوسته تایپ کنید\. اگر در پنجرهٔ پوسته هنگامی که مکان‌نما در انتهای پنجره نیست \fB^C\fR را بفشارید، پوسته متوقف (\fBkill\fR) می‌شود\. . .P اگر از Bash استفاده می‌کنید، می‌توانید با فشردن \fB^Q Up Arrow\fR و \fB^Q Down Arrow\fR در بافر تاریخچهٔ Bash پیمایش کنید\. کلیدهای دیگر نیز کار می‌کنند: \fB^Q ^A\fR را برای رفتن به ابتدای سطر یا \fB^Q ^E\fR را برای رفتن به انتهای سطر امتحان کنید\. متأسفانه JOE تنها یک پایانهٔ ساده (dumb terminal) را شبیه‌سازی می‌کند، بنابراین برای هرگونه ویرایش فراتر از فشردن Backspace باید قوهٔ تخیل بالایی به کار ببرید\. . .P به‌طور کلی، هر نویسه‌ای که با \fB^Q\fR نقل (quote) شود به پوسته ارسال می‌شود\. . .P همچنین این کلیدها به پوسته ارسال می‌شوند: \fBTab\fR، \fBBackspace\fR، \fBEnter\fR، \fB^C\fR و \fB^D\fR\. . .P \fI\fR . .SH "پنجره‌های بازشوی پوسته (Pop\-up shell windows)" برای باز کردن و جابه‌جایی میان پنجره‌های پوسته، کلیدهای F1 \- F4 را بفشارید\. . .P پنجره‌های بازشوی پوسته از یک شبیه‌ساز پایانهٔ کامل استفاده می‌کنند تا هنگام تایپ "man ls" قالب‌بندی آن به‌درستی انجام شود (به‌اندازهٔ کافی خوب کار می‌کند تا بتوان از برخی برنامه‌های تعاملی استفاده کرد)\. با این حال، پنجرهٔ پوسته همچنان یک بافر ویرایشی است\. . .P پنجرهٔ قدیمی پوسته (بدون شبیه‌سازی پایانه) همچنان وجود دارد: طبق معمول از \fB^K \'\fR برای فراخوانی آن استفاده کنید\. این ویژگی برای مشاهدهٔ توالی‌های کنترلی صادرشده از یک برنامه مفید است\. . .P در پنجره‌های بازشوی پوسته در مقایسه با پنجرهٔ قدیمی‌تر، کلیدهای بیشتری به برنامهٔ در حال اجرا ارسال می‌شوند\. یک بخش :vtshell در فایل joerc برای کنترل این کلیدها وجود دارد\. به‌ویژه کلیدهای جهت‌نما و Ctrl\-C به برنامه فرستاده می‌شوند\. این بدان معناست که می‌توانید به‌آسانی با کلیدهای جهت‌نما در تاریخچهٔ bash پیمایش کنید یا برنامه‌ها را به روش معمول با Ctrl\-C متوقف سازید\. . .P از سوی دیگر، ارسال Ctrl\-C بدین معناست که روش بستن پنجره کمتر مشهود است\. یک راه این است که مکان‌نما را از نقطهٔ ورود داده‌های پوسته خارج کنید (با Ctrl\-P) و سپس Ctrl\-C را بزنید\. راه دیگر فشردن \fB^K Q\fR است\. در نهایت، می‌توانید دستور \'pop\' را در اعلان خط فرمان تایپ کنید\. . .P اگر لازم است کلیدی را به پوسته بفرستید که JOE معمولاً از آن استفاده می‌کند، آن را نقل (quote) کنید\. برای نمونه، اگر "emacs \-nw" را در پنجرهٔ پوسته اجرا کنید، می‌توانید با فشردن کلیدهای زیر از آن خارج شوید: . .IP "" 4 . .nf ^Q ^X ^C . .fi . .IP "" 0 . .P برای بازگرداندن سریع مکان‌نما به نقطه‌ای که داده‌ها به پوسته وارد می‌شوند، \fB^K V\fR را بفشارید\. . .P هنگامی که یک پنجرهٔ پوسته را باز می‌کنید، یک اسکریپت راه‌اندازی ویژهٔ JOE بارگذاری (source) می‌شود\. این فایل در /etc/joe/shell\.sh (و همچنین /etc/joe/shell\.csh) قرار دارد\. این فایل شامل برخی نام‌های مستعار (alias) است که به شما امکان می‌دهند JOE را با دستورهای ساختگی پوسته کنترل کنید\. تا کنون این دستورها وجود دارند: . .IP "\(bu" 4 clear . .br پاک کردن پنجرهٔ پوسته (حذف محتویات بافر) . .br . .IP "\(bu" 4 joe file . .br ویرایش یک فایل در JOE . .br . .IP "\(bu" 4 math 1+2 . .br محاسبهٔ معادله با استفاده از ماشین‌حساب JOE . .br . .IP "\(bu" 4 cd xyz . .br تغییر دایرکتوری، همگام نگه‌داشتن JOE با آن . .br . .IP "\(bu" 4 markb . .br مشابه ^KB . .br . .IP "\(bu" 4 markk . .br مشابه ^KK . .br . .IP "\(bu" 4 mark command . .br اجرای دستور پوسته، علامت‌گذاری خروجی آن . .br . .IP "\(bu" 4 parse command . .br اجرای دستور پوسته، تجزیهٔ خروجی آن برای یافتن نام فایل‌ها و شمارهٔ سطرها (برای find یا grep) . .br . .IP "\(bu" 4 parser comman . .br اجرای دستور پوسته، تجزیهٔ خروجی آن برای یافتن خطاها (برای gcc) . .br . .IP "\(bu" 4 release . .br رهاسازی خطاهای تجزیه‌شده . .br . .IP "\(bu" 4 pop . .br بستن پنجرهٔ پوسته (مشابه ^K Q) . .br . .IP "" 0 . .P این دستورها با ارسال یک توالی گریز (escape sequence) کار می‌کنند که توسط شبیه‌ساز پایانه شناخته می‌شود: \fBEsc { joe_macro }\fR\. هنگام دریافت این توالی، ماکرو اجرا می‌شود\. برای امنیت، تنها ماکروهای تعریف‌شده در فایل joerc که با "shell_" آغاز می‌شوند را می‌توان از این طریق اجرا کرد\. ..SS "موارد کاربرد" پنجره‌های بازشوی پوسته چندین مورد کاربرد سودمند دارند: . .IP "\(bu" 4 استفاده برای مرور صفحات راهنما (man) . .IP کلید F1 را زده و "man fopen" را تایپ کنید\. هنگام مشاهده راهنما از \'b\' (\'u\') و کلید فاصله برای هدایت \fImore\fR (یا \fIless\fR) استفاده کنید\. می‌توانید راهنما را در یک پنجره روی صفحه باز نگه دارید و هم‌زمان در پنجره‌ای دیگر به ویرایش بپردازید\. . .IP "\(bu" 4 استفاده برای جابه‌جایی میان دایرکتوری‌ها . .IP کلید F1 را فشرده و با استفاده از \fIcd\fR به دایرکتوری مورد نظر بروید\. به محض رسیدن به مسیر مناسب، کلیدهای \fB^K E\fR را بزنید تا فایلی بارگذاری شود (یا درون پوسته "edit file" را تایپ کنید)\. . .IP "\(bu" 4 استفاده در کنار تجزیه‌کننده خطا برای یافتن فایل‌ها . .IP کلید F1 را زده و به یک دایرکتوری بروید\. برای تولید فهرستی از فایل‌ها از grep یا find (یا هر دو) استفاده کنید: . .IP "" 0 . .IP "" 4 . .nf parse grep \-n FIXME *\.c . .fi . .IP "" 0 . .P یا: . .IP "" 4 . .nf markb; find \. | xargs grep \-n FIXME; markk; parse . .fi . .IP "" 0 . .P (توجه داشته باشید که نمی‌توانید این عبارت را به کار ببرید: . .IP "" 4 . .nf parse find \. | xargs grep \-n FIXME . .fi . .IP "" 0 . .P \&\.\.\.مشکل این است که تنها کلمات سمت چپ نماد pipe به‌عنوان آرگومان به دستور parse ارسال می‌شوند)\. . .P حال با استفاده از \fB^P\fR مکان‌نما را روی یکی از خط‌های فهرست قرار دهید\. کلید \fBEsc Space\fR را بزنید تا JOE فایل مربوطه را برای ویرایش باز کرده و به سطر مشخص‌شده بپرد (همچنین می‌توانید از \fBEsc \-\fR و \fBEsc =\fR برای پیمایش گام‌به‌گام در فهرست استفاده کنید)\. . .IP "\(bu" 4 استفاده در کنار جست‌وجو و جایگزینی برای ویرایش چندین فایل . .IP هنگامی که JOE به فهرستی از فایل‌ها (از مراحل بالا) دست یافت، از جست‌وجو و جایگزینی با گزینه \'e\' برای بررسی همه آن‌ها استفاده کنید: . .IP "" 0 . .IP "" 4 . .nf ^K F Find: Options: re Replace: . .fi . .IP "" 0 . .IP "\(bu" 4 ساخت پروژه (Build) . .IP "" 0 . .P خطاهای حاصل از فرآیند ساخت را به‌سادگی با دستور زیر ضبط کنید: . .IP "" 4 . .nf parserr make . .fi . .IP "" 0 . .P برای پیمایش گام‌به‌گام در میان خطاها، کلیدهای \fBEsc =\fR و \fBEsc \-\fR را بفشارید\. . .SS "نحوه کارکرد\.\." . .IP "\(bu" 4 یک حالت جدید به نام "ansi" وجود دارد (\fBEsc X\fR mode ansi)\. هنگامی که این حالت فعال باشد، به‌روزرسان صفحه توالی‌های گریز (escape sequences) موجود در بافر را پنهان می‌کند\. در غیر این صورت، توالی‌های مربوط به خروجی‌های رنگی دستور \'ls\' به‌هم‌ریختگی بزرگی روی صفحه ایجاد می‌کنند\. . .IP "\(bu" 4 یک نحو (syntax) توکار جدید اضافه شده است: "ansi" (\fB^T Y\fR ansi)\. این نحو توالی‌های کنترل رنگ ANSI را تجزیه می‌کند تا متن رنگی نمایش داده شود\. . .IP "\(bu" 4 یک شبیه‌ساز ترمینال برای تفسیر توالی‌های کنترلی دریافت‌شده از برنامه پوسته تعبیه شده است\. این بخش با تغییر محتوای بافر ویرایش، یک ترمینال را شبیه‌سازی می‌کند\. . .IP "\(bu" 4 هنگامی که اندازه پنجره ویرایش تغییر می‌کند، این موضوع با ارسال فراخوان ioctl از نوع TIOCSSIZE یا TIOCSWINSZ به پوسته اعلام می‌شود\. بدین ترتیب، برنامه‌ای که درون پوسته اجرا می‌شود از اندازه دقیق پنجره مطلع می‌گردد\. . .IP "" 0 ..SH "تجزیه‌کننده‌های کامپایلر و grep/find (Compiler and grep/find parsers)" برنامه JOE دارای دو تجزیه‌کننده است که می‌توان از آن‌ها برای ایجاد فهرست خطاها (فهرستی از نام فایل‌ها / شماره خطوط) استفاده کرد\. . .P دستور "parserr" کل بافر یا در صورت مشخص بودن بلوک، تنها بلوک برجسته‌شده را به دنبال پیام‌های خطای کامپایلر تجزیه می‌کند\. پیام‌ها باید در این قالب باشند: . .IP "" 4 . .nf file\.name line\-number : . .fi . .IP "" 0 . .P نام فایل باید از اعداد، حروف، \(aq/\(aq، \(aq\.\(aq و \(aq\-\(aq تشکیل شده باشد\. باید حداقل شامل یک \(aq\.\(aq باشد\. همچنین باید پس از شماره خط در نقطه‌ای یک دونقطه (:) وجود داشته باشد\. خطوطی که در این قالب نباشند نادیده گرفته می‌شوند\. . .P دستور "gparse" کل بافر یا در صورت تنظیم بودن بلوک، فقط بلوک برجسته‌شده را برای یافتن فهرستی از نام فایل‌ها یا نام فایل‌ها به همراه شماره خط ناشی از "grep \-n" ،"find" و برنامه‌های مشابه تجزیه می‌کند\. . .IP "" 4 . .nf filename filename: filename:line\-number: . .fi . .IP "" 0 . .P هنگامی که JOE فهرست خطاها را به دست آورد، کارهای متعددی می‌توانید با آن انجام دهید: . .IP "\(bu" 4 پیمایش فایل‌ها/مکان‌ها در فهرست با کلیدهای \fBEsc \-\fR و \fBEsc =\fR . .IP "\(bu" 4 جست‌وجو و جایگزینی در تمام فایل‌های موجود در فهرست با استفاده از گزینه جست‌وجو و جایگزینی \(aqe\(aq\. . .IP "\(bu" 4 پاک کردن فهرست با استفاده از دستور "release"\. . .IP "" 0 . .P همچنین می‌توانید از \fBEsc Space\fR (دستور \(aqjump\(aq) برای تجزیه خطی که مکان‌نما روی آن قرار دارد و پرش به نام فایل و شماره خط تجزیه‌شده استفاده کنید\. \(aqjump\(aq از تجزیه‌کننده grep/find استفاده می‌کند، مگر اینکه قبلاً دستور \(aqparserr\(aq در بافر اجرا شده باشد\. . .SS "Grep\-find" برای نمایش اعلان (prompt)، کلیدهای \fBEsc G\fR را فشار دهید\. دستوری وارد کنید که خروجی آن نام فایل‌ها به همراه شماره خطوط باشد؛ برای نمونه: \(aqgrep \-n fred *\.c\(aq\. این کار تمام نمونه‌های \(aqfred\(aq را در فایل‌های *\.c فهرست می‌کند\. برای دریافت شماره خطوط به گزینه \(aq\-n\(aq نیاز دارید\. . .P اکنون می‌توانید روی یکی از خطوط کلیدهای \fBEsc Space\fR را بزنید تا به فایل انتخاب‌شده بپرید\. همچنین می‌توانید از \fBEsc =\fR و \fBEsc \-\fR برای پیمایش گام‌به‌گام خطوط استفاده کنید\. . .SS "کامپایل (Compile)" کلیدهای \fBEsc C\fR را بزنید تا تمام فایل‌های تغییریافته ذخیره شوند و اعلان کامپایل باز شود\. دستوری را که می‌خواهید برای کامپایلر به کار ببرید وارد کنید (معمولاً "make \-w")\. کامپایلر در یک پنجره پوسته اجرا خواهد شد\. پس از پایان، نتایج تجزیه می‌شوند\. . .P پرچم \(aq\-w\(aq باید به "make" داده شود تا هر زمان دایرکتوری را تغییر می‌دهد پیامی چاپ کند\. پیام‌ها در این قالب هستند: . .IP "" 4 . .nf make[1]: Entering directory `/home/jhallen/joe\-editor\-mercurial/joe\' . .fi . .IP "" 0 . .P اگر هرگونه خطا یا هشداری از طرف کامپایلر وجود داشته باشد، می‌توانید روی یکی از خطوط کلیدهای \fBEsc Space\fR را بزنید تا به فایل انتخاب‌شده بپرید\. همچنین می‌توانید از \fBEsc =\fR و \fBEsc \-\fR برای پیمایش گام‌به‌گام خطوط استفاده کنید\. . .SH "برجسته‌سازی نحو (Syntax highlighting)" برای فعال‌سازی برجسته‌سازی از \fB^T H\fR استفاده کنید\. . .P برای انتخاب نحو، از \fB^T Y\fR استفاده کنید\. می‌توانید در اعلان، دو بار کلید \fBTab\fR را بزنید تا فهرست تکمیل خودکار نمایش داده شود\. . .P برنامه JOE تلاش می‌کند نحو مورد استفاده را بر اساس نام و محتویات فایل تشخیص دهد\. فایل پیکربندی /etc/joe/ftyperc شامل این تعاریف است\. . .P هر نحو توسط فایلی واقع در /usr/share/joe/syntax/ تعریف می‌شود\. . .SH "نحوه کارکرد برجسته‌سازی نحو در JOE (How JOE syntax highlighting works)" \fIبرگرفته از c\.jsf \fIhttp://joe\-editor\.hg\.sourceforge\.net/hgweb/joe\-editor/joe\-editor/file/tip/syntax/c\.jsf\.in\fR با کمی تغییر\fR . .P یک ماشین حالت متناهی معین که تحلیل واژگانی زبان هدف را انجام می‌دهد در یک فایل نحو ارائه شده است\. (این در اصل «زبان اسمبلی» برجسته‌سازی نحو است\. اصولاً می‌توان از برنامه‌ای مجزا برای تبدیل نحو عبارت منظم NFA به این قالب استفاده کرد)\. . .P هر حالت با این ساختار آغاز می‌شود: . .IP "" 4 . .nf : . .fi . .IP "" 0 . .P \fIname\e\fR نام حالت است\. . .P \fIcolor\-name\e\fR رنگی است که برای نویسه‌های مصرف‌شده توسط حالت استفاده می‌شود (در واقع نمادی برای یک رنگ قابل‌تعریف توسط کاربر است)\. . .P \fIcontext\e\fR به JOE می‌گوید که آیا نویسه فعلی بخشی از یک کامنت یا یک رشته است یا خیر\. این به JOE امکان می‌دهد هنگام تطبیق نویسه‌هایی مانند پرانتزها، کامنت‌ها و رشته‌ها را نادیده بگیرد\. برای استفاده از این قابلیت، گزینه highlighter_context باید برای فایل‌هایی که با نحو مربوطه برجسته می‌شوند اعمال شود\. جهت اعمال این گزینه، آن را به مدخل‌های آن فایل‌ها در ftyperc بیفزایید\. . .P زمینه‌های معتبر عبارتند از: . .IP "\(bu" 4 comment این نویسه بخشی از یک کامنت است\. مثال: /* comment */ . .IP "\(bu" 4 string این نویسه بخشی از یک رشته است\. مثال‌ها: "string" \(aqc\(aq \(aqstring\(aq . .IP "" 0 . .P جداکننده‌های کامنت و رشته نیز خود باید با زمینه مناسب علامت‌گذاری شوند\. زمینه بخشی از رنگ در نظر گرفته می‌شود، بنابراین گزینه‌های recolor=\-N و recolormark زمینه را به نویسه‌های پیشین نیز اعمال می‌کنند\. . .P نخستین حالتِ تعریف‌شده، حالت اولیه است\. . .P درون یک حالت، انتقال‌ها (پرش‌ها) به حالت‌های دیگر تعریف می‌شوند\. هر پرش قالبی به این شکل دارد: . .IP "" 4 . .nf [