5

Suppose I do the following in zsh

cd ~
cd dir1
cd dir2
cd dir3
evince foo.pdf

zsh writes exactly the same in its history file.

Now my question is whether it is possible to have

cd ~
cd ~/dir1
cd ~/dir1/dir2
cd ~/dir1/dir2/dir3
evince ~/dir1/dir2/dir3/foo.pdf

in zsh history instead. I.e. that zsh remembers only full paths.

student
  • 18,305

1 Answers1

1

Not in a general way, because the shell has no way to know whether a given argument is a relative path or not. Of course it could use some heuristics (similar to the ones used for completion), but this might be too error-prone.

Adam Byrtek
  • 1,339
  • zsh history could log the full path before the command runs. The end user can then figure out what maps to a relative directory and what doesn't. – Alok Sep 21 '16 at 22:12
  • You could try arguments in a $(realpath $arg) subshell in a zshaddhistory-hook and if it fails you know its not a path. Add some initial regex validation and you're pretty close imo. – dza Nov 12 '22 at 12:08