2015-10-16 14:29:28 +02:00
|
|
|
;;; boon --- An Ergonomic Command Mode -*- lexical-binding: t -*-
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
|
2015-10-24 22:41:43 +02:00
|
|
|
;; A region list has the following form: ((begining . end) (end . begining) ...)
|
2015-10-16 14:29:28 +02:00
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(defun boon-normalize-reg (reg)
|
2015-10-24 22:41:43 +02:00
|
|
|
"Normalize the region REG by making sure car < cdr."
|
2015-10-24 22:33:03 +02:00
|
|
|
(cons (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."
|
|
|
|
(cons (copy-marker (car reg)) (copy-marker (cdr reg))))
|
|
|
|
|
|
|
|
(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
|
|
|
|
(list (cons (boon-reg-end reg) (- (boon-reg-end reg) how-much))
|
|
|
|
(cons (boon-reg-begin reg) (+ (boon-reg-begin reg) how-much))))
|
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:33:03 +02:00
|
|
|
(min (cdr reg) (car 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:33:03 +02:00
|
|
|
(max (cdr reg) (car 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)."
|
|
|
|
(cons (+ (boon-reg-begin reg) 1) (- (boon-reg-end reg) 1)))
|
2015-10-16 14:29:28 +02:00
|
|
|
|
|
|
|
(provide 'boon-regs)
|
|
|
|
;;; boon-regs.el ends here
|