alt-t adjust tab at point

This commit is contained in:
David Botton 2024-04-17 21:01:09 -04:00
parent efc3b51ef0
commit 44c9497ed1
3 changed files with 64 additions and 8 deletions

View file

@ -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);

View file

@ -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

View file

@ -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 @@
"<table>
<tr><td>cmd/ctrl-,</td><td>Configure editor</td></tr>
<tr><td>F1</td><td>Command Palette</td></tr>
<tr><td>cmd/alt-.</td><td> Launch system browser</td></tr>
<tr><td>cmd/alt-[</td><td> Evaluate form</td></tr>
<tr><td>cmd/ctrl-s</td><td> Save</td></tr>
<tr><td>ctl-=</td><td>Expand region</td></tr>
<tr><td>cmd/alt-.</td><td>Launch system browser</td></tr>
<tr><td>cmd/alt-[</td><td>Evaluate form</td></tr>
<tr><td>cmd/ctrl-s</td><td>Save</td></tr>
<tr><td>cmd/alt-t</td><td>Adjust tabs at cursor</td></tr>
<tr><td>ctl/alt-=</td><td>Expand region</td></tr>
<tr><td>opt/alt-m</td><td>Macroexpand</td></tr>
</table><p><a target='_blank' href='https://github.com/ajaxorg/ace/wiki/Default-Keyboard-Shortcuts'>Default Keybindings</a>"
: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