From 0bbbcc292ebef179bb9db59be7ee9729c0862ad1 Mon Sep 17 00:00:00 2001 From: David Botton Date: Sun, 14 Jul 2024 17:36:33 -0400 Subject: [PATCH] envelope-panel* load project/tools when starting builder with a project --- OCICL.md | 282 ++++++++++++++++--------------- source/clog-panel.lisp | 25 ++- source/clog.lisp | 1 + tools/clog-builder-projects.lisp | 96 ++++++----- tools/clog-builder.lisp | 8 +- tools/preferences.lisp.sample | 2 +- 6 files changed, 228 insertions(+), 186 deletions(-) diff --git a/OCICL.md b/OCICL.md index 21c2170..49dcbb2 100644 --- a/OCICL.md +++ b/OCICL.md @@ -1,133 +1,149 @@ -OCICL is a complete secure alternative to a QuickLisp CLOG install - -OCICL loads dependencies with your project. Once setup the command line -tool ocicl is used to prepare a directory for a new project or to convert -and existing project to an ocicl based one. To add dependecies you just -add them to your asd file and will be downloaded as needed. A simple -run of "ocicl latest" updates your project dependecies. - -Once installed either in an empty new project dir or existing project do: -(Do not call your project clog, creates asdf circular dependecies.) - -``` -ocicl setup > init -ocicl install clog -``` - -Then start to dev with the CLOG Builder: - -``` -sbcl --userinit init --eval "(asdf:load-system :clog/tools)" --eval "(clog-tools:clog-builder :port 0 :app t)" -``` -(or replace ecl for sbcl) - -On Windows: - -``` -sbcl --userinit init --eval "(setf asdf:*compile-file-failure-behaviour* :warn)" --eval "(asdf:load-system :clog/tools)" --eval "(clog-tools:clog-builder :port 0 :app t)" - -and after first run can use run-ocicl.bat -``` -Note for Windows: unzip https://rabbibotton.github.io/clog/clogframe.zip for - needed dlls in directory - -I N S T A L L -============= - -These are directions for getting started from scratch: - -* Step 1 - Install SBCL * - -Linux: - -Use OS package manager like for example - -``` -sudo apt-get install sbcl -``` - -Mac: - -On Mac install homebrew from https://brew.sh/ - -``` -brew install sbcl -brew install ocicl -``` - -For Mac - skip step 2 - you are ready to go! - -Windows: - -On Windows install Windows AMD 64 from here - - https://www.sbcl.org/platform-table.html -For example: - http://prdownloads.sourceforge.net/sbcl/sbcl-2.4.6-x86-64-windows-binary.msi - - -* Step 2 - Install OCICL * - -Create a dir for example projects and cd to it then do: - -``` -git clone https://github.com/ocicl/ocicl.git -``` - -the cd in to ocicl and run: - -``` -sbcl --load setup.lisp -``` - -Make sure the created ocicl is on your PATH - -On Linux: - -Close your terminal and reopen and in most distros is, as .local/bin is usually -added if exists. - -On Windows: - -Permanently make available, by using: - -search then type env -> then pick Edit the system environment variables -click the button environment variables -> select Path under User variables -click Edit... -> New and type "%USERPROFILE%\AppData\Local\ocicl\bin\" -"Close the terminal and open a new one - - -* Step 3 - Create your project directory - -Note: ~/common-lisp is always searched so make sure no conflicts in most cases - you do not want that directory to exist - -(If converting a clog project just do in the directory with your .asd file) - -For this example using projects/ctest - -cd to projects/ctest - -``` -ocicl setup > init -ocicl install clog -``` - -Note for Windows: unzip https://rabbibotton.github.io/clog/clogframe.zip for - needed dlls in directory. You may also need to add to sbcl - --eval "(setf asdf:*compile-file-failure-behaviour* :warn)" - -to use sbcl any time in your own ocicl world use: -``` -sbcl --userinit init -``` - -and to start the builder in sbcl: - -``` -(asdf:load-system :clog/tools) -(clog-tools:clog-builder) -``` - -If this is the new project a .asd file, first .lisp file and www directory -will be created as well. For windows run-ocicl.bat also created. - +OCICL is a complete secure alternative to a QuickLisp CLOG install + +OCICL loads dependencies with your project. Once setup the command line +tool ocicl is used to prepare a directory for a new project or to convert +and existing project to an ocicl based one. To add dependecies you just +add them to your asd file and will be downloaded as needed. A simple +run of "ocicl latest" updates your project dependecies. + +Once installed either in an empty new project dir or existing project do: +(Do not call your project clog, that creates an asdf circular dependecy.) + +``` +ocicl setup > init +ocicl install clog +``` +Note for Windows: unzip https://rabbibotton.github.io/clog/clogframe.zip for + needed dlls in directory + +Then start to dev with the CLOG Builder: + +``` +sbcl --userinit init --eval "(asdf:load-system :clog/tools)" --eval "(clog-tools:clog-builder :port 0 :app t)" + +and after first run can use "bash run-ocicl" (or chmod 775 run-oicl to make the batch file executable) +``` +(or replace ecl for sbcl) + +On Windows: + +``` +sbcl --userinit init --eval "(setf asdf:*compile-file-failure-behaviour* :warn)" --eval "(asdf:load-system :clog/tools)" --eval "(clog-tools:clog-builder :port 0 :app t)" + +and after first run can use "run-ocicl.bat" +``` + +Update ocicl *frequenlty* with: + +``` +ocicl latest +``` + +I N S T A L L +============= + +These are directions for getting started from scratch: + +* Step 1 - Install SBCL * + +Linux: + +Use OS package manager like for example + +``` +sudo apt-get install sbcl +``` + +Mac: + +On Mac install homebrew from https://brew.sh/ + +``` +brew install sbcl +brew install ocicl +``` + +For Mac - skip step 2 - you are ready to go! + +Windows: + +On Windows install Windows AMD 64 from here - + https://www.sbcl.org/platform-table.html +For example: + http://prdownloads.sourceforge.net/sbcl/sbcl-2.4.6-x86-64-windows-binary.msi + + +* Step 2 - Install OCICL * + +Create a dir for example projects and cd to it then do: + +``` +git clone https://github.com/ocicl/ocicl.git +``` + +the cd in to ocicl and run to create ocicl in ~/.local/bin: + +``` +sbcl --load setup.lisp +``` + +Make sure the created ocicl is on your PATH + +On Linux: + +Close your terminal and reopen and in most distros is, as .local/bin is usually +added if exists. + +On Windows: + +Permanently make available, by using: + +search then type env -> then pick Edit the system environment variables +click the button environment variables -> select Path under User variables +click Edit... -> New and type "%USERPROFILE%\AppData\Local\ocicl\bin\" +"Close the terminal and open a new one + + +* Step 3 - Create your project directory + +Note: ~/common-lisp is always searched so make sure no conflicts in most cases + you do not want that directory to exist + +(If converting a clog project just do in the directory with your .asd file) + +For this example using projects/ctest + +cd to projects/ctest + +``` +ocicl setup > init +ocicl install clog +``` +Note: run frequenlty oclicl latest to get the latest version of clog + +Note for Windows: unzip https://rabbibotton.github.io/clog/clogframe.zip for + needed dlls in directory. You will also need to add to sbcl + --eval "(setf asdf:*compile-file-failure-behaviour* :warn)" + +To use sbcl any time in your own ocicl world use: +``` +sbcl --userinit init +``` + +and to start the builder in sbcl: + +``` +(asdf:load-system :clog/tools) +(clog-tools:clog-builder) +``` + +If this is the new project an .asd file, first .lisp file and www directory +will be created as well. Batch files that will use your asd files to load +plugins are also configured run-ocicl.bat / run-ocicl and run-ql.bat / run-ql +are also created. + +Update ocicl frequenlty with: + +``` +ocicl latest +``` diff --git a/source/clog-panel.lisp b/source/clog-panel.lisp index 43fa298..78eda30 100644 --- a/source/clog-panel.lisp +++ b/source/clog-panel.lisp @@ -150,11 +150,11 @@ nil. Resizable only works if overflow is set to :SCROLL")) (defgeneric envelope-panel (clog-element panel width height &key class style units) - (:documentation "Create a panel of WIDTH and HEIGHT with :relative -positioning to envelope PANEL. This allows any type of clog-panel (including -those created by CLOG Builder, to be positioned within DISPLAY :flex or -:grid layouts or otherwise treat the panel as an inline object. -Returns envelope-panel")) + (:documentation "Create a envelope of WIDTH and HEIGHT with :relative +positioning to envelope PANEL. The envelope is a child of CLOG-ELEMENT. +This allows any type of clog-panel (including those created by CLOG Builder, +to be positioned within a DISPLAY :flex or :grid layout or otherwise treat the +panel as an inline object. Returns the new envelope of PANEL")) (defmethod envelope-panel ((obj clog-element) (panel clog-element) width height @@ -165,6 +165,21 @@ Returns envelope-panel")) (place-inside-top-of e panel) e)) +;;;;;;;;;;;;;;;;;;;; +;; envelope-panel ;; +;;;;;;;;;;;;;;;;;;;; + +(defgeneric envelope-panel* (panel width height + &key class style units) + (:documentation "Like envelope panel, but usses the panels parent as the +parent of the envelope. Returns the new envelope of PANEL")) + +(defmethod envelope-panel* ((panel clog-element) + width height + &key (units :px) class (style "")) + (envelope-panel (parent panel) panel width height + :units units :class class :style style)) + ;;;;;;;;;;;;;;;;;;;;; ;; center-children ;; ;;;;;;;;;;;;;;;;;;;;; diff --git a/source/clog.lisp b/source/clog.lisp index 1745c5c..718d233 100644 --- a/source/clog.lisp +++ b/source/clog.lisp @@ -650,6 +650,7 @@ embedded in a native template application.)" "CLOG-Panel-Box-Layout" (clog-panel-box-layout class) (envelope-panel generic-function) + (envelope-panel* generic-function) (center-children generic-function) (create-panel-box-layout function) (center-panel generic-function) diff --git a/tools/clog-builder-projects.lisp b/tools/clog-builder-projects.lisp index c9029b9..2f37729 100644 --- a/tools/clog-builder-projects.lisp +++ b/tools/clog-builder-projects.lisp @@ -276,17 +276,19 @@ (projects-load sys)) (defun projects-add-plugin (panel sys) - (input-dialog panel (format nil "Enter plugin name (without /tools), ~ - plugin will be added to the runtime and designtime:") - (lambda (result) - (when result - (let* ((s (format nil "~A/tools" sys))) - (add-dep-to-defsystem s (format nil "~A/tools" result)) - (projects-load s)) - (add-dep-to-defsystem sys result) - (projects-load sys) - (projects-populate panel))) - :height 250)) + (let ((*default-title-class* *builder-title-class*) + (*default-border-class* *builder-border-class*)) + (input-dialog panel (format nil "Enter plugin name (without /tools), ~ + plugin will be added to the runtime and designtime:") + (lambda (result) + (when result + (let* ((s (format nil "~A/tools" sys))) + (add-dep-to-defsystem s (format nil "~A/tools" result)) + (projects-load s)) + (add-dep-to-defsystem sys result) + (projects-load sys) + (projects-populate panel))) + :height 250))) (defun add-dep-to-defsystem (sys file) (let ((fname (asdf:system-source-file (asdf:find-system sys))) @@ -324,42 +326,46 @@ (pprint n s)))))) (defun projects-add-lisp (panel sys) - (Input-dialog panel "Enter lisp component name (with out .lisp):" - (lambda (result) - (when result - (let ((path (asdf:component-pathname - (asdf:find-system sys)))) - (write-file "" (format nil "~A~A.lisp" - path result) - :action-if-exists nil) - (add-file-to-defsystem sys result :file) - (projects-load sys) - (projects-populate panel)))) - :height 230) - (projects-load sys)) + (let ((*default-title-class* *builder-title-class*) + (*default-border-class* *builder-border-class*)) + (Input-dialog panel "Enter lisp component name (with out .lisp):" + (lambda (result) + (when result + (let ((path (asdf:component-pathname + (asdf:find-system sys)))) + (write-file "" (format nil "~A~A.lisp" + path result) + :action-if-exists nil) + (add-file-to-defsystem sys result :file) + (projects-load sys) + (projects-populate panel)))) + :height 230) + (projects-load sys))) (defun projects-add-clog (panel sys) - (input-dialog panel (format nil "Enter clog component name (with out .clog), ~ - a lisp component will also be created in the runtime system:") - (lambda (result) - (when result - (let* ((s (format nil "~A/tools" sys)) - (path (asdf:component-pathname - (asdf:find-system s)))) - (write-file "" (format nil "~A~A.clog" - path result) - :action-if-exists nil) - (add-file-to-defsystem s result :clog-file) - (projects-load s)) - (let ((path (asdf:component-pathname - (asdf:find-system sys)))) - (write-file "" (format nil "~A~A.lisp" - path result) - :action-if-exists nil) - (add-file-to-defsystem sys result :file) - (projects-load sys) - (projects-populate panel)))) - :height 250)) + (let ((*default-title-class* *builder-title-class*) + (*default-border-class* *builder-border-class*)) + (input-dialog panel (format nil "Enter clog component name (with out .clog), ~ + a lisp component will also be created in the runtime system:") + (lambda (result) + (when result + (let* ((s (format nil "~A/tools" sys)) + (path (asdf:component-pathname + (asdf:find-system s)))) + (write-file "" (format nil "~A~A.clog" + path result) + :action-if-exists nil) + (add-file-to-defsystem s result :clog-file) + (projects-load s)) + (let ((path (asdf:component-pathname + (asdf:find-system sys)))) + (write-file "" (format nil "~A~A.lisp" + path result) + :action-if-exists nil) + (add-file-to-defsystem sys result :file) + (projects-load sys) + (projects-populate panel)))) + :height 250))) (defun add-file-to-defsystem (system file ftype) (let ((fname (asdf:system-source-file (asdf:find-system system))) diff --git a/tools/clog-builder.lisp b/tools/clog-builder.lisp index a365889..e2d8685 100644 --- a/tools/clog-builder.lisp +++ b/tools/clog-builder.lisp @@ -679,8 +679,12 @@ clog-builder window.") (if project (progn (setf *start-project* (string-downcase (format nil "~A" project))) - (projects-load *start-project*) - (setf static-root (merge-pathnames "./www/" (format nil "~A" (asdf:system-source-directory project))))) + (handler-case + (progn + (projects-load (format nil "~A/tools" *start-project*)) + (setf static-root (merge-pathnames "./www/" (format nil "~A" (asdf:system-source-directory project))))) + (error () + (projects-load *start-project*)))) (setf *start-project* nil)) (when dir (setf *start-dir* dir)) diff --git a/tools/preferences.lisp.sample b/tools/preferences.lisp.sample index fe679e3..9edcdf4 100644 --- a/tools/preferences.lisp.sample +++ b/tools/preferences.lisp.sample @@ -5,7 +5,7 @@ ;; (pushnew #P"/path/of/projects" ql:*local-project-directories* :test #'equalp) ;; ;; System to be available but not listed: -;; (pushnew #P"/path/to/a/projects" asdf:*central-registry* :test #'equalp) +;; (pushnew #P"/path/to/a/project" asdf:*central-registry* :test #'equalp) ;; Preferences loaded on next call to clog-tools:clog-builder or [Eval All]