2010-11-02 15 views
10

Sur OS X 10.5 Emacs 23.2, en Dired mode, si j'essaie de trier par dired-sort-toggle-or-edit avec l'argument préfixe --sort=extension ou -X, je reçois:erreur dans DIRED le tri sur OS X

insert-directory: Listing directory failed but `access-file' worked 

et le tampon Dired devient vide. J'ai essayé de réglage

(setq dired-use-ls-dired nil) 

mais cela n'a eu aucun effet. dired-sort-toggle-or-edit et le tri par extension semble fonctionner sur ma boîte Ubuntu. Quelqu'un at-il une idée de ce qui se passe?

+0

Merci beaucoup de créer une question si utile, qui a engendré des réponses et des commentaires qui mènent à la solution. – lawlist

Répondre

8

Le ls installé sur OS X ne prend pas en charge -X ou les arguments longs tels que --sort. Le réglage dired-use-ls-dired n'aura aucun effet; dired utilisera toujours ls, mais si cette variable est non-nulle, il passera --dired à ls. Si vous voulez ce type de tri, vous pouvez probablement utiliser quelque chose comme fink pour installer coreutils, ce qui vous donnera un peu plus à quoi vous êtes habitué dans Ubuntu.

+0

Ah, c'est le problème ... bizarre que FreeBSD n'ait pas ce genre de tri. Et je pensais que fink était mort mais avait l'air actif ... je me demandais pourquoi j'avais pensé ça. Merci. – hatmatrix

+6

J'ai installé 'coreutils' à travers Homebrew, et il installe apparemment'/usr/local/bin/gls'. Je l'ai ''/usr/local/bin/ls' et je n'ai plus eu l'erreur dans Emacs. – duma

+4

@duma: Cela n'a pas fonctionné pour moi sous Yosemite 10.10.3. J'ai ensuite utilisé, en plus, '(setq insert-directory-programme"/usr/local/bin/gls "); utiliser le bon GNU ls' dans '.emacs' et cela a fonctionné –

10

Pour l'instant, je l'ai aussi trouvé une autre solution en utilisant ls-lisp

(when (eq system-type 'darwin) 
    (require 'ls-lisp) 
    (setq ls-lisp-use-insert-directory-program nil)) 
+0

Vous pouvez également utiliser eshell, dont ls intégré comprend -X. –

+2

Est-il possible de définir 'insert-directory-program' comme' ls' d'eshell? – hatmatrix

+0

merci @crippledlambda J'ai combiné cette réponse et le commentaire de duma sur le précédent pour mettre mon insert-directory-program à gls et tout fonctionne pour moi maintenant sur mac OSX – mcheema

7

Voici les étapes pour Emacs en cours d'exécution sur Snow Leopard 10.6.8 en utilisant coreutils installé via macports:

NOTE: Mes macports l'installation est différente de la générique (/opt/...) - c'est-à-dire, j'utilise /macports comme racine. Modification de la configuration de la racine n'est pas nécessaire, c'est juste une préférence personnelle de la mienne. Pour les installations MacPort Vanilla ou les configurations alternatives, ajustez le chemin en conséquence.

sudo /macports/bin/port install coreutils 

Cela va à l'intérieur du .emacs ou init.el:

;; sort directories first 

(setq insert-directory-program "/macports/bin/gls") 

(setq dired-listing-switches "-aBhl --group-directories-first") 

REMARQUE: L'utilisation d'un lien symbolique pour gls/ls est pas recommandé car il casse la fonctionnalité avec macports installer et très probablement d'autres choses aussi.


Installation alternative pour les utilisateurs qui veulent plus de contrôle:

Télécharger: coreutils-8.21.tar.xz de: http://ftp.gnu.org/gnu/coreutils/

Si vous ne disposez pas d'un utilitaire pour décompresser un fichier *.xz, vous pouvez utiliser un utilitaire tel que TheUnarchiver3.9.1.

Voici une référence rapide pour faire le coreutils - je définir l'emplacement d'installation à ma préférence personnelle au lieu de la valeur par défaut:

./configure \ 
--prefix=/Users/HOME/.0.data/.0.emacs/elpa 

make 

sudo make install 

Insérez ces derniers dans votre fichier .emacs ou init.el - ajuster le chemin par conséquent:

;; sort directories first 

(setq insert-directory-program "/Users/HOME/.0.data/.0.emacs/elpa/bin/ls") 

(setq dired-listing-switches "-aBhl --group-directories-first")