public void follow(File sourceFile, Line sourceLine) { Line line = findLineForOccurrence(sourceFile, sourceLine); if (line == null) return; for (EditorIterator it = new EditorIterator(); it.hasNext(); ) { Editor ed = it.next(); if (ed.getBuffer() == this) { ed.moveDotTo(line, 0); ed.updateDisplay(); } } }
// Move dot to line (in all editors) and call findOccurrenceAtDot(). private void findOccurrence(Editor editor, Line line) { if (line instanceof OccurrenceLine) { for (EditorIterator it = new EditorIterator(); it.hasNext(); ) { Editor ed = it.next(); if (ed.getBuffer() == this) { ed.moveDotTo(line, 0); ed.updateDisplay(); } } findOccurrenceAtDot(editor, false); } }
public void findOccurrenceAtDot(Editor editor, boolean killList) { Position pos = editor.getDotCopy(); if (pos == null) return; Line sourceLine = null; int sourceLineNumber = 0; Buffer buf = null; String canonicalPath = null; setLastDotPos(pos); final Line line = pos.getLine(); if ((line instanceof OccurrenceLine)) { sourceLine = ((OccurrenceLine) line).getSourceLine(); Line ln = line; if (!ln.getText().startsWith("File: ")) sourceLineNumber = Utilities.parseInt(ln.getText()) - 1; while (ln != null) { if (ln.getText().startsWith("File: ")) { canonicalPath = ln.getText().substring(6); break; } ln = ln.previous(); } } else if (line instanceof FileLine) canonicalPath = ((FileLine) line).getCanonicalPath(); if (buf == null && canonicalPath != null) buf = Editor.getBuffer(File.getInstance(canonicalPath)); if (buf != null) { if (!buf.isLoaded()) { if (!buf.initialized()) buf.initialize(); buf.load(); if (!buf.isLoaded()) { editor.status("Unable to load buffer"); return; } } if (line instanceof FileLine) { // Mark file visited. ((FileLine) line).markVisited(); // Advance dot to next line. Position dot = editor.getDot(); if (dot.equals(pos) && dot.getNextLine() != null) { dot.moveTo(dot.getNextLine(), 0); editor.moveCaretToDotCol(); } } Line target; if (sourceLine != null) { if (buf.contains(sourceLine)) target = sourceLine; else target = buf.getLine(sourceLine.lineNumber()); } else target = buf.getLine(sourceLineNumber); gotoSource(editor, buf, target, killList); } }