/ / writing lisp emacs key binding и не може да определи знака <elete> - emacs, клавишни комбинации, elisp

писане на lisp emacs свързване на ключове и не може да определи символа <delete> - emacs, keyboard-shortcuts, elisp

По някаква причина получих ключа M-del по подразбиранезадължителен за обратна-убие-дума, нанесена на сканиране за съвпадение на скоби и нулиране не работи, така че аз се опитвам да настроя обвързващия глобален ключ в lisp. Така че написах в ~ / .emacs.d / init.el командите lisp:

(глобално зададен ключ (kbd "M-h") "дума-назад-убие)

(global-set-key (kbd "M- <Изтрий>")

Опитах ги с C-x C-e и двамата дават"изход назад-убий-дума, но само първото свързване с ключ работи" Mh ", другото се игнорира и M-del все още се опитва да извърши странното действие за сканиране. не се свързва с физическия ключ в lisp (и обратната наклонена черта е там, за да се покаже в този текст само когато думата е била коментирана). Някаква идея каква ключова дума да се използва или специален знак? Най-добър.

(Потърсих библиотеки, които може да са заменили тази команда, но не мога да ги намеря)

Отговори:

6 за отговор № 1

На някои системи delete ключът се дефинира като псевдоним на C-d, Това става чрез function-key-map за GNU Emacs <23 и local-function-key-map относно GNU Emacs 23. (Наблюдавах това поведение в Debian и Ubuntu 10.04 под X.) Целта на такива преводи е да изолира хората, които кодират режими от тънкостите на терминала: режим, който иска да заснеме командата за изтриване, трябва само да се ребрибу C-d и не се чудя дали трябва да се върне delete (това е изтриване наляво или изтриване правилно?) или deletechar или нещо друго.

Ако има глобално или местно обвързване за delete, тя засенчва този превод на C-d, Въпреки това, ако натиснете ESC delete, ако няма глобално или местно обвързване за ESC delete, вторият ключ е преведен на C-d, Този превод има предимство пред тълкуването на ESC delete като M-delete, Така ESC delete става еквивалентно на C-M-d.

Това е може би бъг в Emacs: ефектът от ESC delete трябва да са същите като M-delete, и няма причина защо ESC delete ще тече down-list което няма нищо общо с заличаването.

Има няколко възможни поправки; Не знам кое е най-доброто. Едно трябва да работи с всяка версия на Emacs

(global-set-key [?e delete] "backward-kill-word)

2 за отговор № 2

Наистина хубаво нещо kbd е, че това, което пишете, е същият низ, който показва Emacs. Така че, опитайте следното

C-h k M-<delete>       (to use your syntax)

или

M-x describe-key M-<delete>

Emacs (за мен) отговаря с:

M-DEL (в превод от <M-delete>) изпълнява командата back-kill-word, който е интерактивен компилиран Lisp функция в "simple.el".

Той е обвързан с M-DEL.

(аргумент „назад-убий-дума“)

....

Което можете да видите показва, че представянето на ключа, който искате, е M-DEL или M-delete.

Което е дълъг начин да стигнем до точката, че това, което искате, е

(global-set-key (kbd "M-delete") "backward-kill-word)

Разбира се, ако имате нещо във вашето .emacs, което го замества, горепосоченото няма да помогне.


1 за отговор № 3

Може да искате да се обадите global-set-key интерактивно, за да видим как интерпретира мета-изтриване. Също така опитайте local-set-key за да се гарантира, че странното свързване не е специфично за режима.


0 за отговор № 4

След като не успях да открия библиотеката, в която се намира конфликтът, открих тази уеб страница http://www.cs.cmu.edu/cgi-bin/info2www?%28emacs%29Rebinding

Интерактивното променяне на ключовите свързвания ...

"M-x глобално зададен ключ KEY CMD" Определете KEY глобално, за да изпълните CMD ....

Обикновено, C-z" is bound to the function suspend-emacs "(когато не използвате системата X Window), но можете промяна C-z" to invoke an interactive subshell within Emacs, by binding it toчерупка “, както следва:

 M-x global-set-key <RET> C-z shell <RET>

"global-set-key" чете името на командата след ключа натиснете бутона, появява се съобщение като това, за да можете да го потвърдите обвързвате ключа, който искате:

 Set key C-z to command:...

И сега стандартната настройка по подразбиране се връща

M-x глобално зададен ключ M-del ...

обратна убийство дума Но това е преходно и трябва да се направи за всяко презареждане, какъвто и да е начин да се направи това постоянно? Поставянето на команда в init.el не замества другия ефект


Свързани въпроси


Коментари (0)

Добави коментар