Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bdio-mode
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Antonino D'Anna
bdio-mode
Commits
c8d78f71
Commit
c8d78f71
authored
May 31, 2026
by
Antonino D'Annaç
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some improvements
parent
3824eb87
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
60 deletions
+62
-60
bdio-mode.el
bdio-mode.el
+62
-60
No files found.
bdio-mode.el
View file @
c8d78f71
;;; 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,54 +32,50 @@
))))
(
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*
((
record
(
get-text-property
lstart
'bdio-record
))
(
inhibit-read-only
t
))
(
when
record
(
if
(
get-text-property
lstart
'bdio-expanded
)
(
let
((
start
(
line-end-position
))
(
end
(
+
(
next-single-property-change
(
line-end-position
)
'bdio-record
nil
(
point-max
))
-1
)
))
(
delete-region
start
end
)
(
put-text-property
lstart
lend
'bdio-expanded
nil
))
(
let
()
(
end-of-line
)
(
insert
"\n"
)
(
let
((
output-start
(
point
)))
;; insert command output
(
call-process
lsbdio
nil
t
nil
bdio-file
"-d"
(
number-to-string
record
)))
(
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
(
if
(
get-text-property
lstart
'bdio-expanded
)
(
let
((
start
(
line-end-position
))
(
end
(
+
(
next-single-property-change
(
line-end-position
)
'bdio-record
nil
(
point-max
))
-1
)
))
(
delete-region
start
end
)
(
put-text-property
lstart
lend
'bdio-expanded
nil
))
(
let
()
(
end-of-line
)
(
insert
"\n"
)
(
let
((
output-start
(
point
)))
;; insert command output
(
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)))))))))
(
put-text-property
lstart
lend
'bdio-expanded
t
)))))
(
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-fil
e
))
(
add-to-list
'auto-mode-alist
'
(
"\\.bdio\\'"
.
bdio-
mod
e
))
(
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
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment