Emacs elisp:如何使点在当前点上方一行?

Emacs elisp:如何使点在当前点上方一行?,emacs,lisp,elisp,Emacs,Lisp,Elisp,例如,我试图返回当前(点)上方一行位置的缓冲区字符位置。我的全部功能如下 我相信(点)是字符位置,所以我想减去当前点和当前点正上方位置之间的字符数。但是,这取决于当前点上方的行的长度(并不总是等于帧字符高度) 我试图模仿Eclipse注释功能,当选择一个区域时,注释区域中不包括最底部的行(带指针的行): (defun comment-eclipse (&optional arg) (interactive) (let ((start (line-beginning-positio

例如,我试图返回当前
(点)
上方一行位置的缓冲区字符位置。我的全部功能如下

我相信
(点)
是字符位置,所以我想减去当前点和当前点正上方位置之间的字符数。但是,这取决于当前点上方的行的长度(并不总是等于
帧字符高度

我试图模仿Eclipse注释功能,当选择一个区域时,注释区域中不包括最底部的行(带指针的行):

(defun comment-eclipse (&optional arg)
  (interactive)
  (let ((start (line-beginning-position))
        (end (line-end-position)))
    (when (or (not transient-mark-mode) (region-active-p))
      (setq start (save-excursion
                    (goto-char (region-beginning))
                    (beginning-of-line)
                    (point))
            end (save-excursion
                  (goto-char (region-end))
                  (end-of-line)
                  (point)))) ;; HERE: I want to return something like (- (point) (line-length))
    (comment-or-uncomment-region start end)))
如能就如何实现这一目标提出任何建议,将不胜感激

更新

感谢lunaryorn在下面的回答,我改进了我的功能,如下所示:

(defun comment-eclipse (&optional arg)
  (interactive)
  (let ((start (line-beginning-position))
        (end (line-end-position)))
    (when (or (not transient-mark-mode) (region-active-p))
      (setq start (save-excursion
                    (goto-char (region-beginning))
                    (beginning-of-line)
                    (point))
            end (save-excursion
                  (goto-char (region-end));;move point to region end
                  (end-of-line);;move point to end of line
                  (forward-line -1)
                  (end-of-line)
                  (point))))
    (comment-or-uncomment-region start end)))

结合使用
当前列
在一行上获取当前列,
向前行
导航到另一行,以及
移动到列
在新行上恢复列:

(let ((column (current-column)))
  (forward-line -1)
  (move-to-column column))
(+(当前列)(保存偏移(前进线-1)(点)))