Как избежать ввода «пробела» после «^» для перемещения вверх по каталогу в dired?

9

^является ключевой привязкой для перехода в родительский каталог в dired(«Up directory»).

Тем не менее, в Gnu Emacsна Windows 7 Professional 64-bitмою немецкой раскладке клавиатуры, не достаточно , чтобы ввести «^» , но я должен набрать пространство после сделать ключ привязки работы.

Как я могу переопределить привязку клавиш, чтобы избежать необходимости нажимать пробел и двигаться вверх только с «^»?


C-h k ^<space> возвращается

^ запускает команду dired-up-directory, которая представляет собой интерактивно скомпилированную функцию Lisp в `dired + .el '.

Это связано с ^.

(dired-up-каталог & необязательное ОКНО)

Запустите Dired в родительском каталоге текущего каталога. Найдите родительский каталог в этом или другом буфере. Создает буфер при необходимости.

В большинстве случаев безвредна
источник
4
Это проблема ОС, так как это поведение звучит как залипание клавиш и встроено в определенные сочетания клавиш, например в us-intlLinux.
Васамаса
Похоже, васамаса - это правильно, и в этом случае вы должны спросить, как связать команду с другим ключом.
Эндрю Суонн
@AndrewSwann: Может быть, а может и нет. Это хорошая вещь, чтобы проверить, да. Но поведение Linux должно быть неуместным, если microsoft-windowsтэг уместен.
Дрю
Самый простой способ проверки этого будет искать , относится ли то же самое поведение других программ, например, путем ввода ^в notepad.exe.
Васамаса
3
Я думаю, что у вас есть только несколько вариантов: (1) использовать другую раскладку клавиатуры, в которой ^ не является мертвой клавишей - это делается на уровне операционной системы, а не в emacs, или (2) привязать какую-либо другую клавишу dired-up-directoryи использовать ее вместо этого или (3) согласитесь с проблемой и введите пробел после ^. Я иду с (3) себе, но я действительно нахожу это раздражает.
Харальд Ханче-Олсен

Ответы:

11

При настройке клавиатуры клавиша ^ скорее всего является «мертвой клавишей». Это ключ, предназначенный для использования в сочетании с другим для создания другого символа. В этом случае он предназначен для создания акцентированных символов: ^ e будет производить ê, ^ a будет производить â и так далее.

Это не должно быть специфичным для emacs: я полагаю, что все ваши приложения требуют, чтобы вы нажимали ^ и отображали фактический ^ на экране.

Чтобы решить эту проблему, вам просто нужно использовать другую раскладку клавиатуры. В случае вашего немецкого макета в среде Windows, я просто буду ссылаться на /superuser/280005/how-to-make-and-non-dead-keys-on-windows-7- with-German-Keyboard layout , надеясь, что это правильно.

YoungFrog
источник
0

Я предполагаю, что вы подтвердили привязку ^в Dired как существующую dired-up-directory, так что какая команда вызывается, это не проблема, если вы или что-то, что вы загрузили, не посоветовали эту команду. (Используйте C-h k ^и дайте нам знать, если команда рекомендуется.)

Вы пометили это с microsoft-windows. Может быть, упомянуть, какую версию MS Windows вы используете. Я не вижу этого с Windows 7 64-битной.

Видите ли вы такое же поведение, если вы запускаете Emacs с помощью runemacs -Q, т. Е. Без файла инициализации? Если да, пожалуйста, дайте рецепт здесь, начиная с runemacs -Q. В этом случае это может быть ошибка Emacs.

Если вы не видите проблемы с этим, emacs -Qто рекурсивно делите пополам ваш файл инициализации, пока не сузите его, чтобы найти виновника. Вы можете использовать команду, comment-regionчтобы закомментировать регион кода (используйте C-uего, чтобы раскомментировать регион).

Как только вы найдете код преступника, вы можете исследовать это более внимательно. Или вы можете сообщить здесь, что вы нашли, если вам нужна дополнительная помощь. Для лучшей помощи, будьте как можно конкретнее.

Что касается переопределения ключа: это не проблема - просто используйте (define-key dired-mode-map SOME-KEY 'dired-up-directory), где SOME-KEYописание ключа. Например, чтобы связать команду с C-o, вы можете использовать это:

(define-key dired-mode-map (kbd "C-o") 'dired-up-directory)

Обновлено после вашего комментария и других -

Поскольку вы видите то же самое emacs -Q, проблема заключается либо в вашей настройке MS Windows (т.е. вне Emacs), либо в самой ошибке Emacs.

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

Нарисовалась
источник
3
Это почти наверняка не относится к делу. Однако комментарий @wasamasa абсолютно уместен. Чтобы пояснить немного, суть в том, что, поскольку ^ является липким, emacs даже не видит событие нажатия клавиши, пока пользователь не введет пробел.
Харальд Ханче-Олсен
спасибо за ваш подробный ответ! Да с runemacs.exe -Qэтим то же самое. Ввод ^ в буфере вводит только символ, если я наберу <пробел> или другую клавишу после. То же самое в diredрежиме, оно должно ^1 <space>двигаться вверх. Для define-key: но я хотел бы использовать клавишу ^ для этой привязки, есть ли способ избежать ее ожидания <пробел>?
Чаще всего безобидный
@Harald: так что я могу сделать?
Чаще всего безобидный