;;; boon-utils.el --- An Ergonomic Command Mode -*- lexical-binding: t -*-
;;; Commentary:
;; This file contains several utilities, which shoud probably be part
;; of Emacs. (Maybe they are and I did not find them.)
;;; Code:
(defmacro boon-with-ordered-region (body)
"Run the BODY, ensuring that the point is before the mark."
(declare (obsolete "Used only by obsolete code" "20160904"))
`(if (< (point) (mark))
,body
(progn (exchange-point-and-mark) ,body (exchange-point-and-mark))))
(defcustom boon-hints-enabled 't "Display hints." :group 'boon :type 'boolean)
(defun boon-hint (msg)
"Provide MSG as a hint."
(when boon-hints-enabled
(message msg)))
(defun boon-current-line-indentation ()
"Return the indentation of the curent line."
(save-excursion
(back-to-indentation)
(current-column)))
(defun boon-line-prefix ()
"Return the text between beginning of line and point."
(buffer-substring-no-properties
(line-beginning-position)
(point)))
(defun boon-line-suffix ()
"Return the text between end of line and point."
(buffer-substring-no-properties
(line-end-position)
(point)))
(defun boon-col-relative-to-indent ()
"Return the position of the cursor relative to indentation.
Can be negative."
(- (point) (save-excursion (back-to-indentation) (point))))
(defun boon-looking-at-comment (how-many)
"Is the current point looking at HOW-MANY comments? (negative for backwards)?"
(save-excursion (forward-comment how-many)))
(defun boon-in-string-p ()
"Determine if the point is inside a string."
(nth 3 (syntax-ppss)))
(defun boon-looking-at-line-comment-start-p ()
"Are we looking at a comment-start?"
(interactive)
(and (bound-and-true-p comment-start)
(looking-at comment-start)
(not (boon-in-string-p))))
(defun boon-stuff-at-point ()
"Return a meaningful piece of text around at point.
If no such text exists, throw an error."
(interactive)
(if (use-region-p)
(buffer-substring-no-properties (region-beginning) (region-end))
(or (thing-at-point 'symbol)
(error "Nothing relevant at point; move to a symbol or select a region"))))
(defun boon-jump-over-blanks-forward ()
"Jump over blanks, forward."
(interactive)
(skip-chars-forward "\n\t "))
(defun boon-jump-over-blanks-backward ()
"Jump over blanks, backward."
(interactive)
(skip-chars-backward "\n\t "))
(provide 'boon-utils)
;;; boon-utils.el ends here