   :type  'symbol
   :group 'shell-header)
 
-(defun shell-header--get-shell-buffer ()
+(defcustom shell-header-use-project-support t
+  "support projectile"
+  :type  'symbol
+  :group 'shell-header)
+
+(defun shell-header--get-current-buffer-list (&optional is-global)
+  (if (or is-global (not shell-header-use-project-support))
+      (buffer-list)
+    ;; projectile buffer
+    (if (and (require 'projectile nil t) (projectile-project-p))
+        (projectile-project-buffers)
+      (buffer-list))))
+
+(defun shell-header--get-project-name ()
+  (if (require 'projectile nil t)
+      (projectile-project-name)
+    ""))
+
+(defun shell-header--get-shell-buffer (&optional is-global)
   (sort
    (remove-if-not
     (lambda (x)


(define-key shell-header-mode-map (kbd "M-]") 'shell-header-next)
(define-key shell-header-mode-map (kbd "M-[") 'shell-header-prev)

;;;###autoload
(defun shell-header-next ()

(defun shell-header--header-line-cancel ()
  (setq-local header-line-format nil))

(defun shell-header--switch (direction offset &optional is-global)
  (let* ((misc-list (shell-header--get-shell-buffer is-global))
         (misc-list-len (length misc-list))
         (index (position (current-buffer) misc-list)))
    (if (= misc-list-len 0)
