আপনি C-[যেমন ব্যবহার করেন ঠিক তেমন ব্যবহারকারী-স্তরের মানচিত্রে বাইন্ডিং পরিবর্তন করতে পারবেন না global-set-key
। তবে আপনি কী-ম্যাপে পৌঁছানোর আগে এটি কীবোর্ড ইভেন্ট হিসাবে পরিবর্তন করতে পারবেন change আপনি উদাহরণস্বরূপ বলতে পারেন:
(define-key input-decode-map
(kbd "C-[")
[control-bracketleft])
এবং তারপরে [control-bracketleft]
আপনার কীম্যাপে ব্যবহার করুন। খুব সহজ তাই না?
পরিচালকের কাটা
দুর্ভাগ্যক্রমে, এটি এত সহজ নয় এবং এই সমাধানটির জন্য কিছু সমন্বয় প্রয়োজন, যা অত্যন্ত বেদনাদায়ক বলে মনে হবে। আপনাকে সতর্ক করা হয়েছে। তবে আসুন প্রথমে দেখা যাক ব্যবহারকারী-স্তরের মানচিত্র কেন প্রশ্নের উত্তর দিতে পারে না। নীচে, আমি ইম্যাক্স লিস্প ম্যানুয়ালটি ইম্যাক্স 26.1 এর জন্য উল্লেখ করি যখন আমি আরও নির্ভুলতা ছাড়াই "কিছু দেখুন" বলি।
C-[খুব প্রাথমিক পর্যায়ে এএসসিআইআই নিয়ন্ত্রণ চরিত্র হিসাবে ব্যাখ্যা করা হয় ESC
(দেখুন 21.7.1 - কীবোর্ড ইভেন্টস )। এই কোডটি দীর্ঘ সিকোয়েন্সগুলির উপসর্গ হিসাবে অন্য সমস্ত জায়গায় ছড়িয়ে গেছে। এর কারণ রয়েছে: ESC
প্রকৃতপক্ষে মেটা উপসর্গ (দেখুন meta-prefix-char
), এবং যে কোনও M-কিছু বাঁধাই কিছু পড়তে শুরু করে
এমন ক্রমকে অনুবাদ করবে ESC
। সুতরাং, বিশ্বব্যাপী মানচিত্র পরিবর্তন যথেষ্ট হবে না: আপনি পরিবর্তন করতে প্রথম প্রয়োজন meta-prefix-char
, তারপর remap করতে ESC
আপনার নতুন meta-prefix-char
প্রতিটি এবং প্রতি মানচিত্র ব্যবহারের M-আগে আপনি নিরাপদে ম্যাপ করতে পারেন C-[।
ঠিক আছে, অবশ্যই: আসুন ব্যবহার করা যাক input-decode-map
। অনুরূপ মানচিত্রের কয়েকটি রয়েছে যা আমরা ব্যবহার করতে প্ররোচিত হতে পারি (বিভাগ 21.8.3 এবং 22.14 দেখুন) তবে আসুন আমরা এটির সাথে লেগে থাকি। এবং ভাল ... এই কাজ! তুমি হয়ে গেছ, তাই না?
আসলে, না, গল্পটি এখানেই শেষ হয় না। এটি কাজ করে ... যতক্ষণ আপনি উইন্ডো সিস্টেম ব্যবহার করছেন। যদি দুর্ভাগ্যের কারণে আপনি জরুরী অবস্থায় লিনাক্স কনসোলে জেল হয়ে থাকেন, আপনি বুঝতে পারবেন পরিস্থিতিটি কতটা নাটকীয় হয়ে উঠেছে: তীর কীগুলি Homeএবং অবশ্যই M-বাইন্ডিংগুলি সমস্ত আবর্জনা। কেন? কারণ যখন টার্মিনালটি বলে ESC
(এটি যখন আপনি টাইপ করবেন তখন C-[) এটির সত্যিকার অর্থে ESC
এবং এটি একই ধরণের ক্রম শুরু করে যা এটি নন-এএসসিআইআই অক্ষর প্রেরণে ব্যবহার করে।
দুর্যোগ পর্যবেক্ষণ করে, আপনি উপরোক্ত input-decode-map
পরিবর্তনটি এমনভাবে সুরক্ষিত করা বুদ্ধিমানের বিবেচনা করতে পারেন যাতে উইন্ডো সিস্টেম কীবোর্ড নিয়ন্ত্রণ করে এমন ক্ষেত্রে এটি কেবল সক্রিয় হয়:
(let ((frame (framep (selected-frame))))
(or (eq t frame)
(eq 'pc frame)
(define-key input-decode-map
(kbd "C-[")
[control-bracketleft])
)))
টার্মিনালগুলি তখন তারা আগের মতো কাজ করে।
এখন, আমরা C-[কি টার্মিনালগুলির সাথে ডিল করতে পারি ? আসলে, হ্যাঁ আমরা, লিনাক্স কনসোলের পাশাপাশি অন্যান্য টার্মিনাল এমুলেটরগুলিতে আমি খেলতে পারি। নতুন গল্পগুলি দৃশ্যে প্রবেশ করার সাথে সাথে গল্পটি একটি দীর্ঘ দীর্ঘায়িত হয়। কারণ এটি আর একা ইমাকস নয়: টার্মিনালের এখন কেন্দ্রীয় ভূমিকা রয়েছে।
লিনাক্স কনসোলটি যা বলছে তাতে একটি কান ndণ দিন। C-vএটি স্পষ্ট শুনতে কিছু কী আগে টাইপ করুন । C-[হয় ESC
; তাই হয় Esc। উপরের তীরটি শোনাচ্ছে ESC [ A
, M-aযেমন রয়েছে
ESC A
। হুম ... মনে হচ্ছে ইমাসে এই মেটা কী অনুবর্তনগুলি তাই না? যাই হোক।
যদি আমরা করছি সময় চরিত্র ঘটনা (যা প্রণালী দ্বারা পার্থক্য করা হবে না মধ্যে অতিবাহিত উপর ভিত্তি করে কিছু কৌশল খেলতে প্রস্তুত
Escথেকে C-[), মনে হয় আমরা কোন উপায় পেয়েছেন কিন্তু কনসোল বলতে আমরা আসলে মানে না কি ESC
যখন আমরা টাইপ C-[। তদুপরি, এটি খুব শীঘ্রই প্রদর্শিত হবে যা C-[স্টক টার্মিনাল কোডগুলির সাথে একমাত্র সমস্যা নয়: সংশোধিত তথ্য মোডিফায়ারগুলি বেশিরভাগ সময় মুছে ফেলা হয়। আমরা ইমা্যাকগুলি কাস্টমাইজ করেছিলাম সেই একই কারণে আমাদের টার্মিনালটি কাস্টমাইজ করতে হবে: আমরা যদি এটি করি তবে এটি আরও অনেক বেশি ব্যবহারিক হবে।
এই মুহুর্তে, আপনি আপনার টার্মিনালের ডকুমেন্টেশন চোখগুলিকে গভীর তদন্ত করতে সাহস করবেন: loadkeys(1)
লিনাক্স কনসোলের জন্য ম্যান পেজ ,
কাস্টম কী বাইন্ডিংxterm(1)
বিভাগে এক্সটার্মের জন্য , এবং অন্যান্য টার্মিনালের জন্য যা-ই-ড্যান্ট-জানি না । ইন KDE konsole
, আপনি সেটিংস / বর্তমান প্রোফাইল সম্পাদনা ...
তারপরে কীবোর্ডে কাস্টম অনুবাদগুলি সংজ্ঞায়িত করতে পারেন । ~/.local/share/konsole/Test.keytab
এই উত্তরোত্তর ডায়ালগটি খেলার পরে একটি অংশ এখানে দেওয়া হয়েছে :
key [+Ctrl+AnyModifier : "\EO*["
একবার আপনি টার্মিনাল পাঠান আছে ESC O 5 [
জন্য
C-[(উপরে কনফিগারেশন হিসেবে), আপনি Emacs ফিরে যেতে পারেন। অবশ্যই, আপনি এখনও করা হয়নি।
কোনও প্রদত্ত টার্মিনালটি কী কী ডায়ালাইকটি ব্যবহার করে তা ইম্যাক্সের নির্দেশ দিতে আপনি সামঞ্জস্য করতে পারেন input-decode-map
। হ্যাঁ, এই গল্পের শুরুতে আমরা ভাগ্যক্রমে এটি পরিবর্তন করেছি এবং
term/xterm.el
এক্সটার্ম জড়িত থাকাকালীন এটিই স্পর্শ করে। সামঞ্জস্যের জন্য একটি ভাল জায়গা হ'ল tty-setup-hook
(বিভাগ 40.1.3 দেখুন):
(add-hook 'tty-setup-hook
(lambda ()
(let ((term (getenv "TERM")))
(cond
(;; xterm-function-map not in doc, but in term/xterm.el
(boundp 'xterm-function-map)
(map-my-term-codes xterm-function-map))
((equal term "linux")
(map-my-term-codes input-decode-map))
)
)))
আপনি যদি কোনও টার্মিনালে থাকেন তবে এই হুকটি কেবল চালিত হবে সে সম্পর্কে সচেতন হন। সুতরাং, আপনি উইন্ডো সিস্টেম সূচনার জন্য কোড এখানে সন্নিবেশ করতে পারবেন না। এখানে নিজেই অনুবাদ ফাংশনটি রয়েছে:
(defun map-my-term-codes (map)
(define-key map (kbd "M-O 5 [")
[control-bracketleft])
)
এবং তারপরে আপনি কিছুটা বিশ্রাম নিতে পারেন: এটি যাত্রার শেষ। অবশ্যই, যদি আপনি টার্মিনালগুলির বিষয়ে চিন্তা না করেন তবে আপনি সমস্ত বেদনাদায়ক অংশটি এড়িয়ে যাবেন তাড়াতাড়ি। তবে আপনি স্বীকার করবেন এটিও অসম্পূর্ণ।
দুটি চূড়ান্ত নোট:
আমি পছন্দ করে ESC O 5 [
কোডে C-[। এই মাত্র একটি উদাহরণ রয়েছে: আমি এটি একটি হিসাবে মনে করা হবে না ভাল পছন্দ। কেবলমাত্র 5
অংশটি যার অর্থ C-, কোনওরকম প্রতিষ্ঠিত সম্মেলনের আনুষ্ঠানিকতা মেনে চলেছে
লিনাক্স কনসোলটি কনফিগার করার ফলে একটি স্বাদ খারাপ হয়ে যায়: অন্তর্বর্তী বিদ্যমান প্রতীকটি ব্যবহার না করে বাঁধাই করা সম্ভব বলে মনে হয় না এবং আমার যা প্রয়োজন
তা বিদ্যমান নেই । আমি বেশিরভাগ ইন্টারনেট উদাহরণগুলির মতো F21- F246রেঞ্জে প্রতীক ব্যবহার করি তবে এটি খুব সন্তোষজনক নয়। এটি কয়েকটি সম্পর্কিত সম্পর্কযুক্ত বাইন্ডিংয়ের জন্য ঠিক আছে, তবে এটি কোনও নিয়মতান্ত্রিক স্কিমা পরিবেশন করবে না।
সম্পাদন করা
- আমি এই কেসটি দিয়ে সম্পূর্ণ করেছি Esc- যার নিজস্ব ব্যক্তিত্ব রয়েছে - অন্য পোস্টে: কীভাবে ESC উপসর্গ কীটির সাথে বাইন্ডিংগুলি সরিয়ে ফেলা যায়?
এখানে খাওয়ানোর জন্য একটি কনফিগারেশনের খণ্ড রয়েছে loadkeys
। আমি এটি /root/custom.kmap এ রেখেছি এবং যখন প্রয়োজন হবে তখন এটি লোড করুন (যা বিরল)। আমার আসল কনফিগারেশনটিতে তীর এবং বিভিন্ন সংশোধকের সংমিশ্রণের মানচিত্রও রয়েছে, তবে এটি দীর্ঘতর, প্রতীক এবং সিকোয়েন্সগুলির পছন্দ প্রশ্নযুক্ত এবং আমি নিশ্চিত না যে আমার কীবোর্ডের কীকোডগুলি আপনার সাথে মেলে। সুতরাং আসুন এটির যথাযথ পর্যায়ে রাখুন: এটি একটি চিত্রণ ছাড়া কিছুই নয়।
keymaps 0-127
# http://tldp.org/HOWTO/Keyboard-and-Console-HOWTO-15.html
# web+man:keymaps
# web+man:loadkeys
# escape
keycode 1 = F100
alt keycode 1 = Escape # keep the Escape behavior somewhere
# keycode 26 = bracketleft
control keycode 26 = F115 # Control_bracketleft does not exist
string F100 = "\033OO" # map this to [escape] in map-my-term-codes
string F115 = "\033O5["