From 44c9497ed1ff5562eebc86981d35988ea3ed8af5 Mon Sep 17 00:00:00 2001 From: David Botton Date: Wed, 17 Apr 2024 21:01:09 -0400 Subject: [PATCH] alt-t adjust tab at point --- tools/clog-builder-ace.lisp | 32 +++++++++++++++++++++++++++- tools/clog-builder-eval.lisp | 1 - tools/clog-builder-files.lisp | 39 +++++++++++++++++++++++++++++------ 3 files changed, 64 insertions(+), 8 deletions(-) diff --git a/tools/clog-builder-ace.lisp b/tools/clog-builder-ace.lisp index d275951..84e17ab 100644 --- a/tools/clog-builder-ace.lisp +++ b/tools/clog-builder-ace.lisp @@ -81,6 +81,36 @@ ~A.trigger('clog-save-ace'); }, readOnly: true, +});" + (clog-ace::js-ace editor) + (jquery editor))) + ;; setup adjust tab key + (js-execute editor + (format nil + "~A.commands.addCommand({ + name: 'adjust-tabs', + bindKey: {win: 'Alt-t', mac: 'Command-t'}, + exec: function(editor) { + var row = editor.selection.getCursor().row; + var column = editor.selection.getCursor().column; + var c; + var sr=row; + var bp=0; + row--; + column=500; + while (row > 0) { + c=editor.session.getTextRange(new ace.Range(row, column-1, row, column)); + if (c==')') { bp++; } + if (c=='(') { bp--; } + if (bp < 0) { break; } + column--; + if (column < 0) { row--; column=500;} + } + c = editor.session.getTextRange(new ace.Range(row, 0, sr, 500)); + editor.session.selection.setSelectionRange(new ace.Range(sr, 0, sr, 500)); + ~A.trigger('clog-adjust-tabs',c); + }, + readOnly: true, });" (clog-ace::js-ace editor) (jquery editor))) @@ -154,7 +184,7 @@ (format nil "~A.commands.addCommand({ name: 'expand-region', - bindKey: {win: 'Ctrl-=', mac: 'Control-='}, + bindKey: {win: 'Alt-=', mac: 'Control-='}, exec: function(editor) { var currentRange = editor.selection.getAllRanges()[0]; var start = editor.session.doc.positionToIndex(currentRange.start); diff --git a/tools/clog-builder-eval.lisp b/tools/clog-builder-eval.lisp index 43fee86..95bd468 100644 --- a/tools/clog-builder-eval.lisp +++ b/tools/clog-builder-eval.lisp @@ -95,7 +95,6 @@ provide an interactive console.)")) (with-open-stream (in-stream (make-instance 'dialog-in-stream :clog-obj clog-obj :source out-stream)) (labels ((reset-ace () (when (typep console 'console-out-stream) - (setf (clog-ace:mode (ace console)) "ace/mode/lisp") (setf (ace console) nil))) (my-debugger (condition encapsulation) (if clog-obj diff --git a/tools/clog-builder-files.lisp b/tools/clog-builder-files.lisp index cdcbf7e..9390322 100644 --- a/tools/clog-builder-files.lisp +++ b/tools/clog-builder-files.lisp @@ -101,6 +101,7 @@ (m-load (create-gui-menu-item m-file :content "load")) (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-revert (create-gui-menu-item m-file :content "revert")) (m-emacs (unless (in-clog-popup-p obj) (create-gui-menu-item m-file :content "open in emacs"))) (m-ntab (unless (in-clog-popup-p obj) @@ -215,13 +216,14 @@ " - - - - + + + + +
cmd/ctrl-,Configure editor
F1Command Palette
cmd/alt-. Launch system browser
cmd/alt-[ Evaluate form
cmd/ctrl-s Save
ctl-=Expand region
cmd/alt-.Launch system browser
cmd/alt-[Evaluate form
cmd/ctrl-sSave
cmd/alt-tAdjust tabs at cursor
ctl/alt-=Expand region
opt/alt-mMacroexpand

Default Keybindings" - :width 400 :height 350 + :width 400 :height 400 :title "Help"))) (set-on-click btn-help #'on-help) (set-on-click m-helpk #'on-help)) @@ -267,7 +269,11 @@ (js-execute obj (format nil "~A.find('~A',{caseSensitive:false,regExp:true})" (clog-ace::js-ace ace) regex))) (set-on-click btn-load (lambda (obj) (load-file obj))) - (set-on-click m-load (lambda (obj) (load-file obj)))) + (set-on-click m-load (lambda (obj) (load-file obj))) + (set-on-click m-revert (lambda (obj) + (declare (ignore obj)) + (setf is-dirty nil) + (open-file-name file-name)))) (set-on-input ace (lambda (obj) (declare (ignore obj)) (setf is-dirty t))) @@ -451,6 +457,27 @@ (clog-ace::js-ace ace) (escape-string r))) (setf is-dirty t)))) + (set-on-event-with-data ace "clog-adjust-tabs" + (lambda (obj data) + (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 data) + (let ((*standard-output* s)) + (indentify:indentify n)))) + (loop + (multiple-value-bind (start end) + (ppcre:scan "(^.*)\\n" r) + (unless start + (return)) + (setf r (subseq r end)))) + (unless (or (eq r nil) + (equal r "")) + (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