在使用Fedora 15升级到emacs 23.2.1之后,我的一个emacs功能被破坏了,我似乎无法找到问题。有些东西必须改变,但我肯定在elisp文档中找不到它。
我真的很感激任何建议!
它应该做什么:按下Ctl-hyphen应该复制光标上方的字符并将该点向前移动1。
它做什么:继续复制上面的角色而不提前点。但是,用“M-x insert-char-from-previous-line”调用它或者在Ctl-hypens之间按下RightArrow就可以了。将(forward-char 1)添加到脚本末尾没有帮助。
(defun insert-char-from-previous-line ()
"Copy previous line character by character"
(interactive)
(previous-line 1)
(let ((char-above (following-char) ))
(next-line 1)
(if (not (char-equal char-above ?\n ))
(insert char-above))))
(global-set-key [?\C--] 'insert-char-from-previous-line) ;copy char above
答案 0 :(得分:4)
我认为你陷入了目标栏问题。你可能不应该使用next-line / previous-line,而是试试这个:
(defun insert-char-from-previous-line ()
"Copy previous line character by character"
(interactive)
(let ((curpoint (point))
(curcolumn (current-column)))
(forward-line -1)
(forward-char curcolumn)
(let ((char-above (following-char) ))
(goto-char curpoint)
(if (not (char-equal char-above ?\n ))
(insert char-above)))))
来自前线的文件:
如果您打算在Lisp程序中使用它,请考虑使用 相反,带有负面参数的“前线”。通常更容易 使用和更可靠(不依赖于目标栏等)。
(describe-function 'previous-line)
答案 1 :(得分:0)
不要提出这样的观点:
(defun i-char (arg)
(interactive "*p")
(let ((start (+ (point-at-bol 0)
(current-column)))))
(insert (buffer-substring-no-properties start (+ start arg))))