diff --git a/clog.asd b/clog.asd index 1330d9c..07ab7f6 100644 --- a/clog.asd +++ b/clog.asd @@ -16,6 +16,7 @@ #:bordeaux-threads #:trivial-open-browser #:parse-float #:quri #:lack-middleware-static #:lack-request #:lack-util-writer-stream #:trivial-gray-streams #:closer-mop #:mgl-pax #:cl-template #:atomics + #:cl-indentify #:sqlite #:cl-dbi #:cl-pass #-(or mswindows win32 cormanlisp) #:cl-isaac) :components ((:module "static-files" :components ((:static-file "js/boot.js"))) @@ -96,6 +97,7 @@ (:file "clog-builder-repl") (:file "clog-builder-shell") (:file "clog-builder-images") + (:file "preferences-tabs") ;; clog-builder panels (post-render) (:file "panel-clog-templates") (:file "panel-image-to-data") diff --git a/tools/clog-builder-files.lisp b/tools/clog-builder-files.lisp index b32f366..cdcbf7e 100644 --- a/tools/clog-builder-files.lisp +++ b/tools/clog-builder-files.lisp @@ -116,12 +116,13 @@ (m-efrm (create-gui-menu-item m-lisp :content "evaluate form (cmd/alt-[)")) (m-esel (create-gui-menu-item m-lisp :content "evaluate selection")) (m-test (create-gui-menu-item m-lisp :content "evaluate all")) - (m-brwsp (create-gui-menu-item m-lisp :content "systen browse at point")) - (m-brws (create-gui-menu-item m-lisp :content "systen browse selection")) + (m-brwsp (create-gui-menu-item m-lisp :content "system browse at point")) + (m-brws (create-gui-menu-item m-lisp :content "system browse selection")) (m-desc (create-gui-menu-item m-lisp :content "describe selection")) (m-doc (create-gui-menu-item m-lisp :content "documentation on selection")) (m-apro (create-gui-menu-item m-lisp :content "apropos on selection")) - (m-ppr (create-gui-menu-item m-lisp :content "pretty print")) + (m-ppr (create-gui-menu-item m-lisp :content "adjust tabs file")) + (m-pprs (create-gui-menu-item m-lisp :content "adjust tabs selection")) (m-help (create-gui-menu-drop-down menu :content "Help")) (m-helpk (create-gui-menu-item m-help :content "keyboard help")) (tool-bar (create-div (top-panel box) :class title-class)) @@ -434,14 +435,22 @@ :fill-pointer 0 :adjustable t))) (with-output-to-string (s r) (with-input-from-string (n (text-value ace)) - (let ((*standard-output* s) - (*print-case* :downcase)) - (loop - (let ((l (read n nil))) - (unless l (return)) - (pprint l)))))) + (let ((*standard-output* s)) + (indentify:indentify n)))) (setf (text-value ace) r) (setf is-dirty t)))) + (set-on-click m-pprs (lambda (obj) + (declare (ignore obj)) + (let ((r (make-array '(0) :element-type 'base-char + :fill-pointer 0 :adjustable t))) + (with-output-to-string (s r) + (with-input-from-string (n (clog-ace:selected-text ace)) + (let ((*standard-output* s)) + (indentify:indentify n)))) + (js-execute ace (format nil "~A.insert('~A',true)" + (clog-ace::js-ace ace) + (escape-string r))) + (setf is-dirty t)))) (labels ((eval-form (obj) (let ((p (parse-integer (js-query obj diff --git a/tools/clog-builder-settings.lisp b/tools/clog-builder-settings.lisp index 95efe16..9b5de60 100644 --- a/tools/clog-builder-settings.lisp +++ b/tools/clog-builder-settings.lisp @@ -52,6 +52,7 @@ ;; Panel Builder (defparameter *builder-render-right-margin* 80) +(defparameter *builder-render-case* :downcase) ;; Builder Look and Feel diff --git a/tools/clog-builder.lisp b/tools/clog-builder.lisp index 47c4b3f..9259fbb 100644 --- a/tools/clog-builder.lisp +++ b/tools/clog-builder.lisp @@ -308,6 +308,10 @@ clog-builder window.") (defun on-new-builder (body) "Launch instance of the CLOG Builder" (set-html-on-close body "Connection Lost") + (indentify:load-templates +common-lisp-templates+ + +asdf-templates+ + +uiop-templates+ + +alexandria-templates+) (let ((app (make-instance 'builder-app-data)) (*menu-bar-class* *builder-menu-bar-class*) (*menu-bar-drop-down-class* *builder-menu-bar-drop-down-class*) @@ -353,16 +357,16 @@ clog-builder window.") (declare (ignore obj)) (setf *open-external* (not *open-external*)) (setf (text-value exter) (exter-text))))) - (create-gui-menu-item file :content "New CLOG Panel Editor" :on-click - (lambda (obj) - (if *open-external* - (on-new-builder-panel-ext obj) - (on-new-builder-panel obj)))) (create-gui-menu-item file :content "New Source Editor" :on-click (lambda (obj) (if *open-external* (on-open-file-ext obj) (on-open-file obj)))) + (create-gui-menu-item file :content "New CLOG Panel Editor" :on-click + (lambda (obj) + (if *open-external* + (on-new-builder-panel-ext obj) + (on-new-builder-panel obj)))) (create-gui-menu-item file :content "New CLOG Panel Popup Editor" :on-click 'on-new-builder-page) (create-gui-menu-item file :content "New HTML Panel Popup Editor" :on-click 'on-new-builder-basic-page) (create-gui-menu-item file :content "New Custom Boot Panel External Editor" :on-click 'on-new-builder-custom-page)) diff --git a/tools/preferences-tabs.lisp b/tools/preferences-tabs.lisp new file mode 100644 index 0000000..50b71d9 --- /dev/null +++ b/tools/preferences-tabs.lisp @@ -0,0 +1,256 @@ +(in-package :clog-tools) + +; Primary count zero is the default so no need to include those. +(defparameter +common-lisp-templates+ + '((assert :count 2 :sub (nil nil + (:style :list) + nil)) + (block :count 1) + (case :count 1 :sub (nil nil (:count 0))) + (catch :count 1) + (ccase :count 1 :sub (nil nil (:count 0))) + (cond :count 0 :sub (nil (:count 0))) + (ctypecase :count 1 :sub (nil nil (:count 0))) + (defclass :count 2 :sub (nil nil + (:style :list) + (:style :list :sub ((:count 0))) + (:count 0))) + (defconstant :count 1) + (defgeneric :count 2 :sub (nil nil + (:style :list) + nil)) + (define-compiler-macro :count 2 :sub (nil nil + (:style :list) + nil)) + (define-condition :count 2 :sub (nil nil + (:style :list) + (:style :list :sub ((:count 0))) + (:count 0))) + (define-method-combination :count 1) + (define-modify-macro :count 2 :sub (nil nil + (:style :list) + nil)) + (define-setf-expander :count 2 :sub (nil nil + (:style :list) + nil)) + (define-symbol-macro :count 1) + (defmacro :count 2 :sub (nil nil + (:style :list) + nil)) + (defmethod :count 2 :ignore (:before :after :around) :sub ((:style :list) + (:style :list) + nil)) + (defpackage :count 1) + (defparameter :count 1) + (defsetf :count 2) ; primary is actually 2-3 + (defstruct :count 1 :sub (nil + (:count 0) + nil)) + (deftype :count 2 :sub (nil nil + (:style :list) + nil)) + (defun :count 2 :sub (nil nil + (:style :list) + nil)) + (defvar :count 1) + (destructuring-bind :count 2 :sub (nil nil + (:style :list) + nil)) + (do-all-symbols :style :tag :count 1 :sub (nil + (:count 0) + nil)) + (do :style :tag :count 2 :sub (nil + (:style :list :sub ((:count 0))) + (:count 0) + nil)) + (do* :style :tag :count 2 :sub (nil + (:style :list :sub ((:count 0))) + (:count 0) + nil)) + (do-external-symbols :style :tag :count 1 :sub (nil + (:count 0) + nil)) + (dolist :style :tag :count 1 :sub (nil + (:count 0) + nil)) + (do-symbols :style :tag :count 1 :sub (nil + (:count 0) + nil)) + (dotimes :style :tag :count 1 :sub (nil + (:count 0) + nil)) + (ecase :count 1 :sub (nil nil + (:count 0))) + (etypecase :count 1 :sub (nil nil + (:count 0))) + (eval-when :count 1) + (flet :count 1 :sub (nil + (:style :list :sub ((:count 1))) + nil)) + (handler-bind :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (handler-case :count 1 :sub (nil nil + (:count 1 :style :tag))) + (if :count 3 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (:import-from :count 1) + (labels :count 1 :sub (nil + (:style :list :sub ((:count 1))) + nil)) + (lambda :count 1 :sub (nil + (:style :list) + nil)) + (let :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (let* :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (loop :count 0) + (macrolet :count 1 :sub (nil + (:style :list :sub ((:count 1))) + nil)) + (multiple-value-bind :count 2 :sub (nil + (:style :list) + nil nil)) + (prog :style :tag :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (prog* :style :tag :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + (progv :count 2) + (prog1 :style :tag :count 2 :sub (nil + (:style :list :sub ((:count 0))) + (:count 0) + nil)) + (quote :count 0 :sub (nil + (:style :quote))) + (:shadowing-import-from :count 1) + (tagbody :style :tag :count 0) + (typecase :count 1 :sub (nil nil + (:count 0))) + (unless :count 1) + (unwind-protect :count 1) + (when :count 1) + (with-accessors :count 2 :sub (nil + (:style :list) + nil)) + (with-compilation-unit :count 1 :sub (nil + (:style :list) + nil)) + (with-condition-restarts :count 2) + (with-hash-table-iterator :count 1 :sub (nil + (:count 0) + nil)) + (with-input-from-string :count 1 :sub (nil + (:count 0) + nil)) + (with-open-file :count 1 :sub (nil + (:count 0) + nil)) + (with-open-stream :count 1 :sub (nil + (:count 0) + nil)) + (with-output-to-string :count 1 :sub (nil + (:count 0) + nil)) + (with-package-iterator :count 1 :sub (nil + (:count 0) + nil)) + (with-simple-restart :count 1 :sub (nil + (:count 0) + nil)) + (with-slots :count 2 :sub (nil + (:style :list) + nil)))) + +(defparameter +asdf-templates+ + '(("defsystem" :count 1))) + +(defparameter +uiop-templates+ + '(("while-collecting" :count 1 :sub (nil + (:style :list) + nil)) + ("with-current-directory" :count 1 :sub (nil + (:style :list) + nil)) + ("with-deprecation" :count 1 :sub (nil + (:style :list) + nil)) + ("with-enough-pathname" :count 1 :sub (nil + (:count 1) + nil)) + ("with-fatal-condition-handler" :count 1 :sub (nil + (:style :list) + nil)) + ("with-input" :count 1 :sub (nil + (:count 1) + nil)) + ("with-muffled-compiler-conditions" :count 1 :sub (nil + (:style :list) + nil)) + ("with-muffled-conditions" :count 1 :sub (nil + (:style :list) + nil)) + ("with-muffled-loader-conditions" :count 1 :sub (nil + (:style :list) + nil)) + ("with-null-input" :count 1 :sub (nil + (:count 1) + nil)) + ("with-null-output" :count 1 :sub (nil + (:count 1) + nil)) + ("with-output" :count 1 :sub (nil + (:count 1) + nil)) + ("with-safe-io-syntax" :count 1 :sub (nil + (:style :list) + nil)) + ("with-saved-deferred-warnings" :count 1 :sub (nil + (:count 1) + nil)) + ("with-staging-pathname" :count 1 :sub (nil + (:count 1) + nil)) + ("with-temporary-file" :count 1 :sub (nil + (:count 1) + nil)) + ("with-upgradability" :count 1 :sub (nil + (:style :list) + nil)))) + +(defparameter +alexandria-templates+ + '(("cswitch" :count 1 :sub (nil nil + (:count 0))) + ("destructuring-case" :count 1 :sub (nil nil + (:count 0))) + ("destructuring-ccase" :count 1 :sub (nil nil + (:count 0))) + ("destructuring-ecase" :count 1 :sub (nil nil + (:count 0))) + ("eswitch" :count 1 :sub (nil nil + (:count 0))) + ("if-let" :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + ("named-lambda" :count 2 :sub (nil nil + (:style :list) nil)) + ("once-only" :count 1 :sub (nil + (:style :list) nil)) + ("switch" :count 1 :sub (nil nil + (:count 0))) + ("when-let" :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + ("when-let*" :count 1 :sub (nil + (:style :list :sub ((:count 0))) + nil)) + ("with-gensyms" :count 1 :sub (nil + (:style :list) + nil)) + ("with-unique-names" :count 1 :sub (nil + (:style :list)))))