universal-ctags / citre

A superior code reading & auto-completion tool with pluggable backends.
GNU General Public License v3.0
326 stars 26 forks source link

Rearview mirror #107

Open masatake opened 2 years ago

masatake commented 2 years ago

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.

AmaiKinono commented 2 years ago

I think citre-peek can already do this.

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

AmaiKinono commented 4 months ago

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)
masatake commented 4 months ago

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

Maybe these are my homework.

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

AmaiKinono commented 4 months ago

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:

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