diff --git a/CHANGELOG.md b/CHANGELOG.md index 6103f22..8f92f22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,13 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - +### Changed + +- Multiple command options can be combined - +### Fixed + +- Custom default command is only executed when no command option given diff --git a/bemoji b/bemoji index da39218..9801092 100755 --- a/bemoji +++ b/bemoji @@ -11,7 +11,7 @@ bm_cache_dir="${BEMOJI_CACHE_LOCATION:-${XDG_CACHE_HOME:-$HOME/.cache}}" bm_history_file="${bm_cache_dir}/bemoji-history.txt" # Command to run after user chooses an emoji -bm_default_cmd=${BEMOJI_DEFAULT_CMD:-'_clipResult'} +bm_default_cmd="$BEMOJI_DEFAULT_CMD" # Do not save choices bm_private_mode=${BEMOJI_PRIVATE_MODE:-false} @@ -25,14 +25,17 @@ usage() { echo "A simple emoji picker. Runs on bemenu/wofi/rofi/dmenu by default." echo "Invoked without arguments sends the picked emoji to the clipboard." echo - echo " -f Use a custom emoji database. Can be a url which will be retrieved." + echo " Command options (can be combined):" echo " -t Simulate typing the emoji choice with the keyboard." echo " -c Send emoji choice to the clipboard. (default)" + echo " -e Only echo out the picked emoji." + echo "" + echo " Other options:" echo " -p Do not save picked emoji to recent history." echo " -P Do not order emoji by recently used." - echo " -e Only echo out the picked emoji." echo " -D Choose specific default lists to download if none found locally." echo " Valid choices: all|none|emoji|math." + echo " -f Use a custom emoji database. Can be a url which will be retrieved." echo " -v Display current program version and directory configuration." echo " -h Show this help." echo @@ -48,9 +51,9 @@ version() { while getopts ":f:D:tcepPhv" o; do case "${o}" in f) BEMOJI_CUSTOM_LIST="${OPTARG}" ;; - t) bm_default_cmd=_typeResult ;; - c) bm_default_cmd=_clipResult ;; - e) bm_default_cmd=_echo ;; + t) bm_cmds+=(_typer) ;; + c) bm_cmds+=(_clipper) ;; + e) bm_cmds+=(cat) ;; D) BEMOJI_DOWNLOAD_LIST="${OPTARG}" ;; p) bm_private_mode=true ;; P) bm_ignore_recent=true ;; @@ -186,15 +189,6 @@ _picker() { fi } -# Type result using xdotool -_typeResult() { - cat - | _typer -} - -_clipResult() { - cat - | _clipper -} - [ -n "$BEMOJI_CUSTOM_LIST" ] || prepare_db result=$(gather_emojis | _picker) exit_value="$?" @@ -206,17 +200,23 @@ case "$exit_value" in exit ;; 0) - if [ "$bm_default_cmd" = "_echo" ]; then - echo "$result" - exit + if [ ${#bm_cmds[@]} -eq 0 ]; then + if [ -n "$bm_default_cmd" ]; then + # shellcheck disable=SC2068 + echo "$result" | ${bm_default_cmd[@]} + exit + fi + bm_cmds+=(_clipper) fi - echo "$result" | "$bm_default_cmd" + for cmd in "${bm_cmds[@]}"; do + echo "$result" | "$cmd" + done ;; 10) - echo "$result" | _clipResult + echo "$result" | _clipper ;; 11) - echo "$result" | _typeResult + echo "$result" | _typer ;; esac exit diff --git a/test/bemoji_cmds.bats b/test/bemoji_cmds.bats new file mode 100644 index 0000000..3f7f681 --- /dev/null +++ b/test/bemoji_cmds.bats @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +setup_file() { + # make bemoji executable from anywhere relative to current testfile + TEST_DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )" + PATH="$TEST_DIR/..:$PATH" +} + +setup() { + load 'test_helper/bats-support/load' + load 'test_helper/bats-assert/load' + + # mock out interactive picker for static emoji return + export BEMOJI_PICKER_CMD="echo ❤️" + + # set up small default set of test emoji for each test + export BEMOJI_DB_LOCATION="$BATS_TEST_TMPDIR/database" + export BEMOJI_CACHE_LOCATION="$BATS_TEST_TMPDIR/cache" + mkdir -p "$BEMOJI_DB_LOCATION" "$BEMOJI_CACHE_LOCATION" + cat "$BATS_TEST_DIRNAME/resources/test_emoji.txt" > "$BEMOJI_DB_LOCATION/emoji.txt" +} + +@test "-v prints correct version number" { + the_version=$(grep 'bm_version=' "$(which bemoji)") + + run bemoji -v + assert_output --partial "v${the_version#bm_version=}" +} + +@test "Runs clipping command by default" { + BEMOJI_CLIP_CMD="echo clipping default" run bemoji 3>&- + assert_output "clipping default" +} + +@test "Runs echo command on -e option" { + run bemoji -e 3>&- + assert_output "❤️" +} + +@test "Runs clipping command on -c option" { + BEMOJI_CLIP_CMD="echo clipping result" run bemoji -c 3>&- + assert_output "clipping result" +} + +@test "Runs typing command on -t option" { + BEMOJI_TYPE_CMD="echo typing result" run bemoji -t 3>&- + assert_output "typing result" +} + +@test "Runs typing and clipping on -ct options" { + BEMOJI_CLIP_CMD="echo clipping result" BEMOJI_TYPE_CMD="echo typing result" run bemoji -ct 3>&- + assert_output \ +"clipping result +typing result" +} + +@test "Runs custom default command" { + BEMOJI_DEFAULT_CMD="echo my custom command" run bemoji 3>&- + assert_output "my custom command" +} + +@test "Using command option overrides custom default command" { + BEMOJI_DEFAULT_CMD="echo my custom command" BEMOJI_CLIP_CMD="echo my clipping" run bemoji -c 3>&- + assert_output "my clipping" +} diff --git a/test/bemoji.bats b/test/bemoji_directories.bats similarity index 88% rename from test/bemoji.bats rename to test/bemoji_directories.bats index cff3af6..28068e1 100644 --- a/test/bemoji.bats +++ b/test/bemoji_directories.bats @@ -28,18 +28,6 @@ setup() { assert_success } -@test "can receive custom picker mock output" { - run bemoji -e 3>&- - assert_output "❤️" -} - -@test "-v prints correct version number" { - the_version=$(grep 'bm_version=' $(which bemoji)) - - run bemoji -v - assert_output --partial "v${the_version#bm_version=}" -} - @test "sets XDG directory for db by default" { unset BEMOJI_DB_LOCATION export XDG_DATA_HOME="$BATS_TEST_TMPDIR/xdb-db"