সিসি-মোডের জন্য পূর্ব-সংরক্ষণ-হুক


13

আমি cc-modeসংরক্ষণের আগে কোনও ক্রিয়াকলাপ সম্পাদন করতে কাস্টমাইজ করতে চাই । একটি সমাধান cc-modeহ'ল C-x C-sআমার প্রয়োজন মতো কাজ সম্পাদন করে তারপরে এটি সংরক্ষণ করে এমন কোনও ফাংশনের সাথে বাঁধতে কী-ম্যাপটি সংশোধন করা।

আমার প্রশ্ন হ'ল আমি কি এর জন্য কাস্টমাইজ করতে পারি এমন একটি হুক আছে? সিসি হুক্স ডক্স একটি উল্লেখ না before-save-hookজন্য বিশেষভাবে cc-mode। কিভাবে এটি একটি হুক মাধ্যমে করা উচিত?

বিকল্পভাবে, আমি এর মাধ্যমে কীভাবে করব defadvice? ম্যানুয়ালটি পড়া থেকে, আমি দেখতে পেলাম একমাত্র উপায় হ'ল সংরক্ষণের আগে পরামর্শটি সক্ষম করা এবং কাজ শেষ হওয়ার পরে অক্ষম করা। এটিকে ভারী মনে হচ্ছে। এর ব্যবহারের মূর্তিমান পদ্ধতি কী হবে advice?


3
আপনি যে ফাংশনটি যুক্ত করেন before-save-hookতা বর্তমান প্রধান মোডটি (যেমন (eq major-mode ...)) যাচাই করতে পারে এবং এটি আপনি কাস্টমাইজ করছেন এমন মোডের সাথে মেলে না, তবে কিছুই না।
কনস্টান্টাইন

@ কনস্ট্যান্টাইন একমত আমি এই বিষয়টির জন্য আরও কিছু "বিল্ট-ইন" আছে কিনা তা পরীক্ষা করে দেখতে চেয়েছিলাম। আইআইআরসি-র haskell-modeকমপক্ষে একটি after/before-saveহুক রয়েছে এবং আমি ধরে নিয়েছিলাম এটি প্রোগ-মোডের জন্য মানক অনুশীলন।
প্রধান

@ কনস্ট্যান্টাইন: আপনি কি নিজের মন্তব্যকে উত্তরে রূপান্তর করতে পারবেন (অবশ্যই কিছুটা প্রসারিত)?
ড্যান

1
উদাহরণ হিসাবে ব্যবহারের জন্য এই থ্রেডটি দেখুন after-save-hook; আপনি একই ধরণের পদ্ধতি ব্যবহার করতে পারেন তবে বিকল্প ব্যবহার করতে পারেন before-save-hook
ড্যান

উত্তর:


12

হুকের ক্রিয়াটিকে একটি বিশেষ প্রধান মোডে সীমাবদ্ধ করার একটি মোটামুটি সাধারণ উপায় হ'ল এর মান পরীক্ষা করা major-mode

উদাহরণস্বরূপ, এই হুকটি ব্যবহার করে বাফারগুলি সংরক্ষণ করার আগে একটি বার্তা মুদ্রণ করে c++-mode:

(defun my-c++-mode-before-save-hook ()
  (when (eq major-mode 'c++-mode)
    (message "It's never too early to start saving (C++ code)!")))

(add-hook 'before-save-hook #'my-c++-mode-before-save-hook)

পার্শ্ব নোট হিসাবে: কখনও কখনও এটি সিসি মোড থেকে কোনও প্রধান মোড উত্পন্ন হয়েছে কিনা তা পরীক্ষা করা কার্যকর হতে পারে; যদি আমরা চেক করে এটা করতে পারেন c-buffer-is-cc-modeনা nil:

(defun my-cc-mode-before-save-hook ()
  (when c-buffer-is-cc-mode
    (message "Saving a buffer with a major-mode derived from CC Mode.")))

19

বিকল্পভাবে, একটি স্থানীয় হুক ব্যবহার করুন:

(add-hook 'c++-mode-hook
          (lambda () (add-hook 'before-save-hook MY-HOOK-FUNC nil 'local)))

এই যোগ MY-HOOK-FUNCকরার বাফার-স্থানীয় before-save-hook প্রতিটি সি ++ মোড বাফার, অথবা সি ++ মোড এর উদ্ভূত একটি মোড যে কোন বাফার।

আমি এটিকে আরও মার্জিত বলে মনে করি যা স্পষ্টভাবে পরীক্ষা করে দেখছে major-modeএবং এর আরও সুবিধা রয়েছে যে আপনি অন্য কোনও বাফারকে প্রভাবিত না করে প্রতিটি বাফারের জন্য before-save-hook স্থানীয়ভাবে অক্ষম করতে পারবেন M-: (remove-hook 'before-save-hook MY-HOOK-FUNC 'local)


-1

আমার এলিসপ ফাইলগুলি স্বয়ংক্রিয়ভাবে সংকলনের জন্য যখন আমার সংরক্ষণ করা হয়েছিল তখন আমি এর আগে এমন কিছু প্রয়োজন ছিলাম, আমি এই জাতীয় একটি পদ্ধতির ব্যবহার করেছি (পদ্ধতির সিসি-মোডে রূপান্তর করেছি):

(add-hook 'c-common-hook #'(lambda ()
                              (add-hook 'before-save-hook #'(lambda ()
                                                               (funcall #'YOUR-FUNC-HOOK)))))

1
প্রথমে, মানে c-mode-common-hook? দ্বিতীয়ত, দেখে মনে হচ্ছে এটি before-save-hookপ্রথমবার আপনি কোনও Cসম্পর্কযুক্ত ভাষায় প্রবেশ করার পরে ফাংশনটি যুক্ত করবে, তবে তারপরে প্রতিটি বাফারে প্রতিটি সেভ করার ঠিক আগে সেই ফাংশনটি ডাকা হবে। ওপিকে যা করতে হবে তা হল একটি নির্দিষ্ট মোডে থাকা বাফারের উপর শর্তসাপেক্ষে ফাংশনটি চালানো (কীভাবে @ কনস্ট্যান্টাইনের মন্তব্য দেখুন)।
ড্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.