日期:2014-05-16  浏览次数:20634 次

问一下关于Elisp的问题(各位可任答一个或几个)
1.已知multiply-by-seven函数的代码如下:

(defun multiply-by-seven (number)
(interactive "p")
(message "The result is %d" (* 7 number)))

书里面说:“在上面的例子中,multiply-by-seven函数使用"p"作为交互命令interactive的参量。这个参量告诉Emacs将你正在键入的C-u加上一个数字或META加上一个数字解释为一个命令,用来将这个数字作为参量传送给函数。”

==>如按文字所说,在定义了multiply-by-seven函数后,键入"C-u+数字"或"META+数字"后,什么都没反应,回显区也没有任何显示。是书里面解释错了呢,还是自己操作错了呢?

2.书里面说:“字符"r"是Emacs将位点所在区域的开始值和结束值作为函数的两个参量。用法如下:
(interactive "r")

==>所谓位点所在区域的开始值和结束值,是不是指编辑区的第一个字符的值(1),光标所在位置的值为结束值?

3.假如定义函数如下:

(defun append-to-buffer (buffer start end)
(interactive "BAppend to buffer:\nr")
(let ((oldbuf (current-buffer)))
  (save-excursion
  (set-buffer (get-buffer-create buffer))
  (insert-buffer-substring oldbuf start end))))

此append-to-buffer函数有3个参量:buffer、start、end==>(interactive "r")如何知道要将开始与结束值绑定于3个参量中的其中哪两个?

------解决方案--------------------
再看看吧 - =

“键入"C-u+数字"或"META+数字"后,什么都没反应”
 键入数字前缀后面可以跟一个动作,你只"C-u+数字"或"META+数字"当然什么都没有了
 只是考诉做事情做几遍,但你还没有考诉它要做什么事
 比如 "C-u 8" + "C-b" 是向后移动8个字符,如果你没有"C-b"当没有操作了
 命令等价的操作 "C-u 8" "M-x backward-char"
 
"M-x set-mark-command" 可以认为是区域的起始位置,当前点为结束位置
 我是这么认为的