Merge pull request #143 from clemera/Refactor-eaf-open-and-display-code

Refactoring eaf-open and eaf-open-internal
master
Andy Stewart 6 years ago committed by GitHub
commit 0f28ae896f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 84
      eaf.el

@ -304,6 +304,17 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead."
Any new app should add the its name and the corresponding Any new app should add the its name and the corresponding
keybinding variable to this list.") keybinding variable to this list.")
(defvar eaf-app-display-function-alist
'(("markdown-previewer" . eaf--markdown-preview-display)
("org-previewer" . eaf--org-preview-display))
"Mapping app names to display functions.
Display functions are called to initilize the initial view when
starting an app.
A display function receives the initialized app buffer as
argument and defaults to `switch-to-buffer'.")
(defvar-local eaf--bookmark-title nil) (defvar-local eaf--bookmark-title nil)
@ -774,21 +785,42 @@ Use it as (eaf-bind-key var key eaf-app-keybinding)"
(defun eaf-open-internal (url app-name arguments) (defun eaf-open-internal (url app-name arguments)
(let* ((buffer (eaf-create-buffer url app-name)) (let* ((buffer (eaf-create-buffer url app-name))
buffer-result) (buffer-result
(with-current-buffer buffer (with-current-buffer buffer
(setq buffer-result (eaf-call "new_buffer" eaf--buffer-id url app-name arguments))) (eaf-call "new_buffer"
(if (equal buffer-result "") eaf--buffer-id url app-name arguments))))
(progn (cond ((equal buffer-result "")
;; Switch to new buffer if buffer create successful. (eaf--display-app-buffer app-name buffer))
(switch-to-buffer buffer) (t
;; Focus to file window if is previewer application. ;; Kill buffer and show error message from python server.
(when (or (string= app-name "markdown-previewer") (kill-buffer buffer)
(string= app-name "org-previewer")) (switch-to-buffer eaf-name)
(other-window +1))) (message buffer-result)))))
;; Kill buffer and show error message from python server.
(kill-buffer buffer) (defun eaf--markdown-preview-display (buf)
(switch-to-buffer eaf-name) ;; Split window to show file and previewer.
(message buffer-result)))) (eaf-split-preview-windows
(buffer-local-value
'eaf--buffer-url buf))
(switch-to-buffer buf)
(other-window +1))
(defun eaf--org-preview-display (buf)
(let ((url (buffer-local-value
'eaf--buffer-url buf)))
;; Find file first, because `find-file' will trigger `kill-buffer' operation.
(save-excursion
(find-file url)
(org-html-export-to-html))
;; Add file name to `eaf-org-file-list' after command `find-file'.
(unless (member url eaf-org-file-list)
(push url eaf-org-file-list))
;; Split window to show file and previewer.
(eaf-split-preview-windows url)
;; Switch to new buffer if buffer create successful.
(switch-to-buffer buf)
(other-window +1)))
;;;###autoload ;;;###autoload
(defun eaf-open-browser (url &optional arguments) (defun eaf-open-browser (url &optional arguments)
@ -844,6 +876,7 @@ When called interactively, URL accepts a file that can be opened by EAF."
(when (featurep 'recentf) (when (featurep 'recentf)
(recentf-add-file url)) (recentf-add-file url))
(let* ((extension-name (file-name-extension url))) (let* ((extension-name (file-name-extension url)))
;; init app name, url and arguments
(setq app-name (setq app-name
(cond ((member extension-name eaf-pdf-extension-list) (cond ((member extension-name eaf-pdf-extension-list)
"pdf-viewer") "pdf-viewer")
@ -852,8 +885,6 @@ When called interactively, URL accepts a file that can be opened by EAF."
(setq arguments (setq arguments
(or eaf-grip-token (or eaf-grip-token
(read-string "Fill your own github token (or set `eaf-grip-token' with token string): "))) (read-string "Fill your own github token (or set `eaf-grip-token' with token string): ")))
;; Split window to show file and previewer.
(eaf-split-preview-windows url)
"markdown-previewer") "markdown-previewer")
((member extension-name eaf-image-extension-list) ((member extension-name eaf-image-extension-list)
"image-viewer") "image-viewer")
@ -863,17 +894,6 @@ When called interactively, URL accepts a file that can be opened by EAF."
(setq url (concat "file://" url)) (setq url (concat "file://" url))
"browser") "browser")
((member extension-name eaf-org-extension-list) ((member extension-name eaf-org-extension-list)
;; Find file first, because `find-file' will trigger `kill-buffer' operation.
(save-excursion
(find-file url)
(with-current-buffer (buffer-name) ;FIXME: Why?
(org-html-export-to-html)))
;; Add file name to `eaf-org-file-list' after command `find-file'.
(unless (member url eaf-org-file-list)
(push url eaf-org-file-list))
;; Split window to show file and previewer.
(eaf-split-preview-windows url)
"org-previewer"))))) "org-previewer")))))
(unless arguments (setq arguments "")) (unless arguments (setq arguments ""))
;; Now that app-name should hopefully be set ;; Now that app-name should hopefully be set
@ -893,7 +913,7 @@ When called interactively, URL accepts a file that can be opened by EAF."
;; Switch to exists buffer, ;; Switch to exists buffer,
;; if no match buffer found, call `eaf-open-internal'. ;; if no match buffer found, call `eaf-open-internal'.
(if exists-eaf-buffer (if exists-eaf-buffer
(switch-to-buffer exists-eaf-buffer) (eaf--display-app-buffer app-name exists-eaf-buffer)
(eaf-open-internal url app-name arguments))) (eaf-open-internal url app-name arguments)))
;; Record user input, and call `eaf-open-internal' after receive `start_finish' signal from server process. ;; Record user input, and call `eaf-open-internal' after receive `start_finish' signal from server process.
(setq eaf-first-start-url url) (setq eaf-first-start-url url)
@ -911,6 +931,12 @@ When called interactively, URL accepts a file that can be opened by EAF."
(t "EAF: %s does not exist.")) (t "EAF: %s does not exist."))
url))) url)))
(defun eaf--display-app-buffer (app-name buffer)
(let ((display-fun (or (cdr (assoc app-name
eaf-app-display-function-alist))
#'switch-to-buffer)))
(funcall display-fun buffer)))
(defun eaf-split-preview-windows (url) (defun eaf-split-preview-windows (url)
(delete-other-windows) (delete-other-windows)
(find-file url) (find-file url)

Loading…
Cancel
Save