2015-05-13 4 views
2

У меня есть две сессии VNC, где я получаю доступ к тем же проектам. У меня есть несколько сеансов emacs, открытых для нескольких проектов. После сохранения моей работы с VNC1 и при использовании VNC2 мне нужен способ запустить команду «обновить все открытые файлы» в каждом emacs, который работает на VNC2, чтобы он синхронизировался с изменениями, произошедшими в VNC1.Выполнение команды во всех исполняемых экземплярах emacs

Я связал F10, чтобы сделать «revert-all-buffers», поэтому мне понадобится этот скрипт для входа в каждый emacs и обновления. Так что вместо того, чтобы идти к каждому открытому emacs и нажимать «F10», я хочу, чтобы сценарий сделал это.

Любые указатели на то, как подойти к этому?

+1

В качестве альтернативы вы можете попробовать запустить один сеанс Emacs и использовать новые кадры для каждого проекта. Тогда ваши 'revert-all-buffers' будут применяться к каждому проекту. – nanny

+0

Каждый проект достаточно велик, чтобы иметь собственный сеанс emacs. Я также использую ярлыки для сборки/Mercurial diffs на основе проекта, в котором находится файл, я не хочу загрязнять буферы журналов с большой информацией из разных проектов. – SFbay007

+0

Что значит, что проект «достаточно большой, чтобы иметь собственную сессию emacs»? Это предложение для меня не имеет смысла. Вы также упоминаете проекты. Используете ли вы какие-либо библиотеки проектов для Emacs? – Chris

ответ

1

Вы можете начать с этого фрагмента кода и настроить функцию 'synchronize-on-this, чтобы делать все, что хотите (прямо сейчас оно просто печатает сообщение).

(defvar synchronize-file "~/.synchronize") 
(defun synchronize-on-this() 
    (when (string-equal (file-truename synchronize-file) 
        (file-truename (buffer-file-name))) 
    (message "Have synchronized!"))) 

(find-file-noselect synchronize-file) 
(global-auto-revert-mode 1) 

(add-hook 'after-revert-hook 'synchronize-on-this) 

Просто сделайте F10 привязку к функции, которая записывает в synchronize-file, и вы хорошо идти. Вы можете хранить информацию в этом файле, которая используется во время синхронизации, или нет.

+0

Очень интересно, но так я могу понять, как это точно работает? Предполагая, что у меня уже есть 4 сеанса emacs 2 в каждом VNC, все доступ к тем же файлам. Переходя от VNC1 к VNC2, этот код автоматически обнаруживает, что что-то изменилось и синхронизация? Помните, что я не буду открывать новые сеансы emacs во втором VNC, все приложения emacs уже открыты и остаются открытыми. – SFbay007

+0

Ваш вопрос заставил вас звучать так, как будто вы хотите, чтобы какая-либо команда выполнялась в каждом экземпляре Emacs в определенное время. Если вы действительно хотите, чтобы все буферы возвращались, просто используйте '(global-auto-revert-mode 1)' ... Но если вам нужно сделать что-то существенное в каждом из проектов (например, проверить файлы out), вы можете сделать это вместо '(сообщение« Have synchronized! »)'. –

+0

Трей, голый со мной на секунду. Итак, если у меня есть два сеанса emacs, открывающих один и тот же файл, я изменил файл в одном, если я переключусь на второй emacs, будет ли файл уже обновляться с изменением автоматически? – SFbay007

Смежные вопросы