`ফাইন্ড-ফাইল-নাস্কলিক্টে কী সমস্যা আছে?


11

একটি সাম্প্রতিক ইন উত্তর দ্বারা lunaryorn , তিনি বলেন:

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

find-file-noselectএলিসপ প্রোগ্রামগুলিতে ফাইলগুলি পড়ার জন্য খারাপ ধারণা কেন কেউ ব্যাখ্যা করতে পারেন? একটি ভাল উপায় আছে কি? আমি জিজ্ঞাসা করছি কারণ আমি এটি আমার একটি প্রকল্পে ব্যবহার করার কথা ভাবছিলাম।


মনে হয়, এর good-practicesআগে কোনও ট্যাগ ছিল না ; এটি ব্যবহার করা কি ভাল ধারণা?
এমবার্ক

আমি মনে করি যে good-practices"মেটা ট্যাগ," যা হয় বিভাগ আওতায় ফেলা হয় উপর frowned দঃপূঃ দ্বারা।
নিসপিও

1
@ নিস্পিও আমি মনে করি এটি একটি বৈধ ট্যাগ, তবে আমরা অবশ্যই এটি মেটাতে নিয়ে যেতে পারি।
মালবারবা

1
@ এসিপিও: আমি এই নিবন্ধটি দিয়ে স্কিম করেছি, এবং আমি তাতে রাজি নই। তবে আমিই সিদ্ধান্ত নেব না। ;-)
এমবর্ক

উত্তর:


14

টিএল; ডিআর : আসলে কী ঘটে থাকে সে সম্পর্কে find-file-noselectআপনার কোনও নিয়ন্ত্রণ না থাকায় এবং ব্যবহারকারীরা কীভাবে সক্ষম হয়েছেন তার উপর নির্ভর করে আপনি বাফারে স্বেচ্ছাসেবী ছোটখাট মোডগুলি সক্ষম করতে পারেন init.el। এছাড়াও, ক্লিনআপ করা শক্ত।

ব্যবহার করুন with-temp-bufferএবং insert-file-contentsপরিবর্তে। আপনার যদি বাফারে নির্দিষ্ট প্রধান বা গৌণ পদ্ধতি প্রয়োজন হয় তবে এগুলি স্পষ্টভাবে সক্ষম করুন । ফাইলগুলি লিখতে, with-temp-fileপরিবর্তে ব্যবহার করুন, যা name এর নাম থাকা সত্ত্বেও ar আপনাকে স্বেচ্ছাচারিত ফাইলগুলিতে লিখতে দেয়।

ক্ষতিকর দিক

find-file-noselectহয়েছে অনেক , পার্শ্ব প্রতিক্রিয়া এর সহ

  • ইন্টারেক্টিভভাবে প্রশ্ন জিজ্ঞাসা করা (এটি একা অ-ইন্টারেক্টিভ ব্যবহারে যাওয়া নয়),
  • পঠনযোগ্য ফাইলগুলির জন্য স্বয়ংক্রিয়ভাবে দর্শন মোড সক্ষম করে,
  • অন্যথায় সাধারণ মোডে প্রবেশ করা,
  • এবং চলমান find-file-hook

নিজেই সাধারণ মোড

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

যেহেতু সমস্ত হুক চালিত হয়, আপনি ছোটখাটো অসুবিধাগুলি থেকে (যদি অনাকাঙ্ক্ষিত ছোটখাট মোডগুলি সক্ষম করা হয়) থেকে শুরু করে বড় হাবশায় (যদি ব্যবহারকারী কোনও হুক ফাংশন যুক্ত করেন যা প্রত্যাশা করে) থেকে সমস্ত ক্ষুদ্রতর মোড এবং হুক ফাংশনগুলি ব্যবহারকারী তাদের সক্ষম করে init.elতোলে যার ফলে তাদের সক্ষম করা হয়েছে everything একটি ইন্টারেক্টিভ প্রসঙ্গ থেকে কল করা হবে)।

উদাহরণের জন্য https://github.com/flycheck/flycheck/issues/366 দেখুন । find-file-noselectফ্লাই চেক দ্বারা ডেটা ফাইলটিকে সিনট্যাক্স-পরীক্ষিত করার ফলে ডেটা ব্যবহার করা হয়েছিল এবং এটি যেহেতু ইমাস শট ডাউন-এ ঘটেছিল, তাই কোনও অস্থায়ী ফাইল পিছনে রেখে সঠিকভাবে আবার পরিষ্কার করার সময় হয়নি।

পরিষ্কার কর

সঙ্গে find-file-noselectবাফার আবার হত্যা করার আপনি অতিরিক্ত সাবধান হতে হবে। find-file-noselectআপনার জন্য এটি না।

আপনাকে কোনও জায়গায় বাফারটি মনে রাখা দরকার, এবং unwind-protectস্থানীয়ভাবে বহিরাগত প্রস্থানের ক্ষেত্রেও বাফার মারা যাওয়ার বিষয়টি নিশ্চিত করে সাবধানতার সাথে ব্যবহার করতে হবে।

বিকল্প

ফাইলগুলি পড়ার জন্য, ব্যবহার করুন with-temp-bufferএবং insert-file-contentsযা কেবলমাত্র সর্বাধিক প্রাথমিক কাজগুলি করে, যেমন কোডিং সিস্টেম রূপান্তর, তবে প্রশ্ন জিজ্ঞাসা করে না, হুক সক্ষম করে, বা স্থানীয় ভেরিয়েবল সেটআপ করে:

(with-temp-buffer
  (insert-file-contents (locate-user-emacs-file "foo.el"))
  ;; Enter the major mode explicitly
  (emacs-lisp-mode)
  ;; …
  )

with-temp-buffer শরীরের শেষে অস্থায়ী বাফারটিকে সঠিকভাবে হত্যা করার জন্য যত্ন নেয়।

ফাইলগুলি লিখতে, ব্যবহার করুন with-temp-file, যা একটি অস্থায়ী বাফার তৈরি করে এবং তার দেহের শেষে প্রদত্ত ফাইলের নামটিতে সামগ্রীগুলি লিখে দেয়:

(with-temp-file  (locate-user-emacs-file "foo.el")
  (prin1 (list 'my 'data) (current-buffer)))

10

এলিসপ ম্যানুয়ালটিতে 24.3 বিভাগ থেকে:

কোনও ফাইলের বিষয়বস্তু বাফারে অনুলিপি করতে, ফাংশনটি ব্যবহার করুন insert-file-contents। ( insert-fileলিস্প প্রোগ্রামে কমান্ডটি ব্যবহার করবেন না , কারণ এটি চিহ্নিত করে))

এর জন্য এলিসপ ডকুমেন্টেশন সন্ধান find-file-noselectকরা স্পষ্ট যে এটি কেবল একটি বাফারে ফাইল পড়ার চেয়ে আরও অনেক কিছু করে। সম্ভবত যারা এই ফাংশনটি ব্যবহার করে এটি খারাপ ধারণা বলে মনে করেন তারা সম্ভবত অযাচিত, পার্শ্ব প্রতিক্রিয়া সম্পর্কে ভাবছেন? আমার ধারণা এটি আপনি কী অর্জন করতে চান তার উপর নির্ভর করে। আপনি যতটা সম্ভব পরিষ্কার / ছোঁয়াচে বাফার সামগ্রী রাখতে চান তবে পুরানো এবং বিশ্বাসযোগ্য with-temp-buffer+ insert-file-contentsসংমিশ্রণটি ব্যবহার করা ভাল ধারণা হতে পারে । আপনি যদি বাফার সামগ্রীগুলি যে উত্পাদনগুলির নিকটবর্তী হতে চান তবে find-fileসম্ভবত আপনি ব্যবহার করতে চান find-file-noselect? অথবা সম্ভবত সে সম্পর্কে ভাবছিল find-file;)


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

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