Как сделать использование C-x k для уничтожения буфера Emacs, открытого в режиме сервера?

Проведя несколько экспериментов, я определил следующее:

  1. Я думаю, что это ошибка, а не функция, но это не имеет значения, и да, в результате значение времени выполнения определенно ЗАПИСЫВАЕТСЯ к значению времени проектирования.

  2. Свойство Disable переоценивается адекватно, поэтому, если его значение будет изменено во время выполнения, задача выполнит это. Я проверил это, используя контейнер цикла, который будет работать бесконечно, и одну задачу ExecuteSQL, которая включается только в первую секунду каждой минуты. Задача ExecuteSQL записывает текущее время и дату в простую таблицу. Таблица медленно заполнялась датами в течение первой секунды каждой минуты, когда выполнялось задание.

InitExpression: @WDindex = DATEPART("s", GETDATE()) EvalExpression: true AssignExpression: @WDindex = DATEPART("s", GETDATE())

Для задачи ExecuteSQL:

INSERT Sandbox.dbo.Log
    (CreatedDateTime,
    Description)
VALUES
    (GETDATE(),
    'Task not disabled')
  1. Я не знаю, но учитывая результат 2, это не совсем дело.
5
задан James Sulak 13 January 2009 в 01:42
поделиться

6 ответов

использование:

D:\> emacsclientw -n foo.txt

-n говорит, что "никакие не ожидают". Это находится в GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600) от 26.03.2008 на ВЫПУСКЕ (и много предыдущих версий, IIRC).

5
ответ дан 18 December 2019 в 06:23
поделиться

Мое решение состояло в том, чтобы снова переплести его (хорошо M-w на самом деле) к:

(lambda ()
  (interactive)
  (if server-buffer-clients
      (server-edit)
    (kill-this-buffer)))

[редактирование: теперь прочитав код для редактирования сервера, могло бы быть лучше использовать сделанный сервером (в зависимости от того, что Вы хотите). редактирование сервера переключит Вас на отредактированный сервером буфер (если кто-либо все еще будет существовать), но сделанный сервером просто переключит Вас на следующий буфер. Вы могли также использовать вывод сделанных сервером, чтобы видеть, был ли буфер на самом деле уничтожен (не случай, если файл был открыт прежде, чем вызвать emacsclient), и затем уничтожьте его если нет. Или используйте server-kill-buffer, как предложено в другом месте.]

7
ответ дан 18 December 2019 в 06:23
поделиться

Вот то, что я вставил свой .emacs, чтобы сделать это:

(add-hook 'server-switch-hook 
  (lambda ()
    (local-set-key (kbd "C-x k") '(lambda ()
                                    (interactive)
                                    (if server-buffer-clients
                                        (server-edit)
                                      (ido-kill-buffer))))))

Как этот C-x k работают обычный путь, когда я не нахожу файл от emacsclient (который для меня является ido-kill-buffer), и если я использую emacsclient, C-x k делает редактирование сервера, если клиент ожидает, или выполненный ido-kill-buffer иначе (если я использовал emacsclient-n).

7
ответ дан 18 December 2019 в 06:23
поделиться

Вы знаете, я очень не хочу предложить обходные решения вместо действительного решения..., но после чтения серверного кода, я смущен относительно того, как emacs даже решает, что буфер является буфером сервера.

Имея это в виду, почему бы не открывать файлы как:

emacsclient --eval '(find-file "/path/to/file")'

Этот путь emacs не знает, что Ваш буфер был открыт через emacsclient, который походит на то, что Вы действительно хотите.

Править:

Я не действительно доволен этим, но это, кажется, работает:

(global-set-key (kbd "C-x k") (lambda () (interactive) (server-kill-buffer (current-buffer))))
4
ответ дан 18 December 2019 в 06:23
поделиться

Хорошо, ЭТО действительно работало на меня:

(global-set-key (kbd "C-x k") '(lambda ()
  (interactive)
  (if server-buffer-clients
      (server-done)
    (kill-this-buffer))))

(это - код из ответа IvanAndrus с явными изменениями от редактирований и комментариев и привязки клавиш jrockway's использования.)

И, да - я снова переплетаю стандартную привязку клавиш. НО это - функциональная замена НЕ что-то совершенно другое (например, заменяя kill-ring-save с материалом уничтожать-буфера).

BTW, EmacsWiki имеет несколько страниц по этой теме - KillKey и KillingBuffer - ни один из которых не пролил лучший свет для меня, чем вышеупомянутое (хотя первая функция на KillKey также использовала "редактирование сервера"...).

2
ответ дан 18 December 2019 в 06:23
поделиться

Я не уверен, будет ли это работать над окнами, но над Linux, emacs - демон является просто великим. С ним Вы не должны запускать другую программу, и Ваша привязка является тем же. Я предполагаю, что существуют другие преимущества, но так как я никогда не мог изучать ту emacsclient привязку, я никогда действительно использовал его и не могу сказать.

Я не думаю - демон был выпущен все же, я использую 23.0.60.1 от CVS.

0
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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