2013-06-18 6 views
1

Я использую Distel для моей разработки erlang, но функция, которая используется для завершения, печатает свой вывод в ibuffer. Я хотел бы получить его в минибуфере с поддержкой ido, может кто-нибудь знает, как это сделать?Нужна помощь, чтобы переписать функцию elisp для использования минибуфера + ido вместо ibuffer

Вот код:

(defun erl-complete (node) 
    "Complete the module or remote function name at point." 
    (interactive (list (erl-target-node))) 
    (let ((win (get-buffer-window "*Completions*" 0))) 
    (if win (with-selected-window win (bury-buffer)))) 
    (let ((end (point)) 
    (beg (ignore-errors 
      (save-excursion (backward-sexp 1) 
        ;; FIXME: see erl-goto-end-of-call-name 
        (when (eql (char-before) ?:) 
       (backward-sexp 1)) 
        (point))))) 
    (when beg 
     (let* ((str (buffer-substring-no-properties beg end)) 
     (buf (current-buffer)) 
     (continuing (equal last-command (cons 'erl-complete str)))) 
    (setq this-command (cons 'erl-complete str)) 
    (if (string-match "^\\(.*\\):\\(.*\\)$" str) 
     ;; completing function in module:function 
     (let ((mod (intern (match-string 1 str))) 
      (pref (match-string 2 str)) 
      (beg (+ beg (match-beginning 2)))) 
      (erl-spawn 
     (erl-send-rpc node 'distel 'functions (list mod pref)) 
     (&erl-receive-completions "function" beg end pref buf 
         continuing 
         #'erl-complete-sole-function))) 
     ;; completing just a module 
     (erl-spawn 
     (erl-send-rpc node 'distel 'modules (list str)) 
     (&erl-receive-completions "module" beg end str buf continuing 
         #'erl-complete-sole-module))))))) 

(defun &erl-receive-completions (what beg end prefix buf continuing sole) 
    (let ((state (erl-async-state buf))) 
    (erl-receive (what state beg end prefix buf continuing sole) 
    ((['rex ['ok completions]] 
     (when (equal state (erl-async-state buf)) 
     (with-current-buffer buf 
      (erl-complete-thing what continuing beg end prefix 
        completions sole)))) 
    (['rex ['error reason]] 
     (message "Error: %s" reason)) 
    (other 
     (message "Unexpected reply: %S" other)))))) 
+0

Я не совсем понимаю. Вы говорите о завершении работы в минибуфере, но код, который вы показываете, похоже, заключается в выполнении «в буфере». Поэтому я думаю, что вы хотите настроить «функции завершения-на-точке». – Stefan

+0

Да, это был мой вопрос более или менее: как мне изменить этот код, поэтому все альтернативы для завершения отображаются в минибуфере (с поддержкой ido) вместо интерактивного буфера. Я не написал код, расположенный выше, из пакета [Distel] (https://github.com/massemanet/distel), и, честно говоря, моего знания elisp недостаточно, чтобы я мог обернуть голову вокруг этого функция. – SpaceOgre

+0

О, так что я думаю, что вы хотите что-то вроде 'icomplete-mode', но для завершения« in-buffer ». То есть само завершение не выполняется в минибуфере, но список кандидатов на завершение отображается в эхо-области (и автоматически обновляется по мере редактирования текста), а не в \ * Completions \ *. Выполнение 'icomplete-mode' работы с' функцией завершения-на-точке' по-прежнему находится в моем списке задач, tho. – Stefan

ответ

0

company-mode предложил Стефан сделал то, что я не хотел так не переписывают необходимости.

Благодарим вас за помощь и время Стефан!

+0

Кстати: 'M-x ibuffer'. Вы дважды написали «ibuffer» в вопросе, но наверняка вы имели в виду что-то другое? Я никогда не сталкивался с этим термином ни в каком другом контексте. – phils

 Смежные вопросы

  • Нет связанных вопросов^_^