проблемы emacs -nw с cscope и терминалами

#emacs #xterm #cscope

#emacs #xterm #cscope

Вопрос:

Несколько проблем с emacs в term Windows. Приветствуется любая помощь.

a. Я запускаю emacs по ssh с emacs -nw с включенным cscope. После поиска символа или определения в буфере cscope, когда я нажимаю «enter», emacs выдает сообщение — Buffer доступен только для чтения. В то время как та же функциональность в emacs с xwindows (gtk или что-либо еще) приводит меня к файлу и строке в буфере редактирования. Как я могу использовать ту же функциональность с ’emacs -nw’.

b. Также метка стрелки в буфере редактирования / исходного кода, когда я делаю следующую ссылку на символ из буфера cscope, остается в буфере редактирования. Как я могу заставить это работать?

c. Мои ключи сопоставлены с функциями cscope точно так же, как в xcscope.el. Все управляющие клавиши ожидают, что Ctrl-F3 и Ctrl-F4 будут работать. Как я могу включить это тоже.

Большое спасибо,

Ответ №1:

a. Добавьте следующее в свой файл .emacs:

 (define-key global-map (kbd "r") [return])
  

Я получил ответ от http://weenix.cs.brown.edu/mediawiki/index.php/Cscope

b. Если вы нажмете пробел в буфере cscope, вы увидите стрелку. Это просто проблема с отображением; файл не изменился. Если вы хотите избавиться от этого, добавьте следующее в свой файл .emacs:

 (setq cscope-allow-arrow-overlays nil)
  

Ответ №2:

терминал отправляет последовательности ключей, отличные от ожидаемых emacs. вам необходимо предоставить переводы для типа терминала, чтобы emacs работал правильно. например, у меня есть эта конфигурация для настройки используемого терминала (странный символ — это буквальный символ «escape», который вы можете ввести с помощью "C-q <esc>" :

 (let ((map (if (boundp 'input-decode-map)
               input-decode-map function-key-map)))
  (define-key map (kbd "RET") [return])

  (define-key map "[OA" (kbd "<C-up>"))
  (define-key map "[OB" (kbd "<C-down>"))
  (define-key map "[OC" (kbd "<C-right>"))
  (define-key map "[OD" (kbd "<C-left>"))

  (define-key map "[A" (kbd "<C-up>"))
  (define-key map "[B" (kbd "<C-down>"))
  (define-key map "[C" (kbd "<C-right>"))
  (define-key map "[D" (kbd "<C-left>"))

  (define-key map "OA" (kbd "<M-up>"))
  (define-key map "OB" (kbd "<M-down>"))
  (define-key map "OC" (kbd "<M-right>"))
  (define-key map "OD" (kbd "<M-left>"))

  (define-key map "[OA" (kbd "<M-C-up>"))
  (define-key map "[OB" (kbd "<M-C-down>"))
  (define-key map "[OC" (kbd "<M-C-right>"))
  (define-key map "[OD" (kbd "<M-C-left>"))

  (define-key map "[[17~" (kbd "<C-f6>"))
  (define-key map "[[18~" (kbd "<C-f7>"))
  (define-key map "[[19~" (kbd "<C-f8>"))
  (define-key map "[[20~" (kbd "<C-f9>"))
  (define-key map "[[21~" (kbd "<C-f10>"))
  (define-key map "[[23~" (kbd "<C-f11>"))
  (define-key map "[[24~" (kbd "<C-f12>"))

  (define-key map "e[1~" [home])
  (define-key map "e[4~" [end])
  (define-key map "ee[1~" [M-home])
  (define-key map "ee[4~" [M-end])
)
  

в некоторых терминалах вы можете получить код ключа, введя «C-v», а затем нужные клавиши. это должно вывести фактические коды клавиш, которые терминал отправляет для клавиш, которые вы нажали после «C-v».