HOTKEYS, primera parte.

HOTKEYS es una extensión que forma parte de “Pointer Environment” (PE), el entorno de ventanas creado por Tony Tebby para el Sinclair QL. Podríamos definirlo como un sistema para declarar combinaciones de teclas que cuando se pulsan dan lugar a una acción que es independiente de la tarea que se está realizando.

Lo primero que tenemos que tener presente es que, para poder disfrutar de las facilidades de HOTKEYS en nuestro QL, necesitamos cargar en nuestro sistema el “Pointer Environment” completo. Este entorno de ventanas consta específicamente de tres módulos residentes PTR_GEN, WMAN y HOT_REXT. Otro componente que podríamos catalogar de indispensable en el QL sería también el Toolkit 2, el cual viene de una manera u otra en la mayoría de los QL que incorporan expansiones de disquetera y ampliaciones RAM.

El programa más simple para cargar en nuestro QL un entorno mínimo para empezar a trabajar con HOTKEYS sería el siguiente:

100 TK2_EXT : REMark en algunos sistemas esta línea es esencial
110 LRESPR FLP1_PTR_GEN
120 LRESPR FLP1_WMAN
130 LRESPR FLP1_HOT_REXT
140 HOT_GO

Comentemos brevemente el las líneas del programa SuperBASIC anterior.

En la línea 100 se ejecuta el comando TK2_EXT que es usado para activar el Toolkit 2 en algunos sistemas. Esto nos permitirá usar a su vez el comando LRESPR, empleado en las líneas siguientes para cargar cómodamente el resto de extensiones necesarias para usar el PE. Si no tuviéramos el Toolkit 2 (que es el que aporta el comando LRESPR) tendríamos que cargar el resto de módulos averiguando primero el tamaños del archivos, y con los comandos LBYTES y CALL cargar cada uno de los módulos en modo residente. LRESPR nos ahorra esfuerzo ya que nos permite cargar las extensiones que necesitemos de una forma más automática.

En la línea 110 cargamos el primer módulo del PE llamado PTR_GEN. Este módulo controla la interfaz de puntero; una flecha en pantalla a modo de cursor que es controlada por un ratón o por las teclas del cursor del teclado. Al igual que otros sistemas GUI, podemos indicarle al ordenador lo que debe hacer desplazando el puntero hasta los “comandos” representados en la pantalla y haciendo “clic” sobre ellos.

El ratón en los QL tiene generalmente 2 botones. La presión sobre el botón izquierdo se llama HIT, y la presión sobre el botón derecho se llama DO. Esas acciones (HIT y DO) tienen equivalentes también en el teclado. Como hemos mencionado anteriormente el puntero se puede mover con las teclas del cursor del teclado, HIT se ejecuta con la barra espaciadora y la acción DO con la tecla ENTER.

WMAN es una abreviatura de “Window Manager” (el gestor de ventanas). Este gestor de ventanas es un sistema mediante el cual se proporciona un aspecto ‘estandarizado’ a la apariencia y funcionamiento de los menús, desplazamiento de las ventanas, etc. En la línea 120 de nuestro ejemplo cargamos WMAN con el comento LRESPR FLP1_WMAN.

HOT_REXT es la parte que controla las “Hotkeys”, las teclas de acceso rápido, que formalmente se denomina “Hotkey System II”. En nuestro ejemplo cargamos este módulo en la línea 130 con LRESPR FLP1_HOT_REXT, lo cual ejecuta un pequeño Job (o tarea residente) llamado Hotkey el cual se ocupa de controlar teclas de acceso rápido.

El comando HOT_GO de la línea 140 es el encargado de activar las teclas de acceso rápido (Hotkeys). En otras palabras, una vez que un comando HOT_GO ha sido ejecutado, las teclas de acceso rápido que se hayan programado comenzarán a funcionar.

Existe también un comando relacionado llamado HOT_STOP el cual desactiva las teclas de acceso rápido que se hayan definido. Es importante recordar este comando porque hay ocasiones en las que no podemos cargar extensiones adicionales mientras Hotkey está funcionando y una forma de hacerlo es desactivando temporalmente las Hotkeys con HOT_STOP y luego volverlo a activar una vez cargadas las extensiones necesarias.

Otra cosa importante a tener en cuenta es el uso de CTRL C (la pulsación conjunta de las teclas CTRL y la letra C). Este combinación de teclas permite conmutar el foco entre varios programas que están ejecutándose al mismo tiempo. Esta es una de las formas más habituales de conmutar entre los distintos programas que están ejecutándose en nuestro QL.

Para comprender la importancia de la Hotkeys en un sistema de la época del QL pongamos un ejemplo. Supongamos que estamos tecleando algo en un procesador de textos y queremos comprobar algo en nuestra base de datos sin tener que salir del procesador de textos. En un ordenador personal de principios de los años 80, nosotros tendríamos que grabar en un fichero el trabajo que estuviéramos haciendo en nuestro procesador de textos, a continuación salir del procesador, arrancar la base de datos, chequear la información, salir del sistema de base de datos y volver a arrancar el procesador de textos con el fichero en el que estuviéramos trabajando.

Pero en un QL con su multitarea y el Hotkeys, las cosas se podrían hacer de otra manera.

Supongamos que hemos definido una combinación de teclas como la vía para arrancar un programa, sin tener que parar el programa actual sobre el cual estamos trabajado. Más aún, si ese segundo programa ya estuviera en ejecución, nuestra combinación de teclas provocaría que se activara ese programa que aún está en memoria. Luego, mediante otra combinación de teclas (Hotkeys) que también hayamos definido, podríamos regresar al primer programa en el que estábamos anteriormente.

Todo esto puede sonar muy complicado al principio, pero podemos acostumbrarnos rápidamente después de verlo en acción.

Este es el principio básico detrás de las Hotkeys: definimos teclas para realizar “acciones”. Independientemente de lo que estábamos haciendo, estas teclas permiten que hagamos algo más al instante sin tener que pasar por la molestia de grabar el programa actual, salir de él e ir al SuperBASIC, teclear comandos para ejecutar otras acciones y así sucesivamente. Lo bueno de este sistema es que una vez que hayamos configurado la pulsación de una determinada acción según nuestras necesidades, podemos ir y definirlas en el programa de arranque de nuestro QL (boot) para que se ejecuten cada vez que arrancáramos el sistema.

En la definición de Hotkey anterior hemos hecho referencia al término “acciones”, pero ¿Qué son exactamente esas acciones?

Las acciones pueden ser:
– Cargar un programa en memoria para iniciarlo de forma rápida posteriormente.
– Cargar un programa desde disco.
– Seleccionar un programa (saltar directamente a él desde otro programa)
– Relleno de texto, o lo que sea, en un búfer especial (como una especie de portapapeles) para pasar en otro programa
– Enviar comandos al SuperBASIC
– Listar las teclas que se han definido
– Activar o desactivar definición de teclas individuales

Exploraremos esta acciones a medida que avancemos en el tema.

Las Hotkeys se definen como una pulsación de varias teclas donde se usa siempre la tecla ALT junto con otra tecla. Esto no es nuevo en el QL y de hecho el Toolkit II tiene algo muy parecido llamado ALTEKEYs. Veamos cual es la diferencia mediante un ejemplo sencillo.

Supongamos que hemos definido un ALT key del Toolkit II para cargar un programa llamado MIPROGRAMA_BAS desde la unidad de disco flp1_. Para ello utilizaremos el siguiente comando:

ALTKEY 'a','LOAD FLP1_MIPROGRAMA_BAS'

Bien, supongamos que estamos en SuperBASIC y pulsamos ALT junto con la tecla ‘a’. Efectivamente, aparecerá en el canal #0 (area de comando en la zona inferior de la pantalla) la orden LOAD FLP1_MIPROGRAMA_BAS. Pero supongamos que estamos editando un documento con el procesador de textos Quill, ¡vaya …!, ahora aparece LOAD FLP1_MIPROGRAMA_BAS como parte del documento que estábamos editando y esto no es lo que queremos. Tendríamos que regresar al SuperBASIC para que este altkey sea de utilidad.

El sistema HOTKEY nos permite hacer esto mucho mejor. Por ejemplo, con el comando HOT_CMD de HOTKEY podemos definir una combinación de teclas para indicarle al ordenador que queremos un comando destinado al SuperBASIC. Esto nos aseguraría que el control del ordenador “salta” al BASIC primero y luego ejecutal el comando por nosotros. El proceso de saltar al BASIC o a otro programa se conoce como “PICKING” en la terminología del sistma de Entorno de Ventanas del QL (PE). Esto evitaría el incoveniente de ALTKEY que hemos mencionado anteriormente.

Así podemos ver que el sistema HOTEKY nos da más versatilidad y potencia que el sistema ALTKEY usado por el Toolkit II.

Podemos elegir cualquier tecla a la hora de definir una acción con HOTEKY pero hay algunas teclas reservadas que deberíamos evitar.

Las letras y números son buenos candidatos. Las teclas de función se pueden definir también pero son más difíciles de recordar. Entre las teclas a evitar están la tecla ENTER (ALT ENTER tiene un significado especial para HOTKEY, nos recupera la última línea de ordenes que hemos tecleado), las teclas de cursor, la tecla CAPS LOCK y la telca TAB. Tampoco es buena idea usar las teclas de apóstrofe o las teclas de símbolos (por ejemplo \).

¿Cómo definir combinaciones de teclas y acciones?

Veamos ahora cómo definir combinaciones de teclas y sus correspondientes acciones.

Los comandos para definir HOTEKYs están incluidos como extensiones SuperBASIC para hacer uso de ellos. La mayoría son funciones en lugar de comandos, esto significa que al ejecutar esas funciones nos devolverá un valor de retorno el cual nos indica si todo se ha ejecutado bien o si ha habido algún error.

Por ejemplo, ejecuta los siguiente desde la línea de comandos SuperBASIC:

PRINT HOT_CMD('a','LOAD flp1_MIPROGRAMA_bas')

Esto imprime el número 0 si todo ha ido bien en la definición del HOTEKY. Si ha habido algún error entonces la función retornará un valor distinto de 0 que representa al código de error, por ejemplo “In Use” error (-9).

Existe un pequeño comando para manejar esos números de retorno pasados por la función que define el HOTEKY, llamado ERT, que significa Error ReporT. Si todo ha ido bien no hace nada, pero si algo ha fallado ese comando emite un sonido o nos da un mensaje descriptivo del error. Un ejemplo de cómo usarlo sería el siguiente:

ERT HOT_CMD('a','LOAD flp1_MIPROGRAMA_bas')

El primer parámetro de la función HOT_CMD define la tecla a la cual será asociada el comando. Presionando la tecla ALT junto con esa tecla (en nuestro ejemplo la tecla 'a') se ejecutará el comando especificado en el segundo parámetro (en el ejemplo, 'LOAD flp1_MIPROGRAMA_bas'). Un aspecto importante a tener en cuanta es que HOTEKY es sensible a las mayúsculas y minúsculas. Se puede definir una acción distinta para la tecla en mayúscula con lo cual tendremos dos definiciones para la misma tecla, pero existen particularidades y ciertas reglas en su uso.

Si defines una HOTEKEY con una tecla en minúscula y no existe otra definición para esa tecla en mayúsculas entonces ambas teclas provocarán en mismo resultado (en el ejemplo anterior ALT a , SHIFT ALT a , o ALT A producirán el mismo efecto).

Los usuarios QL suelen aplicar patrones en la definición de las teclas que resultan útiles.

Por ejemplo, para acciones que involucren la carga o la selección (picking) de programa:

a) usa teclas en mayúsculas para la carga de programa.
b) usa la tecla en minúscula para la selección de programa.

Esto parece lógico, la carga de un programa desde disco es una acción típicamente menos común durante una sesión de trabajo, así usamos las teclas SHIFT ALT y la tecla deseada (tenemos que pulsar tres teclas). Sin embargo, una vez cargado los programas en memoria podría ser muy habitual conmutar entre ellos con una combinación más simple de teclas, la tecla ALT y la tecla deseada (sólo pulsamos dos teclas).

Bien, veamos ahora cómo cargar y seleccionar programas.

Hay varias formas de cargar un programa. Puede cargarse en la memoria y posteriormente ejecutarlo desde la memoria. Esto es muy útil en sistemas sin disco duro ya que podemos para evitar tener que insertar su disquete cada vez que necesite iniciar cualquier programa frecuente y que no esté disponible en el disquete en esos momentos. Sin embargo, siendo muy útil para los programas de uso común, nos ata un poco en cuanto al uso óptimo de la memoria. El más simple de entender es el comando que simplemente carga un programa desde el sistema de almacenamiento (un disquete por ejemplo). Asumiré que mi programa se llama PROGRAM_EXE en este ejemplo:

ERT HOT_LOAD('p','flp1_program_exe')

Cuando mantienes presionada la tecla ALT y pulsas la tecla p, el sistema intenta cargar PROGRAM_EXE desde FLP1_. Sencillo. Pero, de nuevo, hay un par de puntos menores a tener en cuenta.

He puesto el texto entre comillas en el ejemplo anterior, pero en la mayoría de los casos, podría haberse escrito los parámetros del comando de esta forma:

ERT HOT_LOAD(p,flp1_program_exe)

En caso de duda, usa las comillas. Además, el nombre de archivo del programa está escrito en minúsculas, no importa ¡el QL maneja los nombres de archivo en mayúsculas y minúsculas! Ten en cuenta que si omites el nombre de la unidad, HOTKEY intentarán agregar el nombre de la unidad predeterminada por DATA_USE o PROG_USE (las unidades predeterminadas de Toolkit 2 para datos y programas).

Con HOTKEY hay dos extensiones para cargar programas en la memoria para que, posteriormente, puedan iniciarse rápidamente sin tener que tener tus discos en las unidades (esto es bastante similar en principio a usar RESPR o LRESPR para cargar extensiones SuperBasic).

Las dos extensiones son: HOT_RES y HOT_CHP. ¡Ahora las cosas se vuelven un poco más complejas! De hecho, hay otras variaciones llamadas HOT_RES1, HOT_CHP1 y HOT_LOAD1 para casos especiales en los que no te atreves a ejecutar dos copias del mismo programa al mismo tiempo. (A tener en cuenta que en QDOS podrían haber programas que se modifican a sí mismos cuando se cargan en memoria, lo cual podría tener efectos no deseados. Ignoraremos esto por ahora, pero ten en cuenta que existen razones para estas variantes del mismo comando).

HOT_RES se utiliza para cargar programas RESIDENTES. Eso significa que se cargan en la memoria para que posteriormente podamos iniciarlos rápidamente (una o más copias de ellos). Este comando tiene un problema: si hay otros programas ejecutándose o el Job del HOTKEY está activo, este comando podría no funcionar. En estos casos se debe utilizar HOT_CHP. En algunas versiones del sistema HOTKEY, la función HOT_RES parece convertirse automáticamente en HOT_CHP cuando sucede este problema.

¿Cuándo debes utilizar HOT_RES o HOT_CHP en lugar de HOT_LOAD?

Fácil. Reserva el uso de HOT_RES o HOT_CHP para los programas que utilizas con más frecuencia para evitar tener que insertar sus disquetes cada vez que inicies una copia. HOT_LOAD está bien para programas usados ocasionalmente en los que no quieres que acaparen memoria todo el tiempo mientras están cargados de forma residentes.

La secuencia real de eventos cuando se emite un comando HOT_RES o HOT_CHP es la siguiente:

1. Cuando el sistema interpreta el comando, agrega el programa pasado como parámtro al sistema de teclas de acceso directo. Esto significa que, en esencia, cuando se ejecuta la línea que define la tecla de acceso directo, se busca el programa y se carga en la memoria.

2. Cuando más tarde se pulsa la tecla de acceso directo definida como HOT_CHP o HOT_RES, busca el programa en la memoria e intenta iniciar su ejecución.

HOT_LOAD es esencialmente sólo el equivalente del paso (2) – sólo carga el programa nombrado cuando se pulsan las teclas indicadas, en lugar de almacenar una copia en la memoria. Es importante entender la diferencia entre estos comandos. HOT_LOAD iniciará un programa desde el disco sólo cuando se lo indicas. HOT_CHP y HOT_RES harán inmediatamente una copia del programa desde la unidad de almacenamiento a la memoria cuando se definan sus parámetros (tecla de acceso y nombre del programa). Posteriormente, al pulsar la tecla definida por HOT_RES o HOT_CHP, se ejecuta una copia del programa ya cargado en memoria. De hecho, es bastante inteligente, si usas HOT_CHP o HOT_RES, sólo una copia del programa se mantiene en memoria incluso si tiene dos de esos programas en ejecución. Es bastante complejo de explicar, pero básicamente los programas definidos como ‘puros’ pueden tener más de una instancia de sí mismos ejecutándose al mismo tiempo, aunque de hecho sólo hay una copia en la memoria – ¡el sistema está siendo bastante inteligente al ejecutar más de una instancia del mismo código a partir de una sola copia de él!

Estos programas ‘puros’ incluyen a Quill, Archive, Abacus, Easel y los programas QPAC1, por ejemplo. Pero hay otros programas (llamados ‘no puros’) que modifican su propio código de tal manera que no es prudente hacer que un programa en memoria se ejecute como si se tratara de dos instancias separadas. En caso de que una copia modificara su propio código al mismo tiempo que la otra instancia de sí misma intentara hacer algo podría producir el caos. Los programas compilados por Turbo entran en esta categoría – tiene que usar las versiones HOT_CHP1 y HOT_RES1 de estos comandos para asegurarse de que hay el mismo número de copias físicas del programa en la memoria como instancias de si mismo en ejecución. (Esto no es fácil de explicar pero espero que puedas seguirlo).

HOT_LOAD no hace esa distinción. Siempre carga una copia del disco y la ejecuta cuando la necesita. Si tienes problemas para entender HOT_CHP y HOT_RES y sus variaciones, ignóralos, usa HOT_LOAD solo por ahora hasta que entiendas estos conceptos.

Una vez que un programa se en memoria y se está ejecutando, se necesita una forma de saltar a y desde él. Supongamos que nuestro pequeño programa de ejemplo llamado PROGRAM_EXE tiene un nombre simplemente “PROGRAM” (es decir, el nombre que muestra cuando se está ejecutando y que emite el comando JOBS desde BASIC). Hay una función llamada HOT_PICK cuya función es encontrar el programa llamado, y traerlo para que sea el trabajo (o ‘Job’) actual. Esta acción se llama PICKING.

Por ejemplo:

ERT HOT_PICK('a','PROGRAM')

Una vez ejecutado el comando anterior, cuando presiones ALT a, el sistema busca un programa con ese nombre que se esté ejecutando en la memoria y lo “activa” para que puedas trabajar en él.

Todo esto está muy bien, pero como de costumbre con las teclas de acceso rápido (HOTKEYS), la historia no es tan simple.

Los nombres de los “Jobs” (de las tareas o trabajos en QDos) no son simples y pueden no ser obvios, por lo que el sistema HOTKEYS ofrece otra opción relacionada con esos nombres de “Jobs”.

Para elegir un “Job” o incluso eliminarlo, es posible que necesites saber su nombre. Muchas veces, el nombre del “Job” es igual al nombre del programa que cargaste, pero esto no siempre es así; ¡peor aún, algunos programas cambian sus propios nombres mientras se ejecutan por razones que se nos escapan a la mayoría de nosotros!

Para resolver esto, puedes usar la siguiente opción en algunos comandos HOTKEYS para establecer los nombres que desees darle al “Job” que representa tu programa. Estos comandos tienen la siguiente forma que incluye la especificación de un tercer parámetro:

ERT HOT_xxx('key','nombre del archivo','nombre del programa')

HOT_xxx puede ser, por supuesto, HOT_RES, HOT_CHP, etc.

El ‘nombre del archivo’ es el mismo que en los ejemplos anteriores. El ‘nombre del programa’ es cualquier nombre razonable que quieras dar al “Job” (o a la tarea). Por ejemplo, si el programa fuera una aplicación de base de datos llamado DATABASE_EXE y quisiéramos darle al “Job” (o a la tarea) el nombre de ‘mydbase’, entonces el comando debería ser este:

ERT HOT_LOAD('D','FLP1_DATABASE_EXE','mydbase')

Una vez que el programa se está ejecutando, verás el nombre de ‘mydbase’ si tecleas el comando JOBS o si has utilizado el menú de tareas del QPAC2. (Una tarea o un “Job” es simplemente un programa en código máquina, uno que se puede iniciar con EXEC, por ejemplo).

A partir de ese momento, podemos definir un HOTKEYS (una tecla de acceso directo) para que elijamos ese programa, por ejemplo así:

ERT HOT_PICK('d','mydbase')

De modo que al pulsar ALT d el sistema busca un programa que tenga el nombre de ‘mydbase’, y si lo encuentra lo traerá al primer plano como programa activo o programa seleccionado.

Aquí dejamos la primera parte de la descripción del sistema HOTKEYS, seguiremos profundizando en la segunda parte de este artículo.

—-
Fuente :
CAUTION: HOTKEYS – Don’t Burn Your Fingers
By David Denham, 1999
QL Today.

—-

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s