কী সিকোয়েন্সটি আসলে কী করে তা সন্ধান করুন


14

পাঠ্য সম্পাদনা করার সময় সময়ে সময়ে আমি অপ্রত্যাশিত আচরণ লক্ষ্য করি। আমার প্রথম অবলম্বনটি সাধারণত C-h kপ্রদত্ত কী ক্রম দ্বারা কোন ফাংশন ডাকা হয় তা সন্ধান করতে ব্যবহার করা হয়। যাইহোক, কখনও কখনও ডকুমেন্টেশন পর্যবেক্ষণ আচরণের সাথে মতবিরোধ হয়। এই ক্ষেত্রে, আমি সাধারণত ধরে নিয়েছি যে অন্য কোনও প্যাকেজ সেই ফাংশন বা মূল অনুক্রমের মধ্যে পড়েছে এবং এর আচরণটি পরিবর্তন করছে।

আমার কী অনুক্রমের মধ্যে কোন ক্রিয়াকলাপগুলি হুক করছে তা আমি কীভাবে জানতে পারি?

একটি উদাহরণ যা আমি সম্প্রতি সম্মুখীন হয়েছিল তা হ'ল আমি "কীটি টিপলাম এবং উদ্ধৃতি চিহ্নগুলি সক্রিয় অঞ্চলের শুরু এবং শেষের দিকে .োকানো হয়েছিল। আমার সন্দেহ ছিল যে এটি ডিফল্ট ইমাসস আচরণ নয়, তাই C-h k "আসলে কোন ফাংশনটি ডাকা হচ্ছে তা আমি খুঁজে বের করতাম ।

describe-keyডকুমেন্টেশন আমাকে বলছে যে ফাংশন self-insert-commandবলা হচ্ছে, একটি বিল্ট-ইন ফাংশন পারে। একটি দীর্ঘ গল্প সংক্ষিপ্ত করতে, কিছু পরিমাণ পরীক্ষা এবং ত্রুটির পরে, আমি নির্ধারণ করতে সক্ষম হয়েছি যে আচরণটি কারণেই হয়েছিল electric-pair-mode। ভবিষ্যতে অপরাধীর সন্ধান না হওয়া পর্যন্ত সন্দেহজনক প্যাকেজগুলি একবারে বন্ধ করার চেয়ে এই উপসংহারে পৌঁছানোর আরও দ্রুত উপায় কী?


এটি কি সম্ভব যে electric-pair-modeকেবল কয়েকটি বড় মোডে সক্রিয় হয়েছিল? আপনি এখনও দেখতে পান কি self-insert-commandজন্য "যখন আপনাকে যা করতে C-h kযখন electric-pair-modeসক্রিয় থাকে?
কুশল মোদী

@ কৌশালমোডি: দেখা যাচ্ছে যে কী-বাইন্ডিংটি পরিবর্তন করে নয়, এঁকে দেওয়া electric-pair-modeদ্বারা কাজ করে post-self-insert-hook
নিসপিও

C-h kকিপ্রেসের জন্য ঠিক কী ঘটে তা আপনাকে জানায়। আপনি যদি ডকুমেন্টেশনের দিকে নজর দেন তবে self-insert-commandএটি খুব স্পষ্টভাবে বলেছে post-self-insert-hookকমান্ড শেষ হওয়ার পরে চালানো হচ্ছে।
shosti

@ শোস্তি: এই সাধারণ উদাহরণে হ্যাঁ। তবে কী হবে যদি কোনও এক্সটেনশন after-change-functionsজর্ডনের মতো ব্যবহার করে তার উত্তরে উল্লেখ করে? কোনও ফাংশনের ডকুমেন্টেশন সম্ভবত বিশেষভাবে সেই হুকটির উল্লেখ করবে না, তা হবে?
নিস্পিও

দুঃখিত, আমি আরও নির্দিষ্ট করা উচিত ছিল। C-h k+ মানক হুক == সম্পূর্ণ আচরণ (কম বা কম)। অবশ্যই কখনও কখনও এটি প্রচুর সম্ভাবনা ফেলে দেয় তবে আমি জানি যে কোনও জটিল সফ্টওয়্যার সিস্টেমের তুলনায় এটি এখনও অনেক বেশি স্বচ্ছ।
shosti

উত্তর:


13

একক কী প্রেস ঠিক কী করবে তা জানার সহজ উপায় নেই।

যদি আপনি অতিরিক্ত আচরণ দেখতে পান তবে সর্বদা সাধারণ হুক পরীক্ষা করুন। এখানে তালিকাটি দেখুন: http://www.gnu.org/software/emacs/manual/html_node/elisp/Sandard-Hooks.html

বেশিরভাগ ক্ষেত্রে গুরুত্বপূর্ণগুলি হ'ল:

  • পরে পরিবর্তন-ফাংশন
  • সামনে-পরিবর্তন-ফাংশন
  • প্রথম পরিবর্তন-হুক
  • পোস্ট কম্যান্ড-হুক
  • প্রাক কম্যান্ড-হুক
  • পোস্ট স্ব-সন্নিবেশ-হুক

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

যদি এই হুকগুলির ফাংশনগুলি পর্যবেক্ষণিত আচরণের পুরোপুরি বিবরণ না দেয় তবে পরামর্শের জন্য ফাংশনগুলি পরীক্ষা করুন যা তাদের ডকুমেন্টেশনে প্রদর্শিত হবে describe-function


সম্পাদনা: আমি ফাংশনগুলি একের পর এক যাওয়ার চেয়ে আরও ভালভাবে একটি হুককে বর্ণনা করতে সহায়তা করার জন্য কিছু ফাংশন লিখেছি: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb আপনি describe-hookঅন্যান্য ফাংশন বর্ণনা করার মতো সেখানে সংজ্ঞায়িত ব্যবহার করতে পারেন । এটির ফলাফলের একটি নমুনা এখানে:

এবং গিস্টটি অদৃশ্য হয়ে যাওয়ার ক্ষেত্রে এখানে সমস্ত কোড রয়েছে:

(defun guess-all-hooks ()
  "Return a list of all variables that are probably hook lists."
  (let ((syms '()))
    (mapatoms
     (lambda (sym)
       (if (ignore-errors (symbol-value sym))
           (let ((name (symbol-name sym)))
             (when (string-match "-\\(hook[s]?\\|functions\\)$" name)
               (push sym syms))))))
    syms))

(defun face-it (str face)
  "Apply FACE to STR and return."
  (propertize str 'face face))

(defun describe-hook (hook)
  "Display documentation about a hook variable and the
functions it contains."
  (interactive
   (list (completing-read
          "Hook: " (mapcar (lambda (x) (cons x nil)) (guess-all-hooks)))))
  (let* ((sym (intern hook))
         (sym-doc (documentation-property sym 'variable-documentation))
         (hook-docs (mapcar
                     (lambda (func)
                       (cons func (ignore-errors (documentation func))))
                     (symbol-value sym))))
    (switch-to-buffer
     (with-current-buffer (get-buffer-create "*describe-hook*")
       (let ((inhibit-read-only t))
         (delete-region (point-min) (point-max))
         (insert (face-it "Hook: " 'font-lock-constant-face) "\n\n")
         (insert (face-it (concat "`" hook "'") 'font-lock-variable-name-face))
         (replace-string "\n" "\n\t" nil
                         (point)
                         (save-excursion
                           (insert "\n" sym-doc "\n\n")
                           (1- (point))))
         (goto-char (point-max))
         (insert (face-it "Hook Functions: " 'font-lock-constant-face) "\n\n")
         (dolist (hd hook-docs)
           (insert (face-it (concat "`" (symbol-name (car hd)) "'")
                            'font-lock-function-name-face)
                   ": \n\t")
           (replace-string "\n" "\n\t" nil
                           (point)
                           (save-excursion
                             (insert (or (cdr hd) "No Documentation") "\n\n")
                             (1- (point))))
           (goto-char (point-max))))
       (help-mode)
       (help-make-xrefs)
       (read-only-mode t)
       (setq truncate-lines nil)
       (current-buffer)))))

এর অর্থ কি যখন কোনও ফাংশনটি পরামর্শ দেওয়া হয়, পরিবর্তনটি প্রতিফলিত করতে ডকুমেন্টেশন স্বয়ংক্রিয়ভাবে আপডেট হয়?
নিসপিও

প্রকৃত বৈশিষ্ট্যগুলি আপডেট হয় কিনা তা আমি জানি না, তবে ফেরত মানটি documentationপ্রতিফলিত হওয়ার জন্য আপডেট হয়েছে।
জর্ডন বিয়নদো

1
হ্যাঁ, স্পেন
মালবারবা

1
Gist.github.com/jordonbiondo/bad03e44bb053db0f1eb কোড / ফাংশনটি উত্তরটিতে অন্তর্ভুক্ত করা উচিত এবং আমার মতে। আমি মনে করি একটি এসই উত্তরের 30,000 অক্ষরের সীমা রয়েছে।
ফাহিম মিঠা

4

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

এখানে চিত্র বর্ণনা লিখুন

এখানে গিটহাব সাইট থেকে প্যাকেজের বিবরণ দেওয়া হল:

হেলহাম ডেস্কবাইন্ডস ইম্যাক্সের 'বর্ণনা-বাইন্ডিংগুলিতে একটি ইন্টারফেস সরবরাহ করে যা বর্তমানে সক্রিয় কী বাইন্ডিংগুলি হেলমের সাথে ইন্টারেক্টিভভাবে অনুসন্ধানযোগ্য করে তোলে।

অতিরিক্তভাবে আপনি নিম্নলিখিত ক্রিয়া আছে

  • কমান্ড কার্যকর করুন
  • আদেশ বর্ণনা করুন
  • কমান্ডটি সন্ধান করুন

এবং C-zআপনাকে বর্তমান কমান্ডের একটি অবিরাম বর্ণনা দেবে।


2
এটা অসাধারণ. আমি অবশ্যই এটি আবদ্ধ করব C-h b। আমার একটাই ইচ্ছা যে আমি টাইপ করার পরিবর্তে প্রকৃত কী ক্রমটি প্রবেশ করিয়ে তালিকার আইটেমটিতে ঝাঁপিয়ে পড়তে পারিC - c _ C - p
নিসপিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.