So aktivieren Sie das Register nur im Term-Line-Modus

814
godblessfq

Ich habe den Firmenmodus installiert. Wenn ich im Term-Modus die Tabulatortaste drücke, ruft das Unternehmen immer die komplette Firma auf. Ich habe versucht, den Firmenmodus mit zu deaktivieren

(global-company-mode '(not (equal major-mode 'term-mode))) 

Auch das folgende funktioniert nicht

(add-hook 'term-mode-hook (lambda() (company-mode 0) (global-unset-key (kbd "<tab>")))) 

Ich habe einen anderen Ansatz damit versucht

(defun term-send-tab() (interactive) (term-send-raw-string "\t"))  (define-key term-raw-map (kbd "TAB") 'term-send-tab) (define-key term-raw-map (kbd "<tab>") 'term-send-tab) 

Alles ist fehlgeschlagen. Jede Hilfe wird sehr geschätzt!

2
Ihre erste Zeile macht keinen Sinn. Versuchen Sie `(setq company-global-modes '(nicht term-mode))`. dgutov vor 9 Jahren 0
Dies deaktiviert den Firmenmodus für den Term-Modus. Wie kann man den Firmenmodus nur im Term-Line-Modus aktivieren? godblessfq vor 9 Jahren 0
Das ist nicht trivial: Der Term-Line-Modus ist kein echter Major- oder Minor-Modus. dgutov vor 9 Jahren 0

1 Antwort auf die Frage

2
godblessfq

Ich löste es mit meiner benutzerdefinierten Funktion my-tab mit etwas Code, der von phil geschrieben wurde. Ich binde den Tab-Key an meinen Tab, er wird im Term-Char-Modus einen unformatierten Tab senden und in anderen Fällen auch zwei Quick-Tabs ausführen yas-expand wird ausgeführt, indem das yas-next-Feld an "Mn" gebunden wird. Die Tab-Vervollständigung funktioniert sogar innerhalb einer Snippet-Erweiterung.

Das Problem ist, wenn company und yasnnipet das gleiche Präfix haben, dann führt die Registerkarte nur den Abschluss aus. Ist es möglich, eine Verzögerungszeit für den Unternehmensabschluss nach dem Drücken der Tabulatortaste festzulegen, so dass der Wert für das Doppelter-Tasten-Timeout überschritten wird, so wird der doppelte Tabulator durch Yas-Erweiterung erweitert. Wenn der Benutzer den Firmenabschluss wünscht, kann er nur einen Tabulator eingeben und warte. (souverän mit sitzen für)

Ich weiß nicht, warum ich die Registerkarte nicht einfach binden kann, um eine reine Registerkarte in der Term-Raw-Map zu senden.

(defvar my-double-key-timeout 0.25 "The number of seconds to wait for a second key press.")  (defun my-tab () "Move to the beginning of the current line on the first key stroke, and to the beginning of the buffer if there is a second key stroke within `my-double-key-timeout' seconds." (interactive) (let ((last-called (get this-command 'my-last-call-time)) ) (is-term (string= "term-mode" major-mode))) (if (and is-term (term-in-char-mode)) (term-send-raw-string "\t") (if (and (eq last-command this-command) last-called (<= (time-to-seconds (time-since last-called)) my-double-key-timeout)) (yas-expand)   (if (sit-for my-double-key-timeout) (complete-indent-fold)))  (put this-command 'my-last-call-time (current-time))))  (defun complete-indent-fold() (interactive) (if (looking-at outline-regexp) (if (equal major-mode 'org-mode) (org-cycle) (my-outline-cycle)) (if (looking-at "\\_>") (company-complete) (indent-for-tab-command)))) 

Bitte hilf mir, das besser zu machen. Vielen Dank!