Archivo de la etiqueta: autokey

Solucionar problema con excepción en Autokey

Hace tiempo os hablé de una herramienta que mejora nuestra productividad a la hora de usar el teclado: Autokey. Aunque funciona muy bien a veces os puede dar un fallo que impida que se ejecute con normalidad.

Aquí os voy mostrar un error que me ocurrió hace poco y cómo lo solucioné.

De repente observé que no funciona ninguna abreviatura, así que me fijé en los mensajes que soltaba en la línea de comandos. En concreto, los errores eran éstos:

Exception in thread KeypressHandler-thread:
Traceback (most recent call last):
 File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
 self.run()
 File "/usr/lib/python2.7/site-packages/autokey/iomediator.py", line 204, in run
 target.handle_keypress(rawKey, modifiers, key, windowName, windowClass)
 File "/usr/lib/python2.7/site-packages/autokey/service.py", line 179, in handle_keypress
 currentInput, windowInfo, True)
 File "/usr/lib/python2.7/site-packages/autokey/service.py", line 304, in __checkTextMatches
 if item.check_input(buffer, windowInfo):
 File "/usr/lib/python2.7/site-packages/autokey/model.py", line 735, in check_input
 abbr = self._should_trigger_abbreviation(buffer)
 File "/usr/lib/python2.7/site-packages/autokey/model.py", line 134, in _should_trigger_abbreviation
 if self.__checkInput(buffer, abbr):
 File "/usr/lib/python2.7/site-packages/autokey/model.py", line 147, in __checkInput
 stringBefore, typedAbbr, stringAfter = self._partition_input(buffer, abbr)
 File "/usr/lib/python2.7/site-packages/autokey/model.py", line 194, in _partition_input
 stringBefore, typedAbbr, stringAfter = currentString.rpartition(abbr)
ValueError: empty separator

La causa está en que hemos introducido mal una abreviatura. A veces, al teclear la abreviatura puede que se inserte una coma “,”. En este caso, el programa da error y, aunque aparentemente está funcionando (aparece el icono con forma de “A” en la bandeja del sistema -en la barra de tareas-) no lo está haciendo.

Una vez eliminada la coma queda subsanado el error y todo vuelve a funcionar con normalidad.

 

 

Autotexto en GNU/Linux (III)

En los dos anteriores artículos vimos cómo mejorar nuestra productividad a la hora de escribir textos repetitivos.

El primer método lo hacía con combinaciones de teclas. El segundo mejoraba éste ya que simplemente poniendo una sencilla abreviatura, ésta se expandía al texto que queríamos mostrar. Sin embargo, este último método era válido sólo para el editor emacs. En este artículo vamos a ver cómo hacer esto último pero ya siendo válido para cualquier aplicación de GNU/Linux que usemos.

Existe una aplicación fantástica en Linux que permite hace estas cosas de forma muy sencilla llamada Autokey.

En la propia web oficial del proyecto podéis ver cómo instalarlo desde repositorios para Debian/Ubuntu.

En mi caso (openSUSE 13.1) me he descargado los fuentes y lo he instalado así:

python setup.py install

Hay que ejecutarlo como root (o usar sudo) para que puedan copiarse los ejecutables en los directorios correspondientes.

Para ejecutarlo tenéis dos posibilidades: autokey-gtk y atuokey-qt. Como yo uso KDE he optado por la segunda opción. Para que ésta funcione hay que instalar las siguientes dependencias:

python-xlib
python-pyinotify
python-qscintilla

Para la de gtk no he probado así que no os puedo decir qué dependencias tiene exactamente. Al final, es lo mismo, porque simplemente se trata de un interfaz (gtk o bien qt) que usan la misma configuraicón (almacenada en $HOME/.config/autokey).

En esta interfaz podéis definir los textos e incluso ejecutar scripts. Por ejemplo, además de textos “estáticos” podéis hacer que cuando pulséis una abreviatura se inserte la hora actual. Tenéis ya definidos algunos ejemplos que os valdrán para probar la aplicación. Crear vuestras propias frases es bien sencillo:

  1. Pulsamos en File–> New –> Phrase (*)
  2. En el cuadro de texto escribís la frase que os interesa (puede ser una frase, un párrafo -con intros-… lo que queráis)
  3. Luego pulsáis en la parte inferior donde “Abbreviations”, en concreto, en el botón de la derecha llamado “set”. Ahí se os abre una ventanita para meter las distintas abreviaturas que queréis que “disparen” el texto.

Es muy completa la aplicación. Entre otras cosas, podéis:

  • Insertar un párrafo usando distintas abreviaturas
  • Especificar si queréis que haya que pulsar espacio tras la abreviatura o no
  • Ignorar mayúsculs/minúsculas a la hora de escribir las abreviaturas
  • Asignar combinaciones de teclas
  • Restringir la abreviatura para que sólo funcione en ciertas aplicaciones (opción “Window filter”)
  • Lo mejor: podéis crear scripts en python para hacer cualquier cosa que queráis que se inserte automáticamente. En la aplicación vienen varios ejemplos, pero las posibilidades son infinitas.

Esto último (creación de scripts) es una parte muy potente que os permitirá conseguir casi cualquier dato para insertarlo en vuestros documentos. Por ejemplo, esto sería para introducir la fecha (viene por defecto ya definida en los scripts de python):

output = system.exec_command("date")
keyboard.send_keys(output)

De esta forma, se puede ejecutar cualquier comando que queráis. Por ejemplo:

output = system.exec_command("ls $HOME")
keyboard.send_keys(output)

Obviamente, el script puede ser tan complejo como queráis. Se pueden hacer cosas interesantes como ésta (viene en los ejemplos de la aplicación):

choices = ["This is the option 1", "This is the option 2", "This is the option 3"]

retCode, choice = dialog.list_menu(choices)
if retCode == 0:
   keyboard.send_keys("You chose " + choice)

En este caso, se muestra una lista donde podemos elegir la frase a insertar. Podéis modificarla y personalizarla con tantas opciones como queráis.

Aquí os dejo una captura de pantalla (usando la interfaz Qt):

Autokey

Autokey

Es una de las aplicaciones más útiles para GNU/Linux que he encontrado desde que lo uso (hace casi 15 años, allá por el 99 con RedHat Linux 6 -cuando aún no era Enterprise, ni existía Fedora, ni mucho menos Ubuntu…-).

Si sois desarrolladores podéis usarla para insertar code snippets, es decir, trozos de código que repetitivo que siempre tenéis que estar tecleando cada vez (por ejemplo, los includes típicos de una aplicación, la plantilla para empezar una función en un lenguaje determinado, definición de clases, …).

Si queréis más info, además de la web oficial (donde hay una wiki con ejemplos, manuales, FAQ…), os recomiendo que echéis un vistazo aquí, donde tenéis una descripción muy completa de la aplicación.

NOTA: en las primeras pruebas he detectado que si metéis un espacio en una abreviatura al programa no le sienta muy bien, así que cuando pongáis una abreviatura tecleadla y seguidamente pulsad intro. Ya está ;-).

 

(*) Sí, el programa está entero en inglés, pero es bastante intuitivo.