diff --git a/tools/clog-builder-project-tree.lisp b/tools/clog-builder-project-tree.lisp index 101f515..3cb2e4a 100644 --- a/tools/clog-builder-project-tree.lisp +++ b/tools/clog-builder-project-tree.lisp @@ -113,11 +113,25 @@ (menu (create-panel obj :left (left obj) :top (top obj) :width (width obj) - :class *builder-window-desktop-class*)) + :class *builder-window-desktop-class* + :auto-place :top)) (title (create-div menu :content disp)) (op (create-div menu :content "Toggle Open" :class *builder-menu-context-item-class*)) + (opd (create-div menu :content "Open in Dir Viewer" :class *builder-menu-context-item-class*)) + (ops (create-div menu :content "Open in Pseudo Shell" :class *builder-menu-context-item-class*)) (opo (create-div menu :content "Open in OS" :class *builder-menu-context-item-class*))) (declare (ignore title op)) + (set-on-click menu (lambda (i) + (declare (ignore i)) + (destroy menu))) + (set-on-click opd (lambda (i) + (declare (ignore i)) + (on-dir-win obj :dir item)) + :cancel-event t) + (set-on-click ops (lambda (i) + (declare (ignore i)) + (on-shell obj :dir item)) + :cancel-event t) (set-on-click opo (lambda (i) (declare (ignore i)) (open-file-with-os item)) @@ -140,7 +154,8 @@ (menu (create-panel obj :left (left obj) :top (top obj) :width (width obj) - :class *builder-window-desktop-class*)) + :class *builder-window-desktop-class* + :auto-place :top)) (title (create-div menu :content disp)) (op (create-div menu :content "Open" :class *builder-menu-context-item-class*)) (oph (create-div menu :content "Open this tab" :class *builder-menu-context-item-class*)) @@ -151,8 +166,7 @@ (declare (ignore title op)) (set-on-click menu (lambda (i) (declare (ignore i)) - (project-tree-select obj (format nil "~A" item))) - :cancel-event t) + (destroy menu))) (set-on-click oph (lambda (i) (declare (ignore i)) (project-tree-select obj (format nil "~A" item) :method :here)) @@ -205,8 +219,49 @@ (create-clog-tree tree :fill-function (lambda (obj) (project-tree-dir-select obj dir)) - :node-html "🦎" - :content root) + :node-html "🦎" ; lizard + :content root + :on-context-menu + (lambda (obj) + (let* ((disp sel) + (item root) + (menu (create-panel obj + :left (left obj) :top (top obj) + :width (width obj) + :class *builder-window-desktop-class* + :auto-place :top)) + (title (create-div menu :content disp)) + (op (create-div menu :content "Toggle Open" :class *builder-menu-context-item-class*)) + (opd (create-div menu :content "Open in Dir Viewer" :class *builder-menu-context-item-class*)) + (ops (create-div menu :content "Open Pseudo Shell" :class *builder-menu-context-item-class*)) + (opa (create-div menu :content "Open in ASDF Browser" :class *builder-menu-context-item-class*)) + (opr (create-div menu :content "Open REPL" :class *builder-menu-context-item-class*)) + (opo (create-div menu :content "Open in OS" :class *builder-menu-context-item-class*))) + (declare (ignore title op)) + (set-on-click menu (lambda (i) + (declare (ignore i)) + (destroy menu))) + (set-on-click opd (lambda (i) + (declare (ignore i)) + (on-dir-win obj :dir item)) + :cancel-event t) + (set-on-click ops (lambda (i) + (declare (ignore i)) + (on-shell obj :dir item)) + :cancel-event t) + (set-on-click opa (lambda (i) + (declare (ignore i)) + (on-new-asdf-browser obj)) + :cancel-event t) + (set-on-click opr (lambda (i) + (declare (ignore i)) + (on-repl obj)) + :cancel-event t) + (set-on-click opo (lambda (i) + (declare (ignore i)) + (open-file-with-os item)) + :cancel-event t) + (set-on-mouse-leave menu (lambda (obj) (destroy obj)))))) (let ((already (asdf:already-loaded-systems))) (if (member sel already :test #'equalp) (setf (text-value load-btn) "loaded") diff --git a/tools/clog-builder-repl.lisp b/tools/clog-builder-repl.lisp index 5b784ab..8866d6e 100644 --- a/tools/clog-builder-repl.lisp +++ b/tools/clog-builder-repl.lisp @@ -11,7 +11,7 @@ nil)) win)) -(defun on-repl (obj) +(defun on-repl (obj &key package) "Open a REPL" (let* ((app (connection-data-item obj "builder-app-data")) (*default-title-class* *builder-title-class*) @@ -23,6 +23,8 @@ :width 700 :height 480 :client-movement *client-side-movement*)) (repl (create-clog-builder-repl (window-content win)))) + (when package + (setf (text-value (package-div repl)) package)) (when *clog-repl-private-console* (let ((pcon (on-open-repl-console obj win))) (setf (window-param win) pcon) diff --git a/tools/clog-builder-shell.lisp b/tools/clog-builder-shell.lisp index 00d3a0e..eea0336 100644 --- a/tools/clog-builder-shell.lisp +++ b/tools/clog-builder-shell.lisp @@ -1,6 +1,6 @@ (in-package :clog-tools) -(defun on-shell (obj) +(defun on-shell (obj &key dir) "Open a shell" (let* ((*default-title-class* *builder-title-class*) (*default-border-class* *builder-border-class*) @@ -10,6 +10,8 @@ :top 40 :left 225 :width 600 :height 400 :client-movement *client-side-movement*))) + (when dir + (uiop:chdir (uiop:native-namestring dir))) (set-geometry (create-clog-builder-shell (window-content win)) :units "%" :width 100 :height 100)))