emacs: elscreen default-directory, exclude eshell-mode to update default directory
[dotfiles.git] / emacs.d / config / init-elscreen.el
1 ;; this config file is based on  seudut/elscreen.git, which added two interface and one property 
2 ;; default directory
3
4 (elscreen-set-default-directory (elscreen-get-current-screen) "~/")
5
6 ;; change default keybinding
7 (global-set-key (kbd "<M-tab>") 'elscreen-next) ;; "C-M-I"
8 (global-set-key (kbd "M-n") 'elscreen-next)
9 (global-set-key (kbd "M-p") 'elscreen-previous)
10 (global-set-key (kbd "M-t") 'elscreen-create)
11 ;;; split 
12
13
14 ;; tab face
15
16 (custom-set-faces
17  '(elscreen-tab-current-screen-face ((t (:background "Yellow" :foreground "black"))))
18  '(elscreen-tab-other-screen-face ((t (:background "gray22" :foreground "black")))))
19
20 ;;(add-hook 'elscreen-create-hook
21 ;;          (lambda ()
22 ;;            (elscreen-set-default-directory  
23 ;;              (elscreen-get-current-screen) "~/")))
24
25
26 (add-hook 'elscreen-goto-hook
27           (lambda ()
28             (elscreen-cd-default-directory
29               (elscreen-get-default-directory (elscreen-get-current-screen)))))
30
31 (defun sd-cd-dd (dir)
32   "Set default directory screen."
33   (interactive "sSet dir:")
34   (elscreen-set-default-directory (elscreen-get-current-screen) dir)
35   (cd dir)
36 )
37
38 (defun sd-show-dir ()
39   "show elscreen default directory."
40   (interactive)
41   (message
42   (elscreen-get-default-directory (elscreen-get-current-screen))))
43
44 (defun sd-update-elscreen-dir ()
45   "update elscreen dir as current default directory"
46   (interactive)
47   (elscreen-set-default-directory (elscreen-get-current-screen) default-directory))
48
49
50
51
52 ;;(add-hook 'buffer-list-update-hook
53 ;;          (lambda ()
54 ;;            (let ((el-dir (elscreen-get-default-directory (elscreen-get-current-screen))))
55 ;;              (if (> (length el-dir) 0)
56 ;;                 (cd el-dir)))))
57
58 (defvar elscreen-exclude-modes '(eshell-mode magit magit-status-mode magit-commit-mode magit-diff-mode) "the major modes don't update directory")
59
60 ;; when major-mode is magit-*, don't change default-directory, otherwise, there is error when usingit command in magin-* mode
61 (add-hook 'elscreen-screen-update-hook
62           (lambda ()
63             (let ((el-dir (elscreen-get-default-directory (elscreen-get-current-screen))))
64               (unless (member  major-mode elscreen-exclude-modes)
65                 (if (> (length el-dir) 0)
66                   (cd el-dir))))))
67
68
69 (provide 'init-elscreen)