.\" keymaps.5 - Copyright (C) Andries Brouwer 1998 .\" May be freely distributed. .\" @(#)keymaps.5 1.10 940130 aeb .TH KEYMAPS 5 "۲۴ آوریل ۱۹۹۸" "kbd" "فایل‌های پیکربندی" .SH "نام (NAME)" keymaps \- توصیف جداول صفحه‌کلید برای loadkeys و dumpkeys .SH "توضیحات (DESCRIPTION)" .IX "keymaps" "" "\fLkeymaps\fR \(em keyboard table descriptions for loadkeys and dumpkeys" "" .IX "loadkeys" "keyboard table descriptions" "\fLloadkeys\fR" "keyboard table descriptions" .IX "dumpkeys" "keyboard table descriptions" "\fLdumpkeys\fR" "keyboard table descriptions" .IX keyboard "table descriptions for loadkeys and dumpkeys" keyboard "table descriptions for \fLloadkeys\fR and \fLdumpkeys\fR" .IX "translation tables" .LP این فایل‌ها توسط .BR loadkeys (1) برای اصلاح جدول‌های تبدیل مورد استفاده توسط راه‌انداز صفحه‌کلید هسته به کار می‌روند و توسط .BR dumpkeys (1) از همان جدول‌های تبدیل تولید می‌شوند. .LP قالب این فایل‌ها تا حدودی شبیه به قالبی است که توسط .BR xmodmap (1) پذیرفته می‌شود. این فایل شامل خطوط تعریف مجموعهنویسه (charset)، کلید یا رشته است که با توضیحات (کامنت‌ها) درآمیخته شده‌اند. .LP توضیحات با نویسه‌های .B ! یا .B # آغاز می‌شوند و تا انتهای خط ادامه می‌یابند. هر چیزی که پس از یکی از این نویسه‌ها در آن خط قرار گیرد نادیده گرفته می‌شود. توجه داشته باشید که برخلاف .BR xmodmap (1), نیازی نیست توضیحات از ستون اول شروع شوند. .LP نحو فایل‌های نگاشت کلید خط‌محور است؛ یک تعریف کامل باید در یک خط منطقی واحد بگنجد. با این حال، خطوط منطقی می‌توانند با قرار دادن نویسه بک‌اسلش (\\) در انتهای هر زیرخط، به چندین خط فیزیکی تقسیم شوند. .SH "فایل‌های ضمیمه (INCLUDE FILES)" یک نگاشت کلید می‌تواند با استفاده از نحو زیر، نگاشت‌های کلید دیگر را ضمیمه کند: .LP .RS include "pathname" .RE .LP .SH "تعریف‌های مجموعهنویسه (CHARSET DEFINITIONS)" یک خط تعریف مجموعهنویسه به این صورت است: .LP .RS .EX charset "iso-8859-x" .EE .RE .LP این خط تعیین می‌کند که keysymهای بعدی چگونه باید تفسیر شوند. برای نمونه، در iso-8859-1 نماد mu (یا میکرو) کد 0265 دارد، در حالی که در iso-8859-7 حرف mu دارای کد 0354 است. .SH "تعریف‌های کامل کد کلید (COMPLETE KEYCODE DEFINITIONS)" هر خط تعریف کامل کلید به این صورت است: .LP .RS .nf .BI keycode " keynumber " = " keysym keysym keysym" \fR... .fi .RE .LP .I keynumber شماره شناسایی داخلی کلید است که تقریباً معادل کد اسکن (scan code) آن می‌باشد. .I keynumber می‌تواند در نمادگذاری ده‌دهی، هشت‌هشتی یا شانزده‌شانزدهی مشخص شود. سیستم هشت‌هشتی با یک صفر در ابتدا و شانزده‌شانزدهی با پیشوند .B 0x مشخص می‌شود. .LP هر یک از .IR keysym ها نمایانگر کنش‌های صفحه‌کلید هستند که تا ۲۵۶ مورد از آن‌ها را می‌توان به یک کلید اختصاص داد. کنش‌های در دسترس شامل ارسال کدهای نویسه یا توالی‌های نویسه، تغییر کنسول‌ها یا نگاشت‌های کلید، راه‌اندازی مجدد سیستم و غیره است. (فهرست کامل را می‌توان از .BR dumpkeys (1) با اجرای .B " dumpkeys -l" به دست آورد.) .LP هر .I keysym می‌تواند دارای پیشوند '+' (علامت مثبت) باشد، که در این صورت این keysym به عنوان یک «حرف» در نظر گرفته می‌شود و بنابراین همانند "Shift"، تحت تأثیر "CapsLock" نیز قرار می‌گیرد (به بیان دقیق‌تر، CapsLock وضعیت Shift را معکوس می‌کند). حروف اسکی ('a'\-'z' و 'A'\-'Z') به صورت پیش‌فرض قابلیت تأثیرپذیری از CapsLock را دارند. اگر فشردن Shift+CapsLock نباید نمادی با حروف کوچک تولید کند، خطوطی مانند: .LP .RS .nf .B "keycode 30 = +a A" .fi .RE .LP را در فایل نگاشت قرار دهید. .LP اینکه کدام‌یک از کنش‌های متصل به یک کلید هنگام فشرده شدن آن انجام شود، به این بستگی دارد که در آن لحظه چه تبدیل‌کننده‌هایی فعال هستند. راه‌انداز صفحه‌کلید از ۹ تبدیل‌کننده پشتیبانی می‌کند. این تبدیل‌کننده‌ها (به صورت کاملاً دلخواه) به این عناوین برچسب‌گذاری شده‌اند: Shift، AltGr، Control، Alt، ShiftL، ShiftR، CtrlL، CtrlR و CapsShift. هر یک از این تبدیل‌کننده‌ها طبق جدول زیر، دارای وزن متناظری از توان‌های دو هستند: .ev table .LP .RS .TP 20 .I modifier .I weight .P .ta T 24R Shift 1 .br AltGr 2 .br Control 4 .br Alt 8 .br ShiftL 16 .br ShiftR 32 .br CtrlL 64 .br CtrlR 128 .br CapsShift 256 .RE .LP .ev کنش مؤثر یک کلید با جمع زدن وزن‌های تمام تبدیل‌کننده‌های فعال مشخص می‌شود. به صورت پیش‌فرض هیچ تبدیل‌کننده‌ای فعال نیست، بنابراین هنگام فشرده شدن یا رها شدن کلید، کنش شماره صفر، یعنی کنشی که در ستون نخست خط تعریف کلید قرار دارد، اعمال می‌شود. برای نمونه هنگامی که تبدیل‌کننده‌های Shift و Alt فعال باشند، کنش شماره نه (از ستون دهم) کنش مؤثر خواهد بود. .LP تغییر وضعیت تبدیل‌کننده‌های فعال را می‌توان با اختصاص دادن کنش‌های مناسب به کلیدهای دلخواه انجام داد. برای نمونه، متصل کردن نماد Shift به یک کلید، تبدیل‌کننده Shift را در هنگام فشردن آن کلید فعال می‌کند و با رها کردن کلید، اثر آن تبدیل‌کننده لغو می‌شود. اختصاص دادن AltGr_Lock به یک کلید، با فشردن کلید تبدیل‌کننده AltGr را فعال می‌کند و با فشردن دوباره آن، این اثر لغو می‌شود. (به صورت پیش‌فرض Shift، AltGr، Control و Alt به کلیدهایی متصل هستند که برچسب مشابهی دارند؛ AltGr ممکن است نشان‌دهنده کلید Alt سمت راست باشد.) .LP توجه داشته باشید که هنگام اختصاص دادن کلیدهای تبدیل‌کننده باید بسیار مراقب باشید، در غیر این صورت ممکن است به یک نگاشت صفحه‌کلید غیرقابل‌استفاده منجر شود. برای نمونه اگر کلیدی را طوری تعریف کنید که در ستون اول خود Control داشته باشد و باقی ستون‌ها را به صورت VoidSymbol رها کنید، دچار مشکل خواهید شد. چرا که فشردن کلید، تبدیل‌کننده Control را فعال می‌کند و کنش‌های بعدی از ستون پنجم خوانده می‌شوند (جدول بالا را ببینید). بنابراین، هنگامی که کلید را رها می‌کنید، کنش از ستون پنجم برداشته می‌شود. آن ستون حاوی VoidSymbol است، پس هیچ اتفاقی نمی‌افتد. این یعنی اگرچه کلید را رها کرده‌اید، اما تبدیل‌کننده Control همچنان فعال است. فشردن و رها کردن دوباره کلید نیز اثری ندارد. برای جلوگیری از این وضعیت، باید همواره تمام ستون‌ها را طوری تعریف کنید که نماد تبدیل‌کننده یکسانی داشته باشند. یک روش خلاصه‌نویسی کاربردی برای این کار وجود دارد که در ادامه شرح داده شده است. .LP .IR keysym ها می‌توانند در نمادگذاری ده‌دهی، هشت‌هشتی، شانزده‌شانزدهی، یونیکد یا نمادین مشخص شوند. نمادگذاری‌های عددی از همان قالب .I keynumber استفاده می‌کنند. نمادگذاری یونیکد به صورت "U+" و به دنبال آن چهار رقم شانزده‌شانزدهی است. نمادگذاری نمادین شبیه به قالب مورد استفاده در .BR xmodmap (1) است. تفاوت‌های قابل توجه در نمادهای اعداد است. نمادهای عددی '0'، ...، '9' در .BR xmodmap (1) با واژه‌های متناظر 'zero'، 'one'، ... 'nine' جایگزین شده‌اند تا از تداخل با نمادگذاری عددی جلوگیری شود. .LP باید توجه داشت که استفاده از نمادگذاری عددی برای .IR keysym ها بسیار غیرقابل‌حمل است، زیرا شماره‌های کنش کلید ممکن است از یک نسخه هسته به نسخه دیگر تفاوت داشته باشد و بنابراین استفاده از نمادگذاری‌های عددی به شدت نهی شده است. این روش تنها زمانی کاربرد دارد که مطمئن باشید در هسته شما کنش صفحه‌کلید پشتیبانی‌شده‌ای وجود دارد که نسخه فعلی .BR loadkeys (1) شما نام نمادینی برای آن ندارد. .LP تعدادی نمادگذاری خلاصه‌نویسی برای بهبود خوانایی و کاهش زحمت تایپ و احتمال بروز خطاهای نگارشی وجود دارد. .LP پیش از هر چیز، می‌توانید یک خط مشخصات نگاشت به این صورت ارائه دهید: .LP .RS .EX keymaps 0-2,4-5,8,12 .EE .RE .LP تا مشخص کنید که خطوط نگاشت کلید تمامی ۲۵۶ ستون را تعیین نخواهند کرد، بلکه تنها ستون‌های مشخص‌شده را تعریف می‌کنند. (در این مثال: فقط نگاشت‌های plain، Shift، AltGr، Control، Control+Shift، Alt و Control+Alt؛ یعنی ۷ ستون به جای ۲۵۶ ستون.) اگر چنین خطی ارائه نشود، نگاشت‌های کلید 0\-M تعریف خواهند شد، که در آن M+1 بیشترین تعداد ورودی‌های یافت‌شده در هر خط تعریف است. .LP سپس، می‌توانید ورودی‌های VoidSymbol پایانی را از یک خط تعریف کلید حذف کنید. VoidSymbol نشان‌دهنده کنش صفحه‌کلیدی است که هیچ خروجی‌ای تولید نمی‌کند و هیچ اثر دیگری نیز ندارد. برای نمونه، جهت تعریف کلید شماره ۳۰ برای خروجی دادن 'a' در حالت عادی، 'A' در هنگام فشردن با Shift، و انجام ندادن هیچ کاری در هنگام فشردن با AltGr یا سایر تبدیل‌کننده‌ها، می‌توانید به این صورت بنویسید: .LP .RS .nf keycode 30 = a A .fi .RE .LP به جای این حالت طولانی‌تر: .LP .RS .nf keycode 30 = a A VoidSymbol VoidSymbol \\ VoidSymbol VoidSymbol VoidSymbol ... .fi .RE .LP برای راحتی بیشتر، معمولاً می‌توانید از تعاریف بسیار فشرده‌تری نیز بهره ببرید. اگر یک خط تعریف کلید را فقط و دقیقاً با یک کد کنش پس از علامت مساوی وارد کنید، معنای ویژه‌ای خواهد داشت. اگر آن کد (عددی یا نمادین) یک حرف اسکی نباشد، به این معنی است که کد به طور ضمنی در تمام ستون‌های در حال تعریف تکرار می‌شود. از طرف دیگر، اگر کد کنش یک نویسه اسکی در محدوده 'a'، ...، 'z' یا 'A'، ...، 'Z' در توالی ترتیبی اسکی باشد، در صورتی که این ترکیب‌های تبدیل‌کننده واقعاً در حال تعریف باشند، تعاریف زیر برای آن‌ها انجام می‌گیرد. (جدول زیر دو حالت ممکن را فهرست می‌کند: یا کد کنش تکی یک حرف کوچک است که با 'x' نشان داده شده، یا یک حرف بزرگ است که با 'Y' مشخص گردیده است.) .LP .RS 4 .TP 24 .I modifier .I symbol .TP 24 none x Y .PD 0 .TP 24 Shift X y .TP 24 AltGr x Y .TP 24 Shift+AltGr X y .TP 24 Control Control_x Control_y .TP 24 Shift+Control Control_x Control_y .TP 24 AltGr+Control Control_x Control_y .TP 24 Shift+AltGr+Control Control_x Control_y .TP 24 Alt Meta_x Meta_Y .TP 24 Shift+Alt Meta_X Meta_y .TP 24 AltGr+Alt Meta_x Meta_Y .TP 24 Shift+AltGr+Alt Meta_X Meta_y .TP 24 Control+Alt Meta_Control_x Meta_Control_y .TP 24 Shift+Control+Alt Meta_Control_x Meta_Control_y .TP 24 AltGr+Control+Alt Meta_Control_x Meta_Control_y .TP 24 Shift+AltGr+Control+Alt Meta_Control_x Meta_Control_y .PD .RE .LP .SH "تعریف‌های تک‌تبدیل‌کننده (SINGLE MODIFIER DEFINITIONS)" تمام اشکال قبلی خطوط تعریف کلید همواره تمامی M+1 ترکیب تبدیل‌کننده ممکن را تعریف می‌کنند، صرف‌نظر از اینکه خط واقعاً شامل آن تعداد کد کنش باشد یا خیر. با این حال، گونه دیگری از نحو تعریف برای مشخص کردن تک‌کنش‌ها برای یک ترکیب تبدیل‌کننده خاص از یک کلید وجود دارد. این ویژگی به‌ویژه زمانی سودمند است که نگاشت کلیدی را بارگذاری می‌کنید که تنها در برخی ترکیب‌های تبدیل‌کننده (مانند AltGr+کلیدهای عاملی) با نیاز شما سازگار نیست. در چنین حالتی می‌توانید یک فایل محلی کوچک بسازید که تنها آن ترکیب‌های تبدیل‌کننده را بازتعریف کند و آن را پس از فایل اصلی بارگذاری نمایید. نحو این ساختار به صورت زیر است: .LP .BR "" { " plain " "| } " keycode .I keynumber .B = .I keysym .LP ، برای نمونه: .RS .EX .nf plain keycode 14 = BackSpace control alt keycode 83 = Boot alt keycode 105 = Decr_Console alt keycode 106 = Incr_Console .fi .EE .RE استفاده از "plain" تنها ورودی پایه یک کلید (یعنی زمانی که هیچ تبدیل‌کننده‌ای فعال نیست) را بدون تغییر انتساب‌های سایر ترکیب‌های تبدیل‌کننده آن کلید تعریف می‌کند. .SH "تعریف‌های رشته (STRING DEFINITIONS)" علاوه بر توضیحات و خطوط تعریف کلید، یک نگاشت کلید می‌تواند شامل تعریف‌های رشته باشد. از این تعریف‌ها برای تعیین آنچه هر کد کنش کلید عاملی ارسال می‌کند، استفاده می‌شود. نحو تعریف‌های رشته به صورت زیر است: .LP .RS .B string .I keysym .B = .BI """" text """" .RE .LP .I text می‌تواند شامل نویسه‌های حرفی، کدهای نویسه هشت‌هشتی در قالب بک‌اسلش و به دنبال آن حداکثر سه رقم هشت‌هشتی، و سه توالی گریز \fB\\n\fP، \fB\\\\\fP و \fB\\"\fP به ترتیب برای خط جدید، بک‌اسلش و نقل‌قول باشد. .SH "تعریف‌های ترکیب (COMPOSE DEFINITIONS)" همچنین ممکن است تعریف‌های ترکیب (compose) نیز وجود داشته باشد. ساختار آن‌ها به این صورت است: .LP .RS .BI "compose '" char "' '" char "' to '" char "'" .RE و چگونگی ترکیب دو بایت برای تشکیل بایت سوم را توصیف می‌کنند (هنگامی که از یک اکسنت مرده یا کلید compose استفاده می‌شود). از این قابلیت برای دریافت حروف دارای اعراب و موارد مشابه در صفحه‌کلید استاندارد استفاده می‌شود. .SH "کوتاه‌نوشت‌ها (ABBREVIATIONS)" کوتاه‌نوشت‌های مختلفی را می‌توان با kbd-0.96 و نسخه‌های پس از آن به کار برد. .TP .B "strings as usual" مقادیر معمول رشته‌ها را تعریف می‌کند (اما نه کلیدهایی را که به آن‌ها متصل هستند). .TP \fBcompose as usual for "iso-8859-1"\fP ترکیب‌های معمول compose را تعریف می‌کند. .LP برای آگاهی از اینکه چه .IR keysym هایی برای استفاده در نگاشت‌های کلید در دسترس هستند، از دستور زیر استفاده کنید: .LP .RS .nf .B dumpkeys --long-info .fi .RE .LP متأسفانه در حال حاضر هیچ توضیحی درباره اینکه هر نماد چه کاری انجام می‌دهد وجود ندارد؛ باید آن را از روی نام حدس زد یا از کدهای منبع هسته استخراج کرد. .LP .SH "مثال‌ها (EXAMPLES)" (دقت کنید که از یک خط keymaps استفاده نمایید، مانند نخستین خط `dumpkeys` یا "keymaps 0-15" یا مشابه آن.) .LP ورودی زیر جای کلید Control سمت چپ و کلید Caps Lock را در صفحه‌کلید با یکدیگر عوض می‌کند: .LP .RS .nf keycode 58 = Control keycode 29 = Caps_Lock .fi .RE .LP کلید شماره ۵۸ معمولاً کلید Caps Lock و کلید شماره ۲۹ معمولاً کلید Control است. .LP ورودی زیر کلیدهای Shift و Caps Lock را طوری تنظیم می‌کند که عملکرد بهتری داشته باشند، شبیه به ماشین‌تحریرهای قدیمی. بدین صورت که یک یا چند بار فشردن کلید Caps Lock صفحه‌کلید را در وضعیت CapsLock قرار می‌دهد و فشردن هر یک از کلیدهای Shift آن را آزاد می‌کند. .LP .RS .nf keycode 42 = Uncaps_Shift keycode 54 = Uncaps_Shift keycode 58 = Caps_On .fi .RE .LP ورودی زیر چیدمان کلیدهای ویرایشی را در صفحه‌کلید پیشرفته به گونه‌ای تنظیم می‌کند که بیشتر شبیه به پایانه‌های سری VT200 باشد: .LP .RS .nf keycode 102 = Insert keycode 104 = Remove keycode 107 = Prior shift keycode 107 = Scroll_Backward keycode 110 = Find keycode 111 = Select control alt keycode 111 = Boot control altgr keycode 111 = Boot .fi .RE .LP در اینجا مثالی برای متصل کردن رشته "du\\ndf\\n" به کلید AltGr\-D آمده است. ما از کد کنش «یدکی» F100 استفاده می‌کنیم که به طور معمول به هیچ کلیدی متصل نیست. .LP .RS .nf altgr keycode 32 = F100 string F100 = "du\\ndf\\n" .fi .RE .LP .SH "نویسندگان (AUTHORS)" Andries Brouwer .LP .SH "همچنین ببینید (SEE ALSO)" .BR loadkeys (1), .BR dumpkeys (1), .BR showkey (1), .BR xmodmap (1)