2016-07-08 7 views
1

term-modeに適切にバインドしようとしています。プロンプト。私はpreludeパッケージを使用しています。このコードに加えて、他の人たちがここや他の場所に置かれています。Emacs 24.xとPreludeでterm-modeのterm-send-homeにキーをバインドできない

これはこれで最後に繰り返されるterm-modeコードです。私はterm-mode-mapへの結合および/またはterm-raw-mapでそれを倍増追加してみてください

(require 'term) 
(require 'multi-term) 

(defcustom term-unbind-key-list 
    '("C-z" "C-x" "C-c" "C-h" "C-y" "<ESC>") 
    "The key list that will need to be unbind." 
    :type 'list 
    :group 'multi-term) 

(defcustom term-bind-key-alist 
    '(("C-c C-c" . term-interrupt-subjob) 
    ("C-c C-j" . term-line-mode) 
    ("C-c C-k" . term-char-mode) 
    ("C-m" . term-send-raw) 
    ("C-p" . previous-line) 
    ("C-n" . next-line) 
    ("C-s" . isearch-forward) 
    ("C-r" . isearch-backward) 
    ("M-f" . term-send-forward-word) 
    ("M-b" . term-send-backward-word) 
    ("M-o" . term-send-backspace) 
    ("M-p" . term-send-up) 
    ("M-n" . term-send-down) 
    ("M-M" . term-send-forward-kill-word) 
    ("M-N" . term-send-backward-kill-word) 
    ("M-r" . term-send-reverse-search-history) 
    ("M-," . term-send-input) 
    ("M-." . comint-dynamic-complete)) 
    "The key alist that will need to be bind. 
If you do not like default setup, modify it, with (KEY . COMMAND) format." 
    :type 'alist 
    :group 'multi-term) 

(add-hook 'term-mode-hook 
      (lambda() 
      (add-to-list 'term-bind-key-alist '("A-M-[" . multi-term-prev)) 
      (add-to-list 'term-bind-key-alist '("A-M-]" . multi-term-next)))) 

(add-hook 'term-mode-hook 
      (lambda() 
      (define-key term-raw-map (kbd "C-y") 'term-paste) 
      (define-key term-raw-map (kbd "C-a") 'term-send-home))) 

(define-key term-mode-map (kbd "C-a") 'term-send-home) 

たびに、私はそれがリロードするeval-bufferC-aのキーバインドを照会すると、preludeパッケージのサブコンポーネントであるcruxライブラリの一部である、常にcrux-beginning-of-lineが参照されます。それはグローバルマイナーモードですか、私は何とかそれを殺す必要がありますか?それはterm-unbind-key-listのバインディングで始まり、この解決策と他のものと私は何を試しても、常にC-aが要点に送られます。関数。

答えて

2

私はpreludeを使用せず、cruxについては考えていませんが、以前はmulti-termを使用していました。通常、​​にはdefcustomを使用したくありません。 customizeを使用するか、通常の方法でsetqまたはsetq-defaultのような変数を設定する必要があります。以下、add-to-listを使用します。

preludeおよび/またはcruxがバインディング(マイナーモード、フック、define-key、...)を設定してから回避する方法を理解する必要があります。 term-modeにフックを追加するのと同じくらい簡単かもしれません。

(with-eval-after-load "multi-term" 
    (defun term-send-C-x() 
    "Type C-x in term-mode." 
    (interactive "*") 
    (term-send-raw-string "\C-x")) 

    (dolist 
     (bind '(("C-<right>"  . term-send-forward-word) 
       ("C-<left>"  . term-send-backward-word) 
       ("C-<backspace>" . term-send-backward-kill-word) 
       ("C-<delete>" . term-send-forward-kill-word) 
       ("C-k"   . term-send-raw) 
       ("C-y"   . term-send-raw) 
       ("C-c C-z"  . term-stop-subjob) 
       ("C-c C-x"  . term-send-C-x) 
       ("C-z"   . term-stop-subjob) 
       ("C-c C-y"  . term-paste) 
       ;; work like urxvt tabbed 
       ("<S-down>"  . multi-term) 
       ("<S-left>"  . multi-term-prev) 
       ("<S-right>"  . multi-term-next) 
      )) 
    (add-to-list 'term-bind-key-alist bind)) 
) 

私は今、以下で、sane-termを使用します:

(with-eval-after-load "term" 
    (defun term-send-reverse-search-history() 
    "Search history reverse." 
    (interactive) 
    (term-send-raw-string "\C-r")) 

    (defun term-send-esc() 
    "Send ESC in term mode." 
    (interactive) 
    (term-send-raw-string "\e")) 

    (defun term-send-return() 
    "Use term-send-raw-string \"\C-m\" instead term-send-input. 
Because term-send-input have bug that will duplicate input when you C-a and C-m in terminal." 
    (interactive) 
    (term-send-raw-string "\C-m")) 

    (defun term-send-backward-kill-word() 
    "Backward kill word in term mode." 
    (interactive) 
    (term-send-raw-string "\C-w")) 

    (defun term-send-forward-kill-word() 
    "Kill word in term mode." 
    (interactive) 
    (term-send-raw-string "\ed")) 

    (defun term-send-backward-word() 
    "Move backward word in term mode." 
    (interactive) 
    (term-send-raw-string "\eb")) 

    (defun term-send-forward-word() 
    "Move forward word in term mode." 
    (interactive) 
    (term-send-raw-string "\ef")) 

    (defun term-send-reverse-search-history() 
    "Search history reverse." 
    (interactive) 
    (term-send-raw-string "\C-r")) 

    (defun term-send-quote() 
    "Quote the next character in term-mode. 
Similar to how `quoted-insert' works in a regular buffer." 
    (interactive) 
    (term-send-raw-string "\C-v")) 

    (defun term-send-M-x() 
    "Type M-x in term-mode." 
    (interactive) 
    (term-send-raw-string "\ex")) 

    (defun term-send-C-x() 
    "Type C-x in term-mode." 
    (interactive "*") 
    (term-send-raw-string "\C-x")) 

    (dolist 
     (bind '(;; from multi-term 
       ("C-z" . nil) 
       ("C-x" . nil) 
       ("C-c" . nil) 
       ("C-h" . nil) 
       ("C-y" . nil) 
       ("<ESC>" . nil) 
       ("C-c C-c" . term-interrupt-subjob) 
       ("C-c C-e" . term-send-esc) 
       ("C-p" . previous-line) 
       ("C-n" . next-line) 
       ("C-s" . isearch-forward) 
       ("C-r" . isearch-backward) 
       ("C-m" . term-send-return) 
       ;;("C-y" . term-paste) 
       ("M-f" . term-send-forward-word) 
       ("M-b" . term-send-backward-word) 
       ("M-o" . term-send-backspace) 
       ("M-p" . term-send-up) 
       ("M-n" . term-send-down) 
       ("M-M" . term-send-forward-kill-word) 
       ("M-N" . term-send-backward-kill-word) 
       ("<C-backspace>" . term-send-backward-kill-word) 
       ("M-r" . term-send-reverse-search-history) 
       ("M-," . term-send-raw) 
       ("M-." . comint-dynamic-complete) 

       ;; personal 
       ("C-<right>" . term-send-forward-word) 
       ("C-<left>" . term-send-backward-word) 
       ("C-<backspace>" . term-send-backward-kill-word) 
       ("C-<delete>" . term-send-forward-kill-word) 
       ("C-k" . term-send-raw) 
       ("C-y" . term-send-raw) 
       ("C-c C-z" . term-stop-subjob) 
       ("C-c C-x" . term-send-C-x) 
       ("C-z" . term-stop-subjob) 
       ("C-c C-y" . term-paste) 
       ("C-c C-u" . universal-argument) 
       ("<S-down>" . sane-term-create) 
       ("<S-left>" . sane-term-prev) 
       ("<S-right>" . sane-term-next))) 
    (define-key term-raw-map 
     (read-kbd-macro (car bind)) (cdr bind))) 
    ) 
+0

非常に奥行きの答えに

(defun jpk/term-mode-hook() (local-set-key (kbd "C-a") 'term-send-raw)) (add-hook 'term-mode-hook 'jpk/term-mode-hook) 

は、ここに私の古いmulti-term設定です。他の人の〜.el〜からのコピーパスタは時々私が仮定したように逆火することができます。仕事の週が終わったので、私はこれを試して、それがうまくいれば正しいとマークします。ごめんなさい。 – songei2f

+0

これは固い助けでしたが、preludeで定義されている 'crux'バインディングを無効にする必要があります。なぜならこれはうまくいかないからです。 https://github.com/bbatsov/prelude/issues/1009 – songei2f

関連する問題