2015-06-07 36 views
8

Tôi muốn có thể làm nổi bật một khu vực trong Emacs và sau đó sắp xếp khu vực theo độ dài dòng.Làm thế nào để có được Emacs để sắp xếp các dòng theo chiều dài?

Gần nhất tôi đã tìm thấy là đoạn mã sau mà tôi nghĩ sẽ sắp xếp theo chiều dài:

(sort-subr t #'forward-line #'end-of-line nil nil 
      (lambda (l1 l2) 
       (apply #'< (mapcar (lambda (range) (- (cdr range) (car range))) 
            (list l1 l2))))) 

Nhưng tôi không biết làm thế nào để tắt chức năng này vào một chức năng tương tác cho phép tôi sử dụng nó bằng cách nêu bật một vùng. Ai đó có thể giúp đỡ?

Trả lời

8

Bạn có thể kết hợp các định nghĩa sort-lines lệnh với đoạn mã của bạn để tạo thành một lệnh mới:

(defun sort-lines-by-length (reverse beg end) 
    "Sort lines by length." 
    (interactive "P\nr") 
    (save-excursion 
    (save-restriction 
     (narrow-to-region beg end) 
     (goto-char (point-min)) 
     (let ;; To make `end-of-line' and etc. to ignore fields. 
      ((inhibit-field-text-motion t)) 
     (sort-subr reverse 'forward-line 'end-of-line nil nil 
        (lambda (l1 l2) 
        (apply #'< (mapcar (lambda (range) (- (cdr range) (car range))) 
             (list l1 l2))))))))) 
Các vấn đề liên quan