2010-08-20 5 views
5

MATLAB verfügt über mehrere Auswahl-sensitive Funktionen. Wenn Sie beispielsweise einen Text auswählen und F9 drücken, wird Ihre Auswahl ausgewertet. (Es sei denn, Sie haben die Tastatureinstellungen neu zugeordnet.)Wie rufen Sie den ausgewählten Text in MATLAB ab?

Ich möchte diese Funktionalität für eine Verknüpfung replizieren können. So möchte ich zum Beispiel auf eine Verknüpfung klicken, die die aktuelle Auswahl anzeigt. Mein Shortcut Callback wäre disp(GetSelection()).

Aber was geht in GetSelection?

Antwort

5

Dank @Yair Altman 's undocumented Matlab konnte ich die Java - Befehle herausfinden, um das zu funktionieren.

Diesen in einer Verknüpfung (oder eine Funktion, die durch die Verknüpfung aufgerufen wird):

%# find the text area in the command window 
jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance; 
try 
    cmdWin = jDesktop.getClient('Command Window'); 
    jTextArea = cmdWin.getComponent(0).getViewport.getComponent(0); 
catch 
    commandwindow; 
    jTextArea = jDesktop.getMainFrame.getFocusOwner; 
end 

%# read the current selection 
jTxt = jTextArea.getSelectedText; 

%# turn into Matlab text 
currentSelection = jTxt.toCharArray'; %' 

%# display 
disp(currentSelection) 
+0

Das ist sehr cool. Vielen Dank. –

0

Ich glaube nicht, dass es eine Möglichkeit gibt, die Auswahl aus dem Matlab-Texteditor zu kontrollieren oder zu lesen, es gibt keine Erwähnung einer solchen API auf der Mathworks-Website (zumindest von einer Schnellsuche bei Google). Wenn Sie möchten, dass diese Funktion die erweiterte Textbearbeitung ermöglicht, sollten Sie in Erwägung ziehen, den .m-Dateieditor auf einen externen Editor zu setzen (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_env/brxijcd.html). Es kann möglich sein, die Auswahl von einem UIcontrol in einer benutzerdefinierten GUI zu lesen, aber ich denke nicht, dass dies das ist, was Sie wollen.

0

Falls Sie so etwas wie diese, aber mit Text verwenden mögen, markierten im Editor anstatt im Befehlsfenster .

Ich benutze den folgenden Code, um in der Lage zu sein, schnell die nnz() einer Variablen zu überprüfen, obwohl Sie den Code in der verschachtelten try-catch auf was auch immer Sie brauchen ändern können.

Schließlich habe ich eine Verknüpfung mit diesem Code in der oberen rechten Ecke von Matlab erstellt, auf die ich durch Drücken von Alt-1 schnell zugreifen kann.

try 
    activeEditor = matlab.desktop.editor.getActive; 
    currentSelection = activeEditor.SelectedText; 

    try 
     eval(sprintf('val = nnz(%s);',currentSelection)) 
     disp(sprintf('>> nnz(%s) = %s',currentSelection,num2str(val))) 
    catch ex 
     disp(ex.message) 
    end 
catch ex 
    disp(ex.message) 
end