जवाबों:
एमएक्स टॉगल-रीड-ओनली
या Emacs के अधिक हाल के संस्करणों में
एमएक्स रीड-ओनली-मोड
मेरे विंडोज बॉक्स पर, जो एल्ट-एक्स के लिए सही त्वरित फ़ंक्शन को कॉल करने के लिए मेटा प्रॉम्प्ट और "टॉगल-रीड-ओनली" टाइप करने के लिए है।
यदि आप डिफ़ॉल्ट कीबोर्ड बाइंडिंग का उपयोग कर रहे हैं,
Cx Cq
(जिसे आप "कंट्रोल-एक्स कंट्रोल-क्यू" के रूप में जोर से पढ़ते हैं) का प्रभाव समान होगा। हालांकि, याद रखें कि एमएसीएस अनिवार्य रूप से असीम रूप से फिर से कॉन्फ़िगर करने योग्य है, आपका माइलेज अलग-अलग हो सकता है।
कमेंट्री से निम्नलिखित: आपको ध्यान देना चाहिए कि बफर की लेखन योग्य स्थिति फ़ाइल की लेखन योग्य अनुमति को नहीं बदलती है। यदि आप केवल पढ़ने के लिए फ़ाइल में लिखने का प्रयास करते हैं , तो आपको एक पुष्टिकरण संदेश दिखाई देगा। हालाँकि, यदि आप फ़ाइल के मालिक हैं, तो आप फ़ाइल पर अनुमतियाँ बदले बिना अपने परिवर्तन लिख सकते हैं ।
यह बहुत सुविधाजनक है अगर आप ऐड राइट की अनुमति के कई चरणों से गुजरने के बिना किसी फाइल में एक त्वरित बदलाव करना चाहते हैं, तो परिवर्तन लिखें, लेखन अनुमति निकालें। मैं उस अंतिम चरण को भूल जाता हूं, जिससे संभावित रूप से महत्वपूर्ण फाइलें बाद में आकस्मिक परिवर्तनों के लिए खुली रहती हैं।
सुनिश्चित करें कि आप 'फ़ाइल' को 'बफर' के साथ भ्रमित नहीं कर रहे हैं। आप केवल-पढ़ने के लिए और C-x C-q
( toggle-read-only
) के साथ बफ़र सेट कर सकते हैं । यदि आपके पास पढ़ने की अनुमति है, लेकिन लिख नहीं है, तो एक फ़ाइल, जब आप फ़ाइल पर जाते हैं तो आपको जो बफर मिलता है ( C-x C-f
या find-file
) स्वचालित रूप से रीड-ओनली मोड में डाल दिया जाएगा। यदि आप फ़ाइल सिस्टम में फ़ाइल पर अनुमतियाँ बदलना चाहते हैं, तो संभवतः dired
उस निर्देशिका पर शुरू करें जिसमें फ़ाइल शामिल है। बिंदी के लिए प्रलेखन जानकारी में पाया जा सकता है; C-h i (emacs)dired RET
।
inc
। एक आदमी को मछली सिखाना ...
जो मैंने पाया है M-x set-file-modes filename mode
इसने मेरे विंडोज विस्टा बॉक्स पर काम किया। उदाहरण के लिए:M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
(set-file-modes FILE 438)
(जहां 438 दशमलव 2#0110110110
या उसके बराबर है 666
)।
जैसा कि वहाँ किसी और ने उल्लेख किया है: एमएक्स टॉगल-रीड-ओनली काम करेगा।
हालाँकि, अब इसे हटा दिया गया है और Mx रीड-ओनली-मोड इसे करने का वर्तमान तरीका है, कि इसे Cx Cq की- बाइंडिंग के लिए सेट किया गया है ।
यदि केवल बफ़र (और फ़ाइल नहीं) केवल-पढ़ने के लिए है, तो आप उपयोग कर सकते हैं 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
, उनका मूल्यांकन करें (या emacs को पुनरारंभ करें)। इसके बाद आप फ़ाइल को वर्तमान बफ़र में लिख सकते हैं M-x set-buffer-file-writable
।
set-buffer
बाहर करने के लिए संपादित किया गया save-excursion
।
subseq
साथ बदल दिया है substring
। कि चेतावनी से बचना चाहिए।
यदि आप फ़ाइलों की निर्देशिका (dired) देख रहे हैं, तो आप Shift + M
फ़ाइल नाम पर उपयोग कर सकते हैं और दर्ज कर सकते हैं modespec
, chmod
कमांड में उपयोग की जाने वाली समान विशेषताएँ ।
M modespec <RET>
निर्देशिका में फाइलों पर अन्य उपयोगी कमांड देखें http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html
मैंने Vebjorn Ljosa के समाधान की कोशिश की, और यह पता चला कि कम से कम मेरे Emacs (22.3.1) में 'ट्रिम-राइट' के रूप में ऐसा कोई फ़ंक्शन नहीं है, जिसका उपयोग chodod आउटपुट के अंत में एक बेकार न्यूलाइन को हटाने के लिए किया जाता है।
कॉल को 'ट्रिम-राइट' में निकालने से मदद मिली, लेकिन अतिरिक्त पंक्ति के कारण स्थिति पंक्ति को "उछाल" बना दिया।
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
emacs में एक फ़ाइल खोलने के लिए करता और अपना पासवर्ड इनपुट करता हूं, मैं बिना रीड-ओनली मोड के फाइल को बदल सकता हूं।
आप जैसे कोई नया फ़ंक्शन लिख सकते हैं spacemacs/sudo-edit
।
toggle-read-only
केवल फाइल की बफर की स्थिति को पढ़ता है। यदि आप फ़ाइल के उपयोग के मोड को बदलना चाहते हैंdired
याchmod +w
फ़ाइल पर शेल कमांड के रूप में निष्पादित करना चाहते हैं ।