2012-09-04 12 views
6

Me gustaría hacer lo anterior mediante programación.

Miré en How to get cursor position in an eclipse TextEditor y Eclipse-plugin how to get current text editor corsor position así que sé cómo obtener el desplazamiento del cursor desde el actual editor abierto. Sin embargo, estoy tratando de establecer el desplazamiento del cursor en un nuevo editor que se abre programáticamente por mí.
Cómo abrir un nuevo editor de eclipse con una posición de desplazamiento de cursor específica

La forma en que actualmente estoy abierto mi nuevo editor es el siguiente:

IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
    IWorkbenchPage page = win.getActivePage(); 
    if (page != null) { 
     IEditorPart editor = page.getActiveEditor(); 
     if (editor != null) { 
      IEditorInput input = editor.getEditorInput(); 
      if (input instanceof IFileEditorInput) { 
       String fileLocation = ((IFileEditorInput) input).getFile().getLocation().toOSString(); 
       String newFileLocartion = generateNewFileLocation(fileLocation); 
       File file = new File(newFileLocartion); 
       IFileStore fileStore = EFS.getLocalFileSystem().getStore(file.toURI()); 
       try { 
        IDE.openEditorOnFileStore(page, fileStore); 
       } catch (PartInitException e) { 
        // TODO error handling 
       } 
      } 
     } 
    } 

¿Hay una manera de abrir establecer el nuevo editor para abrir en un desplazamiento específico (suponiendo que ya conoce el desplazamiento en avanzar)?

Gracias!

Respuesta

3

Utiliza este fragmento para navegar a la línea especificada en un archivo.

public static void navigateToLine(IFile file, Integer line) 
{ 
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put(IMarker.LINE_NUMBER, line); 
    IMarker marker = null; 
    try { 
     marker = file.createMarker(IMarker.TEXT); 
     marker.setAttributes(map); 
     try { 
      IDE.openEditor(getActivePage(), marker); 
     } catch (PartInitException e) { 
      //complain 
     } 
    } catch (CoreException e1) { 
     //complain 
    } finally { 
     try { 
      if (marker != null) 
       marker.delete(); 
     } catch (CoreException e) { 
      //whatever 
     } 
    } 
} 

Probablemente no sea exactamente lo que necesita, pero podría serle útil. (// queja reemplaza el código de manejo de error que era específico del producto donde se usa)

2

Utilicé lo siguiente, que es más simple que la respuesta anterior. Asumiendo que tiene int offset, IWorkbenchPage page y IFile file (y parece que todos ellos existen en la pregunta de la OP):

ITextEditor editor = (ITextEditor) IDE.openEditor(page, file); 
editor.selectAndReveal(offset, 0); 

he encontrado la manera de hacer esto desde this answer. (pero estableciendo el segundo parámetro de selectAndReveal a cero, no hay texto resaltado)

Cuestiones relacionadas