Здравствуй %username%!
Недавно начал использовать Emacs. Мне очень нравится за скорость и простоту. После покупки нетбука столкнулся с тем, что Emacs под Windows не влазит в его 1024x600 когда он запускается, и приходится каждый раз менять размен окна и его двигать. Как решение написал маленькую функцию, которая восстанавливает размер окна при старте. Думаю, это может быть полезно не только пользователям нетбуков.
Файл restore-window-on-startrup.el
Чтобы все заработало, в файл .emacs следует дописать строчку
Для новичков emacs (коим и себя считаю) объясню как это все работает:
Последняя строчка добавляет вызов save-window-size-if-changed в список функций перехвата изменения окна. Эта функция сравнивает новый размер окна с теми что уже были сохранены и если они отличаются, то записывает в файл ~/.emacs.d/whsettings вот где-то такую конструкцию, с новыми размерами окна: (setq saved-window-size '(100 30)).
Функция restore-saved-window-size, которая вызывается прямо после своего объявления загружает этот файл (если его нету, заполняет сохраненные размеры хардкодом 80x30) и устанавливает размеры окна.
Для пользователей Windows: каталог "~", в котором лежит .emacs и директория .emacs.d это обычно папка вида C:\Documents and Settings\%Username%. Ещё, обязательно прочитать про другие специфические настройки в этом топике.
Недавно начал использовать Emacs. Мне очень нравится за скорость и простоту. После покупки нетбука столкнулся с тем, что Emacs под Windows не влазит в его 1024x600 когда он запускается, и приходится каждый раз менять размен окна и его двигать. Как решение написал маленькую функцию, которая восстанавливает размер окна при старте. Думаю, это может быть полезно не только пользователям нетбуков.
Как такое сделать
Файл restore-window-on-startrup.el
(defun restore-saved-window-size()
(unless (load "~/.emacs.d/whsettings" t nil t)
(setq saved-window-size '(80 30)))
(nconc default-frame-alist `((width . ,(car saved-window-size))
(height . ,(cadr saved-window-size)))))
(restore-saved-window-size)
(defun save-window-size-if-changed (&optional unused)
(let ((original-window-size `(,(frame-width) ,(frame-height))))
(unless (equal original-window-size saved-window-size)
(with-temp-buffer
(setq saved-window-size original-window-size)
(insert (concat "(setq saved-window-size '"
(prin1-to-string saved-window-size) ")"))
(write-file "~/.emacs.d/whsettings")))))
(add-hook 'window-size-change-functions 'save-window-size-if-changed)
Чтобы все заработало, в файл .emacs следует дописать строчку
(load "restore-window-on-startrup.el")
Как это работает
Для новичков emacs (коим и себя считаю) объясню как это все работает:
Последняя строчка добавляет вызов save-window-size-if-changed в список функций перехвата изменения окна. Эта функция сравнивает новый размер окна с теми что уже были сохранены и если они отличаются, то записывает в файл ~/.emacs.d/whsettings вот где-то такую конструкцию, с новыми размерами окна: (setq saved-window-size '(100 30)).
Функция restore-saved-window-size, которая вызывается прямо после своего объявления загружает этот файл (если его нету, заполняет сохраненные размеры хардкодом 80x30) и устанавливает размеры окна.
Для пользователей Windows: каталог "~", в котором лежит .emacs и директория .emacs.d это обычно папка вида C:\Documents and Settings\%Username%. Ещё, обязательно прочитать про другие специфические настройки в этом топике.