Changeset - 0426de8255a5
[Not reviewed]
0 1 0
Sergey Pashinin - 12 years ago 2013-06-27 21:58:37
sergey@pashinin.com
check that some variables are defined before using them
1 file changed with 8 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/workgroups-specialbufs.el
Show inline comments
 
@@ -118,202 +118,207 @@ Since `help-mode' is used by many buffers that aren't actually
 

	
 
;; WL - summary mode (list of mails)
 
;;(defun wg-deserialize-wl-summary-buffer (buf)
 
;;  ""
 
;;  (interactive)
 
;;  (if (fboundp 'wl)
 
;;      (wg-dbind (this-function param-list) (wg-buf-special-data buf)
 
;;        (when (not (eq major-mode 'wl-summary-mode))
 
;;          (let ((fld-name (car param-list)))
 
;;            ;;(switch-to-buffer "*scratch*")
 
;;            ;;(wl)
 
;;            ;;(wl-folder-jump-folder fld-name)
 
;;            ;;(message fld-name)
 
;;            ;;(goto-char (point-max))
 
;;            ;;(insert fld-name)
 
;;            (current-buffer)
 
;;          )))))
 
;;
 
;;(defun wg-serialize-wl-summary-buffer (buffer)
 
;;  ""
 
;;  (if (fboundp 'wl)
 
;;      (with-current-buffer buffer
 
;;        (when (eq major-mode 'wl-summary-mode)
 
;;          (list 'wg-deserialize-wl-summary-buffer
 
;;                (wg-take-until-unreadable (list wl-summary-buffer-folder-name))
 
;;                )))))
 
;;
 
;;
 
;;;; mime-view-mode
 
;;
 
;;(defun wg-deserialize-mime-view-buffer (buf)
 
;;  ""
 
;;  (wg-dbind (this-function) (wg-buf-special-data buf)
 
;;    (when (not (eq major-mode 'mime-view-mode))
 
;;      ;;(wl-summary-enter-handler 3570)     ; only in wl-summary-mode
 
;;      ;;(wl-summary-enter-handler)     ; only in wl-summary-mode
 
;;      (current-buffer)
 
;;      )))
 
;;
 
;;(defun wg-serialize-mime-view-buffer (buffer)
 
;;  ""
 
;;  (with-current-buffer buffer
 
;;    (when (eq major-mode 'mime-view-mode)
 
;;      (list 'wg-deserialize-mime-view-buffer
 
;;            ))))
 

	
 

	
 
;; Magit buffers
 

	
 
(defun wg-deserialize-magit-buffer (buf)
 
  "Deserialize a Magit-status buffer BUF."
 
  (if (require 'magit nil 'noerror)
 
      (if (fboundp 'magit-status)
 
          (wg-dbind (this-function dir) (wg-buf-special-data buf)
 
            (let ((default-directory (car dir)))
 
              (if (file-exists-p default-directory)
 
                  (magit-status default-directory))
 
              (current-buffer))))))
 

	
 
(defun wg-serialize-magit-buffer (buf)
 
  "Serialize a Magit-status buffer BUF."
 
  (if (fboundp 'magit-status-mode)
 
      (with-current-buffer buf
 
        (when (eq major-mode 'magit-status-mode)
 
          (list 'wg-deserialize-magit-buffer
 
                (wg-take-until-unreadable (list (or (buffer-file-name) default-directory)))
 
                )))))
 

	
 

	
 
;; shell buffer serdes
 

	
 
(defun wg-deserialize-shell-buffer (buf)
 
  "Deserialize a `shell-mode' buffer BUF.
 
Run shell with last working dir"
 
  (wg-dbind (this-function dir) (wg-buf-special-data buf)
 
    (let ((default-directory (car dir)))
 
      (shell (wg-buf-name buf))
 
      (current-buffer)
 
      )))
 

	
 
(defun wg-serialize-shell-buffer (buffer)
 
  "Serialize a `shell-mode' buffer BUFFER.
 
Save shell directory"
 
  (with-current-buffer buffer
 
    (when (eq major-mode 'shell-mode)
 
      (list 'wg-deserialize-shell-buffer
 
            (wg-take-until-unreadable (list (or (buffer-file-name) default-directory)))
 
            ))))
 

	
 

	
 
;; org-agenda buffer
 

	
 
(defun wg-get-org-agenda-view-commands ()
 
  "Return commands to restore the state of Agenda buffer.
 
Can be restored using \"(eval commands)\"."
 
  (interactive)
 
  (when (boundp 'org-agenda-buffer-name)
 
    (if (get-buffer org-agenda-buffer-name)
 
        (with-current-buffer org-agenda-buffer-name
 
          (let* ((p (or (and (looking-at "\\'") (1- (point))) (point)))
 
                 (series-redo-cmd (get-text-property p 'org-series-redo-cmd)))
 
            (if series-redo-cmd
 
                (get-text-property p 'org-series-redo-cmd)
 
            (get-text-property p 'org-redo-cmd))))))
 
              (get-text-property p 'org-redo-cmd)))))))
 

	
 
(defun wg-run-agenda-cmd (f)
 
  "Run commands \"F\" in Agenda buffer.
 
You can get these commands using
 
\"wg-get-org-agenda-view-commands\"."
 
  (when (and (boundp 'org-agenda-buffer-name)
 
             (fboundp 'org-current-line)
 
             (fboundp 'org-goto-line))
 
    (if (get-buffer org-agenda-buffer-name)
 
        (save-window-excursion
 
          (with-current-buffer org-agenda-buffer-name
 
            (let* ((line (org-current-line)))
 
              (if f (eval f))
 
            (org-goto-line line))))))
 
              (org-goto-line line)))))))
 

	
 
(defun wg-deserialize-org-agenda-buffer (buf)
 
  "Deserialize an `org-agenda-mode' buffer BUF."
 
  (org-agenda-list)
 
  (when (boundp 'org-agenda-buffer-name)
 
    (wg-dbind (this-function item) (wg-buf-special-data buf)
 
      (wg-awhen (get-buffer org-agenda-buffer-name)
 
        (set-buffer it)
 
        (wg-run-agenda-cmd item)
 
      (current-buffer))))
 
        (current-buffer)))))
 

	
 
(defun wg-serialize-org-agenda-buffer (buffer)
 
  "Serialize an `org-agenda-mode' buffer BUFFER."
 
  (with-current-buffer buffer
 
    (when (eq major-mode 'org-agenda-mode)
 
      (list 'wg-deserialize-org-agenda-buffer
 
            (wg-take-until-unreadable (wg-get-org-agenda-view-commands))
 
            ))))
 

	
 

	
 
;; eshell
 

	
 
(defun wg-deserialize-eshell-buffer (buf)
 
  "Deserialize an `eshell-mode' buffer BUF."
 
  (prog1 (eshell t)
 
    (rename-buffer (wg-buf-name buf) t)))
 

	
 
(defun wg-serialize-eshell-buffer (buffer)
 
  "Serialize an `eshell-mode' buffer BUFFER."
 
  (with-current-buffer buffer
 
    (when (eq major-mode 'eshell-mode)
 
      (list 'wg-deserialize-eshell-buffer))))
 

	
 

	
 
;; term and ansi-term buffer serdes
 

	
 
(defun wg-deserialize-term-buffer (buf)
 
  "Deserialize a `term-mode' buffer BUF."
 
  (require 'term)
 
  ;; flet'ing these prevents scrunched up wrapping when restoring during morph
 
  (dflet ((term-window-width () 80)
 
         (window-height () 24))
 
    (prog1 (term (nth 1 (wg-buf-special-data buf)))
 
      (rename-buffer (wg-buf-name buf) t))))
 

	
 
(defun wg-serialize-term-buffer (buffer)
 
  "Serialize a `term-mode' buffer BUFFER.
 
This should work for `ansi-term's, too, as there doesn't seem to
 
be any difference between the two except how the name of the
 
buffer is generated."
 
  (with-current-buffer buffer
 
    (when (eq major-mode 'term-mode)
 
      (wg-when-let ((process (get-buffer-process buffer)))
 
        (list 'wg-deserialize-term-buffer
 
              (wg-last1 (process-command process)))))))
 

	
 

	
 

	
 

	
 

	
 

	
 
;;; buffer-local variable serdes
 

	
 
(defun wg-serialize-buffer-mark-ring ()
 
  "Return a new list of the positions of the marks in `mark-ring'."
 
  (mapcar 'marker-position mark-ring))
 

	
 
(defun wg-deserialize-buffer-mark-ring (positions)
 
  "Set `mark-ring' to a new list of markers created from POSITIONS."
 
  (setq mark-ring
 
        (mapcar (lambda (pos) (set-marker (make-marker) pos))
 
                positions)))
 

	
 
(defun wg-deserialize-buffer-major-mode (major-mode-symbol)
 
  "Conditionally retore MAJOR-MODE-SYMBOL in `current-buffer'."
 
  (and (fboundp major-mode-symbol)
 
       (not (eq major-mode-symbol major-mode))
 
       (funcall major-mode-symbol)))
 

	
 
(defun wg-deserialize-buffer-local-variables (buf)
 
  "Restore BUF's buffer local variables in `current-buffer'."
 
  (loop for ((var . val) . rest) on (wg-buf-local-vars buf)
 
        do (wg-awhen (assq var wg-buffer-local-variables-alist)
 
             (wg-dbind (var ser des) it
 
               (if des (funcall des val)
 
                 (set var val))))))
 

	
 
(provide 'workgroups-specialbufs)
 
;;; workgroups-specialbufs.el ends here
0 comments (0 inline, 0 general)