[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/beardbolt 971d6cfeae 093/323: Various fixes and cleanup
From: |
ELPA Syncer |
Subject: |
[elpa] externals/beardbolt 971d6cfeae 093/323: Various fixes and cleanups |
Date: |
Thu, 9 Mar 2023 10:58:20 -0500 (EST) |
branch: externals/beardbolt
commit 971d6cfeaee351ab67fc9655091b74b036b78f0b
Author: Stefan Monnier <monnier@IRO.UMontreal.CA>
Commit: Jay Kamat <jaygkamat@gmail.com>
Various fixes and cleanups
- Don't require `subr-x` at run-time, since it's designed to be unneeded.
- accept non-ASCII alphabetic letters
- drop unused `mode` field in rmsbolt-lang struct
- replace `starter-file-name` field with a `rmsbolt-starter-files` var.
I think this should be changed further and basically auto-generated
from the contents of the `starters` subdir. But in any case this is
not needed for "normal" operation and getting rid of it removes the
need for rmsbolt-languages.
- Introduce buffer-local rmsbolt-language-descriptor to replace
rmsbolt-languages: the idea is that rmsbolt should (in the long run)
only provide the infrastructure and then each major mode would set
rmsbolt-language-descriptor as appropriate. Just as we do for
font-lock, imenu, outline-minor-mode, etc...
There's a FIXME in there, because it's not really satisfactory yet.
- rmsbolt--get-lang remove `language` argument since it's not used any
more. Also `major-mode` is now only used for backward compatibility
with rmsbolt-languages (using `major-mode` is almost always a bad
idea, since it interacts poorly with derived-modes).
- Initialize rmsbolt-mode-map in the traditional way.
- Make rmsbolt-starter interactive (with completion for the various
available starter files) and make it replace the various
rmsbolt-<lang> commands.
- Remove `rmsbolt-defstarter` and calls to it.
- Change two weird `unless` which I think should be `when` in rmsbolt-mode.
---
.gitignore | 2 +
README.org | 4 +-
rmsbolt-java.el | 10 +--
rmsbolt.el | 181 +++++++++++++++++++++++++--------------------------
test/rmsbolt-test.el | 4 +-
5 files changed, 99 insertions(+), 102 deletions(-)
diff --git a/.gitignore b/.gitignore
index 59a4b3ccf4..8b45679dfc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
*.elc
+*-autoloads.el
+*-pkg.el
/.cask/
diff --git a/README.org b/README.org
index 260e32115f..b0ca974894 100644
--- a/README.org
+++ b/README.org
@@ -54,9 +54,9 @@ though.
#+END_SRC
* Running
- Once installed, use the ~rmsbolt-lang~ functions (they will show up after
+ Once installed, use the ~rmsbolt-starter~ command (it will show up after
~(require 'rmsbolt)~) to generate starter files, or enable ~rmsbolt-mode~ in a
- supported language. Then run ~rmsbolt-compile~ or use the default ~C-c C-c~
+ supported language. Then run ~rmsbolt-compile~ or use the default ~C-c C-c~
binding. After the first run, the buffer should automatically update.
* Demos
diff --git a/rmsbolt-java.el b/rmsbolt-java.el
index 0ed7e1ea50..d429856284 100644
--- a/rmsbolt-java.el
+++ b/rmsbolt-java.el
@@ -1,4 +1,4 @@
-;;; rmsbolt-java.el --- A elisp library to parse javap output -*-
lexical-binding: t; -*-
+;;; rmsbolt-java.el --- An Elisp library to parse javap output -*-
lexical-binding: t; -*-
;; Copyright (C) 2018 Jay Kamat
;; Author: Jay Kamat <jaygkamat@gmail.com>
@@ -21,17 +21,18 @@
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
+
;; The java bytecode dissasembler format is rather obtuse. This library tries
;; to make a programatic layer for interacting with it. It's main aim is
;; correlating lines in source code to the generated output.
;;
-;; This library takes in the output of javap -c -l split into a list by lines,
+;; This library takes in the output of `javap -c -l` split into a list by
lines,
;; which is the same format rmsbolt uses.
;;; Requires:
(require 'cl-lib)
-(require 'subr-x)
+(eval-when-compile (require 'subr-x))
;;; Code:
@@ -122,7 +123,8 @@ Also FILTER \"useless\" lines out, optionally."
(setq result-hold nil))
(push line result))
(when (and (not filter)
- ;; Never ouptut code, that's handled above. Code: is
handled on transition
+ ;; Never output code, that's handled above.
+ ;; Code: is handled on transition
(not (eq state 'code-found)))
(push line result-hold))))
(nreverse result)))
diff --git a/rmsbolt.el b/rmsbolt.el
index 53654acf60..1aadf05e5c 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -21,9 +21,13 @@
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
-;; rmsbolt is a package to provide assembly or bytecode output for a source
code input file.
+
+;; RMSBolt is a package to provide assembly or bytecode output for a source
+;; code input file.
+;;
+;; It currently supports: C/C++, OCaml, Haskell, Python, Java, and (limited)
+;; Common Lisp.
;;
-;; It currently supports: C/C++, OCaml, Haskell, Python, Java, and (limited)
Common Lisp.
;; Adding support for more languages, if they have an easy manual compilation
;; path from source->assembly/bytecode with debug information, should be much
;; easier than in other alternatives.
@@ -47,7 +51,8 @@
;; `rmsbolt-intel-x86': Toggle between intel and att syntax if supported
;; `rmsbolt-demangle': Demangle the output, if supported.
;;
-;; Please see the readme at https://gitlab.com/jgkamat/rmsbolt for more
information!
+;; Please see the readme at https://gitlab.com/jgkamat/rmsbolt for
+;; more information!
;;
;; Thanks:
;; Inspiration and some assembly parsing logic was adapted from Matt Godbolt's
@@ -57,7 +62,7 @@
;;; Requires:
(require 'cl-lib)
-(require 'subr-x)
+(eval-when-compile (require 'subr-x))
(require 'map)
(require 'cc-defs)
@@ -184,22 +189,22 @@ Outputs assembly file if ASM."
;;;; Regexes
-(defvar rmsbolt-label-def (rx bol (group (any ".a-zA-Z_$@")
- (0+ (any "a-zA-Z0-9$_@.")))
+(defvar rmsbolt-label-def (rx bol (group (any ".[:alpha:]_$@")
+ (0+ (any "[:alnum:]$_@.")))
":"))
(defvar rmsbolt-defines-global (rx bol (0+ space) ".glob"
(opt "a") "l" (0+ space)
- (group (any ".a-zA-Z_")
- (0+ (any "a-zA-Z0-9$_.")))))
-(defvar rmsbolt-label-find (rx (any ".a-zA-Z_")
+ (group (any ".[:alpha:]_")
+ (0+ (any "[:alnum:]$_.")))))
+(defvar rmsbolt-label-find (rx (any ".[:alpha:]_")
(0+
- (any "a-zA-Z0-9$_."))))
+ (any "[:alnum:]$_."))))
(defvar rmsbolt-assignment-def (rx bol (0+ space)
- (group (any ".a-zA-Z_$")
- (1+ (any "a-zA-Z0-9$_.")))
+ (group (any ".[:alpha:]_$")
+ (1+ (any "[:alnum:]$_.")))
(0+ space) "="))
(defvar rmsbolt-has-opcode (rx bol (0+ space)
- (any "a-zA-Z")))
+ (any "[:alpha:]")))
(defvar rmsbolt-defines-function (rx bol (0+ space) ".type"
(0+ any) "," (0+ space) (any "@%")
@@ -250,10 +255,6 @@ Outputs assembly file if ASM."
(cl-defstruct (rmsbolt-lang
(:conc-name rmsbolt-l-))
- (mode
- 'fundamental-mode
- :type 'symbol
- :documentation "The mode(s) to activate this language in.")
(supports-disass
nil
:type 'bool
@@ -270,10 +271,6 @@ Outputs assembly file if ASM."
nil
:type 'string
:documentation "The command of the demangler to use for this source code.")
- (starter-file-name
- nil
- :type 'string
- :documentation "The starter filename to use")
(disass-hidden-funcs
nil
:type 'string
@@ -297,7 +294,7 @@ Outputs assembly file if ASM."
(cl-defun rmsbolt--c-compile-cmd (&key src-buffer)
"Process a compile command for gcc/clang."
(let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
- (cmd (mapconcat 'identity
+ (cmd (mapconcat #'identity
(list cmd
"-g"
(if (buffer-local-value 'rmsbolt-disassemble
src-buffer)
@@ -317,7 +314,7 @@ Outputs assembly file if ASM."
(output-filename (rmsbolt-output-filename src-buffer))
(predicted-asm-filename (concat (file-name-sans-extension
(buffer-file-name)) ".s"))
(cmd (buffer-local-value 'rmsbolt-command src-buffer))
- (cmd (mapconcat 'identity
+ (cmd (mapconcat #'identity
(list cmd
"-g"
(if (buffer-local-value 'rmsbolt-disassemble
src-buffer)
@@ -348,7 +345,7 @@ Outputs assembly file if ASM."
(disass-eval-unquoted "(disassemble 'main)"))
(pcase interpreter
("sbcl"
- (mapconcat 'identity
+ (mapconcat #'identity
(list cmd "--noinform" "--load"
(buffer-file-name)
"--eval" disass-eval "--non-interactive"
@@ -357,7 +354,7 @@ Outputs assembly file if ASM."
(rmsbolt-output-filename src-buffer))
" "))
("clisp"
- (mapconcat 'identity
+ (mapconcat #'identity
(list cmd "-q" "-x"
(concat
"\"(load \\\"" (buffer-file-name) "\\\") "
disass-eval-unquoted "\"")
@@ -368,7 +365,7 @@ Outputs assembly file if ASM."
(cl-defun rmsbolt--rust-compile-cmd (&key src-buffer)
"Process a compile command for rustc."
(let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
- (cmd (mapconcat 'identity
+ (cmd (mapconcat #'identity
(list cmd
"-g"
"--emit"
@@ -384,7 +381,7 @@ Outputs assembly file if ASM."
(cl-defun rmsbolt--py-compile-cmd (&key src-buffer)
"Process a compile command for python3."
(let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer)))
- (mapconcat 'identity
+ (mapconcat #'identity
(list cmd "-m" "dis" (buffer-file-name)
">" (rmsbolt-output-filename src-buffer))
" ")))
@@ -392,7 +389,7 @@ Outputs assembly file if ASM."
(cl-defun rmsbolt--hs-compile-cmd (&key src-buffer)
"Process a compile command for ghc."
(let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
- (cmd (mapconcat 'identity
+ (cmd (mapconcat #'identity
(list cmd
"-g"
(if (buffer-local-value 'rmsbolt-disassemble
src-buffer)
@@ -409,7 +406,7 @@ Outputs assembly file if ASM."
(let* ((output-filename (rmsbolt-output-filename src-buffer))
(class-filename (concat (file-name-sans-extension (buffer-file-name))
".class"))
(cmd (buffer-local-value 'rmsbolt-command src-buffer))
- (cmd (mapconcat 'identity
+ (cmd (mapconcat #'identity
(list cmd
"-g"
(buffer-file-name)
@@ -451,81 +448,73 @@ Outputs assembly file if ASM."
(setq
rmsbolt-languages
`((c-mode
- . ,(make-rmsbolt-lang :mode 'c
- :compile-cmd "gcc"
+ . ,(make-rmsbolt-lang :compile-cmd "gcc"
:supports-asm t
:supports-disass t
:demangler "c++filt"
- :starter-file-name "rmsbolt.c"
:compile-cmd-function #'rmsbolt--c-compile-cmd
:disass-hidden-funcs rmsbolt--hidden-func-c))
(c++-mode
- . ,(make-rmsbolt-lang :mode 'c++-mode
- :compile-cmd "g++"
+ . ,(make-rmsbolt-lang :compile-cmd "g++"
:supports-asm t
:supports-disass t
:demangler "c++filt"
- :starter-file-name "rmsbolt.cpp"
:compile-cmd-function #'rmsbolt--c-compile-cmd
:disass-hidden-funcs rmsbolt--hidden-func-c))
;; In order to parse ocaml files, you need the emacs ocaml mode, tuareg
(tuareg-mode
- . ,(make-rmsbolt-lang :mode 'tuareg-mode
- :compile-cmd "ocamlopt"
+ . ,(make-rmsbolt-lang :compile-cmd "ocamlopt"
:supports-asm t
:supports-disass t
- :starter-file-name "rmsbolt.ml"
:compile-cmd-function #'rmsbolt--ocaml-compile-cmd
:disass-hidden-funcs rmsbolt--hidden-func-ocaml))
(lisp-mode
- . ,(make-rmsbolt-lang :mode 'lisp-mode ;; Assume common lisp..
- :compile-cmd "sbcl"
+ . ,(make-rmsbolt-lang :compile-cmd "sbcl"
:supports-asm t
:supports-disass nil
:objdumper 'cat
- :starter-file-name "rmsbolt.lisp"
:compile-cmd-function #'rmsbolt--lisp-compile-cmd
:disass-hidden-funcs nil))
(rust-mode
- . ,(make-rmsbolt-lang :mode 'rust-mode
- :compile-cmd "rustc"
+ . ,(make-rmsbolt-lang :compile-cmd "rustc"
:supports-asm t
:supports-disass nil
:objdumper 'objdump
:demangler "rustfilt"
- :starter-file-name "rmsbolt.rs"
:compile-cmd-function #'rmsbolt--rust-compile-cmd
:disass-hidden-funcs nil))
;; ONLY SUPPORTS PYTHON 3
(python-mode
- . ,(make-rmsbolt-lang :mode 'python-mode
- :compile-cmd "python3"
+ . ,(make-rmsbolt-lang :compile-cmd "python3"
:supports-asm t
:supports-disass nil
- :starter-file-name "rmsbolt.py"
:compile-cmd-function #'rmsbolt--py-compile-cmd
:disass-hidden-funcs nil
:process-asm-custom-fn
#'rmsbolt--process-python-bytecode))
(haskell-mode
- . ,(make-rmsbolt-lang :mode 'haskell-mode
- :compile-cmd "ghc"
+ . ,(make-rmsbolt-lang :compile-cmd "ghc"
:supports-asm t
:supports-disass nil
:demangler "haskell-demangler"
- :starter-file-name "rmsbolt.hs"
:compile-cmd-function #'rmsbolt--hs-compile-cmd
:disass-hidden-funcs nil))
(java-mode
- . ,(make-rmsbolt-lang :mode 'java-mode
- :compile-cmd "javac"
+ . ,(make-rmsbolt-lang :compile-cmd "javac"
:supports-asm t
:supports-disass nil
:objdumper 'cat
- :starter-file-name "Rmsbolt.java"
:compile-cmd-function #'rmsbolt--java-compile-cmd
:process-asm-custom-fn
#'rmsbolt--process-java-bytecode
:disass-hidden-funcs nil))
))
+(make-obsolete-variable 'rmsbolt-languages
+ 'rmsbolt-language-descriptor "RMSBolt-0.2")
+
+(defvar-local rmsbolt-language-descriptor nil
+ ;; FIXME: Major modes can't set this without calling `make-rmsbolt-lang',
+ ;; so it forces them to require `rmsbolt', which is a bummer.
+ "Description of the language tools of current buffer for use by RMSBolt.
+This should be an object of type `rmsbolt-lang', normally set by the major
mode")
;;;; Macros
@@ -626,8 +615,8 @@ Outputs assembly file if ASM."
(defun rmsbolt--user-func-p (src-buffer func)
"Return t if FUNC is a user function.
Argument SRC-BUFFER source buffer."
- (let* ((lang (rmsbolt--get-lang
- (buffer-local-value 'major-mode src-buffer)))
+ (let* ((lang (with-current-buffer src-buffer
+ (rmsbolt--get-lang)))
(regexp (rmsbolt-l-disass-hidden-funcs lang)))
(if regexp
(not (string-match-p regexp func))
@@ -767,7 +756,7 @@ Argument SRC-BUFFER source buffer."
(setq source-linum
(string-to-number (match-string 1 line))))
;; Reformat line to be more like assembly
- (setq line (mapconcat 'identity
+ (setq line (mapconcat #'identity
(list (match-string 5 line)
(match-string 6 line)
(match-string 7 line))
@@ -856,14 +845,14 @@ Argument STR compilation finish status."
;; Replace buffer contents non-destructively if possible
(if (functionp #'replace-buffer-contents)
(with-temp-buffer
- (insert (mapconcat 'identity lines "\n"))
+ (insert (mapconcat #'identity lines "\n"))
(let ((tmp-buffer (current-buffer)))
(with-current-buffer output-buffer
(replace-buffer-contents tmp-buffer))))
(with-current-buffer output-buffer
(let ((old-point (point)))
(erase-buffer)
- (insert (mapconcat 'identity lines "\n"))
+ (insert (mapconcat #'identity lines "\n"))
(goto-char old-point))))
(asm-mode)
(rmsbolt-mode 1)
@@ -880,9 +869,10 @@ Argument STR compilation finish status."
(setq rmsbolt--automated-compile nil))))
;;;;; Parsing Options
-(defun rmsbolt--get-lang (&optional language)
+(defun rmsbolt--get-lang ()
"Helper function to get lang def for LANGUAGE."
- (cdr-safe (assoc (or language major-mode) rmsbolt-languages)))
+ (or rmsbolt-language-descriptor
+ (cdr-safe (assoc major-mode rmsbolt-languages))))
(defun rmsbolt--parse-options ()
"Parse RMS options from file."
(hack-local-variables)
@@ -908,7 +898,7 @@ Argument STR compilation finish status."
(demangler-exists (executable-find demangler)))
(concat existing-cmd " "
(mapconcat
- 'identity
+ #'identity
(list "&&" demangler
"<" (rmsbolt-output-filename src-buffer t)
">" (expand-file-name "tmp.s" rmsbolt--temp-dir)
@@ -942,7 +932,7 @@ Argument STR compilation finish status."
(rmsbolt-l-objdumper lang)
('objdump
(setq cmd
- (mapconcat 'identity
+ (mapconcat #'identity
(list cmd
"&&"
"objdump" "-d" (rmsbolt-output-filename
src-buffer)
@@ -954,7 +944,7 @@ Argument STR compilation finish status."
" ")))
('cat
(setq cmd
- (mapconcat 'identity
+ (mapconcat #'identity
(list cmd
"&&" "mv"
(rmsbolt-output-filename src-buffer)
@@ -970,11 +960,11 @@ Argument STR compilation finish status."
(setq-local rmsbolt-src-buffer src-buffer))))))
;;;; Keymap
-(defvar rmsbolt-mode-map nil "Keymap for function `rmsbolt-mode'.")
-(when (not rmsbolt-mode-map) ; if it is not already defined
- ;; assign command to keys
- (setq rmsbolt-mode-map (make-sparse-keymap))
- (define-key rmsbolt-mode-map (kbd "C-c C-c") #'rmsbolt-compile))
+(defvar rmsbolt-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "C-c C-c") #'rmsbolt-compile)
+ map)
+ "Keymap for function `rmsbolt-mode'.")
;;;; Init commands
@@ -992,16 +982,34 @@ Argument STR compilation finish status."
(delete-directory rmsbolt--temp-dir t))
(setq rmsbolt--temp-dir nil)))))
-(defun rmsbolt-starter (lang-mode)
- "Code for fully setting up a language from LANG-MODE."
+;;;;; Starter Definitions
+
+;; IIUC, this "starter" business is not a necessary part of RMSBolt, but is
+;; a way to provide sample files with which users can try out RMSBolt.
+
+(defvar rmsbolt-starter-files
+ '(("c" . "rmsbolt.c")
+ ("c++" . "rmsbolt.cpp")
+ ("ocaml" . "rmsbolt.ml")
+ ("cl" . "rmsbolt.lisp")
+ ("rust " . "rmsbolt.rs")
+ ("python" . "rmsbolt.py")
+ ("haskell" . "rmsbolt.hs")
+ ;; FIXME: Why capital letter?
+ ("java" . "Rmsbolt.java")))
+
+(defun rmsbolt-starter (lang-name)
+ "Setup new file based on the sample STARTER-FILE-NAME."
+ (interactive
+ (list (completing-read "Language: " rmsbolt-starter-files nil t)))
(rmsbolt--gen-temp)
- (let* ((lang-def (rmsbolt--get-lang lang-mode))
+ (let* ((starter-file-name (cdr (assoc lang-name rmsbolt-starter-files)))
(file-name
- (expand-file-name (rmsbolt-l-starter-file-name lang-def)
rmsbolt--temp-dir))
+ (expand-file-name starter-file-name rmsbolt--temp-dir))
(exists (file-exists-p file-name))
(src-file-name
(when rmsbolt-dir
- (expand-file-name (rmsbolt-l-starter-file-name lang-def)
+ (expand-file-name starter-file-name
(expand-file-name "starters/" rmsbolt-dir))))
(src-file-exists (when src-file-name
(file-exists-p src-file-name))))
@@ -1015,21 +1023,6 @@ Argument STR compilation finish status."
(unless rmsbolt-mode
(rmsbolt-mode 1)))))
-;;;;; Starter Definitions
-(defmacro rmsbolt-defstarter (lang mode)
- "Defines a starter for LANG and MODE."
- `(defun ,(intern (concat "rmsbolt-" lang)) ()
- ,(concat "Open a rmsbolt starter file for " lang ".")
- (interactive)
- (rmsbolt-starter ,mode)))
-(rmsbolt-defstarter "c" 'c-mode)
-(rmsbolt-defstarter "c++" 'c++-mode)
-(rmsbolt-defstarter "ocaml" 'tuareg-mode)
-(rmsbolt-defstarter "cl" 'lisp-mode)
-(rmsbolt-defstarter "rust " 'rust-mode)
-(rmsbolt-defstarter "python" 'python-mode)
-(rmsbolt-defstarter "java" 'java-mode)
-
;;;; Overlay Commands
(defun rmsbolt--goto-line (line)
"Goto a certain LINE."
@@ -1042,7 +1035,7 @@ Argument STR compilation finish status."
(overlay-put o 'face 'rmsbolt-current-line-face)
o))
(cl-defun rmsbolt--point-visible (point)
- "Check if the current point is visible in a winodw in the current buffer."
+ "Check if the current point is visible in a window in the current buffer."
(dolist (w (get-buffer-window-list))
(when (pos-visible-in-window-p point w)
(cl-return-from rmsbolt--point-visible t)))
@@ -1145,10 +1138,11 @@ This mode is enabled both in modes to be compiled and
output buffers."
:global nil
:lighter rmsbolt-mode-lighter rmsbolt-mode-map
;; Init
- (unless rmsbolt-mode
+ (cond
+ (rmsbolt-mode
;; This idle timer always runs, even when we aren't in rmsbolt-mode
;; It won't do anything unless we are in rmsbolt-mode
- (when rmsbolt--idle-timer
+ (unless rmsbolt--idle-timer
(setq rmsbolt--idle-timer (run-with-idle-timer
rmsbolt-overlay-delay t
#'rmsbolt-move-overlays)))
@@ -1158,9 +1152,8 @@ This mode is enabled both in modes to be compiled and
output buffers."
rmsbolt-compile-delay t
#'rmsbolt-hot-recompile)))
(rmsbolt--gen-temp))
- ;; Cleanup
- (unless rmsbolt-mode
- (mapc #'delete-overlay rmsbolt-overlays)))
+ (t ;; Cleanup
+ (mapc #'delete-overlay rmsbolt-overlays))))
(provide 'rmsbolt)
diff --git a/test/rmsbolt-test.el b/test/rmsbolt-test.el
index 261a50141c..9efffb4361 100644
--- a/test/rmsbolt-test.el
+++ b/test/rmsbolt-test.el
@@ -1,11 +1,11 @@
-;;; rmsbolt-test.el --- Tests for rmsbolt
+;;; rmsbolt-test.el --- Tests for rmsbolt -*- lexical-binding: t; -*-
;;; Commentary:
;; Tests for rmsbolt
;;; Code:
-(require 'el-mock)
+(require 'el-mock nil t)
(require 'rmsbolt)
(ert-deftest sanity-check-ert ()
- [elpa] externals/beardbolt c442960f16 076/323: Add an easy way to turn off automatic recompilation, (continued)
- [elpa] externals/beardbolt c442960f16 076/323: Add an easy way to turn off automatic recompilation, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt a191eb9c73 071/323: Add basic Java support, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 77398fec4f 078/323: Clarify starter/ folder message, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 8cfb5b1968 086/323: Upgrade information and docs for melpa, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt cfe809f979 095/323: Revert regexp changes, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 644973d865 079/323: Fix improper building of rmsbolt-starter path, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 21b29cdb72 081/323: Satisfy package-lint, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 8cf5134dbe 098/323: add pony lang support (WIP), ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 480e0371bf 094/323: Update documentation and add autoload, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt cd424d2556 087/323: Fix broken disassemble spelling, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 971d6cfeae 093/323: Various fixes and cleanups,
ELPA Syncer <=
- [elpa] externals/beardbolt a5614c56d7 113/323: Merge branch 'pony', ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt b348482d7f 091/323: Switch to imgur for image links, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt d187b8b189 125/323: Optimize guide display when many line blocks found, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt de28f7903a 232/323: Merge branch 'fix-kill-buffer-error' into 'master', ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 3fe322e573 242/323: Merge branch 'improve-auto-compilation' into 'master', ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 194e7ea9dc 253/323: Dumb rename rmsbolt->bearbold, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 3870c30bbd 257/323: Move test/*test.el to beardbolt-tests.el, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 98f766bdfc 270/323: Add a README.md, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt 28fc329861 262/323: Rework bb-compile a bit, ELPA Syncer, 2023/03/09
- [elpa] externals/beardbolt f491a6adb2 278/323: Rework to use write-region, use a little less memory, ELPA Syncer, 2023/03/09