Windows 10 linux bash shell ctrl+space не устанавливает отметку в Emacs

Windows 10 linux bash shell ctrl+space не устанавливает отметку в Emacs

В Windows 10 я установил Subsystem for Linux Bash. Но у меня проблема с сочетанием клавиш в Emacs Ctrl+ spaceне устанавливается точка отметки.

Что я пробовал и что не помогло:

  • Я попытался снять флажок «Включить сочетания клавиш Ctrl» в меню свойств консоли Windows.

  • Я пробовал использовать другой терминал ConEmu, но безуспешно.

Интересно, связано ли это как-то с Ubuntu, у которого есть похожие проблемы с Ctrl + Space, а Windows Linux Bash использует репозитории Ubuntu.

решение1

Нет никакихрешенияк этому, с точки зрения передачи Ctrl-Space через терминал Bash, на момент написания этой статьи (1 сентября 2016 г.) — но есть обходной путь, который может быть достаточным для многих пользователей: используйте PuTTY для подключения через SSH, что принудительно обрабатывает Ctrl-Space. (В режиме tty невозможно отличить Ctrl-Space от Ctrl-@, поскольку это один и тот же код символа, но это не должно быть проблемой, поскольку по умолчанию Emacs настроен на обработку set-mark-commandтаким образом.)

  1. Установите сервер OpenSSH с помощью sudo apt-get install openssh-server. Если он уже установлен, удалите его ( sudo apt-get remove openssh-server), а затем переустановите, чтобы сбросить файлы конфигурации.
  2. Редактировать/etc/ssh/sshd_configфайл (с sudo), как показано ниже:

    • Если есть незакомментированная строка настройки PermitRootLogin, закомментируйте ее. Добавьте строку PermitRootLogin no.
    • Добавьте строку AllowUsers USERNAME, заменив USERNAME на свое имя пользователя Linux (если вы не знаете, что это такое, выполните команду whoamiв командной строке Bash).
    • В идеале вам следует настроить беспарольную аутентификацию с использованием ключей SSH, но как это сделать, выходит за рамки этого вопроса (есть много руководств; поищите в Интернете "passwordless ssh-keygen"). Тем временем добавьте или раскомментируйте строку PasswordAuthentication yes.
    • Установите UsePrivilegeSeparation no; скорее всего, вы найдете строку в файле, в которой говорится UsePrivilegeSeparation yes; просто измените yesна noи сохраните/etc/ssh/sshd_configфайл.

    Если что-то пойдет не так, вы можете восстановить файл, повторив шаг №1.

  3. Запустите SSH-сервер с помощью команды sudo service ssh --full-restart.
  4. Использование PuTTY (скачатьздесь), войдите localhostв поле Hostname, все остальное оставьте по умолчанию. Вам будет предложено ввести имя пользователя Linux и пароль.
  5. Выполнить emacs. Ctrl-пробел установит желаемую отметку.

(Обратите внимание, что шаги, описанные выше,нет, сами по себе делают вашу систему способной принимать SSH-подключения отдругойхосты. Для этого вам также придется изменить правила брандмауэра Windows, чтобы разрешить входящий TCP-порт 22.)

Вдругой ответвы сказали: "но putty не локальный терминал". Я не уверен, не знали ли вы, что можете использовать его localhostтаким образом, или вы отвергали PuTTY из-за больших накладных расходов по сравнению с локальным терминалом. Если последнее, я бы не беспокоился, интерактивный сеанс SSH - это чрезвычайно легкая нагрузка. (Это, конечно,много(Меньшая нагрузка, чем при работе в X Window System, поэтому вы можете запустить графический интерфейс Emacs или xterm!)

Единственным реальным недостатком такого способа работы по сравнению с обычным терминалом является то, что события вставки отправляются побуквенно, как если бы вы очень быстро вводили содержимое буфера обмена, что может привести к срабатыванию электрических пар, отступов, расширения фрагментов и т. д. (Вставка должнанет(заставляют срабатывать команды сочетания клавиш, поскольку существует логика для обнаружения выполняемой вставки и отключения сочетаний клавиш до завершения вставки.)

И есть, по крайней мере, одно очень большое преимущество перед стандартным терминалом Bash: события мыши поддерживаются PuTTY в форме, на которую может реагировать Emacs, так что, по иронии судьбы, вы можете перемещать точку с помощью мыши в PuTTY, даже если вы не можете этого сделать с помощью локального терминала.

решение2

Я использую ConEmu. Элегантного способа нет, но можно решить с помощью макроса.

  1. Откройте «Настройки» (нажмите на значок вверху).
  2. Нажмите «Клавиши и макросы».
  3. С правой стороны прокрутите вниз, пока не увидите параметры «Макрос 01»... «Макрос 32», и выберите любой доступный вариант (не имеет значения).
    ДавайтеМакрос 01для этого примера.
  4. В первом выпадающем меню выберите «Пробел».
  5. Выберите «Ctrl» во втором выпадающем меню.Оставьте оставшиеся два раскрывающихся меню нетронутыми.
  6. Вставьте ниже вМакрос графического интерфейсаполе:

    keys("\e");keys("x");keys("s");keys("e");keys("t");keys("-");keys("m");keys("a");keys("r");keys("k");keys("-");keys("c");keys("o");keys("m");keys("m");keys("a");keys("n");keys("d");keys("\n")
    
  7. Вышеприведенный код по сути отправляет M-x select-mark-commandстроку в emacs.Теперь нажмите «Сохранить настройки».


В итоге должно получиться так:

введите описание изображения здесь

решение3

Этот проект позволяет использовать MinTTY в качестве альтернативного терминала:https://github.com/mintty/wsltty. Он получен из PuTTY, но не требует SSH. И как PuTTY, он отлично обрабатывает Ctrl-пробел.

решение4

Эта проблема теперь исправлена ​​вWindows 10 сборка 14965. Проверять:

[Environment]::OSVersion

И установите обновления, если вы этого еще не сделали!

Связанный контент