[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org-real 2ee4b19 006/160: More edge cases
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org-real 2ee4b19 006/160: More edge cases |
Date: |
Wed, 6 Oct 2021 16:58:04 -0400 (EDT) |
branch: externals/org-real
commit 2ee4b1955bd7f2dcf6a36e22bacec45025c022c3
Author: Tyler Grinn <tylergrinn@gmail.com>
Commit: Tyler Grinn <tylergrinn@gmail.com>
More edge cases
---
garage.org | 4 +++
org-real.el | 104 +++++++++++++++++++++++++++++++++++++++++++++----------
prepositions.org | 8 +++++
3 files changed, 97 insertions(+), 19 deletions(-)
diff --git a/garage.org b/garage.org
index 92cf5f5..b8ebb4b 100644
--- a/garage.org
+++ b/garage.org
@@ -1,4 +1,8 @@
* Items in the garage
- [[real://garage/workbench?rel=in/wrench?rel=on][wrench]]
- [[real://garage/workbench?rel=in/ratchet?rel=on][ratchet]]
+ - [[real://garage/workbench?rel=in/ratchet?rel=on/screwdriver?rel=to the
left of][screwdriver]]
- [[real://garage/east wall?rel=in/rake?rel=on][rake]]
+ - [[real://garage/east wall?rel=in/rake?rel=on/shovel?rel=to the left
of][shovel]]
+ - [[real://garage/east wall?rel=in/rake?rel=on/hoe?rel=to the left of][hoe]]
+ -
[[real://garage/workbench?rel=in/wrench?rel=on/paintbrush?rel=above][paintbrush]]
diff --git a/org-real.el b/org-real.el
index 62510d6..dc7f358 100644
--- a/org-real.el
+++ b/org-real.el
@@ -55,7 +55,7 @@
(oset box :behind t))
((string= rel "in front of")
(oset box :x-order (oref prev :x-order))
- (oset box :y-order (oref prev :y-order))
+ (oset box :y-order 9999)
(oset box :behind (oref prev :behind))
(oset box :in-front t))
((string= rel "above")
@@ -147,15 +147,73 @@
(when (and (slot-boundp from-box :name)
(slot-boundp to-box :name)
(string= (oref from-box :name) (oref to-box
:name)))
- (mapc
- (lambda (child)
- (org-real--flex-add child to-box to))
- (oref from-box :children))
+ (org-real--add-matching from-box to-box to)
t))
to-boxes))
from-boxes)
(org-real--flex-add from to to))))
+(defun org-real--map (fn box)
+ (funcall fn box)
+ (mapc
+ (lambda (box) (org-real--map fn box))
+ (org-real--next box t)))
+
+
+(defun org-real--next (box &optional exclude-children)
+ (let ((relatives (append (if exclude-children '() (oref box :children))
+ (oref (oref box :parent) :children))))
+ (seq-filter
+ (lambda (relative)
+ (and (slot-boundp relative :rel-box)
+ (string= (oref (oref relative :rel-box) :name)
+ (oref box :name))))
+ relatives)))
+
+(defun org-real--add-matching (box match world)
+ (let ((next-boxes (org-real--next box))
+ (parent (oref match :parent)))
+ (mapc
+ (lambda (next)
+ (let ((rel (oref next :rel)))
+ (cond
+ ((string= rel "above")
+ (let ((y-order (oref match :y-order)))
+ (oset next :y-order y-order)
+ (org-real--map
+ (lambda (box) (when (>= (oref box :y-order) y-order)
+ (oset box :y-order (+ 1 (oref box :y-order)))))
+ match))
+ (oset next :x-order (oref match :x-order))
+ (oset next :behind (oref match :behind)))
+ ((string= rel "below")
+ (oset next :x-order (oref match :x-order))
+ (oset next :y-order (+ 1 (oref match :y-order)))
+ (oset next :behind (oref match :behind)))
+ ((string= rel "to the right of")
+ (oset next :x-order (+ 1 (oref match :x-order)))
+ (oset next :y-order (oref match :y-order))
+ (oset next :behind (oref match :behind))
+ (oset next :in-front (oref match :in-front)))
+ ((string= rel "to the left of")
+ (let ((x-order (oref match :x-order)))
+ (oset next :x-order x-order)
+ (org-real--map
+ (lambda (box) (when (>= (oref box :x-order) x-order)
+ (oset box :x-order (+ 1 (oref box :x-order)))))
+ match))
+ (oset next :y-order (oref match :y-order))
+ (oset next :behind (oref match :behind))
+ (oset next :in-front (oref match :in-front))))
+
+ (oset next :rel-box match)
+ (if (member rel '("in" "on" "behind" "in front of"))
+ (org-real--flex-add next match world)
+ (oset next :parent parent)
+ (object-add-to-list parent :children next))
+ (org-real--add-matching next next world)))
+ next-boxes)))
+
(defun org-real--flex-add (box parent world)
(let* ((cur-width (org-real--get-width world))
(siblings (oref parent :children))
@@ -170,11 +228,13 @@
(if (and (= max-y sibling-y) (>
sibling-x max-x))
sibling
max))))
- siblings
+ (seq-filter
+ (lambda (sibling) (not (oref sibling
:in-front)))
+ siblings)
(org-real--box :y-order -9999)))))
(oset box :parent parent)
(object-add-to-list parent :children box)
- (when last-sibling
+ (when (and last-sibling (not (oref box :in-front)))
(oset box :y-order (oref last-sibling :y-order))
(oset box :x-order (+ 1 (oref last-sibling :x-order)))
(let ((new-width (org-real--get-width world)))
@@ -183,9 +243,6 @@
(oset box :x-order 0))))))
-(defun org-real--expand (box)
- (apply 'append (list box) (mapcar 'org-real--expand (oref box :children))))
-
(defun org-real-world ()
(interactive)
(let* ((box (org-real--parse-buffer))
@@ -194,6 +251,7 @@
(with-current-buffer-window "Org Real" nil nil
(dotimes (_ height) (insert (concat (make-string width ?\s) "\n")))
(org-real--draw box 0)
+ (toggle-truncate-lines t)
(special-mode))))
@@ -205,7 +263,6 @@
(box (org-real--create-box (copy-tree containers))))
(org-real--pp box (copy-tree containers))))
-(defvar org-real--level)
(defvar org-real--padding '(2 . 1))
(defvar org-real--margin '(2 . 1))
@@ -218,6 +275,7 @@
(let ((offset (line-number-at-pos)))
(dotimes (_ (+ 10 height)) (insert (concat (make-string width ?\s)
"\n")))
(org-real--draw box offset)
+ (toggle-truncate-lines t)
(special-mode)))))
(defface org-real-primary
@@ -353,9 +411,9 @@
(let* ((x-order (oref box :x-order))
(y-order (oref box :y-order))
(above (seq-filter
- (lambda (child) (and (= x-order (oref child :x-order))
- (< (oref child :y-order) y-order)))
- (oref parent :children)))
+ (lambda (child) (and (= x-order (oref child :x-order))
+ (< (oref child :y-order) y-order)))
+ (oref parent :children)))
(directly-above (and above (seq-reduce
(lambda (max child)
(if (> (oref child :y-order) (oref
max :y-order))
@@ -366,7 +424,11 @@
(if directly-above
(+ (org-real--get-top directly-above)
(org-real--get-height directly-above))
- top)))))
+ (if (and (slot-boundp box :rel)
+ (or (string= "to the left of" (oref box :rel))
+ (string= "to the right of" (oref box :rel))))
+ (org-real--get-top (oref box :rel-box))
+ top))))))
(defun org-real--get-left (box)
(if (not (slot-boundp box :parent))
@@ -377,9 +439,9 @@
(car org-real--padding)
(org-real--get-left parent)))
(to-the-left (seq-filter
- (lambda (child) (and (= (oref box :y-order) (oref
child :y-order))
- (< (oref child :x-order) (oref
box :x-order))))
- (oref parent :children)))
+ (lambda (child) (and (= (oref box :y-order) (oref
child :y-order))
+ (< (oref child :x-order) (oref
box :x-order))))
+ (oref parent :children)))
(directly-left (and to-the-left
(seq-reduce
(lambda (max child)
@@ -392,5 +454,9 @@
(+ (org-real--get-left directly-left)
(org-real--get-width directly-left)
(car org-real--margin))
- left))))
+ (if (and (slot-boundp box :rel)
+ (or (string= "above" (oref box :rel))
+ (string= "below" (oref box :rel))))
+ (org-real--get-left (oref box :rel-box))
+ left)))))
diff --git a/prepositions.org b/prepositions.org
new file mode 100644
index 0000000..8e1c8d2
--- /dev/null
+++ b/prepositions.org
@@ -0,0 +1,8 @@
+- [[real:// /in?rel=in][in]]
+- [[real:// /on?rel=on][on]]
+- [[real:// /behind?rel=behind][behind]]
+- [[real:// /in front of?rel=in front of][in front of]]
+- [[real:// /to the right of?rel=to the right of][to the right of]]
+- [[real:// /above?rel=above][above]]
+- [[real:// /below?rel=below][below]]
+- [[real:// /to the left of?rel=to the left of][to the left of]]
- [elpa] externals/org-real b4373e7 123/160: Only flex adjusting necessary boxes, (continued)
- [elpa] externals/org-real b4373e7 123/160: Only flex adjusting necessary boxes, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real c5fc5a2 127/160: Merge branch 'next' into 'main', ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 58989c3 121/160: Use cartesian distance for cycle up/down, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real e4abd0e 118/160: Reworked flexible layout, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 93cb91e 133/160: Linting/elc, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real eb796dd 149/160: Regression: primary boxes should be highlighted, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 9ab2ad0 158/160: Merge branch 'next' into 'main', ELPA Syncer, 2021/10/06
- [elpa] externals/org-real d5ca314 146/160: Merge branch 'next' into 'main', ELPA Syncer, 2021/10/06
- [elpa] externals/org-real dab4fc9 154/160: Updated readme, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 497ea6c 152/160: Added license, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 2ee4b19 006/160: More edge cases,
ELPA Syncer <=
- [elpa] externals/org-real 8b3b5c2 005/160: org-real--merge and org-real-world, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 883497d 009/160: Use .el file instead of .tar in release job, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real e039322 012/160: Add new line after pp text, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real d557262 011/160: Switched to before and after advice for advising `org-insert-link', ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 1fa4417 015/160: Updated README, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real dfcddef 013/160: Added more documentation, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 9ea4553 018/160: Modified logic to allow multiple children, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real a909323 017/160: Shift other things to the right or below when merging, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real 6fcc3b9 031/160: Updated md5 command to see tar files, ELPA Syncer, 2021/10/06
- [elpa] externals/org-real d07bf14 020/160: find-last index returns nil if no match, ELPA Syncer, 2021/10/06