extensions - IPython 5.0 y enlaces de teclas en la consola
get crx (3)
La modificación de los métodos abreviados de teclado en la configuración cuando se utiliza prompt_toolkit no es posible (todavía); aunque es bastante fácil si instala IPython desde la fuente. Si observa el archivo IPython/terminal/shortcuts.py
, verá que contiene varias lógicas; en particular encontrarás:
# Ctrl+J == Enter, seemingly
registry.add_binding(Keys.ControlJ,
filter=(HasFocus(DEFAULT_BUFFER)
& ~HasSelection()
& insert_mode
))(newline_or_execute_outer(shell))
Este enlace CtrlJ (entrar) a la función newline_or_execute_outer
que es responsable de agregar nuevas líneas; Se define más adelante en el archivo. En particular, si presiona Intro dos veces al final de un bloque de código, debería ejecutar el bloque sin la necesidad de utilizar ningún otro método abreviado.
Pele la lógica que agrega nuevas líneas:
def execute_outer(shell):
def execute(event):
"""When the user presses return, insert a newline or execute the code."""
b = event.current_buffer
# some logic to also dismiss the completer
b.accept_action.validate_and_handle(event.cli, b)
return execute
Ligarlo alrededor de la línea 20-algo
registry.add_binding(Keys.ControlE,
filter=(HasFocus(DEFAULT_BUFFER)
& ~HasSelection()
& insert_mode
))(execute_outer(shell))
Y disfrutar. Si no está satisfecho con la documentación, le damos la bienvenida a la ayuda; Por ejemplo, tomando la esencia de las respuestas y contribuyéndolas de nuevo. Es un poco doloroso leer comentarios duros cuando decimos en las notas de la versión:
New terminal interface
The overhaul of the terminal interface will probably cause a range of minor
issues for existing users. This is inevitable for such a significant
change, and we’ve done our best to minimise these issues. Some changes that
we’re aware of, with suggestions on how to handle them:
IPython no longer uses readline configuration (~/.inputrc). We hope that
the functionality you want (e.g. vi input mode) will be available by
configuring IPython directly (see Terminal IPython options). If something’s
missing, please file an issue.
...
También se agradece la ayuda para mejorar el IPython para que tenga un enlace de teclas configurable con el nombre de las acciones, por lo que entonces podrá responder a su propia pregunta.
La nueva versión de IPython ya no depende de readline
sino que utiliza el prompt-toolkit
biblioteca Python, que resuelve los problemas de mantenimiento en los sistemas de Apple y Windows.
Una nueva característica es la capacidad de editar un bloque de código multilínea, usando las teclas del cursor para moverse libremente en el bloque de código. Con este poder, viene, al menos para mí, un problema: porque un comando de retención inserta una nueva línea en su código, para pasar todo el bloque al intérprete debe usar el atajo de teclas alt + ret o posiblemente la secuencia de teclas menos conveniente, seguida de ret .
Digo, esto es un problema, porque mi emulador de terminal de elección es el XTerm y, en muchas distribuciones de Linux, el acceso directo alt + ret no se pasa a la aplicación, sino que es utilizado directamente por el XTerm en el que se está ejecutando IPython, para alternar la plenitud de pantalla de dicho terminal (@ThomasDickey, el mantenedor y coautor de xterm señaló que, de forma predeterminada, a xterm no le importa enviar a la aplicación el bit de modificación en Intro, incluso cuando uno desvincula la acción de Pantalla completa).
Por este motivo, me gustaría modificar al menos este enlace de clave IPython específico.
He encontrado instrucciones (más o menos) para las versiones anteriores, las basadas en readline
, de IPython que no se aplican a la nueva versión 5.0.
Lo que necesitaría son instrucciones que me lleven a encontrar, en la documentación del usuario de IPython, los nombres de las posibles acciones que puedo enlazar, los nombres de los accesos directos para enlazar con las acciones y el procedimiento a seguir para configurar un nuevo enlace de teclas.
Al no tener este tipo de respuesta canónica, puedo estar contento con una receta para lograr este enlace de teclas específico, con la condición de que la receta aún funcione en IPython 6.0
Los atajos de teclado ctrl + j o ctrl + m están validando la entrada.
Podrías cambiar la configuración de xterm.
xterm es configurable (y documentado). En el manual de xterm, la sección de enlaces de teclas predeterminados muestra el enlace predeterminado para esta tecla:
Alt <Key>Return:fullscreen() /n/
Puedes suprimir ese enlace de más de una manera:
- usando el recurso
omitTranslation
para suprimir la característica - configurando el recurso de
fullscreen
paranever
Sin embargo, solo suprimirlo no hará que envíe algo interesante (xterm ignora el modificador de Enter ). La configuración de un recurso de translation
funciona, por ejemplo, en su archivo $HOME/.Xdefaults
:
*VT100*translations: #override /n/
Alt <Key>Return: string("/033[27;3;13~")