|
280 | 280 | var term; |
281 | 281 | var shell; |
282 | 282 | var input; |
| 283 | + var output; |
283 | 284 | var user_dir; |
284 | 285 | var cwd_abs; |
285 | 286 | var cwd; |
|
394 | 395 | snippet.css.insert_rule([':host {height:100%;}','#root {height:100%}']); |
395 | 396 | snippet.editor.css.insert_rule([':host {flex:1}','#root {height:100%}']); |
396 | 397 |
|
397 | | - snippet.ctx = {snippet,webcontainer,viewport,vm,shell,term}; |
| 398 | + snippet.ctx = {snippet,webcontainer,viewport,vm,shell,term,input,output}; |
398 | 399 |
|
399 | 400 |
|
400 | 401 | var attrs = {component:'page'}; |
|
653 | 654 | var theme = {}; |
654 | 655 |
|
655 | 656 | theme.light = { |
656 | | - foreground : 'black',//'#53676d', |
657 | | - background : 'hsl(45,86%,98%)',//'#fbf3db', |
| 657 | + |
| 658 | + foreground : 'black', //'#53676d', |
| 659 | + |
| 660 | + background : 'hsl(45,86%,98%)', //'#fbf3db', |
658 | 661 | cursor : '#3a4d53', |
659 | 662 | selectionBackground : '#cfcebe', |
660 | 663 | black : '#e9e4d0', |
|
673 | 676 | brightMagenta : '#8f0075', |
674 | 677 | brightCyan : '#00938d', |
675 | 678 | brightWhite : '#ffffff' |
| 679 | + |
676 | 680 | }; |
677 | 681 |
|
678 | 682 |
|
|
690 | 694 | white : '\x1b[37m', |
691 | 695 |
|
692 | 696 | brightBlack : '\x1b[90m', |
693 | | - brightRed: '\x1b[91m', |
694 | | - brightGreen: '\x1b[92m', |
695 | | - brightYellow: '\x1b[93m', |
696 | | - brightBlue: '\x1b[94m', |
697 | | - brightMagenta: '\x1b[95m', |
698 | | - brightCyan: '\x1b[96m', |
699 | | - brightWhite: '\x1b[97m', |
700 | | - |
701 | | - bgRed: '\x1b[41m', |
702 | | - bgGreen: '\x1b[42m', |
703 | | - bgYellow: '\x1b[43m', |
704 | | - bgBlue: '\x1b[44m', |
705 | | - bgMagenta: '\x1b[45m', |
706 | | - bgCyan: '\x1b[46m', |
707 | | - bgWhite: '\x1b[47m', |
708 | | - |
709 | | - bgBrightRed : '\x1b[101m', |
710 | | - bgBrightGreen : '\x1b[102m', |
711 | | - bgBrightYellow : '\x1b[103m', |
712 | | - bgBrightBlue : '\x1b[104m', |
713 | | - bgBrightMagenta : '\x1b[105m', |
714 | | - bgBrightCyan : '\x1b[106m', |
715 | | - bgBrightWhite : '\x1b[107m', |
716 | | - |
717 | | - bold : '\x1b[1m', |
718 | | - dim : '\x1b[2m', |
719 | | - italic : '\x1b[3m', |
720 | | - underline : '\x1b[4m', |
721 | | - inverse : '\x1b[7m', |
722 | | - hidden : '\x1b[8m', |
723 | | - strikethrough : '\x1b[9m', |
724 | | - |
725 | | - gray : '\x1b[38;5;245m', |
| 697 | + brightRed : '\x1b[91m', |
| 698 | + brightGreen : '\x1b[92m', |
| 699 | + brightYellow : '\x1b[93m', |
| 700 | + brightBlue : '\x1b[94m', |
| 701 | + brightMagenta : '\x1b[95m', |
| 702 | + brightCyan : '\x1b[96m', |
| 703 | + brightWhite : '\x1b[97m', |
| 704 | + |
| 705 | + bgRed : '\x1b[41m', |
| 706 | + bgGreen : '\x1b[42m', |
| 707 | + bgYellow : '\x1b[43m', |
| 708 | + bgBlue : '\x1b[44m', |
| 709 | + bgMagenta : '\x1b[45m', |
| 710 | + bgCyan : '\x1b[46m', |
| 711 | + bgWhite : '\x1b[47m', |
| 712 | + |
| 713 | + bgBrightRed : '\x1b[101m', |
| 714 | + bgBrightGreen : '\x1b[102m', |
| 715 | + bgBrightYellow : '\x1b[103m', |
| 716 | + bgBrightBlue : '\x1b[104m', |
| 717 | + bgBrightMagenta : '\x1b[105m', |
| 718 | + bgBrightCyan : '\x1b[106m', |
| 719 | + bgBrightWhite : '\x1b[107m', |
| 720 | + |
| 721 | + bold : '\x1b[1m', |
| 722 | + dim : '\x1b[2m', |
| 723 | + italic : '\x1b[3m', |
| 724 | + underline : '\x1b[4m', |
| 725 | + inverse : '\x1b[7m', |
| 726 | + hidden : '\x1b[8m', |
| 727 | + strikethrough : '\x1b[9m', |
| 728 | + |
| 729 | + gray : '\x1b[38;5;245m', |
726 | 730 |
|
727 | 731 | }; |
728 | 732 |
|
729 | 733 | var chr = { |
730 | | - warn : '\u26A0', |
731 | | - cross : '\u274C', |
732 | | - stop : '\u1F6D1', |
733 | | - prohibited : '\u1F6AB', |
734 | | - check : '\u2705', |
735 | | - go : '\u1F7E2', |
736 | | - thumb : '\u1F44D', |
737 | | - ok : '\u1F197', |
| 734 | + |
| 735 | + warn : '\u26A0', |
| 736 | + cross : '\u274C', |
| 737 | + stop : '\u1F6D1', |
| 738 | + prohibited : '\u1F6AB', |
| 739 | + check : '\u2705', |
| 740 | + go : '\u1F7E2', |
| 741 | + thumb : '\u1F44D', |
| 742 | + ok : '\u1F197', |
| 743 | + |
738 | 744 | }; |
739 | 745 |
|
740 | | - const colors = { |
741 | | - // Standard Colors |
742 | | - black: '\x1b[30m', |
743 | | - red: '\x1b[31m', |
744 | | - green: '\x1b[32m', |
745 | | - yellow: '\x1b[33m', |
746 | | - blue: '\x1b[34m', |
747 | | - magenta: '\x1b[35m', |
748 | | - cyan: '\x1b[36m', |
749 | | - white: '\x1b[37m', |
750 | | - |
751 | | - // Bright/Bold Colors |
752 | | - brightBlack: '\x1b[1;30m', |
753 | | - brightRed: '\x1b[1;31m', |
754 | | - brightGreen: '\x1b[1;32m', |
755 | | - brightYellow: '\x1b[1;33m', |
756 | | - brightBlue: '\x1b[1;34m', |
757 | | - brightMagenta: '\x1b[1;35m', |
758 | | - brightCyan: '\x1b[1;36m', |
759 | | - brightWhite: '\x1b[1;37m', |
760 | | - |
761 | | - // Custom Mahogany (RGB: 150, 40, 20) |
762 | | - mahogany: '\x1b[38;2;150;40;20m', |
763 | | - |
764 | | - // Utility |
765 | | - reset: '\x1b[0m' |
| 746 | + var colors = { |
| 747 | + |
| 748 | + black : '\x1b[30m', |
| 749 | + red : '\x1b[31m', |
| 750 | + green : '\x1b[32m', |
| 751 | + yellow : '\x1b[33m', |
| 752 | + blue : '\x1b[34m', |
| 753 | + magenta : '\x1b[35m', |
| 754 | + cyan : '\x1b[36m', |
| 755 | + white : '\x1b[37m', |
| 756 | + |
| 757 | + brightBlack : '\x1b[1;30m', |
| 758 | + brightRed : '\x1b[1;31m', |
| 759 | + brightGreen : '\x1b[1;32m', |
| 760 | + brightYellow : '\x1b[1;33m', |
| 761 | + brightBlue : '\x1b[1;34m', |
| 762 | + brightMagenta : '\x1b[1;35m', |
| 763 | + brightCyan : '\x1b[1;36m', |
| 764 | + brightWhite : '\x1b[1;37m', |
| 765 | + // Custom Mahogany (RGB: 150, 40, 20) |
| 766 | + mahogany : '\x1b[38;2;150;40;20m', |
| 767 | + |
| 768 | + // Utility |
| 769 | + reset : '\x1b[0m', |
| 770 | + |
766 | 771 | }; |
767 | 772 |
|
768 | 773 |
|
| 774 | + |
| 775 | + |
769 | 776 | var files = {}; |
770 | 777 |
|
771 | 778 | /* |
|
825 | 832 | }); |
826 | 833 |
|
827 | 834 |
|
828 | | - term.log = {}; |
| 835 | + term.buffer = []; |
| 836 | + term.pause = false; |
| 837 | + term.flush = ()=>{ |
829 | 838 |
|
| 839 | + term.buffer.forEach(data=>term.write(data)); |
| 840 | + term.buffer.length = 0; |
| 841 | + |
| 842 | + }//flush |
| 843 | + term.resume = (flush=true)=>{ |
| 844 | + |
| 845 | + if(flush){ |
| 846 | + term.flush(); |
| 847 | + } |
| 848 | + term.buffer.length = 0; |
| 849 | + term.pause = false; |
| 850 | + |
| 851 | + }//resume |
| 852 | + |
| 853 | + |
830 | 854 | for(let key in colors){ |
831 | 855 |
|
832 | 856 | if (key === 'reset') continue; |
|
866 | 890 | term.loadAddon(fitAddon); |
867 | 891 | term.open(terminal); |
868 | 892 | fitAddon.fit(); |
869 | | - term.write('booting container ...\r\n') |
| 893 | + term.write('booting container ... ') |
870 | 894 | webcontainer = await WebContainer.boot(); |
871 | | - |
| 895 | + term.writeln.green('ok'); |
| 896 | + |
872 | 897 | mod.stack.complete; |
873 | 898 |
|
| 899 | + |
| 900 | + |
874 | 901 | var [result1,result2] = await Promise.all([spawn('node -v',{output:true}),spawn('npm -v',{output:true})]); |
875 | 902 | if(result1.code==0){ |
876 | 903 | term.write('node '+result1.output); |
|
891 | 918 | }); |
892 | 919 |
|
893 | 920 |
|
894 | | - //await webcontainer.mount(files); |
895 | | - term.write('spawn jsh ...\r\n') |
896 | | - shell = await webcontainer.spawn('jsh'); |
| 921 | + if(0){ |
| 922 | + term.write('mount fs ... '); |
| 923 | + await webcontainer.mount(files); |
| 924 | + term.writeln.green('ok'); |
| 925 | + } |
| 926 | + |
897 | 927 |
|
898 | 928 |
|
899 | | - var output = new WritableStream({ |
| 929 | + term.write('spawn jsh ... ') |
| 930 | + shell = await webcontainer.spawn('jsh'); |
| 931 | + term.writeln.green('ok'); |
| 932 | + output = new WritableStream({ |
900 | 933 | write(data){ |
901 | 934 | //console.log(data); |
902 | 935 | var str = data; |
|
947 | 980 | } |
948 | 981 | }); |
949 | 982 |
|
950 | | - term.write(data); |
| 983 | + |
| 984 | + if(term.pause){ |
| 985 | + term.buffer.push(data); |
| 986 | + }else{ |
| 987 | + term.write(data); |
| 988 | + } |
951 | 989 |
|
952 | 990 | } |
953 | 991 | }); |
| 992 | + |
| 993 | + output.buffer = []; |
| 994 | + output.pause = false; |
| 995 | + output.flush = ()=>{ |
| 996 | + |
| 997 | + output.buffer.forEach(data=>term.write(data)); |
| 998 | + output.buffer.length = 0; |
| 999 | + |
| 1000 | + }//flush |
| 1001 | + output.resume = (flush=true)=>{ |
| 1002 | + |
| 1003 | + if(flush){ |
| 1004 | + output.flush(); |
| 1005 | + } |
| 1006 | + output.buffer.length = 0; |
| 1007 | + output.pause = false; |
| 1008 | + |
| 1009 | + }//resume |
| 1010 | + |
954 | 1011 | shell.output.pipeTo(output); |
955 | 1012 |
|
956 | 1013 | input = shell.input.getWriter(); |
|
0 commit comments