[Pydev-cvs] org.python.pydev/src_dltk_console/org/python/pydev/dltk/console/ui/internal ScriptCons
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2008-03-28 02:05:06
|
Update of /cvsroot/pydev/org.python.pydev/src_dltk_console/org/python/pydev/dltk/console/ui/internal In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9156/src_dltk_console/org/python/pydev/dltk/console/ui/internal Modified Files: ScriptConsoleViewer.java Log Message: recursive history (still not done) Index: ScriptConsoleViewer.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_dltk_console/org/python/pydev/dltk/console/ui/internal/ScriptConsoleViewer.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ScriptConsoleViewer.java 27 Mar 2008 13:05:16 -0000 1.11 --- ScriptConsoleViewer.java 28 Mar 2008 02:05:10 -0000 1.12 *************** *** 14,18 **** --- 14,20 ---- import org.eclipse.jface.text.BadLocationException; + import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocument; + import org.eclipse.jface.text.IDocumentListener; import org.eclipse.jface.text.contentassist.ContentAssistEvent; import org.eclipse.jface.text.contentassist.ICompletionListener; *************** *** 150,153 **** --- 152,161 ---- } + + /** + * Marks if a history request just started. + */ + volatile int inHistoryRequests = 0; + volatile boolean changedAfterLastHistoryRequest=false; /** *************** *** 176,179 **** --- 184,190 ---- private HandleLineStartAction handleLineStartAction; + /** + * Contains the caret offset that has been set from the console API. + */ private volatile int internalCaretSet = -1; *************** *** 207,210 **** --- 218,222 ---- public void modifyText(ExtendedModifyEvent event) { + if(internalCaretSet != -1){ if(internalCaretSet != getCaretOffset()){ *************** *** 234,238 **** */ public void invokeAction(int action) { - //some actions have a different scope (not in selected range / out of selected range) switch (action) { --- 246,249 ---- *************** *** 250,265 **** if (isSelectedRangeEditable()) { try { switch (action) { case ST.LINE_UP: ! history.prev(); ! listener.setCommandLine(history.get()); ! setCaretOffset(getDocument().getLength()); ! return; case ST.LINE_DOWN: ! history.next(); ! listener.setCommandLine(history.get()); ! setCaretOffset(getDocument().getLength()); ! return; case ST.DELETE_PREVIOUS: --- 261,273 ---- if (isSelectedRangeEditable()) { try { + int historyChange = 0; switch (action) { case ST.LINE_UP: ! historyChange = 1; ! break; case ST.LINE_DOWN: ! historyChange = 2; ! break; case ST.DELETE_PREVIOUS: *************** *** 271,274 **** --- 279,306 ---- return; } + + if(historyChange != 0){ + if(changedAfterLastHistoryRequest){ + //only set a new match if it didn't change since the last time we did an UP/DOWN + System.out.println("changed: setting new match:"+getCommandLine()); + history.setMatchStart(getCommandLine()); + } + if(historyChange == 1){ + history.prev(); + }else{ + history.next(); + } + + inHistoryRequests += 1; + try { + listener.setCommandLine(history.get()); + setCaretOffset(getDocument().getLength()); + } finally { + inHistoryRequests -= 1; + } + changedAfterLastHistoryRequest = false; + return; + } + } catch (BadLocationException e) { *************** *** 468,471 **** --- 500,515 ---- final StyledText styledText = getTextWidget(); + + getDocument().addDocumentListener(new IDocumentListener(){ + + public void documentAboutToBeChanged(DocumentEvent event) { + } + + public void documentChanged(DocumentEvent event) { + if(inHistoryRequests == 0){ + changedAfterLastHistoryRequest = true; + } + }} + ); styledText.addFocusListener(new FocusListener() { |