My goal is to be able to right-click a symbolic link in
nemo, triggering a custom script that forces the link to be re-written as a relative path, should it happen to possess an absolute path upon the act.
The problem is that
DRAG+SHIFT+CTRL is hard-coded within
nemo to to produce an absolutely-pathed symlink. This causes problems when I attempt to access the file system remotely.
My problem is I would like to retain the
DRAG+SHIFT+CTRL gesture, I would not like to build
nemo from source, and I would like to be able to browse any number of irrelevantly-linked directories remotely.
My proposed solution is to create a new context-menu option within
nemo that will allow me to "fix" any one of these links by triggering a script.
I've successfully created the context-menu option by creating a new
.nemo_action file using the template at GitHub.
There are two directories for these types of files:
/usr/share/nemo/actions/for system-wide actions
$HOME/.local/share/nemo/actions/for user actions
fix-link.nemo_action file is as follows:
[Nemo Action] Active=true Name=Force Relative Link Comment=If the file is a link to an absolute path, it will be forced to become relative. Exec=<fix-link.sh %F> Selection=any Extensions=nodirs; EscapeSpaces=true
fix-link.sh file (in the same directory) is as follows:
#!/bin/bash $(ln "-rs" $(readlink -f "$1") "$1.tmp") mv -f "$1.tmp" $(readlink -f "$1") exit 0
My temporary file is being created just fine, but it refuses to overwrite the filepath returned by
$(readlink -f "$1"). I think it might have something to do with permissions set by
nemo when I'm initially
DRAG+SHIFT+CTRLling to create the absolutely-pathed link.
@Gilles fixed the many errors in my script, at which time I discovered that I also needed to change the
Extensions=nodirs; line in the
fix-link.nemo_action file to read
Extensions=any;, otherwise I wouldn't ever be able to activate this script through the context menu on even a link to a directory, which was the whole purpose for this thing.
fix-link.nemo_action is as follows:
[Nemo Action] Active=true Name=Force Relative Link Comment=If the file is a link to an absolute path, it will be forced to become relative. Exec=<fix-link.sh %F> Selection=any Extensions=any; EscapeSpaces=true
fix-link.sh file is as follows:
#!/bin/bash ln -rs -- "$(readlink -f -- "$1")" "$1.tmp" mv -f -- "$1.tmp" "$1"
and all is right in the world. Thanks everybody.