5 Commits

Author SHA1 Message Date
T.v.Dein
54d59c81a2 Merge branch 'master' into feature/add-converters 2023-11-14 19:58:12 +01:00
768803072b forgot to commit 2023-11-14 19:55:16 +01:00
243a4f762f added tests for new functions 2023-11-13 15:47:35 +01:00
11eabee480 bump version 2023-11-13 15:42:07 +01:00
ad3a49715c added:
- converters
- bitwise operators
- hex input and output support
2023-11-13 11:02:38 +01:00
5 changed files with 8 additions and 149 deletions

16
calc.go
View File

@@ -121,27 +121,19 @@ func (c *Calc) GetCompleteCustomFuncalls() func(string) []string {
}
for command := range c.SettingsCommands {
if len(command) > 1 {
completions = append(completions, command)
}
completions = append(completions, command)
}
for command := range c.ShowCommands {
if len(command) > 1 {
completions = append(completions, command)
}
completions = append(completions, command)
}
for command := range c.StackCommands {
if len(command) > 1 {
completions = append(completions, command)
}
completions = append(completions, command)
}
for command := range c.Commands {
if len(command) > 1 {
completions = append(completions, command)
}
completions = append(completions, command)
}
return completions

View File

@@ -18,12 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package main
import (
"bufio"
"fmt"
"os"
"os/exec"
"strconv"
"strings"
)
type CommandFunction func(*Calc)
@@ -188,102 +184,6 @@ func (c *Calc) SetCommands() {
}
},
),
"edit": NewCommand(
"edit the stack interactively",
func(c *Calc) {
if c.stack.Len() == 0 {
fmt.Println("empty stack")
return
}
c.stack.Backup()
// put the stack contents into a tmp file
tmp, err := os.CreateTemp("", "stack")
if err != nil {
fmt.Println(err)
return
}
defer os.Remove(tmp.Name())
comment := `# add or remove numbers as you wish.
# each number must be on its own line.
# numbers must be floating point formatted.
`
_, err = tmp.WriteString(comment)
if err != nil {
fmt.Println(err)
return
}
for _, item := range c.stack.All() {
_, err = fmt.Fprintf(tmp, "%f\n", item)
if err != nil {
fmt.Println(err)
return
}
}
tmp.Close()
// determine which editor to use
editor := "vi"
enveditor, present := os.LookupEnv("EDITOR")
if present {
if editor != "" {
if _, err := os.Stat(editor); err == nil {
editor = enveditor
}
}
}
// execute editor with our tmp file containing current stack
cmd := exec.Command(editor, tmp.Name())
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
fmt.Println("could not run editor command: ", err)
return
}
// read the file back in
modified, err := os.Open(tmp.Name())
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer modified.Close()
// reset the stack
c.stack.Clear()
// and put the new contents (if legit) back onto the stack
scanner := bufio.NewScanner(modified)
for scanner.Scan() {
line := strings.TrimSpace(c.Comment.ReplaceAllString(scanner.Text(), ""))
if line == "" {
continue
}
num, err := strconv.ParseFloat(line, 64)
if err != nil {
fmt.Printf("%s is not a floating point number!\n", line)
continue
}
c.stack.Push(num)
}
if err := scanner.Err(); err != nil {
fmt.Println("Error reading from file:", err)
}
},
),
}
// general commands
@@ -305,15 +205,6 @@ func (c *Calc) SetCommands() {
// aliases
c.Commands["quit"] = c.Commands["exit"]
c.SettingsCommands["d"] = c.SettingsCommands["debug"]
c.SettingsCommands["b"] = c.SettingsCommands["batch"]
c.SettingsCommands["s"] = c.SettingsCommands["showstack"]
c.ShowCommands["h"] = c.ShowCommands["history"]
c.ShowCommands["p"] = c.ShowCommands["dump"]
c.ShowCommands["v"] = c.ShowCommands["vars"]
c.StackCommands["c"] = c.StackCommands["clear"]
c.StackCommands["u"] = c.StackCommands["undo"]
c.SettingsCommands["undebug"] = c.SettingsCommands["nodebug"]
c.SettingsCommands["show"] = c.SettingsCommands["showstack"]
}

View File

@@ -30,7 +30,7 @@ import (
lua "github.com/yuin/gopher-lua"
)
const VERSION string = "2.0.11"
const VERSION string = "2.0.10"
const Usage string = `This is rpn, a reverse polish notation calculator cli.

14
rpn.go
View File

@@ -185,8 +185,7 @@ DESCRIPTION
Stack manipulation commands: clear clear the whole stack shift remove
the last element of the stack reverse reverse the stack elements swap
exchange the last two stack elements dup duplicate last stack item undo
undo last operation edit edit the stack interactively using vi or
$EDITOR
undo last operation
Other commands: help|? show this message manual show manual
quit|exit|c-d|c-c exit program
@@ -198,17 +197,6 @@ DESCRIPTION
Refer to https://pkg.go.dev/math for details about those functions.
There are also a number of shortcuts for some commands available:
d debug
b batch
s showstack
h history
p dump (aka print)
v vars
c clear
u undo
INTERACTIVE REPL
While you can use rpn in the command-line, the best experience you'll
have is the interactive repl (read eval print loop). Just execute "rpn"

12
rpn.pod
View File

@@ -198,7 +198,6 @@ Stack manipulation commands:
swap exchange the last two stack elements
dup duplicate last stack item
undo undo last operation
edit edit the stack interactively using vi or $EDITOR
Other commands:
help|? show this message
@@ -213,17 +212,6 @@ Register variables:
Refer to https://pkg.go.dev/math for details about those functions.
There are also a number of shortcuts for some commands available:
d debug
b batch
s showstack
h history
p dump (aka print)
v vars
c clear
u undo
=head1 INTERACTIVE REPL
While you can use rpn in the command-line, the best experience you'll