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

12

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

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

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

  • Я пытался использовать разные терминалы ConEmu безуспешно.

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

Павел Дубиель
источник

Ответы:

3

Там нет решения для этого, с точки зрения создания 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, но как это сделать, выходит за рамки этого вопроса (доступно множество руководств; поищите в Интернете «пароль без пароля ssh-keygen»). А пока добавьте или раскомментируйте строку PasswordAuthentication yes.
    • Установить UsePrivilegeSeparation no; скорее всего, вы найдете в файле строку с надписью UsePrivilegeSeparation yes; просто изменить , yesчтобы noи сохранить / / SSH / sshd_config и т.д. файл.

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

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

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

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

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

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

тройка
источник
5

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

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

    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. Теперь нажмите «Сохранить настройки».


В итоге это должно выглядеть так:

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

Акира Исикава
источник
работает как шарм. Фантастический!
chriskelly
2

При запуске showkey -aв консоли windows / ubuntu-bash он показывает, что ctrl + space просто отправляет простое пространство.

И это та же проблема с сессией ssh ​​на любой другой машине с Linux. Ctrl + space отправляется как обычное пространство.

То же самое происходит с любым другим терминалом на основе Windows (conemu, consolez, MobaXTerm) - за исключением того, что putty может справиться с этим хорошо, но putty не является локальным терминалом.

Я думаю, что терминалы Windows не имеют сопоставлений для некоторых последовательностей. Та же проблема с другими комбинациями, такими как ctrl + 1, ctrl + 2 и т. Д. Здесь требуется терминал, который может обрабатывать раскладки клавиатуры для себя, например, для замазки.

Я считаю, что эта проблема должна быть исправлена ​​в будущих выпусках терминала Windows Bash.

Павел Дубиель
источник
Хуже того, он также не передает ctrl- @, что является другой привязкой для set-mark. Если кто-то действительно привязан, он может использовать команду Mx set-mark-command. Вероятно, сейчас нужно сделать привязку ключа к чему-то другому.
Джим Хунзикер
@JimHunziker Учитывая, что set-mark-commandэто, пожалуй, наиболее часто используемая команда в Emacs (помимо self-insert-command), переподготовка пальцев для этого - действительно очень сложная задача, особенно если вы использовали Emacs уже более 25 лет, как я.
Trey
@Trey добавил еще один ответ, если вы не против запустить xming на windows
Pawel Dubiel
@PawelDubiel Смотрите мой ответ только что добавил. (Я дал более подробные инструкции, чем требовалось, чтобы вы помогли более поздним читателям.) Вы почему-то уволили PuTTY, но не сказали, что это за причина. Это, безусловно, вариант, который загружает систему намного меньше, чем xming + X терминал.
Трей
2

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

Джоэл Дайс
источник
1

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

[Environment]::OSVersion

И установите обновления, если у вас их нет!

oblio
источник
Пожалуйста, добавьте больше деталей к вашему ответу - ссылка может перестать работать в какой-то момент, когда ваш ответ становится бесполезным.
djsmiley2k TMW
0

Есть взлом, так как мы можем установить X Server для Windows

1 первая установка xming для windows

2 начало xming

3 тогда из windows bash установить

sudo apt-get install rxvt-unicode-256color

4 затем откройте cmd.exeи запустите

bash.exe -c "urxvtd -q -o -f; bash" 

теперь мы в консоли bash и запускаем

(DISPLAY=:0 urxvtc &)

5 На этом этапе мы уже должны увидеть новый терминал в Синмин. И мы можем запустить Emacs в режиме терминала.

emacs -nw

И все привязки теперь работают просто отлично

соответствующее обсуждение здесь https://github.com/Microsoft/BashOnWindows/issues/531

Павел Дубиель
источник
Почему это лучший обходной путь использования PuTTY? Если бы вы собирались запускать Emacs в режиме графического интерфейса, я бы это понял, но ваше использование -nwзаставляет его работать в терминале, так же, как и в PuTTY, за исключением того, что теперь вам приходится запускать всю вторую оконную систему - из Мой быстрый тест, это обойдется вам почти в 500 МБ памяти, помимо запуска sshd и PuTTY, и будет стоить столько же ресурсов процессора.
Трей
@trey 500MB ты уверен? в моей системе ровно 5 Мб
Павел Дубиль
Ах, я неправильно понял единицы, вы правы. Но сравнимое число sshd + PuTTY составляет около 25% от другого числа, каким бы оно ни было ;-)
Trey