Emacs 配置之查找是否有“*scheme*”窗口

最近终于下定决心学习一下lisp,打算从SICP开始吧。

编辑器打算采用Emacs,原因是它是用C和Emacs Lisp(Lisp的一种方言)编写的程序。

Emacs还真的是难学啊,在掌握了基本(基本)的操作后,开始配置Emacs的环境,参考的很多网上的一些代码,就不多说了。

这里要说的是我在借鉴了大牛王垠的配置后,在使用<f5><f6>的时候会报一个找不到find函数的的错误,源代码如下:

(defun scheme-split-window ()
  (cond
   ((= 1 (count-windows))
    (delete-other-windows)
    (split-window-vertically (floor (* 0.68 (window-height))))
    (other-window 1)
    (switch-to-buffer "*scheme*")
    (other-window 1))
   ((not (find "*scheme*"
               (mapcar (lambda (w) (buffer-name (window-buffer w)))
                       (window-list))
               :test 'equal))
    (other-window 1)
    (switch-to-buffer "*scheme*")
    (other-window -1))))


(defun scheme-send-last-sexp-split-window ()
  (interactive)
  (scheme-split-window)
  (scheme-send-last-sexp))


(defun scheme-send-definition-split-window ()
  (interactive)
  (scheme-split-window)
  (scheme-send-definition))

(add-hook 'scheme-mode-hook
  (lambda ()
    (paredit-mode 1)
    (define-key scheme-mode-map (kbd "<f5>") 'scheme-send-last-sexp-split-window)
    (define-key scheme-mode-map (kbd "<f6>") 'scheme-send-definition-split-window)))

问题就出在了schem-split-window函数的find语句,不知道为什么在我的电脑上不好使。

但是我的心里不爽,十分想要把这个函数搞定,于是在完全对Lisp没有学习的我进行了不断的尝试。下面是结果:

(defun check-scheme()
   (let ((res 21))
   (dolist (x (mapcar(lambda (w) (setq a (buffer-name (window-buffer w)))) (window-list))) (when (string= "*scheme*" x)(setq res 100)))
   (= res 100)
   ))

(defun scheme-split-window ()
  (cond
   ((= 1 (count-windows))
    (delete-other-windows)
    (split-window-vertically (floor (* 0.68 (window-height))))
    (other-window 1)
    (switch-to-buffer "*scheme*")
    (other-window 1))
    ((not (check-scheme))
    (other-window 1)
    (switch-to-buffer "*scheme*")
    (other-window -1))))

可以看到,主要使定义了一个check-scheme的函数,这个函数虽然是我写的不过我也是对它一知半解,真是汗颜。

下面应该开始努力学习SICP了,这可是个持久战啊,加油吧。

发布了179 篇原创文章 · 获赞 1 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览