9
votes

Comment correctement configurer Ctrl-Tab dans Emacs

Je suis converti de Visual Studio vers EMACS pour la plupart de mon développement (principalement en raison de la modification des langages de programmation). Cependant, il y a une caractéristique cool de Visual Studio que je manquais vraiment: Ctrl - onglet entre "tampons".

Le ctrl - onglet que dans Visual Studio n'est pas le même que C - x b dans EMACS. Donc, ce n'est pas simplement une question de cartographie du clavier. Voici les caractéristiques de My Ideal CTRL - onglet :

  1. Maintenez la touche CTRL Tab, vous voyez la mémoire tampon suivante avant de laisser partir Ctrl .
  2. Il n'est pas nécessaire de frapper Entrée.
  3. Si ce n'est pas le tampon que vous souhaitez, appuyez à nouveau sur l'onglet jusqu'à ce que vous voyiez le tampon que vous souhaitez.
  4. Le moment où CTRL est publié, la bague tampon est mise à jour. Le tampon suivant dans la bague est le tampon où vous avez enfoncé d'abord Ctrl .

    J'ai vu des plugins Emacs qui essaient de simuler ce comportement, mais le n ° 4 est le plus difficile. Il semble que Emacs ne soit pas en mesure de détecter lorsque la touche CTRL est publiée. Au lieu de cela, le code attend que l'utilisateur soit dans le tampon pendant un certain temps ou attend qu'un tampon change..et, puis le tampon est ajouté à la bague. Il est assez différent de me frustrer vraiment et n'utilisez jamais mon Ctrl - onglet . Pour le moment, je viens de traiter c - x b . IDO-MODE fait C - x b plus tolérable, mais je rêve toujours d'un jour quand je peux Ctrl - onglet dans emacs.

    a quelque part que quelqu'un a trouvé un moyen de configurer ctrl - onglet dans emacs pour fonctionner comme Visual Studio?


3 commentaires

Dupliquer? onglet EMACS entre les tampons


Il a l'air très similaire, mais je ne suis pas sûr de ce qu'ils soient les mêmes. Je souhaite spécifiquement que la mémoire tampon d'anneau soit modifiée lorsque Ctrl est libérée (pas lorsque le tampon est modifié ou après une valeur de délai d'attente). Parfois, je veux lire rapidement le contenu d'un tampon et revenir à l'endroit où j'étais. Emacs ne peut tout simplement pas le faire..yet.


Vous décrivez une pile comme un comportement comme Alt-Tab dans Windows. Pourquoi ne pas utiliser la flèche de gauche / droite C-X pour aller au tampon suivant / antérieur? Vous pouvez mapper cela jusqu'à une seule touche Appuyez sur (onglet C, C-S-TAB).


5 Réponses :


2
votes

Je pense que c'est proche de ce que vous voulez. Comme vous l'avez mentionné, EMACS ne reçoit pas d'événements pour la clé de contrôle, vous ne pouvez donc pas vraiment obtenir la fonctionnalité souhaitée. Cependant, cela n'enregistrera pas le commutateur tampon avant de faire quelque chose d'autre que d'appuyer sur c-onglet kbd> (c'est-à-dire faire défiler, tapez quelque chose, cliquez sur la souris, utilisez une commande mx ... kbd >):

(global-set-key (kbd "<C-tab>") 'my-switch-buffer)
(defun my-switch-buffer ()
  "Switch buffers, but don't record the change until the last one."
  (interactive)
  (let ((blist (copy-sequence (buffer-list)))
        current
        (key-for-this (this-command-keys))
        (key-for-this-string (format-kbd-macro (this-command-keys)))
        done)
    (while (not done)
      (setq current (car blist))
      (setq blist (append (cdr blist) (list current)))
      (when (and (not (get-buffer-window current))
                 (not (minibufferp current)))
        (switch-to-buffer current t)
        (message "Type %s to continue cycling" key-for-this-string)
        (when (setq done (not (equal key-for-this (make-vector 1 (read-event)))))
          (switch-to-buffer current)
          (clear-this-command-keys t)
          (setq unread-command-events (list last-input-event)))))))


2 commentaires

"Emacs ne reçoit pas d'événements pour la clé de contrôle" :( c'est ce que j'avais peur. Je préfère ne pas avoir besoin de taper des tampons, je veux juste les lire et revenir (par exemple, la documentation de l'API). Est-ce qu'il y a Quelque chose à «astuce» Emacs dans la vue de la clé Ctrl a été libéré?


@ User1 Vous pouvez réellement faire autre chose que c-onglet , comme cliquez sur la souris, faites défiler le haut / bas, la recherche, quoi que ce soit. Je vais mettre à jour la réponse pour montrer ceci.



4
votes

Si vous utilisez GNU EMACS 22.1 ou plus de publications récentes, \ CX Fires MX Next-tampon et \ cx Fires MX Précédent-tampon . Cette page sur Emacswiki a un lien vers C-Tab STYLE WINDOWS cyclisme tampon. La page explique également comment apporter ce comportement sur les versions plus anciennes d'Emacsen.

Cette question d'hier semble très similaire à ce que vous voulez réaliser, sauf que le Question Talks sur NotePad ++ au lieu de Visual Studio.


1 commentaires

Oui, (touche globale-clé (kbd "") "" mode-ligne-autre tampon) Comme suggéré par le Wiki Emacs est une solution simple, qui n'a certes qu'un seul changer.



5
votes

Je cherchais exactement le comportement que vous décrivez et rencontré Le package iflipb: http://www.emacswiki.org/emacs/iflipb et lié-le à c - onglet , c - s - onglet . .

Malheureusement, il ne redémarre pas le cyclisme, que ce soit après la libération de la touche CTRL , de sorte qu'à cet égard est identique à la mémoire tampon My-Switch dans la réponse ci-dessus. Toute nouvelle idée de cette question est très appréciée.


0 commentaires

1
votes

J'aime aussi le comportement de cyclisme et de basculement de iflipb, c'est beaucoup comme le comportement de Windows Alt-Tab. Cependant, comme indiqué précédemment, EMACS ne permet pas de remarquer facilement lorsque vous relâchez la clé de contrôle. Cela permet de basculer entre les deux tampons supérieurs imparfaites: si vous appuyez sur C-Tab (et relâchez-vous), puis sur C-Tab (et relâchez), vous n'avez pas été basculé entre les deux premiers. Au lieu de cela, Iflipb ne fait que marcher plus loin dans la liste des tampons. Mais si vous exécutez une autre commande EMACS entre les deux événements C-onglet, Iflipb reconnaît qu'il recommence dans la mars tampon, il fait donc la bascule.

sur Windows, Autohotkey peut venir à la rescousse et envoyer des emacs une frappe lorsque vous relâchez la touche de contrôle. Voici mon script: xxx

Chaque fois que l'onglet C est enfoncé dans EMACSS, le script commence à interroger l'état de la clé de contrôle. Lorsque la clé est relâchée, il envoie EMACS la séquence de touches C-C: . J'ai cette clé sur une commande "null", qui suffit à faire remarquer Iflipb de remarquer ce qui se passe.

Voici l'extrait de .emacs pertinent: xxx

donc, c'est un type de hacky, mais cela fonctionne. Merci aux affiches de http://www.autohotkey.com/board/topic/72433 -Controltab / , qui essayait de résoudre un problème similaire.


1 commentaires

Je l'ai essayé dans Macosx, mais je ne peux pas faire c-x ou c-s (isarch) ou etc ... mais ignore ces problèmes, cela fonctionne.



1
votes

Ajoutez les éléments suivants à votre .emacs fichier: xxx


0 commentaires