emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/helm 57c964e61a 1/2: Add a mode to edit large vars in buff


From: ELPA Syncer
Subject: [nongnu] elpa/helm 57c964e61a 1/2: Add a mode to edit large vars in buffer
Date: Mon, 5 Jun 2023 16:00:44 -0400 (EDT)

branch: elpa/helm
commit 57c964e61a5f67d295cbccdfd6b7e26be2a22c3e
Author: Thierry Volpiatto <thievol@posteo.net>
Commit: Thierry Volpiatto <thievol@posteo.net>

    Add a mode to edit large vars in buffer
---
 helm-elisp.el | 21 ++++++++++++---------
 helm-lib.el   | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 9 deletions(-)

diff --git a/helm-elisp.el b/helm-elisp.el
index 0b6a03049a..a55fa46024 100644
--- a/helm-elisp.el
+++ b/helm-elisp.el
@@ -929,15 +929,18 @@ a string, i.e. the `symbol-name' of any existing symbol."
 
 (defun helm-set-variable (var)
   "Set VAR value interactively."
-  (let* ((sym (helm-symbolify var))
-         (val (default-value sym)))
-    (set-default sym (eval-minibuffer
-                      (format "Set `%s': " var)
-                      (if (or (stringp val)
-                              (memq val '(nil t))
-                              (numberp val))
-                          (prin1-to-string val)
-                        (format "'%s" (prin1-to-string val)))))))
+  (let* ((sym  (helm-symbolify var))
+         (val  (default-value sym))
+         (strv (prin1-to-string val)))
+    (if (> (length strv) 25)
+        (helm-edit-variable var)
+      (set-default sym (eval-minibuffer
+                        (format "Set `%s': " var)
+                        (if (or (stringp val)
+                                (memq val '(nil t))
+                                (numberp val))
+                            strv
+                          (format "'%s" strv)))))))
 
 
 ;;; Elisp Timers.
diff --git a/helm-lib.el b/helm-lib.el
index 7970a5c72b..1b1f7f1e88 100644
--- a/helm-lib.el
+++ b/helm-lib.el
@@ -1308,6 +1308,56 @@ using LOAD-PATH."
       (when place
         (switch-to-buffer (car place)) (goto-char (cdr place))))))
 
+(defvar helm-edit-variable-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-c C-c") 'helm-set-variable-from-pp-buffer)
+    (define-key map (kbd "C-c C-k") 'helm-edit-variable-quit)
+    map))
+
+(define-derived-mode helm-edit-variable-mode
+    emacs-lisp-mode "helm-edit-variable"
+    "A mode to edit variables values.
+
+Special commands:
+\\{helm-edit-variable-mode-map}")
+
+(defvar helm-pretty-print-buffer-name "*pretty print output*")
+(defvar helm-pretty-print-current-symbol nil)
+(defun helm-edit-variable (var)
+  (let* ((sym (intern-soft var))
+         (val (symbol-value sym)))
+    (prog1
+        (pp-display-expression val helm-pretty-print-buffer-name)
+      (with-current-buffer helm-pretty-print-buffer-name
+        (erase-buffer)
+        (helm-edit-variable-mode)
+        (goto-char (point-min))
+        (insert (format ";;; Edit variable `%s' and hit C-c C-c when done\n" 
sym)
+                ";;; Abort with C-c C-k\n\n")
+        (set (make-local-variable 'helm-pretty-print-current-symbol) sym)))))
+
+(defun helm-set-variable-from-pp-buffer ()
+  (interactive)
+  (with-current-buffer helm-pretty-print-buffer-name
+    (goto-char (point-min))
+    (forward-line 3)
+    (let ((val (symbol-value helm-pretty-print-current-symbol)))
+      (save-excursion
+        (if (or (stringp val)
+                (memq val '(nil t))
+                (numberp val))
+            (set helm-pretty-print-current-symbol (read (current-buffer)))
+          (set helm-pretty-print-current-symbol `(,@(read (current-buffer))))))
+      (if (equal val (symbol-value helm-pretty-print-current-symbol))
+          (message "No changes done")
+        (message "`%s' value modified" helm-pretty-print-current-symbol))
+      (quit-window t))))
+
+(defun helm-edit-variable-quit ()
+  "Quit edit variable buffer."
+  (interactive)
+  (quit-window t))
+
 (defun helm-find-face-definition (face)
   "Try to jump to FACE definition.
 With a prefix arg ask for the project directory to search in instead of



reply via email to

[Prev in Thread] Current Thread [Next in Thread]