cowsay -l
списки весь доступный cowfiles.
cowsay -l | tail -n +2 | tr ' ' '\n' | shuf -n 1
tail -n +2
удаляет первую строку, которая указывает путь к файлам Коровы, которые будут использоваться ("Файлы коровы в/usr/share/cows": в cowsay 3.02-8 в Arch Linux), tr ' ' '\n'
разделяет вывод на строки и, наконец, shuf -n 1
выбирает случайную корову.
Если вы попробуете запустить man xkeyboard-config
, вы получите множество вариантов переключения поведения. Мне больше всего нравится ctrl:swap_rwin_rctl
, что делает (только )правильным Command(aka Meta , Super , Win)work как второй Ctrl . Так что это то, что вы должны запустить, чтобы переключиться:
setxkbmap -option ctrl:swap_rwin_rctl
Если вы также хотите переключить левую -сторону Ctrl и мета-клавиши , просто снова запустите setxkbmap
с помощью ctrl:swap_lwin_lctl
.
Запуск этой команды на терминале заставит изменения действовать только до тех пор, пока вы не выйдете из системы, но вы можете запустить эту команду при запуске, чтобы сделать изменения постоянными.
setxkbmap -option altwin:left_meta_win
Запустите echo -option altwin:left_meta_win >> ~/.Xkbmap
, чтобы сделать его постоянным.
Я только начинаю, так как первоначальный ответ был слишком длинным и подробным.
Я бы просто использовал xkeysnail , он похож на xmodmap или xkb, но более настраиваемый, основанный на Python, его легче модифицировать, и он обычно находится в репозиториях дистрибутива.
Вы также можете использовать мое приложение kinto , которое использует xkeysnail и дает вам привязки клавиш, подобные Mac. Kinto также фактически установит xkeysnail в качестве службы systemd, чего не произойдет через репозиторий или сайт github для xkeysnail.
Пример конфига, созданного для xkeysnail.
# -*- coding: utf-8 -*-
import re
from xkeysnail.transform import *
terminals = ["gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm","kitty"]
terminals = [term.casefold() for term in terminals]
termStr = "|".join(str(x) for x in terminals)
# [Conditional modmap] Change modifier keys in certain applications
define_conditional_modmap(lambda wm_class: wm_class.casefold() not in terminals,{
# Default Mac/Win
Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
Key.LEFT_META: Key.LEFT_ALT, # WinMac
Key.LEFT_CTRL: Key.LEFT_META, # WinMac
Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac
Key.RIGHT_META: Key.RIGHT_ALT, # WinMac
Key.RIGHT_CTRL: Key.RIGHT_META, # WinMac
})
# [Conditional modmap] Change modifier keys in certain applications
define_conditional_modmap(re.compile(termStr, re.IGNORECASE), {
# Default Mac/Win
Key.LEFT_ALT: Key.RIGHT_CTRL, # WinMac
Key.LEFT_META: Key.LEFT_ALT, # WinMac
Key.LEFT_CTRL: Key.LEFT_CTRL, # WinMac
Key.RIGHT_ALT: Key.RIGHT_CTRL, # WinMac
Key.RIGHT_META: Key.RIGHT_ALT, # WinMac
Key.RIGHT_CTRL: Key.LEFT_CTRL, # WinMac
})
define_keymap(re.compile(termStr, re.IGNORECASE),{
# Ctrl Tab - In App Tab Switching
K("LC-Tab") : K("LC-PAGE_DOWN"),
K("LC-Shift-Tab") : K("LC-PAGE_UP"),
K("LC-Grave") : K("LC-PAGE_UP"),
# Converts Cmd to use Ctrl-Shift
K("RC-Tab"): K("RC-F13"),
K("RC-Shift-Tab"): K("RC-Shift-F13"),
K("RC-V"): K("C-Shift-V"),
K("RC-MINUS"): K("C-Shift-MINUS"),
K("RC-EQUAL"): K("C-Shift-EQUAL"),
K("RC-BACKSPACE"): K("C-Shift-BACKSPACE"),
K("RC-Q"): K("C-Shift-Q"),
K("RC-W"): K("C-Shift-W"),
K("RC-E"): K("C-Shift-E"),
K("RC-R"): K("C-Shift-R"),
K("RC-T"): K("C-Shift-t"),
K("RC-Y"): K("C-Shift-Y"),
K("RC-U"): K("C-Shift-U"),
K("RC-I"): K("C-Shift-I"),
K("RC-O"): K("C-Shift-O"),
K("RC-P"): K("C-Shift-P"),
K("RC-LEFT_BRACE"): K("C-Shift-LEFT_BRACE"),
K("RC-RIGHT_BRACE"): K("C-Shift-RIGHT_BRACE"),
K("RC-A"): K("C-Shift-A"),
K("RC-S"): K("C-Shift-S"),
K("RC-D"): K("C-Shift-D"),
K("RC-F"): K("C-Shift-F"),
K("RC-G"): K("C-Shift-G"),
K("RC-H"): K("C-Shift-H"),
K("RC-J"): K("C-Shift-J"),
K("RC-K"): K("C-Shift-K"),
K("RC-L"): K("C-Shift-L"),
K("RC-SEMICOLON"): K("C-Shift-SEMICOLON"),
K("RC-APOSTROPHE"): K("C-Shift-APOSTROPHE"),
K("RC-GRAVE"): K("C-Shift-GRAVE"),
K("RC-BACKSLASH"): K("C-Shift-BACKSLASH"),
K("RC-Z"): K("C-Shift-Z"),
K("RC-X"): K("C-Shift-X"),
K("RC-C"): K("C-Shift-C"),
K("RC-V"): K("C-Shift-V"),
K("RC-B"): K("C-Shift-B"),
K("RC-N"): K("C-Shift-N"),
K("RC-M"): K("C-Shift-M"),
K("RC-COMMA"): K("C-Shift-COMMA"),
K("RC-DOT"): K("C-Shift-DOT"),
K("RC-SLASH"): K("C-Shift-SLASH"),
K("RC-KPASTERISK"): K("C-Shift-KPASTERISK"),
}, "terminals")