diff --git a/clog.asd b/clog.asd index 83e977e..1330d9c 100644 --- a/clog.asd +++ b/clog.asd @@ -93,6 +93,8 @@ (:file "clog-builder-asdf-browser") (:file "clog-builder-sys-browser") (:file "clog-builder-dir-win") + (:file "clog-builder-repl") + (:file "clog-builder-shell") (:file "clog-builder-images") ;; clog-builder panels (post-render) (:file "panel-clog-templates") @@ -104,4 +106,5 @@ (:file "panel-projects") (:file "panel-project-directory") (:file "panel-clog-builder-repl") + (:file "panel-shell") (:file "panel-dir-view"))) diff --git a/source/clog-gui.lisp b/source/clog-gui.lisp index 44ff4ab..971c1b5 100644 --- a/source/clog-gui.lisp +++ b/source/clog-gui.lisp @@ -2270,6 +2270,12 @@ make-two-way-stream to provide a *query-io* using a clog-gui instead of console) ((null c)) (setf q (format nil "~A~&[~D] ~A~%
" q i (car c)))) (do () ((typep i `(integer 1 ,n))) + (let ((trc (make-array '(0) :element-type 'base-char + :fill-pointer 0 :adjustable t))) + (with-output-to-string (s trc) + (uiop:print-condition-backtrace intro :stream s)) + (when trc + (format t "~A" trc))) (setf q (format nil "~A~&~A:" q prompt)) (setq i (read-from-string (input-dialog obj q (lambda (result) (or result "")) :title title diff --git a/tools/clog-builder-eval.lisp b/tools/clog-builder-eval.lisp index 833c387..71df092 100644 --- a/tools/clog-builder-eval.lisp +++ b/tools/clog-builder-eval.lisp @@ -73,6 +73,8 @@ provide an interactive console.)")) ;; Lisp code evaluation utilities (defun capture-eval (form &key (capture-console t) (capture-result t) + (capture-result-form "=>~A~%") + (eval-form "~A~%=>~A~%") (clog-obj nil) (eval-in-package "clog-user")) "Capture lisp evaluaton of FORM." @@ -112,10 +114,11 @@ provide an interactive console.)")) (*package* (find-package (string-upcase eval-in-package)))) (setf eval-result (eval (read-from-string (format nil "(progn ~A)" form)))) (unless capture-result - (format st "~%=>~A~%" eval-result)) + (format st capture-result-form eval-result)) (values - (format nil "~A~%=>~A~%" result eval-result) - *package*)))))))) + (format nil eval-form result eval-result) + *package* + eval-result)))))))) (defun do-eval (obj form-string cname &key (package "clog-user") (test t) custom-boot) "Render, evalute and run code for panel" diff --git a/tools/clog-builder-settings.lisp b/tools/clog-builder-settings.lisp index 9b9a51c..ad40cae 100644 --- a/tools/clog-builder-settings.lisp +++ b/tools/clog-builder-settings.lisp @@ -46,7 +46,7 @@ ;; CLOG Builder REPL (defparameter *clog-repl-use-console* t) (defparameter *clog-repl-open-console-on-start* nil) -(defparameter *clog-repl-send-result-to-console* t) +(defparameter *clog-repl-send-result-to-console* nil) ;; Builder Look and Feel diff --git a/tools/clog-builder.lisp b/tools/clog-builder.lisp index 9393d41..f6b8a79 100644 --- a/tools/clog-builder.lisp +++ b/tools/clog-builder.lisp @@ -212,7 +212,7 @@ clog-builder window.") (create-div body :content params) (destructuring-bind (stream fname content-type) (form-data-item params "filename") - (create-div body :content (format nil "filename = ~A - (contents printed in REPL)" fname)) + (create-div body :content (format nil "filename = ~A - " fname)) (let ((s (flexi-streams:make-flexi-stream stream)) (pic-data "")) (setf pic-data (format nil "data:~A;base64,~A" content-type @@ -235,40 +235,6 @@ clog-builder window.") :client-movement *client-side-movement*))) (create-thread-list (window-content win)))) -(defun on-repl (obj) - "Open a REPL" - (let* ((*default-title-class* *builder-title-class*) - (*default-border-class* *builder-border-class*) - (win (create-gui-window obj :title "CLOG Builder REPL" - :top 40 :left 225 - :width 600 :height 400 - :client-movement *client-side-movement*))) - (set-geometry (create-clog-builder-repl (window-content win)) - :units "%" :width 100 :height 100))) - -(defun repl-on-create (panel target) - (declare (ignore target)) - (when *clog-repl-open-console-on-start* - (on-open-console panel))) - -(defun repl-on-commmand (panel target data) - (if (equalp data "(clog-builder-repl)") - (let* ((*default-title-class* *builder-title-class*) - (*default-border-class* *builder-border-class*) - (win (create-gui-window panel :title "CLOG Builder REPL GUI Window" - :height 400 :width 600 - :has-pinner t - :client-movement *client-side-movement*))) - (setf clog-user::*body* (window-content win))) - (multiple-value-bind (result new-package) - (capture-eval data :clog-obj panel - :capture-console (not *clog-repl-use-console*) - :capture-result (not *clog-repl-send-result-to-console*) - :eval-in-package (text-value (package-div panel))) - (setf (text-value (package-div panel)) - (string-downcase (package-name new-package))) - (clog-terminal:echo target result)))) - (defun on-show-callers (body) "Open callers window" (let ((*default-title-class* *builder-title-class*) @@ -405,6 +371,7 @@ clog-builder window.") (create-gui-menu-item tools :content "Thread Viewer" :on-click 'on-show-thread-viewer) (create-gui-menu-item tools :content "CLOG Builder REPL" :on-click 'on-repl) (create-gui-menu-item tools :content "CLOG Builder Console" :on-click 'on-open-console) + (create-gui-menu-item tools :content "OS Shell" :on-click 'on-shell) (create-gui-menu-item tools :content "Copy/Cut History" :on-click 'on-show-copy-history-win) (unless *clogframe-mode* (create-gui-menu-item tools :content "Image to HTML Data" :on-click 'on-image-to-data)) @@ -576,4 +543,4 @@ instead of the project window will be displayed." (format nil "~A" 1280) (format nil "~A" 840)))) (when start-browser (format t "~%If browser does not start go to http://127.0.0.1:~A/builder~%~%" port) - (open-browser :url (format nil "http://127.0.0.1:~A/builder" port)))) \ No newline at end of file + (open-browser :url (format nil "http://127.0.0.1:~A/builder" port)))) diff --git a/tools/preferences.lisp.sample b/tools/preferences.lisp.sample index 573ba3c..1ea6bd4 100644 --- a/tools/preferences.lisp.sample +++ b/tools/preferences.lisp.sample @@ -54,7 +54,7 @@ ;; CLOG Builder REPL (setf *clog-repl-use-console* t) (setf *clog-repl-open-console-on-start* nil) -(setf *clog-repl-send-result-to-console* t) +(setf *clog-repl-send-result-to-console* nil) ;; Builder Look and Feel