prep for 2.0 release

This commit is contained in:
David Botton 2024-03-27 23:37:06 -04:00
parent ea4c4a07a5
commit c4a1a67329
5 changed files with 151 additions and 158 deletions

23
LEARN.md vendored
View file

@ -37,7 +37,7 @@ already being productive means having a bang up time doin' it all.
- [14 - Kindergarten - Concurrent and Parallel Programing](https://docs.google.com/document/d/10MGPC7j4lpGrMlQS4xtQTEGrvpBecgDUnqu1OrjSVxk) - [14 - Kindergarten - Concurrent and Parallel Programing](https://docs.google.com/document/d/10MGPC7j4lpGrMlQS4xtQTEGrvpBecgDUnqu1OrjSVxk)
- [15 - Pulling it All Togeher With A Real GUI App - clos-encounters game](https://github.com/rabbibotton/clos-encounters) - [15 - Pulling it All Togeher With A Real GUI App - clos-encounters game](https://github.com/rabbibotton/clos-encounters)
CLOG Videos CLOG Video Series
- [CLOG "Plunger" Video series use CLOG Builder to create a pro-app](https://www.youtube.com/playlist?list=PLSUeblYuDUiOucAaqkrVlmOG4p-q7lFU6) - [CLOG "Plunger" Video series use CLOG Builder to create a pro-app](https://www.youtube.com/playlist?list=PLSUeblYuDUiOucAaqkrVlmOG4p-q7lFU6)
- [CLOG Extra - Learn tips on using CLOG](https://www.youtube.com/playlist?list=PLSUeblYuDUiNWHCf8xbHNlxPFQ5clF0YG) - [CLOG Extra - Learn tips on using CLOG](https://www.youtube.com/playlist?list=PLSUeblYuDUiNWHCf8xbHNlxPFQ5clF0YG)
@ -59,15 +59,6 @@ Full Free Books:
![Image of CLOG](https://rabbibotton.github.io/images/demo-clog-contact.png) ![Image of CLOG](https://rabbibotton.github.io/images/demo-clog-contact.png)
CLOG Builder Tutorials (Reddit links)
- [01 - Chat App ](https://www.reddit.com/r/lisp/comments/sj1tv5/clog_builder_tutorial_1_a_chat_app_from_start_to/)
- [02 - Building a Web Page ](https://www.reddit.com/r/lisp/comments/sn8j77/clog_builder_tutorial_2_building_a_web_page/)
- [03 - Importing HTML in to Builder ](https://www.reddit.com/r/lisp/comments/snvv0w/clog_builder_tutorial_3_importing_html_adding/)
- [04 - CLOS-CONTACT - database controls, a complete application](https://www.reddit.com/r/lisp/comments/t61sib/clog_builder_tutorial_4_a_complete_database_app/)
- (Completed Tutorial 4 at https://github.com/rabbibotton/clos-contact but you better do the tutorial!)
- [05 - Using and Creating Controls ](https://www.reddit.com/r/lisp/comments/w2d6dr/builder_tutorial_5_using_and_creating_lisp_custom/)
CLOG "The Framework" (Code Tutorials) CLOG "The Framework" (Code Tutorials)
- [01-tutorial.lisp](tutorial/01-tutorial.lisp) - Hello World - [01-tutorial.lisp](tutorial/01-tutorial.lisp) - Hello World
@ -106,6 +97,15 @@ CLOG "The Framework" (Code Tutorials)
- [34-tutorial.lisp](tutorial/34-tutorial.lisp) - 2D WebGL example - [34-tutorial.lisp](tutorial/34-tutorial.lisp) - 2D WebGL example
- [35-tutorial.lisp](tutorial/35-tutorial.lisp) - 3D WebGL example - [35-tutorial.lisp](tutorial/35-tutorial.lisp) - 3D WebGL example
CLOG Builder Tutorials (Reddit links)
- [01 - Chat App ](https://www.reddit.com/r/lisp/comments/sj1tv5/clog_builder_tutorial_1_a_chat_app_from_start_to/)
- [02 - Building a Web Page ](https://www.reddit.com/r/lisp/comments/sn8j77/clog_builder_tutorial_2_building_a_web_page/)
- [03 - Importing HTML in to Builder ](https://www.reddit.com/r/lisp/comments/snvv0w/clog_builder_tutorial_3_importing_html_adding/)
- [04 - CLOS-CONTACT - database controls, a complete application](https://www.reddit.com/r/lisp/comments/t61sib/clog_builder_tutorial_4_a_complete_database_app/)
- (Completed Tutorial 4 at https://github.com/rabbibotton/clos-contact but you better do the tutorial!)
- [05 - Using and Creating Controls ](https://www.reddit.com/r/lisp/comments/w2d6dr/builder_tutorial_5_using_and_creating_lisp_custom/)
CLOG Demos - Learn through Projects CLOG Demos - Learn through Projects
- [01-demo.lisp](demos/01-demo.lisp) - Sparkey the Snake Game - [01-demo.lisp](demos/01-demo.lisp) - Sparkey the Snake Game
@ -122,8 +122,7 @@ Misc CLOG Tutorials
MANUAL MANUAL
https://rabbibotton.github.io/clog/clog-manual.html - [CLOG - Reference Manual](https://rabbibotton.github.io/clog/clog-manual.html)
GENERAL INFORMATION GENERAL INFORMATION

182
README.md vendored
View file

@ -4,9 +4,9 @@
### License BSD 3-Clause License ### License BSD 3-Clause License
[Learn to program Common Lisp and CLOG here - LEARN.md](LEARN.md) - [Learn to program Common Lisp and CLOG here - LEARN.md](LEARN.md)
[Video of CLOG Builder in action](https://youtu.be/CgTJMxsz3EY) - [Video of CLOG Builder in action](https://youtu.be/CgTJMxsz3EY)
--- ---
@ -19,11 +19,9 @@ frameworks and website frameworks. The CLOG package starts up the
connectivity to the browser or other websocket client (often a browser connectivity to the browser or other websocket client (often a browser
embedded in a native template application.) embedded in a native template application.)
[CLOG - Technical Overview and Purpose](CONCEPT.md) - [CLOG - Reference Manual](https://rabbibotton.github.io/clog/clog-manual.html)
[CLOG - Reference Manual](https://rabbibotton.github.io/clog/clog-manual.html) STATUS: CLOG and CLOG Builder 2.0 released.
STATUS: CLOG and CLOG Builder 1.9 released.
CLOG is actually based on GNOGA, a framework I wrote for Ada in 2013 CLOG is actually based on GNOGA, a framework I wrote for Ada in 2013
and used in commercial production code for the last 10+ years. CLOG and used in commercial production code for the last 10+ years. CLOG
@ -53,66 +51,76 @@ programming logic, events and decisions are done on the server
which can be local, or remote over the web. which can be local, or remote over the web.
CLOG is developed with ECL and SBCL, it is tested fairly regulary on CLOG is developed with ECL and SBCL, it is tested fairly regulary on
Linux, Windows, Android, Rasperry Pi, and Mac. It Linux, Windows, Android, Rasperry Pi, and Mac. It
should in theory work out of the box on any system with Quicklisp should in theory work out of the box on any system with Quicklisp
(although you could hand install) and CLACK (easily switched out (although you could hand install) and CLACK (easily switched out
and the ecl Android/iPhone branch for example doesn't use). and the ecl Android/iPhone branch for example doesn't use).
CLOG is in QuickLisp (ql:quickload :clog), however I recommend CLOG is in QuickLisp (ql:quickload :clog), however I recommend
adding the UltraLisp distribution to it as QuickLisp is update adding the UltraLisp distribution as QuickLisp is update
infrequenty. It is also worthwhile if wish to see the source, infrequenty.
cloning CLOG into ~/common-lisp directory [or other quicklisp/asdf
findable directory ``(push #P"path/to/dir/of/projects" ql:*local-project-directories*)`` ]: However for the bleeding ede latest version and bug fixes clone
CLOG into ~/common-lisp or a findable source directory, i.e.
[ ``(push #P"path/to/dir/of/projects" ql:*local-project-directories*)`` ]
For git (you also need the clog builder plugins clog-ace and clog-terminal
for the builder from git):
``` ```
For git (you need the clog-ace and clog-terminal for the builder too from git):
cd ~/common-lisp cd ~/common-lisp
git clone https://github.com/rabbibotton/clog.git git clone https://github.com/rabbibotton/clog.git
git clone https://github.com/rabbibotton/clog-ace.git git clone https://github.com/rabbibotton/clog-ace.git
git clone https://github.com/rabbibotton/clog-terminal.git git clone https://github.com/rabbibotton/clog-terminal.git
```
For now should also clone my branch of fast-websockets as the maintainers
version is broked for larger files even if using UltraLisp:
For now one, until fix integrated, should also clone a branch of fast-websockets ```
if using larger files in the builder:
git clone https://github.com/rabbibotton/fast-websocket.git git clone https://github.com/rabbibotton/fast-websocket.git
```
To update do _often_ in the future go to the created directories and type: Update git clones with:
```
git pull git pull
```
To add UltraLisp to QuickLisp:
To add UltraLisp to QuickLisp (updates quicker than the standard QuickLisp): ```
To add UtraLisp to quicklisp install:
(ql-dist:install-dist "http://dist.ultralisp.org/" (ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil) :prompt nil)
```
To update to latest packages do _often_ to get the latest: You still need often to update the UltraLisp and QuicLisp with:
```
(ql:update-all-dists) (ql:update-all-dists)
```
Then as always: To get started load CLOG and then can load and run the builder:
```
(ql:quickload :clog) (ql:quickload :clog)
(ql:quickload :clog/tools)
(clog-tools:clog-builder)
``` ```
List of plugins for CLOG on UltraLisp - https://ultralisp.org/tags/clog-plugin/ A list of plugins for CLOG are available at -
https://ultralisp.org/tags/clog-plugin/
Note: If using portacle for Windows you will need to copy the sqlite3 dll from
To load this package and work through tutorials (assuming you
have Quicklisp configured.)
Note: If using portacle for Windows you will need to
update Quicklisp use (ql:update-dist "quicklisp")
You will also likely need to copy the sqlite3 dll from
https://www.sqlite.org/download.html to portacle\win\lib https://www.sqlite.org/download.html to portacle\win\lib
Consider a custom [install on windows](WINDOWS.md) Consider a custom [install on windows](WINDOWS.md)
1. Start emacs then M-x slime 1. Start emacs then M-x slime (or just run sbcl at the command line or use the
CLOG Buider REPL Tools -> CLOG Builder Repl)
2. In the REPL, run: 2. In the REPL, run:
``` ```
CL-USER> (ql:quickload :clog) CL-USER> (ql:quickload :clog) ; if not already loaded
CL-USER> (clog:run-tutorial 1) CL-USER> (clog:run-tutorial 1)
``` ```
@ -128,7 +136,6 @@ CL-USER> (clog:clog-install-dir)
You can the run the demos with: You can the run the demos with:
``` ```
CL-USER> (ql:quickload :clog)
CL-USER> (clog:run-demo 1) CL-USER> (clog:run-demo 1)
``` ```
@ -139,7 +146,7 @@ CL-USER> (ql:quickload :clog/tools)
CL-USER> (clog-tools:clog-builder) CL-USER> (clog-tools:clog-builder)
``` ```
You can also open a "clog-repl" window in your browser to play You can also open a "clog-repl" browser window to play
from the common-lisp repl: from the common-lisp repl:
``` ```
@ -149,10 +156,10 @@ CLOG-USER> (setf (background-color *body*) "beige")
CLOG-USER> (create-div *body* :content "Hello World!") CLOG-USER> (create-div *body* :content "Hello World!")
``` ```
The clog-repl URL is http://127.0.0.1:8080/repl *body* will always refer to the The clog-repl URL is http://127.0.0.1:8080/repl ``*body*``` will always refer
last access of that URL. to the last access of that URL.
To open a browser with the CLOG manual: To open a browser with the CLOG manual (or in the builder it is under Help):
``` ```
CL-USER> (clog:open-manual) CL-USER> (clog:open-manual)
@ -171,7 +178,7 @@ to be a CLOGer.
![Image of clog-web-containers](https://rabbibotton.github.io/images/clog-web-containers.png) ![Image of clog-web-containers](https://rabbibotton.github.io/images/clog-web-containers.png)
Here is a sample CLOG app: Here is a very simple sample CLOG app (from Tutorial 1):
```lisp ```lisp
(defpackage #:clog-user ; Setup a package for our work to exist in (defpackage #:clog-user ; Setup a package for our work to exist in
@ -225,97 +232,8 @@ Other samples of CLOG on the web:
- [CLOG on iOS and Android](https://www.reddit.com/r/lisp/comments/tl46of/would_it_be_cool_to_run_a_clog_app_on_mobile_you/) - [CLOG on iOS and Android](https://www.reddit.com/r/lisp/comments/tl46of/would_it_be_cool_to_run_a_clog_app_on_mobile_you/)
- [Learn CLOG Dashboard](https://gist.github.com/mmontone/3a5a8a57675750e99ffb7fa64f40bc39#file-clog-learn-lisp) - [Learn CLOG Dashboard](https://gist.github.com/mmontone/3a5a8a57675750e99ffb7fa64f40bc39#file-clog-learn-lisp)
Websites/apps made with CLOG Get started learning CLOG and the CLOG Builder with
* [Learn CLOG](LEARN.md)
- clogpower.com
- ackfock.com
CLOG Builder Tutorials
1. Chat App
https://www.reddit.com/r/lisp/comments/sj1tv5/clog_builder_tutorial_1_a_chat_app_from_start_to/
2. Building a Web Page
https://www.reddit.com/r/lisp/comments/sn8j77/clog_builder_tutorial_2_building_a_web_page/
3. Importing HTML in to Builder, Adding Pages and Hand Coding
https://www.reddit.com/r/lisp/comments/snvv0w/clog_builder_tutorial_3_importing_html_adding/
4. CLOS-CONTACT - Using database controls demos a contact manager app in clog.
https://www.reddit.com/r/lisp/comments/t61sib/clog_builder_tutorial_4_a_complete_database_app/
5. Using and Creating Custom Controls
https://www.reddit.com/r/lisp/comments/w2d6dr/builder_tutorial_5_using_and_creating_lisp_custom/
CLOG Tutorials
- [01-tutorial.lisp](tutorial/01-tutorial.lisp) - Hello World
- [02-tutorial.lisp](tutorial/02-tutorial.lisp) - Closures in CLOG
- [03-tutorial.lisp](tutorial/03-tutorial.lisp) - Events fire in parallel
- [04-tutorial.lisp](tutorial/04-tutorial.lisp) - The event target, reusing event handlers
- [05-tutorial.lisp](tutorial/05-tutorial.lisp) - Using connection-data-item
- [06-tutorial.lisp](tutorial/06-tutorial.lisp) - Tasking and events
- [07-tutorial.lisp](tutorial/07-tutorial.lisp) - My first CLOG video game (and handling disconnects)
- [08-tutorial.lisp](tutorial/08-tutorial.lisp) - Mice Love Containers
- [09-tutorial.lisp](tutorial/09-tutorial.lisp) - Tabs, panels, and forms
- [10-tutorial.lisp](tutorial/10-tutorial.lisp) - Canvas
- [11-tutorial.lisp](tutorial/11-tutorial.lisp) - Attaching to existing HTML
- [12-tutorial.lisp](tutorial/12-tutorial.lisp) - Running a website in CLOG (routing)
- [13-tutorial/](tutorial/13-tutorial) - Flying Solo - A minimalist CLOG project
- [14-tutorial.lisp](tutorial/14-tutorial.lisp) - Local (persistent) and Session client-side storage
- [15-tutorial.lisp](tutorial/15-tutorial.lisp) - Multi-media
- [16-tutorial.lisp](tutorial/16-tutorial.lisp) - Bootstrap 4, Loading css files and javascript
- [17-tutorial.lisp](tutorial/17-tutorial.lisp) - W3.CSS layout example and Form submit methods
- [18-tutorial.lisp](tutorial/18-tutorial.lisp) - Drag and Drop
- [19-tutorial.lisp](tutorial/19-tutorial.lisp) - Using JavaScript components
- [20-tutorial.lisp](tutorial/20-tutorial.lisp) - New CLOG plugin from JavaScript component
- [21-tutorial.lisp](tutorial/21-tutorial.lisp) - New CLOG plugin in Common-Lisp
- [22-tutorial.lisp](tutorial/22-tutorial.lisp) - CLOG GUI Menus and Desktop Look and Feel, and popups
- [23-tutorial.lisp](tutorial/23-tutorial.lisp) - Using semaphores to wait for input
- [24-tutorial.lisp](tutorial/24-tutorial.lisp) - CLOG WEB containers
- [25-tutorial.lisp](tutorial/25-tutorial.lisp) - A "local" web app using CLOG WEB
- [26-tutorial.lisp](tutorial/26-tutorial.lisp) - A web page and form with CLOG WEB
- [27-tutorial.lisp](tutorial/27-tutorial.lisp) - Panel Box Layouts
- [28-tutorial/](tutorial/28-tutorial) - CLOG Builder Hello - A minimalist CLOG Builder project
- [29-tutorial.lisp](tutorial/29-tutorial.lisp) - Presentations (and jQuery) - linking lisp objects to clog objects
- [30-tutorial.lisp](tutorial/30-tutorial.lisp) - Instant websites - clog-web-site
- [31-tutorial.lisp](tutorial/31-tutorial.lisp) - Database and Authority based websites - clog-web-dbi and clog-auth
- [32-tutorial.lisp](tutorial/32-tutorial.lisp) - Database Managed Content websites - clog-web-content
- [33-tutorial.lisp](tutorial/33-tutorial.lisp) - with-clog-create - Using a declarative syntax for GUIs
- [34-tutorial.lisp](tutorial/34-tutorial.lisp) - 2D WebGL example
- [35-tutorial.lisp](tutorial/35-tutorial.lisp) - 3D WebGL example
CLOG Demos
- [01-demo.lisp](demos/01-demo.lisp) - Sparkey the Snake Game
- [02-demo.lisp](demos/02-demo.lisp) - Chat - Private instant messenger
- [03-demo.lisp](demos/03-demo.lisp) - IDE - A very simple common lisp IDE
- [04-demo.lisp](demos/04-demo.lisp) - CMS Website - A very simple database driven website
CLOG Video Series - CLOG Plunger
- [CLOG Plunger - Episode 1](https://www.youtube.com/watch?v=srme8Sh4nI4) - Flow - The real secret to Common Lisp productivity.
- [CLOG Plunger - Episode 2](https://www.youtube.com/watch?v=0i1GM8Pz-G4) - The prequel
- [CLOG Plunger - Episode 3](https://www.youtube.com/watch?v=z0H8uVRoPOI) - A new menu item and a draggable Index Card
- [CLOG Plunger - Episode 4](https://www.youtube.com/watch?v=Fzv0hZqYk5Q) - Panels are classes
- [CLOG Plunger - Episode 5](https://www.youtube.com/watch?v=CjBDhp89BGE) - Selectedp and make-resizable
- [CLOG Plunger - Episode 6](https://www.youtube.com/watch?v=wLEWNVq_zt8) - Adding a cork board and data URIs
- [CLOG Plunger - Episode 7](https://www.youtube.com/watch?v=RLDhklvsj2Q) - Add card, Delete cards, Edit Cards
- [CLOG Plunger - Episode 8](https://www.youtube.com/watch?v=pGVaXnY8Xh8) - Moving data in and out of cards
- [CLOG Plunger - Episode 9](https://www.youtube.com/watch?v=oapC2921vpo) - File save and load
- [CLOG Plunger - Episode 10](https://www.youtube.com/watch?v=ew_I-Mf1W0I) - Moving the board to a component with save, load, delete of cards
- [CLOG Plunger - Episode 11](https://www.youtube.com/watch?v=izgRAhcHCxA) - Debugging Race Conditions
CLOG Extras - Supplementary Video Series
- [CLOG Extra 1](https://www.youtube.com/watch?v=HbKWnAxrwRo) - What is Eval Form / Eval Sel / Eval All in the builder?
- [CLOG Extra 2](https://www.youtube.com/watch?v=ffoHO2d6WDE) - The CLOG Plugin - CLOG-Plotly
- [CLOG Extra 3](https://www.youtube.com/watch?v=jEBDwjMnFXE) - The CLOG Project System
- [CLOG Extra 4](https://www.youtube.com/watch?v=CgTJMxsz3EY) - All about panels
Common Lisp The Language - Supplementary programming tutorials
A series covering Common Lisp, highlighting key points and discussions on using the key reference to Common Lisp. Quick paced and intended for review further work on mastering the power of Common using the book: [Common Lisp The Language 2nd Edition by Guy L. Steele](https://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html)
- [Common Lisp The Language 2nd Edition - Episode #1](https://www.youtube.com/watch?v=lxd_xcXmPPY) - Covers Preface, Chp 1 and 2
- [Common Lisp The Language 2nd Edition - Episode #2](https://www.youtube.com/watch?v=9mvQzbr7fIQ) - Covers Chp 3 - Scope and Extent
- [Common Lisp The Language 2nd Edition - Episode #3](https://www.youtube.com/watch?v=VABqkuIwiJY) - Covers Chp 4 - Type Specifiers
- [Common Lisp The Language 2nd Edition - Episode #4](https://www.youtube.com/watch?v=rS3TVHULeUc) - Covers Chp 5 - Program Structure
- [Common Lisp The Language 2nd Edition - Episode #5](https://www.youtube.com/watch?v=4GYwSxoMo2Q) - - Covers Chp 6 - Predicates
Tool Summary Tool Summary

89
doc/clog-manual.html vendored
View file

@ -6539,11 +6539,11 @@ clog-body. If main-menu add as main menu bar.</p></li>
<p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-WINDOW-SELECT-20GENERIC-FUNCTION-29"></a> <p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-WINDOW-SELECT-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:CREATE-GUI-MENU-WINDOW-SELECT%20GENERIC-FUNCTION"></a></p> <a id="CLOG-GUI:CREATE-GUI-MENU-WINDOW-SELECT%20GENERIC-FUNCTION"></a></p>
<ul> <ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:CREATE-GUI-MENU-WINDOW-SELECT%20GENERIC-FUNCTION" >CREATE-GUI-MENU-WINDOW-SELECT</a></span></span> <span class="locative-args">CLOG-OBJ &amp;KEY CLASS HTML-ID</span></span></p> <li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:CREATE-GUI-MENU-WINDOW-SELECT%20GENERIC-FUNCTION" >CREATE-GUI-MENU-WINDOW-SELECT</a></span></span> <span class="locative-args">CLOG-OBJ &amp;KEY CLASS HTML-ID CONTENT</span></span></p>
<p>Attached a clog-select as a menu item that auto updates <p>Attaches a clog-select as a menu item that auto updates
with open windows and maximizes them unless is a keep-on-top window or with open windows and focuses them unless is a keep-on-top window.
on-window-can-maximize returns nil. Only one instance allowed.</p></li> Only one instance allowed.</p></li>
</ul> </ul>
<p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-FULL-SCREEN-20GENERIC-FUNCTION-29"></a> <p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-FULL-SCREEN-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:CREATE-GUI-MENU-FULL-SCREEN%20GENERIC-FUNCTION"></a></p> <a id="CLOG-GUI:CREATE-GUI-MENU-FULL-SCREEN%20GENERIC-FUNCTION"></a></p>
@ -6551,7 +6551,7 @@ on-window-can-maximize returns nil. Only one instance allowed.</p></li>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:CREATE-GUI-MENU-FULL-SCREEN%20GENERIC-FUNCTION" >CREATE-GUI-MENU-FULL-SCREEN</a></span></span> <span class="locative-args">CLOG-GUI-MENU-BAR &amp;KEY HTML-ID</span></span></p> <li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:CREATE-GUI-MENU-FULL-SCREEN%20GENERIC-FUNCTION" >CREATE-GUI-MENU-FULL-SCREEN</a></span></span> <span class="locative-args">CLOG-GUI-MENU-BAR &amp;KEY HTML-ID</span></span></p>
<p>Add as last item in menu bar to allow for a full screen <p>Add as last item in menu bar to allow for a full screen
icon ⤢ and full screen mode.</p></li> icon ⤢ (<em>menu-full-screen-item</em> default) and full screen mode.</p></li>
</ul> </ul>
<p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-ICON-20GENERIC-FUNCTION-29"></a> <p><a id="x-28CLOG-GUI-3ACREATE-GUI-MENU-ICON-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:CREATE-GUI-MENU-ICON%20GENERIC-FUNCTION"></a></p> <a id="CLOG-GUI:CREATE-GUI-MENU-ICON%20GENERIC-FUNCTION"></a></p>
@ -6669,7 +6669,7 @@ use jquery-ui to move/resize and will not work on mobile and touch events
are limitted to clicks. When client-movement is t only on-window-move is fired are limitted to clicks. When client-movement is t only on-window-move is fired
once at start of drag and on-window-move-done at end of drag and once at start of drag and on-window-move-done at end of drag and
on-window-resize at start of resize and on-window-resize-done at end of resize. on-window-resize at start of resize and on-window-resize-done at end of resize.
If has-pinner a toggle wil appear on title bar to allow pinning the window in If has-pinner a toggle will appear on title bar to allow pinning the window in
place, if keep-on-top t then when pinned also will keep-on-top. If had-pinned place, if keep-on-top t then when pinned also will keep-on-top. If had-pinned
is nil and keep-on-top t then the window will be set to keep-on-top always. is nil and keep-on-top t then the window will be set to keep-on-top always.
window-param is a general parameter for identifiying the window to use with window-param is a general parameter for identifiying the window to use with
@ -6742,12 +6742,22 @@ the browser.</p></li>
<p>Toggle <code>CLOG-GUI-WINDOW</code> as maximize window.</p></li> <p>Toggle <code>CLOG-GUI-WINDOW</code> as maximize window.</p></li>
</ul> </ul>
<p><a id="x-28CLOG-GUI-3AWINDOW-TOGGLE-PINNED-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:WINDOW-TOGGLE-PINNED%20GENERIC-FUNCTION"></a></p>
<ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:WINDOW-TOGGLE-PINNED%20GENERIC-FUNCTION" >WINDOW-TOGGLE-PINNED</a></span></span> <span class="locative-args">CLOG-GUI-WINDOW &amp;KEY STATE KEEP-ON-TOP</span></span></p>
<p>Toggle the pinned state of a <code>CLOG-GUI-WINDOW</code>. A pinned
window cannot be moved, closed, resized, maximized or normalized. A new
window is always unpinned. If keep-on-top the keep-on-top state is toggled
to match the pinned state. :state forces state. Returns new state</p></li>
</ul>
<p><a id="x-28CLOG-GUI-3AWINDOW-KEEP-ON-TOP-20GENERIC-FUNCTION-29"></a> <p><a id="x-28CLOG-GUI-3AWINDOW-KEEP-ON-TOP-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:WINDOW-KEEP-ON-TOP%20GENERIC-FUNCTION"></a></p> <a id="CLOG-GUI:WINDOW-KEEP-ON-TOP%20GENERIC-FUNCTION"></a></p>
<ul> <ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:WINDOW-KEEP-ON-TOP%20GENERIC-FUNCTION" >WINDOW-KEEP-ON-TOP</a></span></span> <span class="locative-args">CLOG-GUI-WINDOW</span></span></p> <li><p><span class=reference-bullet><span class=reference><span class="locative-type">[generic-function]</span> <span class="reference-object"><a href="#CLOG-GUI:WINDOW-KEEP-ON-TOP%20GENERIC-FUNCTION" >WINDOW-KEEP-ON-TOP</a></span></span> <span class="locative-args">CLOG-GUI-WINDOW &amp;KEY STATE</span></span></p>
<p>Set <code>CLOG-GUI-WINDOW</code> to stay on top. Use window-focus to undue.</p></li> <p>Set <code>CLOG-GUI-WINDOW</code> to stay on top based on state (default t).</p></li>
</ul> </ul>
<p><a id="x-28CLOG-GUI-3AWINDOW-MAKE-MODAL-20GENERIC-FUNCTION-29"></a> <p><a id="x-28CLOG-GUI-3AWINDOW-MAKE-MODAL-20GENERIC-FUNCTION-29"></a>
<a id="CLOG-GUI:WINDOW-MAKE-MODAL%20GENERIC-FUNCTION"></a></p> <a id="CLOG-GUI:WINDOW-MAKE-MODAL%20GENERIC-FUNCTION"></a></p>
@ -6928,6 +6938,58 @@ if confirmed or nil if canceled.</p></li>
<p>Create a local file dialog box called <code>TITLE</code> using <code>INITIAL-DIR</code> on server <p>Create a local file dialog box called <code>TITLE</code> using <code>INITIAL-DIR</code> on server
machine, upon close <code>ON-FILE-NAME</code> called with filename or nil if failure.</p></li> machine, upon close <code>ON-FILE-NAME</code> called with filename or nil if failure.</p></li>
</ul> </ul>
<p><code>CLOG-GUI</code> - Look and Feel</p>
<p><a id="x-28CLOG-GUI-3A-2AMENU-BAR-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-BAR-CLASS*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-BAR-CLASS*%20VARIABLE" >*MENU-BAR-CLASS*</a></span></span> <span class="locative-args">&quot;w3-bar w3-black w3-card-4&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2AMENU-BAR-DROP-DOWN-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-BAR-DROP-DOWN-CLASS*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-BAR-DROP-DOWN-CLASS*%20VARIABLE" >*MENU-BAR-DROP-DOWN-CLASS*</a></span></span> <span class="locative-args">&quot;w3-dropdown-content w3-bar-block w3-card-4&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2AMENU-ITEM-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-ITEM-CLASS*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-ITEM-CLASS*%20VARIABLE" >*MENU-ITEM-CLASS*</a></span></span> <span class="locative-args">&quot;w3-bar-item w3-button&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2AMENU-WINDOW-SELECT-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-WINDOW-SELECT-CLASS*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-WINDOW-SELECT-CLASS*%20VARIABLE" >*MENU-WINDOW-SELECT-CLASS*</a></span></span> <span class="locative-args">&quot;w3-bar-item w3-button&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2AMENU-FULL-SCREEN-ITEM-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-FULL-SCREEN-ITEM*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-FULL-SCREEN-ITEM*%20VARIABLE" >*MENU-FULL-SCREEN-ITEM*</a></span></span> <span class="locative-args">&quot;&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2AMENU-ICON-IMAGE-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*MENU-ICON-IMAGE-CLASS*%20VARIABLE"></a></p>
<ul>
<li><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*MENU-ICON-IMAGE-CLASS*%20VARIABLE" >*MENU-ICON-IMAGE-CLASS*</a></span></span> <span class="locative-args">&quot;w3-button w3-bar-item&quot;</span></span></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2ATOP-BAR-HEIGHT-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*TOP-BAR-HEIGHT*%20VARIABLE"></a></p>
<ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*TOP-BAR-HEIGHT*%20VARIABLE" >*TOP-BAR-HEIGHT*</a></span></span> <span class="locative-args">20</span></span></p>
<p>Overlap on new windows created with top set as nil</p></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2ADEFAULT-TITLE-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*DEFAULT-TITLE-CLASS*%20VARIABLE"></a></p>
<ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*DEFAULT-TITLE-CLASS*%20VARIABLE" >*DEFAULT-TITLE-CLASS*</a></span></span> <span class="locative-args">&quot;w3-black&quot;</span></span></p>
<p>Window title bar class</p></li>
</ul>
<p><a id="x-28CLOG-GUI-3A-2ADEFAULT-BORDER-CLASS-2A-20VARIABLE-29"></a>
<a id="CLOG-GUI:*DEFAULT-BORDER-CLASS*%20VARIABLE"></a></p>
<ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG-GUI:*DEFAULT-BORDER-CLASS*%20VARIABLE" >*DEFAULT-BORDER-CLASS*</a></span></span> <span class="locative-args">&quot;w3-card-4 w3-white w3-border&quot;</span></span></p>
<p>Window frame border</p></li>
</ul>
<p><a id="x-28CLOG-3A-40CLOG-WEB-20MGL-PAX-3ASECTION-29"></a> <p><a id="x-28CLOG-3A-40CLOG-WEB-20MGL-PAX-3ASECTION-29"></a>
<a id="CLOG:@CLOG-WEB%20MGL-PAX:SECTION"></a></p> <a id="CLOG:@CLOG-WEB%20MGL-PAX:SECTION"></a></p>
<p><span class="outer-navigation"><span class="navigation"> <a href="#CLOG:@CLOG-GUI%20MGL-PAX:SECTION" title="CLOG GUI Objects">&#8592;</a> <a href="clog-manual.html" title="The CLOG manual">&#8593;</a> <a href="#CLOG:@CLOG-WEB-DBI%20MGL-PAX:SECTION" title="CLOG Web DBI">&#8594;</a> <a href="#CLOG:@CLOG-WEB%20MGL-PAX:SECTION" title="CLOG Web Objects">&#8634;</a></span></span></p> <p><span class="outer-navigation"><span class="navigation"> <a href="#CLOG:@CLOG-GUI%20MGL-PAX:SECTION" title="CLOG GUI Objects">&#8592;</a> <a href="clog-manual.html" title="The CLOG manual">&#8593;</a> <a href="#CLOG:@CLOG-WEB-DBI%20MGL-PAX:SECTION" title="CLOG Web DBI">&#8594;</a> <a href="#CLOG:@CLOG-WEB%20MGL-PAX:SECTION" title="CLOG Web Objects">&#8634;</a></span></span></p>
@ -7694,17 +7756,24 @@ replace the browser contents with <code>HTML</code>.</p></li>
<p><span class="outer-navigation"><span class="navigation"> <a href="#CLOG:@CLOG-BODY%20MGL-PAX:SECTION" title="CLOG Body Objects">&#8592;</a> <a href="clog-manual.html" title="The CLOG manual">&#8593;</a> <a href="#CLOG:@CLOG-DOCUMENT%20MGL-PAX:SECTION" title="CLOG Document Objects">&#8594;</a> <a href="#CLOG:@CLOG-WINDOW%20MGL-PAX:SECTION" title="CLOG Window Objects">&#8634;</a></span></span></p> <p><span class="outer-navigation"><span class="navigation"> <a href="#CLOG:@CLOG-BODY%20MGL-PAX:SECTION" title="CLOG Body Objects">&#8592;</a> <a href="clog-manual.html" title="The CLOG manual">&#8593;</a> <a href="#CLOG:@CLOG-DOCUMENT%20MGL-PAX:SECTION" title="CLOG Document Objects">&#8594;</a> <a href="#CLOG:@CLOG-WINDOW%20MGL-PAX:SECTION" title="CLOG Window Objects">&#8634;</a></span></span></p>
<h2><a href="#CLOG:@CLOG-WINDOW%20MGL-PAX:SECTION">24 CLOG Window Objects</a></h2> <h2><a href="#CLOG:@CLOG-WINDOW%20MGL-PAX:SECTION">24 CLOG Window Objects</a></h2>
<p>CLOG Popups</p> <p>CLOG Popups</p>
<p><a id="x-28CLOG-3A-2ACLOG-POPUP-PATH-2A-20VARIABLE-29"></a>
<a id="CLOG:*CLOG-POPUP-PATH*%20VARIABLE"></a></p>
<ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[variable]</span> <span class="reference-object"><a href="#CLOG:*CLOG-POPUP-PATH*%20VARIABLE" >*CLOG-POPUP-PATH*</a></span></span> <span class="locative-args">&quot;/clogwin&quot;</span></span></p>
<p>Default <a href="#CLOG:URL%20GENERIC-FUNCTION" title="CLOG:URL GENERIC-FUNCTION"><code>URL</code></a> for popup windows</p></li>
</ul>
<p><a id="x-28CLOG-3AENABLE-CLOG-POPUP-20FUNCTION-29"></a> <p><a id="x-28CLOG-3AENABLE-CLOG-POPUP-20FUNCTION-29"></a>
<a id="CLOG:ENABLE-CLOG-POPUP%20FUNCTION"></a></p> <a id="CLOG:ENABLE-CLOG-POPUP%20FUNCTION"></a></p>
<ul> <ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[function]</span> <span class="reference-object"><a href="#CLOG:ENABLE-CLOG-POPUP%20FUNCTION" >ENABLE-CLOG-POPUP</a></span></span> <span class="locative-args">&amp;KEY (PATH <code>*CLOG-POPUP-PATH*</code>)</span></span></p> <li><p><span class=reference-bullet><span class=reference><span class="locative-type">[function]</span> <span class="reference-object"><a href="#CLOG:ENABLE-CLOG-POPUP%20FUNCTION" >ENABLE-CLOG-POPUP</a></span></span> <span class="locative-args">&amp;KEY (PATH <a href="#CLOG:*CLOG-POPUP-PATH*%20VARIABLE" title="CLOG:*CLOG-POPUP-PATH* VARIABLE"><code>*CLOG-POPUP-PATH*</code></a>) (BOOT-FILE &quot;/boot.html&quot;)</span></span></p>
<p>Enable handling of clog enabled popups</p></li> <p>Enable handling of clog enabled popups</p></li>
</ul> </ul>
<p><a id="x-28CLOG-3AOPEN-CLOG-POPUP-20FUNCTION-29"></a> <p><a id="x-28CLOG-3AOPEN-CLOG-POPUP-20FUNCTION-29"></a>
<a id="CLOG:OPEN-CLOG-POPUP%20FUNCTION"></a></p> <a id="CLOG:OPEN-CLOG-POPUP%20FUNCTION"></a></p>
<ul> <ul>
<li><p><span class=reference-bullet><span class=reference><span class="locative-type">[function]</span> <span class="reference-object"><a href="#CLOG:OPEN-CLOG-POPUP%20FUNCTION" >OPEN-CLOG-POPUP</a></span></span> <span class="locative-args">OBJ &amp;KEY (PATH <code>*CLOG-POPUP-PATH*</code>) (ADD-SYNC-TO-PATH <code>T</code>) (SYNC-KEY (<a href="#CLOG-CONNECTION:RANDOM-HEX-STRING%20FUNCTION" title="CLOG-CONNECTION:RANDOM-HEX-STRING FUNCTION"><code>RANDOM-HEX-STRING</code></a>)) (NAME &quot;_blank&quot;) (SPECS &quot;&quot;) (WAIT-TIMEOUT 10)</span></span></p> <li><p><span class=reference-bullet><span class=reference><span class="locative-type">[function]</span> <span class="reference-object"><a href="#CLOG:OPEN-CLOG-POPUP%20FUNCTION" >OPEN-CLOG-POPUP</a></span></span> <span class="locative-args">OBJ &amp;KEY (PATH <a href="#CLOG:*CLOG-POPUP-PATH*%20VARIABLE" title="CLOG:*CLOG-POPUP-PATH* VARIABLE"><code>*CLOG-POPUP-PATH*</code></a>) (ADD-SYNC-TO-PATH <code>T</code>) (SYNC-KEY (<a href="#CLOG-CONNECTION:RANDOM-HEX-STRING%20FUNCTION" title="CLOG-CONNECTION:RANDOM-HEX-STRING FUNCTION"><code>RANDOM-HEX-STRING</code></a>)) (NAME &quot;_blank&quot;) (SPECS &quot;&quot;) (WAIT-TIMEOUT 10)</span></span></p>
<p>Open a new browser window/popup in most cases a tab. Since they are controlled <p>Open a new browser window/popup in most cases a tab. Since they are controlled
by clog you have full control of the new popups and are more flexible than using by clog you have full control of the new popups and are more flexible than using

View file

@ -88,7 +88,6 @@
(server-file-dialog function) (server-file-dialog function)
"CLOG-GUI - Look and Feel" "CLOG-GUI - Look and Feel"
(*menu-bar-class variable)
(*menu-bar-class* variable) (*menu-bar-class* variable)
(*menu-bar-drop-down-class* variable) (*menu-bar-drop-down-class* variable)
(*menu-item-class* variable) (*menu-item-class* variable)

View file

@ -69,6 +69,7 @@
(m-save (create-gui-menu-item m-file :content "save (cmd/ctrl-s)")) (m-save (create-gui-menu-item m-file :content "save (cmd/ctrl-s)"))
(m-saveas (create-gui-menu-item m-file :content "save as..")) (m-saveas (create-gui-menu-item m-file :content "save as.."))
(m-emacs (create-gui-menu-item m-file :content "open in emacs")) (m-emacs (create-gui-menu-item m-file :content "open in emacs"))
(m-ntab (create-gui-menu-item m-file :content "open in new tab"))
(m-edit (create-gui-menu-drop-down menu :content "Edit")) (m-edit (create-gui-menu-drop-down menu :content "Edit"))
(m-undo (create-gui-menu-item m-edit :content "undo (cmd/ctrl-z)")) (m-undo (create-gui-menu-item m-edit :content "undo (cmd/ctrl-z)"))
(m-redo (create-gui-menu-item m-edit :content "redo (shift cmd/ctrl-z)")) (m-redo (create-gui-menu-item m-edit :content "redo (shift cmd/ctrl-z)"))
@ -232,9 +233,6 @@
(setf last-date (file-write-date file-name)) (setf last-date (file-write-date file-name))
(sleep .5) (sleep .5)
(remove-class btn-save "w3-animate-top")))) (remove-class btn-save "w3-animate-top"))))
(set-on-click m-emacs (lambda (obj)
(declare (ignore obj))
(swank:ed-in-emacs file-name)))
(flet ((save (obj data &key save-as) (flet ((save (obj data &key save-as)
(cond ((or (equal file-name "") (cond ((or (equal file-name "")
(getf data :shift-key) (getf data :shift-key)
@ -273,6 +271,16 @@
(setf last-date (file-write-date file-name)) (setf last-date (file-write-date file-name))
(sleep .5) (sleep .5)
(remove-class btn-save "w3-animate-top")))))))))) (remove-class btn-save "w3-animate-top"))))))))))
(set-on-click m-emacs (lambda (obj)
(when is-dirty
(save obj nil))
(swank:ed-in-emacs file-name)
(window-close win)))
(set-on-click m-ntab (lambda (obj)
(when is-dirty
(save obj nil))
(on-open-file-ext obj :open-file file-name)
(window-close win)))
(set-on-window-can-close win (set-on-window-can-close win
(lambda (obj) (lambda (obj)
(cond (is-dirty (cond (is-dirty