added quick function to handle keyboard interrupts
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Auth: Alex Celani
|
// Auth: Alex Celani
|
||||||
// File: tdm.go
|
// File: tdm.go
|
||||||
// Revn: 03-27-2022 2.0
|
// Revn: 03-29-2022 3.0
|
||||||
//
|
//
|
||||||
// Func: display and manage progress of a litany of items to be done,
|
// Func: display and manage progress of a litany of items to be done,
|
||||||
// with an organization scheme similar to Trello. It's CLI
|
// with an organization scheme similar to Trello. It's CLI
|
||||||
@@ -17,7 +17,6 @@
|
|||||||
// auto-update task fill based on subtask fills and (settable)
|
// auto-update task fill based on subtask fills and (settable)
|
||||||
// weighting
|
// weighting
|
||||||
// M remember last args
|
// M remember last args
|
||||||
// handle ^C gracefully
|
|
||||||
// move most (read: all) helper functions to external files
|
// move most (read: all) helper functions to external files
|
||||||
// M add priority to tasks
|
// M add priority to tasks
|
||||||
// attach text files???
|
// attach text files???
|
||||||
@@ -34,7 +33,7 @@
|
|||||||
// =============================================================================
|
// =============================================================================
|
||||||
// JUMP TAGS
|
// JUMP TAGS
|
||||||
// for the lucky few who use vim, press * on a tag to jump to that function
|
// for the lucky few who use vim, press * on a tag to jump to that function
|
||||||
// INPUT JOIN FILEIN FILEOUT HELP DELETE FIND СДЕЛАЙ MARK PARSE SHOW MAIN
|
// CATCH INPUT JOIN FILEIN FILEOUT HELP DELETE FIND СДЕЛАЙ MARK PARSE SHOW MAIN
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// CHANGE LOG
|
// CHANGE LOG
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -109,6 +108,8 @@
|
|||||||
// 03-20-2022: first draft rewrite of find()
|
// 03-20-2022: first draft rewrite of find()
|
||||||
//*03-27-2022: fixed bug where tasks can't be made under boards with
|
//*03-27-2022: fixed bug where tasks can't be made under boards with
|
||||||
// name of length 1
|
// name of length 1
|
||||||
|
//*03-29-2022: added, tested, and commented function for catching
|
||||||
|
// keyboard interrupts
|
||||||
//
|
//
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
@@ -120,6 +121,8 @@ import (
|
|||||||
"strings" // used for Split, ToLower, Join
|
"strings" // used for Split, ToLower, Join
|
||||||
"strconv" // used for Atoi
|
"strconv" // used for Atoi
|
||||||
"os" // used for Exit, Stdin
|
"os" // used for Exit, Stdin
|
||||||
|
"os/signal" // used for Notify
|
||||||
|
"syscall" // used for SIGTERM
|
||||||
"io/ioutil" // used for ReadFile, WriteFile
|
"io/ioutil" // used for ReadFile, WriteFile
|
||||||
"bufio" // used for NewScanner
|
"bufio" // used for NewScanner
|
||||||
)
|
)
|
||||||
@@ -138,6 +141,34 @@ var read = ioutil.ReadFile
|
|||||||
var write = ioutil.WriteFile
|
var write = ioutil.WriteFile
|
||||||
|
|
||||||
|
|
||||||
|
// CATCH finally something fun
|
||||||
|
// asynchronous function that catches keyboard interrupts and exits
|
||||||
|
// gracefully
|
||||||
|
func catch() {
|
||||||
|
// blocking channel of type signal
|
||||||
|
c := make( chan os.Signal )
|
||||||
|
|
||||||
|
// I didn't read what this does, but it was in an example and it
|
||||||
|
// worked, so
|
||||||
|
// from what I can ascertain, when SIGTERM is detected, it binds
|
||||||
|
// Interrupt to channel c
|
||||||
|
signal.Notify( c, os.Interrupt, syscall.SIGTERM )
|
||||||
|
|
||||||
|
// asynchronous goroutine
|
||||||
|
go func() {
|
||||||
|
<-c // immediately halts in blocking read for signal
|
||||||
|
|
||||||
|
if changed { // if there was a change to the map...
|
||||||
|
fileOut() // rewrite data file
|
||||||
|
}
|
||||||
|
|
||||||
|
print( "\r" ) // this helps with the missing newline
|
||||||
|
|
||||||
|
exit( 0 ) // and exit gracefully
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// INPUT
|
// INPUT
|
||||||
// wrapper function to print input prompt, take user input
|
// wrapper function to print input prompt, take user input
|
||||||
func input( ps1 string ) string {
|
func input( ps1 string ) string {
|
||||||
@@ -1495,7 +1526,9 @@ var subtasks []subtask // array of subtasks belonging to tasks
|
|||||||
// MAIN
|
// MAIN
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
fileIn()
|
catch() // call function to catch keyboard interrupts
|
||||||
|
|
||||||
|
fileIn() // open data file, process into structure
|
||||||
|
|
||||||
for { // infinite loop, where everything happens
|
for { // infinite loop, where everything happens
|
||||||
|
|
||||||
@@ -1540,7 +1573,7 @@ func main() {
|
|||||||
fileOut()
|
fileOut()
|
||||||
}
|
}
|
||||||
|
|
||||||
os.Exit( 0 ) // exeunt
|
exit( 0 ) // exeunt
|
||||||
case "set":
|
case "set":
|
||||||
// XXX
|
// XXX
|
||||||
// turn debug flag on and off
|
// turn debug flag on and off
|
||||||
|
|||||||
Reference in New Issue
Block a user