Alfred Command Line Interface (CLI)
Search
#!/usr/bin/env bash
# Guillaume Barrette
# 2019-06-25
# Alfred Search Function
alfs() {
if [ $# -eq 0 ]; then # If nothing is put as arguments open Alfred at the working directory so it list the content
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to browse \"$(pwd)\""
elif [ $# -eq 1 ]; then # If only one argument is set
if [[ -d $1 ]]; then # if it looks like a path or file, then make sure we send a full path to Alfred
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to browse \"$(realpath -s "$1")/\""
elif [[ -f $1 ]]; then
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to browse \"$(realpath -s "$1")\""
else # Any other words that are not a path would be sent to Alfred as is (ex: alfs snip -> would open Alfred with "snip")
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to search \"$*\""
fi
else # If multiple arguments are set, then they are sent to Alfred as is. (ex: alfs define allo -> would pop Alfred with "define allo")
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to search \"$*\""
fi
}
File Action
#!/usr/bin/env bash
# Guillaume Barrette
# 2019-06-25
# Alfred Action Function (pop the Alfred Action Window)
alfa() {
if [ $# -eq 0 ]; then # If no arguments, pop Alfred Action Window in the working directory
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to action \"$(pwd)\""
else
args=""
argsAreAllPaths=true
for arg in "$@" ; do
filePath=$(realpath -s "$arg")
if [[ -d $filePath ]] || [[ -f $filePath ]]; then # if the arg is a file of folder, append the path to the args string to build a list for the osascript command
args+="\"$filePath\","
else
argsAreAllPaths=false # if one argument is not a folder or file path, then pop Alfred with the standard search and try to access Alfred Action Window. This also makes it clear there's a problem with one of the passed paths
break
fi
done
if [ "$argsAreAllPaths" = true ] ; then # If all arguments are files or directories, open Alfred Action Window with the list
args=${args%?} # remove the trailing comma
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to action { $args }"
else # If not all arguments are files or directories, search as is and try to access the Alfred Action Window. The Action Window should pop if it's possible, or the standard Alfred Search would be shown (ex: alfa activity monitor -> Would open the file action window of the Activity Monitor)
actionKey="keystroke (ASCII character 29)" # (meaning: right arrow) Put your prefered action key (Alfred -> File Search -> Actions -> Show Actions) as applescript command for keystroke or key code (ex: "key code 98")
delayBetweenEvents=0.1 # Play with the number if the action doesn't work correctly
osascript -e "tell application id \"com.runningwithcrayons.Alfred\" to search \"$*\"" -e "delay $delayBetweenEvents" -e "tell application \"System Events\" to $actionKey"
fi
fi
}