java - ओपन - बरवाला एग रेट टुडे



IOConsole की कैरेट कैसे सेट करें (1)

कैरेट स्थिति तक पहुंच प्राप्त करने के लिए, आपको कंसोल व्यूअर को लागू करना होगा।

यह मेरे कस्टम कंसोल के लिए सेटअप है

public class MyConsole extends IOConsole
{
   ....
        @Override
    public IPageBookViewPage createPage(IConsoleView view) {
        return new MyConsolePage(this, view);
    }
}

public class MyConsolePage extends TextConsolePage
{
   ....
       @Override
    protected TextConsoleViewer createViewer(Composite parent) {
        return new MyConsoleViewer(parent, (MyConsole) this.getConsole());
    }
}

public class MyConsoleViewer extends TextConsoleViewer
{
    //This class gives you access to setting the caret position
    //by getting the styled text widget and then using setCaretOffset
}

स्टाइल पाठ विजेट प्राप्त करने के कई तरीके हैं, जिसके आधार पर आप ओवरराइड कर रहे हैं। मैंने अपना स्वयं का कन्सोल इतिहास वर्ग भी बनाया है जो कि कैरेट ऑफसेट का ट्रैक रखता था क्योंकि मुझे पहले दर्ज किए गए आदेशों के माध्यम से नेविगेट करने के लिए ऊपर और नीचे तीर कुंजियों का उपयोग करने की अतिरिक्त कार्यक्षमता की आवश्यकता थी I

MyConsoleViewer को कार्यान्वित करने का सबसे अच्छा तरीका ईक्लिप्स के विशाल स्रोत कोड का उपयोग करना है जो एक आदर्श उदाहरण सेट करता है। मैंने व्यावहारिक रूप से इस सभी वर्ग org.eclipse.ui.internal.console.IOConsoleViewer का पुन: उपयोग किया। यह कैरेट की स्थापना के उदाहरण भी दिखाता है

आशा है कि आपका सवाल कुछ समय पहले था, यह अभी भी मदद करता है।

मैं एक ग्रहण-प्लगइन लिख रहा हूं जो एक नया कंसोल बना रहा है। कृपया मेरा स्रोत कोड देखें:

CliConsoleFactory.java

import java.io.IOException;

import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsoleFactory;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.console.IOConsoleOutputStream;

public class CliConsoleFactory implements IConsoleFactory {

    private static final String ENTER_KEY = "\r\n";
    private static final String CLI_PROMPT = "CLI> ";
    private IConsoleView m_consoleView = null;

    @Override
    public void openConsole() {

        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        try {
            m_consoleView = (IConsoleView) page.showView(IConsoleConstants.ID_CONSOLE_VIEW);
        } catch (PartInitException e1) {
            e1.printStackTrace();
        }
        if (m_consoleView == null) {
            return;
        }


        final MyIOConsole myConsole = new MyIOConsole("CLI", null);

        final IDocument document = myConsole.getDocument();
        document.addDocumentListener(new IDocumentListener() {

            @Override
            public void documentChanged(DocumentEvent event) {
                if (ENTER_KEY.equals(event.getText())) {
                    // Print the Prompt
                    writeToConsole(myConsole, CLI_PROMPT);
                }
            }

            @Override
            public void documentAboutToBeChanged(DocumentEvent event) {
            }
        });

        ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { myConsole });
        m_consoleView.display(myConsole);
        writeToConsole(myConsole, CLI_PROMPT);
    }

    private void writeToConsole(final MyIOConsole myConsole, String msg) {
        IOConsoleOutputStream stream = myConsole.newOutputStream();
        stream.setActivateOnWrite(true);
        try {
            stream.write(msg);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

MyIOConsole.java

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.console.IOConsole;

public class MyIOConsole extends IOConsole {

    public MyIOConsole(String name, ImageDescriptor imageDescriptor) {
        super(name, imageDescriptor);
    }

}

यह महान काम करता है जब मैं एक नई लाइन में प्रवेश करता हूं, तो प्रॉम्प्ट "सीएलआई>" होता है, लेकिन कैरेट की स्थिति ठीक नहीं होती, यह पिछली स्थिति के बजाय लाइन के पहले स्थान पर है। मैं आखिरी स्थिति में कैरेट ले जाना चाहता हूं। कौन जानता है मेरी मदद करो। !!!





rcp