সি- কে কীভাবে বাঁধবেন?


10

C-[ইউএস ইংলিশ কীবোর্ডগুলিতে এস্কেপ কী এর সমতুল্য, সুতরাং, এটি বাঁধতে যে কোনও প্রচেষ্টা M-আচরণকে বিশৃঙ্খলা করবে ।

ইমাসকে জিইউআই ফ্রেমগুলি বলার <escape>এবং C-[আলাদা করার কোনও সমস্যা নেই বলে মনে হচ্ছে । নিম্নলিখিতটি সূক্ষ্মভাবে কাজ করে এবং বাইন্ডিংগুলি থেকে শুরু করে কাজ করা M-থাকবে:

(global-set-key (kbd "<escape>") (lambda () (interactive) (message "<escape>")))

তবে, যদি আমি বাঁধাই

(global-set-key (kbd "C-[") (lambda () (interactive) (message "C-[")))

হঠাৎ ইমাস পাগল হয়ে যায় M-xবিরতির মতো বাঁধাই । তদুপরি, চাপ C-[দিয়ে বাউন্ড ল্যাম্বদা ট্রিগার করতে অস্বীকার করে। আকর্ষণীয় যথেষ্ট, C-x @ c [(ব্র্যাকেট খোলার জন্য মডিফায়ার নিয়ন্ত্রণ প্রয়োগ করুন) এখনও বলে C-[ is undefined

C-[ইমাকস না ভেঙে কিছু বাঁধার কোনও উপায় কি ?

উত্তর:


7

আপনি 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["
    

1
ধন্যবাদ, এটি দুর্দান্ত উত্তর তবে অবশ্যই এর মতো দুর্দান্ত উত্তর অবশ্যই প্রথম পৃষ্ঠার শীর্ষে 34 বার বাম্প করার দরকার নেই। প্রতিটি ধাক্কাটির একটি সামান্য ব্যয় থাকে যা সম্প্রদায় ভাগ করে নেয়: স্প্যামের জন্য পরীক্ষা করা, কোনও নতুন আকর্ষণীয় সামগ্রী আছে কিনা তা দেখে Maybe অথবা আপনার যা আছে কেবল তা আটকে দিন। অভিজ্ঞতা থেকে কথা বলতে বলতে, নিখুঁত পোস্টের মতো কোনও জিনিস নেই, এক পর্যায়ে আপনাকে কেবল এগিয়ে যেতে হবে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস এটি পেয়েছে, এবং এর জন্য দুঃখিত। ইচ্ছেতে এটি সামঞ্জস্য করার কিছু সমস্যা ছিল তা আমি জানতাম না।
চম্পাইনাক

0

নিম্নলিখিত সমাধানটি কিছুটা ক্লদকি, তবে এটি কার্যকর বলে মনে হচ্ছে:

যাক ~/.xbindkeysrcনিম্নলিখিত রয়েছে:

"xvkbd -xsendevent -text '\[Control_L]\[F13]'"
  m:0x14 + c:34

"xvkbd -xsendevent -text '\[Control_L]\[F14]'"
  m:0x14 + c:35

এখন xbindkeysঅনুবাদ করবে C-[করার C-<f13>এবং C-]করতে C-<f14>, তাই তারা অবাধে Emacs বাঁধা যাবে না। আপনি সম্ভবত abort-recursive-editঅন্য কোনও কিছুকে আবদ্ধ করতে চান C-], উদাহরণস্বরূপ C-S-g,।

ক্ষয়ক্ষতিটি হ'ল এখন C-[ইম্যাকস ব্যতীত প্রতিটি অ্যাপ্লিকেশনেই নষ্ট হয়ে গেছে, যা কী সংমিশ্রণটি ইম্যাকগুলিতে প্রেরণ করা হচ্ছে কিনা তা পরীক্ষা করার জন্য কিছু যুক্তি যুক্ত করে এটি ঠিক করা যেতে পারে ...


এফডাব্লুআইডাব্লু, আমি মনে করি না এর সাথে বিশেষ কিছু আছে C-]
মালবারবা

হ্যাঁ, আমিও না, তবে কোনও অদ্ভুত কারণে C-]Xbindkeys গুলি চালানোর পরে আমার বাঁধাই কাজ করা বন্ধ করে দিয়েছে, তাই আমিও সেটিকে প্রত্যাবর্তন করব।
ক্রিস্টাফ মার্সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.