указание поведения запуска emacs

У меня есть вопрос о конфигурации поведения запуска emacs. Я понятия не имею о lisp, я просто люблю emacs для редактирования.

Я хотел бы иметь следующее:

  1. Я вызываю emacs как emacs FILE
  2. emacs открывает окно под названием FILE
  3. emacs разбивает окно по горизонтали
  4. в верхней рамке открывает файл FILE.abc
  5. идет к нижней рамке и открывается FILE.xyz
  6. оптимально возвращается к верхней раме

Я посмотрел здесь: как создать конкретное окно установка в .emacs и половина пути завершена. Однако в моем случае макрос не работает, потому что мне нужно передать аргумент. Любая помощь очень ценится.


person Simon Righley    schedule 25.02.2013    source источник
comment
Прочтите emacswiki.org/emacs/KeyboardMacros#toc5 — подсказки во время выполнения макроса.   -  person aartist    schedule 25.02.2013
comment
То, что вы называете фреймом, в emacs называется окном.   -  person sds    schedule 25.02.2013


Ответы (1)


В общем, вы обнаружите, что Emacs лучше обслуживает вас, если вы остаетесь в нем, просто "посещая" (как Emacs - в течение 40 лет - называл операцию, известную в других местах - в течение 30 лет - как "открыть") файлы.

Вот функция (непроверенная):

(defun open-two-files (file)
  "Open FILE.abc in the top window and FILE.xyz in the bottom window.
http://stackoverflow.com/questions/15070481/specifying-emacs-startup-behavior"
  (interactive "FEnter file base name: ")
  (let ((old-window (selected-window))
        (new-window (split-window-below)))
    (find-file (concat file ".abc"))
    (select-window new-window)
    (find-file (concat file ".xyz"))
    (select-window old-window)))

Вам нужно поместить его в свой ~/.emacs.el.

Теперь, если у вас уже открыт emacs, вам нужно сделать M-x open-two-files RET foo RET, чтобы открыть foo.abc и foo.xyz.

Если вы хотите начать новый сеанс Emacs, введите emacs --eval '(open-two-files "foo")'

person sds    schedule 25.02.2013
comment
Вы также можете сократить синтаксис командной строки, используя command-switch-alist (см. пример в emacswiki.org/emacs/EdiffMode) - person Necto; 25.02.2013
comment
Привет @sds, спасибо за ваш ответ. Однако есть одна проблема. Я последовал тому, что вы сказали, но после вызова я получаю определение функции Symbol is void: сообщение split-window-below, и ничего не происходит. Думал, это потому, что файлы, которые мне нужны, не существуют, поэтому я создал их с помощью другого редактора, но это не помогло. Любая подсказка? - person Simon Righley; 25.02.2013
comment
@SimonRighley: это может быть потому, что ваш Emacs не такой новый, как мой. Что вам говорит C-h k C-x 2? - person sds; 25.02.2013
comment
@sds: да, в том-то и дело, я изменил разделенное окно внизу на разделенное окно по вертикали, и это работает! Еще кое-что. В моем файле .zshrc я написал строку, которая гласит: emacs(){/usr/bin/emacs --eval '(open-two-files $1)' -title $1 &}, но в итоге я получил два файла, которые буквально называется $1.abc и $1.xyz. Вы случайно не знаете, как расшифровать $ ? - person Simon Righley; 25.02.2013
comment
@SimonRighley: это не магия Emacs, а оболочка: emacs(){/usr/bin/emacs --eval '(open-two-files "'$1'")' } - т. Е. Поместите одинарные кавычки вокруг $1, чтобы убрать его из кавычек - person sds; 25.02.2013
comment
@sds: абсолютно фантастически :) я всегда путался в разных кавычках ;) Огромное спасибо! :) - person Simon Righley; 26.02.2013