[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/gnugo e75eb8a 135/357: [gnugo frolic] Add some branch s
From: |
Stefan Monnier |
Subject: |
[elpa] externals/gnugo e75eb8a 135/357: [gnugo frolic] Add some branch swizzling commands. |
Date: |
Sun, 29 Nov 2020 14:51:06 -0500 (EST) |
branch: externals/gnugo
commit e75eb8a9b0c032b3faa65f57fcb0ca67449fa6fd
Author: Thien-Thi Nguyen <ttn@gnu.org>
Commit: Thien-Thi Nguyen <ttn@gnu.org>
[gnugo frolic] Add some branch swizzling commands.
* packages/gnugo/gnugo.el (gnugo-frolic-in-the-leaves):
Set buffer-local ‘gnugo-state’ to that of the parent buffer.
(gnugo--awake): New func.
(gnugo--awakened): New macro.
(gnguo--swiz): New func.
(gnugo-frolic-exchange-left, gnugo-frolic-rotate-left)
(gnugo-frolic-exchange-right, gnugo-frolic-rotate-right):
New commands.
(gnugo-frolic-mode-map): Add bindings for ‘j’, ‘J’, ‘k’, ‘K’.
---
gnugo.el | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/gnugo.el b/gnugo.el
index 8ccb347..5364aa5 100644
--- a/gnugo.el
+++ b/gnugo.el
@@ -831,6 +831,8 @@ are dimmed. Type \\[describe-mode] in that buffer for
details."
lanes
" ")))
(set (make-local-variable 'gnugo-frolic-parent-buffer) from)
+ (set (make-local-variable 'gnugo-state)
+ (buffer-local-value 'gnugo-state from))
(loop
for n ; move number
from max-move-num downto 1
@@ -928,6 +930,73 @@ are dimmed. Type \\[describe-mode] in that buffer for
details."
(set (make-local-variable 'gnugo-frolic-origin) finish)
(gnugo-frolic-return-to-origin))))
+(defun gnugo--awake ()
+ (let* ((tree (gnugo-get :sgf-gametree))
+ (ends (gnugo--tree-ends tree))
+ (width (length ends))
+ (monkey (gnugo-get :monkey))
+ (line (count-lines (point-min) (line-beginning-position)))
+ (col (current-column)))
+ (values tree ends width
+ monkey (aref monkey 1)
+ line col (if (> 10 col)
+ -1
+ (/ (- col 10)
+ 6)))))
+
+(defmacro gnugo--awakened (&rest body)
+ `(multiple-value-bind (tree ends width
+ monkey bidx
+ line col
+ a)
+ (gnugo--awake)
+ ,@body))
+
+(defun gnugo--swiz (direction &optional shift)
+ (gnugo--awakened
+ (when (> 0 a)
+ (setq a bidx))
+ (let* ((b (mod (+ direction a) width))
+ (flit (if shift (lambda (n)
+ (cond ((= n a) b)
+ ((= n b) a)
+ (t n)))
+ (lambda (n)
+ (mod (+ direction n) width))))
+ (was (copy-sequence ends))
+ (new-bidx (funcall flit bidx)))
+ (gnugo-frolic-quit)
+ (assert (eq 'gnugo-board-mode major-mode))
+ (loop for bx below width
+ do (aset ends (funcall flit bx)
+ (aref was bx)))
+ (unless (= new-bidx bidx)
+ (aset monkey 1 new-bidx))
+ (gnugo-frolic-in-the-leaves)
+ (goto-char (point-min))
+ (forward-line line)
+ (forward-char (+ 10 (* 6 b))))))
+
+(defun gnugo-frolic-exchange-left ()
+ "Exchange the current branch with the one to its left."
+ (interactive)
+ (gnugo--swiz -1 t))
+
+(defun gnugo-frolic-rotate-left ()
+ "Rotate all branches left."
+ (interactive)
+ (gnugo--swiz -1))
+
+(defun gnugo-frolic-exchange-right ()
+ "Exchange the current branch with the one to its right."
+ (interactive)
+ (gnugo--swiz 1 t))
+
+(defun gnugo-frolic-rotate-right ()
+ "Rotate all branches right."
+ (interactive)
+ (gnugo--swiz 1))
+
(defun gnugo-boss-is-near ()
"Do `bury-buffer' until the current one is not a GNU Board."
(interactive)
@@ -2184,6 +2253,10 @@ starting a new one. See `gnugo-board-mode'
documentation for more info."
(define-key gnugo-frolic-mode-map (car pair) (cdr pair)))
'(("q" . gnugo-frolic-quit)
("C" . gnugo-frolic-quit) ; like ‘View-kill-and-leave’
+ ("j" . gnugo-frolic-exchange-left)
+ ("J" . gnugo-frolic-rotate-left)
+ ("k" . gnugo-frolic-exchange-right)
+ ("K" . gnugo-frolic-rotate-right)
("o" . gnugo-frolic-return-to-origin)))
(unless gnugo-board-mode-map
- [elpa] externals/gnugo a44da1b 073/357: [gnugo sgf int] Add abstractions: >>prop, >>node, >>tree, (continued)
- [elpa] externals/gnugo a44da1b 073/357: [gnugo sgf int] Add abstractions: >>prop, >>node, >>tree, Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo a7f01be 083/357: [gnugo int] Add abstraction: nn, Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo a07cf7c 109/357: [gnugo int] Use ‘gnugo--as-pos-func’ more., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 71f163d 111/357: [gnugo int] Support growth also off of main line., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 0b08017 114/357: [gnugo int] Avoid double list-reverse., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 08c3378 116/357: [gnugo int] Use ‘gnugo/sgf-create’ more., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 44c2dc4 118/357: [gnugo int] Make ‘gnugo--no-regrets’ take ENDS directly., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 7705eca 126/357: [gnugo int] Drop :monkey COUNT; use node's tree MNUM directly., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 4b24b56 142/357: [gnugo frolic int] Don't go through ‘gnugo-frolic-quit’ for refresh., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo dfc130d 136/357: [gnugo frolic] Add backward/forward branch navigation commands., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo e75eb8a 135/357: [gnugo frolic] Add some branch swizzling commands.,
Stefan Monnier <=
- [elpa] externals/gnugo f279f99 146/357: [gnugo frolic int] Regularize keymap decl + init., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo f810771 162/357: [gnugo int] Decruft: Delete unused local vars., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo b0d3543 171/357: fixup! [gnugo frolic] Add previous/next move navigation commands., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo bcc7fef 166/357: [gnugo maint] Update HACKING; nfc., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 9589d64 167/357: [gnugo int] Add abstraction: gnugo--as-cc-func, Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo d71bab7 174/357: [gnugo int] Add abstractions: gnugo--{user-}play-stone, Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo e3a50ca 014/357: [gnugo int] Use ‘display’ property more., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo c02cc72 030/357: [gnugo maint] Update NEWS file; nfc., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo 1dcff48 019/357: [gnugo maint] Revamp "ChangeLog discipline" in HACKING; nfc., Stefan Monnier, 2020/11/29
- [elpa] externals/gnugo f0aa02d 033/357: [gnugo int] Zonk unused local var., Stefan Monnier, 2020/11/29