Changeset - 028980b753ae
[Not reviewed]
0 1 0
Sergey Pashinin - 12 years ago 2014-02-26 00:10:50
sergey@pashinin.com
Disabled help-mode for now because of a bug #29

Personally I couldn't reproduce it, but 2 confirmed this.
1 file changed with 3 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/workgroups-specialbufs.el
Show inline comments
 
;;; workgroups-specialbufs --- special buffers serialization
 
;;; Commentary:
 
;;
 
;; TODO:
 
;;  1. Add more special buffers support (that you use)
 
;;  2. Improve existing
 
;;
 
;;; Code:
 

	
 
(require 'workgroups-variables)
 
(require 'workgroups-support-macro)
 

	
 
;; Dired
 
(wg-support 'dired-mode 'dired
 
            `((deserialize . ,(lambda (buffer vars)
 
                                (if (or wg-restore-remote-buffers
 
                                        (not (file-remote-p default-directory)))
 
                                    ;; TODO: try to restore parent dir if not exist
 
                                    (if (file-directory-p default-directory)
 
                                        (dired default-directory)))))))
 

	
 
;; Info-mode
 
(wg-support 'Info-mode 'info
 
            `((save . (Info-current-file Info-current-node))
 
              (deserialize . ,(lambda (buffer vars)
 
                                (wg-aif vars
 
                                    (if (fboundp 'Info-find-node)
 
                                        (apply #'Info-find-node it))
 
                                  (info))))))
 

	
 
;; help-mode
 
;; Bug: https://github.com/pashinin/workgroups2/issues/29
 
(if nil
 
(wg-support 'help-mode 'help-mode
 
            `((save . (help-xref-stack-item help-xref-stack help-xref-forward-stack))
 
              (deserialize . ,(lambda (buffer vars)
 
                               (wg-dbind (item stack forward-stack) vars
 
                                 (condition-case err
 
                                     (apply (car item) (cdr item))
 
                                   (error (message "%s" err)))
 
                                 (wg-awhen (get-buffer "*Help*")
 
                                   (set-buffer it)
 
                                   (wg-when-boundp (help-xref-stack help-xref-forward-stack)
 
                                     (setq help-xref-stack stack
 
                                           help-xref-forward-stack forward-stack))))))))
 
)
 

	
 
;; ielm
 
(wg-support 'inferior-emacs-lisp-mode 'ielm
 
            `((deserialize . ,(lambda (buffer vars) (ielm)))))
 

	
 
;; Magit status
 
(wg-support 'magit-status-mode 'magit
 
            `((deserialize . ,(lambda (buffer vars)
 
                                (when (file-directory-p default-directory)
 
                                  (magit-status default-directory))))))
 

	
 
;; Shell
 
(wg-support 'shell-mode 'shell
 
            `((deserialize . ,(lambda (buffer vars)
 
                                (shell (wg-buf-name buffer))))))
 

	
 
;; 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)))))))
 

	
 
(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)))))))
 

	
 
(wg-support 'org-agenda-mode 'org-agenda
 
            '((serialize . (lambda (buffer)
 
                             (wg-get-org-agenda-view-commands)))
 
              (deserialize . (lambda (buffer vars)
 
                               (org-agenda-list)
 
                               (wg-awhen (get-buffer org-agenda-buffer-name)
 
                                 (set-buffer it)
 
                                 (wg-run-agenda-cmd vars))
 
                               ))))
 

	
 
;; eshell
 
(wg-support 'eshell-mode 'esh-mode
 
            '((deserialize . (lambda (buffer vars)
 
                               (prog1 (eshell t)
 
                                 (rename-buffer (wg-buf-name buffer) t))))))
 

	
 
;; term-mode
 
;;
 
;; 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.
 
;;
 
(wg-support 'term-mode 'term
 
            `((serialize . ,(lambda (buffer)
 
                              (if (get-buffer-process buffer)
 
                                  (wg-last1 (process-command (get-buffer-process buffer)))
 
                                "/bin/bash")))
 
              (deserialize . ,(lambda (buffer vars)
 
                                (cl-labels ((term-window-width () 80)
 
                                            (window-height () 24))
 
                                  (prog1 (term vars)
 
                                    (rename-buffer (wg-buf-name buffer) t)))))))
 

	
 
;; Python
 
(wg-support 'inferior-python-mode 'python
 
            `((save . (python-shell-interpreter python-shell-interpreter-args))
 
              (deserialize . ,(lambda (buffer vars)
 
                                (wg-dbind (pythoncmd pythonargs) vars
 
                                  (save-window-excursion
 
                                    (run-python (concat pythoncmd " " pythonargs)))
 
                                  (wg-awhen (get-buffer (process-buffer (python-shell-get-or-create-process)))
 
                                    (set-buffer it)
 
                                    (switch-to-buffer (process-buffer (python-shell-get-or-create-process)))
 
                                    (goto-char (point-max)))
 
                                  )))))
 

	
 
;; Sage shell
 
(wg-support 'inferior-sage-mode 'sage-mode
 
            `((deserialize . ,(lambda (buffer vars)
 
                                (save-window-excursion
 
                                  (if (boundp' sage-command)
 
                                      (run-sage t sage-command t)))
 
                                (if (boundp 'sage-buffer)
0 comments (0 inline, 0 general)