2015-06-07 19 views
8

Mi piacerebbe essere in grado di evidenziare una regione in Emacs e quindi ordinare la regione in base alla lunghezza della linea.Come ottenere Emacs per ordinare le righe per lunghezza?

Il più vicino che ho trovato è il seguente codice che credo sarà ordinate per lunghezza:

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

Ma io non so come trasformare questo in una funzione interattiva che mi permette di usarlo, mettendo in evidenza una regione. Qualcuno può aiutare?

risposta

8

è possibile combinare la definizione sort-lines comando con lo snippet per formare un nuovo comando:

(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))))))))) 
Problemi correlati