2012-10-12 39 views
8

Si ya tengo una instancia de ejecución de Matlab, ¿es posible indicarle que abra un archivo en el editor de Matlab desde fuera de la aplicación Matlab? Me pregunto si es posible hacer algo como esto.¿Es posible abrir un archivo en una instancia en ejecución de Matlab desde la línea de comandos?

lanzamiento de una instancia de Matlab

$ ./matlab 

Abrir un archivo para su edición utilizando una instancia en ejecución de Matlab:

$ matlab_open_file.sh theFile.m 

La variante de interfaz gráfica de usuario está arrastrando un archivo desde una carpeta y luego dejarlo caer en el icono de Matlab (esto realmente funciona bajo OS X)

Nota Sé que puede iniciar Matlab y tener inmediatamente ejecuta un comando (puede usar esto para iniciar el editor en el lanzamiento). Esto no es lo que quiero.

+0

En Windows, Matlab solía ser compatible con COM/DDE. Ver [esta documentación antigua] (http://www.weizmann.ac.il/matlab/techdoc/matlab_external/ch07cl23.html). Una [publicación en "matlab no documentado"] (http://undocumentedmatlab.com/blog/matlab-dde-support/) sugiere que todavía funciona. – nibot

+2

@nibot gracias, pero me gustaría utilizar una solución multiplataforma. – slayton

Respuesta

1

Puede escribir la ruta + nombre de archivo en la línea de comando y si una sesión de matlab está abierta, se abrirá este archivo en la sesión de matlab actual.

Tenga en cuenta que esto solo funciona si se asegura de que matlab sea el programa predeterminado para abrir este tipo de archivo. (Probado con el archivo .m)

+0

¿En qué plataforma está probando esto? – slayton

+0

Windows server 2003 –

+1

No he podido replicar este comportamiento en Linux. – slayton

-2

Asegúrese de haber agregado su carpeta a la ruta.

Luego vaya a la carpeta que necesita.

y justo el tipo de terminal de Matlab

your_program_name 

A continuación, el programa se ejecutará.

+0

Esto no es lo que se solicitó. El archivo debe abrirse desde _outside_ matlab. – Scz

2

Realicé una secuencia de comandos para Linux (funcional en Mint 17.1 con R2014a y R2014b), que luego asocié con las extensiones de archivo .fig y .m. Tenga en cuenta que esto requiere xdotool para ser instalado, y las teclas se establecen para atajos de Windows (de forma predeterminada, MATLAB se envía con atajos de Emacs en Linux, pero prácticamente todo el mundo los cambia en mi experiencia). Esto tiene la limitación de que cualquier texto que esté actualmente en la línea de comando se borra, y hay una pequeña ventana de tiempo donde MATLAB no debe perder el foco. Pero a falta de una solución más sólida, funciona lo suficientemente bien para mí.

#!/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

No tengo suficientes representantes para comentar directamente sobre [el enfoque de Scz] (http://stackoverflow.com/a/31045478/4825499), así que señalaré aquí que la ruta absoluta ya está incluida en '$ FILENAME' cuando llamado a través de la función de asociado-con. – Aoeuid

0

he modificado Aoeuid's approach porque

  • no funcionó para mí, como lo había reasignado Ctrl+0 el que salta a la línea de comandos (y no veo donde podría establecer este valor a otro) → Lo reemplacé con el cuadro de diálogo "abrir archivo" (Ctrl+O).
  • Es posible que desee abrir secuencias de comandos que no están en la ruta actual de Matlab → Uso $PWD/$filename en lugar de $filename. Puede modificar su versión utilizando open($PWD/$FILENAME) y KP_Enter en lugar de $FILENAME y shift+Home/.

Este es el resultado:

#!/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 

Sin embargo, utilizando pulsaciones de tecla para un proceso automatizado podría causar que los resultados no deseados.

Cuestiones relacionadas