Sublime Text 2 Vintage: dejar el modo de inserción cuando se pierde el foco

Sublime Text 2 Vintage: dejar el modo de inserción cuando se pierde el foco

Estoy usandoAntiguomodo (enlaces Vi) en Sublime Text 2.

Cuando vuelvo a ST2, regularmente me muerden porque todavía estoy en el modo de inserción, lo que me hace ingresar "jjjjjjjjjjjjkkkkkkkkk".

¿Hay alguna manera de salir automáticamente del modo de inserción y volver al modo de comando cuando la ventana ST2 pierde el foco?

Respuesta1

Nunca he usado Sublime Text 2, pero parece que podría ser prometedor... aunque no cambia desde mi Vim {Grin}

La siguienteDEBERÍATe funciona para desactivar el modo Insertar cuando pierdes el foco, asígnale el nombre "stop_insert_on_focus_lost.py" y colóquelo en algún lugar de su carpeta de complementos.

Con suerte, funcionará, tuve que escanear la API y algunos de sus complementos de ejemplo para obtener el formato y los comandos. (Aunque nunca antes había visto ST2... ¿obtendré puntos por asimilar su API, Python y modo Vintage en unos minutos?)

import sublime, sublime_plugin
import os.path

class StopInsertOnFocusLost(sublime_plugin.EventListener):
    def on_deactivated(self, view):
        view.run_command('exit_insert_mode')

Respuesta2

El complemento anterior es excelente pero sufre un error molesto, como se menciona en los otros comentarios. Cuando cambias a algo como el menú de búsqueda o ir a cualquier ventana emergente, estarás en modo comando/normal allí. Lo que es peor, los comandos no funcionarán del todo correctamente porque muchos de los comandos del modo antiguo no se ejecutarán en ventanas emergentes, por lo que estás en una situación peor de ambos mundos.

Esta versión soluciona eso:

import sublime, sublime_plugin
import os.path

class StopInsertOnFocusLost(sublime_plugin.EventListener):
    def on_deactivated(self, view):
        view.run_command('exit_insert_mode')

    def on_activated(self, view):
        if view.settings().get('is_widget') == True:
            view.run_command('enter_insert_mode')

¡Gracias a la respuesta original por el código de inicio!

Respuesta3

También tengo esto para ofrecer:

import sublime, sublime_plugin
import os.path

class StopInsertOnFocusLost(sublime_plugin.EventListener):
    def on_deactivated(self, view):
        if view.file_name() and not view.settings().get('command_mode'):
            view.run_command('exit_insert_mode')

Adaptado de la respuesta de lornix: soluciona algunos casos extremos. Nómbrelo stop_insert_on_focus_lost.pyy agréguelo debajo Packages.

información relacionada