1

Когда я запускаю emacs, я бы хотел, чтобы появилось 4 окна, и внутри каждого окна я бы хотел, чтобы буфер отображался так, как я указал в моем файле .emacs. Возможно, в верхнем левом окне появится веб-браузер emacs w3m, в верхнем правом окне появится интерпретатор python, появится нижнее левое окно, последнее использованное окно, а для нижнего правого окна появится пустой буфер.

  1. Как я могу написать эту функцию в elisp для моего файла .emacs?
  2. Где вы узнали эту информацию, чтобы ответить на этот вопрос? Вы пользовались страницами справки emacs?

Вся помощь очень ценится!

2 ответа2

1

Запрашиваемая вами функциональность является распространенным желанием среди пользователей Emacs. Хорошей новостью является то, что существует ряд существующих пакетов, которые будут делать то, что вы хотите. Мой любимый это workgroups.el. Это удивительно мощный. Вы можете установить его с ELPA; Вот репозиторий GitHub, с отличным файлом readme. Вся упаковка необычно хорошо документирована.

https://github.com/tlh/workgroups.el

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

0

БЛАГОДАРНОСТЬ

Я собрал решение из вещей, которые я нашел на следующих страницах:

  • Пользователь Ubuntu Forums japhyr сделал почти то, что вам нужно.
  • На различных страницах Emacs Wiki вы можете найти категории Windows и Session Management особенно интересными.

ЗАМЕТКИ

  • Вы не указали, какую операционную систему вы используете. Я предполагаю, что это какой-то вкус * nix. Поправьте меня если я ошибаюсь. Если вы используете Windows, вы все равно можете использовать .emacs я предлагаю, но не можете использовать обходной путь (см. Ниже).

  • Мое решение загружает emacs с 4 - мя открытыми окнами, w3m показывая Google в левом верхнем углу, питон оболочки в правом верхнем углу, последний открытый файл в левом нижнем углу и пустой буфер scratch на правом нижнем углу. Это прекрасно работает, если вы запускаете emacs без аргументов, но нарушает компоновку, если вы открываете файл прямо из командной строки:

    emacs foo.txt
    
  • Поэтому я также предлагаю обходной путь для загрузки макета, только если не указано имя файла. Если вы всегда хотите загрузить макет с 4 окнами, просто добавьте строки lisp ниже непосредственно в ~/.emacs вместо создания нового файла.

  • Если вы решили добавить строки непосредственно в файл ~/.emacs , будьте осторожны с этими командами:

    ;; Set the max number of recent files kept
    (custom-set-variables
     '(recentf-max-saved-items 10)
    '(inhibit-startup-screen t))
    

    В файле custom-set-variables может быть только один раздел пользовательских .emacs поэтому вместо добавления этих строк в файл найдите существующий раздел пользовательских custom-set-variables и просто добавьте переменную:

    '(recentf-max-saved-items 10)
    

ОТВЕТ

Создайте в вашем $HOME файл с именем .my_emacs_layout содержащий эти строки (или добавьте их в файл ~/.emacs , см. Примечания выше):

;; Activate recentf mode to get the list of
;; recent files
(recentf-mode 1)

;; Load the w3m browser, change this to the location of your `w3m` install.
;; You should be able to copy the relevant lines from your `~/.emacs`.
(add-to-list 'load-path "~/.emacs-lisp/emacs-w3m")
(require 'w3m-load)

;; Set the max number of recent files kept
(custom-set-variables
 '(recentf-max-saved-items 10)
'(inhibit-startup-screen t))
;; Set up initial window layout.  
(split-window-horizontally)
;; Open w3m in the main window, this
;; will be the top left
(w3m-goto-url "www.superuser.com")

;; Split the left window vertically
(split-window-vertically)

;; switch to the bottom left window
(other-window 1)
;; and load the most recent file
(recentf-open-most-recent-file 1)

;; I am sure there is a better way of doing this 
;; but for some reason opening the python shell screws
;; around with the window focus and this ugly hack is 
;; the best I could come up with.
(other-window 1)
(split-window-vertically)
(other-window 1)
(other-window 1)
(other-window 1)
;; open the python shell in what will be 
;; the top right window
(py-shell)

Вот и все, теперь вы можете загрузить свой новый макет emacs , запустив

emacs -l ~/.my_emacs_layout

Временное решение

Если вы хотите загрузить обычный сеанс emacs при явном открытии файла и загрузить макет из 4 окон при простом запуске emacs , добавьте эти строки в файл конфигурации вашей оболочки (~/.bashrc если вы используете bash):

function emacs(){
 if [ $# -eq 0 ]
 then
     /usr/bin/emacs -l ~/.my_emacs_layout
  else
     /usr/bin/emacs "$@"
 fi
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .