forked from mirrors/org-mode
Revert "ox: Use tabulated list mode for asynchronous stack"
This reverts commit a965c06213
.
This commit is contained in:
parent
a8f0c39e66
commit
b0fd7a51ee
142
lisp/ox.el
142
lisp/ox.el
|
@ -77,7 +77,6 @@
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
||||||
(eval-when-compile (require 'cl))
|
(eval-when-compile (require 'cl))
|
||||||
(require 'tabulated-list)
|
|
||||||
(require 'org-element)
|
(require 'org-element)
|
||||||
(require 'org-macro)
|
(require 'org-macro)
|
||||||
(require 'ob-exp)
|
(require 'ob-exp)
|
||||||
|
@ -5143,27 +5142,74 @@ removed beforehand. Return the new stack."
|
||||||
"Menu for asynchronous export results and running processes."
|
"Menu for asynchronous export results and running processes."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((buffer (get-buffer-create "*Org Export Stack*")))
|
(let ((buffer (get-buffer-create "*Org Export Stack*")))
|
||||||
(with-current-buffer buffer
|
(set-buffer buffer)
|
||||||
(org-export-stack-mode)
|
(when (zerop (buffer-size)) (org-export-stack-mode))
|
||||||
(tabulated-list-print t))
|
(org-export-stack-refresh)
|
||||||
(pop-to-buffer buffer))
|
(pop-to-buffer buffer))
|
||||||
(message "Type \"q\" to quit, \"?\" for help"))
|
(message "Type \"q\" to quit, \"?\" for help"))
|
||||||
|
|
||||||
|
(defun org-export--stack-source-at-point ()
|
||||||
|
"Return source from export results at point in stack."
|
||||||
|
(let ((source (car (nth (1- (org-current-line)) org-export-stack-contents))))
|
||||||
|
(if (not source) (error "Source unavailable, please refresh buffer")
|
||||||
|
(let ((source-name (if (stringp source) source (buffer-name source))))
|
||||||
|
(if (save-excursion
|
||||||
|
(beginning-of-line)
|
||||||
|
(looking-at (concat ".* +" (regexp-quote source-name) "$")))
|
||||||
|
source
|
||||||
|
;; SOURCE is not consistent with current line. The stack
|
||||||
|
;; view is outdated.
|
||||||
|
(error "Source unavailable; type `g' to update buffer"))))))
|
||||||
|
|
||||||
(defun org-export-stack-clear ()
|
(defun org-export-stack-clear ()
|
||||||
"Remove all entries from export stack."
|
"Remove all entries from export stack."
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq org-export-stack-contents nil))
|
(setq org-export-stack-contents nil))
|
||||||
|
|
||||||
(defun org-export-stack-refresh ()
|
(defun org-export-stack-refresh (&rest dummy)
|
||||||
"Refresh the asynchronous export stack."
|
"Refresh the asynchronous export stack.
|
||||||
(interactive)
|
DUMMY is ignored. Unavailable sources are removed from the list.
|
||||||
(tabulated-list-print t))
|
Return the new stack."
|
||||||
|
(let ((inhibit-read-only t))
|
||||||
|
(org-preserve-lc
|
||||||
|
(erase-buffer)
|
||||||
|
(insert (concat
|
||||||
|
(let ((counter 0))
|
||||||
|
(mapconcat
|
||||||
|
(lambda (entry)
|
||||||
|
(let ((proc-p (processp (nth 2 entry))))
|
||||||
|
(concat
|
||||||
|
;; Back-end.
|
||||||
|
(format " %-12s " (or (nth 1 entry) ""))
|
||||||
|
;; Age.
|
||||||
|
(let ((data (nth 2 entry)))
|
||||||
|
(if proc-p (format " %6s " (process-status data))
|
||||||
|
;; Compute age of the results.
|
||||||
|
(org-format-seconds
|
||||||
|
"%4h:%.2m "
|
||||||
|
(float-time (time-since data)))))
|
||||||
|
;; Source.
|
||||||
|
(format " %s"
|
||||||
|
(let ((source (car entry)))
|
||||||
|
(if (stringp source) source
|
||||||
|
(buffer-name source)))))))
|
||||||
|
;; Clear stack from exited processes, dead buffers or
|
||||||
|
;; non-existent files.
|
||||||
|
(setq org-export-stack-contents
|
||||||
|
(org-remove-if-not
|
||||||
|
(lambda (el)
|
||||||
|
(if (processp (nth 2 el))
|
||||||
|
(buffer-live-p (process-buffer (nth 2 el)))
|
||||||
|
(let ((source (car el)))
|
||||||
|
(if (bufferp source) (buffer-live-p source)
|
||||||
|
(file-exists-p source)))))
|
||||||
|
org-export-stack-contents)) "\n")))))))
|
||||||
|
|
||||||
(defun org-export-stack-remove (&optional source)
|
(defun org-export-stack-remove (&optional source)
|
||||||
"Remove export results at point from stack.
|
"Remove export results at point from stack.
|
||||||
If optional argument SOURCE is non-nil, remove it instead."
|
If optional argument SOURCE is non-nil, remove it instead."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((source (or source (org-export-stack--source-at-point))))
|
(let ((source (or source (org-export--stack-source-at-point))))
|
||||||
(setq org-export-stack-contents
|
(setq org-export-stack-contents
|
||||||
(org-remove-if (lambda (el) (equal (car el) source))
|
(org-remove-if (lambda (el) (equal (car el) source))
|
||||||
org-export-stack-contents))))
|
org-export-stack-contents))))
|
||||||
|
@ -5173,7 +5219,7 @@ If optional argument SOURCE is non-nil, remove it instead."
|
||||||
With an optional prefix argument IN-EMACS, force viewing files
|
With an optional prefix argument IN-EMACS, force viewing files
|
||||||
within Emacs."
|
within Emacs."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((source (org-export-stack--source-at-point)))
|
(let ((source (org-export--stack-source-at-point)))
|
||||||
(cond ((processp source)
|
(cond ((processp source)
|
||||||
(org-switch-to-buffer-other-window (process-buffer source)))
|
(org-switch-to-buffer-other-window (process-buffer source)))
|
||||||
((bufferp source) (org-switch-to-buffer-other-window source))
|
((bufferp source) (org-switch-to-buffer-other-window source))
|
||||||
|
@ -5181,10 +5227,11 @@ within Emacs."
|
||||||
|
|
||||||
(defconst org-export-stack-mode-map
|
(defconst org-export-stack-mode-map
|
||||||
(let ((km (make-sparse-keymap)))
|
(let ((km (make-sparse-keymap)))
|
||||||
(set-keymap-parent km tabulated-list-mode-map)
|
|
||||||
(define-key km " " 'next-line)
|
(define-key km " " 'next-line)
|
||||||
|
(define-key km "n" 'next-line)
|
||||||
(define-key km "\C-n" 'next-line)
|
(define-key km "\C-n" 'next-line)
|
||||||
(define-key km [down] 'next-line)
|
(define-key km [down] 'next-line)
|
||||||
|
(define-key km "p" 'previous-line)
|
||||||
(define-key km "\C-p" 'previous-line)
|
(define-key km "\C-p" 'previous-line)
|
||||||
(define-key km "\C-?" 'previous-line)
|
(define-key km "\C-?" 'previous-line)
|
||||||
(define-key km [up] 'previous-line)
|
(define-key km [up] 'previous-line)
|
||||||
|
@ -5192,11 +5239,10 @@ within Emacs."
|
||||||
(define-key km "v" 'org-export-stack-view)
|
(define-key km "v" 'org-export-stack-view)
|
||||||
(define-key km (kbd "RET") 'org-export-stack-view)
|
(define-key km (kbd "RET") 'org-export-stack-view)
|
||||||
(define-key km "d" 'org-export-stack-remove)
|
(define-key km "d" 'org-export-stack-remove)
|
||||||
(define-key km "r" 'org-export-stack-refresh)
|
|
||||||
km)
|
km)
|
||||||
"Keymap for Org Export Stack.")
|
"Keymap for Org Export Stack.")
|
||||||
|
|
||||||
(define-derived-mode org-export-stack-mode tabulated-list-mode "Org-Stack"
|
(define-derived-mode org-export-stack-mode special-mode "Org-Stack"
|
||||||
"Mode for displaying asynchronous export stack.
|
"Mode for displaying asynchronous export stack.
|
||||||
|
|
||||||
Type \\[org-export-stack] to visualize the asynchronous export
|
Type \\[org-export-stack] to visualize the asynchronous export
|
||||||
|
@ -5210,67 +5256,17 @@ Removing entries in an Org Export Stack buffer doesn't affect
|
||||||
files or buffers, only the display.
|
files or buffers, only the display.
|
||||||
|
|
||||||
\\{org-export-stack-mode-map}"
|
\\{org-export-stack-mode-map}"
|
||||||
(setq tabulated-list-format
|
(abbrev-mode 0)
|
||||||
(vector (list "#" 4 'org-export-stack--num-predicate)
|
(auto-fill-mode 0)
|
||||||
(list "Back-End" 12 t)
|
(setq buffer-read-only t
|
||||||
(list "Age" 6 nil)
|
buffer-undo-list t
|
||||||
(list "Source" 0 nil)))
|
truncate-lines t
|
||||||
(setq tabulated-list-sort-key (cons "#" nil))
|
header-line-format
|
||||||
(setq tabulated-list-entries 'org-export-stack--generate)
|
'(:eval
|
||||||
(add-hook 'tabulated-list-revert-hook 'org-export-stack--generate nil t)
|
(format " %-12s | %6s | %s" "Back-End" "Age" "Source")))
|
||||||
(add-hook 'post-command-hook 'org-export-stack-refresh nil t)
|
(add-hook 'post-command-hook 'org-export-stack-refresh nil t)
|
||||||
(tabulated-list-init-header))
|
(set (make-local-variable 'revert-buffer-function)
|
||||||
|
'org-export-stack-refresh))
|
||||||
(defun org-export-stack--generate ()
|
|
||||||
"Generate the asynchronous export stack for display.
|
|
||||||
Unavailable sources are removed from the list. Return a list
|
|
||||||
appropriate for `tabulated-list-print'."
|
|
||||||
;; Clear stack from exited processes, dead buffers or non-existent
|
|
||||||
;; files.
|
|
||||||
(setq org-export-stack-contents
|
|
||||||
(org-remove-if-not
|
|
||||||
(lambda (el)
|
|
||||||
(if (processp (nth 2 el))
|
|
||||||
(buffer-live-p (process-buffer (nth 2 el)))
|
|
||||||
(let ((source (car el)))
|
|
||||||
(if (bufferp source) (buffer-live-p source)
|
|
||||||
(file-exists-p source)))))
|
|
||||||
org-export-stack-contents))
|
|
||||||
;; Update `tabulated-list-entries'.
|
|
||||||
(let ((counter 0))
|
|
||||||
(mapcar (lambda (entry)
|
|
||||||
(let ((source (car entry)))
|
|
||||||
(list source
|
|
||||||
(vector
|
|
||||||
;; Counter.
|
|
||||||
(number-to-string (incf counter))
|
|
||||||
;; Back-End.
|
|
||||||
(if (nth 1 entry) (symbol-name (nth 1 entry)) "")
|
|
||||||
;; Age.
|
|
||||||
(let ((info (nth 2 entry)))
|
|
||||||
(if (processp info) (symbol-name (process-status info))
|
|
||||||
(org-format-seconds "%h:%.2m"
|
|
||||||
(float-time (time-since info)))))
|
|
||||||
;; Source.
|
|
||||||
(if (stringp source) source (buffer-name source))))))
|
|
||||||
org-export-stack-contents)))
|
|
||||||
|
|
||||||
(defun org-export-stack--num-predicate (A B)
|
|
||||||
(< (string-to-number (aref (nth 1 A) 0))
|
|
||||||
(string-to-number (aref (nth 1 B) 0))))
|
|
||||||
|
|
||||||
(defun org-export-stack--source-at-point ()
|
|
||||||
"Return source from export results at point in stack."
|
|
||||||
(let ((source (car (nth (1- (org-current-line)) org-export-stack-contents))))
|
|
||||||
(if (not source) (error "Source unavailable, please refresh buffer")
|
|
||||||
(let ((source-name (if (stringp source) source (buffer-name source))))
|
|
||||||
(if (save-excursion
|
|
||||||
(beginning-of-line)
|
|
||||||
(looking-at (concat ".* +" (regexp-quote source-name) "$")))
|
|
||||||
source
|
|
||||||
;; SOURCE is not consistent with current line. The stack
|
|
||||||
;; view is outdated.
|
|
||||||
(error "Source unavailable; type `r' to refresh buffer"))))))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue