Как можно настроить emacs для правильного приема комбинаций курсора Shift и Alt?

$ awk '
    NR==FNR{ sp[$0]; next }        # this is for reading species data into sp array
    /species/ {                    # from this point for moldata's lines
        if (substr($0,2) in sp) {  # if the read line match with data in sp array
            print                  # first print title
            while(getline > 0) {   # and then read until blank line and print
                if (NF == 0) { print ""; break }
                print 
            } 
        }
    }
' species_list moldata 
>species_1
?????????CACTTGGArGGTGGAGCCAAGAAGGTTATTATTTCTGCTCCCAGTGCTGACGCGCCCATGTACGTGGTC
TGTCAACCTCGATTCTTATGACCCATCTGCTAAGGTCATTTCGAATGCTTCCTGCACCACCAACTGCCTCGCTCCCCT

>species_3
CAAAGCCGTAGGCAAAGTCATTCCTGCTCTCAACGGTAAACTGACTGGCATGGCCTTCCGTGTTCCCGTTCCAAATGT
CGGTTGTGGATCTTACTGTTCGCyTGGGAAAACCAGCCTCTTATGACrCCATTAAACAGAAGGTCAAGGAGGCTGCTG

>species_5
GTTCCGCAAAGCTCAATGCCCTATTGTTGAGCGTCTGACCAATTCTCTCATGATGCATGGCCGCAACAACGGCAAGAA
TGATGGCAGTGCGAATTGTTAAGCATGCCTTTGAAATCATCCACCTTCTGACTGGAGAGAATCCTCTTCAAGTACTCG
1
09.07.2017, 12:08
3 ответа

Следуя совету Жиля в его комментарии к вопросу и еще нескольким поискам в Интернете, я наткнулся на эту ссылкуhttps://github.com/bendikro/emacs-conf/blob/master/emacs-conf/key-bindings.elс некоторыми разделами, определяющими ключи соответствующим образом.

;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; Fix for screen / tmux
;; some snipped code

;; Fix ALT + arrow keys inside screen/tmux
(define-key input-decode-map "\e[1;3A" [M-up])
(define-key input-decode-map "\e[1;3B" [M-down])
(define-key input-decode-map "\e[1;3C" [M-right])
(define-key input-decode-map "\e[1;3D" [M-left])

Я также скопировал и адаптировал его для Shift, и теперь он работает нормально.

1
27.01.2020, 23:24

Это настройки в самих приложениях, объединенных с терминалом.

Поведение DEC VT, которое имитируется Xterm, отправляет расширенное ключевое событие в виде управляющей последовательности с параметрами. Многие наивные программы не могут их правильно декодировать, так как они ошибочно полагают, что последовательности управления с клавиатуры будут простыми последовательностями управления без параметров. Некоторые из них настолько наивны, что даже не ищут должным образом промежуточные и конечные символы. В конечном итоге они декодируют только часть управляющей последовательности, а остальное обрабатывают как обычный ввод, что приводит к таким странностям, как то, что вы видите.

vim способен корректно декодировать такие последовательности клавиш, и как убедиться в этом, объясняется в разделе xterm-modifier-keysего справки в строке -.

nvim тоже естьхотя для этого не требуется настраивать переменные termcap так, как это делается для vim.

Загвоздка в том, что приложения, подобные этому и , требуют, чтобы терминал думал, что он находится в режиме клавиш курсора приложения и режиме клавиатуры приложения . Обычно терминалы находятся в нормальном режиме клавиш курсора и нормальном режиме клавиатуры . Эти приложения сообщают терминалу о необходимости переключения режимов на время, распечатывая управляющую последовательность на терминале.

1
27.01.2020, 23:24

Описание терминала (предполагает, что ваш TERMустановлен на "xterm" )предоставляет необходимую информацию (см., например, комментарий перед записьюxterm+pcfkeys).

xterm с 1999 г.(и его подражатели konsole и gnome -терминал, начиная с нескольких лет спустя --см. xterm FAQ)предоставляют расширенный набор функций -клавиши с использованием модификаторов shift -, control -, alt -и meta -:

add parameters to function keys to indicate if shift, control or alt are set. The codes are based on a description of a DEC VT510 with a PC keyboard

Вопрос о том, является ли xterm «имитацией» DEC VT, конечно :спорный в то время, не было -свободно доступного руководства, поэтому «описание» было отправлено по электронной почте в несколько строк текста. Ожидайте некоторых вариаций.

Первоначальное поведение было изменено в 2002 году , заставив xterm отправлять число в качестве второго параметра, чтобы указать, какие модификаторы используются (после «1», что emacs может интерпретировать как повтор -считать ).

Интересно продолжение с примерами для vim и emacs со ссылкой на konsole:

  • Обе программы являются termcap приложениями, что означает, что (хотя подробности были предоставлены в описании terminfo более 10 лет, ни одна из этих программ на самом деле использует описание терминала, потому что имена , которыми ссылаются на эти возможности, не являются (и, вероятно, никогда не будут )найдены в файле termcap.
  • Обе программы имеют некоторые обходные пути, например, документация vim для xterm -сдвинутые -клавиши , xterm -модификатор -клавиши , xterm -коды .Для emacs документация не такая краткая (как обсуждение раскладок например ), но она помогает читать исходный -код, например, lisp/term/xterm.эль
  • Интересно то, что то, что повторяет emacs, отличается от того, что повторяет vim, и что первое напоминает более старое/устаревшее поведение. Он не только устарел, но и разработчики терминалов konsole и gnome -, скопировавшие его, не удосужились следить за изменениями xterm более десяти лет (, что привело к многочисленным сообщениям об ошибках -). Обходной путь emacs может быть результатом этого.
1
27.01.2020, 23:24

Теги

Похожие вопросы