From 36f0084457f50dddf85f5dccf6cf0b99c0251001 Mon Sep 17 00:00:00 2001 From: Soispha Date: Wed, 3 Jan 2024 22:38:55 +0100 Subject: refactor(hm/pkgs/scr/neorg): Add subdir for specific script groups --- hm/soispha/pkgs/scripts.nix | 4 +- hm/soispha/pkgs/scripts/specific/neorg/neorg | 323 +++++++++++++++++++++ .../scripts/specific/neorg/neorg_id_function.c | 78 +++++ .../scripts/specific/neorg/neorg_id_function.sh | 12 + hm/soispha/pkgs/scripts/wrappers/neorg/neorg | 323 --------------------- .../scripts/wrappers/neorg/neorg_id_function.c | 78 ----- .../scripts/wrappers/neorg/neorg_id_function.sh | 12 - 7 files changed, 415 insertions(+), 415 deletions(-) create mode 100755 hm/soispha/pkgs/scripts/specific/neorg/neorg create mode 100644 hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.c create mode 100755 hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/neorg/neorg delete mode 100644 hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.c delete mode 100755 hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.sh diff --git a/hm/soispha/pkgs/scripts.nix b/hm/soispha/pkgs/scripts.nix index a4cab3d4..76e8cace 100644 --- a/hm/soispha/pkgs/scripts.nix +++ b/hm/soispha/pkgs/scripts.nix @@ -71,7 +71,7 @@ }; neorg-scr = sysLib.writeShellScriptWithLibraryAndKeepPath { name = "neorg"; - src = ./scripts/wrappers/neorg/neorg; + src = ./scripts/specific/neorg/neorg; dependencies = with pkgs; [ cocogitto git-crypt @@ -89,7 +89,7 @@ ALL_WORKSPACES = "${lib.strings.concatStringsSep "|" (builtins.attrNames config.programs.nixvim.plugins.neorg.modules."core.dirman".config.workspaces)}"; ID_GENERATION_FUNCTION = "${sysLib.writeShellScriptWithLibrary { name = "neorg_id_function"; - src = ./scripts/wrappers/neorg/neorg_id_function.sh; + src = ./scripts/specific/neorg/neorg_id_function.sh; dependencies = with pkgs; [ taskwarrior gawk diff --git a/hm/soispha/pkgs/scripts/specific/neorg/neorg b/hm/soispha/pkgs/scripts/specific/neorg/neorg new file mode 100755 index 00000000..d1766e62 --- /dev/null +++ b/hm/soispha/pkgs/scripts/specific/neorg/neorg @@ -0,0 +1,323 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="1.10.2" . %SHELL_LIBRARY_PATH + +# these are used in version() +AUTHORS="Soispha" +YEARS="2023" + +NAME="neorg" + +help() { +cat << EOF +This is a quick wrapper to make starting neorg easier. + +USAGE: + $NAME [OPTIONS] [COMMAND] + +OPTIONS: + --help | -h + Display this help and exit. + + --version | -v + Display version and copyright information and exit. +COMMANDS: + task [ID] + Open the neorg context associated with the current context and + the uuid of the task with id ID. Without ID, it'll open the + current context's norg file. + If no context is set, drops you to the selection prompt + + dmenu + Select a project in dmenu mode. This will give you all projects + and exectute the selected one as in 'neorg projects ' + + workspace [WS] + The neorg workspace (WS) to open at startup, an empty value drops + you at a prompt to enter the workspace yourself. + + project [P] + Opens the webbrowser with either the context (P) or + the current active context as argument if no context is supplied + + list + Lists all available contexts + + add + Allows you to quickly add projects + + fstart ID + Starts the task (ID) but only after it stooped + the previous active task, if it existed. + + fstop + Stops the current active task +ARGUMENTS: + ID | *([0-9]) := [[%ID_GENERATION_FUNCTION]] + The function displays all possible IDs of the eligable tasks. + + WS := %ALL_WORKSPACES + All possible workspaces + + P := %ALL_PROJECTS_PIPE + The possible project + +EOF +} + + +# Runs it's first argument and then the second, regardless if the first failed or succeed +chain() { + eval "$1"; eval "$2" +} + +# Utils {{{ +UTILS_get_current_context() { + current_context="$(task _get rc.context)"; + printf "%s\n" "$current_context"; +} +UTILS_get_current_context_path() { + current_context="$1"; + context_path="$(task _get rc.context."$current_context".rc.neorg_path 2>/dev/null)"; + if ! [ "$context_path" ]; then + context_path="$(grep "context.$current_context.rc.neorg_path" "%HOME_TASKRC" | awk 'BEGIN {FS="="} {print $2}')"; + [ "$context_path" ] || die "All contexts should have a 'neorg_path' set!" + fi + printf "%s\n" "$context_path" +} +UTILS_get_neorg_project_dir() { + # Perform shell expansion of Tilde + neorg_project_dir="$(sed "s|~|$HOME|" "$(ptmp "%DEFAULT_NEORG_PROJECT_DIR")")"; + printf "%s\n" "$neorg_project_dir" +} +UTILS_project_to_context_name() { + project="$1"; + context="$(sed 's|\.|_|g' "$(ptmp "$project")")"; + printf "%s\n" "$context"; +} +UTILS_context_to_project_name() { + context="$1"; + project="$(sed 's|_|\.|g' "$(ptmp "$context")")"; + printf "%s\n" "$project"; +} +# }}} + +# Workspace {{{ +WORKSPACE_open_neorg_workspace() { + nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace $1\n")" +} +WORKSPACE_open_neorg_workspace_prompt() { + nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace ")" +} +# }}} +# Context {{{ +CONTEXT_open_current_task_context() { + current_context="$(UTILS_get_current_context)" + if [ "$current_context" ]; then + context_path="$(UTILS_get_current_context_path "$current_context")"; + + extended_neorg_project_dir="$(UTILS_get_neorg_project_dir)"; + cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir"; + + nvim "$extended_neorg_project_dir/$context_path"; + + git add .; + git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign + else + warn "No context active"; + WORKSPACE_open_neorg_workspace_prompt; + fi +} +CONTEXT_open_current_task_context_at_task_id() { + task_id="$1"; + current_context="$(UTILS_get_current_context)" + if [ "$current_context" ]; then + context_path="$(UTILS_get_current_context_path "$current_context")"; + extended_neorg_project_dir="$(UTILS_get_neorg_project_dir)"; + task_uuid="$(task "$task_id" uuids)" + + cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir"; + + if ! grep -q "% $task_uuid" "$extended_neorg_project_dir/$context_path"; then + echo "* TITLE (% $task_uuid)" >> "$extended_neorg_project_dir/$context_path" + fi + + nvim "$extended_neorg_project_dir/$context_path" -c "/% $task_uuid"; + + git add .; + git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign + else + warn "No context active"; + WORKSPACE_open_neorg_workspace_prompt; + fi +} +# }}} +# Project {{{ +PROJECT_open_current_context_in_browser() { + current_context="$(UTILS_get_current_context)"; + [ "$current_context" ] || die "No current context to use"; + PROJECT_open_context_in_browser "$(UTILS_context_to_project_name "$current_context")"; +} +PROJECT_open_context_in_browser() { + context="$1"; + [ "$context" ] || die "BUG: No context supplied to PROJECT_open_context_in_browser" + + old_context="$(UTILS_get_current_context)"; + # We have ensured that only one task may be active + old_started_task="$(task +ACTIVE _ids)"; + + tracking="$(mktmp)"; + task "project:$context" _ids | xargs task _zshids > "$tracking"; + task context "$(UTILS_project_to_context_name "$context")" + + while read -r description; do + desc="$(echo "$description" | awk -F: '{print $2}' )"; + if [ "$desc" = "tracking" ]; then + task_id="$(echo "$description" | awk -F: '{print $1}' )"; + notify-send "(Neorg)" "Starting task $context -> $desc"; + task start "$task_id" + break + fi + done < "$tracking" + + + firefox -P "$context" + + task stop "$task_id" + [ "$old_started_task" ] && task start "$old_started_task" + + if [ "$old_context" ]; then + task context "$old_context" + else + task context none + fi +} +# }}} +# Dmenu {{{ +DMENU_open_context_in_browser() { + project="$(echo "%ALL_PROJECTS_PIPE" | rofi -sep "|" -dmenu)"; + if [ "$project" ]; then + PROJECT_open_context_in_browser "$project"; + else + current_context="$(UTILS_get_current_context)"; + [ "$current_context" ] || chain 'notify-send "(Neorg) No current context"' "exit 1" + PROJECT_open_context_in_browser "$current_context"; + fi +} +# }}} +# List {{{ +LIST_list_all_contexts_newline() { + print "%ALL_PROJECTS_NEWLINE" +} +LIST_list_all_contexts_comma() { + print "%ALL_PROJECTS_COMMA" +} +# }}} +# Add {{{ +ADD_open_taskwarrior_project_file() { + task_project_file="%TASK_PROJECT_FILE"; + cd "$(dirname $task_project_file)" || die "BUG: task_project_file ('$task_project_file') can't be accessed" + git_dir="$(search_flake_base_dir)"; + [ "$git_dir" ] || die "(BUG): No git directory?" + cd "$git_dir" || die "Unreachable, this MUST exists" + nvim "$task_project_file"; + git add "$task_project_file"; + + base_task_project_file_path="$(awk "{ gsub(\"$git_dir/\", \"\", \$0); print }" "$(ptmp "$task_project_file")")" + git add $task_project_file; + if ! [ "$(git status --porcelain=v2 | awk '{print $2}' | head -c 1)" = "." ]; then + # TODO: Also check that only our file is staged before committing <2023-10-20> + git commit --verbose --message="chore($(dirname "$base_task_project_file_path")): Update" + fi +} +# }}} +# fStart {{{ +FSTART_start_new_task() { + task_id="$1"; + FSTOP_stop_current_task; + task start "$task_id" +} +# }}} +# fStop {{{ +FSTOP_stop_current_task() { + # we ensured that only one task may be active + active="$(task +ACTIVE _ids)"; + [ "$active" ] && task stop "$active"; +} +# }}} + +for arg in "$@"; do + case "$arg" in + "--help" | "-h") + help; + exit 0; + ;; + "--version" | "-v") + version; + exit 0; + ;; + esac +done + +while [ "$#" -ne 0 ]; do + case "$1" in + "t"*) # task + shift 1; + task_id="$1"; + [ "$task_id" ] || chain CONTEXT_open_current_task_context "exit 0" + CONTEXT_open_current_task_context_at_task_id "$task_id"; + exit 0; + ;; + "w"*) # workspace + shift 1; + workspace_to_open="$1"; + # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> + [ "$workspace_to_open" ] || chain WORKSPACE_open_neorg_workspace_prompt "exit 0"; + WORKSPACE_open_neorg_workspace "$workspace_to_open"; + exit 0; + ;; + "p"*) # project + shift 1; + context_to_open="$1"; + # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> + [ "$context_to_open" ] || chain PROJECT_open_current_context_in_browser "exit 0"; + if ! grep -q "$context_to_open" "$(ptmp "%ALL_PROJECTS_NEWLINE")"; then + die "Your context ('$context_to_open') is not in the list of available contexts: +%ALL_PROJECTS_COMMA"; + fi + PROJECT_open_context_in_browser "$context_to_open"; + exit 0; + ;; + "l"*) # list + LIST_list_all_contexts_newline; + exit 0 + ;; + "a"*) # add-project + ADD_open_taskwarrior_project_file; + exit 0 + ;; + "d"*) # dmenu + DMENU_open_context_in_browser; + exit 0 + ;; + "fsta"*) # fstart + shift 1; + task_id="$1"; + [ "$task_id" ] || die "No task id provided to fstart"; + FSTART_start_new_task "$task_id"; + exit 0 + ;; + "fsto"*) # fstop + FSTOP_stop_current_task; + exit 0 + ;; + *) + die "Command '$1' does not exist! Please look at:\n $NAME --help"; + exit 0; + ;; + esac +done + +CONTEXT_open_current_task_context; +# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.c b/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.c new file mode 100644 index 00000000..a635b4b0 --- /dev/null +++ b/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include + +// It's just impossible to correctly quote this function when it's in any +// language that has special treatment for backslashes + +char *exec_command(const char *command) { + FILE *fp; + char *buffer = 0; + long length; + char path[1035]; + + /* Open the command for reading. */ + fp = popen(command, "r"); + if (fp == NULL) { + fprintf(stderr, "Failed to execute '%s' because of: %s\n", command, + strerror(errno)); + exit(1); + } + + fseek(fp, 0, SEEK_END); + length = ftell(fp); + fseek(fp, 0, SEEK_SET); + buffer = malloc(length + 1); + if (buffer) { + if (!fread(buffer, 1, length, fp)) { + fprintf(stderr, "Failed to read output of command '%s' because of: %s\n", + command, strerror(errno)); + exit(1); + } + } + + pclose(fp); + buffer[length] = '\0'; + return buffer; +} + +int main() { + char *context = exec_command("task _get rc.context"); + printf("%s\n", context); + + char *filter = malloc(100); // should never be bigger than this number + // + // Check if the context is not empty + if (strlen(context) > 1) { + sprintf(filter, "project:%s", context); + } else { + filter = "0-10000"; + } + char *task_ids = malloc(1000); + sprintf(task_ids, "task %s _ids", filter); + free(filter); + char *ids = exec_command(task_ids); + free(task_ids); + + if (strlen(ids) > 1) { + char *task_zshids = malloc(1000); + sprintf(task_zshids, "task _zshids %s", ids); + char *zshids = exec_command(task_zshids); + free(task_zshids); + + char *awk = malloc(1000); + sprintf(awk, + "awk -F: -v q=\"'\" '{gsub(/'\''/, q \"\\\" q q ); print $1 \": \" " + "q $2 q}' %s", + zshids); + char *output = exec_command(awk); + free(awk); + printf("%s\n", output); + free(output); + } else { + // No task match the filter + return 0; + } + return 0; +} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh b/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh new file mode 100755 index 00000000..413a18de --- /dev/null +++ b/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh @@ -0,0 +1,12 @@ +#! /bin/sh +context="$(task _get rc.context)"; +if [ "$context" ]; then + filter="project:$context"; +else + filter="0-10000"; +fi +tasks="$(task "$filter" _ids)"; + +if [ "$tasks" ]; then + echo "$tasks" | xargs task _zshids | awk -F: -v q="'" '{gsub(/'\''/, q "\\" q q ); print $1 ":" q $2 q}'; +fi diff --git a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg b/hm/soispha/pkgs/scripts/wrappers/neorg/neorg deleted file mode 100755 index d1766e62..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg +++ /dev/null @@ -1,323 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="1.10.2" . %SHELL_LIBRARY_PATH - -# these are used in version() -AUTHORS="Soispha" -YEARS="2023" - -NAME="neorg" - -help() { -cat << EOF -This is a quick wrapper to make starting neorg easier. - -USAGE: - $NAME [OPTIONS] [COMMAND] - -OPTIONS: - --help | -h - Display this help and exit. - - --version | -v - Display version and copyright information and exit. -COMMANDS: - task [ID] - Open the neorg context associated with the current context and - the uuid of the task with id ID. Without ID, it'll open the - current context's norg file. - If no context is set, drops you to the selection prompt - - dmenu - Select a project in dmenu mode. This will give you all projects - and exectute the selected one as in 'neorg projects ' - - workspace [WS] - The neorg workspace (WS) to open at startup, an empty value drops - you at a prompt to enter the workspace yourself. - - project [P] - Opens the webbrowser with either the context (P) or - the current active context as argument if no context is supplied - - list - Lists all available contexts - - add - Allows you to quickly add projects - - fstart ID - Starts the task (ID) but only after it stooped - the previous active task, if it existed. - - fstop - Stops the current active task -ARGUMENTS: - ID | *([0-9]) := [[%ID_GENERATION_FUNCTION]] - The function displays all possible IDs of the eligable tasks. - - WS := %ALL_WORKSPACES - All possible workspaces - - P := %ALL_PROJECTS_PIPE - The possible project - -EOF -} - - -# Runs it's first argument and then the second, regardless if the first failed or succeed -chain() { - eval "$1"; eval "$2" -} - -# Utils {{{ -UTILS_get_current_context() { - current_context="$(task _get rc.context)"; - printf "%s\n" "$current_context"; -} -UTILS_get_current_context_path() { - current_context="$1"; - context_path="$(task _get rc.context."$current_context".rc.neorg_path 2>/dev/null)"; - if ! [ "$context_path" ]; then - context_path="$(grep "context.$current_context.rc.neorg_path" "%HOME_TASKRC" | awk 'BEGIN {FS="="} {print $2}')"; - [ "$context_path" ] || die "All contexts should have a 'neorg_path' set!" - fi - printf "%s\n" "$context_path" -} -UTILS_get_neorg_project_dir() { - # Perform shell expansion of Tilde - neorg_project_dir="$(sed "s|~|$HOME|" "$(ptmp "%DEFAULT_NEORG_PROJECT_DIR")")"; - printf "%s\n" "$neorg_project_dir" -} -UTILS_project_to_context_name() { - project="$1"; - context="$(sed 's|\.|_|g' "$(ptmp "$project")")"; - printf "%s\n" "$context"; -} -UTILS_context_to_project_name() { - context="$1"; - project="$(sed 's|_|\.|g' "$(ptmp "$context")")"; - printf "%s\n" "$project"; -} -# }}} - -# Workspace {{{ -WORKSPACE_open_neorg_workspace() { - nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace $1\n")" -} -WORKSPACE_open_neorg_workspace_prompt() { - nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace ")" -} -# }}} -# Context {{{ -CONTEXT_open_current_task_context() { - current_context="$(UTILS_get_current_context)" - if [ "$current_context" ]; then - context_path="$(UTILS_get_current_context_path "$current_context")"; - - extended_neorg_project_dir="$(UTILS_get_neorg_project_dir)"; - cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir"; - - nvim "$extended_neorg_project_dir/$context_path"; - - git add .; - git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign - else - warn "No context active"; - WORKSPACE_open_neorg_workspace_prompt; - fi -} -CONTEXT_open_current_task_context_at_task_id() { - task_id="$1"; - current_context="$(UTILS_get_current_context)" - if [ "$current_context" ]; then - context_path="$(UTILS_get_current_context_path "$current_context")"; - extended_neorg_project_dir="$(UTILS_get_neorg_project_dir)"; - task_uuid="$(task "$task_id" uuids)" - - cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir"; - - if ! grep -q "% $task_uuid" "$extended_neorg_project_dir/$context_path"; then - echo "* TITLE (% $task_uuid)" >> "$extended_neorg_project_dir/$context_path" - fi - - nvim "$extended_neorg_project_dir/$context_path" -c "/% $task_uuid"; - - git add .; - git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign - else - warn "No context active"; - WORKSPACE_open_neorg_workspace_prompt; - fi -} -# }}} -# Project {{{ -PROJECT_open_current_context_in_browser() { - current_context="$(UTILS_get_current_context)"; - [ "$current_context" ] || die "No current context to use"; - PROJECT_open_context_in_browser "$(UTILS_context_to_project_name "$current_context")"; -} -PROJECT_open_context_in_browser() { - context="$1"; - [ "$context" ] || die "BUG: No context supplied to PROJECT_open_context_in_browser" - - old_context="$(UTILS_get_current_context)"; - # We have ensured that only one task may be active - old_started_task="$(task +ACTIVE _ids)"; - - tracking="$(mktmp)"; - task "project:$context" _ids | xargs task _zshids > "$tracking"; - task context "$(UTILS_project_to_context_name "$context")" - - while read -r description; do - desc="$(echo "$description" | awk -F: '{print $2}' )"; - if [ "$desc" = "tracking" ]; then - task_id="$(echo "$description" | awk -F: '{print $1}' )"; - notify-send "(Neorg)" "Starting task $context -> $desc"; - task start "$task_id" - break - fi - done < "$tracking" - - - firefox -P "$context" - - task stop "$task_id" - [ "$old_started_task" ] && task start "$old_started_task" - - if [ "$old_context" ]; then - task context "$old_context" - else - task context none - fi -} -# }}} -# Dmenu {{{ -DMENU_open_context_in_browser() { - project="$(echo "%ALL_PROJECTS_PIPE" | rofi -sep "|" -dmenu)"; - if [ "$project" ]; then - PROJECT_open_context_in_browser "$project"; - else - current_context="$(UTILS_get_current_context)"; - [ "$current_context" ] || chain 'notify-send "(Neorg) No current context"' "exit 1" - PROJECT_open_context_in_browser "$current_context"; - fi -} -# }}} -# List {{{ -LIST_list_all_contexts_newline() { - print "%ALL_PROJECTS_NEWLINE" -} -LIST_list_all_contexts_comma() { - print "%ALL_PROJECTS_COMMA" -} -# }}} -# Add {{{ -ADD_open_taskwarrior_project_file() { - task_project_file="%TASK_PROJECT_FILE"; - cd "$(dirname $task_project_file)" || die "BUG: task_project_file ('$task_project_file') can't be accessed" - git_dir="$(search_flake_base_dir)"; - [ "$git_dir" ] || die "(BUG): No git directory?" - cd "$git_dir" || die "Unreachable, this MUST exists" - nvim "$task_project_file"; - git add "$task_project_file"; - - base_task_project_file_path="$(awk "{ gsub(\"$git_dir/\", \"\", \$0); print }" "$(ptmp "$task_project_file")")" - git add $task_project_file; - if ! [ "$(git status --porcelain=v2 | awk '{print $2}' | head -c 1)" = "." ]; then - # TODO: Also check that only our file is staged before committing <2023-10-20> - git commit --verbose --message="chore($(dirname "$base_task_project_file_path")): Update" - fi -} -# }}} -# fStart {{{ -FSTART_start_new_task() { - task_id="$1"; - FSTOP_stop_current_task; - task start "$task_id" -} -# }}} -# fStop {{{ -FSTOP_stop_current_task() { - # we ensured that only one task may be active - active="$(task +ACTIVE _ids)"; - [ "$active" ] && task stop "$active"; -} -# }}} - -for arg in "$@"; do - case "$arg" in - "--help" | "-h") - help; - exit 0; - ;; - "--version" | "-v") - version; - exit 0; - ;; - esac -done - -while [ "$#" -ne 0 ]; do - case "$1" in - "t"*) # task - shift 1; - task_id="$1"; - [ "$task_id" ] || chain CONTEXT_open_current_task_context "exit 0" - CONTEXT_open_current_task_context_at_task_id "$task_id"; - exit 0; - ;; - "w"*) # workspace - shift 1; - workspace_to_open="$1"; - # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> - [ "$workspace_to_open" ] || chain WORKSPACE_open_neorg_workspace_prompt "exit 0"; - WORKSPACE_open_neorg_workspace "$workspace_to_open"; - exit 0; - ;; - "p"*) # project - shift 1; - context_to_open="$1"; - # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> - [ "$context_to_open" ] || chain PROJECT_open_current_context_in_browser "exit 0"; - if ! grep -q "$context_to_open" "$(ptmp "%ALL_PROJECTS_NEWLINE")"; then - die "Your context ('$context_to_open') is not in the list of available contexts: -%ALL_PROJECTS_COMMA"; - fi - PROJECT_open_context_in_browser "$context_to_open"; - exit 0; - ;; - "l"*) # list - LIST_list_all_contexts_newline; - exit 0 - ;; - "a"*) # add-project - ADD_open_taskwarrior_project_file; - exit 0 - ;; - "d"*) # dmenu - DMENU_open_context_in_browser; - exit 0 - ;; - "fsta"*) # fstart - shift 1; - task_id="$1"; - [ "$task_id" ] || die "No task id provided to fstart"; - FSTART_start_new_task "$task_id"; - exit 0 - ;; - "fsto"*) # fstop - FSTOP_stop_current_task; - exit 0 - ;; - *) - die "Command '$1' does not exist! Please look at:\n $NAME --help"; - exit 0; - ;; - esac -done - -CONTEXT_open_current_task_context; -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.c b/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.c deleted file mode 100644 index a635b4b0..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include -#include - -// It's just impossible to correctly quote this function when it's in any -// language that has special treatment for backslashes - -char *exec_command(const char *command) { - FILE *fp; - char *buffer = 0; - long length; - char path[1035]; - - /* Open the command for reading. */ - fp = popen(command, "r"); - if (fp == NULL) { - fprintf(stderr, "Failed to execute '%s' because of: %s\n", command, - strerror(errno)); - exit(1); - } - - fseek(fp, 0, SEEK_END); - length = ftell(fp); - fseek(fp, 0, SEEK_SET); - buffer = malloc(length + 1); - if (buffer) { - if (!fread(buffer, 1, length, fp)) { - fprintf(stderr, "Failed to read output of command '%s' because of: %s\n", - command, strerror(errno)); - exit(1); - } - } - - pclose(fp); - buffer[length] = '\0'; - return buffer; -} - -int main() { - char *context = exec_command("task _get rc.context"); - printf("%s\n", context); - - char *filter = malloc(100); // should never be bigger than this number - // - // Check if the context is not empty - if (strlen(context) > 1) { - sprintf(filter, "project:%s", context); - } else { - filter = "0-10000"; - } - char *task_ids = malloc(1000); - sprintf(task_ids, "task %s _ids", filter); - free(filter); - char *ids = exec_command(task_ids); - free(task_ids); - - if (strlen(ids) > 1) { - char *task_zshids = malloc(1000); - sprintf(task_zshids, "task _zshids %s", ids); - char *zshids = exec_command(task_zshids); - free(task_zshids); - - char *awk = malloc(1000); - sprintf(awk, - "awk -F: -v q=\"'\" '{gsub(/'\''/, q \"\\\" q q ); print $1 \": \" " - "q $2 q}' %s", - zshids); - char *output = exec_command(awk); - free(awk); - printf("%s\n", output); - free(output); - } else { - // No task match the filter - return 0; - } - return 0; -} diff --git a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.sh b/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.sh deleted file mode 100755 index 413a18de..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/neorg/neorg_id_function.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh -context="$(task _get rc.context)"; -if [ "$context" ]; then - filter="project:$context"; -else - filter="0-10000"; -fi -tasks="$(task "$filter" _ids)"; - -if [ "$tasks" ]; then - echo "$tasks" | xargs task _zshids | awk -F: -v q="'" '{gsub(/'\''/, q "\\" q q ); print $1 ":" q $2 q}'; -fi -- cgit 1.4.1