The
hard part is identifying what argument strings are meant to be
interpreted as file names.
Assuming you've done that, you can convert to an absolute path pretty
easily. Suppose for example that you know $3 is a file name.
3=${3:P}
That was a nice tip, thanks!
In cases where you have an argument like "--file=name"
I actually don't, what I am looking for is just separated paths.
Did something like this with external tools like sed, looks like
working:
function _edit_command_to_register_full_path {
emulate -L zsh
REPLACED="$1"
for element in `echo "$1"`; do
# Don't care about parameters
if [[ "$element" == -* ]]; then
continue
fi
FULLPATH="${element:P}"
if [[ -f $FULLPATH ]] || [[ -d $FULLPATH ]]; then
REPLACED=`echo "$REPLACED" | sed "s!$element!$FULLPATH!"`
fi
done
print -sr -- ${REPLACED%%$'\n'}
}
add-zsh-hook zshaddhistory _edit_command_to_register_full_path
But having a duplication problem. The original is still applied to history.
Is there a way to just modify the string which is going to be accepted (thus respecting HIST* options),
or should I give up this method and just use preexec_functions to modify the BUFFER directly?