জিইউআই ফ্রেম
জিইউআই ফ্রেমগুলিতে (এক্স 11, উইন্ডোজ, ওএসএক্স,…), ইমাক্স ফাংশন কী Tabহিসাবে কীটি পড়ে tab
। তবে, যেহেতু Tabটার্মিনালের কীটি traditionতিহ্যগতভাবে ^I
( কন্ট্রোল + আই) অক্ষরটি প্রেরণ করে , ইমাস্যাক্সগুলি tab
ফাংশন কীটি কন্ট্রোল + আই অক্ষরে (অক্ষর 9) অনুবাদ করে, যা হিসাবে প্রদর্শিত হয় TAB
। এই অনুবাদ মাধ্যমে করা হয় function-key-map
।
অনুরূপ অনুবাদ কিছু অন্যান্য ফাংশন কীগুলির সাথে ঘটে। ( Backspaceএবং Deleteএটি একটি কাঁটাযুক্ত মামলা যা আমি এখানে বিস্তারিত আলোচনা করব না))
Function key Translated to character Notes
Number Name Decomposition
backspace 127 DEL Ctrl+? May be translated to C-h instead
tab 9 TAB Ctrl+I
linefeed 10 LFD Ctrl+J Few keyboards have this key
return 13 RET Ctrl+M
escape 27 ESC Ctrl+[
আপনি যদি পুরোপুরি + Tabথেকে আলাদা করতে চান তবে বাইন্ডিংটি এখান থেকে সরান :CtrlIfunction-key-map
(define-key function-key-map [tab] nil)
তবে এটি খুব কার্যকর নয়, কারণ এন্ট্রিগুলিকে function-key-map
মোড-নির্দিষ্ট কীম্যাপে বা বৈশ্বিক মানচিত্রে বাইন্ডিং দ্বারা ওভাররাইড করা হয়। সুতরাং আপনি যদি এর জন্য আলাদা বাইন্ডিং সংজ্ঞায়িত করতে চান তবে tab
এটি করুন (এলিস্পে, ইন্টারেক্টিভভাবে নয়, কারণ কী রিডিং প্রম্পটটি function-key-map
অনুবাদটি প্রয়োগ করে যাতে আপনি রিবান্ডিং শেষ করেন TAB
এবং না tab
):
(global-set-key [tab] '…)
(define-key some-mode-map [tab] '…)
সমস্ত মান মোড কর্ম সংশোধন যে Tabকী পরিবর্তন করে এটা করতে TAB
কী, যার জন্য ডাক নাম হয় C-i
দ্বারা কী সমন্বয় উত্পন্ন চরিত্র Ctrl+ + I। আপনি স্ট্যান্ডার্ড বাইন্ডিং প্রয়োগ করতে চান তাহলে tab
বরং C-i
, ছুটি function-key-map
এবং মোড keymaps একা, এবং এর পরিবর্তে পুনর্নির্দেশ Ctrl+ + Iএকটি ভিন্ন চাবি।
(define-key input-decode-map [(control ?i)] [control-i])
(define-key input-decode-map [(control ?I)] [(shift control-i)])
(define-key some-mode-map [control-i] '…)
এখন ইমাকগুলি Ctrl+ Iকে " <control-i>
(অনুবাদিত TAB
) হিসাবে" হিসাবে রিপোর্ট করবে । এটি সুন্দর নয়, তবে এটি অনিবার্য নয়: TAB
ইম্যাক্স উত্স কোড হিসাবে নির্মিত 9 অক্ষরের সুন্দর-মুদ্রণ ।
টার্মিনাল ফ্রেম
টার্মিনাল ফ্রেমে সমস্যাটি আরও শক্ত এবং প্রায়শই অসম্ভব। টার্মিনালগুলি কীগুলি সংক্রমণ করে না, তারা অক্ষর সংক্রমণ করে (আরও স্পষ্টভাবে, তারা বাইটস সংক্রমণ করে)। Tabযা কন্ট্রোল + আমি, কি কী সমন্বয় হিসাবে একই - মূল ট্যাব অক্ষর হিসেবে প্রেরণ করা হয় Ctrl+ + Iজেনারেট করে। কোনও সম্পর্কিত অক্ষর নেই এমন ফাংশন কীগুলি (যেমন কার্সার কী হিসাবে) এস্কেপ সিকোয়েন্স হিসাবে প্রেরণ করা হয়, অর্থাৎ ESC
= কন্ট্রোল + দিয়ে শুরু হওয়া অক্ষরের অনুক্রম [[এজন্যই ইমাকস escapeএকটি উপসর্গ কী হিসাবে সংজ্ঞা দেয় - ESC
এটি একটি উপসর্গ হতে হবে)। দেখুন কিভাবে কীবোর্ড ইনপুট এবং টেক্সট আউটপুট কাজ করে? আরও পটভূমি জন্য।
কয়েকটি টার্মিনাল রয়েছে যা ফাংশন কীগুলির জন্য বিভিন্ন কী সিকোয়েন্সগুলি প্রেরণের জন্য কনফিগার করা যেতে পারে তবে অনেকগুলি নয়। উভয় LeoNerd এর libtermkey / libtickit এবং টমাস Dickey এর xterm (সংস্করণ 216 থেকে) এই সমর্থন করি। এক্সটার্মে, বৈশিষ্ট্যটি alচ্ছিক এবং modifyOtherKeys
সংস্থানটির মাধ্যমে সক্রিয় করা হয়েছে । যাইহোক, আমি এক্সটার্ম ব্যতীত অন্য কোনও জনপ্রিয় টার্মিনাল এমুলেটর জানি না যা এটি সমর্থন করে, বিশেষত লিবভেটিতে নির্মিত বহু ইমুলেটর । কিছু টার্মিনাল এমুলেটর আপনাকে কীচর্ডস থেকে অব্যাহত ক্রমগুলি থেকে ব্যবহারকারী-সংজ্ঞায়িত চিঠিপত্রের মাধ্যমে আপনাকে ম্যানুয়ালি এটি করতে দেয়।
এই প্রক্রিয়াটি কেবলমাত্র ট্যাব / সিআই নয়, রিটার্ন / সেন্টিমিটার এবং অব্যাহতি / সি- [অনেকগুলি মূল সংমিশ্রণকে আলাদা করার মঞ্জুরি দেয়। আরও বিশদ বিবরণের জন্য টার্মিনাল ব্যবহার করার সময় কী-বাইন্ডিংগুলির সাথে সমস্যাগুলি দেখুন ।
বুনিয়াদি এক্সটার্ম বৈশিষ্ট্যটি ইমাক্স 24.4 থেকে সমর্থনযোগ্য। তবে মৌলিক (বিশেষ করে Tab, Return, Escape, Backspace) এখনও প্রথাগত নিয়ন্ত্রণ অক্ষর পাঠাতে কারণ যে কী অ্যাপ্লিকেশন আশা। এমন একটি মোড রয়েছে যেখানে Ctrl+ letterকন্ট্রোল অক্ষরের পরিবর্তে একটি পালানোর ক্রম প্রেরণ করে। সুতরাং Ctrlইমাস 24.4 এর সংমিশ্রণগুলি থেকে ফাংশন কীগুলি পৃথক করার জন্য modifyOtherKeys
, 1 টি পরিবর্তে 2 এ সংস্থানটি সেট করে এই মোডটি ব্যবহার করার জন্য এর সমর্থনটি পরিবর্তন করুন ।
;; xterm with the resource ?.VT100.modifyOtherKeys: 2
;; GNU Emacs >=24.4 sets xterm in this mode and define
;; some of the escape sequences but not all of them.
(defun character-apply-modifiers (c &rest modifiers)
"Apply modifiers to the character C.
MODIFIERS must be a list of symbols amongst (meta control shift).
Return an event vector."
(if (memq 'control modifiers) (setq c (if (or (and (<= ?@ c) (<= c ?_))
(and (<= ?a c) (<= c ?z)))
(logand c ?\x1f)
(logior (lsh 1 26) c))))
(if (memq 'meta modifiers) (setq c (logior (lsh 1 27) c)))
(if (memq 'shift modifiers) (setq c (logior (lsh 1 25) c)))
(vector c))
(defun my-eval-after-load-xterm ()
(when (and (boundp 'xterm-extra-capabilities) (boundp 'xterm-function-map))
;; Override the standard definition to set modifyOtherKeys to 2 instead of 1
(defun xterm-turn-on-modify-other-keys ()
"Turn the modifyOtherKeys feature of xterm back on."
(let ((terminal (frame-terminal)))
(when (and (terminal-live-p terminal)
(memq terminal xterm-modify-other-keys-terminal-list))
(send-string-to-terminal "\e[>4;2m" terminal))))
(let ((c 32))
(while (<= c 126)
(mapc (lambda (x)
(define-key xterm-function-map (format (car x) c)
(apply 'character-apply-modifiers c (cdr x))))
'(;; with ?.VT100.formatOtherKeys: 0
("\e\[27;3;%d~" meta)
("\e\[27;5;%d~" control)
("\e\[27;6;%d~" control shift)
("\e\[27;7;%d~" control meta)
("\e\[27;8;%d~" control meta shift)
;; with ?.VT100.formatOtherKeys: 1
("\e\[%d;3~" meta)
("\e\[%d;5~" control)
("\e\[%d;6~" control shift)
("\e\[%d;7~" control meta)
("\e\[%d;8~" control meta shift)))
(setq c (1+ c)))))
(define-key xterm-function-map "")
t)
(eval-after-load "xterm" '(my-eval-after-load-xterm))