Boxes.el: Fixes for incorrect Customize, compiler warnings & obsolete code.

● Customisation option 'boxes-known-modes' was being incorrectly added to the internal Emacs 'Customize' meta-group.

● Fixed by creating a new 'Boxes' group for use by this package. Note that backwards compatibility is preserved for
those who have already customised this option.

● Added type declaration for 'boxes-known-modes', which as well as fixing a compiler warning, enables completion and
type-checking on user-entered values.

● Put the other user-settable variables as customisation options in the new 'Boxes' group.

● Fixed a bunch of compiler warnings.

● Removed / modified obsolete or unnecessary code (like requiring the deprecated package 'cl' etc).
This commit is contained in:
Mike Woolley 2022-11-17 20:28:29 +00:00 committed by Thomas Jensen
parent bfb5545215
commit 307a30e2a1

View File

@ -35,76 +35,72 @@
;; (global-set-key "\C-cr" 'boxes-remove) ;; (global-set-key "\C-cr" 'boxes-remove)
;;; Code: ;;; Code:
(eval-when-compile (require 'cl))
;;;###autoload (defgroup boxes nil
(defvar boxes-command "boxes" "ASCII boxes unlimited!"
"The boxes command.") :group 'convenience)
(defvar boxes-types-alist (defcustom boxes-command "boxes"
(let ((the-types (process-lines boxes-command "-q" "(all)")) "The boxes command."
(the-alist (list))) :type 'string
(dolist (el the-types the-alist) :group 'boxes)
(let ((no-alias (replace-regexp-in-string " *\(alias\) *$" "" el)))
(add-to-list 'the-alist
(cons no-alias no-alias)))))
"Association of types available to the current boxes implementation." )
(make-variable-buffer-local 'boxes-types-alist)
(defvar boxes-history nil) (defcustom boxes-args ""
"Additional arguments to the boxes command."
:type 'string
:group 'boxes)
;;;###autoload
(defcustom boxes-known-modes (defcustom boxes-known-modes
'((c-mode . "c-cmt2") (c++-mode . "c-cmt2") (java-mode . "java-cmt") '((c-mode . "c-cmt2") (c++-mode . "c-cmt2") (java-mode . "java-cmt")
(html-mode . "html-cmt") (sh-mode . "pound-cmt") (perl-mode . "pound-cmt") (html-mode . "html-cmt") (sh-mode . "pound-cmt") (perl-mode . "pound-cmt")
(python-mode . "pound-cmt") (ruby-mode . "pound-cmt") (python-mode . "pound-cmt") (ruby-mode . "pound-cmt")
(emacs-lisp-mode . "lisp-cmt") (lisp-mode . "lisp-cmt")) (emacs-lisp-mode . "lisp-cmt") (lisp-mode . "lisp-cmt"))
"The default comment type based on file names." "Default box type based on the major mode of the buffer."
:group 'customize :type '(alist :key-type symbol :value-type string)
) :group 'boxes)
;;;###autoload (defconst boxes-types-list
(defun boxes-set-default-type (mode) (let ((types (process-lines boxes-command "-q" "(all)")))
"Set the default box mode according to the buffer's major mode." (mapcar (lambda(type) (replace-regexp-in-string " *\(alias\) *$" "" type)) types))
(setq boxes-default-type (or (cdr (assoc mode boxes-known-modes)) "c-cmt2"))) "List of types available to the current boxes implementation.")
;;;###autoload (defvar boxes-history nil
(defvar boxes-default-type nil "The default type of comment.") "Boxes types history.")
(make-variable-buffer-local 'boxes-default-type)
(defvar-local boxes-default-type nil
"The default type of box.")
(defun boxes-default-type (mode)
"Get the default box type for the given buffer major MODE."
(or (cdr (assoc mode boxes-known-modes)) "c-cmt2"))
;;;###autoload
(defvar boxes-args ""
"Arguments to the boxes command.")
(make-variable-buffer-local 'boxes-args)
;;;###autoload ;;;###autoload
(defun boxes-create () (defun boxes-create ()
"Automagicly create a new box around the region based on the default type." "Automagicly create a new box around the region based on the default type."
(interactive "*") (interactive "*")
(boxes-command-on-region (region-beginning) (region-end) boxes-default-type)) (boxes-command-on-region (region-beginning) (region-end) boxes-default-type))
;;;###autoload ;;;###autoload
(defun boxes-remove () (defun boxes-remove ()
"Automagicly remove a new box around the region based on the default type." "Automagicly remove a new box around the region based on the default type."
(interactive "*") (interactive "*")
(boxes-command-on-region (region-beginning) (region-end) boxes-default-type 1)) (boxes-command-on-region (region-beginning) (region-end) boxes-default-type 1))
;;;###autoload ;;;###autoload
(defun boxes-command-on-region (start end type &optional remove) (defun boxes-command-on-region (start end type &optional remove)
"Create/Remove boxes from a region. To create just select a region and M-x boxes-command-on-region "Create/Remove boxes from a region.
then you will be prompted to enter a box type. The type selection can use tab completion on the types available. To create just select a region and M-x boxes-command-on-region then you will be prompted to enter a box type.
To remove a box simply prefix a 1 to the callL M-1 M-x boxes-command-on-region will remove a box from a region." The type selection can use tab completion on the types available.
To remove a box simply prefix a 1 to the call: M-1 M-x boxes-command-on-region will remove a box from a region."
(interactive (let ((string (interactive (let ((string
(completing-read (format "Box type (%s): " boxes-default-type) (completing-read (format "Box type (%s): " boxes-default-type)
boxes-types-alist nil t nil 'boxes-history boxes-default-type))) boxes-types-list nil t nil 'boxes-history boxes-default-type)))
(list (region-beginning) (region-end) (list (region-beginning) (region-end)
string string
current-prefix-arg))) current-prefix-arg)))
(if type (when (or (null type) (string= type ""))
(setq boxes-default-type type) (setq type (boxes-default-type major-mode)))
(setq boxes-default-type (boxes-set-default-type major-mode) (setq boxes-default-type type)
type boxes-default-type))
(let ((command-string (let ((command-string
(concat boxes-command (concat boxes-command
(if remove (if remove