কীভাবে কীবোর্ড ম্যাক্রোটি লিসপ ফাংশন হিসাবে সংরক্ষণ করবেন?


41

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

একটি উদাহরণ হ'ল ঘন ঘন নির্বাহ করা অনুসন্ধান / কীবোর্ড ম্যাক্রো হিসাবে অপারেশন প্রতিস্থাপন করা হয়। আমি যখন ইমাস ছাড়ি তখন সেই ম্যাক্রোটি হারিয়ে যায়।

আমি কীভাবে আমার ঘন ঘন ব্যবহৃত কীবোর্ড ম্যাক্রোটিকে লিসপ ফাংশন হিসাবে সংরক্ষণ করতে পারি?

সরলতার জন্য, আমি "এবিসি" কে "ডিএফ" এর সাথে একটি ফাংশন হিসাবে প্রতিস্থাপনের ক্রিয়াটি সংরক্ষণ করতে চাই যাতে আমি এটি ইম্যাক সেশন জুড়ে পুনরায় ব্যবহার করতে পারি।

উত্তর:


48

আপনি যে পদক্ষেপগুলি অনুসরণ করতে পারেন তা এখানে:

  • আপনি অনুসন্ধান-প্রতিস্থাপনটি করতে চান এমন অঞ্চল নির্বাচন করুন।
  • ম্যাক্রো রেকর্ডিং শুরু করুন।

    M-x start-kbd-macro

  • প্রয়োজনীয়টি করুন M-x query-replace-regexp("ডিএফ" দিয়ে "এবিসি" প্রতিস্থাপন করুন) এবং !পুরো অঞ্চলে অনুসন্ধান-প্রতিস্থাপনকে বাধ্য করার জন্য ব্যবহার করুন ।
  • ম্যাক্রো রেকর্ডিং বন্ধ করুন।

    M-x kmacro-end-or-call-macro

  • কি M-x kmacro-name-last-macroএবং ম্যাক্রো মত একটি বর্ণনামূলক নাম দিতে replace-abc-with-def। তারপরে আপনি আবার সেই ম্যাক্রোকে কল করতে সক্ষম হবেন M-x replace-abc-with-def
  • আপনার ইম্যাক্স আরম্ভের সময় আপনি যে ফাইলটি লোড করেন তার ফাংশন হিসাবে এখন এই ম্যাক্রোটি সংরক্ষণ করুন; উদাহরণস্বরূপ init.el,।
    • M-x insert-kbd-macro
    • সেখানে beোকাতে আপনার নামযুক্ত ম্যাক্রোটি নির্বাচন করুন।

স্বয়ংক্রিয়ভাবে তৈরি replace-abc-with-defফাংশন সংজ্ঞাটি দেখতে এমন দেখাচ্ছে:

(fset 'replace-abc-with-def
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([59 39 return 97 98 99 return 100 101 102 return 33] 0 "%d")) arg)))

এখন আপনি আপনার M-x replace-abc-with-defসমস্ত ইমাস সেশন করতে পারেন ।


1
জন্য +1 insert-kbd-macro। এটাই প্রশ্নের উত্তর (এবং এই উত্তরটির বাকি অংশগুলি অতিরিক্ত সহায়তা সরবরাহ করে)।
ড্রিউ

6
এও লক্ষ করুন যে ইমাক্স কীবোর্ড ম্যাক্রোগুলির জন্য দুটি পৃথক ফর্ম্যাট তৈরি করতে পারে। কোনটি আপনি পেয়েছেন যখন আপনি insert-kbd-macroএটির kmacro-name-last-macro(উপরের উত্তরের মত) ব্যবহার করে নাম দিয়েছেন কিনা তার উপর নির্ভর করে name-last-kbd-macro
ফিল্ডগুলি

1
মনে রাখবেন যে আপনি যদি name-last-kbd-macroফর্ম্যাটটি ব্যবহার করেন (উপরের @ ফিলস দ্বারা উল্লিখিত) আপনি একটি স্ট্রিং দিয়ে শেষ করেন, কোনও ফাংশন নয়। fsetপ্রতীকটির সাথে বেঁধে দেওয়া আপনাকে এমএক্স ব্যবহার করে ম্যাক্রো চালিত করতে দেয়, তবে এটিকে লিস্প ( -> , -> ) থেকে কল না করে । আশ্চর্যের বিষয় হল, এমনকি এটির মাধ্যমে কল করাও কাজ করে না (যদিও আপনি এটি চালাতে ব্যবহার করতে পারেন )। commandptfunctionpnilcall-interactivelyexecute-kbd-macro
পাইরেলি

24

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

আপনি যদি এর মতো ম্যাক্রো রেকর্ড করেন:

F3 C-e M-b M-u C-a C-n F4

তারপরে M-x elmacro-show-last-macro upcase-last-wordএটির সাথে একটি বাফার তৈরি হয়:

(defun upcase-last-word ()
  "Change me!"
  (interactive)
  (move-end-of-line 1)
  (backward-word 1)
  (upcase-word 1)
  (move-beginning-of-line 1)
  (next-line 1 1))

17

Elmacro প্যাকেজ আপনার সাথে সঠিক গিয়ে Emacs পাতার মর্মর গত রেকর্ড ম্যাক্রো দেখতে দেয় M-x elmacro-show-last-macro


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