【发布时间】:2021-12-09 08:44:23
【问题描述】:
在下面的(业余的、复杂的)代码中,我正在尝试创建一个环境,其中可能同时存在多个串行项缓冲区/窗口。我正在做我能想到的一切(并且只是随机的绝望的事情),以使变量在运行它们所属的终端的缓冲区中成为本地变量。例如,可能有一个缓冲区“serial-1a2b-buffer”和终端“serial-1a2b-term”在其中运行,同时有一个缓冲区“serial-3c4d-buffer”和终端“serial-3crd” -term”在其中运行。
我可以使用defun setupserial 设置和运行缓冲区/终端,但defun killserial 和defun resetserial 没有得到“termname”和“buffname”的正确值。它可能是另一个缓冲区中的值,也可能是不再存在的缓冲区和终端的过去值。
(如果有人想知道,我在微控制器上做了很多工作。如果与它们的串行连接被中断,例如硬件重置,那么串行进程就会终止。这个想法是有一个快速的重置方法连接 - 就像绑定到键序列的函数一样。)
(defvar serialspeed "115200")
(defvar serialport "/dev/ttyACM0")
(defvar serialbasename "serial")
(require 'term)
(defun setupserial (serialport serialspeed)
(interactive
(list
(read-string
(format "Serial Port (%s): "
serialport)
nil nil
serialport)
(read-string
(format "Speed (%s): "
serialspeed)
nil nil
serialspeed)))
(setq uniqueid (format "%04x" (random (expt 16 4))))
(setq serialid (concat serialbasename "-" uniqueid))
(setq buffname (concat serialid "-buffer"))
(setq termname (concat serialid "-term"))
(setq bufferid (get-buffer-create buffname))
(setq procid (make-serial-process
:speed (string-to-number serialspeed)
:port serialport
:name termname
:buffer buffname))
(switch-to-buffer bufferid)
(make-local-variable 'serialid)
(make-local-variable 'buffname)
(make-local-variable 'bufferid)
(make-local-variable 'termname)
(make-local-variable 'procid)
(make-local-variable 'serialspeed)
(make-local-variable 'serialport)
(term-mode)
(term-char-mode)
(local-set-key (kbd "M-r") #'resetserial)
(local-set-key (kbd "M-k") #'killserial)
(local-set-key (kbd "M-x") #'execute-extended-command)
(local-set-key (kbd "M-o") #'ace-window)
(message "Started Serial Terminal"))
(defun resetserial ()
(interactive)
(make-serial-process
:speed (string-to-number serialspeed)
:port serialport
:name termname
:buffer bufferid)
(message "Restarted Serial Terminal"))
(defun killserial ()
(interactive)
(delete-process termname))
(global-set-key (kbd "C-c s") #'setupserial)
(provide 'setup-serial)
【问题讨论】:
-
我在 resetserial 中尝试过 "buffname" 和 "bufferid"。两者都应该有效,但都没有给出适当范围内的值。
标签: elisp