Как заставить emacsclient ожидать при использовании - опция оценки?

Я хотел бы вызвать emacs' ediff-merge-files функция для слияния файлов с синхронизатором файла унисона. Чтобы постараться не запускать новый экземпляр, я предпочитаю использовать emacsclient:

emacsclient --eval '(ediff-merge-files "CURRENT1" "CURRENT2" nil "NEW")'

Однако emacsclient возвраты немедленно (как это сделало бы когда данный простые файлы и --no-wait опция). Конечно, унисон затем жалуется, что никакие файлы не были отредактированы.

Существует ли способ позволить emacsclient ожидать, пока я не закончен со слиянием?

1
задан 02.09.2013, 23:06

2 ответа

Я вижу 2 способа сделать это.

перенесите свой вызов с ediff-merge-files вокруг другой функции emacs, которая будет ожидать вызова для окончания, может играть вокруг с выполнением некоторых взломов в рычаги запуска, но это могло стать очень грязным

перенесите свой вызов к emacsclient со сценарием, который ожидает нового файла, который будет создан перед возвратом, если временный файл создается по требованию затем, это - более легкое решение, если новый файл может уже существовать, то необходимо будет использовать файл заполнителя

Сценарий в качестве примера - ediff-ожидает, он изрублен и имеет минимальные проверки работоспособности

#!/bin/sh

[ -f $3 ] && exit 1  # merge file exists?

emacsclient --eval "( ediff-merge-files \"$1\" \"$2\" nil \"$3\" )"
while /bin/true; do
  [ -f $3 ] && exit 0
  sleep 1
done
1
ответ дан 12.12.2019, 13:22

Кажется, что проблема с использованием emacsclient как различный инструмент состоит в том, что это всегда возвращается 0 как код состояния, лишающий возможности мерзавца решить если слияние, за которым следуют или нет.

Решение было предложено на Подвижной Wiki:

#!/bin/bash

if [ $# -lt 1 ]; then
  echo 1>&2 "Usage: $0 local other base output"
  exit 1
fi

local=$1
other=$2
base=$3
output=$4

OUTPUT=`emacsclient --no-wait --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")" 2>&1`
echo $OUTPUT | grep -v "Ediff Control Panel"

if echo "$OUTPUT" | grep -q '^*ERROR*'; then
    exit 1
fi

Поместите это в сценарий оболочки в Вашем пути, и вещами должен быть денди.

[ПРИМЕЧАНИЕ: Эта проблема была устранена в соединительной линии emacs.]

0
ответ дан 12.12.2019, 13:22

Теги

Похожие вопросы