diff --git a/.woodpecker.yml b/.woodpecker.yml index 5eac51d..60e18dc 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -4,8 +4,7 @@ pipeline: commands: - /opt/bats/bin/bats test - release-prep: - # prepare changelog and version information for release candidate + release-prep: # prepare changelog and version information for release candidate when: event: tag tag: v* @@ -14,8 +13,7 @@ pipeline: - sed -ne 's/bm_version=\(.*\)/\1/p' bemoji > NEWEST_VERSION.txt - awk '/^## \[\d/{p++} p==2{print; exit} p>=1' CHANGELOG.md | head -n -1 | tail -n+3 > NEWEST_CHANGES.txt - versioncompare: - # ensure we correctly bumped versions + versioncompare: # ensure we correctly bumped versions when: event: tag tag: v* @@ -44,10 +42,9 @@ pipeline: - cp bemoji build - md2man -in README.md -out bemoji.1 && gzip bemoji.1 - cp LICENSE README.md bemoji.1.gz build/doc - - cd build || exit 1 - - tar -czvf bemoji-$BM_VERSION.tar.gz * - - zip -r bemoji-$BM_VERSION.zip * - - mv bemoji-$BM_VERSION.tar.gz bemoji-$BM_VERSION.zip ../dist + - tar -czvf bemoji-$BM_VERSION.tar.gz build/* + - zip -r bemoji-$BM_VERSION.zip build/* + - mv bemoji-$BM_VERSION.tar.gz bemoji-$BM_VERSION.zip dist release-gitea: group: release diff --git a/CHANGELOG.md b/CHANGELOG.md index c13bcce..2786a06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Pass through return code 1 from selection tool -- (!) Number of displayed recent emoji can be set with `-P` option. This replaces previous `-P` - history flag toggle. Use number to set amount of recent entries to display, `-P3`. To - completely hide history use `-P0` ### Changed diff --git a/LICENSE b/LICENSE index 2fb93db..aa51234 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Marty Oehme +Copyright (c) 2022 Marty Oehme Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 6211079..78f1b02 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ bindsym Mod4+Shift+e exec bemoji -t For `riverwm`, put the following in `~/.config/river/init`: ``` -riverctl map normal Mod4+Shift E spawn "bemoji -t" +riverctl map normal $mod+Shift E spawn "bemoji -t" ``` In `sxhkd`, put the following into `~/.config/sxhkd/sxhkdrc`: @@ -118,10 +118,10 @@ By default, bemoji will sort the list it displays by your most frequently and mo To disable this behavior, execute bemoji like the following: ```bash -bemoji -P 0 +bemoji -P ``` -This will stop bemoji from adding recently used emoji before displaying the list. +This will stop bemoji from re-ordering your emoji lists before displaying them. You can also stop bemoji from adding any emoji to your history in the first place: @@ -133,30 +133,20 @@ This will not add any of the emoji you pick to your recent emojis. Put both together to completely ignore the recent emoji feature of the program: ```bash -bemoji -p -P0 +bemoji -Pp ``` Like this, you'll be hiding any recent personal emoji and no one will know that you always type 👄🍆💦. -To limit the number of your recently used emoji that are shown without hiding them completely simply increase the number to however many you wish to display. -For example, to display only the top 4 recently used emoji: - -```bash -bemoji -P 4 -``` - The recent list will also contain emoji that are *not* usually on your lists, so kept in single-use lists for example. If you don't wish those to show up, make use of these options. -### Setting custom directories and editing history +### Setting custom directories By default bemoji stores your recent history in `$XDG_STATE_HOME/bemoji-history.txt`, so most often in `~/.local/state/bemoji-history.txt` -You can edit this file in any text editor to change your recent history, -removing, adding or changing the emoji appearing there. - You can overwrite the directories bemoji uses for its emoji lists and history files with the following two environment variables: ``` @@ -258,16 +248,16 @@ What follows is a list of all environment variables bemoji understands, with their default settings ```bash -BEMOJI_DB_LOCATION="$XDG_DATA_HOME/bemoji" # where the emoji lists reside -BEMOJI_HISTORY_LOCATION="$XDG_STATE_HOME" # where the state file resides +BEMOJI_DB_LOCATION=$XDG_DATA_HOME/bemoji # where the emoji lists reside +BEMOJI_HISTORY_LOCATION=$XDG_STATE_HOME # where the state file resides BEMOJI_CUSTOM_LIST="" # the custom emoji list to display BEMOJI_DOWNLOAD_LIST="" # the default emoji lists to download to database -BEMOJI_DEFAULT_COMMAND="" # which command to invoke by default -BEMOJI_PICKER_CMD="bemenu" # which picker tool to use -BEMOJI_CLIP_CMD="wl-copy" # which clipboard tool to use -BEMOJI_TYPE_CMD="wtype" # which typing tool to use (ydotool will NOT work) +BEMOJI_DEFAULT_COMMAND= # which command to invoke by default +BEMOJI_PICKER_CMD=bemenu # which picker tool to use +BEMOJI_CLIP_CMD=wl-copy # which clipboard tool to use +BEMOJI_TYPE_CMD=wtype # which typing tool to use (ydotool will NOT work) BEMOJI_PRIVATE_MODE=false # whether to save new entries -BEMOJI_LIMIT_RECENT="" # whether to display recent entries +BEMOJI_IGNORE_RECENT=false # whether to display recent entries BEMOJI_ECHO_NEWLINE=true # whether to end the output with a newline character ``` diff --git a/bemoji b/bemoji index f054141..10ce980 100755 --- a/bemoji +++ b/bemoji @@ -18,7 +18,7 @@ bm_echo_newline=${BEMOJI_ECHO_NEWLINE:-true} # Do not save choices bm_private_mode=${BEMOJI_PRIVATE_MODE:-false} # Do not sort results -bm_limit_recent="$BEMOJI_LIMIT_RECENT" +bm_ignore_recent=${BEMOJI_IGNORE_RECENT:-false} # Report usage usage() { @@ -35,7 +35,7 @@ usage() { echo " Other options:" echo " -n Do not print a newline after the picked emoji." echo " -p Do not save picked emoji to recent history." - echo " -P Limit number of recent emoji to display." + echo " -P Do not order emoji by recently used." echo " -D Choose from default lists to download." echo " Valid choices: all|none|emoji|math (multiple choices possible)." echo " -f Use a custom emoji database. Can be a url which will be retrieved." @@ -51,7 +51,7 @@ version() { } # Get Options -while getopts ":f:D:tcenpP:hv" o; do +while getopts ":f:D:tcenpPhv" o; do case "${o}" in f) BEMOJI_CUSTOM_LIST="${OPTARG}" ;; t) bm_cmds+=(_typer) ;; @@ -60,7 +60,7 @@ while getopts ":f:D:tcenpP:hv" o; do n) bm_echo_newline=false ;; D) BEMOJI_DOWNLOAD_LIST="${OPTARG}" ;; p) bm_private_mode=true ;; - P) bm_limit_recent="${OPTARG}" ;; + P) bm_ignore_recent=true ;; h) usage 0 ;; v) version ;; *) usage 1 ;; @@ -117,33 +117,25 @@ gather_emojis() { result=$(cat "$bm_db_location"/*.txt) fi - if [ -n "$bm_limit_recent" ] && [ "$bm_limit_recent" -eq 0 ]; then + if [ "$bm_ignore_recent" = true ]; then printf "%s" "$result" - return + else + printf "%s\n%s" "$(get_most_recent)" "$result" | cat -n - | sort -uk2 | sort -n | cut -f2- fi - - printf "%s\n%s" "$(get_most_recent "$bm_limit_recent")" "$result" | cat -n - | sort -uk2 | sort -n | cut -f2- } get_most_recent() { - limit=${1} recent_file="$bm_history_file" if [ ! -f "$recent_file" ]; then touch "$recent_file" fi # TODO improve this messy line - local result - result=$(sed -e '/^$/d' "$recent_file" | + sed -e '/^$/d' "$recent_file" | sort | uniq -c | - sort -k1rn | + sort -rn | sed -e 's/^\s*//' | - cut -d' ' -f2-) - if [ -z "$limit" ]; then - echo "$result" - else - echo "$result" | head -n "$limit" - fi + cut -d' ' -f2- } add_to_recent() { diff --git a/test/bemoji_history.bats b/test/bemoji_history.bats deleted file mode 100644 index 82d7394..0000000 --- a/test/bemoji_history.bats +++ /dev/null @@ -1,57 +0,0 @@ -#!/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_HISTORY_LOCATION="$BATS_TEST_TMPDIR/history" - mkdir -p "$BEMOJI_DB_LOCATION" "$BEMOJI_HISTORY_LOCATION" - cat "$BATS_TEST_DIRNAME/resources/test_emoji.txt" > "$BEMOJI_DB_LOCATION/emoji.txt" -} - -@test "sorts by frecency" { - echo -e "there\nhello\nhello" > "$BEMOJI_HISTORY_LOCATION/bemoji-history.txt" - echo -e "database" > "$BEMOJI_DB_LOCATION/emoji.txt" - BEMOJI_CLIP_CMD="cat -" BEMOJI_PICKER_CMD="cat -" run bemoji 3>&- - assert_output "hellotheredatabase" -} - -@test "history limiting uses sorted results" { - echo -e "zany\nmy\nisee\nonomatopeia" > "$BEMOJI_HISTORY_LOCATION/bemoji-history.txt" - echo -e "database" > "$BEMOJI_DB_LOCATION/emoji.txt" - BEMOJI_CLIP_CMD="cat -" BEMOJI_PICKER_CMD="cat -" run bemoji -P 1 3>&- - assert_output "iseedatabase" -} - -@test "history limiting takes frecency into account" { - echo -e "there\nfriend\nhello\nhello" > "$BEMOJI_HISTORY_LOCATION/bemoji-history.txt" - echo -e "database" > "$BEMOJI_DB_LOCATION/emoji.txt" - BEMOJI_CLIP_CMD="cat -" BEMOJI_PICKER_CMD="cat -" run bemoji -P 1 3>&- - assert_output "hellodatabase" -} - -@test "-P 0 disables history" { - echo -e "there\nfriend\nhello\nhello" > "$BEMOJI_HISTORY_LOCATION/bemoji-history.txt" - echo -e "database" > "$BEMOJI_DB_LOCATION/emoji.txt" - BEMOJI_CLIP_CMD="cat -" BEMOJI_PICKER_CMD="cat -" run bemoji -P 0 3>&- - assert_output "database" -} - -@test "BEMOJI_LIMIT_RECENT=0 disables history" { - echo -e "there\nfriend\nhello\nhello" > "$BEMOJI_HISTORY_LOCATION/bemoji-history.txt" - echo -e "database" > "$BEMOJI_DB_LOCATION/emoji.txt" - BEMOJI_LIMIT_RECENT=0 BEMOJI_CLIP_CMD="cat -" BEMOJI_PICKER_CMD="cat -" run bemoji 3>&- - assert_output "database" -} -