วิธีแก้ไขสิทธิ์การเขียนบนบัฟเฟอร์ปัจจุบันใน emacs


17

เป็นไปได้หรือไม่ที่จะเปลี่ยนสิทธิ์การเขียนบนไฟล์จาก emacs ภายในโดยไม่ต้องฆ่า / เปิดบัฟเฟอร์อีกครั้ง?

บางครั้งฉันลืมที่จะแก้ไขการอนุญาตในไฟล์ก่อนที่จะเปิด ฉันสามารถแก้ไขสิทธิ์จากภายใน emacs ( M-! chmod u+w filename) แต่นี่ไม่ได้อัปเดตบัฟเฟอร์ซึ่งยังคงมีการป้องกันการเขียนและปฏิเสธที่จะแก้ไขไฟล์

มีวิธีอัปเดตการอนุญาตภายในบัฟเฟอร์หรือไม่ จุดโบนัสถ้าฉันสามารถกำหนดให้ทางลัด!

คำตอบ:


16

หลังจากเปลี่ยนโหมดไฟล์และก่อนที่จะทำการแก้ไขใด ๆ ให้รันM-x revert-bufferเพื่อโหลดไฟล์อีกครั้ง หากไฟล์สามารถเขียนได้ในขณะนี้บัฟเฟอร์จะไม่สามารถอ่านได้อย่างเดียวอีกต่อไป

หรือพิมพ์C-x C-q( read-only-mode) ทำให้บัฟเฟอร์ไม่อ่านอย่างเดียวอีกต่อไป คุณสามารถแก้ไขและบันทึกได้ แต่คุณจะได้รับข้อความยืนยันการถามว่าคุณต้องการเขียนทับไฟล์แบบอ่านอย่างเดียวหรือไม่


ในขณะที่ Cx Cq ยังคงใช้งานได้ในขณะที่ emac 24.3 จะเรียกใช้โหมดอ่านอย่างเดียวแทนการสลับแบบอ่านอย่างเดียวและสลับเป็นแบบอ่านอย่างเดียวจะถูกปิดใช้งาน
Paul Rubel

9

ในการเปลี่ยนสถานะอ่านอย่างเดียวของบัฟเฟอร์ให้ใช้C-xC-q(สลับread-only-mode) ในการเปลี่ยนการอนุญาตไฟล์คุณสามารถเรียกใช้diredในไดเรกทอรีของไฟล์ ( C-xd) ค้นหาไฟล์โดยC-sและใช้Mเพื่อเปลี่ยนโหมด


3
เห็นได้ชัดว่าคุณพลาดไปdired-jump(ปกติผูกไว้กับC-x C-j) มันทำงานdiredและข้ามไปที่บรรทัดสำหรับไฟล์ที่คุณกำลังแก้ไข
cjm

2
@cjm: dired-xมันไม่ทำงานสำหรับฉันจนกว่าฉันโหลด
choroba

ขออภัยฉันลืมว่าฉันได้ตั้งค่า autoload dired-jumpประมาณ 20 ปีที่แล้ว ฉันแนะนำมัน
cjm

น่ารำคาญtoggle-read-onlyถูกแทนที่ด้วยread-only-modeถึงแม้ว่าการผูกจะเหมือนกัน
Charlie Martin

2

หากเวิร์กโฟลว์ต้องการเปลี่ยนการอนุญาตไฟล์ของบัฟเฟอร์ซ้ำ ๆ การมีฟังก์ชั่นที่กำหนดเองจะช่วยได้ดังต่อไปนี้

ใช้งานได้กับเครื่องยูนิกซ์เท่านั้น (สั่งการระบบคำสั่ง "chmod"

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.