การพับโค้ดที่สามารถดำเนินการได้ใน Emacs fringe


15

ฉันต้องการกำหนดค่าขอบ Emacs ของฉันเพื่อแสดงส่วนการพับโค้ด

ตัวอย่างเช่น BBEdit บน Mac จะแสดงสิ่งต่อไปนี้เมื่อแก้ไขไฟล์ JSON:

เครื่องหมายการพับโค้ด BBEdit

การทำเครื่องหมายด้วยตนเองนั้นสามารถทำได้: การคลิกที่เครื่องหมายจะขยายหรือยุบส่วนรหัสที่เกี่ยวข้อง เมื่อเอกสารไม่มีโหมดที่รองรับการพับรหัสขอบจะไม่ปรากฏขึ้น

เป็นไปได้ไหมที่จะขยายขีดความสามารถของ Emacs ในลักษณะดังกล่าว?

คำตอบ:


16

Hideshowvisเพิ่มไอคอนที่คลิกได้ลงบนขอบ แต่ด้วยเหตุผลแปลก ๆ บางอย่างมันไม่รวมอยู่ใน elpa หรือ melpa โดยค่าเริ่มต้นจะแสดง-ในสวัสดิการสำหรับรหัสที่สามารถพับเก็บได้และจากนั้น elides ...เนื้อหาด้วย ด้วยการเปิดใช้งานการhideshowvis-symbolsเพิ่ม+และทำให้คำแนะนำสำหรับเนื้อหาแบบพับได้ดังขึ้นเล็กน้อย

ตัวสไลด์โชว์ยังอนุญาตให้การคลิกเมาส์บนบรรทัดเพื่อสลับการแสดงผลโดยใช้S-mouse-2(หรือเลื่อนการคลิกกลาง) hs-minor-modeที่ถูกสร้างขึ้นในและสามารถเปิดใช้งานด้วย


1
ดี hideshowvis.el ใช้แฮ็คที่คล้ายกับที่ฉันแนะนำ แต่ไม่มีความน่าเกลียดที่จะต้องดับเบิลคลิก (โดยการอ่านเหตุการณ์ดิบ) ขอบคุณสำหรับตัวชี้
Sigma

3
Hideshowvis.elใช้งานได้ดีขอบคุณ! ฉันมีปัญหาบางอย่างที่ทำให้มันทำงานกับไฟล์ JSON ด้วยjs3-mode; เพื่อหลีกเลี่ยงปัญหาเหล่านี้ฉันต้องให้แน่ใจว่า hideshowvis เท่านั้นที่เปิดใช้งานหลังจากการกระทำทั้งหมดในคิวเช่น:(dolist (hook '(emacs-lisp-mode-hook c++-mode-hook)) (add-hook hook 'hideshowvis-enable)) (defun hideshowvis-enable-immediately () (run-at-time "0 seconds" nil 'hideshowvis-enable)) (add-hook 'js3-mode-hook 'hideshowvis-enable-immediately)
Mathieu Legrand

มันอยู่ใน Melpa ตอนนี้
dshepherd

4

ในขณะที่ฉันไม่คิดว่ารายการที่ได้รับสามารถได้รับการคลิกโดยตรง (ฉันอาจจะผิด), แฮ็คที่เป็นไปได้จะถูกผูกไว้ (kbd "<left-fringe> <double-mouse-1>")

ตั้งแต่การคลิกครั้งแรกจะย้ายจุดไปยังจุดเริ่มต้นของบรรทัดที่สอดคล้องกับไอคอนการทดสอบค่า(point)ในฟังก์ชั่นการพับ (un) สมมุติของคุณจะช่วยให้คุณระบุส่วนของรหัสที่จะพับ (un) หรือถ้า คุณต้องทำอะไรเลย (ในกรณีที่ไม่มีไอคอนแสดงขอบสำหรับบรรทัดนี้)

ตัวอย่างที่มีบัฟเฟอร์โหมดองค์กร:

(define-key org-mode-map (kbd "<left-fringe> <double-mouse-1>") 'org-cycle)

ดับเบิลคลิกที่ขอบรอบทรีย่อยที่สอดคล้องกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.