Commit c8d78f71 authored by Antonino D'Annaç's avatar Antonino D'Annaç

some improvements

parent 3824eb87
;;; bdio-mode.el --- View .bdio files using lsbdio
;;; bdio-mode.el --- View .bdio files using lsbdio -*- lexical-binding: t; -*-
(require 's)
(require 'f)
(defvar bdio-mode-hook nil)
(defvar source-file nil)
(defvar lsbdio "lsbdio")
(defvar-local bdio-mode--source-file nil)
(defun bdio--render-file (file)
(defgroup bdio nil
"BDIO viewer."
:group 'tools)
(defcustom bdio-lsbdio "lsbdio"
"Path to the lsbdio executable."
:type 'string
:group 'bdio)
(defun bdio-mode--render-file (file)
"Render FILE using lsbdio into current buffer."
(let ((inhibit-read-only t))
(erase-buffer)
(let ((exit-code
(call-process lsbdio nil t nil file "-c 0")))
(call-process bdio-lsbdio nil t nil file "-c 0")))
(unless (eq exit-code 0)
(insert (format "Error running lsbdio on %s\n" file))))
(goto-char (point-min))
......@@ -24,26 +32,25 @@
))))
(defun bdio-open-file ()
(defun bdio-mode--open-file ()
"Open .bdio file using lsbdio."
(setq source-file buffer-file-name)
;;(setq-local bdio-mode--source-file buffer-file-name)
(let ((file (buffer-file-name)))
(when file
(rename-buffer
(format "*BDIO* %s" (file-name-nondirectory file)) t)
(set-visited-file-name nil t)
(bdio-mode)
(bdio--render-file file))))
(bdio-mode--render-file file))))
(defun bdio-toggle-record ()
(defun bdio-mode--toggle-record ()
"Expand/collapse current record."
(interactive)
(setq bdio-file source-file)
(setq lstart (line-beginning-position)
lend (line-end-position)
cpoint (point))
(let ((bdio-file bdio-mode--source-file)
(setq lstart (line-beginning-position))
(lend (line-end-position))
(cpoint (point)))
(let* ((record (get-text-property lstart 'bdio-record))
(inhibit-read-only t))
(when record
......@@ -61,17 +68,14 @@
(insert "\n")
(let ((output-start (point)))
;; insert command output
(call-process lsbdio nil t nil bdio-file "-d" (number-to-string record)))
(call-process bdio-lsbdio nil t nil bdio-file "-d" (number-to-string record)))
;; mark inserted region
(put-text-property lstart lend 'bdio-expanded t)))))
(goto-char cpoint))
;; ;; optional face
;; (add-text-properties
;; output-start
;; (point)
;; '(face shadow)))))))))
(goto-char cpoint)))
(setq-local revert-buffer-function #'bdio-revert-buffer)
(defun bdio-mode--refresh-file (&rest ARGS)
(interactive)
(bdio-mode--render-file bdio-mode--source-file))
(defun bdio-mode--clone-repo (dir)
(message "cloning bdio in " dir)
......@@ -91,42 +95,40 @@
(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))
(let ((default-directory bdio-dir))
(call-process "make" nil nil nil))
(defun bdio-mode--get-lsbdio ()
(defvar bdio-dir (f-join package-user-dir "bdio"))
(let ((default-directory (expand-file-name "tools" bdio-dir)))
(call-process "make" nil nil nil)))
(if (not (file-directory-p bdio-dir))
(defun bdio-mode--get-lsbdio ()
(let* ((bdio-dir (expand-file-name "bdio" package-user-dir))
(lsbdio-path
(expand-file-name "tools/lsbdio" bdio-dir)))
(unless (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))
(unless (file-exists-p lsbdio-path)
(bdio-mode--make-tools bdio-dir))
(setq lsbdio (f-join bdio-dir "tools" lsbdio)))
(setq bdio-lsbdio lsbdio-path)))
(defun bdio-mode--check-for-lsbdio ()
(interactive)
(if (not (executable-find lsbdio))
(unless (executable-find bdio-lsbdio)
(bdio-mode--get-lsbdio)))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.bdio\\'" . bdio-open-file))
(add-to-list 'auto-mode-alist '("\\.bdio\\'" . bdio-mode))
(defvar bdio-mode-map
(let ((map (make-sparse-keymap)))
(keymap-set map "<tab>" #'bdio-toggle-record)
(keymap-set map "<tab>" #'bdio-mode--toggle-record)
map))
(define-derived-mode bdio-mode special-mode "BDIO"
"Major mode for viewing BDIO files via lsbdio."
(use-local-map bdio-mode-map)
(bdio-mode--check-for-lsbdio)
(setq buffer-read-only t))
(setq-local revert-buffer-function #'bdio-mode--refresh-file)
(setq-local bdio-mode--source-file buffer-file-name)
(when bdio-mode--source-file (bdio-mode--render-file bdio-mode--source-file)))
(provide 'bdio-mode)
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