Get clone-in-kitty working for bash as well
This commit is contained in:
parent
4b7c50518e
commit
d0c0b01724
@ -498,9 +498,11 @@ def parse_opts_for_clone(args: List[str]) -> LaunchCLIOptions:
|
|||||||
|
|
||||||
def clone_and_launch(msg: str, window: Window) -> None:
|
def clone_and_launch(msg: str, window: Window) -> None:
|
||||||
import base64
|
import base64
|
||||||
|
import json
|
||||||
|
|
||||||
from .child import cmdline_of_process
|
from .child import cmdline_of_process
|
||||||
args = []
|
args = []
|
||||||
|
cmdline: List[str] = []
|
||||||
env: Optional[Dict[str, str]] = None
|
env: Optional[Dict[str, str]] = None
|
||||||
cwd = ''
|
cwd = ''
|
||||||
pid = -1
|
pid = -1
|
||||||
@ -524,16 +526,19 @@ def clone_and_launch(msg: str, window: Window) -> None:
|
|||||||
env[k] = v
|
env[k] = v
|
||||||
elif k == 'cwd':
|
elif k == 'cwd':
|
||||||
cwd = v
|
cwd = v
|
||||||
|
elif k == 'argv':
|
||||||
|
cmdline = json.loads(v)
|
||||||
opts = parse_opts_for_clone(args)
|
opts = parse_opts_for_clone(args)
|
||||||
if cwd:
|
if cwd:
|
||||||
opts.cwd = cwd
|
opts.cwd = cwd
|
||||||
opts.copy_colors = True
|
opts.copy_colors = True
|
||||||
try:
|
if pid > -1:
|
||||||
cmdline = cmdline_of_process(pid)
|
try:
|
||||||
except Exception:
|
cmdline = cmdline_of_process(pid)
|
||||||
cmdline = []
|
except Exception:
|
||||||
if not cmdline:
|
cmdline = []
|
||||||
cmdline = list(window.child.argv)
|
if not cmdline:
|
||||||
|
cmdline = list(window.child.argv)
|
||||||
ssh_kitten_cmdline = window.ssh_kitten_cmdline()
|
ssh_kitten_cmdline = window.ssh_kitten_cmdline()
|
||||||
if ssh_kitten_cmdline:
|
if ssh_kitten_cmdline:
|
||||||
from kittens.ssh.main import set_cwd_in_cmdline, set_env_in_cmdline
|
from kittens.ssh.main import set_cwd_in_cmdline, set_env_in_cmdline
|
||||||
|
|||||||
@ -2,15 +2,17 @@
|
|||||||
# License: GPLv3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPLv3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
|
|
||||||
|
import base64
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
from .constants import shell_integration_dir
|
from .constants import shell_integration_dir
|
||||||
|
from .fast_data_types import get_options
|
||||||
from .options.types import Options, defaults
|
from .options.types import Options, defaults
|
||||||
from .utils import log_error, which
|
from .utils import log_error, which
|
||||||
from .fast_data_types import get_options
|
|
||||||
|
|
||||||
|
|
||||||
def setup_fish_env(env: Dict[str, str], argv: List[str]) -> None:
|
def setup_fish_env(env: Dict[str, str], argv: List[str]) -> None:
|
||||||
@ -133,6 +135,7 @@ def setup_bash_env(env: Dict[str, str], argv: List[str]) -> None:
|
|||||||
return
|
return
|
||||||
env['ENV'] = os.path.join(shell_integration_dir, 'bash', 'kitty.bash')
|
env['ENV'] = os.path.join(shell_integration_dir, 'bash', 'kitty.bash')
|
||||||
env['KITTY_BASH_INJECT'] = ' '.join(inject)
|
env['KITTY_BASH_INJECT'] = ' '.join(inject)
|
||||||
|
env['KITTY_BASH_ORIGINAL_ARGV'] = base64.standard_b64encode(json.dumps(argv).encode('utf-8')).decode('ascii')
|
||||||
if posix_env:
|
if posix_env:
|
||||||
env['KITTY_BASH_POSIX_ENV'] = posix_env
|
env['KITTY_BASH_POSIX_ENV'] = posix_env
|
||||||
if rcfile:
|
if rcfile:
|
||||||
|
|||||||
@ -74,8 +74,9 @@ fi
|
|||||||
builtin declare -A _ksi_prompt
|
builtin declare -A _ksi_prompt
|
||||||
_ksi_prompt=(
|
_ksi_prompt=(
|
||||||
[cursor]='y' [title]='y' [mark]='y' [complete]='y' [cwd]='y' [ps0]='' [ps0_suffix]='' [ps1]='' [ps1_suffix]='' [ps2]=''
|
[cursor]='y' [title]='y' [mark]='y' [complete]='y' [cwd]='y' [ps0]='' [ps0_suffix]='' [ps1]='' [ps1_suffix]='' [ps2]=''
|
||||||
[hostname_prefix]='' [sourced]='y' [last_reported_cwd]=''
|
[hostname_prefix]='' [sourced]='y' [last_reported_cwd]='' [argv]="$KITTY_BASH_ORIGINAL_ARGV"
|
||||||
)
|
)
|
||||||
|
builtin unset KITTY_BASH_ORIGINAL_ARGV
|
||||||
|
|
||||||
_ksi_main() {
|
_ksi_main() {
|
||||||
builtin local ifs="$IFS"
|
builtin local ifs="$IFS"
|
||||||
@ -267,3 +268,24 @@ _ksi_main() {
|
|||||||
}
|
}
|
||||||
_ksi_main
|
_ksi_main
|
||||||
builtin unset -f _ksi_main
|
builtin unset -f _ksi_main
|
||||||
|
|
||||||
|
clone-in-kitty() {
|
||||||
|
builtin local data="argv=${_ksi_prompt[argv]},cwd=$(builtin printf "%s" "$PWD" | builtin command base64),env=$(builtin command env -0 | builtin command base64)"
|
||||||
|
while :; do
|
||||||
|
case "$1" in
|
||||||
|
"") break;;
|
||||||
|
*) data="$data,a=$(builtin printf "%s" "$1" | builtin command base64)";;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
data="${data//[[:space:]]}"
|
||||||
|
builtin local pos=0
|
||||||
|
builtin local chunk_num=0
|
||||||
|
while [ $pos -lt ${#data} ]; do
|
||||||
|
builtin local chunk="${data:$pos:2048}"
|
||||||
|
pos=$(($pos+2048))
|
||||||
|
builtin printf '\eP@kitty-clone|%s:%s\e\\' "${chunk_num}" "${chunk}"
|
||||||
|
chunk_num=$(($chunk_num+1))
|
||||||
|
done
|
||||||
|
builtin printf '\eP@kitty-clone|\e\\'
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user