mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-02 18:39:05 +01:00
add wsh term to open a new terminal in directory
This commit is contained in:
parent
f464223aab
commit
a2aef5b0ce
62
cmd/wsh/cmd/wshcmd-term.go
Normal file
62
cmd/wsh/cmd/wshcmd-term.go
Normal file
@ -0,0 +1,62 @@
|
||||
// Copyright 2024, Command Line Inc.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/wavetermdev/thenextwave/pkg/wavebase"
|
||||
"github.com/wavetermdev/thenextwave/pkg/wshrpc"
|
||||
"github.com/wavetermdev/thenextwave/pkg/wshrpc/wshclient"
|
||||
"github.com/wavetermdev/thenextwave/pkg/wstore"
|
||||
)
|
||||
|
||||
var termCmd = &cobra.Command{
|
||||
Use: "term",
|
||||
Short: "open a terminal in directory",
|
||||
Args: cobra.RangeArgs(0, 1),
|
||||
Run: termRun,
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(termCmd)
|
||||
}
|
||||
|
||||
func termRun(cmd *cobra.Command, args []string) {
|
||||
var cwd string
|
||||
if len(args) > 0 {
|
||||
cwd = args[0]
|
||||
cwd = wavebase.ExpandHomeDir(cwd)
|
||||
} else {
|
||||
var err error
|
||||
cwd, err = os.Getwd()
|
||||
if err != nil {
|
||||
WriteStderr("[error] getting current directory: %v\n", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
var err error
|
||||
cwd, err = filepath.Abs(cwd)
|
||||
if err != nil {
|
||||
WriteStderr("[error] getting absolute path: %v\n", err)
|
||||
return
|
||||
}
|
||||
createBlockData := wshrpc.CommandCreateBlockData{
|
||||
BlockDef: &wstore.BlockDef{
|
||||
Meta: map[string]interface{}{
|
||||
wstore.MetaKey_View: "term",
|
||||
wstore.MetaKey_CmdCwd: cwd,
|
||||
wstore.MetaKey_Controller: "shell",
|
||||
},
|
||||
},
|
||||
}
|
||||
oref, err := wshclient.CreateBlockCommand(RpcClient, createBlockData, nil)
|
||||
if err != nil {
|
||||
WriteStderr("[error] creating new terminal block: %v\n", err)
|
||||
return
|
||||
}
|
||||
WriteStdout("terminal block created: %s\n", oref)
|
||||
}
|
@ -414,6 +414,17 @@ func getBoolFromMeta(meta map[string]any, key string, def bool) bool {
|
||||
return def
|
||||
}
|
||||
|
||||
func getTermSize(bdata *wstore.Block) shellexec.TermSize {
|
||||
if bdata.RuntimeOpts != nil {
|
||||
return bdata.RuntimeOpts.TermSize
|
||||
} else {
|
||||
return shellexec.TermSize{
|
||||
Rows: 25,
|
||||
Cols: 80,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (bc *BlockController) run(bdata *wstore.Block, blockMeta map[string]any) {
|
||||
defer func() {
|
||||
bc.UpdateControllerAndSendUpdate(func() bool {
|
||||
@ -445,7 +456,7 @@ func (bc *BlockController) run(bdata *wstore.Block, blockMeta map[string]any) {
|
||||
runOnStart := getBoolFromMeta(blockMeta, wstore.MetaKey_CmdRunOnStart, true)
|
||||
if runOnStart {
|
||||
go func() {
|
||||
err := bc.DoRunShellCommand(&RunShellOpts{TermSize: bdata.RuntimeOpts.TermSize}, bdata.Meta)
|
||||
err := bc.DoRunShellCommand(&RunShellOpts{TermSize: getTermSize(bdata)}, bdata.Meta)
|
||||
if err != nil {
|
||||
log.Printf("error running shell: %v\n", err)
|
||||
}
|
||||
@ -469,7 +480,7 @@ func (bc *BlockController) RestartController() error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("error getting block: %w", err)
|
||||
}
|
||||
err = bc.DoRunShellCommand(&RunShellOpts{TermSize: bdata.RuntimeOpts.TermSize}, bdata.Meta)
|
||||
err = bc.DoRunShellCommand(&RunShellOpts{TermSize: getTermSize(bdata)}, bdata.Meta)
|
||||
if err != nil {
|
||||
log.Printf("error running shell command: %v\n", err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user