Вопрос или проблема
У меня мышь с тремя кнопками. В оболочке (я использую bash), как на OS X, так и на Linux, выделение текста и нажатие средней кнопки копирует выделение и вставляет его в месте курсора.
Однако при использовании Cygwin в командной строке на Windows XP мне нужно использовать последовательность выделение текста, Enter, правая кнопка, чтобы сделать то же самое. Есть ли способ настроить Cygwin, чтобы он вел себя так же, как на OS X и Linux?
Вам следует установить и использовать rxvt вместо терминала Windows (cmd.exe). rxvt можно установить, выбрав его в разделе Shells в установщике Cygwin, и он автоматически создаст две ярлыка в разделе Programs/Cygwin меню “Пуск” (по крайней мере, если вы изначально разрешили создание ярлыков), один для X и один без. Таким образом, вам не нужно устанавливать X, чтобы использовать rxvt.
В rxvt вы можете использовать среднюю кнопку так же, как вы уже привыкли, без дополнительных настроек. Если вы хотите настроить какой-то аспект rxvt, вам следует обратиться к
/usr/share/doc/Cygwin/rxvt-<версия>.README
где перечислены различные возможные варианты конфигурации и некоторые примеры.
Еще один вариант — установить mintty, который также поддерживает поведение X11 для выделения и вставки.
Вы можете рассмотреть puttycyg.
puttycyg — это исправленная версия PuTTY, которая позволяет использовать PuTTY как локальный терминал Cygwin.
(Извините, SU не позволяет мне делать ссылки на более одного сайта. 🙁 Я даже не могу ввести URL оригинального PuTTY.)
Подход с AutoHotkey:
MButton::
Process, Exist, bash.exe
if ErrorLevel
{
WinWaitActive, ahk_pid %ErrorLevel%
Send { Enter }
ClipWait
Send %clipboard%
return
}
else
{
Send { MButton }
return
}
В зависимости от того, какую оболочку вы используете, возможно, вам нужно будет изменить имя исполняемого файла. Я не уверен, какое имя процесса использует Cygwin.
Проверьте, действительно ли ваша мышь отправляет нажатие средней кнопки, проверив ее настройки. Это действительно может быть проблемой на устройстве с сенсорной панелью, возможно, также и на обычной мыши. В качестве альтернативы попробуйте другие комбинации клавиш, такие как Shift+Insert
.
Я решил эту проблему, используя AutoHotkey v2 (работает безупречно, во всей системе) -> https://github.com/capitanbarbosa/linux_middle_click_for_windows
#Requires AutoHotkey v2.0
MButton::
{
; Проверьте, находится ли курсор над полем редактирования или другим текстовым вводом
if (A_Cursor = "IBeam")
{
prevClipboard := A_Clipboard
A_Clipboard := ""
; Попробуйте скопировать любой выделенный текст
Send("^c")
ClipWait(0.5)
if (A_Clipboard != "")
{
; Текст был выделен и скопирован, сохраним его в буфере обмена
return
}
; Если текст не был скопирован и ничего не выделено, вставьте содержимое предыдущего буфера обмена
if (A_Clipboard == "")
{
A_Clipboard := prevClipboard
Send("^v")
return
}
; Если текст не был скопирован, попробуйте выделить весь текст и скопировать
Send("^a^c")
ClipWait(0.5)
if (A_Clipboard != "")
{
; Текст был скопирован после выделения всего, сохраним его в буфере обмена
Send("{Right}") ; Переместите курсор в конец текста
return
}
; Если все еще нет текста, вставьте содержимое предыдущего буфера обмена
A_Clipboard := prevClipboard
Send("^v")
}
else
{
; Не над текстовым вводом, отправьте обычное нажатие средней кнопки
Send("{MButton}")
}
}
.
Ответ или решение
Для включения функции копирования и вставки с помощью средней кнопки мыши в Cygwin, вам потребуется изменить стандартный терминал Windows и установить более подходящий эмулятор терминала. Вот подробное руководство по настройке:
1. Установка эмулятора терминала
Использование rxvt
Одним из наиболее распространенных решений является использование rxvt, который можно установить через Cygwin:
- Откройте установщик Cygwin и выберите
rxvt
в разделе "Shells". - После установки у вас появится два ярлыка в меню Пуск, один из которых запускает rxvt без X-сервера.
Преимущества использования rxvt:
- Автоматическая поддержка функции копирования и вставки по средней кнопке мыши без дополнительных настроек.
- Простота использования и легкость в настройке.
Если вам необходимо изменить какую-либо конфигурацию в rxvt, вы можете обратиться к документации по следующему пути:
/usr/share/doc/Cygwin/rxvt-<версия>.README
Альтернативы: mintty и puttycyg
Другой популярный эмулятор терминала — это mintty, который также поддерживает поведение вставки и копирования текста, аналогичное тому, что вы видите в ОС X и Linux. Установите его через Cygwin, следуя тем же шагам, что и для rxvt.
Если вы предпочитаете использовать PuTTY, рассмотрите возможность установки puttycyg — патченной версии PuTTY, которая позволяет использовать его в качестве локального терминала Cygwin.
2. Настройка AutoHotkey
Если вы не хотите менять терминал, вы можете использовать AutoHotkey для программирования поведения средней кнопки мыши:
; Программа для настройки средней кнопки мыши
MButton::
{
; Проверяем находится ли курсор над текстовым полем
if (A_Cursor = "IBeam")
{
prevClipboard := A_Clipboard
A_Clipboard := ""
; Копируем выделенный текст
Send("^c")
ClipWait(0.5)
if (A_Clipboard != "")
{
return
}
; Вставка из буфера обмена
A_Clipboard := prevClipboard
Send("^v")
}
else
{
; Обычное действие для средней кнопки мыши
Send("{MButton}")
}
}
С этим скриптом, щелчок средней кнопкой мыши будет работать аналогично тому, как работает в Linux или ОС X.
3. Проверка оборудования
Не забудьте удостовериться, что ваша мышь корректно распознает нажатия средней кнопки. В случае использования сенсорной панели проверьте настройки жестов, так как они могут влиять на работу.
4. Альтернативные сочетания клавиш
Кроме того, вы можете использовать альтернативные сочетания клавиш, такие как Shift + Insert
, которые часто работают как вставка в большинстве терминалов.
Заключение
Настройка Cygwin для поддержки копирования и вставки с помощью средней кнопки мыши требует замены стандартного терминала на более функциональный, такой как rxvt или mintty, либо использования AutoHotkey. Это значительно улучшит ваш опыт работы с Cygwin, сделав его более похожим на привычное поведение в Linux и ОС X.