новый мод comint в emacs для plink (putty): определение функции символа недействительно

я хочу использовать новый режим comint для plink(putty), я поместил код в init.el, но если M-x запустить-plink, я получил следующую ошибку:

let*: определение функции символа недействительно: comint-check-proc

;; path    
(defvar plink-file-path "C:/Programme/Putty/plink.exe"     
  "Path to the program used by `run-plink'") 

;; arguments
(defvar plink-arguments '() 
  "Commandline arguments to pass to `plink'") 

;; prompt
(defvar plink-prompt-regexp "^>\s" 
"Prompt for `run-plink'.")

;; Run-plink     
(defun run-plink ()     
  "Run an inferior instance of `plink.js' inside Emacs."     
  (interactive)     
  (setq plink-buffer "*Plink*")     
  (let* ((plink-program plink-file-path) (buffer (comint-check-proc "Plink")))     
    ;; pop to the "*plink*" buffer if the process is dead, the 
    ;; buffer is missing or it's got the wrong mode. 
    (pop-to-buffer-same-window 
     (if (or buffer (not (derived-mode-p 'plink-mode)) 
             (comint-check-proc (current-buffer))) 
         (get-buffer-create (or buffer "*Plink*")) 
       (current-buffer))) 
    ;; create the comint process if there is no buffer. 
    (unless buffer 
      (apply 'make-comint-in-buffer "Plink" buffer plink-program plink-arguments) 
      (plink-mode)))) 

;; plink-mode    
(define-derived-mode plink-mode comint-mode "plink" nil "plink"     
  (setq comint-process-echoes t)     
  (setq comint-use-prompt-regexp t)     
  (setq comint-prompt-regexp plink-prompt-regexp)     
  ; ">" read-only    
  (setq comint-prompt-read-only t)     
  (set (make-local-variable 'paragraph-separate) "..'")     
  (set (make-local-variable 'paragraph-start) plink-prompt-regexp))

person Felix Liu    schedule 22.08.2016    source источник
comment
Вероятно, вам следует переместить это в отдельный файл и зарезервировать init.el исключительно для ваших личных предпочтений. В руководстве по Emacs есть дополнительные рекомендации по написанию модульного кода. Начать, например. на gnu.org/software/emacs/manual/html_node /eintr/   -  person tripleee    schedule 23.08.2016
comment
благодарю вас. я думаю, код работает без отдельного файла. в любом случае, я должен выучить elisp.   -  person Felix Liu    schedule 23.08.2016
comment
Конечно, это можно снять, просто это большое неудобство, которого вы, вероятно, захотите избежать.   -  person tripleee    schedule 23.08.2016


Ответы (2)


Вы не загрузили библиотеку comint. Вам нужно сделать это до того, как Emacs узнает о comint-check-proc.

Добавьте (require 'comint) либо в свой файл инициализации, либо в начало run-plink - где-нибудь до того, как он попытается использовать comint-check-proc.

person Drew    schedule 22.08.2016
comment
Привет, Дрю, спасибо. Код работает, но я получил текст только для чтения и comint-send-input: текущий буфер не имеет процесса. Символ подсказки отсутствует, и я не могу ввести. Я просто хочу иметь новый режим comint для plink(putty). Я новичок в emacs. Пожалуйста, вы можете увидеть это снова? - person Felix Liu; 23.08.2016
comment
Извините - только один вопрос на вопрос, пожалуйста. Остальные вопросы пишите отдельно. Это сайт вопросов и ответов, а не сайт «вот мой код, пожалуйста, отладьте его для меня». Старайтесь задавать узкие вопросы. Спасибо. - person Drew; 23.08.2016
comment
Спасибо. выкладываю отдельно. - person Felix Liu; 23.08.2016
comment
Как это сделать для gst? - person Zelphir Kaltstahl; 18.04.2018
comment
@Zelphir: Понятия не имею, что это значит (что такое gst?), но звучит как отдельный вопрос (например, для публикации). - person Drew; 18.04.2018
comment
@Drew Ну, это было помечено как дубликат: stackoverflow.com/q/48418378/1829329 , поэтому я предположил, что вы знать. Было бы здорово, если бы вы могли прояснить отношения между этими двумя. - person Zelphir Kaltstahl; 21.04.2018
comment
Этот вопрос был помечен как дубликат, потому что он касался ошибки Symbol's function definition is void. - person Drew; 21.04.2018

Чтобы дать ответ на этот вопрос, который также имеет значение для других вопросов, помеченных как дубликаты этого, но на самом деле касающихся других пакетов, которые не загружаются, я дам более общий ответ, который должен быть применим и к другим вопросам.

Вообще ошибка Symbol's function definition is void часто указывает на то, что пакет не был загружен, но затем кто-то/что-то попыталось его использовать.

Итак, общий ответ, что вам, вероятно, нужно (require '<package name>) в вашем init.el, где имя пакета - это имя пакета, который предоставляет то, что в настоящее время недействительно.

person Zelphir Kaltstahl    schedule 25.04.2018