Skip to content

Instantly share code, notes, and snippets.

@tam17aki
Last active October 10, 2015 23:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tam17aki/3765059 to your computer and use it in GitHub Desktop.
Save tam17aki/3765059 to your computer and use it in GitHub Desktop.
patch file for elscreen.el
*** elscreen.el 2012-10-03 11:34:53.000000000 +0900
--- elscreen_new.el 2012-10-03 11:35:35.000000000 +0900
***************
*** 37,43 ****
;;; User Customizable Variables:
! (defconst elscreen-version "2012-04-11")
(defgroup elscreen nil
"ElScreen -- Screen Manager for Emacs"
--- 37,46 ----
;;; User Customizable Variables:
! (require 'iswitchb)
! (require 'dired)
!
! (defconst elscreen-version "2012-09-21")
(defgroup elscreen nil
"ElScreen -- Screen Manager for Emacs"
***************
*** 113,125 ****
(elscreen-rebuild-buffer-to-nickname-alist)))
:group 'elscreen)
- (defcustom elscreen-startup-command-line-processing t
- "*If non-nil, ElScreen processes command line when Emacsen
- starts up, and opens files with new screen if needed."
- :type 'boolean
- :tag "Enable/Disable ElScreen to Process Command Line Arguments"
- :group 'elscreen)
-
(defcustom elscreen-display-screen-number t
"*Non-nil to display the number of current screen in the mode line."
:tag "Show/Hide Screen Number on the mode-line"
--- 116,121 ----
***************
*** 140,147 ****
(and (numberp value)
(> value 0)))
(custom-set-default symbol value)
! (when (fboundp 'elscreen-e21-tab-update)
! (elscreen-e21-tab-update t))))
:group 'elscreen)
(make-obsolete-variable 'elscreen-tab-display-create-screen
--- 136,143 ----
(and (numberp value)
(> value 0)))
(custom-set-default symbol value)
! (when (fboundp 'elscreen-tab-update)
! (elscreen-tab-update t))))
:group 'elscreen)
(make-obsolete-variable 'elscreen-tab-display-create-screen
***************
*** 152,159 ****
:type 'boolean
:set (lambda (symbol value)
(custom-set-default symbol value)
! (when (fboundp 'elscreen-e21-tab-update)
! (elscreen-e21-tab-update t)))
:group 'elscreen)
(defcustom elscreen-tab-display-kill-screen 'left
--- 148,155 ----
:type 'boolean
:set (lambda (symbol value)
(custom-set-default symbol value)
! (when (fboundp 'elscreen-tab-update)
! (elscreen-tab-update t)))
:group 'elscreen)
(defcustom elscreen-tab-display-kill-screen 'left
***************
*** 164,171 ****
(const :tag "None" nil))
:set (lambda (symbol value)
(custom-set-default symbol value)
! (when (fboundp 'elscreen-e21-tab-update)
! (elscreen-e21-tab-update t)))
:group 'elscreen)
(defface elscreen-tab-background-face
--- 160,167 ----
(const :tag "None" nil))
:set (lambda (symbol value)
(custom-set-default symbol value)
! (when (fboundp 'elscreen-tab-update)
! (elscreen-tab-update t)))
:group 'elscreen)
(defface elscreen-tab-background-face
***************
*** 355,363 ****
(when (marker-buffer marker)
(goto-char marker))))
- (defun get-alist (key alist)
- (cdr (assoc key alist)))
-
(defsubst elscreen-copy-tree (tree)
(if (fboundp 'copy-tree)
(copy-tree tree)
--- 351,356 ----
***************
*** 386,392 ****
(setq elscreen-frame-confs original-frame-confs)
(elscreen-apply-window-configuration
original-elscreen-window-configuration)
! (mapcar
(lambda (buffer)
(when (buffer-live-p buffer)
(bury-buffer buffer)
--- 379,385 ----
(setq elscreen-frame-confs original-frame-confs)
(elscreen-apply-window-configuration
original-elscreen-window-configuration)
! (mapc
(lambda (buffer)
(when (buffer-live-p buffer)
(bury-buffer buffer)
***************
*** 397,403 ****
(bury-buffer (car (buffer-list))))))))
(defsubst elscreen-get-frame-confs (frame)
! (get-alist frame elscreen-frame-confs))
(defun elscreen-make-frame-confs (frame &optional keep-window-configuration)
(when (null (elscreen-get-frame-confs frame))
--- 390,396 ----
(bury-buffer (car (buffer-list))))))))
(defsubst elscreen-get-frame-confs (frame)
! (assoc-default frame elscreen-frame-confs))
(defun elscreen-make-frame-confs (frame &optional keep-window-configuration)
(when (null (elscreen-get-frame-confs frame))
***************
*** 430,436 ****
(add-hook 'delete-frame-functions 'elscreen-delete-frame-confs)
(defsubst elscreen-get-conf-list (type)
! (get-alist type (elscreen-get-frame-confs (selected-frame))))
(defsubst elscreen-set-conf-list (type conf-list)
(let ((frame-conf (elscreen-get-frame-confs (selected-frame))))
--- 423,429 ----
(add-hook 'delete-frame-functions 'elscreen-delete-frame-confs)
(defsubst elscreen-get-conf-list (type)
! (assoc-default type (elscreen-get-frame-confs (selected-frame))))
(defsubst elscreen-set-conf-list (type conf-list)
(let ((frame-conf (elscreen-get-frame-confs (selected-frame))))
***************
*** 438,444 ****
(defun elscreen-get-screen-property (screen)
(let ((screen-property-list (elscreen-get-conf-list 'screen-property)))
! (get-alist screen screen-property-list)))
(defun elscreen-set-screen-property (screen property)
(let ((screen-property-list (elscreen-get-conf-list 'screen-property)))
--- 431,437 ----
(defun elscreen-get-screen-property (screen)
(let ((screen-property-list (elscreen-get-conf-list 'screen-property)))
! (assoc-default screen screen-property-list)))
(defun elscreen-set-screen-property (screen property)
(let ((screen-property-list (elscreen-get-conf-list 'screen-property)))
***************
*** 470,476 ****
"Return pair of window-configuration and marker of SCREEN
from `elscreen-frame-confs', a cons cell."
(let ((screen-property (elscreen-get-screen-property screen)))
! (get-alist 'window-configuration screen-property)))
(defun elscreen-set-window-configuration (screen winconf)
"Set pair of window-configuration and marker of SCREEN to WINCONF."
--- 463,469 ----
"Return pair of window-configuration and marker of SCREEN
from `elscreen-frame-confs', a cons cell."
(let ((screen-property (elscreen-get-screen-property screen)))
! (assoc-default 'window-configuration screen-property)))
(defun elscreen-set-window-configuration (screen winconf)
"Set pair of window-configuration and marker of SCREEN to WINCONF."
***************
*** 481,487 ****
(defun elscreen-get-screen-nickname (screen)
"Return nickname of SCREEN from `elscreen-frame-confs', a string."
(let ((screen-property (elscreen-get-screen-property screen)))
! (get-alist 'nickname screen-property)))
(defun elscreen-set-screen-nickname (screen nickname)
"Set nickname of SCREEN to NICKNAME."
--- 474,480 ----
(defun elscreen-get-screen-nickname (screen)
"Return nickname of SCREEN from `elscreen-frame-confs', a string."
(let ((screen-property (elscreen-get-screen-property screen)))
! (assoc-default 'nickname screen-property)))
(defun elscreen-set-screen-nickname (screen nickname)
"Set nickname of SCREEN to NICKNAME."
***************
*** 659,665 ****
(let* ((screen-list (sort (elscreen-get-screen-list) '<))
screen-name screen-to-name-alist nickname-type-map)
(elscreen-save-screen-excursion
! (mapcar
(lambda (screen)
;; If nickname exists, use it.
(setq screen-name (elscreen-get-screen-nickname screen))
--- 652,658 ----
(let* ((screen-list (sort (elscreen-get-screen-list) '<))
screen-name screen-to-name-alist nickname-type-map)
(elscreen-save-screen-excursion
! (mapc
(lambda (screen)
;; If nickname exists, use it.
(setq screen-name (elscreen-get-screen-nickname screen))
***************
*** 1037,1043 ****
(elscreen-message
(mapconcat
(lambda (screen)
! (let ((screen-name (get-alist screen screen-to-name-alist)))
(format "%d%s %s" screen
(elscreen-status-label screen "")
screen-name)))
--- 1030,1036 ----
(elscreen-message
(mapconcat
(lambda (screen)
! (let ((screen-name (assoc-default screen screen-to-name-alist)))
(format "%d%s %s" screen
(elscreen-status-label screen "")
screen-name)))
***************
*** 1118,1124 ****
(format " %d%s %s\n" screen
(elscreen-status-label screen)
(elscreen-truncate-screen-name
! (get-alist screen screen-to-name-alist)
truncate-length)))
screen-list nil)))
(prompt "Select screen or (c)reate, (n)ext, (p)revious, (t)oggle: ")
--- 1111,1117 ----
(format " %d%s %s\n" screen
(elscreen-status-label screen)
(elscreen-truncate-screen-name
! (assoc-default screen screen-to-name-alist)
truncate-length)))
screen-list nil)))
(prompt "Select screen or (c)reate, (n)ext, (p)revious, (t)oggle: ")
***************
*** 1180,1187 ****
(kill-buffer candidate-buffer)))
(cond
((string= command-or-target-screen ""))
! ((get-alist command-or-target-screen command-list)
! (funcall (get-alist command-or-target-screen command-list)))
(t
(elscreen-goto (string-to-number command-or-target-screen))))))
--- 1173,1180 ----
(kill-buffer candidate-buffer)))
(cond
((string= command-or-target-screen ""))
! ((assoc-default command-or-target-screen command-list)
! (funcall (assoc-default command-or-target-screen command-list)))
(t
(elscreen-goto (string-to-number command-or-target-screen))))))
***************
*** 1262,1289 ****
;;; Mode Line & Menu & Tab
;; GNU Emacs
!
! (defvar elscreen-e21-mode-line-string "[0]")
! (defun elscreen-e21-mode-line-update ()
! (when (elscreen-screen-modified-p 'elscreen-e21-mode-line-update)
! (setq elscreen-e21-mode-line-string
(format "[%d]" (elscreen-get-current-screen)))
(force-mode-line-update)))
(let ((point (memq 'mode-line-position mode-line-format))
(elscreen-mode-line-elm '(elscreen-display-screen-number
! (" " elscreen-e21-mode-line-string))))
(when (null (member elscreen-mode-line-elm mode-line-format))
(setcdr point (cons elscreen-mode-line-elm (cdr point)))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-e21-mode-line-update)
;; Menu
(define-key-after (lookup-key global-map [menu-bar]) [elscreen]
(cons "ElScreen" (make-sparse-keymap "ElScreen")) 'buffer)
! (defvar elscreen-e21-menu-bar-command-entries
(list (list 'elscreen-command-separator
'menu-item
"--")
--- 1255,1281 ----
;;; Mode Line & Menu & Tab
;; GNU Emacs
! (defvar elscreen-mode-line-string "[0]")
! (defun elscreen-mode-line-update ()
! (when (elscreen-screen-modified-p 'elscreen-mode-line-update)
! (setq elscreen-mode-line-string
(format "[%d]" (elscreen-get-current-screen)))
(force-mode-line-update)))
(let ((point (memq 'mode-line-position mode-line-format))
(elscreen-mode-line-elm '(elscreen-display-screen-number
! (" " elscreen-mode-line-string))))
(when (null (member elscreen-mode-line-elm mode-line-format))
(setcdr point (cons elscreen-mode-line-elm (cdr point)))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-mode-line-update)
;; Menu
(define-key-after (lookup-key global-map [menu-bar]) [elscreen]
(cons "ElScreen" (make-sparse-keymap "ElScreen")) 'buffer)
! (defvar elscreen-menu-bar-command-entries
(list (list 'elscreen-command-separator
'menu-item
"--")
***************
*** 1343,1349 ****
:help "Display tab on the top of screen"
:button '(:toggle . elscreen-display-tab))))
! (defun elscreen-e21-menu-bar-update (&optional force)
(when (and (lookup-key (current-global-map) [menu-bar elscreen])
(or force
(elscreen-screen-modified-p 'elscreen-menu-bar-update)))
--- 1335,1341 ----
:help "Display tab on the top of screen"
:button '(:toggle . elscreen-display-tab))))
! (defun elscreen-menu-bar-update (&optional force)
(when (and (lookup-key (current-global-map) [menu-bar elscreen])
(or force
(elscreen-screen-modified-p 'elscreen-menu-bar-update)))
***************
*** 1358,1384 ****
(format "%d%s %s" screen
(elscreen-status-label screen)
(elscreen-truncate-screen-name
! (get-alist screen screen-to-name-alist) 25))
'elscreen-jump
:keys (format "%s %d"
(key-description elscreen-prefix-key)
screen)))
screen-list))
(setq elscreen-menu
! (nconc elscreen-menu elscreen-e21-menu-bar-command-entries))
(setq elscreen-menu
(cons 'keymap (cons "Select Screen" elscreen-menu)))
(define-key (current-global-map) [menu-bar elscreen]
(cons (copy-sequence "ElScreen") elscreen-menu)))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-e21-menu-bar-update)
;; Tab
! (defvar elscreen-e21-tab-format nil)
! (make-variable-buffer-local 'elscreen-e21-tab-format)
! (defsubst elscreen-e21-tab-create-keymap (&rest definitions)
(let ((keymap (make-sparse-keymap))
(key-function-pairs
(eval-when-compile
--- 1350,1376 ----
(format "%d%s %s" screen
(elscreen-status-label screen)
(elscreen-truncate-screen-name
! (assoc-default screen screen-to-name-alist) 25))
'elscreen-jump
:keys (format "%s %d"
(key-description elscreen-prefix-key)
screen)))
screen-list))
(setq elscreen-menu
! (nconc elscreen-menu elscreen-menu-bar-command-entries))
(setq elscreen-menu
(cons 'keymap (cons "Select Screen" elscreen-menu)))
(define-key (current-global-map) [menu-bar elscreen]
(cons (copy-sequence "ElScreen") elscreen-menu)))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-menu-bar-update)
;; Tab
! (defvar elscreen-tab-format nil)
! (make-variable-buffer-local 'elscreen-tab-format)
! (defsubst elscreen-tab-create-keymap (&rest definitions)
(let ((keymap (make-sparse-keymap))
(key-function-pairs
(eval-when-compile
***************
*** 1399,1405 ****
key-function-pairs)
keymap))
! (defsubst elscreen-e21-tab-width ()
(if (numberp elscreen-display-tab)
elscreen-display-tab
(let* ((number-of-screens (elscreen-get-number-of-screens))
--- 1391,1397 ----
key-function-pairs)
keymap))
! (defsubst elscreen-tab-width ()
(if (numberp elscreen-display-tab)
elscreen-display-tab
(let* ((number-of-screens (elscreen-get-number-of-screens))
***************
*** 1410,1416 ****
(if elscreen-tab-display-kill-screen 5.5 1.5)))))
(max (min tab-width 16) 1))))
! (defun elscreen-e21-tab-escape-% (string)
(if (string-match "%" string)
(let ((retval "")
start (end 0) substring)
--- 1402,1408 ----
(if elscreen-tab-display-kill-screen 5.5 1.5)))))
(max (min tab-width 16) 1))))
! (defun elscreen-tab-escape-% (string)
(if (string-match "%" string)
(let ((retval "")
start (end 0) substring)
***************
*** 1424,1441 ****
retval)
string))
! (defun elscreen-e21-tab-update (&optional force)
(when (and (not (window-minibuffer-p))
(or (elscreen-screen-modified-p 'elscreen-tab-update) force))
(walk-windows
(lambda (window)
(with-current-buffer (window-buffer window)
! (when (and (boundp 'elscreen-e21-tab-format)
! (equal header-line-format elscreen-e21-tab-format)
(or (not (eq (window-buffer window)
(window-buffer (frame-first-window))))
(not elscreen-display-tab)))
! (kill-local-variable 'elscreen-e21-tab-format)
(setq header-line-format nil))))
'other 'other)
--- 1416,1433 ----
retval)
string))
! (defun elscreen-tab-update (&optional force)
(when (and (not (window-minibuffer-p))
(or (elscreen-screen-modified-p 'elscreen-tab-update) force))
(walk-windows
(lambda (window)
(with-current-buffer (window-buffer window)
! (when (and (boundp 'elscreen-tab-format)
! (equal header-line-format elscreen-tab-format)
(or (not (eq (window-buffer window)
(window-buffer (frame-first-window))))
(not elscreen-display-tab)))
! (kill-local-variable 'elscreen-tab-format)
(setq header-line-format nil))))
'other 'other)
***************
*** 1443,1472 ****
(let ((screen-list (sort (elscreen-get-screen-list) '<))
(screen-to-name-alist (elscreen-get-screen-to-name-alist))
(current-screen (elscreen-get-current-screen))
! (half-space (eval-when-compile
! (propertize
" "
! 'display '(space :width 0.5))))
! (tab-separator (eval-when-compile
! (propertize
! " "
! 'face 'elscreen-tab-background-face
! 'display '(space :width 0.5))))
! (control-tab (eval-when-compile
! (propertize
! "<->"
! 'face 'elscreen-tab-control-face
! 'local-map (elscreen-e21-tab-create-keymap
! 'mouse-1 'elscreen-previous
! 'mouse-2 'elscreen-create
! 'mouse-3 'elscreen-next)
! 'help-echo "mouse-1: previous screen, mouse-2: create new screen, mouse-3: next screen"))))
(with-current-buffer (window-buffer (frame-first-window))
! (kill-local-variable 'elscreen-e21-tab-format)
(when elscreen-tab-display-control
! (setq elscreen-e21-tab-format
(nconc
! elscreen-e21-tab-format
(list
control-tab
tab-separator))))
--- 1435,1461 ----
(let ((screen-list (sort (elscreen-get-screen-list) '<))
(screen-to-name-alist (elscreen-get-screen-to-name-alist))
(current-screen (elscreen-get-current-screen))
! (half-space (propertize
" "
! 'display '(space :width 0.5)))
! (tab-separator (propertize
! " "
! 'face 'elscreen-tab-background-face
! 'display '(space :width 0.5)))
! (control-tab (propertize
! "<->"
! 'face 'elscreen-tab-control-face
! 'local-map (elscreen-tab-create-keymap
! 'mouse-1 'elscreen-previous
! 'mouse-2 'elscreen-create
! 'mouse-3 'elscreen-next)
! 'help-echo "mouse-1: previous screen, mouse-2: create new screen, mouse-3: next screen")))
(with-current-buffer (window-buffer (frame-first-window))
! (kill-local-variable 'elscreen-tab-format)
(when elscreen-tab-display-control
! (setq elscreen-tab-format
(nconc
! elscreen-tab-format
(list
control-tab
tab-separator))))
***************
*** 1476,1482 ****
(let ((kill-screen
(propertize
"[X]"
! 'local-map (elscreen-e21-tab-create-keymap
'mouse-1 `(lambda (e)
(interactive "e")
(elscreen-kill ,screen))
--- 1465,1471 ----
(let ((kill-screen
(propertize
"[X]"
! 'local-map (elscreen-tab-create-keymap
'mouse-1 `(lambda (e)
(interactive "e")
(elscreen-kill ,screen))
***************
*** 1484,1492 ****
(interactive "e")
(elscreen-kill-screen-and-buffers ,screen)))
'help-echo (format "mouse-1: kill screen %d, M-mouse-1: kill screen %d and buffers on it" screen screen))))
! (setq elscreen-e21-tab-format
(nconc
! elscreen-e21-tab-format
(list
(propertize
(concat
--- 1473,1481 ----
(interactive "e")
(elscreen-kill-screen-and-buffers ,screen)))
'help-echo (format "mouse-1: kill screen %d, M-mouse-1: kill screen %d and buffers on it" screen screen))))
! (setq elscreen-tab-format
(nconc
! elscreen-tab-format
(list
(propertize
(concat
***************
*** 1499,1510 ****
screen
(elscreen-status-label screen)
half-space
! (elscreen-e21-tab-escape-%
(elscreen-truncate-screen-name
! (get-alist screen screen-to-name-alist)
! (elscreen-e21-tab-width) t)))
! 'help-echo (get-alist screen screen-to-name-alist)
! 'local-map (elscreen-e21-tab-create-keymap
'mouse-1 `(lambda (e)
(interactive "e")
(elscreen-goto ,screen))))
--- 1488,1499 ----
screen
(elscreen-status-label screen)
half-space
! (elscreen-tab-escape-%
(elscreen-truncate-screen-name
! (assoc-default screen screen-to-name-alist)
! (elscreen-tab-width) t)))
! 'help-echo (assoc-default screen screen-to-name-alist)
! 'local-map (elscreen-tab-create-keymap
'mouse-1 `(lambda (e)
(interactive "e")
(elscreen-goto ,screen))))
***************
*** 1516,1591 ****
tab-separator)))))
screen-list)
! (setq elscreen-e21-tab-format
(nconc
! elscreen-e21-tab-format
(list
(propertize
(make-string (window-width) ?\ )
'face 'elscreen-tab-background-face
! 'local-map (elscreen-e21-tab-create-keymap)))))
! (setq header-line-format elscreen-e21-tab-format))))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-e21-tab-update)
!
!
! ;;; Command-line processing at startup time
!
! (defun elscreen-command-line-funcall (switch-string)
! (let ((argval (intern (car command-line-args-left)))
! screen elscreen-window-configuration)
! (setq command-line-args-left (cdr command-line-args-left))
! (save-window-excursion
! (elscreen-apply-window-configuration
! (elscreen-default-window-configuration))
! (if (commandp argval)
! (command-execute argval)
! (funcall argval))
! (setq elscreen-window-configuration
! (elscreen-current-window-configuration)))
! (setq file-count (1+ file-count))
! (cond
! ((= file-count 1)
! (elscreen-apply-window-configuration elscreen-window-configuration))
! ((setq screen (elscreen-create-internal 'noerror))
! (elscreen-set-window-configuration screen
! elscreen-window-configuration)))))
!
! (defun elscreen-command-line-find-file (file file-count &optional line column)
! (let ((line (or line 0))
! (column (or column 0)))
! (cond
! ((= file-count 1)
! (find-file file))
! ((> file-count 10)
! (find-file-noselect file))
! (t
! (elscreen-find-screen-by-buffer (find-file-noselect file) 'create)))
! (or (zerop line)
! (goto-line line))
! (unless (< column 1)
! (move-to-column (1- column)))))
!
! (when elscreen-startup-command-line-processing
! (setq command-switch-alist
! (append command-switch-alist
! '(("-elscreen-funcall" . elscreen-command-line-funcall)
! ("-e" . elscreen-command-line-funcall))))
!
! (defun elscreen-e21-command-line ()
! (when (string-match "\\`-" argi)
! (error "Unknown option `%s'" argi))
! (setq file-count (1+ file-count))
! (setq inhibit-startup-buffer-menu t)
! (let* ((file
! (expand-file-name
! (command-line-normalize-file-name orig-argi)
! dir)))
! (elscreen-command-line-find-file file file-count line column))
! (setq line 0)
! (setq column 0)
! t))
;;; Unsupported Functions...
--- 1505,1522 ----
tab-separator)))))
screen-list)
! (setq elscreen-tab-format
(nconc
! elscreen-tab-format
(list
(propertize
(make-string (window-width) ?\ )
'face 'elscreen-tab-background-face
! 'local-map (elscreen-tab-create-keymap)))))
! (setq header-line-format elscreen-tab-format))))))
! (add-hook 'elscreen-screen-update-hook 'elscreen-tab-update)
;;; Unsupported Functions...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment