আমি ইমাস ব্যবহার করে কোনও ফাইলের জন্য পঠন / লেখার মোড কীভাবে পরিবর্তন করব?


126

যদি কোনও ফাইল কেবলমাত্র মোডে পড়ার জন্য সেট করা থাকে তবে আমি কীভাবে এটি ইম্যাক্সের মধ্যে থেকে মোড এবং বিপরীতে লিখতে পরিবর্তন করব?

উত্তর:


178

এমএক্স টোগল-কেবল পঠনযোগ্য

অথবা ইমাক্সের আরও সাম্প্রতিক সংস্করণগুলিতে

এমএক্স-পঠনযোগ্য-মোড

আমার উইন্ডোজ বাক্সে, এটি মেটা প্রম্পট আনতে Alt-x এর পরিমাণ এবং সঠিক এলিস্প ফাংশনটি কল করতে "টোগল-পঠনযোগ্য কেবল" টাইপ করে।

আপনি যদি ডিফল্ট কীবোর্ড বাইন্ডিং ব্যবহার করেন,

Cx Cq

(যা আপনি "কন্ট্রোল-এক্স কন্ট্রোল-কিউ" হিসাবে জোরে পড়েন) এর একই প্রভাব থাকবে। তবে মনে রাখবেন যে ইমাকগুলি মূলত অসীমভাবে পুনরায় কনফিগারযোগ্য, আপনার মাইলেজটি ভিন্ন হতে পারে।

ভাষ্যটি অনুসরণ করা: আপনার অবশ্যই লক্ষ্য করা উচিত যে বাফারের লিখনযোগ্য স্থিতি ফাইলটির লেখার অনুমতি পরিবর্তন করে না। আপনি যদি কেবল পঠনযোগ্য ফাইলটিতে লেখার চেষ্টা করেন তবে আপনি একটি নিশ্চিতকরণ বার্তা দেখতে পাবেন। তবে আপনি যদি ফাইলটির মালিক হন তবে আপনি ফাইলের অনুমতিগুলি পরিবর্তন না করে আপনার পরিবর্তনগুলি লিখতে পারেন ।

আপনি যদি লেখার অনুমতি যুক্ত করার, পরিবর্তনগুলি লেখার, লেখার অনুমতি অপসারণের একাধিক পদক্ষেপ না নিয়েই কোনও ফাইলটিতে দ্রুত পরিবর্তন করতে চান তবে এটি খুব সুবিধাজনক। আমি সেই শেষ পদক্ষেপটি ভুলে যাব, পরে দুর্ঘটনাজনিত পরিবর্তনের জন্য সম্ভাব্য সমালোচনামূলক ফাইলগুলি খোলা রেখে।


5
হাই, যেমন jfm3 থেকে উত্তরে বলা হয়েছে toggle-read-onlyকেবলমাত্র ফাইলটির নয় কেবল বাফারের পঠনযোগ্য স্থিতি টগল করে। আপনি যদি ফাইলের মোড পরিবর্তন করতে চান diredবা ফাইলের chmod +wশেল কমান্ড হিসাবে ব্যবহার করতে পারেন ute
ড্যানিয়েলপো

সত্য, আপনি মোডটি এইভাবে পরিবর্তন করবেন। তবে, আপনি যদি নিজের মালিকানাধীন কেবল পঠনযোগ্য ফাইলটিতে পয়েন্ট করে বাফারে কেবল পঠন মোডে টগল করেন তবে আপনি এটি সম্পাদনা করতে এবং আপনার পরিবর্তনগুলি লিখতে সক্ষম হবেন (অবশ্যই একটি নিশ্চিতকরণের প্রশ্ন থাকবে) will
বব ক্রস

উপরের মন্তব্যে অনুসরণ করা এবং উত্তরে পাঠ্য যুক্ত করা।
বব ক্রস

5
ইমাক্সের সাম্প্রতিক সংস্করণগুলিতে, টগল-পঠনযোগ্য কেবল পঠনযোগ্য-মোডের সাথে প্রতিস্থাপন করা হয়েছে।
বেন কী

15

নিশ্চিত হয়ে নিন যে আপনি 'ফাইল' কে 'বাফার' দিয়ে বিভ্রান্ত করছেন না। আপনি বাফারকে কেবল পঠন করতে সেট করতে পারেন এবং C-x C-q( toggle-read-only) দিয়ে আবার ফিরে যেতে পারেন । যদি আপনার কাছে ফাইল পড়ার অনুমতি রয়েছে, তবে একটি ফাইল নেই, তবে আপনি ফাইলটি দেখার সময় বাফারটি পাবেন ( C-x C-fবা find-file) কেবলমাত্র পঠন মোডে স্বয়ংক্রিয়ভাবে স্থাপন করা হবে। আপনি যদি ফাইল সিস্টেমে কোনও ফাইলের অনুমতি পরিবর্তন করতে চান তবে সম্ভবত diredফাইলটি যে ডিরেক্টরিটি রয়েছে সেগুলি দিয়েই শুরু করুন। Dided জন্য ডকুমেন্টেশন তথ্য পাওয়া যাবে; C-h i (emacs)dired RET


inc। একজন মানুষকে মাছ
শিখিয়ে দিন

12

যা পেয়েছি তা হ'ল M-x set-file-modes filename mode

এটি আমার উইন্ডোজ ভিস্তার বাক্সে কাজ করেছিল। উদাহরণ স্বরূপ:M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666


আমার মতে, এটি জিজ্ঞাসা করা সঠিক প্রশ্নের সঠিক উত্তর।
ম্যাথিয়াস ডাহল

1
এলিস্পে, এটি কাজ করেছে: (set-file-modes FILE 438)(যেখানে 438 এর দশমিক সমতুল্য 2#0110110110বা 666)।
দক্ষ মোদী

7

সেখানে অন্য কারও দ্বারা উল্লিখিত: এমএক্স টগল-পঠন-কেবলমাত্র কাজ করবে।

তবে এটি এখন অবচয় করা হয়েছে এবং এমএক্স-পঠন-কেবল- মোডই এটি করার বর্তমান উপায়, এটি সিক্স সি কিউ বাইন্ডিংতে সেট করা হয়েছে ।



6

যদি কেবল বাফার (এবং ফাইলটি নয়) কেবল পঠনযোগ্য হয় তবে আপনি ব্যবহার করতে পারেন toggle-read-onlyযা সাধারণত আবদ্ধ C-x C-q

যদি ফাইলটি নিজেই কেবল পঠনযোগ্য হয় তবে নীচের ফাংশনটি আপনাকে দরকারী মনে করতে পারে:

(defun set-buffer-file-writable ()
  "Make the file shown in the current buffer writable.
Make the buffer writable as well."
  (interactive)
  (unix-output "chmod" "+w" (buffer-file-name))
  (toggle-read-only nil)
  (message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))

ফাংশন উপর নির্ভর করে unix-outputএবং trim-right:

(defun unix-output (command &rest args)
  "Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error.  The error message is the first line of the output."
  (let ((output-buffer (generate-new-buffer "*stdout*")))
    (unwind-protect
     (let ((return-value (apply 'call-process command nil
                    output-buffer nil args)))
       (set-buffer output-buffer)
       (save-excursion 
         (unless (= return-value 0)
           (goto-char (point-min))
           (end-of-line)
           (if (= (point-min) (point))
           (error "Command failed: %s%s" command
              (with-output-to-string
                  (dolist (arg args)
                (princ " ")
                (princ arg))))
           (error "%s" (buffer-substring-no-properties (point-min) 
                                   (point)))))
         (buffer-substring-no-properties (point-min) (point-max))))
      (kill-buffer output-buffer))))

(defun trim-right (bag string &optional start end)
  (setq bag (if (eq bag t) '(?\  ?\n ?\t ?\v ?\r ?\f) bag)
    start (or start 0)
    end (or end (length string)))
  (while (and (> end 0)
          (member (aref string (1- end)) bag))
    (decf end))
  (substring string start end))

আপনার মধ্যে ফাংশন রাখুন ~/.emacs.el, সেগুলি মূল্যায়ন করুন (বা ইমাকগুলি পুনরায় চালু করুন)। তারপরে আপনি বর্তমান বাফারে ফাইলটি লেখার মাধ্যমে তৈরি করতে পারেন M-x set-buffer-file-writable


আমি যখন এই কোডটি সহ আমার .emacs সংকলন করার চেষ্টা করি তখন আমি "সতর্কতা: সেভ-সফরে সেট-বাফার দ্বারা পরাজিত" বার্তাটি পাই।
অ্যালান

1
@ অ্যালান, এর set-bufferবাইরে রাখার জন্য সম্পাদিত save-excursion
Vebjorn Ljosa

এই পরিবর্তনের জন্য ধন্যবাদ, যা সতর্কবার্তাটি দূর করেছে। তবে, আর একটি আছে: "সতর্কতা: রান পর্বের সময় ডাকা ক্লিপ প্যাকেজ থেকে ফাংশন` সাবকিউ "। আমি আমার .emacs- এ যোগ করার পরেও (এভাল-কখন-কম্পাইল (প্রয়োজন 'সিএল)) এড়াতে পারি না।
অ্যালান

এই থ্রেড দেখুন । আমি কোডটি সম্পাদনা করেছি এবং এখনই প্রতিস্থাপন subseqকরেছি substring। এটি সতর্কতা এড়ানো উচিত।
Vebjorn Ljosa

এখন আমি ইমাস 24-এ গিয়েছি, আমি "সতর্কতা: ফাংশন` ডেস্ক "সংজ্ঞায়িত করা যায়নি বলে বার্তাটি পেয়েছি।
অ্যালান

3

আপনি যদি ফাইলগুলির একটি ডিরেক্টরি দেখেন (ডায়ার্ড), তবে আপনি Shift + Mকোনও ফাইলের নাম ব্যবহার করতে পারেন modespecএবং chmodকমান্ডটিতে একই বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন ।
M modespec <RET>

Http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html ডিরেক্টরি ডিরেক্টরিতে ফাইলগুলিতে অন্যান্য দরকারী কমান্ডগুলি দেখুন


0

আমি Vebjorn Ljosa এর সমাধানটি চেষ্টা করে দেখেছি এবং এটি প্রমাণিত হয়েছে যে কমপক্ষে আমার Emacs (22.3.1) তে 'ট্রিম-রাইট' এর মতো কার্যকারিতা নেই, যা chmod আউটপুট শেষে একটি অকেজো নিউলাইন সরানোর জন্য ব্যবহৃত হয়।

'ট্রিম-ডান' থেকে কল সরিয়ে ফেলা সহায়তা করেছে, তবে অতিরিক্ত নিউলাইনের কারণে স্থিতি সারিটিকে "বাউন্স" করে তুলেছে।


এটি অন্তর্ভুক্ত করতে ভুলে গেছেন… এখনই যুক্ত হয়েছে।
Vebjorn Ljosa

0

C-x C-qঅকেজো কারণ আপনারও একটি ফাইল সংরক্ষণ করার অনুমতি প্রয়োজন।

আমি স্পেসম্যাকস ব্যবহার করি । এটি আমাকে এই প্রশ্নটি সমাধান করার জন্য একটি সুবিধাজনক ফাংশন দেয়। কোড অনুসরণ করা হচ্ছে।

(defun spacemacs/sudo-edit (&optional arg)
  (interactive "p")
  (if (or arg (not buffer-file-name))
      (find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

আমি ফোন করি spacemacs/sudo-edit ইম্যাকগুলিতে একটি ফাইল খুলতে এবং আমার পাসওয়ার্ড ইনপুট জন্য , আমি কেবল পঠনযোগ্য মোড ছাড়াই ফাইলটি পরিবর্তন করতে পারি।

আপনি একটি নতুন ফাংশন লিখতে পারেন spacemacs/sudo-edit

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