boon/boon-regs.el

68 lines
2.1 KiB
EmacsLisp
Raw Normal View History

;;; boon-regs.el --- An Ergonomic Command Mode -*- lexical-binding: t -*-
2015-10-16 14:29:28 +02:00
;;; Commentary:
2015-10-24 22:45:23 +02:00
;; A region list has the following form: ((mark . point) (mark . point) ...)
2015-10-16 14:29:28 +02:00
;;; Code:
2015-10-24 22:45:23 +02:00
(defun boon-reg-point (reg)
(cdr reg))
(defun boon-reg-mark (reg)
(car reg))
2015-11-09 21:01:47 +01:00
(defun boon-mk-reg (mrk pnt)
(cons mrk pnt))
2015-10-16 14:29:28 +02:00
(defun boon-normalize-reg (reg)
2015-10-24 22:45:23 +02:00
"Normalize the region REG by making sure that mark < point."
2015-11-09 21:01:47 +01:00
(boon-mk-reg (boon-reg-begin reg) (boon-reg-end reg)))
2015-10-16 14:29:28 +02:00
(defun boon-reg-to-markers (reg)
"Put copy the markers defining REG borders, and return that."
2015-11-09 21:01:47 +01:00
(boon-mk-reg (copy-marker (boon-reg-mark reg)) (copy-marker (boon-reg-point reg))))
2015-10-16 14:29:28 +02:00
(defun boon-borders (reg how-much)
2015-10-24 22:41:43 +02:00
"Given a normalized region REG, return its borders (as a region list).
The size of the borders is HOW-MUCH."
;; TODO: if the results would tourch or overlap, return the input region
2015-11-09 21:01:47 +01:00
(list (boon-mk-reg (boon-reg-end reg) (- (boon-reg-end reg) how-much))
(boon-mk-reg (boon-reg-begin reg) (+ (boon-reg-begin reg) how-much))))
(defun boon-include-surround-spaces (reg)
(save-excursion
(let* ((beg (boon-reg-begin reg))
(end (boon-reg-end reg))
(space-at-end (progn
(goto-char end)
(looking-at "\\s-"))))
(if space-at-end
(boon-mk-reg beg (progn
(skip-syntax-forward "-")
(point)))
(boon-mk-reg (progn (goto-char beg)
(skip-syntax-backward "-")
(point))
end)))))
2015-10-16 14:29:28 +02:00
2015-10-24 22:33:03 +02:00
(defun boon-reg-begin (reg)
2015-10-24 22:41:43 +02:00
"The begining of region REG."
2015-10-24 22:45:23 +02:00
(min (boon-reg-point reg) (boon-reg-mark reg)))
2015-10-24 22:41:43 +02:00
2015-10-24 22:33:03 +02:00
(defun boon-reg-end (reg)
2015-10-24 22:41:43 +02:00
"The end of region REG."
2015-10-24 22:45:23 +02:00
(max (boon-reg-point reg) (boon-reg-mark reg)))
2015-10-24 22:41:43 +02:00
2015-10-16 14:29:28 +02:00
(defun boon-content (reg)
2015-10-24 22:41:43 +02:00
"Given a region REG, return its contents (crop the region by 1)."
2015-11-09 21:01:47 +01:00
(boon-mk-reg (+ (boon-reg-begin reg) 1) (- (boon-reg-end reg) 1)))
2015-10-16 14:29:28 +02:00
(defun boon-reg-after (r1 r2)
"Return non-nil when R1 occurs after R2."
(> (boon-reg-begin r1) (boon-reg-end r2)))
2015-10-16 14:29:28 +02:00
(provide 'boon-regs)
;;; boon-regs.el ends here