/jEdit/tags/jedit-4-2-pre14/macros/Editing/Greedy_Left.bsh
Unknown | 83 lines | 76 code | 7 blank | 0 comment | 0 complexity | 990b66808a5026e546c67203405df96b MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
- /*
- * Greedy_Left.bsh - If a buffer is using soft tabs,
- * this macro will move the caret tabSize spaces to the left,
- * if all the characters between the caret and the previous
- * tab stop are all spaces. In all other cases, the caret
- * is moved a single character to the left.
- *
- * Copyright (C) 2004 Ollie Rutherfurd <oliver@jedit.org>
- *
- * $Id: Greedy_Left.bsh 5032 2004-05-06 19:53:37Z orutherfurd $
- */
- /**
- * @param onlyFullTabs if true, the caret will only be moved
- * multiple spaces it would constitute
- * a 'complete' tab.
- */
- void greedyLeft(View view, boolean onlyFullTabs)
- {
- JEditTextArea textArea = view.getTextArea();
- Buffer buffer = textArea.getBuffer();
- int caret = textArea.getCaretPosition();
- int caretLine = textArea.getCaretLine();
- int lineStart = textArea.getLineStartOffset(caretLine);
- if(textArea.getCaretPosition() == 0)
- return;
- if(buffer.getBooleanProperty("noTabs") == true)
- {
- // if anything is selected, use standard
- if(textArea.getSelection().length != 0)
- {
- textArea.setCaretPosition(caret-1);
- }
- // if at the start of the line, use standard
- else if(caret == lineStart)
- {
- textArea.setCaretPosition(caret-1);
- }
- else
- {
- int col = caret - lineStart;
- int tabSize = buffer.getIntegerProperty("tabSize",8);
- // unlikely, but just in case
- if(tabSize <= 0)
- {
- textArea.setCaretPosition(caret-1);
- }
- else
- {
- int toTabStop = ((col-1) % tabSize) + 1;
- int count = 1;
- for(int i=1; i < toTabStop; i++)
- {
- // only backspace over spaces
- if(!" ".equals(buffer.getText(caret-(i+1),1)))
- break;
- count += 1;
- }
- // if onlyFullTabs must be only spaces to
- // the tabStop and must have tabSize number
- // of spaces to remove them all.
- if(onlyFullTabs == false || count == tabSize){
- textArea.setCaretPosition(caret-count);
- }
- else{
- textArea.setCaretPosition(caret-1);
- }
- }
- }
- }
- else
- textArea.setCaretPosition(caret-1);
- }
- if(buffer.isReadOnly())
- getToolkit().beep();
- else
- greedyLeft(view,true);