Commit 3824eb87 authored by Antonino D'Annaç's avatar Antonino D'Annaç

Now it checks for lsbdio and if not available, dowload the bdio repository,...

Now it checks for lsbdio and if not available, dowload the bdio repository, builds the tool and uses that
parent e0914fba
;;; bdio-mode.el --- View .bdio files using lsbdio ;;; bdio-mode.el --- View .bdio files using lsbdio
(require 's) (require 's)
(require 'f)
(defvar bdio-mode-hook nil) (defvar bdio-mode-hook nil)
(defvar source-file nil) (defvar source-file nil)
(defvar lsbdio "lsbdio")
(defun bdio--render-file (file) (defun bdio--render-file (file)
"Render FILE using lsbdio into current buffer." "Render FILE using lsbdio into current buffer."
(let ((inhibit-read-only t)) (let ((inhibit-read-only t))
(erase-buffer) (erase-buffer)
(let ((exit-code (let ((exit-code
(call-process "lsbdio" nil t nil file "-c 0"))) (call-process lsbdio nil t nil file "-c 0")))
(unless (eq exit-code 0) (unless (eq exit-code 0)
(insert (format "Error running lsbdio on %s\n" file)))) (insert (format "Error running lsbdio on %s\n" file))))
(goto-char (point-min)) (goto-char (point-min))
...@@ -59,7 +61,7 @@ ...@@ -59,7 +61,7 @@
(insert "\n") (insert "\n")
(let ((output-start (point))) (let ((output-start (point)))
;; insert command output ;; insert command output
(call-process "lsbdio" nil t nil bdio-file "-d" (number-to-string record))) (call-process lsbdio nil t nil bdio-file "-d" (number-to-string record)))
;; mark inserted region ;; mark inserted region
(put-text-property lstart lend 'bdio-expanded t))))) (put-text-property lstart lend 'bdio-expanded t)))))
(goto-char cpoint)) (goto-char cpoint))
...@@ -71,6 +73,46 @@ ...@@ -71,6 +73,46 @@
(setq-local revert-buffer-function #'bdio-revert-buffer) (setq-local revert-buffer-function #'bdio-revert-buffer)
(defun bdio-mode--clone-repo (dir)
(message "cloning bdio in " dir)
(with-temp-buffer
(let ((exit-code
(call-process
"git"
nil
t
nil
"clone"
"https://github.com/to-ko/bdio.git"
dir))
)
(list exit-code
(buffer-string)))))
(defun bdio-mode--make-tools (bdio-dir)
(message "making tools")
(defvar current-dir default-directory)
(cd bdio-dir)
(call-process "make" nil nil nil)
(cd "tools")
(call-process "make" nil nil nil)
(cd current-dir))
(defun bdio-mode--get-lsbdio ()
(defvar bdio-dir (f-join package-user-dir "bdio"))
(if (not (file-directory-p bdio-dir))
(bdio-mode--clone-repo bdio-dir))
(defvar lsbdio-path (f-join bdio-dir "tools" lsbdio))
(if (not (file-exists-p lsbdio-path))
(bdio-mode--make-tools bdio-dir))
(setq lsbdio (f-join bdio-dir "tools" lsbdio)))
(defun bdio-mode--check-for-lsbdio ()
(interactive)
(if (not (executable-find lsbdio))
(bdio-mode--get-lsbdio)))
;;;###autoload ;;;###autoload
(add-to-list 'auto-mode-alist '("\\.bdio\\'" . bdio-open-file)) (add-to-list 'auto-mode-alist '("\\.bdio\\'" . bdio-open-file))
...@@ -83,6 +125,7 @@ ...@@ -83,6 +125,7 @@
(define-derived-mode bdio-mode special-mode "BDIO" (define-derived-mode bdio-mode special-mode "BDIO"
"Major mode for viewing BDIO files via lsbdio." "Major mode for viewing BDIO files via lsbdio."
(use-local-map bdio-mode-map) (use-local-map bdio-mode-map)
(bdio-mode--check-for-lsbdio)
(setq buffer-read-only t)) (setq buffer-read-only t))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment