6 votos

Hacer que Ctrl-k en Terminal copie al portapapeles del sistema

Me gustaría que lo que he "cortado" por última vez con Ctrl-k en Terminal esté disponible en mi editor de texto cuando pulse Cmd-v. ¿Es eso posible? ¿O algo parecido?

Actualización con explicación adicional: Ctrl-k es por defecto en Terminal "borrar hasta el final de la línea". Además de borrar, pone el texto borrado en el portapapeles de la Terminal (el "anillo de matar" de emacs) y puede ser recuperado con Ctrl-y. Esto es esencialmente un segundo portapapeles separado del portapapeles del sistema. Quiero usar el mismo portapapeles para la Terminal y para el resto del sistema, como mi editor de texto.

1 votos

¿qué pasa con cmd-x?

0 votos

Cmd-x no 'corta' desde la Terminal (ni siquiera copia).

0 votos

He leído mal la pregunta. He borrado mi respuesta.

3voto

Khb Puntos 1002

Hay una solución muy sencilla si estás dispuesto a ampliar la funcionalidad de tu shell. (Aunque es bastante genial ver la solución del autómata)

Asumiendo que estás usando zsh, el actual shell por defecto de MacOS, entonces sólo tienes que añadir esto a tu ~/.zshrc perfil.

pb-kill-line () {
  zle kill-line   # `kill-line` is the default ctrl+k binding
  echo -n $CUTBUFFER | pbcopy
}

zle -N pb-kill-line  # register our new function

bindkey '^K' pb-kill-line  # change the ctrl+k binding to use our new function

Todo esto es envolver el Ctrl + k para que además de realizar su comportamiento por defecto ( kill-line ), también copia el texto correspondiente en el portapapeles de todo el sistema. El misterioso $CUTBUFFER contiene el texto que se acaba de cortar, y el MacOS pbcopy pone lo que recibe del STDIN en el portapapeles del sistema.

Esta solución fue copiada en su mayor parte de https://gist.github.com/welldan97/5127861 ¡! Mi único contenido original es la explicación. :-)

1voto

user3439894 Puntos 5883

No creo que lo que pides sea fácilmente realizable. Creo que las funciones secundarias de cortar y pegar están aisladas en cada aplicación que las soporta y probablemente requeriría atrapar mediante programación la secuencia de teclas de destino y procesarla en consecuencia. Esto es algo que probablemente tendría que ser escrito en C y o Objetivo-C , compilado a ejecutable y permanecer residente en memoria.

Dicho esto, sin embargo, creo que el ^K sólo corta la última línea de texto desde la posición del cursor y la coloca en el cartón secundario . Así que, con esto entendido, permítanme ofrecer lo siguiente como solución solución.

Lo siguiente ejemplo AppleScript código que se muestra más adelante, se utilizará en un Automatizador servicio donde se puede asignar un atajo de teclado a la servicio . Este servicio utilizará, por ejemplo K (Control-Shift-K) y lograr el objetivo de la OP. Que es conseguir lo que se coloca en el cartón secundario en Terminal , pulsando normalmente K en el sistema general de cartulina también conocido como el Portapapeles aunque con la presión, por ejemplo. K en su lugar.

Lo siguiente fue creado, probado y me funciona en MacOS High Sierra .


Crear el automatismo servicio ...

En Automatizador :

  1. Archivo > Nuevo o pulse: N
  2. Seleccione Servicio y haga clic en el botón Elija botón.
  3. Configure los ajustes como se muestra en la primera imagen de abajo.
  4. Añade un Ejecutar AppleScript acción .
  5. Sustituir el valor por defecto código con el ejemplo AppleScript código .
  6. Guardar como por ejemplo Mi Ctrl-K para Terminal

Automator Service


Ejemplo AppleScript código :

tell application "Terminal"
    if (count windows) is greater than 0 then
        try
            activate
            set c1 to contents of selected tab of front window
            tell application "System Events" to ¬
                keystroke "k" using control down
            delay 0.5
            set c2 to contents of selected tab of front window
        end try
    else
        return
    end if
end tell

tell current application
    set pCount to (count paragraphs of text of c1)
    repeat with i from 1 to pCount
        if (count characters of (paragraph i of c1)) is greater than 0 then
            set t1 to (paragraph i of c1)
            set t2 to (paragraph i of c2)
        end if
    end repeat

    if (count characters of t1) is not equal to (count characters of t2) then
        set AppleScript's text item delimiters to {t2}
        set CtrlY to text items of t1
        set AppleScript's text item delimiters to {}
        set the clipboard to CtrlY as text
    end if
end tell
  • Nota: El ejemplo AppleScript código es sólo eso y no contiene ningún otro tratamiento de errores entonces lo que puede estar presente. El usuario siempre tiene la responsabilidad de emplear las tratamiento de errores según sea necesario y/o deseado.
  • El valor de la delay comando puede o no necesitar ser ajustado para su sistema. Ajuste el valor según sea necesario y o añadir más delay comandos según sea necesario.

Asignar el atajo de teclado...

En Preferencias del sistema ...

  • Preferencias del sistema > Teclado > Atajos > Servicios añadir K (pulse Control-Mayúsculas-K) a la Mi Ctrl-K para Terminal servicio como se muestra en la siguiente imagen.

    • Nota: Unas palabras sobre el atajo que se asigna... K se ofrece como una sugerencia, sin embargo, tendrá que seleccionar uno que no entre en conflicto con Terminal (o cualquier otra aplicación que tenga el foco si se establece el servicio a cualquier aplicación ) cuando se pulsa. Esto puede requerir una combinación extraña o una combinación de cuatro caracteres. K me funcionó en Terminal . YMMV

Keyboard Shortcuts


Ahora en Terminal cuando uno pulsa K te pondrás en el Portapapeles lo que K lugares en el cartón secundario .


Como nota al margen, si utiliza un programa como FastScripts sólo tiene que utilizar el ejemplo AppleScript código como .scpt en Script Editor no crear un Automatizador servicio y puede asignar el atajo de teclado en el Preferencias para FastScripts . Ninguna de las otras instrucciones se aplica a menos que quiera hacerlo todo de forma nativa sin el uso de software de terceros.

Tenga en cuenta que no estoy afiliado al desarrollador de FastScripts, sólo soy un usuario satisfecho.

0 votos

¡Esto es increíble! Gracias. Tuve problemas con la K como usted sugirió que podría, pero funciona en otras combinaciones de teclado. Tiene el efecto secundario un poco extraño de traer todas las ventanas abiertas de la Terminal delante de todas las demás ventanas - ¿hay alguna manera de evitar eso? Gracias de nuevo.

0 votos

He eliminado tanto el retraso como la llamada a "activar". No estoy seguro de si eso es malo, pero ahora parece hacer lo que quiero :)

0 votos

Oh, Dios, ahora varios programas diferentes parecen no estar de acuerdo con lo que hay en el portapapeles del sistema. Voy a jugar un poco más y ver si puedo averiguar lo que está pasando

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X