2010-05-18 5 views
15

Mi sono appena imbattuto in questo dired mode screen su Wikipedia. Sto osservando quelle personalizzazioni.Personalizzazione diretto

Per quanto riguarda i colori, suppongo che sia sufficiente specificare le facce corrette, ma come faccio a ottenere il risultato di mostrare le dimensioni dei file in kbyte per impostazione predefinita? E lo spazio disponibile in MB (linea superiore)?

risposta

13

Per ottenere le dimensioni dei file in Kbyte, è possibile personalizzare la variabile dired-listing-switches di utilizzare l'opzione -k:

(setq dired-listing-switches "-alk") 

Devi fare un po 'di lavoro per ottenere il totale/numeri disponibili in MB. Questo ha funzionato sul mio sistema Linux, ma la quota disponibile è riuscito a lavorare sulla mia casella di Windows:

(setq directory-free-space-args "-Pm") 
(defadvice insert-directory (after insert-directory-adjust-total-by-1024 activate) 
    "modify the total number by dividing it by 1024" 
    (save-excursion 
(save-match-data 
    (goto-char (point-min)) 
    (when (re-search-forward "^ *total used in directory \\([0-9]+\\) ") 
    (replace-match (number-to-string (/ (string-to-number (match-string 1)) 1024)) nil nil nil 1))))) 
+11

Su Linux, provare "-alh". – huaiyuan

+0

Tks per la risposta. La parte disponibile fallisce anche sui buoi (ne darò un'occhiata in seguito). –

+1

@huaiyuan L'opzione 'h' è leggibile dall'uomo, non usa una dimensione costante (come era la richiesta). Mi piace 'h' in generale però. –

4

non hai chiesto, ma ho pensato che vorrei aggiungere ....

volevo essere in grado di ordinare facilmente l'output diretto per dimensione ed estensione, così come nome e ora. So che posso farlo con M-x universal-argument dired-sort-toggle-or-edit, ma volevo che fosse disponibile sulla chiave s per renderlo veloce.

;; Redefine the sorting in dired to flip between sorting on name, size, 
;; time, and extension, rather than simply on name and time. 

(defun dired-sort-toggle() 
    ;; Toggle between sort by date/name. Reverts the buffer. 
    (setq dired-actual-switches 
     (let (case-fold-search) 

      (cond 

      ((string-match " " dired-actual-switches) ;; contains a space 
      ;; New toggle scheme: add/remove a trailing " -t" " -S", 
      ;; or " -U" 

      (cond 

      ((string-match " -t\\'" dired-actual-switches) 
       (concat 
       (substring dired-actual-switches 0 (match-beginning 0)) 
       " -X")) 

      ((string-match " -X\\'" dired-actual-switches) 
       (concat 
       (substring dired-actual-switches 0 (match-beginning 0)) 
       " -S")) 

      ((string-match " -S\\'" dired-actual-switches) 
       (substring dired-actual-switches 0 (match-beginning 0))) 

      (t 
       (concat dired-actual-switches " -t")))) 

      (t 
      ;; old toggle scheme: look for a sorting switch, one of [tUXS] 
      ;; and switch between them. Assume there is only ONE present. 
      (let* ((old-sorting-switch 
        (if (string-match (concat "[t" dired-ls-sorting-switches "]") 
             dired-actual-switches) 
         (substring dired-actual-switches (match-beginning 0) 
            (match-end 0)) 
         "")) 

         (new-sorting-switch 
         (cond 
         ((string= old-sorting-switch "t") 
          "X") 
         ((string= old-sorting-switch "X") 
          "S") 
         ((string= old-sorting-switch "S") 
          "") 
         (t 
          "t")))) 
        (concat 
        "-l" 
        ;; strip -l and any sorting switches 
        (dired-replace-in-string (concat "[-lt" 
                dired-ls-sorting-switches "]") 
              "" 
              dired-actual-switches) 
        new-sorting-switch)))))) 

    (dired-sort-set-modeline) 
    (revert-buffer)) 
1

Inoltre, la visualizzazione in dired consente solo 9 spazi, quindi per i file molto grandi, la visualizzazione in dired verrà incasinata. Ancora una volta ciò ha richiesto la ridefinizione di un fn. In questo caso, uno da ls-lisp.el:

;; redefine this function, to fix the formatting of file sizes in dired mode 
(defun ls-lisp-format-file-size (file-size human-readable) 
    (if (or (not human-readable) 
      (< file-size 1024)) 
     (format (if (floatp file-size) " %11.0f" " %11d") file-size) 
    (do ((file-size (/ file-size 1024.0) (/ file-size 1024.0)) 
     ;; kilo, mega, giga, tera, peta, exa 
     (post-fixes (list "k" "M" "G" "T" "P" "E") (cdr post-fixes))) 
     ((< file-size 1024) (format " %10.0f%s" file-size (car post-fixes)))))) 

(solo sostituisce il 9.0 con 11.0 e il 8.0 con 10.0, nelle stringhe di formato)

7

realtà, che è schermata quasi certamente di Dired+, anche se il testo che lo accompagna dà l'impressione che provenga da Vanilla Emacs (XEmacs?), e l'attribuzione per lo screenshot è "Emacs development team".

Quindi sì, la risposta è che si può facilmente ottenere che l'aspetto, utilizzando Dired + e semplicemente personalizzare i volti di default: M-x customize-group Dired-Plus.

18

Mi è venuta in mente lo stesso problema e ho scoperto come cambiare gli swith al volo.

Così, mentre in un buffer dired

C-u s

è ora possibile modificare gli interruttori utilizzati da ls. Aggiungere h do ottenere un file leggibile dimensioni

È possibile aggiungere altri switch anche, ad esempio, ho cambiato in -alsh e ora ordina in base alle dimensioni del file

+0

Qual è il comando/funzione associato a questa associazione di tasti?'describe-key' si ferma su C-u, quindi restituisce' universal-argument'. – nephewtom

+0

@nephewtom è 'dired-sort-toggle-or-edit'. All'interno di un buffer diretto fare 'C-x k' quindi' s'. In effetti stai inviando l'argomento universale a 'dired-sort-toggle-or-edit' –

+0

nota che '-alsh' dovrebbe essere '-alSh' per ordinare per filesize, il caso è importante – bph