Windows 10 linux bash shell ctrl + space не встановлює позначку в Emacs


12

У Windows 10 я встановив підсистему для Linux Bash. Але у мене проблема з ярликом у Emacs Ctrl+ spaceне встановлює позначку.

Що я спробував і не допоміг:

  • Я спробував зняти прапорець "включити клавіші клавіш Ctrl" у меню властивостей консолі Windows

  • Я без успіху намагався використовувати різні термінали ConEmu.

Цікаво, чи це якимось чином пов’язане з ubuntu, який має подібні проблеми з ctrl + space, і Windows Linux Linux використовує сховища 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та збережіть файл / etc / ssh / sshd_config .

    Якщо тут щось піде не так, ви можете відновити файл, повторивши крок №1.

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

(Зверніть увагу , що описані вище кроки будуть НЕ самі по собі, зробити систему , здатну приймати SSH з'єднання від інших хостів. Щоб зробити це, ви повинні будете також змінити правила вашого брандмауера Windows , щоб дозволити вхідні TCP - порт 22.)

В іншій відповіді ви сказали: "але шпаклівка не є локальним терміналом". Я не впевнений, чи не знали ви, що ви можете користуватися localhostтаким чином, або якщо ви відхилили PuTTY через більший накладний та місцевий термінал. Якщо останнє, я б не хвилювався, інтерактивний сеанс SSH - це надзвичайно легке навантаження. (Це, звичайно, набагато менше навантаження, ніж запуск системи X Window, щоб ви могли запустити GUI Emacs або xterm!)

Єдиним реальним недоліком для запуску цього способу проти прямого терміналу є те, що події вставлення надсилаються буквально за листом, як якщо б ви швидко набрали вміст буфера обміну, що може спричинити електричні пари, відступи, розширення фрагмента тощо вогонь. (Вставлення не повинно спричиняти заготівлі команд-брелоків, оскільки існує логіка виявлення вставленої вставки та відключення брелоків до завершення вставки.)

І є принаймні одна дуже велика перевага перед стандартним терміналом Bash: події миші підтримуються PuTTY у формі, на яку Emacs може реагувати, тож, за іронією долі, ви можете переміщати точку мишкою в PuTTY, навіть якщо можете " t з місцевим терміналом.


5

Я використовую ConEmu. Немає елегантного способу, але вирішити його можна за допомогою макросу.

  1. Відкрийте "Налаштування" (Клацніть на піктограму вгорі).
  2. Клацніть на "Клавіші та макроси".
  3. Праворуч прокрутіть вниз, доки не з’явиться параметр "Макрос 01" .. "Макрос 32" та виберіть будь-який доступний (не має значення).
    Візьмемо для цього прикладу Макрос 01 .
  4. Виберіть "Пробіл" у першому спадному меню.
  5. Виберіть "Ctrl" у другому спадному меню. Залиште 2 спадні меню недоторканими.
  6. Вставте нижче в поле макросу GUI :

    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 + простір просто надсилає звичайний простір.

І це ж питання з ssh-сеансом для будь-якої іншої машини Linux, ctrl + простір надсилається як звичайний простір.

Така ж поведінка і з будь-яким іншим терміналом на базі Windows (conemu, consolez, MobaXTerm) - за винятком шпаклівки, це може добре впоратися, але шпаклівка не є локальним терміналом.

Я думаю, що у терміналах Windows немає відображень для деяких послідовностей. Така ж проблема є і з іншими комбінаціями, такими як ctrl + 1 ctrl + 2 .. і т.д. Тут потрібен термінал, який може обробляти відображення клавіатури для себе, як шпаклівка, наприклад.

Я вважаю, що це питання слід вирішити в майбутніх випусках терміналу Windows bash.


Ще гірше, що, здається, не проходить і ctrl- @, що є іншим обов'язковим для встановлення позначки. Якщо хтось справжній зв'язує, він може використовувати Mx set-mark-command. Наразі, мабуть, правильним є встановлення ключового прив’язки до чогось іншого.
Jim Hunziker

@JimHunziker Враховуючи, що set-mark-commandце, мабуть, найбільш часто використовувана команда в Emacs (окрім self-insert-command), перекваліфікація пальців для цього - справді дуже крутий запит - особливо якщо ви використовуєте Emacs протягом 25 років, як я.
Трей

@Trey додав ще одну відповідь, якщо ви не проти запустити xming на Windows
Pawel Dubiel

@PawelDubiel Дивіться мою відповідь, щойно додану. (Я дав більш детальні вказівки, ніж потрібно для вас, щоб допомогти наступним читачам.) Ви звільнили PuTTY чомусь, але не сказали, що це за причина. Це, безумовно, варіант, який накладає набагато менше навантаження на систему, ніж xming + X-термінал.
Трей

2

Цей проект дозволяє використовувати MinTTY як альтернативний термінал: https://github.com/mintty/wsltty . Він походить від PuTTY, але не вимагає SSH. І як PuTTY, він просто обробляє Ctrl-простір.


1

Ця проблема тепер виправлена ​​в Windows 10, збірці 14965 . Перевірка:

[Environment]::OSVersion

І встановлюйте оновлення, якщо ви цього не зробили!


Будь ласка, додайте детальніше до своєї відповіді - посилання може перестати працювати в якийсь момент, коли ваша відповідь стане марною.
djsmiley2kStaysInside

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 На цьому етапі ми вже повинні побачити новий термінал у Xming. І ми можемо запускати emacs в термінальному режимі.

emacs -nw

І всі прив’язки зараз працюють просто чудово

відповідна дискусія тут https://github.com/Microsoft/BashOnWindows/isissue/531


Чому це найкраще рішення щодо використання PuTTY? Якщо ви збиралися запускати Emacs в режимі GUI, я б це зрозумів, але ваше використання -nwзмушує його працювати в терміналі, як і в PuTTY, за винятком того, що вам зараз доведеться запускати всю другу систему вікон - з мій швидкий тест, це обійдеться вам майже в 500 Мб пам'яті, крім запуску sshd і PuTTY, і буде мати аналогічно більшу вартість процесора.
Трей

@trey 500MB Ви впевнені? у моїй системі рівно 5 Мб
Pawel Dubiel

Ах, я неправильно прочитав одиниці, ви маєте рацію. Але порівнянне число sshd + PuTTY становить приблизно 25% від іншого числа, що б воно не було ;-)
Trey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.