Fichiers récemment ouverts en mode ido


12

J'utilise ido-mode, mais une chose que je déteste, c'est qu'après C-x C-fje ne peux pas utiliser les up/downtouches pour parcourir les fichiers récemment ouverts, comme c'était le cas par exemple avec iswitchb. Comment puis-je me mettre idoau travail de cette façon?

Réponses:


16

En regardant les options de personnalisation pour ido-mode( M-x customize-group RET ido RET), je ne vois aucune option pour activer le comportement de cyclisme que vous décrivez.

Vous pouvez cependant ajouter ce qui suit à votre fichier init:

(require 'recentf)

(defun ido-recentf-open ()
  "Use `ido-completing-read' to find a recent file."
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))

(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

Avec cela en place, vous pouvez appuyer sur C-x C-rpour obtenir l'achèvement de l'idéo pour sélectionner les fichiers récemment ouverts.

Par défaut, les 20 fichiers les plus récents seront conservés dans l'historique. Je vous suggère de le monter à quelque chose comme 150 en définissant recentf-max-saved-items:

(setq recentf-max-saved-items 150)

Bonus: accès aux fichiers récents, édition sous stéroïdes

Je ne vois pas mentionné dans beaucoup d'endroits, mais Ido Virtual buffers fais super facile d'accéder aux fichiers récents. Activez-les comme ceci:

(setq ido-use-virtual-buffers t)

Le comportement que vous obtenez est le suivant:

Si non nil, reportez-vous aux tampons passés ("virtuels") ainsi qu'aux tampons existants.

Essentiellement, cela fonctionne comme suit: Supposons que vous visitez un fichier et que le tampon est nettoyé par midnight.el. Plus tard, vous souhaitez basculer vers ce tampon, mais constatez qu'il n'est plus ouvert. Lorsque les tampons virtuels sont activés, le nom du tampon reste dans la liste des tampons (en utilisant le ido-virtualvisage, et toujours à la fin), et si vous le sélectionnez, il ouvre à nouveau le fichier. Cela vous permet de penser moins si les fichiers récemment ouverts sont toujours ouverts ou non. La plupart du temps, vous pouvez quitter Emacs, redémarrer, puis basculer vers un tampon de fichiers précédemment ouvert comme s'il l'était encore.


Jusqu'à présent, j'ai voté positivement, j'accepterai plus tard quand je vais le tester et comprendre comment cela fonctionne. (ma compréhension du lisp est très mauvaise).
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers Bien sûr, prenez votre temps. Faites-moi savoir si vous avez des questions spécifiques sur le code que j'ai publié.
itsjeyd

J'ai accepté mais franchement je ne l'aime pas car C-x C-ril n'est pas possible d'ouvrir un nouveau fichier. Je suis également surpris qu'il ne soit pas possible de le personnaliser de manière simple. L'histoire de C-x C-fest une caractéristique tellement évidente que je ne comprends pas pourquoi elle n'est pas encore implémentée ido. Par exemple, M-x up/downparcourt les commandes récentes, M-% up/downparcourt les requêtes de remplacement récentes, même en dehors d'emacs - tous les shells comme bash ou zsh utilisent up / down pour rappeler les commandes précédentes. Pour moi, C-x C-f up/downdevrait parcourir les fichiers récemment ouverts. Arrêt complet.
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers Je suis d'accord avec vous, et je n'ai aucune idée pourquoi cela n'est pas disponible ou personnalisable hors de la boîte. Pour moi personnellement, ce n'est pas un gros problème parce que j'utilise la fonction de tampons virtuels que je décris dans ma réponse, donc passer à un fichier récent équivaut à passer à un autre tampon; vraiment facile. Mais je comprends que cela peut être frustrant si une fonctionnalité que vous avez l'habitude d'utiliser n'est pas disponible.
itsjeyd

5
+1 pour ido-use-virtual-buffers- une excellente fonctionnalité qui devrait vraiment être activée par défaut OMI.
Jon O.

2

Bien que les liaisons aient évolué au fil du temps, à partir d'aujourd'hui, lorsque vous appelez ido-find-fileou ido-find-file-read-only, vous pouvez utiliser les liaisons suivantes disponibles dans la configuration par défaut:

  • M-o invoque ido-prev-work-file
  • C-M-o invoque ido-next-work-file

En plus de ceux-ci qui ne sont pas aussi agréables sur le plan ergonomique que les M-pet les M-nfixations auxquelles j'étais habitué avant d'essayer ido , ils sont également lents, et le bavardage du mini-tampon qui en résulte est distrayant et déroutant. ido fait plus que simplement afficher un nom de fichier récemment ouvert; il signale que c'est "Recherche de ' nom de fichier ' ...", peut-être par réticence à proposer un nom pour un fichier qui n'existe plus.

Le message "Recherche" provient de la fonction ido-make-merged-file-list. En lisant la source , je ne vois aucun moyen de désactiver la magie de cette fonction.

Vous pouvez envisager de relier la paire ido-prev-work-fileet ido-next-work-fileà quelque chose de plus naturel comme C-M-pet C-M-n, ou d'échanger les liaisons actuelles M-p( ido-prev-work-directory) et M-n( ido-next-work-directory) pour celles-ci.

Voici le code Emacs Lisp à restaurer M-pet M-nà parcourir les fichiers récents, en déplaçant les liaisons axées sur le répertoire par défaut vers C-M-pet C-M-nrespectivement:

(add-hook 'ido-setup-hook
          (lambda ()
            (let ((kmap ido-file-dir-completion-map))
              (let ((key '(meta ?n)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-next-work-file))
              (let ((key '(meta ?p)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-prev-work-file)))))

1
Bienvenue chez Emacs SE! Veuillez essayer de garder vos réponses centrées sur la question de l'affiche originale. Certes, votre commentaire sur le «bavardage du mini-tampon» est intéressant et connexe, mais il distrait de trouver une réponse réelle à la question. Plus important encore: essayez de formuler votre réponse sous la forme de ... eh bien, une réponse. Ce que vous avez écrit ressemble plus à un commentaire, ce qui n'est pas bien adapté à un site de questions / réponses comme celui-ci.
paprika

Eh bien, le premier paragraphe et sa liste suivante répondent à la question d'origine, qui cherchait des clés pour parcourir les fichiers récemment ouverts. Ces liaisons existent par défaut, mais aucune des autres réponses ici n'a mentionné ces liaisons. Je travaille sur le code de reliure et je l'inclurai dans ma réponse une fois que j'en serai satisfait.
seh

2

ce à quoi j'ai eu recours dans ce cas revient au comportement normal du mini-tampon en tapant Cf dans idomode. Ensuite, vous aurez des touches de navigation d'historique normales. Si vous le savez à l'avance, cela peut être rapide: Cxff :-)


1

La réponse donnée par @itsjeyd est assez complète. Permettez-moi simplement de suggérer une fonction:

(defun ido-choose-from-recentf ()
  "Use ido to select a recently visited file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)

Avec l'aimable autorisation de WikEmacs


1

J'ai trouvé que cela helm-for-filesfonctionnait mieux que toutes les réponses ci-dessus dans le but de compléter automatiquement le nom de fichier et d'avoir une belle interface de recherche. En outre, vous pouvez le configurer pour inclure tous les éléments de recherche que vous aimez.


1
@Drew helm est livré avec le mode ido lui-même. La plupart du temps, lorsque les gens recherchent ce poste, ils pourraient être intéressés à connaître d'autres alternatives pour résoudre le problème.
user10375
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.