diff --git a/lisp/ein-notification.el b/lisp/ein-notification.el index 26f0885..8ae6f11 100644 --- a/lisp/ein-notification.el +++ b/lisp/ein-notification.el @@ -40,6 +40,7 @@ (defvar ein:header-line-format '(:eval (ein:header-line))) (defvar ein:header-line-tab-map (make-sparse-keymap)) +(defvar ein:header-line-insert-tab-map (make-sparse-keymap)) (defvar ein:header-line-tab-help "\ mouse-1 (left click) : switch to this tab @@ -222,26 +223,33 @@ insert-prev insert-next move-prev move-next)" (get-name (oref tab :get-name))) (ein:join-str " " - (loop for i from 1 - for elem in list - if (eq elem current) - collect (propertize - (or (ein:and-let* ((name (funcall get-name elem))) - (format "/%d: %s\\" i name)) - (format "/%d\\" i)) - 'ein:worksheet elem - 'keymap ein:header-line-tab-map - 'help-echo ein:header-line-tab-help - 'mouse-face 'highlight - 'face 'ein:notification-tab-selected) - else - collect (propertize - (format "/%d\\" i) - 'ein:worksheet elem - 'keymap ein:header-line-tab-map - 'help-echo ein:header-line-tab-help - 'mouse-face 'highlight - 'face 'ein:notification-tab-normal))))) + (append + (loop for i from 1 + for elem in list + if (eq elem current) + collect (propertize + (or (ein:and-let* ((name (funcall get-name elem))) + (format "/%d: %s\\" i name)) + (format "/%d\\" i)) + 'ein:worksheet elem + 'keymap ein:header-line-tab-map + 'help-echo ein:header-line-tab-help + 'mouse-face 'highlight + 'face 'ein:notification-tab-selected) + else + collect (propertize + (format "/%d\\" i) + 'ein:worksheet elem + 'keymap ein:header-line-tab-map + 'help-echo ein:header-line-tab-help + 'mouse-face 'highlight + 'face 'ein:notification-tab-normal)) + (list + (propertize "[+]" + 'keymap ein:header-line-insert-tab-map + 'help-echo "Click (mouse-1) to insert a new tab." + 'mouse-face 'highlight + 'face 'ein:notification-tab-normal)))))) ;;; Header line @@ -255,6 +263,9 @@ insert-prev insert-next move-prev move-next)" (define-key map [header-line mouse-2] 'ein:header-line-delete-this-tab) (define-key map [header-line mouse-3] 'ein:header-line-pop-to-this-tab)) +(define-key ein:header-line-insert-tab-map + [header-line mouse-1] 'ein:header-line-insert-new-tab) + (defmacro ein:with-destructuring-bind-key-event (key-event &rest body) (declare (debug (form &rest form)) (indent 1)) @@ -312,6 +323,14 @@ Generated by `ein:header-line-define-mouse-commands'" slot) ein:header-line-move-next-tab :move-next ) +(defun ein:header-line-insert-new-tab (key-event) + "Insert new tab." + (interactive "e") + (ein:header-line-select-window key-event) + (let ((notification (oref ein:%notification% :tab))) + (funcall (oref notification :insert-next) + (car (last (funcall (oref notification :get-list))))))) + (defun ein:header-line () (format "IP[%s]: %s"