Estoy tratando de obtener el comportamiento de clientes de mensajería instantánea típicos que usan Return
para enviar un texto y Shift + Return
para insertar un salto de línea. ¿Hay alguna manera de lograr eso con un mínimo esfuerzo en Python, usando, por ejemplo, readline y raw_input
?Shift + Volver a insertar linebreak en python
Respuesta
Ok, escuché que se puede lograr también con el readline
, de una manera.
Puede import readline
y establecer en la configuración la tecla deseada (Shift + Intro) a una macro que ponga un carácter especial al final de la línea y nueva línea. Luego puede llamar al raw_input
en un bucle.
De esta manera:
import readline
# I am using Ctrl+K to insert line break
# (dont know what symbol is for shift+enter)
readline.parse_and_bind('C-k: "#\n"')
text = []
line = "#"
while line and line[-1]=='#':
line = raw_input("> ")
if line.endswith("#"):
text.append(line[:-1])
else:
text.append(line)
# all lines are in "text" list variable
print "\n".join(text)
Dudo que pueda hacer eso simplemente usando el módulo readline
ya que no capturará las teclas individuales presionadas y solo procesa las respuestas de caracteres de su controlador de entrada.
que podría hacerlo con PyHook sin embargo y si se pulsa la tecla Shift
junto con la clave Enter
para inyectar una nueva línea en el torrente readline
.
¡Gracias, pero me gustaría mantener la compatibilidad de la plataforma con * nix! –
Creo que con un esfuerzo mínimo puede usar la biblioteca urwid para Python. Desafortunadamente, esto no satisface su requisito de usar readline/raw_input.
Actualización: Consulte también this answer para otra solución.
import readline
# I am using Ctrl+x to insert line break
# (dont know the symbols and bindings for meta-key or shift-key,
# let alone 4 shift+enter)
def startup_hook():
readline.insert_text('» ') # \033[32m»\033[0m
def prmpt():
try:
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')
readline.parse_and_bind('C-x: "\x16\n"') # \x16 is C-v which writes
readline.set_startup_hook(startup_hook) # the \n without returning
except Exception as e: # thus no need 4 appending
print (e) # '#' 2 write multilines
return # simply use ctrl-x or other some other bind
while True: # instead of shift + enter
try:
line = raw_input()
print '%s' % line
except EOFError:
print 'EOF signaled, exiting...'
break
# It can probably be improved more to use meta+key or maybe even shift enter
# Anyways sry 4 any errors I probably may have made.. first time answering
- 1. Linux - Linebreak en IPython
- 2. Linebreak en TextBox
- 3. ¿Volver a abrir archivos en Python?
- 4. Html.fromHtml (cadena) + lineBreak Problema
- 5. Canvas.drawText (...) no imprime linebreak
- 6. Insertar fila sin volver a cargar la tabla
- 7. emacs equivalente a vim shift-h y shift-l
- 8. Agregue linebreak a textContent o innerText solamente - en Chrome
- 9. Shift de Java a C++
- 10. Google + Meta Description + Linebreak = ¿Posible?
- 11. Insertar objeto python en mongodb
- 12. PHP Shift Shift dando dos respuestas en dos máquinas diferentes
- 13. ¿Cómo volver a cargar el módulo de Python en IDLE?
- 14. ¿Cómo volver a montar los paquetes TCP en Python?
- 15. Cómo garantizar una mejor eficiencia volver a insertar en juegos en C++
- 16. Cómo insertar current_timestamp en Postgres a través de python
- 17. mapa alt + shift +] en vim
- 18. Suprimir linebreak al ingresar al entorno
- 19. hg: ¿cómo puedo volver a insertar la rama recién creada en el repositorio central?
- 20. Insertar pestañas con .join en python
- 21. Python MySql Insertar no funciona
- 22. ¿Qué hace shift() en Perl?
- 23. .net diferencia entre teclas de desplazamiento a la derecha y shift shift
- 24. Python Ignorar excepción y volver a donde estaba
- 25. Frasco Python, intentando lista o dict volver a Ajax llamada
- 26. Python y SQLite: insertar en la tabla
- 27. variables Insertar utilizando sys.stdout.write en Python
- 28. Pantalla + vim causa shift-enter para insertar 'M' y una nueva línea
- 29. Shift reduce conflicto
- 30. BitArray - Shift bits
¿Está buscando respuesta dependiente o independiente de la plataforma? – Jiri
Independiente de la plataforma si es posible, pero * nix compatible debe hacer ya que la aplicación se dirige a los usuarios de la línea de comandos de todos modos. –