Может ли сервер Emacs редактировать удаленные файлы, указанные клиентом Emacs?

Я хочу настроить сервер emacs так, чтобы файлы, указанные в emacsclients, относились к файловой системе emacsclients, а не к файловой системе сервера. Например, если я устанавливаю сервер emacs на машине «darkstar» и подключаюсь к этому серверу через emacsclient на «brightstar» с помощью команды

emacsclient -nw '~/fantastic'

Сервер emacs попытается отредактировать файл ~ /antastic на darkstar, а не на brightstar. Мне бы хотелось, чтобы это было наоборот. Я открыт для всевозможных дурацких предложений.

* Справочная информация: мне нужен процесс emacs, который отслеживает все буферы, которые я открываю на разных машинах, отслеживает мои настройки цвета, привязки и т. Д. Я хочу, чтобы все это было доступно и реплицировано на любой произвольной машине с emacs. Сервер emacs, кажется, делает именно это, но без возможности редактировать локальные файлы клиента!


person fthinker    schedule 26.01.2012    source источник
comment
Это скорее вопрос serverfault.com?   -  person TJ Ellis    schedule 26.01.2012
comment
Совершенно уверен, что это невозможно сделать так, как вы описываете - для того, чтобы это сработало, вам каким-то образом придется смонтировать файловую систему brightstar на darkstar, изменить относительные домашние пути (т.е. ~) .. это не будет красиво.   -  person Marvin Pinto    schedule 26.01.2012
comment
@TJEllis - Я так не думаю, я думаю, что этот вопрос определенно попадает в категорию «программные инструменты, обычно используемые программистами».   -  person Luke Girvin    schedule 27.01.2012
comment
@fthinker, как вы используете локальный emacsclient для подключения к удаленному демону emacs?   -  person jrm    schedule 27.01.2012
comment
@jrm вы можете запустить сервер в режиме TCP вместо использования сокетов unix. Если вы используете Windows, он запускается только в режиме TCP. см. параметр --server-file=server-file @ [gnu.org/software / emacs / manual / html_node / emacs /   -  person fthinker    schedule 27.01.2012


Ответы (2)


Вы должны иметь возможность настроить функцию оболочки, которая использует tramp, например

edit-local() {
    emacsclient -e "(find-file (expand-file-name \"$1\" \"/ssh:$USER@$(hostname):$PWD\"))"
}

Конечно, вам, возможно, придется изменить протокол трампа на то, что вы настроили.

person Ivan Andrus    schedule 26.01.2012
comment
Я собираюсь принять этот ответ, потому что считаю, что это наиболее близкое решение к тому, что я пытаюсь достичь. Это либо 1) Общие монтирования (уродливо :) 2) обратный вызов ssh (лучше) 3) Взломайте код lisp, чтобы открытый буфер был заполнен локальным текстом, и его запись отправляет его обратно клиенту для сохранения. Конечно не так просто, как 2) - person fthinker; 27.01.2012
comment
Хех, то, что вы описали, почти идентично Как я могу использовать tramp для подключения к удаленному сеансу Emacs? @ (gnu.org/software/tramp/#Remote-processes) - person fthinker; 27.01.2012

Смонтировала ли удаленная машина (на которой запущен Emacs) файловую систему локальной машины? Если это так, вы можете выдать что-то вроде:

 emacsclient --eval ´(my-open-file "~/fantastic" "my-local-machine")´

Затем вы можете написать функцию my-open-file, которая могла бы, например, открывать файл //mounts/my-local-machine/home/YOUR-ACCOUNT/fantastic (при условии, что это точка монтирования).

Это потребует взлома elisp и взлома сценария (например, с использованием Ruby) для создания командной строки emacsclient.

person Lindydancer    schedule 26.01.2012