From 95e25dca49e9d1ac53a0412c096d84b8ea0e56d7 Mon Sep 17 00:00:00 2001 From: David Botton Date: Thu, 25 Jul 2024 12:59:24 -0400 Subject: [PATCH] expanded controls on search --- tools/clog-builder-ace.lisp | 2 +- tools/clog-builder-search.lisp | 116 +++++++++++++++++++----- tools/panel-search.clog | 53 +++-------- tools/panel-search.lisp | 161 +++++++++++++++++++++++++-------- 4 files changed, 228 insertions(+), 104 deletions(-) diff --git a/tools/clog-builder-ace.lisp b/tools/clog-builder-ace.lisp index 7d608e6..1b9f72a 100644 --- a/tools/clog-builder-ace.lisp +++ b/tools/clog-builder-ace.lisp @@ -336,7 +336,7 @@ var endRange = ~:*~A.session.doc.indexToPosition(endIndex); (when r (when status (setf (advisory-title status) (documentation (read-from-string s) 'function)) - (setf (text status) (string-downcase r)))))))))) + (setf (text-value status) (string-downcase r)))))))))) (clog-ace:set-auto-completion editor t) (setf (clog-ace:theme editor) *editor-theme*) (setf (clog-ace:tab-size editor) *editor-tab-size*) diff --git a/tools/clog-builder-search.lisp b/tools/clog-builder-search.lisp index 7a4ca57..ee381ec 100644 --- a/tools/clog-builder-search.lisp +++ b/tools/clog-builder-search.lisp @@ -5,6 +5,7 @@ (let* ((app (connection-data-item obj "builder-app-data")) (*default-title-class* *builder-title-class*) (*default-border-class* *builder-border-class*) + (lisp-file t) (win (create-gui-window obj :top (+ (menu-bar-height obj) 20) :left 20 :width 1040 :height 600 @@ -16,39 +17,106 @@ (lambda (obj) (declare (ignore obj)) (setf (hiddenp win) t))) - (set-on-window-size-done win (lambda (obj) - (declare (ignore obj)) - (clog-ace:resize (preview-ace panel)))) + (set-on-window-size win (lambda (obj) + (declare (ignore obj)) + (clog-ace:resize (preview-ace panel)))) + (setf (place-holder (pac-line panel)) "Current Package") (setf (current-editor-is-lisp app) "clog-user") - (setup-lisp-ace (preview-ace panel) nil) + (setf (text-value (pac-line panel)) "clog-user") + (setup-lisp-ace (preview-ace panel) (status-bar panel)) (setf (text-value (preview-ace panel)) ";; After search, double click file name to open / single click to preview") - (setf (read-only-p (preview-ace panel)) t) (set-on-window-focus win (lambda (obj) (declare (ignore obj)) - (setf (current-editor-is-lisp app) "clog-user"))) + (if lisp-file + (setf (current-editor-is-lisp app) (text-value (pac-line panel))) + (setf (current-editor-is-lisp app) nil)))) (set-on-input (result-box panel) (lambda (obj) - (let* ((fname (text-value obj)) - (regex (text-value (grep-input panel))) - (c (read-file fname :report-errors nil))) - (cond ((or (equalp (pathname-type fname) "lisp") - (equalp (pathname-type fname) "asd")) - (setf (clog-ace:mode (preview-ace panel)) "ace/mode/lisp")) - (t - (if (equalp (pathname-type fname) "clog") - (setf (clog-ace:mode (preview-ace panel)) "ace/mode/html") - (setf (clog-ace:mode (preview-ace panel)) - (clog-ace:get-mode-from-extension (preview-ace panel) fname))))) - (setf (text-value (preview-ace panel)) c) - (clog-ace:resize (preview-ace panel)) - (js-execute obj (format nil "~A.find({regExp:true,needle:'~A',caseSensitive:false})" - (clog-ace::js-ace (preview-ace panel)) (escape-string regex))) - (clog-ace:execute-command (preview-ace panel) "find")) - (focus (result-box panel)))) + (let* ((fname (text-value obj)) + (regex (text-value (grep-input panel))) + (c (read-file fname :report-errors nil))) + (cond ((or (equalp (pathname-type fname) "lisp") + (equalp (pathname-type fname) "asd")) + (setf (text-value (pac-line panel)) (get-package-from-string c)) + (setf (current-editor-is-lisp app) (text-value (pac-line panel))) + (setf lisp-file t) + (setf (clog-ace:mode (preview-ace panel)) "ace/mode/lisp")) + (t + (setf lisp-file nil) + (setf (current-editor-is-lisp app) nil) + (if (equalp (pathname-type fname) "clog") + (setf (clog-ace:mode (preview-ace panel)) "ace/mode/html") + (setf (clog-ace:mode (preview-ace panel)) + (clog-ace:get-mode-from-extension (preview-ace panel) fname))))) + (setf (text-value (preview-ace panel)) c) + (clog-ace:resize (preview-ace panel)) + (js-execute obj (format nil "~A.find({regExp:true,needle:'~A',caseSensitive:false})" + (clog-ace::js-ace (preview-ace panel)) (escape-string regex))) + (clog-ace:execute-command (preview-ace panel) "find")) + (focus (result-box panel)))) + (flet ((save (obj) + (let ((fname (text-value (result-box panel)))) + (when (not (equalp fname "")) + (write-file (text-value (preview-ace panel)) fname) + (alert-toast obj "Save file..." (format nil "Saved ~A" fname) :color-class "w3-green" :time-out 1))))) + (set-on-click (save-btn panel) #'save) + (set-on-event (preview-ace panel) "clog-save-ace" #'save)) + (labels ((eval-form (obj) + (let ((p (parse-integer + (js-query obj + (format nil "~A.session.doc.positionToIndex (~A.selection.getCursor(), 0);" + (clog-ace::js-ace (preview-ace panel)) + (clog-ace::js-ace (preview-ace panel)))) + :junk-allowed t)) + (tv (text-value (preview-ace panel))) + (lf nil) + (cp 0)) + (loop + (setf (values lf cp) (read-from-string tv nil nil :start cp)) + (unless lf (return nil)) + (when (> cp p) (return lf))) + (when lf + (let ((result (capture-eval lf + :capture-console (not *editor-use-console-for-evals*) + :capture-result (not *editor-use-console-for-evals*) + :clog-obj (connection-body obj) + :eval-in-package (text-value (pac-line panel))))) + (if *editor-use-console-for-evals* + (on-open-console obj) + (on-open-file obj :title-class "w3-blue" :title "form eval" + :has-time-out *editor-delay-on-eval-form* :text result)))))) + (eval-selection (obj) + (let ((val (clog-ace:selected-text (pac-line panel)))) + (unless (equal val "") + (let ((result (capture-eval val :clog-obj obj + :capture-console (not *editor-use-console-for-evals*) + :capture-result (not *editor-use-console-for-evals*) + :eval-in-package (text-value (pac-line panel))))) + (if *editor-use-console-for-evals* + (on-open-console obj) + (on-open-file obj :title-class "w3-blue" :title "selection eval" + :has-time-out *editor-delay-on-eval-sel* :text result)))))) + (eval-file (obj) + (let ((val (text-value (pac-line panel)))) + (unless (equal val "") + (let ((result (capture-eval val :clog-obj obj + :capture-console (not *editor-use-console-for-evals*) + :capture-result (not *editor-use-console-for-evals*) + :eval-in-package (text-value (pac-line panel))))) + (if *editor-use-console-for-evals* + (on-open-console obj) + (on-open-file obj :title-class "w3-blue" :title "file eval" + :has-time-out *editor-delay-on-eval-file* :text result))))))) + (set-on-click (eval-sel-btn panel) (lambda (obj) + (eval-selection obj))) + (set-on-click (eval-form-btn panel) (lambda (obj) + (eval-form obj))) + (set-on-click (eval-all-btn panel) (lambda (obj) + (eval-file obj)))) (unless dir (setf dir (if (and (current-project-dir app) - (not (equal (current-project-dir app) ""))) + (not (equal (current-project-dir app) ""))) (current-project-dir app) (uiop:getcwd)))) (setf (text-value (dir-input panel)) dir) diff --git a/tools/panel-search.clog b/tools/panel-search.clog index db5a7b2..0f50d55 100644 --- a/tools/panel-search.clog +++ b/tools/panel-search.clog @@ -1,44 +1,17 @@ - -
-
+ +
- -
-
+ +
+
+
+
+
+
\ No newline at end of file diff --git a/tools/panel-search.lisp b/tools/panel-search.lisp index 733117b..378ca10 100644 --- a/tools/panel-search.lisp +++ b/tools/panel-search.lisp @@ -1,7 +1,14 @@ ;;;; CLOG Builder generated code - modify original .clog file and rerender (in-package :clog-tools) (defclass panel-search (clog:clog-panel) - ((preview-ace :reader preview-ace) (preview-div :reader preview-div) + ((status-bar :reader status-bar) (save-btn :reader save-btn) + (eval-all-btn :reader eval-all-btn) + (eval-sel-btn :reader eval-sel-btn) + (eval-form-btn :reader eval-form-btn) + (preview-buttons :reader preview-buttons) + (preview-panel :reader preview-panel) + (preview-ace :reader preview-ace) (preview-div :reader preview-div) + (pac-line :reader pac-line) (preview-grid :reader preview-grid) (search-button :reader search-button) (subdir-label :reader subdir-label) (subdir-check :reader subdir-check) @@ -14,79 +21,155 @@ (let ((panel (change-class (clog:create-div clog-obj :content - "
-
+ + + + + placeholder=\"search regex\" tabindex=\"3\" id=\"CLOGB3930901996\"> + + + + + -
-
+ class=\"\" tabindex=\"6\" id=\"CLOGB3930902000\"> + +
+ + + +
+ +
+
+
+ +
+ +
+ + + + + + + + +
+ +
" :hidden hidden :class class :style style :html-id html-id :auto-place auto-place) 'panel-search))) + (setf (slot-value panel 'status-bar) + (attach-as-child clog-obj "CLOGB3930902009" :clog-type + 'clog:clog-form-element :new-id t)) + (setf (slot-value panel 'save-btn) + (attach-as-child clog-obj "CLOGB3930902008" :clog-type + 'clog:clog-button :new-id t)) + (setf (slot-value panel 'eval-all-btn) + (attach-as-child clog-obj "CLOGB3930902007" :clog-type + 'clog:clog-button :new-id t)) + (setf (slot-value panel 'eval-sel-btn) + (attach-as-child clog-obj "CLOGB3930902006" :clog-type + 'clog:clog-button :new-id t)) + (setf (slot-value panel 'eval-form-btn) + (attach-as-child clog-obj "CLOGB3930902005" :clog-type + 'clog:clog-button :new-id t)) + (setf (slot-value panel 'preview-buttons) + (attach-as-child clog-obj "CLOGB3930902004" :clog-type + 'clog:clog-div :new-id t)) + (setf (slot-value panel 'preview-panel) + (attach-as-child clog-obj "CLOGB3930902003" :clog-type + 'clog:clog-div :new-id t)) (setf (slot-value panel 'preview-ace) - (attach-as-child clog-obj "CLOGB392931441513" :clog-type + (attach-as-child clog-obj "CLOGB3930902002" :clog-type 'clog-ace:clog-ace-element :new-id t)) (setf (slot-value panel 'preview-div) - (attach-as-child clog-obj "CLOGB392931430312" :clog-type + (attach-as-child clog-obj "CLOGB3930902001" :clog-type + 'clog:clog-div :new-id t)) + (setf (slot-value panel 'pac-line) + (attach-as-child clog-obj "CLOGB393090238222" :clog-type + 'clog:clog-form-element :new-id t)) + (setf (slot-value panel 'preview-grid) + (attach-as-child clog-obj "CLOGB393090262523" :clog-type 'clog:clog-div :new-id t)) (setf (slot-value panel 'search-button) - (attach-as-child clog-obj "CLOGB3929313694" :clog-type + (attach-as-child clog-obj "CLOGB3930902000" :clog-type 'clog:clog-form-element :new-id t)) (setf (slot-value panel 'subdir-label) - (attach-as-child clog-obj "CLOGB3929313693" :clog-type + (attach-as-child clog-obj "CLOGB3930901999" :clog-type 'clog:clog-label :new-id t)) (setf (slot-value panel 'subdir-check) - (attach-as-child clog-obj "CLOGB3929313692" :clog-type + (attach-as-child clog-obj "CLOGB3930901998" :clog-type 'clog:clog-form-element :new-id t)) (setf (slot-value panel 'name-regex-input) - (attach-as-child clog-obj "CLOGB3929313691" :clog-type + (attach-as-child clog-obj "CLOGB3930901997" :clog-type 'clog:clog-form-element :new-id t)) (setf (slot-value panel 'grep-input) - (attach-as-child clog-obj "CLOGB3929313690" :clog-type + (attach-as-child clog-obj "CLOGB3930901996" :clog-type 'clog:clog-form-element :new-id t)) (setf (slot-value panel 'dir-input) - (attach-as-child clog-obj "CLOGB3929313689" :clog-type + (attach-as-child clog-obj "CLOGB3930901995" :clog-type 'clog:clog-form-element :new-id t)) (setf (slot-value panel 'result-box) - (attach-as-child clog-obj "CLOGB3929313688" :clog-type + (attach-as-child clog-obj "CLOGB3930901994" :clog-type 'clog:clog-select :new-id t)) (setf (slot-value panel 'result-grid) - (attach-as-child clog-obj "CLOGB3929313687" :clog-type + (attach-as-child clog-obj "CLOGB3930901993" :clog-type 'clog:clog-div :new-id t)) (setf (slot-value panel 'search-form) - (attach-as-child clog-obj "CLOGB3929313686" :clog-type + (attach-as-child clog-obj "CLOGB3930901992" :clog-type 'clog:clog-form :new-id t)) (let ((target (grep-input panel))) (declare (ignorable target))