LINUX.ORG.RU

[emacs] Сохранение геометрии окна

 


0

0

Здравствуй, ЛОР.

И снова я со своим имаксом. На этот раз мне хочется сохранения размеров и положения иксового окна при выходе и восстановления при старте.

Нашел нечто приблизительно похожее на требуемое, попробовал допилить, но не вышло, не знаю, как получать размеры фрейма:

(defun restore-saved-window-geom()
  (unless (load "~/.emacs.d/framesize" t nil t)
    (setq saved-window-size '(80 30)))
  (nconc initial-frame-alist `((width . ,(car saved-window-size))
                               (height . ,(cadr saved-window-size))
                               )
         )
  (if (load "~/.emacs.d/framepos" t nil t)
    (nconc initial-frame-alist `((left . ,(car saved-window-pos))
                               (top . , (cadr saved-window-pos))
                               )
           )
    )
)

(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/framesize")))))

(defun save-window-pos-if-changed (&optional unused)
; вот это и не работает
  (let ((original-window-pos  `(,(frame-left) ,(frame-top))))
    (unless (equal original-window-pos saved-window-pos)
      (with-temp-buffer
        (setq saved-window-pos original-window-pos) 
        (insert (concat "(setq saved-window-pos '"
                        (prin1-to-string saved-window-pos) ")"))
        (write-file "~/.emacs.d/framepos")))))

(when window-system
  (restore-saved-window-geom)
  (add-hook 'window-size-change-functions 'save-window-size-if-changed)
;  (add-hook 'window-configuration-change-hook 'save-window-pos-if-changed)
)

(provide 'winsize)

Если кому интересно, то вот мой конфиг: http://github.com/FeiWongReed/emacs



Последнее исправление: FeiWongReed (всего исправлений: 2)

О Господи, оно ещё и геометрию сохранять не умеет само...

Cancellor ★★★★☆
()
Ответ на: комментарий от Zubok

> set-frame-width, set-frame-height, set-frame-position

С установкой у меня проблем нет. Мне читать надо научиться.

FeiWongReed
() автор топика
Ответ на: комментарий от anonymous

> pm-utils is the new suspend and powerstate setting framework

Издеваться изволите?

tiling wm

Это не то, что мне нужно.

FeiWongReed
() автор топика
Ответ на: комментарий от power

Не нужен мне тайловый wm, мне нужен рестор позиции окна. Ничего, сделаю.

FeiWongReed
() автор топика

Можно по-другому. Можно сохранить параметры фрейма Emacs в произвольном файле и написать скрипт-обвязку, который читает этот файл и запускает Emacs c опцией -geometry.

Профит: Изменение геометрии окна Emacs при твоем подходе произойдет только тогда, когда он дойдет до выполнения этого места в процессе инициализации. А фрейм к этому времени уже будет отображен и будет иметь умолчательные размеры и положение, то есть размеры окна у тебя поменяются на глазах, и оно перескочит в нужную позицию, что не так страшно, разумеется, но просто некузяво. А вот если параметр через -geometry передашь, то у тебя геометрия приложится сразу при появлении окна программы.

Довод против: надо будет запускать скрипт-обвязку, а не emacs напрямую.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Была такая мысль, но этот костылик-обвязка меня не радует. Рабочую сохранялку я уже сделал (прыгает, зараза). Но ее допилить нужно.

FeiWongReed
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.