নতুন পরামর্শ ব্যবস্থা সম্পর্কে অন্য প্রশ্নের উত্তর থেকে অনুসরণ করা :
পুরানো শৈলীতে advice.el
, কোনও সদস্যদের যাতে এতটা হেরফের না করা হয় সে সম্পর্কে কোনও বক্তব্য না দিয়ে পরামর্শ দেওয়া ফাংশনের যুক্তি তালিকার পৃথক সদস্যদের কৌশলগতভাবে পরিচালনা করা সম্ভব হয়েছিল। উদাহরণস্বরূপ, নিম্নলিখিত পরামর্শ:
(defadvice ansi-term (around prompt-for-name last)
(let ((name (read-from-minibuffer "Tag: ")))
(and (not (string= name ""))
(ad-set-arg 1 (concat "Term: " name)))
ad-do-it))
একটি ansi-term
কলটিতে বাফার-নাম যুক্তির (alচ্ছিক) বিধানের অনুমতি দেয় , ansi-term
এখনও তার নিজস্ব ইন্টারেক্টিভ ফর্ম অনুযায়ী অনুরোধ করে তার প্রথম যুক্তিটি অর্জন করবে।
(পরবর্তী রেফারেন্সের জন্য, ansi-term
এর স্বাক্ষর রয়েছে (PROGRAM &optional BUFFER-NAME)
এবং এর ইন্টারেক্টিভ ফর্মটি বেশ কয়েকটি সম্ভাব্য ডিফল্টের সাথে প্রোগ্রামের জন্য অনুরোধ করে তবে বুফার-NAME সম্পর্কিত কিছুই করে না))
এটি সম্ভব কিনা তা আমি নিশ্চিত নই nadvice.el
। যদি এটি হয় তবে আমি কীভাবে এটি সম্পন্ন করতে পারি তা নিশ্চিত। আমি প্রস্তাবিত ফাংশনটির যুক্তি তালিকাটি প্রতিস্থাপনের বেশ কয়েকটি উপায় খুঁজে পেয়েছি ।
উদাহরণস্বরূপ, * তথ্য * (এলিস্প) থেকে পরামর্শ সংযুক্তকারীগুলি :
`:filter-args' Call FUNCTION first and use the result (which should be a list) as the new arguments to pass to the old function. More specifically, the composition of the two functions behaves like: (lambda (&rest r) (apply OLDFUN (funcall FUNCTION r)))
অন্যান্য সংযুক্তকারীগুলি অনুরূপ ক্ষমতা সরবরাহ করে এবং তাদের মধ্যে সাধারণ থ্রেডটি হ'ল যখন কোনও ফাংশনের যুক্তির তালিকাটি প্রতিস্থাপন করা হতে পারে, কাটা হতে পারে, প্রসারিত করা যাবে এবং আল, ততক্ষণ তালিকার প্রদত্ত অবস্থানে যুক্তিটি সংশোধন করার জন্য ফাংশন পরামর্শের কোনও আপাত উপায় নেই without এটি বাকি সম্পর্কে কিছু জোর দেওয়া ।
আলোচনার ক্ষেত্রে পরামর্শ লেখকের পক্ষে ansi-term
কেবলমাত্র একটি বাফার নাম পাস করা অসম্ভব বলে মনে হয় , কারণ একটি তালিকা তৈরি করা সম্ভব নয় যার পজিশন 1 এর মান রয়েছে তবে কিছুই নয়, এমনকি nil
পজিশনেও নেই। সাধারণ ক্ষেত্রে, পরামর্শের লেখকের পক্ষে অবস্থান 0 এর বাইরে যুক্তিগুলি নির্বিচারে সংশোধন করা অসম্ভব বলে মনে হয়।
এটি দুর্ভাগ্যজনক বলে মনে হচ্ছে, অনুরূপ প্রভাব তৈরি করার জন্য, কপি-পেস্ট কোডটি প্রয়োজনীয়: বিশেষত, হয় আমি ansi-term
ইন্টারেক্টিভ ফর্মটি অনুলিপি করতে পারি এবং এটি আমার স্বাদে প্রসারিত করতে পারি, বা আমি ansi-term
সম্পূর্ণ অনুলিপি করতে পারি এবং একইভাবে এটি প্রসারিত করতে পারি। উভয় ক্ষেত্রেই, আমার এখন আমার থিম ফাইলটিতে ইমাস লিস্প বিতরণের অংশটি পুনরায় সংজ্ঞায়িত করতে হবে, যা স্থায়িত্ব এবং নান্দনিকতা উভয় ক্ষেত্রেই আমাকে অনাকাঙ্ক্ষিত হিসাবে আঘাত করে।
তাহলে আমার প্রশ্নটি হল: এই ধরণের আর্গুমেন্ট লিস্টের ম্যাঙ্গলিংয়ের মাধ্যমে কি কাজ করা যেতে পারে nadvice.el
? যদি তাই হয়, কিভাবে?