Como habilitar a guia completa somente no modo de linha de termo

2

Eu tenho o modo de empresa instalado. Quando eu pressiono a guia no modo de termo, ele sempre chama a empresa completa. Eu tentei desativar o modo de empresa com

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

Além disso, o seguinte não está funcionando

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

Eu tentei outra abordagem com isso

(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)

Tudo falhou. Qualquer ajuda será muito apreciada!

    
por godblessfq 01.04.2015 / 04:02

1 resposta

2

Eu resolvi com minha função customizada my-tab com algum código escrito por phil.Elcabo a tecla tab para my-tab, ele irá enviar uma aba raw quando estiver no term-char-mode e completará em outros casos, também duas guias rápidas farão yas-expand, vinculando yas-next-field a "Mn", a conclusão da tabulação até funciona dentro de uma expansão de trecho.

O problema é quando a empresa e o yasnnipet têm o mesmo prefixo, então a aba só faz a conclusão. É possível definir um tempo de atraso para a conclusão da empresa após pressionar a tecla tab, torná-lo maior que meu-tempo-chave duplo, portanto, a guia dupla fará yas-expand, se o usuário quiser a conclusão da empresa, ele pode digitar uma guia e espere. (sovled com sit for)

Eu não sei por que não posso simplesmente vincular a guia para enviar uma tabulação bruta em term-raw-map.

(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))))

Por favor, ajude-me a melhorar. Obrigada!

    
por 07.05.2015 / 02:04

Tags