¿Cuál es la forma más fácil de obtener una tecla de acceso rápido aaaa-mm-dd hh: mm: ss en la Mac?

11

En Windows utilizo el editor de PSPad que tiene una buena marca de tiempo ALT-D que puede editar el formato de, por ejemplo, aaaa-mm-dd hh: mm: ss .

Cuando trabajo fuera de un editor, por ejemplo, Google Docs , tengo Autohotkey que he programado CTRL-D para insertar una marca de tiempo aaaa-mm-dd hh: mm: ss.

Ahora estoy trabajando en una Mac que usa principalmente TextWrangler como mi editor, pero no puedo encontrar una tecla de acceso rápido de marca de tiempo en sus funciones.

¿Cuál es la forma más fácil de obtener una tecla de acceso rápido aaaa-mm-dd hh: mm: ss en Mac, ya sea en un editor de texto (gratuito) o un equivalente de tecla automática (gratuita)?

Edward Tanguay
fuente
Comenta mi respuesta si no te funciona.
Daniel Beck

Respuestas:

17

Una opción es usar un script de shell o un script de Python / Perl / Ruby.

Una opción, usando Python :

#!/usr/bin/env python
import time
t = time.localtime()
# yyyy-mm-dd hh:mm:ss
print '%d-%02d-%02d %02d:%02d:%02d' % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)

Otro, más corto, por @NReilingh , usando date(script de shell):

date "+%Y-%m-%d %T"

Use /Applications/Automator.apppara crear un Servicio que ejecute este script. Agregue la acción Ejecutar Shell Script Automator e inserte el código anterior. No seleccione ninguna entrada en ninguna aplicación y reemplaza el texto seleccionado . Entonces guardar.

Se colocará en el menú Servicios al que se puede acceder desde la barra de menús de cualquier aplicación seleccionando el menú con el nombre de la aplicación. Puede verse algo así cuando lo usa:

texto alternativo

Asigne métodos abreviados de teclado en el panel de preferencias Teclado en Preferencias del sistema .

texto alternativo


TextExpander, que ya no es gratuito, tiene una función similar a la que desea. Es una aplicación diseñada para la inserción de fragmentos, por ejemplo, para plantillas parciales de correo electrónico.


TextMate es un editor comercial extensible que le permite definir fácilmente comandos personalizados, nuevamente en lenguajes de shell o scripting, y asignarles atajos de teclado.

Daniel Beck
fuente
Si lo digo yo mismo, $ date "+%Y-%m-%d %T"es un poco más compacto ... pero no puedo hacer que ninguno de estos funcione de la manera que quiero. ¿Cómo se supone que se debe obtener una acción de automatización para insertar texto en la entrada de texto actual?
NReilingh
De acuerdo, lo descubrí: el "Reemplaza el texto seleccionado" en la parte superior DEBE verificarse para que se inserte la salida del script de shell sin procesar. Maldita cosa, me llevó media hora darme cuenta: estaba a punto de publicar una respuesta usando el teclado AppleScript. Además, asegúrese de definir "El servicio no recibe ninguna entrada en ninguna aplicación" en la parte superior si desea que el servicio sea accesible universalmente.
NReilingh
@NReilingh Lo siento, pero tenía prisa cuando publiqué esto, con la intención de mejorarlo una vez que tuve la oportunidad (que está en unos minutos).
Daniel Beck
Me gustaría agregar que debe seleccionar usr/bin/env Pythono algo así (el que tiene Python) del menú desplegable, de lo contrario, cualquier aplicación que llame al script de Servicio no sabrá reconocer que es Python, creo. Al menos no funcionó para mí hasta que hice eso.
¿Cómo puedo anular la selección del texto después?
schmunk
4

Hay un error en 10.7 y 10.8 donde los accesos directos para los servicios de Automator no siempre funcionan hasta que el menú de servicios se muestra desde la barra de menús. También hay un retraso notable antes de que se ejecuten los servicios. Otra opción sería asignar un acceso directo a un script como este:

set old to the clipboard as record
set the clipboard to (do shell script "date '+%Y-%m-%d %H:%M:%S'")
tell application "System Events" to keystroke "v" using command down
delay 0.05
set the clipboard to old

keystrokeno ignora las teclas modificadoras presionadas, por lo tanto, agregue un pequeño retraso al inicio si ejecuta el script con un acceso directo que tiene otras teclas modificadoras que el comando. FastScripts espera hasta que se liberan las teclas modificadoras antes de ejecutar scripts que contienen teclas o comandos de códigos de teclas.

Lri
fuente
¿Cuál es el propósito de Cmd-Calmacenar el portapapeles antiguo y configurar el nuevo contenido del portapapeles?
Daniel Beck
@DanielBeck Nada, gracias por señalarlo.
Lri
Usar el portapapeles es un desastre, especialmente si el usuario está usando ClipMenu o algo similar.
Dan Rosenstark
@Yar Alfred ignora los portapapeles "transitorios" y keystrokeno sabe cómo insertar dos puntos con la disposición de mi teclado (pero es un poco un caso marginal). keystrokeSin embargo, podría ser mejor para insertar cadenas cortas solo ASCII como esta.
Lri
Cuando acabo de consultar con español, pensé que tal vez mi Applescript no funcionaría. Me alegra que esté bien, lamento que ciertos idiomas no tengan la misma prioridad. Esta es la razón por la cual las secuencias de comandos son mucho más molestas que la programación. Probablemente se merecen el $$$
Dan Rosenstark
1

La solución de Lauri es mucho más elegante que la mía, pero aquí está mi solución solo para AppleScript. ¿Es más rápido que correr por el portapapeles y usar un script de shell? Tal vez.

De todos modos: hay muchas soluciones para asignarlo a una clave, pero he descubierto que la más fácil es Quicksilver Spark FastScripts . Spark puede usar el scpt directamente, que es lo que ahorra la solución AppleScript.

Activador de fecha y hora en OSX

-- yar2050 (Dan Rosenstark)'s favorite date format 
-- 2017-08-03 update
on fillInZero(int)
    if (int < 10) then set int to "0" & int
    return int as string
end fillInZero

set theDate to (current date)
set theHour to fillInZero(hours of (theDate) as integer)
set theMinutes to fillInZero(minutes of (theDate) as integer)
tell theDate to get (its month as integer)
set theMonth to fillInZero(result)
set theDay to fillInZero(day of theDate)
tell (theDate) to get (its year as integer) & "-" & (theMonth) & "-" & theDay & " " & (theHour) & ":" & theMinutes
set date_ to (result as string)
tell application "System Events"
    set frontmostApplication to name of the first process whose frontmost is true
end tell


tell application frontmostApplication
    delay 0.2 -- I have no idea why this is necessary
    activate
    tell application "System Events"
        if (frontmostApplication = "Evernote") then
            keystroke "h" using {command down, shift down}
            keystroke "b" using {command down}
            keystroke date_
            keystroke "b" using {command down}
        else
            keystroke date_
        end if
    end tell
end tell
Dan Rosenstark
fuente
0

Como actualización de esta pregunta, los usuarios de OS X El Capitan pueden encontrar útil el siguiente AppleScript.

set the clipboard to (do shell script "date +%Y-%m-%d\" \"%H:%M:%S")
tell application "System Events"
    keystroke "v" using command down
end tell

Los usuarios pueden crear un flujo de trabajo Ejecutar AppleScript como se describe en la respuesta anterior de @ daniel-beck. El ejemplo que creé se muestra a continuación:

captura de pantalla de AppleScript en Automator

Jerry W.
fuente