Yanıtlar:
Mx geçişli salt okunur
veya Emacs'in daha yeni sürümlerinde
Mx salt okunur modu
Windows kutumda bu, meta komut istemini açmak için Alt-x anlamına gelir ve doğru elisp işlevini çağırmak için "salt okunur" yazılır.
Varsayılan klavye bağlamalarını kullanıyorsanız,
Cx Cq
("Control-X Control-Q" olarak yüksek sesle okuduğunuz) aynı etkiye sahip olacaktır. Bununla birlikte, emacs'in esasen sonsuz şekilde yeniden yapılandırılabilir olduğu göz önüne alındığında, kilometrenizin değişebileceğini unutmayın.
Yorumların gelen takibi: Eğer tampon yazılabilir durum dosyasının yazılabilir izni değişmez unutmamalıdır. Salt okunur bir dosyaya yazmaya çalışırsanız , bir onay mesajı görürsünüz. Dosyayı kendi Ancak, yaptığınız değişiklikleri yazabiliriz olmadan dosya izinlerini değiştirerek.
Yazma izni ekleme, değişiklikleri yazma, yazma iznini kaldırma gibi birden çok adımdan geçmek zorunda kalmadan bir dosyada hızlı bir değişiklik yapmak istiyorsanız bu çok kullanışlıdır. Son adımı unutmaya meyilliyim, potansiyel olarak kritik dosyaları daha sonra yanlışlıkla değişikliklere açık bırakıyorum.
"Dosya" yı "arabellek" ile karıştırmadığınızdan emin olun. C-x C-q
( toggle-read-only
) İle arabellekleri salt okunur ve tekrar geri ayarlayabilirsiniz . Bir dosyayı okuma izniniz varsa ancak yazma izniniz varsa, dosyayı ( C-x C-f
veya find-file
) ziyaret ettiğinizde aldığınız arabellek otomatik olarak salt okunur moda alınacaktır. Dosya sistemindeki bir dosyanın izinlerini değiştirmek istiyorsanız, belki dired
dosyayı içeren dizinden başlayabilirsiniz . Yönlendirilen belgeler, bilgi bölümünde bulunabilir; C-h i (emacs)dired RET
.
inc
. Bir adama balık
Bulduğum şey M-x set-file-modes filename mode
Windows Vista kutumda çalıştı. Örneğin:M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
(set-file-modes FILE 438)
(burada 438, 2#0110110110
veya değerinin ondalık eşdeğeridir 666
).
Yukarıda başka biri tarafından belirtildiği gibi: Mx geçiş-salt okunur çalışacaktır.
Ancak, bu artık kullanımdan kaldırılmıştır ve Mx salt okunur modu bunu yapmanın şu anki yoludur, Cx Cq tuş bağlama olarak ayarlanmıştır .
Yalnızca arabellek (ve dosya değil) salt okunursa, kullanabilirsiniz toggle-read-only
, ki bu genellikleC-x C-q
.
Ancak dosyanın kendisi salt okunursa, aşağıdaki işlevi yararlı bulabilirsiniz:
(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)))))
İşlev aşağıdakilere bağlıdır unix-output
ve 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))
Fonksiyonları kendinize yerleştirin ~/.emacs.el
, değerlendirin (veya emac'leri yeniden başlatın). Daha sonra mevcut arabellekteki dosyayı ile yazılabilir hale getirebilirsiniz M-x set-buffer-file-writable
.
set-buffer
dışını koymak için düzenlendi save-excursion
.
subseq
ile değiştirdim substring
. Bu uyarıdan kaçınmalıdır.
Bir dosya dizinine (yönlendirilen) bakıyorsanız, bir Shift + M
dosya adı üzerinde kullanabilir modespec
ve chmod
komutta kullanılan aynı öznitelikleri girebilirsiniz .
M modespec <RET>
Http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html adresindeki bir dizinde yer alan dosyalardaki diğer yararlı komutlara bakın.
Vebjorn Ljosa'nın çözümünü denedim ve en azından Emacs'ımda (22.3.1) chmod çıktısının sonunda işe yaramaz bir yeni satırı kaldırmak için kullanılan 'trim-right' gibi bir işlev olmadığı ortaya çıktı.
'Düzeltme' çağrısının kaldırılması yardımcı oldu, ancak fazladan satırsonu nedeniyle durum satırının "geri dönmesine" neden oldu.
C-x C-q
işe yaramaz. Çünkü bir dosyayı kaydetmek için de izne ihtiyacınız var.
Kullandığım Spacemacs . Bu soruyu çözmek için bana uygun bir işlev veriyor. Kod takip ediyor.
(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))))
Ararım spacemacs/sudo-edit
Emacs'de bir dosya açmak için ve şifremi giriyorum, dosyayı salt okunur modu olmadan değiştirebiliyorum.
Gibi yeni bir fonksiyon yazabilirsiniz spacemacs/sudo-edit
.
toggle-read-only
sadece dosyanın değil, tamponun salt okunur durumunu değiştirir. Dosya modunu değiştirmek istiyorsanız, dosya üzerinde bir kabuk komutu olarak kullanındired
veya çalıştırınchmod +w
.