Gelen + Yukarı bir terminal Emacs tarafından tanınmayan Shift terminalleri kaçış dizileri içine en fonksiyon tuşları tercüme nasıl açıklamak için uygulamalar ve terminaller ileten karakterleri (ya da daha doğrusu bayt) değil, anahtarlar arasındaki arayüz. Yalnızca birkaç değiştirici + karakter kombinasyonu kendi karakterine sahiptir:
- Ctrlartı bir harf veya
@[\]^_
0–31 baytlık dönüşlerden biri (ASCII kontrol karakterleri ).
- Genellikle Ctrl+ ?bayt 127'ye dönüşür ve Ctrl+ + (bayt 0) Spaceile eşdeğerdir .Ctrl@
- Bazı fonksiyon tuşları kontrol karakterlerine eşdeğerdir: Tab= Ctrl+ I, Return= Ctrl+ M, Esc= Ctrl+ [.
- Ve yapılandırmaya bağlı olarak Backspace= Ctrl+ Hveya Ctrl+ ?. Ctrl+ ?Beri Emacs için daha uygundur Ctrl+ Hyardımdır.
- Meta+ karakteriyle takip edilen characterşekilde gönderilir .Esc
Peki diğer gibi kombinasyonları hakkında Ctrl+ ;veya Ctrl+ Shift+ letter? Karşılık gelen bir karakter olmadığından, terminal bir karakteri tekrar kullanmak veya bir kaçış sırası göndermek zorundadır. Hiçbir karşılık gelen karakter olduğunda bilgi sahibi ile bitirmek böylece birçok terminalde değiştiricileri görmezden Ctrl+ ;göndererek ;
, Ctrl+ Shift+ lettereşdeğer Ctrl+ lettervb
Terminal satıcıları uzun süre basit olanı yapmaya devam etti. Kendiliğinden devam eden kaçış dizileri için bir standart yoktu - terminal satıcıları bunu uygulamıyor, uygulamalar desteklemiyor, kullanıcılar beklemiyor. Bazı terminal emülatörleri isteğe bağlı kaçış dizileri gönderecek şekilde yapılandırılabilir, böylece sizinkini kurabilir ve kaçış dizilerini Emacs'a bildirebilirsiniz (daha fazlası için).
Son zamanlarda, durum değişiyor, çünkü kaçış dizilerini standart hale getirmek için iki teklif var. Biri LeoNerd'in sözdizimi olan libtermkey'idir . Bir diğeri ise Thomas Dickey'in sözdizimi ile olan xterm'sidir . Xterm'in (≥216) geçerli sürümleri, kaynak ayarlanarak her iki sözdizimi için yapılandırılabilir ; özellik sıfır olmayan bir değere ayarlanarak etkinleştirilmelidir .ESC [ codepoint ; modifier u
ESC [ 2 7 ; modifier ; codepoint ~
formatOtherKeys
modifyOtherKeys
Terminal emülatörünüz bu sözdizimlerini desteklemiyor ancak yapılandırılabilirse, ikisinden birini seçin.
Emacs modifyOtherKeys
24.4'ten bu yana, terminalin xterm versiyonu m216 olduğunu tespit ettiğinde Emacs özelliği otomatik olarak açar. Emacs'in tuşları kodlamak için kaçış dizileri tespiti değişkende işe yarar local-function-key-map
. Emacs 24.4'ten itibaren, tüm kaçış dizileri desteklenmemektedir. İşi tamamlamak için init dosyanızda aşağıdaki kodu kullanabilirsiniz.
;; xterm with the resource ?.VT100.modifyOtherKeys: 1
;; GNU Emacs >=24.4 sets xterm in this mode and define
;; some of the escape sequences but not all of them.
(defun character-apply-modifiers (c &rest modifiers)
"Apply modifiers to the character C.
MODIFIERS must be a list of symbols amongst (meta control shift).
Return an event vector."
(if (memq 'control modifiers) (setq c (if (or (and (<= ?@ c) (<= c ?_))
(and (<= ?a c) (<= c ?z)))
(logand c ?\x1f)
(logior (lsh 1 26) c))))
(if (memq 'meta modifiers) (setq c (logior (lsh 1 27) c)))
(if (memq 'shift modifiers) (setq c (logior (lsh 1 25) c)))
(vector c))
(defun my-eval-after-load-xterm ()
(when (and (boundp 'xterm-extra-capabilities) (boundp 'xterm-function-map))
(let ((c 32))
(while (<= c 126)
(mapc (lambda (x)
(define-key xterm-function-map (format (car x) c)
(apply 'character-apply-modifiers c (cdr x))))
'(;; with ?.VT100.formatOtherKeys: 0
("\e\[27;3;%d~" meta)
("\e\[27;5;%d~" control)
("\e\[27;6;%d~" control shift)
("\e\[27;7;%d~" control meta)
("\e\[27;8;%d~" control meta shift)
;; with ?.VT100.formatOtherKeys: 1
("\e\[%d;3u" meta)
("\e\[%d;5u" control)
("\e\[%d;6u" control shift)
("\e\[%d;7u" control meta)
("\e\[%d;8u" control meta shift)))
(setq c (1+ c))))))
(eval-after-load "xterm" '(my-eval-after-load-xterm))
Eğer TERM
ortam değişkeni ayarlanmamış xterm
gibi bir varyant veya xterm-256color
Emacs olan sekansları aktif hale gelmez. Emacs zaten değerinizi TERM
destekliyorsa , adı değeri olan Lisp dosyasını yüklediktenTERM
sonra yürütülecek yukarıdakilere benzer bir işlev tanımlayarak destek ekleyebilirsiniz . Emacs böyle bir dayanak varsa, adında bir alt dizin oluşturarak ekleyebilirsiniz term
yerde Gözlerinde farklı load-path
ve adında bir Lisp dosyası oluşturarak değeridir adlı bir fonksiyon tanımlayan .term/$TERM.el
$TERM
TERM
terminal-init-$TERM
Yazarken, xterm dışındaki birkaç terminal emülatörünün bu kaçış dizilerini benimsediği görülüyor. OSX'te, her bir tuş kombinasyonu için birer birer çıkış sırası seçerek iTerm2'yi yapılandırabilirsiniz .
C-;
ve daha sonraM-x view-lossage
Emacs'a ulaşıp ulaşmadığını görmek için kullanın.