মোড ম্যাপে হুক বনাম বড় মোড কীগুলি সেট করার মধ্যে পার্থক্য


13

ধরে নিন যে আমি একটি বড় মোড নামক ডাউনলোড করেছি magical-modeএবং এটির নিজস্ব জাদুকরী কীম্যাপ রয়েছে magical-mode-map। এই মোডটি এমন একটি হুক সরবরাহ করে magical-mode-hookযা প্রতিবার চালিত হয় magical-modeবাফারের প্রধান মোডে পরিণত হয়। সেই মোডে ব্যবহারের জন্য কয়েকটি কাস্টম কী বাইন্ডিং যুক্ত করতে এখন আমি আমার ডিআইডি ফাইলটি সংশোধন করতে চাই।

দেখে মনে হচ্ছে কাস্টম কী বাইন্ডিং সেট আপ করার জন্য দুটি উপায় রয়েছে (কমপক্ষে) magical-mode। আমি যেটি সবচেয়ে বেশি দেখতে পাই তা হ'ল:

(defun my-magical-keys ()
  (local-set-key (kbd "C-i") 'previous-line)
  (local-set-key (kbd "C-k") 'next-line)
  (local-set-key (kbd "C-j") 'backward-char)
  (local-set-key (kbd "C-l") 'forward-char))
(add-hook 'magical-mode-hook 'my-magical-keys)

তবে এটি এটি এভাবে করা সম্ভব:

(define-key magical-mode-map (kbd "C-i") 'previous-line)
(define-key magical-mode-map (kbd "C-k") 'next-line)
(define-key magical-mode-map (kbd "C-j") 'backward-char)
(define-key magical-mode-map (kbd "C-l") 'forward-char)

দ্বিতীয় পদ্ধতিটি আসলে আমার কাছে পরিষ্কার মনে হয়। এটি অন্য উপায়ে একভাবে করার কোনও সুবিধা আছে কি?


আমি বেসিক মুভমেন্ট কমান্ডের জন্য একই কী ব্যবহার করি। সতর্কতা অবলম্বন করুন: এটি একটি উত্সাহী যুদ্ধ এবং আপনি এটি শুরু করার আগে কী বাইন্ডিংগুলি সম্পর্কে আরও কিছুটা জানতে চাইবেন।
tarsius

@ টারসিয়াস সত্যিই একটি চূড়ান্ত লড়াই। আমি আগে সেই পথ নিচে চলে গেছে, কিন্তু এখন আমি ফিরে ভাল ওল 'থেকে আছি C-nএবং C-p। উদাহরণটি কেবল ডামি কোড। আমি কিছু খুব সাধারণ উদাহরণ মোড এবং উদাহরণস্বরূপ বাইন্ডিংগুলি নিয়ে আসতে চেয়েছিলাম, যাতে স্পষ্টভাবে বাইন্ডিংগুলি প্রশ্নের আসল উদ্দেশ্য থেকে বিরত না হয়।
নিস্পিও

উত্তর:


15

দ্বিতীয় পদ্ধতির পছন্দনীয় কারণ এটি একবারে মোডের কীম্যাপটি সংশোধন করে।

আপনি যদি এটি মোডের হুক ব্যবহার করে করেন তবে প্রতিবার মোডটি কিছু বাফারে সক্ষম থাকলে তা ডাকা হবে। আবার এটি করলে সাধারণত বাস্তবে কোনও প্রভাব পড়বে না কারণ কীগুলি কেবল আবার ইতিমধ্যে যা আবদ্ধ তা আবদ্ধ। মেজর মোড কীম্যাপগুলি প্রধান মোডে "স্থানীয়" হয় যা সেই মোডটি ব্যবহার করে না এমন স্বতন্ত্র বাফারগুলি নয়, তাই যদি আপনি এই বাফারগুলির মধ্যে একটিতে একটি বাঁধাই পরিবর্তন করেন তবে local-set-keyএটি একই প্রধান মোডের সাথে সমস্ত বাফারকে প্রভাবিত করে।

local-set-keyমূলত কমান্ড হিসাবে ব্যবহার করার উদ্দেশ্যে করা হয়। একবার আপনি স্থির করে নিলেন যে আপনি কিছুটা পরিবর্তন স্থির রাখতে চান, define-keyমোড কীম্যাপটি প্রথম যুক্তি হিসাবে ব্যবহার করুন।

আপনি যদি বারবার কীম্যাপটি সংশোধন করতে একটি হুক ব্যবহার করেন তবে এটির উদ্দেশ্যযুক্ত ব্যবহারের সাথে বিরোধ হতে পারে local-set-key। বলুন আপনি ব্যবহার করেছেন M-x local-set-key RET C-i fancy-previous-line RETকারণ আপনি সেই বৈকল্পিকটি চেষ্টা করতে চান previous-line। আপনার অস্থায়ী বাঁধাই, আপনাকে এখন একটি নতুন বাফার যা একই প্রধান মোড ব্যবহার খুলতে, তাহলে হুক আবার চালাতে এবং ওভাররাইড হবে সব বাফার বাফার যা আপনি পূর্বে ব্যবহার করেছেন সহ প্রধান মোড, ব্যবহার local-set-key


আমি এই উত্তরটি পছন্দ করি তবে মোডটি অটোলয়েড হলে কী হবে?
অপসারণ

2
আপনি যতক্ষণ না পরে কিছু গ্রন্থাগার লোড করা হয়েছে কোনো কোড লোড বিলম্ব করতে পারেন: (eval-after-load 'magical '(progn (define-key magical-mode-map ...) ...))
তারশিয়াস

4

ব্যবহার (define-key my-magical-mode-map …)করা সাধারণ উপায়।

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

আপনি যদি বিভিন্ন জায়গায় কী ম্যাপটি কাস্টমাইজ করেন তবে দ্বিতীয় পদ্ধতিটিও বিভ্রান্তিকর হতে পারে। হুকগুলি তাদের যুক্ত করা ক্রম থেকে বিপরীত ক্রমে কার্যকর করা হয় এবং প্রথমবার তাদের মৃত্যুদণ্ড কার্যকর করা পর্যন্ত আপনি নিজের পছন্দসইয়ের কোনও চিহ্ন দেখতে পাবেন না।


2

আপনি দৃশ্যত হয় না সম্পর্কে জিজ্ঞাসা করা সংজ্ঞা একটি প্রধান-মোড কীম্যাপ কিন্তু সম্পর্কে ব্যবহারকারী একটি কয়েক কী-বাইন্ডিং যোগ করুন বা পরিবর্তন কোড বিদ্যমান প্রধান-মোড কীম্যাপ। আপনি "কাস্টম" বলুন যা এটি প্রস্তাব দেয় তবে আমরা পাশাপাশি এটি পরিষ্কার করে দিতে পারি।

নিশ্চিত হওয়ার জন্য, আপনি যা বলছেন আপনি এর জন্য সর্বাধিক সাধারণভাবে দেখেন তা প্রধানত-মোড কীম্যাপটি সংজ্ঞায়িত করতে সাধারণত ব্যবহৃত হয় না । এটা না আপনি Emacs সোর্স কোডে তা খুঁজে, উদাহরণস্বরূপ। এবং এটা হয় না কি Elisp ম্যানুয়াল (নোডের মধ্যে বাঞ্ছনীয় )।Major Mode Conventions

অন্যের কাছে পরিষ্কার হয়ে ওঠার উপায়টি কেবল এটি পেতে চেয়েছিল: আপনি সাধারণত মেজর-মোডের মানচিত্রটি সংজ্ঞায়িত করতে মোড হুক ব্যবহার করতে চান না।


ব্যবহারকারী কী অনুকূলিতকরণ সম্পর্কে আপনার প্রশ্নের উত্তর -

কোনও ক্ষেত্রে এটি এমন নয় local-set-keyযে আপনার কোনও মোড হুক ব্যবহার করা উচিত। define-keyআপনার প্রথম উদাহরণের মতো ঠিক মেজর-মোড কীম্যাপটি ব্যবহার করুন। @ টারসিয়াস ইতিমধ্যে এটি ভালভাবে ব্যাখ্যা করেছে।

এগুলি বাদে , উত্তরটি হ'ল: এটি সাধারণভাবে , আপনি কীগুলি ( define-keyমোড ম্যাপের সাহায্যে ব্যবহার করে ) একবারে বা তার জন্য আবদ্ধ করেন বা প্রতিবার মোডে প্রবেশ করার সময় আপনি সেগুলি আবদ্ধ করার জন্য হুক ব্যবহার করেন কিনা তা কিছুটা পার্থক্য করে।

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

এটিই কেবলমাত্র পার্থক্য যা আমি ভাবতে পারি। আপনি যখন এই পার্থক্যটিকে এক বা অন্য পদ্ধতির সুবিধা হিসাবে বিবেচনা করছেন তখন সিদ্ধান্ত নেওয়ার জন্য। এফডাব্লুআইডাব্লু, আমার নিজের কোডটির দিকে তাকিয়ে, আমি মনে করি না যে আমি কখনও কোনও মোড হুকের উপর কীগুলি আবদ্ধ করি।


ধন্যবাদ। আমি প্রশ্নটি সংশোধন করে আশা করি যে আমি একটি প্রধান মোড তৈরি করছি না , কেবল নিজের কী বাইন্ডিংগুলি বিদ্যমান এবং বিদ্যমান মেজর মোডে যুক্ত করছি cla
নিস্পিও

0

আপনার নামকরণ সামান্য বিভ্রান্তিকর (আমার মনে myহয় আপনার প্রশ্নের দ্বিতীয় অংশে আপনার অপসারণ করা উচিত )।

যাইহোক ধরে নিই যে একজনmy-magical-keys ব্যবহারকারী কাস্টমাইজ করার ফাংশন magical-mode, আমি এর একটি সুস্পষ্ট সুবিধা দেখতে পাচ্ছি । remove-hookএকা একা যেতে (বাই ) হুক অপসারণ করা সহজ ।

দ্বিতীয় সুবিধাটি হ'ল ফাংশনগুলি বোঝানো। মানে তারা আবার ব্যবহারযোগ্য। আপনি তাদের অন্যান্য মোডে হুক করতে পারেন।

সম্পাদনা:

যেমনটি @ টার্সিয়াস উল্লেখ করেছে, হুক অপসারণ মূল আচরণ পুনরুদ্ধার করবে না এবং ফাংশনটিকে একটি ছোটখাটো মোডে রূপান্তর করা আরও ভাল।


আমি নামক একটি প্রকল্পিত প্রধান মোড কাস্টমাইজ করছি my-magical-mode। তবে my-উপসর্গটির ব্যবহারটি যদি বিভ্রান্তিকর হয় তবে আমি অবশ্যই প্রশ্নটি সম্পাদনা করতে পারি।
নিস্পিও

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

1
একমত। আমি কেবলমাত্র এটি প্রয়োগ করেছি my-যাতে কেউ যাতে ভাবতে না পারে যে আমি কীভাবে একটি প্রকৃত মোড কনফিগার করবেন magical-mode(যদি এটি বিদ্যমান থাকে) কীভাবে জিজ্ঞাসা করছি ।
নিস্পিও

1
না, হুক অপসারণ করা পুরানো বাইন্ডিংগুলি পুনরুদ্ধার করবে না। কমপক্ষে ইমাকগুলি পুনরায় চালু না হওয়া পর্যন্ত নয় এবং তারপরে আমি এত বড় উন্নতি হিসাবে চারটির পরিবর্তে কেবল একটি লাইন নিয়ে মন্তব্য করতে দেখছি না।
tarsius

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