如何获取可见行的行号(隐藏的行不计入统计)?

比如org文件, 打开后, 大部分内容是折叠(隐藏的),如果想把隐藏的行全部忽略掉,只统计可见的行,如何计算光标所在位置的行号(忽略隐藏的行)?

不怎么清楚 Emacs 的「行」究竟是怎么一回事,所以也不能下面这个是不是正解,尽管稍微试了下没发现问题。

(defun what-visual-line ()
  (interactive)
  (save-excursion
    (let ((op (point))
          (linum 1))
      (goto-char (point-min))
      (while (and (line-move-visual 1 'noerror)
                  (<= (point) op))
        (setq linum (1+ linum)))
      (message "Visual Line Number: %s" linum))))

(defun zx ()
  (interactive)
  (save-excursion
    (goto-char 1)
    (print (line-number-at-pos))
    (while (line-move 1 t)
      (print (line-number-at-pos)))))

这种方法能想到, 我是想问一下有没有更高效的方法,org文件大的时候, 移动光标都有点卡顿