GNU/Linux >> Tutoriales Linux >  >> Linux

Encuadernación Super+C Super+V para copiar y pegar

Vincular Super a Ctrl

¿Qué tal enlazar tu Windows/Logo/Super izquierdo? clave para actuar como otro Ctrl clave?

Puede lograrlo con los siguientes comandos xmodmap:

remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L

Suponiendo que guardó las líneas anteriores como super_as_ctrl.xmodmap puedes probar el efecto ejecutando

xmodmap super_as_ctrl.xmodmap

Para hacer que el cambio sea permanente (volver a iniciar sesión/reiniciar) cambie el nombre del archivo a .Xmodmap en tu carpeta de inicio.

(Lo anterior se probó en el sistema en vivo Ubuntu 11.10, pero debería ser igual para otras distribuciones de Linux)

Ajuste de los accesos directos de Copiar/Pegar para su programa de terminal

Habiendo enlazado Super a Ctrl ahora puedes usar Super-C para copiar en casi todas partes. La única excepción común es su programa de terminal. Sin embargo, puede redefinir los accesos directos allí.

Descubrí que incluso gnome-terminal tiene esta opción por ahora (no la tenía hasta que me acostumbré a Ctrl-Shift-C de todos modos). En caso de que uses ese, ve a Edit / Keyboard Shortcuts... en el menú y asigna Ctrl-C para copiar y Ctrl-V pegar. Debería ser similar para konsole etc.

Y no se preocupe, no perderá la capacidad de finalizar un programa mediante un acceso directo. Después de volver a vincular el atajo de copia para el terminal, puede usar Ctrl-Shift-C como si usaras Ctrl-C antes de. El terminal no distingue aquí si se presiona Shift o no. Y el acceso directo ya no se captura para la copia. Alternativamente, vuelva a vincular la terminación a otro atajo, como sugiere MountainX en su respuesta.

XF86Copiar, etc. no funciona

En cuanto a los símbolos clave para copiar y pegar:Aparentemente no tienen ningún efecto. Lo probé rápidamente asignando la acción de copiar a Shift-ScrollLock (no se usó y quería probar con una tecla no modificadora):

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

Presionarlo no tuvo efecto, tampoco con XF86AudioMute. Sin embargo, funcionó al asignar la letra 'a'. Así que supongo que hay un problema específico con estos símbolos de teclas especiales XF86.


Si desea vincular solo algunas secuencias de la forma Super+x, Super+c, Super+v a otras secuencias como Ctrl+x, Ctrl+c, Ctrl+v, por ejemplo para que (como desea el OP) estos las secuencias particulares de la tecla Super generalmente se mapearán para cortar y pegar sin afectar ningún otro uso de la tecla Super en su sistema, es posible usar solo la extensión XKB. El procedimiento a continuación describe los pasos y brinda dos ejemplos diferentes de los detalles para dos configuraciones de teclado iniciales diferentes; con suerte, eso proporcionará suficiente información para adaptarse a su sistema. Se supone que se siente cómodo creando y editando archivos en su sistema, incluidos los que se encuentran en ubicaciones del sistema como /usr/share/X11/xkb .

  1. Decida dónde desea que resida su árbol de configuración de XKB. Primero encuentre el sistema uno. Por lo general, se encuentra en /usr/share/X11/xkb, y no estoy muy seguro de cómo encontrarlo si no está allí; simplemente puede buscar en su sistema directorios llamados "xkb". De todos modos, una vez que lo haya encontrado, puede modificar el sistema en su lugar o puede usar cualquier directorio de su elección. La ventaja de usar el directorio del sistema es que puede invocar sus cambios mucho más fácilmente, pero el inconveniente es que las futuras actualizaciones del sistema pueden sobrescribir sus cambios (se le ha advertido). En cualquier caso, todos los nombres de archivo mencionados a continuación son relativos a este directorio, al que me referiré cuando sea necesario como $XKBLOCAL$, y todos los comandos asumen que ese es su directorio actual.

  2. Determine qué "tipo" de clave XKB son las claves x,c,v actuales. La forma más sencilla de hacerlo es a través del comando xkbcomp -a $DISPLAY - | grep -C 6 c, (Tenga en cuenta que la coma se incluye intencionalmente en el patrón). En mi primera configuración de ejemplo, esto produce:

    key <AB02> {
        type= "ALPHABETIC",
        symbols[Group1]= [               x,               X ]
    };
    key <AB03> {
        type= "ALPHABETIC",
        symbols[Group1]= [               c,               C ]
    };
    key <AB04> {
        type= "ALPHABETIC",
        symbols[Group1]= [               v,               V ]
    };
    key <AB05> {
    

    mientras que en mi otra configuración de ejemplo esto produce

    key <AB02> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               x,               X, approxeq,     dead_ogonek ]
    };
    key <AB03> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               c,               C, ccedilla,        Ccedilla ]
    };
    key <AB04> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               v,               V, squareroot,           U25CA ]
    };
    key <AB05> {
    

    El resultado es que en el primer ejemplo, las claves relevantes son del tipo "ALFABÉTICO", mientras que en el segundo ejemplo son del tipo "CUATRO_NIVEL". Dependiendo de la configuración de su teclado, puede encontrar que son de algún otro tipo por completo. En lo que sigue, se hará referencia al tipo como $TYPE$, que debe reemplazar con la cadena real ALPHABETIC o lo que sea en los comandos a continuación.

  3. Busque la definición de $TYPE$ y cópiela en un nuevo archivo en el directorio $XKBLOCAL$/types. Aquí hay un comando que hace precisamente eso:xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste . El nombre del archivo "cutpaste" que elegí es arbitrario, use el nombre que desee, pero tenga en cuenta que deberá hacer referencia a este archivo de manera constante en los pasos posteriores. En la primera configuración, este archivo obtiene el contenido

    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };
    

    y en el otro ejemplo obtiene los contenidos

    type "FOUR_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    
  4. Edite los tipos de archivo/cortar y pegar para hacer dos cosas:agregue un preámbulo y un postámbulo que lo conviertan en una cláusula XKB adecuada, y modifique el nombre del tipo y la definición del tipo para agregar un nivel más producido por el modificador correspondiente a Super. Debe verificar cuál es ese modificador en su sistema, es probable que sea Mod4 como se usa a continuación. Las modificaciones necesarias deberían ser evidentes a partir de las dos versiones finales de ejemplo de tipos/pasta cortada, a saber:

    default partial xkb_types "addsuper" {
        type "ALPHABETIC_SUPER" {
            modifiers= Shift+Lock+Mod4;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[Mod4]= Level3;
            map[Shift+Mod4]= Level3;
            map[Lock+Mod4]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Caps";
            level_name[Level3]= "With Super";
        };
    };
    

    y

    default partial xkb_types "addsuper" {
        type "FOUR_LEVEL_SUPER" {
            modifiers= Shift+LevelThree+Mod4;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Mod4]= Level5;
            map[Shift+Mod4] = Level5;
            map[LevelThree+Mod4] = Level5;
            map[Shift+LevelThree+Mod4] = Level5;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "With Super"';
       };
    };
    
  5. Copie las definiciones de símbolos de clave que generó grep en el segundo paso en un segundo nuevo archivo de símbolos/pegar y agregue un preámbulo y un postámbulo similares, y modifique las definiciones para usar los nuevos tipos y agregue acciones a la definición para manejar la clave deseada producido por las versiones Super. Los resultados de esto en nuestros dos ejemplos son:

    default partial xkb_symbols "superversions" {
        replace key <AB02> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               x,               X, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               c,               C, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               v,               V, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    y

    default partial xkb_symbols "superversions" {
        replace key <AB02> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    Tenga en cuenta que en el segundo ejemplo también eliminé algunos de los espacios en blanco (no significativos) para mantener la longitud de la línea bajo un poco de control.

  6. Encuentre el nombre del conjunto de reglas que XKB está usando actualmente. Eso es fácil, se muestra en el resultado de setxkbmap -query . En mi caso, fue "evdev".

  7. Copie la versión del sistema de rules/evdev (o cualquiera que sea el nombre de su conjunto de reglas) a $XKBLOCAL$/rules/evdev y agregue reglas que apunten a las opciones que hemos creado. Aquí tiene dos opciones:puede copiar todo el evdev o solo las partes que mencionan el modelo de teclado, el diseño, la variante y las opciones que realmente está usando. Por supuesto, si está modificando los archivos del sistema en su lugar, no necesita hacer ninguna copia, solo editar.

    En este caso, lo que se agrega es idéntico independientemente de la configuración inicial del teclado, así que solo hay un ejemplo. Encuentra la sección del archivo de reglas que comienza con ! option = symbols y agrega una línea cutpaste:super = +cutpaste a esa sección, y también encontrará la sección del archivo de reglas que comienza con ! option = types y una línea cutpaste:super = +cutpaste a esa sección también.

  8. Copie la versión del sistema de evdev.lst y agregue una línea para su nueva opción. Tenga en cuenta que el nombre de este archivo simplemente corresponde al nombre del archivo de reglas con .lst adjunto. Como en el paso anterior, puede copiar todo el archivo o solo la parte a la que hace referencia el modelo, el diseño, la variante y las opciones que está utilizando. Solo necesita encontrar la sección de este archivo que comienza con ! option y agrega una línea como esta:cutpaste:super Add super equivalents of cut and paste operations a esa sección.

  9. Bien, ahora todos los archivos de configuración están en su lugar. Si modificó los archivos del sistema, ahora puede invocar su nueva opción con setxkbmap -option cutpaste:super . Por otro lado, si no lo hizo, debe informar a setxkbmap dónde está su directorio $XKBLOCAL$. Lo que es peor, el servidor tampoco sabe dónde está ese directorio, y setxkbmap no lo dice (o tal vez no pueda, ya que en última instancia el servidor podría estar ejecutándose en otra máquina). Entonces, debe canalizar la salida de setxkbmap a xkbcomp, y también decirle a ese comando dónde está su directorio $XKBLOCAL. Por lo tanto, la línea de comando completa es setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY .

Esperemos que esto sea de ayuda/interés para alguien, ya que la buena documentación/referencia definitiva de XKB es escasa. Una referencia muy útil fue http://madduck.net/docs/extending-xkb/.


Esto es lo que hago. No es la solución definitiva, pero traté de lograr la solución definitiva y no pude llegar después de mucho esfuerzo. Así que me conformé con algo que es simple y que funciona para más del 90% de lo que necesito. Puedo implementarlo en cualquier computadora a la que vaya (o cualquier nueva instalación de Linux) en cuestión de minutos. Es muy simple.

En la aplicación de terminal X, establezca las preferencias de acceso directo. He hecho esto tanto en Gnome como en KDE. En Konsole, por ejemplo, vaya a Menú> Configuración> Configurar accesos directos. Hay un menú similar en la terminal Gnome X. Simplemente seleccione el atajo (por ejemplo, "copiar") e ingrese la secuencia de teclas deseada.

En caso de que los atajos de copiar y pegar del terminal entren en conflicto con los comandos del terminal, también hay una solución fácil para eso. Por ejemplo, ¿qué pasa si alguien quiere usar CTRL-C para copiar (para que el terminal X cumpla con el estándar CUA)?

En ese caso, puede cambiar fácilmente las asociaciones de teclas stty (en .bashrc). Continuando con el ejemplo de CTRL-C para copiar, supongamos que desea que la tecla de interrupción sea ahora CTRL-b (para "romper"). Esto logra que:

echo "stty intr \^b" >> ~/.bashrc 

Luego fuente .bashrc.

La solución completa es tan simple como usar la configuración de terminales X para cambiar los accesos directos y luego, opcionalmente, resolver conflictos con stty con un comando de eco de una línea. Totalmente simple y cubre casi todo lo que necesito.


Linux
  1. Copie y pegue en la línea de comandos de Linux con xclip

  2. ¿Un Superblock, Inode, Dentry Y Un Archivo?

  3. ¿Evitar la tecla Enter en Cp -i?

  4. ¿Copiar/cortar y pegar a veces no funciona en Nautilus?

  5. Cómo copiar y pegar en Putty

Copie y pegue texto en la terminal en Ubuntu 22.04

Cómo copiar, cortar y pegar en Vim / Vi

Cómo copiar y pegar texto en la terminal de Linux

Cómo copiar y pegar en Ubuntu

Historia de Unix y Linux

¿Cómo generar y usar la clave SSH en el sistema Linux?