diff options
Diffstat (limited to 'kate/kjswrapper/samples/katekjsselect.js')
-rw-r--r-- | kate/kjswrapper/samples/katekjsselect.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/kate/kjswrapper/samples/katekjsselect.js b/kate/kjswrapper/samples/katekjsselect.js new file mode 100644 index 0000000..d6a33fb --- /dev/null +++ b/kate/kjswrapper/samples/katekjsselect.js @@ -0,0 +1,92 @@ +function newWindowCallBack(mainwindow) { + var ac=mainwindow.actionCollection(); + action = new KAction( ac, 'kjsselect_select_action' ); + action.text = 'Select enclosing block'; + //action.icon = 'konsole'; + + + mainwindow.selectIt = function() + { + endChars=Array(); + endChars['\"']="\""; + endChars['(']=")"; + endChars['[']="]"; + endChars['\'']="'"; + endChars['{']="}"; + endChar=""; + av=this.viewManager().activeView(); + d=KATE.DocumentManager.activeDocument(); + + lineCnt=d.numLines(); + x=av.cursorColumn(); + y=av.cursorLine(); + line=d.textLine(y); + sy=y; + sx=x-1; + while (true) { + if (sx<0) { + sy=sy-1; + if (sy<0) { + d.selectAll(); + return; + } + line=d.textLine(sy); + while (line.length==0) { + sy=sy-1; + if (sy<0) { + d.selectAll(); + return; + } + line=d.textLine(sy); + } + sx=line.length-1; + + } + if ( + (line[sx]=="\"") || + (line[sx]=="'") || + (line[sx]=="(") || + (line[sx]=="[") || + (line[sx]=="{") + ) { + endChar=endChars[line[sx]]; + break; + }else sx--; + } + + + alert("Searching end"); + ex=x; + ey=y; + line=d.textLine(y); + while (true) { + if (ex>=(line.length-1)) { + ey=ey+1; + if (ey>=lineCnt) { + d.selectAll(); + return; + } + line=d.textLine(ey); + while (line.length==0) { + ey=ey+1; + if (ey>=lineCnt) { + d.selectAll(); + return; + } + line=d.textLine(ey); + } + ex=0; + } + if (line[ex]==endChar) + break; else ex++; + } + d.setSelection(sy,sx,ey,ex); + + } + + action.connect( action, 'activated()', mainwindow, 'selectIt' ); + +} + +setWindowConfiguration(null,newWindowCallBack,null); + |