[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org-real 8b3b5c2 005/160: org-real--merge and org-real-
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org-real 8b3b5c2 005/160: org-real--merge and org-real-world |
Date: |
Wed, 6 Oct 2021 16:58:03 -0400 (EDT) |
branch: externals/org-real
commit 8b3b5c208307d57c5f0c7be1923a9e6d51978e22
Author: Tyler Grinn <tylergrinn@gmail.com>
Commit: Tyler Grinn <tylergrinn@gmail.com>
org-real--merge and org-real-world
---
garage.org | 4 +++
org-real.el | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------
tests.org | 2 +-
3 files changed, 97 insertions(+), 10 deletions(-)
diff --git a/garage.org b/garage.org
new file mode 100644
index 0000000..92cf5f5
--- /dev/null
+++ b/garage.org
@@ -0,0 +1,4 @@
+* Items in the garage
+ - [[real://garage/workbench?rel=in/wrench?rel=on][wrench]]
+ - [[real://garage/workbench?rel=in/ratchet?rel=on][ratchet]]
+ - [[real://garage/east wall?rel=in/rake?rel=on][rake]]
diff --git a/org-real.el b/org-real.el
index 17fc2d2..62510d6 100644
--- a/org-real.el
+++ b/org-real.el
@@ -60,7 +60,7 @@
(oset box :in-front t))
((string= rel "above")
(oset box :x-order (oref prev :x-order))
- (oset box :y-order (- 1 (oref prev :y-order)))
+ (oset box :y-order (- (oref prev :y-order) 1))
(oset box :behind (oref prev :behind)))
((string= rel "below")
(oset box :x-order (oref prev :x-order))
@@ -68,7 +68,7 @@
(oset box :behind (oref prev :behind))
(oset box :in-front (oref prev :in-front)))
((string= rel "to the left of")
- (oset box :x-order (- 1 (oref prev :x-order)))
+ (oset box :x-order (- (oref prev :x-order) 1))
(oset box :y-order (oref prev :y-order))
(oset box :behind (oref prev :behind))
(oset box :in-front (oref prev :in-front)))
@@ -113,6 +113,90 @@
tokens)))
(add-to-list 'containers (list :name host))))
+(defun org-real--parse-buffer ()
+ (let ((boxes '()))
+ (org-element-map (org-element-parse-buffer) 'link
+ (lambda (link)
+ (if (string= (org-element-property :type link) "real")
+ (add-to-list 'boxes
+ (org-real--create-box
+ (org-real--parse-url
+ (org-element-property :raw-link link)))
+ t))))
+ (org-real--merge boxes)))
+
+(defun org-real--merge (boxes)
+ (if (< (length boxes) 2)
+ (if (= 0 (length boxes))
+ (org-real--box)
+ (car boxes))
+ (let ((world (org-real--box))
+ box)
+ (while boxes
+ (setq box (pop boxes))
+ (org-real--merge-into box world))
+ world)))
+
+(defun org-real--merge-into (from to)
+ (let ((from-boxes (reverse (org-real--expand from)))
+ (to-boxes (reverse (org-real--expand to))))
+ (unless (seq-some
+ (lambda (from-box)
+ (seq-some
+ (lambda (to-box)
+ (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))
+ t))
+ to-boxes))
+ from-boxes)
+ (org-real--flex-add from to to))))
+
+(defun org-real--flex-add (box parent world)
+ (let* ((cur-width (org-real--get-width world))
+ (siblings (oref parent :children))
+ (last-sibling (and siblings (seq-reduce
+ (lambda (max sibling)
+ (let ((max-x (oref max :x-order))
+ (max-y (oref max :y-order))
+ (sibling-x (oref sibling :x-order))
+ (sibling-y (oref sibling
:y-order)))
+ (if (> sibling-y max-y)
+ sibling
+ (if (and (= max-y sibling-y) (>
sibling-x max-x))
+ sibling
+ max))))
+ siblings
+ (org-real--box :y-order -9999)))))
+ (oset box :parent parent)
+ (object-add-to-list parent :children box)
+ (when last-sibling
+ (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)))
+ (when (and (> new-width cur-width) (> new-width 80))
+ (oset box :y-order (+ 1 (oref last-sibling :y-order)))
+ (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))
+ (width (org-real--get-width box))
+ (height (org-real--get-height box)))
+ (with-current-buffer-window "Org Real" nil nil
+ (dotimes (_ height) (insert (concat (make-string width ?\s) "\n")))
+ (org-real--draw box 0)
+ (special-mode))))
+
+
(org-link-set-parameters "real"
:follow #'org-real-follow)
@@ -270,7 +354,7 @@
(y-order (oref box :y-order))
(above (seq-filter
(lambda (child) (and (= x-order (oref child :x-order))
- (< y-order (oref child :y-order))))
+ (< (oref child :y-order) y-order)))
(oref parent :children)))
(directly-above (and above (seq-reduce
(lambda (max child)
@@ -280,7 +364,8 @@
above
(org-real--box :y-order -9999)))))
(if directly-above
- (+ (cdr org-real--margin) offset (org-real--get-top
directly-above))
+ (+ (org-real--get-top directly-above)
+ (org-real--get-height directly-above))
top)))))
(defun org-real--get-left (box)
@@ -293,7 +378,7 @@
(org-real--get-left parent)))
(to-the-left (seq-filter
(lambda (child) (and (= (oref box :y-order) (oref
child :y-order))
- (< (oref box :x-order) (oref
child :x-order))))
+ (< (oref child :x-order) (oref
box :x-order))))
(oref parent :children)))
(directly-left (and to-the-left
(seq-reduce
@@ -305,9 +390,7 @@
(org-real--box :x-order -9999)))))
(if directly-left
(+ (org-real--get-left directly-left)
- (if (slot-boundp directly-left :name)
- (length (oref directly-left :name))
- 0)
- offset)
+ (org-real--get-width directly-left)
+ (car org-real--margin))
left))))
diff --git a/tests.org b/tests.org
index 23fbdc5..a331580 100644
--- a/tests.org
+++ b/tests.org
@@ -1,5 +1,5 @@
-* TODO Replace [[real://bathroom cabinet/third
shelf?rel=in/razors?rel=above/toothbrush?rel=to the left of][toothbrush]]
+* TODO Replace [[real://bathroom cabinet/second shelf?rel=in/third
shelf?rel=above/razors?rel=above/toothbrush?rel=to the left of][toothbrush]]
* SOMEDAY Get new tires for the [[real://shed/bike?rel=behind][bike]]
* Items to bring to the park
- [[real://closet/sunscreen?rel=in/mosquito spray?rel=in front of][mosquito
spray]]
- [elpa] externals/org-real c5fc5a2 127/160: Merge branch 'next' into 'main', (continued)
- [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, 2021/10/06
- [elpa] externals/org-real 8b3b5c2 005/160: org-real--merge and org-real-world,
ELPA Syncer <=
- [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
- [elpa] externals/org-real a16fed2 032/160: Linting, ELPA Syncer, 2021/10/06