كيف أقوم بتغيير وضع القراءة/الكتابة لملف باستخدام Emacs؟

StackOverflow https://stackoverflow.com/questions/180910

  •  05-07-2019
  •  | 
  •  

سؤال

إذا تم تعيين ملف على وضع القراءة فقط، فكيف يمكنني تغييره إلى وضع الكتابة والعكس من داخل Emacs؟

هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

وM-س-تبديل للقراءة فقط

وأو في إصدارات أحدث من إيماكس

<اقتباس فقرة>   

وM-س للقراءة فقط وضع

في بلدي ويندوز مربع، الذي يرقى إلى البديل-X لإظهار موجه الفوقية والكتابة "تبديل للقراءة فقط" لاستدعاء الدالة elisp الصحيحة.

إذا كنت تستخدم الارتباطات لوحة المفاتيح الافتراضية،

<اقتباس فقرة>   

وC-س C-ف

و(التي تقرأ بصوت عال بأنه "مراقبة-X تحكم-Q") سوف يكون له نفس التأثير. تذكر، مع ذلك، بالنظر إلى أن ايماكس هو مطلق أساسا إعادة تكوين، قد تختلف المسافة المقطوعة.

متابعة من التعليق: يجب ملاحظة أن الوضع قابل للكتابة من المخزن المؤقت لا يغير إذن للكتابة من الملف. إذا حاولت الكتابة خارج لفقط <م> ملف ، سترى رسالة تأكيد القراءة. ومع ذلك، إذا كنت تملك الملف، يمكنك كتابة التغييرات <م> بدون تغيير الأذونات على الملف.

وهذا أمر مريح جدا إذا كنت ترغب في إجراء تغيير سريع لملف دون الحاجة إلى الذهاب من خلال خطوات متعددة من إذن الكتابة إضافة أو كتابة التغييرات، إزالة إذن الكتابة. أنا أميل إلى أن ننسى أن الخطوة الأخيرة، وترك ملفات أساسية على الأرجح مفتوحا لإجراء تغييرات مقصودة في وقت لاحق.

نصائح أخرى

وتأكد من أنك لم تكن مربكة 'ملف' مع 'العازلة. يمكنك تعيين مخازن للقراءة فقط، ويعود مرة أخرى مع C-x C-q (toggle-read-only). إذا كان لديك إذن لقراءة، ولكن ليس الكتابة، ملف، المخزن المؤقت الذي تحصل عليه عندما تقوم بزيارة ملف (C-x C-f أو find-file) سيتم وضعها في وضع للقراءة فقط تلقائيا. إذا كنت ترغب في تغيير الأذونات على ملف في نظام الملفات، ربما تبدأ مع dired على الدليل الذي يحتوي على الملف. وثائق عن dired يمكن العثور عليها في المعلومات. C-h i (emacs)dired RET.

ما وجدته هو M-x set-file-modes filename mode

وعملت في بلدي مربع ويندوز فيستا. على سبيل المثال: M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666

كما ذكر هناك من قبل شخص آخر: M-x تبديل للقراءة فقط ستعمل.

ومع ذلك، فقد تم الآن إهمال هذا و وضع القراءة فقط M-x هي الطريقة الحالية للقيام بذلك، والتي تم ضبطها عليها ج-س ج-ف مفتاح ملزمة.

CTRL + X + CTRL + Q

إذا للقراءة فقط فقط المخزن المؤقت (وليس الملف)، يمكنك استخدام 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.

إذا كنت تبحث في دليل من الملفات (dired)، ثم يمكنك استخدام Shift + M على اسم الملف وأدخل modespec، وهي نفس الصفات المستخدمة في الأمر chmod.
M modespec <RET>

واطلع على أوامر مفيدة أخرى على الملفات في قائمة دليل على http://www.gnu.org/s/libtool /manual/emacs/Operating-on-Files.html

وحاولت من حل فيبجورن Ljosa، وواتضح أن ما لا يقل في بلدي ايماكس (22.3.1) لم تكن هناك مثل هذه الوظيفة باسم 'تقليم اليمين "، والذي يستخدم لإزالة أي سطر جديد غير مجدية في نهاية الناتج CHMOD.

وإزالة الدعوة إلى "تقليم اليمين" ساعد، ولكن جعل الوضع الصف "قفزة كبيرة" بسبب السطر إضافية.

وC-x C-q لا طائل منه. لأن برنامجك أيضا تحتاج إلى إذن لحفظ الملف.

Spacemacs . يطيب لي وظيفة ملائمة لحل هذه المسألة. رمز يلي.

(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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top