diff --git a/messages.rkt b/messages.rkt index 026cb52..d07723b 100644 --- a/messages.rkt +++ b/messages.rkt @@ -1,153 +1,130 @@ -#lang racket/base - -(require (prefix-in config: "config.rkt")) - -(provide (all-defined-out)) - -(define messages - (hash - 'show-help (string-append - "Usage\n" - "=====\n" - "If you are using the " - "<" config:initialize-command ">" " or " - "<" config:list-command ">" " commands, follow the structure below:\n" - config:program-name " \n" - "\n" - - "If you are using the " - "<" config:add-command ">" " or " - "<" config:remove-command ">" " commands, follow the structure below:\n" - config:program-name " [argument]\n" - "\n" - - "Commands\n" - "========\n" - - "<" config:initialize-command ">" ":\n" - "Create a file in " - config:program-directory - config:program-file - " where your to-do list will be stored\n" - "Example:\n" - config:program-name " " - config:initialize-command "\n" - "\n" - - "<" config:list-command ">" ":\n" - "Displays items in the list\n" - "Example:\n" - config:program-name " " - config:list-command "\n" - "\n" - - "<" config:add-command ">" " " - "[argument]:\n" - "Adds an item to the list\n" - "Example:\n" - config:program-name " " - config:add-command " " - "bread\n" - config:program-name " " - config:add-command " " - "this is an unquoted task\n" - config:program-name " " - config:add-command " " - "\"this is a quoted task which isn't any different from an unquoted task\"\n" - "\n" - - "<" config:remove-command ">" " " - "[argument]:\n" - "Removes an item from the list\n" - "Example:\n" - config:program-name " " config:remove-command " " "1\n" - "\n" - - "Note:\n" - "You may have to run " - "`" config:program-name " " config:list-command "`" " " - "see which number corresponds to which item in the list." - " In the example above, the first item was removed from the list\n" - "\n" - - "Can't see the whole help message?\n" - "=================================\n" - "Try running " - "`" config:program-name " -h | less` to use the arrow keys " - "to scroll up and down through the help message, then when you " - "want to quit, just type `q` (without the grave accents)\n") - - 'empty-to-do-list "> There is nothing in your list \n" - - 'show-usage (string-append - "> For usage type " - "`" config:program-name " -h`" - " or " - "`" config:program-name " --help`\n") - - 'creating (string-append - "> Creating " - config:program-file - " file in " - config:program-directory "\n") - - 'creation-error (string-append - "> Error: Could not create " - config:program-file - " in " - config:program-directory - ".\n" - "> This may be due to directory permissions\n") - - 'file-already-exists (string-append - "> Error: " - config:program-name - " already exists in " - config:program-directory - config:program-file "\n") - - 'successfully-created (string-append - "> " - config:program-directory - config:program-file - " has been successfully created\n") - - 'file-not-found (string-append - "> Error: Could not find " - config:program-directory - config:program-file "\n") - - 'init-y/n (string-append - "> A " - config:program-file - " file will be created in the directory " - config:program-directory "\n" - "> Are you sure you want to continue? [y/n]\n") - - 'try-init (string-append - "> Try typing " - "`" config:program-name " init` " - "to set it up\n") - - 'terminating (string-append - "> Exiting " - config:program-name - "\n") - - 'choose-y/n "> Error: Please choose y or n\n" - - 'not-in-list "> Error: Item does not exist\n" - - 'item-added-prefix "> Added " - - 'item-added-suffix " to list\n" - - 'item-removed-prefix "> Removed " - - 'item-removed-suffix " from list\n")) - -(define y/n - (hash - 'yes '("yes" "Yes" "y" "Y") - - 'no '("no" "No" "n" "N"))) +#lang racket/base + +(require (prefix-in config: "config.rkt")) + +(provide (all-defined-out)) + +(define messages + (hash + 'show-help (string-append + "Usage\n" + "=====\n" + (format "If you want to use the ~a or ~a commands, follow the structure below:\n" + config:initialize-command + config:list-command) + (format "~a \n\n" + config:program-name) + + (format "If you want to use the ~a or ~a commands, follow the structure below:\n" + config:add-command + config:remove-command) + (format "~a [argument]\n\n" config:program-name) + + "Note: Replace with one of the Commands below without the surrounding \"<\" and \">\".\n\n" + + "Commands\n" + "========\n" + (format "This section describes the commands available for ~a.\n\n" config:program-name) + (format "Note: The commands mentioned in this section should replace the \"\" filler text found in the Usage section above.\n\n") + + ;; init + (format "~a\n" config:initialize-command) + "====\n" + (format "Creates a file in ~a~a. This is where your to-do list will be stored.\n\n" + config:program-directory + config:program-file) + + "Example:\n" + (format "~a ~a\n\n" config:program-name config:initialize-command) + + ;; ls + (format "~a\n" config:list-command) + "====\n" + "Displays items in your to-do list.\n\n" + + "Example:\n" + (format "~a ~a\n\n" config:program-name config:list-command) + + (format "~a [argument(s)]\n" config:add-command) + "=================\n" + "Adds an item to the list.\n\n" + + "Examples:\n" + (format "~a ~a this is an unquoted item\n" config:program-name config:add-command) + (format "~a ~a \"this is a quoted item\"\n\n" config:program-name config:add-command) + + (format "~a [argument]\n" config:remove-command) + "=============\n" + "Removes an item from the list\n\n" + + "Example:\n" + (format "~a ~a 1\n\n" config:program-name config:remove-command) + + (format "Note: You may have to run `~a ~a` to see which number corresponds to which item in your to-do list." + config:program-name + config:list-command) + " " + "In the example above, the first item was removed from the to-do list.\n\n" + + "Can't see the whole help message?\n" + "=================================\n" + (format "Try running `~a -h | less` so you can use the arrow keys to scrolll up and down." + config:program-name) + " " + "When you want to quit, type `q` (without the grave accents).") + + 'empty-to-do-list "> There is nothing in your list \n" + + 'show-usage (format "> For usage type `~a -h` or `~a --help`\n" + config:program-name + config:program-name) + + 'creating (format "> Creating a(n) ~a file in ~a\n" + config:program-file + config:program-directory) + + 'creation-error (string-append + (format "> Error: Could not create a(n) ~a in ~a.\n" + config:program-file + config:program-directory) + "> This might be due to directory permissions\n") + + 'file-already-exists (format "> Error: ~a already exists in ~a~a.\n" + config:program-name + config:program-directory + config:program-file) + + 'successfully-created (format "> ~a~a has been successfully created\n" + config:program-directory + config:program-file) + + 'file-not-found (format "> Error: Could not find ~a~a\n" + config:program-directory + config:program-file) + + 'init-y/n (string-append + (format "> A ~a file will be created in the ~a directory.\n" + config:program-file + config:program-directory) + "> Are you sure you want to continue? [y/n]\n") + + 'try-init (format "> Try typing `~a ~a` to set it up (without the grave accents).\n" + config:program-name + config:initialize-command) + + 'terminating (format "> Exiting ~a\n" config:program-name) + + 'choose-y/n "> Error: Please choose y or n\n" + + 'not-in-list "> Error: Item does not exist\n" + + 'item-added-prefix "> Added " + + 'item-added-suffix " to list\n" + + 'item-removed-prefix "> Removed " + + 'item-removed-suffix " from list\n")) + +(define y/n (hash 'yes '("yes" "Yes" "y" "Y") + 'no '("no" "No" "n" "N"))) diff --git a/util.rkt b/util.rkt index 374b4fc..7aa2694 100644 --- a/util.rkt +++ b/util.rkt @@ -30,8 +30,8 @@ (define (file->string-list config:path-to-file-to-file) (let ([to-do-list (file:file->lines config:path-to-file-to-file - #:mode 'text - #:line-mode 'any)]) + #:mode 'text + #:line-mode 'any)]) to-do-list)) (define (list-empty? lst) @@ -61,11 +61,10 @@ (define (display-prettified-program-file) (display (string:string-join - (list->numbered-list (file->string-list config:path-to-file)) - "\n" - #:after-last "\n"))) + (list->numbered-list (file->string-list config:path-to-file)) + "\n" + #:after-last "\n"))) -;; Don't ask (define (append-item-to-end args lst) (reverse (cons args (reverse (file->string-list lst))))) @@ -81,45 +80,45 @@ (define (show-list-from-program-file) (cond [(and - (check-for-program-directory) - (check-for-program-file)) + (check-for-program-directory) + (check-for-program-file)) (if - (list-empty? config:path-to-file) - (display-hash-ref messages:messages 'empty-to-do-list) - (display-prettified-program-file))] + (list-empty? config:path-to-file) + (display-hash-ref messages:messages 'empty-to-do-list) + (display-prettified-program-file))] [else - (display-hash-ref messages:messages 'file-not-found) - (display-hash-ref messages:messages 'try-init)])) + (display-hash-ref messages:messages 'file-not-found) + (display-hash-ref messages:messages 'try-init)])) (define (write-item-to-program-file args) ;; Add an item to the end of a list and write to a file (let ([new-list (append-item-to-end args config:path-to-file)]) (file:display-to-file - (string:string-join new-list "\n") config:path-to-file - #:mode 'text - #:exists 'truncate) + (string:string-join new-list "\n") config:path-to-file + #:mode 'text + #:exists 'truncate) ;; After writing to the file, tell the user what was written (display-item-added args))) (define (add-item-to-list args) (if (and (check-for-program-directory) (check-for-program-file)) - ;; The cdr here prevents the first command line argument ("add") - ;; from being added to the file - (write-item-to-program-file (string:string-join (cdr (vector->list args)))) - ;; Else - (begin - (display-hash-ref messages:messages 'file-not-found) - (display-hash-ref messages:messages 'try-init)))) + ;; The cdr here prevents user commands, such as "add" + ;; from being added to the file + (write-item-to-program-file (string:string-join (cdr (vector->list args)))) + ;; Else + (begin + (display-hash-ref messages:messages 'file-not-found) + (display-hash-ref messages:messages 'try-init)))) (define (remove-item-from-program-file args) (let* ([removed-item (get-removed-item config:path-to-file args)] [new-list (remove removed-item (file->string-list config:path-to-file))]) (file:display-to-file - (string:string-join new-list "\n") - config:path-to-file - #:mode 'text - #:exists 'truncate) + (string:string-join new-list "\n") + config:path-to-file + #:mode 'text + #:exists 'truncate) (display-item-removed removed-item))) (define (remove-item-from-list args)