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了,这可是个持久战啊,加油吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值