2010-03-03 13 views
4

J'utilise Emacs et Rudel pour collaborer avec un programmeur distant. Rudel a un concept de tampons publiés. Lorsque mon partenaire publie un tampon, je peux m'abonner et nous pouvons le modifier simultanément.Les tampons collaboratifs Emacs s'ouvrent dans le mauvais mode

Mon problème est que quand il publie un fichier Python avec une extension * .py et que je m'y suis abonné, mon tampon n'est pas mis en mode python automatiquement (il est en mode fondamental). Comment puis-je l'obtenir pour que le tampon s'ouvre avec le bon mode de langue?

+0

sorte de hors-sujet, mais comment avez-vous tout mis en place? Y a-t-il un bon tutoriel? (Je n'ai jamais réussi à faire fonctionner Rudd correctement) – unhammer

+0

Je ne me souviens pas exactement, mais Rudel n'était pas simple à mettre en place et je n'ai jamais réussi à le faire correctement à 100%. Même quand cela fonctionnait, mes tampons et ceux de mon partenaire étaient souvent désynchronisés en une heure de travail. J'ai abandonné l'utilisation de Rudel. Ces jours-ci, je préfère utiliser tmux ou GNU Screen pour partager un terminal texte exécutant Emacs. L'inconvénient est que cette méthode permet à une seule personne de taper à la fois. À mon avis, c'est mieux de toute façon, car cela vous oblige à faire plus de collaboration. – hekevintran

+0

C'est ce que j'utilise maintenant, tmux avec emacs multi-tty. Mais nous pouvons taper en même temps (cette méthode http://www.emacswiki.org/emacs/tmux_for_collaborative_editing), mais je pense que isearch et tel est un peu foiré ... – unhammer

Répondre

3

Je ne sais pas assez bien Rudel pour donner une solution à 100%, mais ce que vous voulez faire est quelque chose comme ceci:

(add-hook 'rudel-document-attach-hook 'my-rudel-set-mode-appropriately) 
(defun my-rudel-set-mode-appropriately (document buffer) 
    "try to set the mode appropriately" 
    (set-buffer buffer) 
    (let ((buffer-file-name ...get-name-from-document...)) 
    (set-auto-mode))) 

, il vous suffit de remplacer la partie ...get-name-from-document... du code avec quelque chose qui évalue le nom de fichier que vous voulez, par exemple, si le tampon est nommé myfile.py, alors vous pouvez changer cela à (buffer-name). Mais, si les tampons ont des noms bizarres, vous devrez peut-être extraire le nom de l'objet document (Rudel utilise en interne un objet document pour représenter la chose que vous partagez). Donc, si (buffer-name) ne fonctionne pas, vous pouvez essayer (rudel-suggested-buffer-name document).

dire essayer le code ci-dessus, mais en utilisant une de ces lignes:

(let ((buffer-file-name (buffer-name))) 

et

(let ((buffer-file-name (rudel-suggested-buffer-name document))) 

Le set-auto-mode utilisera la valeur de buffer-file-name pour déterminer le mode majeur en utilisant la general Emacs mechanisms.

+0

Pouvez-vous préciser ce que vous entendez par "(rudel- document de nom de tampon-suggéré) "? Je me suis perdu au sujet du ... nom-du-document ... portion. – hekevintran

+0

@hekevintran J'ai élargi la réponse, laissez-moi savoir si cela a aidé. –

+0

Merci, cela fonctionne très bien. – hekevintran

0

Je ne sais absolument rien sur le fonctionnement de rudel. Cependant, avez-vous essayé de définir explicitement le mode dans le fichier texte? Essayez d'ajouter quelque chose comme ceci à la première ligne du fichier:

# -*- mode: python; fill-column: 75; comment-column: 50; -*- 

Mettre une ligne comme premier dans le fichier provoquera emacs d'ignorer l'extension du fichier et ouvert dans le mode donné.