emacs 23.2.1:从上一行逐字符复制似乎已中断

emacs 23.2.1:从上一行逐字符复制似乎已中断,emacs,Emacs,在使用Fedora15升级到emacs 23.2.1后,我的一个emacs功能被破坏,我似乎找不到问题。有些东西必须改变,但我肯定在elisp文档中找不到它 如果有任何建议,我将不胜感激 它应该做什么:按Ctl连字符应该复制光标上方的字符,并将点向前移动1 它的作用:在不推进点的情况下复制上面的角色。但是,使用“M-x从前一行插入字符”或在Ctl hypens之间按RightArrow键调用它会正常工作。将(转发字符1)添加到脚本末尾没有帮助 (defun insert-char-from-pr

在使用Fedora15升级到emacs 23.2.1后,我的一个emacs功能被破坏,我似乎找不到问题。有些东西必须改变,但我肯定在elisp文档中找不到它

如果有任何建议,我将不胜感激

它应该做什么:按Ctl连字符应该复制光标上方的字符,并将点向前移动1

它的作用:在不推进点的情况下复制上面的角色。但是,使用“M-x从前一行插入字符”或在Ctl hypens之间按RightArrow键调用它会正常工作。将(转发字符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

我认为你陷入了进球专栏的问题。对此,您可能不应该使用下一行/上一行,而应该尝试以下方法:

 (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程序中使用这个,请考虑使用 `用一个否定的参数代替“向前行”。通常比较容易 使用和更可靠(不依赖于目标列等)


不要为这样的事情移动点:

(defun i-char (arg)
  (interactive "*p")
  (let ((start (+ (point-at-bol 0)
                  (current-column)))))
  (insert (buffer-substring-no-properties start (+ start arg))))
(defun i-char (arg)
  (interactive "*p")
  (let ((start (+ (point-at-bol 0)
                  (current-column)))))
  (insert (buffer-substring-no-properties start (+ start arg))))