(point) は、現在のカーソルの位置を返します。これとは違って、
つぎのような関数がないでしょうか。

  その関数を実行すると、それ以降キーを監視して、

       * 矢印キー あるいは、C-n, C-p, C-b, C-f だったら、その矢
         印キーあういは C-n, C-p, C-b, C-f をタイプしたときの通
         常の動作にしたがってカーソル位置が変更される。
    
       * それ以外のキーを押したら、そのときのカーソル位置を返す。

ちょっと自分で書いてみたのですが、不十分です。

  (defun read-movement ()
    (let (p (pos nil))
      (setq p (read-char))
      (cond 
       ((eq p 14); C-n
        (next-line 1))
       ((eq p 16); C-p
        (next-line -1))
       ((eq p 6); C-f
        (forward-char 1))
       ((eq p 2); C-b
        (forward-char -1))
       (t
        (setq pos (point))))
      pos))

  (defun get-point ()
    (interactive)
    (let ((p nil))
      (while (not p)
        (setq p (read-movement)))
      (message "%d" p)))

get-point が、求める関数のつもりですが、つぎの点で不十分です。

  * 矢印キーには対応できていない。read-movement 関数で使用してい
    る read-char ではダメ。

  * ミニバッファに押したキーに関する情報がエコーされるのが嫌。

こういうときに使用する関数がすでにあれば教えてください。上に書い
たコードを直せばよいのなら、その方法を教えていただけないでしょうか。