টার্মিনাল ব্যবহার করার সময় কী-বাইন্ডিংগুলির সাথে সমস্যা


30

আমার নিচের লাইনটি রয়েছে init.el:

(global-set-key [(control \;)] 'comment-region)

এটি জিইউআই উইন্ডোতে খুব ভালভাবে কাজ করে, তবে যদি বিকল্পটির emacsসাথে অনুরোধ করা হয় -nwতবে C-;অঞ্চলটি মন্তব্য করবে না, কেবল ;অক্ষর সন্নিবেশ করে । M-x comment-region RETঠিক আছে কাজ করে।

অনুরূপ সমস্যার উপর আমি এই উত্তরটি অনুসরণ করার চেষ্টা করেছি , তবে কেবল C-q C-;ফিরে আসে ;এবং আমি অবশ্যই খালি আবদ্ধ করতে চাই না ;

কীভাবে কাঙ্ক্ষিত প্রভাব অর্জন করবেন?


4
এটি সম্ভব যে আপনার টার্মিনাল (আপনি কী ব্যবহার করছেন, উপায় দ্বারা) সেই আদেশ ক্রমটি স্বীকৃতি দেয় না। কম্বোটি ব্যবহার করে চেষ্টা করুন C-;এবং তারপরে M-x view-lossageএটি ইমাসেও পৌঁছেছে কিনা তা দেখতে ব্যবহার করুন ।
ড্যান

আমি ব্যবহার করছি gnome-terminalএবং M-x view-lossageপ্রত্যাবর্তন করছি :ESC [ > 1 ; 2 8 0 2 ; 0 c ; ESC x v i e w - l o s s a g e RET
ওয়েসেন্সএএসএলসুলআইনসন্ধানঅফসনওয়ার্স

3
প্রান্তিক ইস্যু মত দেখায়: যদি যে কী সমন্বয় গিয়ে Emacs পৌঁছানোর ছিল, এটি দেখতে কেমন হবে C-;বরং c ;(অথবা, অন্তত আমি পেতে C-;)।
ড্যান

@ ড্যান: আপনি কি উত্তর হিসাবে রাখতে পারেন? এই প্রশ্নের উত্তর হিসাবে চিহ্নিত করা হবে এবং সমাধানটি দেখতে আরও সহজ করে তুলবে যা একই সমস্যাযুক্ত অন্যান্য ব্যক্তিদের পক্ষে ভাল। ধন্যবাদ!
টিখন জেলভিস

সংক্ষিপ্ততর এবং আরও পড়ার জন্য একটি অতিরিক্ত লিঙ্ক সহ পোস্ট। এটিকে আরও সাধারণ করার জন্য প্রশ্নের শিরোনাম সম্পাদনা করুন।
ড্যান

উত্তর:


17

প্রথমত, আরও সাধারণ সমস্যা: টার্মিনাল এমুলেটরগুলি প্রায়শই তারা প্রেরণ করতে পারে এমন নিয়ন্ত্রণ এবং পালানোর সীমাতে সীমাবদ্ধ থাকে। সুতরাং: এটি ইমাক্সে পৌঁছানোর আগে টার্মিনালটি আপনার বিশেষ অক্ষরগুলি গ্রাস করে sw সাধারণ ডায়াগনস্টিক হিসাবে, আপনার কী সংমিশ্রণগুলি এটি ইম্যাক্সে পরিণত হয়েছে কিনা তা দেখতে আপনি C-h l(বা M-x view-lossage) টিপে আঘাত করতে পারেন ।

এই সমস্যাটির আরও আলোচনার জন্য, এই স্ট্যাক ওভারফ্লো থ্রেড এবং এর লিঙ্কগুলি দেখুন a

মন্তব্যে পিছনে-সামনের সংক্ষিপ্ত বিবরণ জানাতে, আপনার নির্দিষ্ট সমস্যাটি ইম্যাক্সের পরিবর্তে এটিই টার্মিনাল বলে বোঝায় যে সমস্যা। আপনি যখন চেষ্টা করেছিলেন C-;এবং তখন M-x view-lossage, আপনি পেয়েছেন blah blah blah c ; ESC v i e w - l o s s a g e RET। এটি দেখতে টার্মিনাল ইস্যুর মতো: কী সংমিশ্রণটি যদি ইমাসে পৌঁছেছিল তবে c ;অংশটি দেখতে ভাল লাগবে C-;


33

ইন করতে Shift + আপ টার্মিনালে গিয়ে Emacs দ্বারা স্বীকৃত হয় না আমি কিভাবে ব্যাখ্যা টার্মিনাল পালাবার ক্রম মধ্যে সবচেয়ে ফাংশন কি অনুবাদ কারণ অ্যাপ্লিকেশন এবং টার্মিনাল প্রেরণ অক্ষর (বরং বা বাইটস), না কী মধ্যে ইন্টারফেস। কেবলমাত্র কয়েকটি সংশোধক + অক্ষর সংমিশ্রণের নিজস্ব চরিত্র রয়েছে:

  • Ctrlবরাবর একটি চিঠি বা একটিতে @[\]^_বাইট 0-03 (এএসসিআইআই নিয়ন্ত্রণ অক্ষর ) রূপান্তর করে ।
  • প্রায়শই Ctrl+ ?বাইট 127 এ পরিবর্তিত হয় এবং Ctrl+ + (বাইট 0) এর Spaceসমান ।Ctrl@
  • কিছু ফাংশন কীগুলি অক্ষর নিয়ন্ত্রণের সমতুল্য: Tab= Ctrl+ I, Return= Ctrl+ M, Esc= Ctrl+ [
  • এবং Backspace= Ctrl+ Hবা Ctrl+ ?কনফিগারেশনের উপর নির্ভর করে। ইম্যাক্সের জন্য Ctrl+ ?আরও সুবিধাজনক, যেহেতু Ctrl+ Hসাহায্য help
  • Meta+ চরিত্র অনুসারেcharacter প্রেরণ করা Escহয় ।

সুতরাং অন্যান্য সংমিশ্রণগুলি যেমন Ctrl+ ;বা Ctrl+ Shift+ সম্পর্কে letterকী? যেহেতু কোনও অনুরূপ অক্ষর নেই, টার্মিনালটি হয় একটি অক্ষর পুনরায় ব্যবহার করতে হবে বা একটি পালানোর ক্রম পাঠাতে হবে। অনেকগুলি টার্মিনাল প্রাসঙ্গিক অক্ষর না থাকায় সংশোধকগুলিকে অগ্রাহ্য করে, সুতরাং আপনি Ctrl+ ;প্রেরণ ;, Ctrl+ Shift+ letterসমতুল্য Ctrl+ letterইত্যাদি সমাপ্ত হন

টার্মিনাল বিক্রেতারা দীর্ঘদিন ধরে সাধারণ কাজটি করে চলেছেন। পালানোর ক্রমগুলির জন্য কোনও মানদণ্ড ছিল না, যা স্ব-স্থায়ী ছিল - টার্মিনাল বিক্রেতারা এটি প্রয়োগ করে না, অ্যাপ্লিকেশনগুলি এটি সমর্থন করে না, ব্যবহারকারীরা এটি আশা করে না expect কিছু টার্মিনাল এমুলেটরগুলি নির্বিচারে পালানোর সিকোয়েন্সগুলি প্রেরণের জন্য কনফিগার করা যেতে পারে, তাই আপনার যদি এটি করতে পারে তবে আপনি এটিটি কনফিগার করতে পারেন এবং ইমাকগুলিতে এস্কেপ সিকোয়েন্সগুলি ঘোষণা করতে পারেন (আরও পরে এটি)।

ইদানীং, পরিস্থিতি পরিবর্তিত হচ্ছে, কারণ পালানোর ক্রমকে মানিক করার জন্য দুটি প্রস্তাব এসেছে। একটি সিনট্যাক্স সহ লিওনার্ডের লিবার্টার্মকি । অন্যটি সিনট্যাক্স সহ টমাস ডিকির এক্সটার্ম । এক্সটার্মের বর্তমান সংস্করণগুলি (≥216) রিসোর্স সেট করে উভয়ই সিনট্যাক্সের জন্য কনফিগার করা যেতে পারে ; কোনও ননজারো মান সেট করে বৈশিষ্ট্যটি অবশ্যই সক্রিয় করতে হবে ।ESC [ codepoint ; modifier uESC [ 2 7 ; modifier ; codepoint ~formatOtherKeysmodifyOtherKeys

যদি আপনার টার্মিনাল এমুলেটর এই সিনট্যাক্সগুলিকে সমর্থন করে না তবে কনফিগার করা যায় তবে তা বেছে নিন।

Emacs 24.4 যেহেতু, modifyOtherKeysটার্মিনালটি xterm সংস্করণ ≥216 হয় তা সনাক্ত করে ইমাসগুলি স্বয়ংক্রিয়ভাবে বৈশিষ্ট্যটি চালু করে । এনকোড কীগুলির জন্য ইমাক্সের এস্কেপ সিকোয়েন্সগুলি সনাক্তকরণ ভেরিয়েবলের মাধ্যমে কাজ করে local-function-key-map। Emacs 24.4 হিসাবে, সমস্ত পালানোর ক্রম সমর্থিত নয়। কাজটি শেষ করতে আপনি আপনার ডিআইডি ফাইলে নিম্নলিখিত কোডটি ব্যবহার করতে পারেন।

;; xterm with the resource ?.VT100.modifyOtherKeys: 1
;; 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))
    (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;3u" meta)
                ("\e\[%d;5u" control)
                ("\e\[%d;6u" control shift)
                ("\e\[%d;7u" control meta)
                ("\e\[%d;8u" control meta shift)))
        (setq c (1+ c))))))
(eval-after-load "xterm" '(my-eval-after-load-xterm))

যদি TERMপরিবেশের পরিবর্তনশীলকে সেট করা না হয় xtermবা যেমন কোনও বৈকল্পিক থাকে xterm-256color, তবে ইমাসগুলি সেগুলিগুলি সক্রিয় করবে না। যদি ইমাক্স এর মান ইতিমধ্যে আপনার মানটির জন্য TERMসমর্থন করে থাকে তবে আপনি উপরের মত অনুরূপ একটি ফাংশন সংজ্ঞায়িত করে সমর্থন যোগ করতে পারেন, যার নামটির মান লিস্প ফাইলটি লোড করারTERM পরে কার্যকর করা হবে । এ গিয়ে Emacs ধরনের কোনো সমর্থন থাকে, তাহলে আপনি এটি একটি সাব নামক তৈরি করে যুক্ত করতে পারেন termআপনার কোথাও load-path, এবং নামক একটি পাতার মর্মর ফাইল তৈরি term/$TERM.elযেখানে $TERMমান TERM, একটি ফাংশন বলা সংজ্ঞা terminal-init-$TERM

আমি যেমন লিখছি, দেখে মনে হচ্ছে যে এক্সটার্ম ব্যতীত কয়েকটি টার্মিনাল এমুলেটরগুলি এই পালানোর ক্রমগুলি গ্রহণ করেছে। ওএসএক্স-এ, আপনি প্রতিটি কী সংমিশ্রনের জন্য একটি করে একটি এস্কেপ সিকোয়েন্সটি নির্বাচন করে আইটির্ম 2 কনফিগার করতে পারেন ।


2
এই বিষয়ে আপনার উত্তরগুলি সর্বদা দুর্দান্ত, গিলস। অনেক প্রশংসিত.
ফিল্ডস

গ্রেট !. যদিও urxvt কীভাবে এই সিকোয়েন্সগুলি প্রেরণ করা যায় তা কীভাবে খুঁজে পেতে আমার কাছে বেশ কঠিন সময় রয়েছে। তুমি কি আমাকে একটা হাত দিতে পারো :)
আমোস

@ আমোস আমি আরএক্সভিটি ব্যবহার করি না। আপনার ইউনিক্স এবং লিনাক্সের কাছে জিজ্ঞাসা করা উচিত যে কীভাবে urxvt কে পরিবর্তন করতে হবে পরিবর্তিতঅথেরকিসের সাথে এক্সটার্মের মতো একই পালানোর অনুক্রম পাঠাতে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

ম্যাকোস এক্সটার্ম -২66 রঙে কাজ করে না। M-C-%স্বীকৃত হনESC 5
লরেন্সচেন

@ অজ্ঞতাচেন modifyOtherKeysবৈশিষ্ট্যটি সক্রিয় না হলে এটি প্রত্যাশিত আচরণ । নোট করুন যে এটি কেবলমাত্র এক্সটারেমের সাম্প্রতিক পর্যাপ্ত সংস্করণগুলিতে সমর্থিত, এবং এটি কেবল ইমাস 24.4-এর পরে স্বয়ংক্রিয়ভাবে সক্রিয় হবে activ আমি জানি না যে ওএসএক্স সাম্প্রতিক সংস্করণগুলি সহ পাঠায়। যদি এটি না হয় এবং এটি আপনার পক্ষে কাজ করে না তবে আমি আপনাকে নতুন প্রশ্ন জিজ্ঞাসা করার পরামর্শ দিই। আপনি যে সংস্করণগুলি ব্যবহার করছেন তা উল্লেখ করুন।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

2

গিলসের উত্তরে বলা হয়েছে: সেখানে যেতে On OSX, you can configure iTerm2 by selecting an escape sequence for each key combination, one by one. আমার একটু সমস্যা হয়েছিল, সুতরাং আপনি আমার মতো বিভ্রান্ত হওয়ার ক্ষেত্রে এখানে বিশদ বিবরণ।

যদি, কোনও টার্মিনালে ইম্যাক্স চালানোর সময় (যেমন, ম্যাকের ডিফল্ট টার্মিনাল.এপ) C-x C-;চালিত না হয় comment-lineএবং আপনি সেই কার্যকারিতাটি চান, তবে আপনাকে অবশ্যই আইটিার্ম 2 (টার্মিনাল.অ্যাপের সামর্থ্য নেই) স্যুইচ করতে হবে এবং একটি কী ম্যাপিং তৈরি করতে হবে প্রোফাইলের অধীনে ... নিম্নলিখিতগুলি হিসাবে কীগুলি :

^;     ^[[59;5u

এটি +বোতামটি ক্লিক করে সম্পন্ন হয় , যা "কীবোর্ড শর্টকাট" নামে একটি সামান্য উইন্ডো নিয়ে আসে; এই উইন্ডোটির প্রাথমিকভাবে দুটি ক্ষেত্র রয়েছে; শীর্ষে "ক্লিক করুন সেট" এর মান রয়েছে এবং নীচে "উপেক্ষা করুন" এর মান রয়েছে has উপরের বোতামটি ক্লিক করুন এবং টাইপ করুন C-;। এটি কী সংমিশ্রণটি সেট করে যা ক্রিয়া এবং কোড চালাবে। নীচের ক্ষেত্রটি, "অ্যাকশন" এ ক্লিক করুন এবং "প্রেরণ সিকোয়েন্স প্রেরণ করুন" এ ক্লিক করুন এবং এটি অর্ধেকের চেয়ে কিছুটা দূরে রয়েছে। আপনি এটি ক্লিক করার পরে, একটি তৃতীয় ক্ষেত্র উপস্থিত হবে, যার নাম "Esc +"। এই ক্ষেত্রের ভিতরে, টাইপ করুন:

[59;5u

এটি 59হ'ল কমাটির দশমিক এএসসিআইআই কোড এবং এর 5জন্য কোড Ctrl। তারপরে শেষ করতে "ওকে" টিপুন। কী সিকোয়েন্সে সঠিক কী কম্বো এখন আইটির্ম 2 এর পছন্দগুলিতে অন্তর্ভুক্ত হবে। আপনি যখন আইটার্মে ইমাকস শুরু করবেন তখন আপনার C-x C-;কার্যকারিতার অ্যাক্সেস পাবেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.