2012-10-12 9 views
8

Jeśli mam już wystąpienie programu Matlab, czy można otworzyć plik w edytorze Matlab spoza aplikacji Matlab? Zastanawiam się, czy istnieje możliwość zrobienia czegoś takiego.Czy można otworzyć plik w uruchomionej instancji Matlab z wiersza poleceń?

Wprowadzenie instancją Matlab

$ ./matlab 

otworzyć plik do edycji przy użyciu już uruchomione wystąpienie Matlab:

$ matlab_open_file.sh theFile.m 

Wariant GUI jest przeciągnięcie pliku z folderu, a następnie upuszczając na ikonę Matlab (to faktycznie działa pod OS X)

Uwaga Wiem, że możesz uruchomić Matlab i mieć natychmiast wykonuje polecenie (możesz użyć tego do uruchomienia edytora przy uruchomieniu). Nie tego chcę.

+0

W systemie Windows Matlab używany do obsługi COM/DDE. Zobacz [tę starą dokumentację] (http://www.weizmann.ac.il/matlab/techdoc/matlab_external/ch07cl23.html). [Post na "nieudokumentowanym matlab"] (http://undocumentedmatlab.com/blog/matlab-dde-support/) sugeruje, że nadal działa. – nibot

+2

@nibot dzięki, ale naprawdę chciałbym użyć rozwiązania wieloplatformowego. – slayton

Odpowiedz

1

Możesz wpisać ścieżkę + nazwę pliku do linii poleceń, a jeśli otwarta jest sesja Matlab, otworzy ten plik w bieżącej sesji Matlaba.

Pamiętaj, że działa to tylko wtedy, gdy upewnisz się, że program matlab jest domyślnym programem do otwierania tego rodzaju plików. (Przetestowano z plikiem .m)

+0

Na jakiej platformie to testujesz? – slayton

+0

Serwer Windows 2003 –

+1

Nie mogłem replikować tego zachowania w systemie Linux. – slayton

-2

Upewnij się, że dodałeś folder do ścieżki.

Następnie przejdziesz do folderu, którego potrzebujesz.

i po prostu wpisać Matlab terminalu

your_program_name 

Następnie program będzie działał.

+0

Nie o to pytano. Plik należy otworzyć z _outside_ matlab. – Scz

2

Napisałem obejście problemu dla systemu Linux (funkcjonalność w Mint 17.1 z R2014a i R2014b), które następnie powiązałem z rozszerzeniami plików .fig i .m. Zauważ, że wymaga to zainstalowania xdotool, a naciśnięcia klawiszy są ustawione dla skrótów Windows (domyślnie MATLAB jest dostarczany ze skrótami Emacsa na Linuksie, ale praktycznie każdy zmienia je w moim doświadczeniu). Ma to ograniczenie, że dowolny tekst znajdujący się obecnie w wierszu poleceń zostanie skasowany, a istnieje mały przedział czasowy, w którym MATLAB nie może stracić ostrości. Ale w przypadku braku bardziej niezawodnego rozwiązania, działa to wystarczająco dobrze dla mnie.

#!/bin/bash 

# Hacky way to open a MATLAB figure in an existing instance if there is 
# one, and start a new instance if not. 

# What are we trying to open? 
FILENAME="[email protected]"; 

# Try to identify the main MATLAB window. 
MLWINDOW=$(comm -12\ 
       <(xdotool search --name MATLAB\ R | sort)\ 
       <(xdotool search --class "com-mathworks-util-PostVMInit" | sort)) 
if [ -z "$MLWINDOW" ]; then 
    # MATLAB isn't open; we have to open it to proceed. 
    matlab -desktop -r "open('$FILENAME')" 
else 
    # We use the first existing instance since MATLAB is open 
    set -- $MLWINDOW 
    # Jump to the command line and erase it 
    xdotool windowactivate --sync $1 key --delay 0 "control+0" Escape 
    # Put the filename on the command line 
    xdotool type --delay 0 "$FILENAME" 
    # Select the filename and press ctrl-D to open, then clean up command line 
    xdotool key --delay 0 "shift+Home" "control+d" Escape 
fi 
+0

Mam za mało przedstawicieli, aby komentować bezpośrednio [podejście Sczka] (http://stackoverflow.com/a/31045478/4825499), więc zaznaczę tutaj, że ścieżka bezwzględna jest już zawarta w '$ FILENAME', gdy wywoływana przez funkcję associate-with. – Aoeuid

0

I zmodyfikowane Aoeuid's approach ponieważ

  • to nie działa na mnie, jak miałem przeniesiony Ctrl+0 który skacze do linii poleceń (i nie widzę, gdzie mogę ustawić na inną wartość) → Zamieniłem go na okno "Otwórz plik" (Ctrl+O).
  • Możliwe, że chcę otworzyć skrypty, które nie znajdują się na aktualnej ścieżce matlab → Używam $PWD/$filename zamiast $filename. Możesz zmodyfikować jego wersję, używając open($PWD/$FILENAME) i KP_Enter zamiast $FILENAME i /control+d.

Jest to wynikiem:

#!/bin/bash 

filename="$1" 

# Try to identify the main MATLAB window. 
MLWINDOW=$(comm -12\ 
       <(xdotool search --name MATLAB\ R | sort)\ 
       <(xdotool search --class "com-mathworks-util-PostVMInit" | sort)) 

if [ -z "$MLWINDOW" ]; then 
    # MATLAB isn't open; we have to open it to proceed. 
    matlab -desktop -r "open('$PWD/$filename')" 
else 
    ## Activate window: 
    xdotool windowactivate --sync $MLWINDOW && \ 
    ## Press Ctrl+O to open the "open" dialog: 
    xdotool key --delay 0 "control+o" && \ 
    ## Wait for the file dialog to open: 
    sleep 0.5 && \ 
    ## Type the file name including the current directory 
    xdotool type --delay 0 "$PWD/$filename" && \ 
    ## Press enter: 
    xdotool key "KP_Enter" 
fi 

Jednak użycie naciśnięć przycisków dla zautomatyzowanego procesu może powodować niepożądane efekty.

Powiązane problemy