ฉันกำลังแก้ไขโค้ด elisp จาก linum.el:
(custom-set-variables '(linum-format 'dynamic))
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (concat " %" (number-to-string w) "d ")))
ad-do-it))
ผมสามารถที่จะแก้ไขข้อผิดพลาดที่เยื้องถูกปิดโดยหนึ่งโดยการปรับเปลี่ยนไป(count-lines (point-min) (point-max))
(+ (count-lines (point-min) (point-max)) 1)
นั่นเป็นเรื่องง่าย
แต่ตอนนี้ฉันต้องการแก้ไขเพื่อให้ความกว้างต่ำสุดคือ 2 โดยการเพิ่ม if-conditional โดยที่(concat " %" (number-to-string w) "2d ")
ถ้าจำนวนบรรทัดเป็น <10
มันควรจะง่ายนะ! เพิ่มหนึ่งเงื่อนไขและคัดลอก / วาง concat เค้กชิ้นใช่มั้ย ฉันหมายถึงฉันรู้ว่าฉันควรจะทำอะไร แต่ฉันไม่ค่อยได้สัมผัสกับ elisp และฉันมักจะหวาดกลัวเมื่อฉันต้องแก้ไขสิ่งใด ๆ
สไตล์ "ถูกต้อง" จากสิ่งที่ฉันเข้าใจคือการจัดโครงสร้างโค้ดตามการเยื้องและล้อมรอบวงเล็บท้ายท้ายบรรทัดแทนที่จะเป็นของมันเอง มาจากภาษาสไตล์ 'C' อื่น ๆ ฉันต่อสู้กับทั้งการอ่านและการเขียนโค้ดด้วยวิธีนี้ ดังนั้นคำถามของฉันคือฉันกำลังทำอะไรผิด ฉันควรจะแก้ไข elisp และนำทางไปรอบ ๆ โค้ดอย่างไรโดยที่ฉันไม่ต้องนั่งที่นั่นและนับทุกวงเล็บ
เมื่อฉันทำงานกับบางสิ่งบางอย่างใน elisp ที่ลึกเกินไปฉันต้องปิดประตูดึงผ้าม่านและเริ่มวางตำแหน่งวงเล็บ K & R-style เพื่อที่ฉันจะได้ไม่เพียง แต่อ่าน แต่แก้ไขสิ่งที่สาปโดยไม่ต้องออกนอกลู่นอกทาง
เห็นได้ชัดว่าฉันทำผิดทั้งหมด ฉันจะสัมผัสเอลลิสแบบนี้ได้อย่างไรโดยไม่ต้องกลัว
โปรดทราบว่าคำถามของฉันคือวิธีการนำทางและแก้ไข elisp ไม่ใช่คำถามอย่างมีสไตล์ ฉันใช้คำแนะนำสไตล์ต่อไปนี้แล้ว: https://github.com/bbatsov/emacs-lisp-style-guide
ปรับปรุง:
วิธีการจัดรูปแบบ elisp อย่างถูกต้องก่อนที่จะทำการอายบน emacs.stackexchange:
ทำเครื่องหมาย Elisp M-x indent-region
คุณและดำเนินการ
ทางออกของปัญหา:
สำหรับผู้ที่ต้องการทราบวิธีดำเนินการปรับชิดขวาสำหรับ linum ที่มีความกว้างอย่างน้อยสองตัวนี่คือคำตอบ:
(defadvice linum-update-window (around linum-dynamic activate)
(let* ((w (length (number-to-string
(+ (count-lines (point-min) (point-max)) 1))))
(linum-format (if (> w 1)
(concat " %" (number-to-string w) "d ")
" %2d ")))
ad-do-it))
%2d
เพราะเมื่อความกว้างเลื่อนไปถึง 3 ตัวอักษรหรือมากกว่านั้นมันจะย้ายจากนำมาชิดขวาไปทางซ้ายชิดขอบ
highlight-parentheses
; rainbow-delimiters
; เป็นต้นนี่คือเวอร์ชั่นที่เรียบง่ายของฉันเองhighlight-parentheses
ที่อนุญาตให้เลื่อนโดยไม่ต้องลบวงเล็บที่เป็นสีสุดท้าย: stackoverflow.com/a/23998965/2112489 ในอนาคตมีคำถามหนึ่งข้อต่อลูกค้า / เธรด