Leonardo

Archivo de Enero 2007

AutoHotkey (Tutorial 3): Menú de carpetas favoritas en el explorador de Windows y los cuadros de diálogo Guardar/Abrir

In paso a paso+tutoriales, productividad, scripts on Enero 26, 2007 at 4:44 pm

Hey! Ahora escribo en just·leo, mi nuevo blog.

Seguimos con AutoHotkey, y en este caso con un script que encontré en el sitio del fabricante, el cuál nos permite tener a mano una lista de carpetas favoritas en los cuadros de diálogo de Guardar/Abrir , como también en el explorador de Windows. La única desventaja de este script es que necesita de un mouse con tres botones, debido a que utiliza el click del botón medio para desplegar el menú.

Cómo se ve:

Como dije en incontables ocasiones: si no puedo tener una Mac, al menos que Windows se vea como tal ;)

 

01|Funcionamiento
El concepto es muy sencillo pero no menos útil: supongamos que estamos trabajando en Word con varios documentos abiertos al mismo tiempo (por cierto: ¿alguien sabe de un programa para agregarle solapas a Word como en Firefox?) y queremos guardar cada uno en una carpeta distinta.
El proceso será más o menos éste:
a) Ir a Guardar/Abrir
b) Buscar en toda la estructura del disco una carpeta raíz desde la cuál acceder a la que querramos
c) Finalmente, elegir la carpeta en la que queremos guardar el archivo

Con el script que mostraré luego este tedioso proceso se resume a:
a) Ir a Guardar/Abrir
b) Click medio sobre la barra de título del cuadro de diálogo
c) Elegir la carpeta deseada del cuadro desplegable que se abrirá

Nótese que no estamos viendo qué método tiene menos ítems, sino qué solución es la más rápida y efectiva. Con este método tardamos segundos porque las carpetas del menú desplegable las definimos nosotros. Esto es: si nunca guardamos nada en Mis Documentos, simplemente no lo agregamos al listado de carpetas favoritas.

02|El script
Es un poco largo, pero lo voy a mostrar fraccionado para poder aclarar algunos aspectos. Hay que copiarlo y pegarlo todo junto en un archivo nuevo de AutoHotkey.

Parte 1: las notas del desarrollador.
Tenía la idea de no incluir esto, pero resulta ser que contiene algunas “contraindicaciones” bastante importantes. Recomiendo leerlo.

; Easy Access to Favorite Folders — by Savage
; http://www.autohotkey.com
; When you click the middle mouse button while certain types of
; windows are active, this script displays a menu of your favorite
; folders. Upon selecting a favorite, the script will instantly
; switch to that folder within the active window. The following
; window types are supported: 1) Standard file-open or file-save
; dialogs; 2) Explorer windows; 3) Console (command prompt) windows.
; The menu can also be optionally shown for unsupported window
; types, in which case the chosen favorite will be opened as a new
; Explorer window.

; Note: In Windows Explorer, if “View > Toolbars > Address Bar” is
; not enabled, the menu will not be shown if the hotkey chosen below
; has a tilde. If it does have a tilde, the menu will be shown
; but the favorite will be opened in a new Explorer window rather
; than switching the active Explorer window to that folder.

; CONFIG: CHOOSE YOUR HOTKEY
; If your mouse has more than 3 buttons, you could try using
; XButton1 (the 4th) or XButton2 (the 5th) instead of MButton.
; You could also use a modified mouse button (such as ^MButton) or
; a keyboard hotkey. In the case of MButton, the tilde (~) prefix
; is used so that MButton’s normal functionality is not lost when
; you click in other window types, such as a browser. The presence
; of a tilde tells the script to avoid showing the menu for
; unsupported window types. In other words, if there is no tilde,
; the hotkey will always display the menu; and upon selecting a
; favorite while an unsupported window type is active, a new
; Explorer window will be opened to display the contents of that
; folder.
f_Hotkey = ~MButton

Parte 2: Configuración.
Se nos explica cómo agregar nuestros favoritos.

; CONFIG: CHOOSE YOUR FAVORITES
; Update the special commented section below to list your favorite
; folders. Specify the name of the menu item first, followed by a
; semicolon, followed by the name of the actual path of the favorite.
; Use a blank line to create a separator line.

Parte 3: Lista de favoritos
Aquí debemos escribir el nombre de la carpeta que queramos agregar al menú, seguido de un “;” sucedido por la ruta o path de la carpeta en cuestión.

Entonces, si quisiéramos agregar la carpeta “Trabajo” que está en Mis Documentos, sería algo así:
Trabajo ; C:\ocuments and Settings\LEO\Mis documentos\Trabajo

/*
ITEMS IN FAVORITES MENU <– Do not change this string.
Escritorio ; %A_Desktop%
Mis Documentos ; %A_MyDocuments%
iPod ; I:\
Blog ; C:\Documents and Settings\LEO\Escritorio\Blog
Diseño ; C:\Documents and Settings\LEO\Mis documentos\Diseño
Mac OS X Leopard ;C:\Documents and Settings\LEO\Mis documentos\Varios\TI\Apple\Mac OS X\Mac OS X 10.5 Leopard
Imágenes PNG ;C:\Documents and Settings\LEO\Mis documentos\Varios\TI\Software\Backup PNG de Object dock

Program Files; %A_ProgramFiles%
*/

Parte 4: Programación final
Luego tenemos todo el código del script que hace posible esto. Como todos sabemos que no soy programador, ni siquiera voy a pretender que entiendo esto. Obviamente hay que agregarlo al script :)

; END OF CONFIGURATION SECTION
; Do not make changes below this point unless you want to change
; the basic functionality of the script.

#SingleInstance ; Needed since the hotkey is dynamically created.

Hotkey, %f_Hotkey%, f_DisplayMenu
StringLeft, f_HotkeyFirstChar, f_Hotkey, 1
if f_HotkeyFirstChar = ~ ; Show menu only for certain window types.
f_AlwaysShowMenu = n
else
f_AlwaysShowMenu = y

; Used to reliably determine whether script is compiled:
SplitPath, A_ScriptName,,, f_FileExt
if f_FileExt = Exe ; Read the menu items from an external file.
f_FavoritesFile = %A_ScriptDir%\Favorites.ini
else ; Read the menu items directly from this script file.
f_FavoritesFile = %A_ScriptFullPath%

;—-Read the configuration file.
f_AtStartingPos = n
f_MenuItemCount = 0
Loop, Read, %f_FavoritesFile%
{
if f_FileExt Exe
{
; Since the menu items are being read directly from this
; script, skip over all lines until the starting line is
; arrived at.
if f_AtStartingPos = n
{
IfInString, A_LoopReadLine, ITEMS IN FAVORITES MENU
f_AtStartingPos = y
continue ; Start a new loop iteration.
}
; Otherwise, the closing comment symbol marks the end of the list.
if A_LoopReadLine = */
break ; terminate the loop
}
; Menu separator lines must also be counted to be compatible
; with A_ThisMenuItemPos:
f_MenuItemCount++
if A_LoopReadLine = ; Blank indicates a separator line.
Menu, Favorites, Add
else
{
StringSplit, f_line, A_LoopReadLine, `;
f_line1 = %f_line1% ; Trim leading and trailing spaces.
f_line2 = %f_line2% ; Trim leading and trailing spaces.
; Resolve any references to variables within either field, and
; create a new array element containing the path of this favorite:
Transform, f_path%f_MenuItemCount%, deref, %f_line2%
Transform, f_line1, deref, %f_line1%
Menu, Favorites, Add, %f_line1%, f_OpenFavorite
}
}
return ;—-End of auto-execute section.

;—-Open the selected favorite
f_OpenFavorite:
; Fetch the array element that corresponds to the selected menu item:
StringTrimLeft, f_path, f_path%A_ThisMenuItemPos%, 0
if f_path =
return
if f_class = #32770 ; It’s a dialog.
{
if f_Edit1Pos ; And it has an Edit1 control.
{
; Activate the window so that if the user is middle-clicking
; outside the dialog, subsequent clicks will also work:
WinActivate ahk_id %f_window_id%
; Retrieve any filename that might already be in the field so
; that it can be restored after the switch to the new folder:
ControlGetText, f_text, Edit1, ahk_id %f_window_id%
ControlSetText, Edit1, %f_path%, ahk_id %f_window_id%
ControlSend, Edit1, {Enter}, ahk_id %f_window_id%
Sleep, 100 ; It needs extra time on some dialogs or in some cases.
ControlSetText, Edit1, %f_text%, ahk_id %f_window_id%
return
}
; else fall through to the bottom of the subroutine to take standard action.
}
else if f_class in ExploreWClass,CabinetWClass ; In Explorer, switch folders.
{
if f_Edit1Pos ; And it has an Edit1 control.
{
ControlSetText, Edit1, %f_path%, ahk_id %f_window_id%
; Tekl reported the following: “If I want to change to Folder L:\folder
; then the addressbar shows http://www.L:\folder.com. To solve this,
; I added a {right} before {Enter}”:
ControlSend, Edit1, {Right}{Enter}, ahk_id %f_window_id%
return
}
; else fall through to the bottom of the subroutine to take standard action.
}
else if f_class = ConsoleWindowClass ; In a console window, CD to that directory
{
WinActivate, ahk_id %f_window_id% ; Because sometimes the mclick deactivates it.
SetKeyDelay, 0 ; This will be in effect only for the duration of this thread.
IfInString, f_path, : ; It contains a drive letter
{
StringLeft, f_path_drive, f_path, 1
Send %f_path_drive%:{enter}
}
Send, cd %f_path%{Enter}
return
}
; Since the above didn’t return, one of the following is true:
; 1) It’s an unsupported window type but f_AlwaysShowMenu is y (yes).
; 2) It’s a supported type but it lacks an Edit1 control to facilitate the custom
; action, so instead do the default action below.
Run, Explorer %f_path% ; Might work on more systems without double quotes.
return

;—-Display the menu
f_DisplayMenu:
; These first few variables are set here and used by f_OpenFavorite:
WinGet, f_window_id, ID, A
WinGetClass, f_class, ahk_id %f_window_id%
if f_class in #32770,ExploreWClass,CabinetWClass ; Dialog or Explorer.
ControlGetPos, f_Edit1Pos,,,, Edit1, ahk_id %f_window_id%
if f_AlwaysShowMenu = n ; The menu should be shown only selectively.
{
if f_class in #32770,ExploreWClass,CabinetWClass ; Dialog or Explorer.
{
if f_Edit1Pos = ; The control doesn’t exist, so don’t display the menu
return
}
else if f_class ConsoleWindowClass
return ; Since it’s some other window type, don’t display menu.
}
; Otherwise, the menu should be presented for this type of window:
Menu, Favorites, show
return

Reitero: para poder utilizar este script copiamos todo el código junto (que aparece aquí en gris y desglosado en partes) a un nuevo script en blanco de AutoHotkey. Para eso recordemos que en una carpeta cualquiera hacíamos click derecho y elegíamos “Nuevo >” del menú contextual, eligiendo por último “AutoHotkey Script”. Luego lo agregamos al arranque de Windows para que ni bien entremos en sesión el script se cargue.

Todas las entradas sobre AutoHotkey.
Cerrar aplicaciones con un botón del mouse o un atajo de teclado.
Ocultar ventanas en la bandeja del sistema.

Un atajo de teclado para crear una carpeta nueva.
Agregar un prefijo a muchos archivos automáticamente.
Cambiar la extensión de un archivo.
Mover cientos de archivos y carpetas con un atajo de teclado.
Menú de carpetas favoritas en el Explorador de Windows y los cuadros de diálogo Guardar/Abrir.

Corrector automático al escribir en todos los programas.
AutoHotkey Tutorial: Cómo automatizar Windows.

¿Comentarios? ¿Dudas? ¿Críticas?

AutoHotkey (Tutorial 2): Corrector automático al escribir en todos los programas

In paso a paso+tutoriales, productividad, scripts on Enero 19, 2007 at 5:51 pm

Continuando con la serie –longeva, espero- de pequeños tips y ejemplos de AutoHotkey, decidí contarles un poco sobre los ‘hotstrings’. Se trata de una suerte de disparadores que reemplazarán palabras predefinidas por otras o bien por textos completos. Un ejemplo útil es el de un script para corregir errores comunes de escritura.
Como todos sabemos bien, si queremos chequear la ortografía de una palabra debemos recurrir a un procesador de texto o bien a un software dedicado, debido a que Windows no incluye un motor de corrección ortográfica que pueda ser aprovechado por todas las aplicaciones (Como sí ocurre en Mac OS X, por cierto ;) .
Al menos en este caso no nos hace falta una Mac. Con AutoHotkey podemos crear una suerte de corrector en “tiempo real” que corregirá las palabras a medida que escribamos en cualquier programa: Word, Messenger, un cuadro de diálogo de un formulario en Firefox, etc.

01|Cambiador de palabras
Como comenté antes, en AutoHotkey podemos definir palabras que actúan como disparadoras de otras, es decir que al escribir “mail” podemos definir que esa palabra sea reemplazada por nuestra dirección de correo electrónico. Entonces cada vez que debamos completar un formulario escribiremos “mail” dentro del recuadro donde se nos pida y el script hará el resto.

La sintaxis es ésta:
::mail::esteesmimail@hotmail.com

Primero definimos el término a ser reemplazado cuando escribamos y luego el término que lo reemplazará, separado por “::”. Cabe aclarar que el término reemplazante puede ser tanto una palabra, una frase o incluso un párrafo o texto completo. Un ejemplo poco común sería definir que al escribir “Neruda” nos escribiera todo un poema del escritor en cuestión de segundos. (Obviamente ese poema habría que escribirlo en el script, esto no es magia después de todo :)

02|Liquid Paper digital
Bajo la misma idea vamos a crear un simple script que corregirá los errores ortográficos al tiempo que los cometamos sin importar el programa que estemos utilizando.

::habia::había ;agrega acento
::albums::álbumes ;corrige el término erróneo y agrega acento

Esto resulta muy útil para los escritores, bloggers o cualquiera que simplemente quiera escribir mejor. La incomodidad radica en tener que escribir en el script todos los errores que cometemos normalmente al escribir. Igualmente si somos lo suficientemente metódicos como para cargar cada error de escritura apenas lo cometamos, veremos que eventualmente tendremos menos errores de escritura y por ende estaremos ingresando menos veces al script para agregar nuevas incorrecciones.

03|Abreviaturas
De la misma manera podemos definir abreviaturas. Es decir, si al escribir “hqt” queremos que se reemplace por “hola, qué tal?” simplemente escribimos:

::hqt::hola, qué tal?

04|El script
En un solo script podemos agrupar todos los hotstrings: cambios de palabra, abreviaturas y correcciones ortográficas.
A continuación agrego el script tal cual lo tengo hasta este momento. Para utilizarlo basta con crear un nuevo script de AutoHotkey desde el menú “Nuevo” dentro del menú contextual del botón derecho del mouse en cualquier carpeta del explorador de Windows, copiar todo el listado a ese script y agregarlo a la carpeta Inicio del menú Inicio para que se ejecute ni bien entremos a nuestro usuario (esto se vio en el primer artículo de esta serie).

Sin más preámbulos, el script:

;CAMBIOS
::-mail::escribeaquitumail@gmail.com
::-web::www.justleo.com.ar

;ABREVIATURAS
::tmb::también
::tmp::tampoco
::qt::qué tal?
::-w::Windows
::-l::Linux
::-x::Mac OS X
::-h::hola
::-c::chau chau
::-a::addio (D)
::-i::iPod
::-o::iPhone

;CORRECIONES ORTOGRÁFICAS
::nek::Nek
::apple::Apple
::apoyas::apoyás
::tambien::también
::coldplay::Coldplay
::ColdPlay::Coldplay
::córrete::correte
::levantas::levantás
::dia::día
::itunes::iTunes
::mátate::matate
::menus::menúes
::míralo::miralo
::ojala::ojalá
::pensas::pensás
::decis::decís
::haces::hacés
::podes::podés
::quedas::quedás
::recordas::recordás
::sabes::sabés
::scripst::scripts
::volve::volvé
::eurpa::Europa
::albumes::álbumes
::album::álbum
::respondio::respondió
::brve::breve
::brev::breve
::msmo::mismo
::comiezo::comienzo
::supuest::supuesto
::supuuesto::supuesto
::supueto::supuesto
::suputo::supuesto
::tonces::entonces
::ntonces::entonces
::entoces::entonces
::entoce::entonces
::entonce::entonces
::milimetros::milímetros
::centimetros::centímetros
::charad::charada
::aprovechand::aprovechando
::aprovchando::aprovechando
::apovechando::aprovechando
::maquina::máquina
::todavia::todavía
::todaví::todavía
::tdavía::todavía
::ipod::iPod
::habia::había
::abia::había
::liquido::líquido
::lejania::lejanía
::maximo::máximo
::minimo::mínimo
::ahi::ahí
::perfumeria::perfumería
::intersante::interesante
::intresante::interesante
::jabon::jabón
::servia::servía
::verda::verdad
::vedad::verdad
::apra::para
::apsa::pasa
::solpas::solapas


Tiene que verse asi:

Mi XP fue disfrazado de Mac OS X, pero es Windows. Aclaro por si alguien duda al ver la imagen


Eso es todo. Igualmente recomiendo chequear el listado de errores a corregir en el script, ya que un error en una lengua puede no serlo en otra. Por ejemplo, en Argentina decimos “¿Qué querés?”, mientras que en España dicen “¿Qué quieres?”. Y mis correcciones son para argentinos, pero simplemente cambiando los términos pueden servir a cualquier persona. Es mejor leer bien el script antes de usarlo, para que nuestros escritos no terminen como el crisol de idiomas y culturas que es CNN En Español.

05|Notas
Si alguien puede contribuir con sus errores comunes a la hora de escribir, podemos crear una lista conjunta que publicaré aquí y agregaré al script para que sea aprovechado por cualquiera que quiera utilizarlo. Cuantos más lectores envíen sus errores (y las correcciones, por favor) menos yerros al escribir tendremos todos.

Todas las entradas sobre AutoHotkey.
Ocultar ventanas en la bandeja del sistema.

Un atajo de teclado para crear una carpeta nueva.
Agregar un prefijo a muchos archivos automáticamente.
Cambiar la extensión de un archivo.
Mover cientos de archivos y carpetas con un atajo de teclado.
Menú de carpetas favoritas en el Explorador de Windows y los cuadros de diálogo Guardar/Abrir.

Corrector automático al escribir en todos los programas.
AutoHotkey Tutorial: Cómo automatizar Windows.

¿Comentarios? ¿Dudas? ¿Críticas?

Usando una cuenta de Gmail como filtro de SPAM

In gmail, paso a paso+tutoriales on Enero 5, 2007 at 6:06 pm

Nota: esta guía está pensada desde la visión de alguien que ya tiene una cuenta de Gmail. Si no tienes una, puedo invitarte a usar el servicio si me escribes a esta dirección: mimailessimple [arroba] gmail.com (Lo escribo así para evitar que los spammers encuentren la cuenta, aunque en realidad no es la cuenta central ;)

Gmail tiene una utilidad muy conveniente, que es la de usar varias cuentas de correo y reenviar todo ese flujo de mails a una cuenta central. Lo mejor de esto es que nos beneficiamos del filtro de correo de cada cuenta individual, y para el momento en que los mails llegan a la cuenta central, la mayor parte del spam no existe.

01| Auto-invitarse a Gmail

Sobre la barra izquierda de Gmail, donde están las etiquetas y demás, la última opción es un recuadro con la opción de invitar a una persona a utilizar el servicio de mail de Google. Bien, simplemente completamos ese cuadro con nuestra casilla de correo, es decir, nos invitamos a nosotros mismos. (Suena patético, pero esto no se trata de ser popular)

Una vez enviado el correo, basta con esperar unos minutos, ir a la bandeja de entrada y revisar si el mail de verificación de creación de una cuenta nueva nos ha llegado. Una vez llegue, seguimos el vínculo que se adjunta en ese mail; nos llevará a un formulario de Google donde crearemos nuestra nueva cuenta.

02| Crear nueva cuenta

Completamos el formulario de creación de cuenta en Gmail, una vez hayamos podido sortear todos los obstáculos (la contraseña, la pregunta secreta, la confirmación de la contraseña, la respuesta secreta, los datos personales, el nombre de cuenta, la aceptación del contrato, etc, etc, etc) veremos una página de bienvenida a Gmail. Nada nuevo teniendo en cuenta que nosotros partimos del preconcepto de que ya teníamos una cuenta de Gmail.

Ahora salimos de esta nueva cuenta y volvemos a entrar en la vieja, la primera, desde la que nos enviamos la invitación. Vamos entonces a “Configuración” una vez hayamos entrado en la cuenta (la vieja cuenta, reitero).

03| Redirigir correo a nueva cuenta

Click para agrandar. (El uso extensivo del rojo es por mi paranoia con los datos personales)

Desde aquí solo resta ir a “Reenvío y correo POP”. En las opciones que se nos presentan, marcamos una tilde donde dice: “Reenviar una copia del correo entrante a __________ y _______”. Aquí completamos el primer espacio en blanco con nuestra cuenta de correo nueva, recién creada, y en el espacio restante elegimos la opción que más nos convenga, yo elegí “eliminar lo copia de Gmail”, para evitar duplicados entre la cuenta vieja y la nueva.

Simplemente estamos reenviando todo nuestro flujo de correo a la nueva cuenta y beneficiándonos por los filtros de spam de cada una de ellas. Si quisiéramos ponermos paranoicos podríamos incluso crear una tercer cuenta y reenviar desde la segunda a la tercera, logrando tres filtros de spam. Es un poco enfermo, pero funciona. xD

Última cosa muy importante: el punto de todo esto es que NADIE SEPA LA DIRECCIÓN DE LA CUENTA NUEVA O CENTRAL. Esto es: no ponerla en foros, sesiones de msn, sitios web, curriculums ni nada por el estilo, para todo eso utlizamos siempre la CUENTA VIEJA. Cuando queramos chequear los mails simplemente abrimos la cuenta nueva y todos nuestros mails estarán ahí, no hace falta entrar en la cuenta vieja porque todo el mail ahora se redirigirá a la nueva.

Alguna duda, por favor dejen comentarios. Y recuerden pedir cuentas de Gmail, si alguien quiere. :)

¿Comentarios? ¿Dudas? ¿Críticas? Escríbelo!