two new matlab keyboard keyboard-shortcuts enter

new - plot matlab



Matlab control+tecla enter en la figura (1)

Quiero capturar cuando el usuario mantiene presionada la tecla de control y presiona la tecla Intro en una ventana de figura. Nota: Estas son las teclas predeterminadas para "Evaluar la sección actual" en el editor.

Vea el código de ejemplo a continuación:

function test f = figure; f.KeyPressFcn = @myKeyPressFcn; end function myKeyPressFcn ( hFig, event ) cm = hFig.CurrentModifier(); if ~isempty ( cm ) fprintf ( ''CurrentKey: %s:%s/n'', cm{1}, hFig.CurrentKey ); else fprintf ( ''CurrentKey: %s/n'', hFig.CurrentKey ); end end

Para reproducir, guarde lo anterior en un archivo activo en el editor y ejecute la función: el editor debe estar abierto (¡esto es importante!).

Con la figura activa, presione cualquier tecla -> la tecla seleccionada se escribe en la ventana del terminal. Sin embargo, si mantienes presionado Control y presionas la tecla enter (return), esto no se captura, sino que Matlab intenta "Evaluar la sección actual" (o celda como se solía llamar) en el editor (no importa que la figura tenga el atención). Esto por supuesto arroja como error ...

Me he puesto en contacto con el soporte de Matlab y este es el "comportamiento esperado". Puedo (casi) ver por qué podría ser una buena idea para las demos, pero para las aplicaciones profesionales que se ejecutan en Matlab, personalmente creo que esta "característica" es un error.

Notas

  1. Cuando el editor está cerrado, el control + enter se captura en la figura
  2. En las aplicaciones implementadas, se captura el control + enter.
  3. Si cambio manualmente el acceso directo Evaluar sección actual, se captura el control + enter.

He intentado varias cosas para resolver esto pero ninguno ha funcionado, por ejemplo, ocultar el editor o establecer el estado de habilitación del editor en falso (ninguna de estas soluciones son aceptables). Estaba intentando ver qué podría hacer para trabajar en una pequeña prueba caso...):

function test desktop = com.mathworks.mde.desk.MLDesktop.getInstance; jEditor = desktop.getGroupContainer(''Editor'').getTopLevelAncestor; jEditor.setVisible(false); jEditor.setEnable(false); f = figure f.KeyPressFcn = @myKeyPressFcn; uiwait(f); jEditor.setVisible(true); jEditor.setEnable(true); end

La única forma en que puedo hacer que funcione es cerrar todos los archivos del editor al iniciar la GUI y luego abrirlos nuevamente cuando se cierra la GUI (esta no es una solución aceptable ... ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡por razones bastante obvias !!)

Pensé en tratar de modificar temporalmente la tecla de método abreviado (Preferencias-Teclado-Accesos directos) de la "Evaluar sección actual" -> pero no encontré una forma de hacerlo desde la línea de comandos, y luego volver a configurarla cuando haya terminado . Si esto es rápido, puede hacerlo cuando el usuario presiona y suelta la tecla de control.

Entonces, ¿qué estoy preguntando?

Si es posible, necesito una solución que funcione para cualquier persona en cualquier lugar, como si pudiera hacer que esto funcionara, se incluirá en una nueva función complementaria en mi Matlab GUI Toolbox . - que es utilizado por personas de todo el mundo.

  1. ¿Sabes cómo modificar los atajos de teclado de la línea de comandos? De ser así, ¿cómo?
  2. ¿Cualquier otra sugerencia?
  3. Mi otra idea es cambiar mi atajo a una combinación de teclas diferente, pero ¡qué divertido es eso! :) (Todavía tendré el problema si algún usuario en algún lugar ha alterado la ejecución de la celda actual a mi nueva combinación ...)

PD: ¡Gracias por leer esto! :)


¿Por qué no vas a la página de home> Preferences > keyboard > Shortcut y la cambias allí?

solo tiene que presionar Ctrl + Enter en el recuadro negro en la parte superior de la página para buscar el comando relacionado, que es aquí Evaluar la sección actual y cambiarla como prefiera.

Tenga en cuenta que solo necesitará dividir sus ventanas (desacoplarlas). Luego, cuando haces clic en Ctrl + Enter , hará lo que quieras.

Espero que encuentres útil esta respuesta.