#sqlite #list #overhead #manage #zero #stored

app list-manager

零开销管理待办事项列表

1 个不稳定版本

0.1.0 2023年11月15日

#1279数据库接口

MIT 许可证

21KB
465 代码行

list-manager

基本思路是零开销地管理待办事项列表。

Rust包提供了管理存储在sqlite数据库中的列表和项目的命令。

因此,通过脚本,从你的Neovim、从你的WM、从任何你想的地方,你都将能够操作这些列表。

示例

  • 在bash脚本中使用FZF来操作列表
fzf.sh
#!/bin/sh

list_lists() {
  options=($(./target/debug/lm list) "[add]" "[remove]")
  selected_option=$(printf '%s\n' "${options[@]}" | fzf --prompt="select an option: ")

  if [ -n "$selected_option" ]; then
    case "$selected_option" in
      "[add]")
        add_list
        ;;
      "[remove]")
        delete_list
        ;;
      *)
        list_items "$selected_option"
        ;;
    esac
  fi
}

delete_list() {
  list_name=$(./target/debug/lm list | fzf --prompt="select a list to delete: ")
  if [ -n "$list_name" ]; then
    remove_list "$list_name"
  fi
}

remove_list() {
  list_name="$1"
  ./target/debug/lm remove "$list_name"
}

add_list() {
  new_list=$(read -p "[enter a name for the list]: " && echo "$REPLY")
  if [ -n "$new_list" ]; then
    ./target/debug/lm add "$new_list"
    list_items "$new_list"
  fi
}

list_items() {
  list_name="$1"
  while true; do
    options=($(./target/debug/lm list "$list_name") "[remove]" "[add]" "[back]")
    selected_option=$(printf '%s\n' "${options[@]}" | fzf --prompt="select an option: ")

    if [ -z "$selected_option" ]; then
      break
    elif [ "$selected_option" == "[add]" ]; then
      add_item "$list_name"
    elif [ "$selected_option" == "[remove]" ]; then
      delete_item "$list_name"
    elif [ "$selected_option" == "[back]" ]; then
      list_lists && break
    else
      edit_item "$list_name" "$selected_option"
    fi
  done
}

delete_item() {
  list_name="$1"
  item_content=$(./target/debug/lm list "$list_name" | fzf --prompt="select an item to delete: ")
  if [ -n "$item_content" ]; then
    remove_item "$list_name" "$item_content"
  fi
}

add_item() {
  list_name="$1"
  new_item=$(read -p "[enter a name for the item]: " && echo "$REPLY")
  if [ -n "$new_item" ]; then
    ./target/debug/lm add "$list_name" "$new_item"
    list_items "$list_name"
  fi
}

remove_item() {
  list_name="$1"
  item_content="$2"
  ./target/debug/lm remove "$list_name" "$item_content"
}

edit_item() {
  list_name="$1"
  item_content="$2"
  if [[ $item_content == *http*://* || $item_content == *https*://* ]]; then
    xdg-open "$item_content"
    edit_item "$list_name" "$item_content" "done"
  else
    new_status=$(printf "todo\ndoing\ndone" | fzf --prompt="select a status for the item: ")
    if [ -n "$new_status" ]; then
      ./target/debug/lm edit "$list_name" "$item_content" "$new_status"
    fi
  fi
}

list_lists

依赖

~23–34MB
~501K SLoC