citre icon indicating copy to clipboard operation
citre copied to clipboard

Rearview mirror

Open masatake opened this issue 2 years ago • 4 comments

The peek window is for forward-reading. I wonder how useful if we can use it for backward-reading.

  1. you are at an interesting function, "memmove": origin

  2. you will do M-. to go to the definition: jumpto

  3. you may wonder how the function is called. e.g. association between the arguments in the caller context and the parameter in the callee context.

  4. turn on the rearview mirror: rearview

You don't have to break the reading-context with M-,. Just an idea.

masatake avatar Nov 24 '21 20:11 masatake

I think citre-peek can already do this.

  • After you jump to a definition in a peek session, you can just browse the peek history to see how it's called.
  • We have citre-peek-backward-in-chain-after-jump to automatically do this after every jump.
  • We can have a command for this so you can turn on the rearview mirror when you want.

What you described is likely to be an extension for xref (so it's not in the scope of Citre).

AmaiKinono avatar Nov 25 '21 00:11 AmaiKinono

I've create a little helper for you ;)

(require 'citre-common-tag)
(require 'citre-ui-peek)

(defun peek-back-after-xref ()
  (let* ((marker (caar (xref--get-history)))
         (buf (marker-buffer marker))
         tag)
    (with-current-buffer buf
      (save-excursion
        (goto-char marker)
        (setq tag (citre-make-tag-of-current-location
                   (if-let ((sym (symbol-at-point)))
                       (symbol-name sym) ".")))))
    (citre-peek-show (list tag))))

(add-hook 'xref-after-jump-hook #'peek-back-after-xref)

AmaiKinono avatar Apr 21 '24 08:04 AmaiKinono

Thank you. It works. This is a great hint for me.

  • in the context, citre-peek-file-content-height can be smaller.
  • it will be better if the peek window is displayed before the point.
  • the color of the peek window can differ between the front and rear.

Maybe these are my homework.

The rearview helps a code reader associate arguments seen in a function call and parameters in the function definition.

masatake avatar Apr 21 '24 21:04 masatake

For now all these aspects are controlled by global variables, or hard coded. So although the appearance you want is actually easy to implement, it's harder to adopt it in the current codebase.

It's not clear to me how this fits into the citre-peek tool for now. Maybe one possible approach is to:

  • Bind a set of properties to a peek session.
  • Offer a set of API to the user so they can write commands to peek all sorts of things.

I think i've seen a somewhat similar work in a package called peek.

AmaiKinono avatar Apr 22 '24 17:04 AmaiKinono