LINUX.ORG.RU
ФорумTalks

Выключаем копипаст средней кнопкой мыши в красноглазом Niri (и используем её для других задач)

 , , ,


1

2

Здравствуйте, красноглазые нирийцы, который вздрагивают при одном упоминании Нокталии! Сегодня мы с вами будем перепиливать поведение мыши. Долой наследие иксов!

Итак, сначала идём и вписываем в ~/.config/niri/config.kdl

clipboard {
    disable-primary
}
Этого уже достаточно для отключения копипастинга мышью в Brave, telegram-desktop,... и т.д.

Для GTK можно добавить команду

dconf write /org/gnome/desktop/interface/gtk-enable-primary-paste false

Теперь добираемся до эмулятора терминала. Поскольку я перешёл на Wezterm (написан на нашем любимом Rust'е), то опишу для него. В ~/.config/wezterm/wezterm.lua надо добавить

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = act.Nop,
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.OpenLinkAtMouseCursor,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}

Однако, это просто отключение. Но у нас освобождается целая кнопка! И её теперь можно использовать в разных сценариях. Например, для того же Wezterm'а можно прописать

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = wezterm.action.SendString 'elio\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'CTRL',
    action = wezterm.action.SendString 'eza --tree ./',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'ALT',
    action = wezterm.action.SendString 'btm\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'SHIFT',
    action = wezterm.action.SendString 'fd -t f . | fzf --preview "bat --style=numbers --color=always {}" | xargs hx',
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}
Что это даёт в этом конкретном примере?

  • При нажатии средней кнопки мыши запустится файловый менеджер elio (написан на нашем любимом Rust'е (Niri тоже на Rust'е)).
  • При нажатии Ctrl+средняя кнопка мыши в командную строку вставится шаблон 'eza --tree ./' для запуска продвинутой альтернативы ls+tree с подсветкой и значками (написана на нашем любимом Rust'е).
  • При нажатии Alt+средняя кнопка мыши запустится системный монитор bottom (написан на нашем любимом Rust'е).
  • При нажатии Shift+средняя кнопка мыши в командную строку вставится шаблон 'fd -t f . | fzf --preview «bat --style=numbers --color=always {}» | xargs hx' для поиска и открытия файлов в текстовом редакторе helix (написан на нашем любимом Rust'е). Вместо find и less здесь используются fd и bat соответственно (написаны на нашем любимом Rust'е).

Enjoy!

★★★★★

А, забыл упомянуть

$ cat ~/.config/zathura/zathurarc
set selection-clipboard clipboard
$

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от mittorn

Wayland позиционируется как среда, где приложения изолированы и не могут шпионить друг за другом. Primary selection - это наследие иксов, которое эту изоляцию размывает. Копирование через Ctrl+C - осознанное действие. Primary selection - неявное, что противоречит принципу «явного согласия» в безопасности.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от mittorn

я на винде в ужасе от отсуствия primary

+100

Вставка средней кнопкой одна из самых полезных мышевозных фич. Выделил где-нибудь что-то, переключился на то куда надо вставить и вставил мышкой. И возможно повторил несоклько раз. Ключевое тут то - что выделять нужное в произвольном месте, достаточно часто удобно мышкой, то есть операция начинается с неё.

При том при клике средней кнопкой на место куда ничего нельзя вставить - она может работать иначе, например закрывать вкладку, это как решит приложение. Не вижу никакого смысла убирать такую полезную функцию над полями ввода.

GPFault ★★★★
()
Ответ на: комментарий от saahriktu

Wayland позиционируется как среда, где приложения изолированы и не могут шпионить друг за другом. Primary selection - это наследие иксов, которое эту изоляцию размывает. Копирование через Ctrl+C - осознанное действие. Primary selection - неявное, что противоречит принципу «явного согласия» в безопасности.

  1. Приведите сценарий выделения текста, который делается не для того чтоб его скопировать.

  2. Такие сценарии действительно есть (хотя их не много). Для безопасности композитор может не открывать primary другим приложениям, пока пользователь не выполнит над ними клик средней кнопкой - тоже вполне осознанное действие.

GPFault ★★★★
()
Последнее исправление: GPFault (всего исправлений: 3)
Ответ на: комментарий от GPFault

переключился на то куда надо вставить и вставил мышкой

Или не в том месте случайно нажал среднюю кнопку мыши, вставил не то и не туда, локтем случайно зацепил Enter и выполнил себе «sudo rm -rf /».

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Или не в том месте случайно нажал среднюю кнопку мыши, вставил не то и не туда, локтем случайно зацепил Enter и выполнил себе «sudo rm -rf /».

  1. На большинстве мышек нажать колесо случайно довольно трудно физически.

  2. Когда руки уже на клавиатуре - вставить с клавиатуры и забыв посмотреть что там (а там не то что думал, перепутал) сразу нажать Enter - в моей практике очень даже случалось. С мышкой хоть время до переноса руки на Enter будет на посмотреть.

GPFault ★★★★
()
Ответ на: комментарий от saahriktu

выполнил себе «sudo rm -rf /».

И чего страшного увидеть

bash: sudo: команда не найдена
?

firkax ★★★★★
()
Ответ на: комментарий от GPFault

сразу нажать Enter

Это если перевод строки в копируемом тексте не встроен. Хотя кстати новые версии xfce4-terminal при такой вставке показывают окно с предупреждением, в котором можно посмотреть что ты вставляешь и скорректировать перед собственно вставкой, либо вообще её отменить.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Это если перевод строки в копируемом тексте не встроен. Хотя кстати новые версии xfce4-terminal при такой вставке показывают окно с предупреждением, в котором можно посмотреть что ты вставляешь и скорректировать перед собственно вставкой, либо вообще её отменить.

Я раньше иногда специально копировал с переносом строки чтоб сразу исполнилось. А сейчас стал замечать что некоторые сочетания терминал + shell не справшивают, а видимо через использорвание Bracketed-paste вставляют текст как многострочную команду, не исполняя её. Если там просто перенос строки в конце - то просто будет крусор на следующей строке, можно нажать Enter чтоб запустить

От способа вставки клавиаутрой или средней кнопкой это не зависит.

GPFault ★★★★
()
Последнее исправление: GPFault (всего исправлений: 2)
Ответ на: комментарий от GPFault

Да, такое тоже бывает. Это в bash (или в libreadline?) с каких-то пор накодили эту ерунду. /bin/sh например это не поддерживает и сразу исполняет присланное.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от GPFault

Приведите сценарий выделения текста, который делается не для того чтоб его скопировать

  • Выделение чтобы не потерять место при чтении.
  • Выделение чтобы сравнить с другим участком текста.
  • Выделение для какой-либо операции с текстом (например, на ЛОРе можно выделить текст в сообщении, и при ответе на это сообщение выделенное автоматически вставится как цитата).
  • Выделение для поиска совпадений по тексту.
  • Выделение для подсчёта слов/символов.

И т.д.

saahriktu ★★★★★
() автор топика

Что за Niri не знаю, но отдельный буфер обмена для средней кнопки мыши не нужен.

X512 ★★★★★
()
Ответ на: комментарий от X512

Ездил с синхронизированными буферами некоторое время, но в определённый момент понял, что это неудобно, и галку в parcellite отжал. Дело вкуса ИМХО...

piyavking ★★★★★
()
Ответ на: комментарий от GPFault

Приведите сценарий выделения текста, который делается не для того чтоб его скопировать

Чтобы его удалить (вырезать)

NyXzOr ★★★★★
()

Выключаем копипаст средней кнопкой мыши

ну и как без этого жить? я когда за винду попадаю - хочется зарубить монитор топором на этом моменте.

amd_amd ★★★★★
()
Ответ на: комментарий от amd_amd

ну и как без этого жить?

Просто нажимать Ctrl[+Shift]+C и Ctrl[+Shift]+V , вот и всё. При копипасте в рамках одного окна даже не всегда обязательно убирать пальцы с Ctrl[+Shift] при этой операции если курсор можно переместить и так, или если их, например, два и связанный со вставкой уже в нужном месте.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от firkax

Мне наоборот понравилось, можно проверить или поправить команду.

bbc69
()

Вспомнилась грустная история, как я вечер пытался починить копировать\вставить через среднюю кнопку мыши, все перепробовал, а оказывается кнопка сломалась. Ну, повод мышку обновить зато.

mikhalich ★★
()
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.