branch: externals/poke
commit 67aec94f2473cde2f2883f4123744eb027bd7767
Author: Jose E. Marchesi <[email protected]>
Commit: Jose E. Marchesi <[email protected]>
poke.el: improvements in poke-edit
---
poke.el | 112 ++++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 64 insertions(+), 48 deletions(-)
diff --git a/poke.el b/poke.el
index 5fc1d37a8b..fd4a2c9d99 100644
--- a/poke.el
+++ b/poke.el
@@ -806,7 +806,7 @@ fun plet_elval = (string s) void:
(poke-code-send (concat "poke_el_map ("
"\"" (match-string 1 input) "\""
");")))
- ((string-match "^[ \t]*! \\(.*\\)" input)
+ ((string-match "^[ \t]*= \\(.*\\)" input)
(poke-code-send (concat "poke_el_edit ("
"\"" (match-string 1 input) "\""
");")))
@@ -955,53 +955,69 @@ fun plet_elval = (string s) void:
(let ((buf (get-buffer-create "*poke-edit*")))
(with-current-buffer buf
(kill-all-local-variables)
- (let ((inhibit-read-only t))
- (erase-buffer))
- (remove-overlays)
- (widget-insert (concat (propertize name
- 'font-lock-face
- 'poke-edit-header-face)
- " = "
- type
- "\n"))
- (widget-insert (concat " "
- (pcase typekind
- ("struct" "{")
- ("array" "[")
- (_ ""))
- "\n"))
- (mapcar
- (lambda (elem)
- (let ((elem-name (car elem))
- (elem-value (cadr elem)))
- (widget-create 'editable-field
- :size 30
- :format (concat " "
- (propertize elem-name
- 'font-lock-face
-
'poke-struct-field-name-face) "=" "%v,")
- :action `(lambda (widget event)
- (poke-code-send
- (concat ,name
- (if (equal ,typekind "struct")
- "."
- "")
- ,elem-name
- " = "
- (widget-value widget)
- ";")))
- elem-value)
- (widget-insert "\n")))
- elements)
- (widget-insert (concat " " (pcase typekind
- ("struct" "}")
- ("array" "]")
- (_ ""))
- "\n"))
- (use-local-map widget-keymap)
- (widget-setup)
- (goto-char (point-min))))
- (switch-to-buffer-other-window "*poke-edit*"))
+ (setq-local edit-name name)
+ (setq-local edit-type type)
+ (setq-local edit-typekind typekind)
+ (setq-local edit-elements elements)
+ (poke-edit-do-buffer)
+ (switch-to-buffer-other-window "*poke-edit*"))))
+
+(defun poke-edit-do-buffer ()
+ (let ((inhibit-read-only t))
+ (erase-buffer))
+ (remove-overlays)
+ (widget-insert (concat (propertize edit-name
+ 'font-lock-face
+ 'poke-edit-header-face)
+ " = "
+ edit-type
+ "\n"))
+ (widget-insert (concat " "
+ (pcase edit-typekind
+ ("struct" "{")
+ ("array" "[")
+ (_ ""))
+ "\n"))
+ (mapcar
+ (lambda (elem)
+ (let ((elem-name (car elem))
+ (elem-value (cadr elem)))
+ (widget-create 'editable-field
+ :size 30
+ :format (concat " "
+ (propertize elem-name
+ 'font-lock-face
+
'poke-struct-field-name-face) "=" "%v,")
+ :action `(lambda (widget event)
+ (poke-code-send
+ (concat "(" ,edit-name ")"
+ (if (equal ,edit-typekind "struct")
+ "."
+ "")
+ ,elem-name
+ " = "
+ (widget-value widget)
+ ";"
+ "plet_elval
(\"(poke-edit-after)\");")))
+ elem-value)
+ (widget-insert "\n")))
+ edit-elements)
+ (widget-insert (concat " " (pcase edit-typekind
+ ("struct" "}")
+ ("array" "]")
+ (_ ""))
+ "\n"))
+ (use-local-map widget-keymap)
+ (widget-setup)
+ (goto-char (point-min)))
+
+(defun poke-edit-after ()
+ "This function is called after an edition value has been changed."
+ (poke-vu-refresh)
+ (let ((buf (get-buffer "*poke-edit*")))
+ (save-excursion
+ (set-buffer buf)
+ (poke-edit-do-buffer))))
;;;; poke-maps