Tôi đang sửa đổi một số mã elisp từ 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))
Tôi đã có thể sửa chữa một lỗi nơi thụt đầu dòng là off-by-one bằng cách sửa đổi (count-lines (point-min) (point-max))
để (+ (count-lines (point-min) (point-max)) 1)
. Điều đó thật dễ dàng.
Nhưng bây giờ tôi muốn sửa đổi nó để độ rộng tối thiểu là 2 bằng cách thêm một if-có điều kiện trong đó (concat " %" (number-to-string w) "2d ")
nếu số lượng dòng là <10.
Điều này nên dễ dàng! Thêm một điều kiện và sao chép / dán concat. Miếng bánh, phải không? Ý tôi là, tôi biết những gì tôi phải làm nhưng tôi hiếm khi chạm vào elisp và tôi luôn luôn nản chí khi tôi phải sửa đổi bất cứ điều gì với nhiều dấu ngoặc đơn.
Kiểu "chính xác", theo những gì tôi hiểu, là cấu trúc mã dựa trên thụt lề và bọc dấu ngoặc đơn ở cuối dòng chứ không phải trên chính nó. Đến từ các ngôn ngữ kiểu 'C' khác, tôi phải vật lộn với cả việc đọc và viết mã theo cách này. Vì vậy, câu hỏi của tôi là: tôi đang làm gì sai? Làm thế nào tôi có thể chỉnh sửa elisp và điều hướng xung quanh mã để tôi không phải ngồi đó và đếm từng dấu ngoặc đơn?
Khi tôi làm việc với một thứ gì đó quá sâu, tôi phải đóng cửa, kéo rèm và bắt đầu định vị kiểu ngoặc đơn K & R để tôi không chỉ đọc mà sửa đổi thứ ngu ngốc mà không sợ hãi.
Rõ ràng là tôi đang làm sai tất cả. Làm thế nào tôi có thể chạm vào elisp như thế này mà không sợ hãi?
Xin lưu ý rằng câu hỏi của tôi là làm thế nào để điều hướng và chỉnh sửa elisp không phải là một câu hỏi về phong cách. Tôi đang sử dụng các hướng dẫn sau đây như một hướng dẫn về phong cách: https://github.com/bbatsov/emacs-lisp-style-guide
Cập nhật:
Làm thế nào để định dạng đúng elisp trước khi lúng túng trên emacs.stackexchange:
Đánh dấu elisp của bạn và thực hiện M-x indent-region
.
Giải pháp cho vấn đề:
Đối với những người muốn biết làm thế nào để thực hiện một biện minh đúng cho linum với chiều rộng tối thiểu là hai, đây là giải pháp:
(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
vì một khi chiều rộng cuộn lên đến 3 ký tự trở lên thì nó sẽ chuyển từ mang sang phải hợp lý sang trái.
highlight-parentheses
; rainbow-delimiters
; v.v ... Đây là phiên bản đơn giản hóa của riêng tôi highlight-parentheses
cho phép cuộn mà không xóa các dấu ngoặc đơn được tô màu lần cuối: stackoverflow.com/a/23998965/2112361 Trong tương lai, đó là một câu hỏi cho mỗi khách hàng / chủ đề.