Search code examples
pythonemacscollaborationpair-programming

Emacs collaborative buffers open in the wrong mode


I am using Emacs and Rudel to collaborate with a remote programmer. Rudel has a concept of published buffers. When my partner publishes a buffer, I can subscribe to it and the we can both edit it simultaneously.

My problem is that when he publishes a Python file with a *.py extension and I subscribe to it, my buffer is not set to python-mode automatically (it is in fundamental mode). How can I get it so that the buffer opens with the correct language mode?


Solution

  • I don't know Rudel well enough to give a 100% solution, but what you want to do is something like this:

    (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)))
    

    Only, you need to replace the ...get-name-from-document... portion of the code with something that evaluates to the file name that you want, for example, if the buffer is named myfile.py, then you can change that to (buffer-name). But, if the buffers get odd names, perhaps you need to extract the name from the document object (Rudel internally uses a document object to represent the thing you are sharing). So, if (buffer-name) doesn't work, you can try (rudel-suggested-buffer-name document).

    i.e. try the above code but using one of these lines:

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

    and

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

    The set-auto-mode will use value of buffer-file-name to determine the major mode using the general Emacs mechanisms.