1
0
mirror of https://github.com/RyanGreenup/cadmus.git synced 2025-08-07 22:56:54 +02:00
Files
cadmus/bin/tools/fixLink.sh
ryangreenup a97ccf9157 [Fix] cadmus tools fix now detects OS
Also removed trailing Whitespace
2020-07-24 00:34:28 +10:00

140 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Don't forget to adjust the permissions with:
#chmod +x ~/somecrazyfolder/script1
main () {
setClipboard
### Description
# This will use fzf to find filenames that might correspond to a path from a broken link in the clipboard.
# so let's say that ~[](~/broken/path/to/rsico.png)~ is a broken link, I can use ~yi(~ to copy that to the clipboard in vim and run the following bash scipt to return the correct link:
# Requires:
# * gnu coreutils (specifically realpath)
# * fzf
# * xclip
## WARNING, IF YOU USED `SPC F Y` FROM EMACS THIS WILL NOT WORK!!!
## I DON'T KNOW WHY, I THINK IT'S BECAUSE OF Newline Characters at the end maybe?
### Code
#' You have to strip out the `~` characters, they are incompatible with `realpath`
#' fzf returns /home/username/path/to/file so it doesn't matter
brokenPath=$(CLIP_OUT)
#find ~/Dropbox/ -name $(echo $(basename $brokenPath)) | fzf | xclip -selection clipboard
## NewFile=$(find ~/Dropbox/ -name $(echo $(basename $brokenPath)) | fzf)
NewFile=$(find ~/Notes/ -name $(echo $(basename $brokenPath)) | fzf)
echo $NewFile | CLIP_IN
echo "
Put the path of the source file in the clipboard and Press any Key to Continue
(This doesn't work with a path taken from Emacs:buffer-file-name
I'd recommend using VSCode for this script)
"
# this will just continue after a key stroke
read -d'' -s -n1
echo "
Using:
"
sourceFile=$(CLIP_OUT)
echo "
SOURCE_FILE.......$sourceFile
NEW_ATTACHMENT....$NewFile
"
sourcePath=$(dirname $sourceFile)
relativePath=$(realpath --relative-to="$sourcePath" $NewFile)
relPathWithDot="./"$relativePath
# echo $relPathWithDot | sd '\n' '' | CLIP_IN
echo $relPathWithDot | tr -d '\n' | CLIP_IN
echo "
Success! Relative path is in clipboard
"
}
setClipboard () {
case "$(uname -s)" in
Darwin)
CLIP_IN () { pbcopy ; }
CLIP_OUT () { pbpaste ; }
xdg-open () { open "%{@}" ; }
;;
Linux|GNU|*BSD|SunOS)
## "$XDG_SESSION_TYPE" not always defined
if [[ "$( loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type | rg 'wayland' )" ]]; then
CLIP_IN () { wl-copy ; }
CLIP_OUT () { wl-paste ; }
else
CLIP_IN () { xclip -selection clipboard ; }
CLIP_OUT () { xclip -selection clipboard -o ; }
fi
;;
CYGWIN*|MINGW32*|MSYS*|MINGW*)
CLIP_IN () { xclip -selection clipboard ; }
CLIP_OUT () { xclip -selection clipboard -o ; }
;;
# Add here more strings to compare
# See correspondence table at the bottom of this answer
*)
echo "Could not Detect OS, if you're not on Mac/Linux, file a bug please"
echo "Applying Linux Defaults"
CLIP_IN () { xclip -selection clipboard ; }
CLIP_OUT () { xclip -selection clipboard -o ; }
;;
esac
}
main "${@}"
exit 0
## vim:fdm=expr:fdl=0
## vim:fde=getline(v\:lnum)=~'^##'?'>'.(matchend(getline(v\:lnum),'##*')-2)\:'='