From 21d2f52ee9669f012f1e1d7e8a36facc454e3b63 Mon Sep 17 00:00:00 2001 From: fofolee Date: Mon, 22 Jun 2020 00:54:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0c=E3=80=81c#=E3=80=81wsl?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/options.js | 21 +++++++++--- src/logo/c.png | Bin 0 -> 3019 bytes src/logo/csharp.png | Bin 0 -> 4007 bytes src/preload.js | 76 +++++++++++++++++++++++------------------- 4 files changed, 58 insertions(+), 39 deletions(-) create mode 100644 src/logo/c.png create mode 100644 src/logo/csharp.png diff --git a/src/assets/options.js b/src/assets/options.js index 3cfe20f..64d818e 100644 --- a/src/assets/options.js +++ b/src/assets/options.js @@ -133,6 +133,18 @@ let programs = { argv: '', ext: 'php' }, + c: { + bin: 'gcc', + argv: '-o', + ext: 'c', + codec: utools.isWindows() ? 'gbk' : '' + }, + csharp: { + bin: 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\csc.exe', + argv: '/Nologo', + ext: 'cs', + codec: 'gbk' + }, lua: { bin: 'lua', argv: '', @@ -289,7 +301,7 @@ let showCustomize = () => { - + @@ -485,18 +497,19 @@ let programCheck = () => { case 'custom': $('.customscript').show(); $('.simulation').hide(); - $('#showInTerm').show() + $('#showInTerm').prop("disabled", false); break; case 'simulation': $('.simulation').show(); $('.customscript').hide(); - $('#showInTerm').hide() + $('#showInTerm').prop("disabled", true); mode = 'javascript'; break; default: $('.customscript').hide(); $('.simulation').hide(); - $('#showInTerm').show() + $('#showInTerm').prop("disabled", false); + (mode == 'csharp' || mode == 'c') && (mode = 'text/x-' + mode) break; } window.editor.setOption("mode", mode); diff --git a/src/logo/c.png b/src/logo/c.png new file mode 100644 index 0000000000000000000000000000000000000000..922682b59efd0b5e1ac21c44e8b4b697c9839756 GIT binary patch literal 3019 zcmXw52Q(XA7dL9xD1W13v^1z)yQNh#glLNzrB;m^5sIQls;HgT-dl{SRjWQb2tuQ^ zNhnfMYSfO=`jT(FbMCw6zIWbxzu)iP^UjTXXaZto=4Ym&qGB~P&^0A{2Z}M$ljoJJ zKsB=(Q`KSx*2%#oH!X-36;;DKmUBlsa?IpoVC_dm#nwkL>OokgGZht!gQ2dL zd63;!9?L`XnX7}%sqPi|FXz{t@8nlaVEt2GPwJZnf7B0^YS&o3IU*vlL|ao;W#Q(b zej~qZtLc&GH4kIsBsBBh3u~?EYm!JbXi}ebH<^TDU{8;EO|y3xnpqn8d+XEj_8f0p zclO0)+K{o6u8Zxv#84vMB`W^^!;MN*=WqayD6n5F8>`%$k~=L^RhXNUmn!!G!Xx5K z84*(BgJl+Y$dgx$5_-tAh3u>L99a8Wk@)wzsW9igu7tGp$fh!86f3%MewI@>ye;0e zB!wBy=_*lUJgPQplmpd^OOOf)I8E8R>U*O3<4e^n=Evvcqv*Rv~+cW;?9%_|g)uvA&skkct?15fT2z>qY)k8) zwNxHuTEvuPg<~dm1)4@=!((Km0#|N;fJ8&E)xq$yjFFe4aTP>t&yakiF9c8HC!U_j ziIi5qoPD7|*B&pc^Z1JlY43%il2QOF^2qz=`g(elCSk`zPT8pLFHya)TEpP3Q z{0ewQ@G5Be6$h3S>=UbbB5Bq3q~ilU7*nT>i)R(pc`S5f8Whe?L1R$E7GmU?UN z$xmMX!gum%Iq93`Z07U7rW`(gre_zvdC`Oe6Z?cD=HRTR_L|yg5l~i0RIim#Zp+0W zo@X#pJ-wLT3=y9EM?JkVAa_iAqB90BMEn-i$~FC|t19aUbLagBUjg2!&m6eD47~o; zmc*=GyC$belRnk@S+KS*w32P@5B6_6HFvJvHy(a_fzd6_1leMroXW6V7f%Fg3IN5^ z%=oRo0-PVcy8u2*udaGT#~vmQ<+AVpVj|ma5+GqI^<9HL$!qwhw}UYsfV)wK`N2E` z|5mqShc`P3azXO+&Q-J0ayqVn4*&*>kdM!qLI3ap&;|qEh7InnSw%QjLUYKC{YMdv zFOPk2{aOLCpt=UfLGIKV+YNv^(yB_})Tq#xLrm{Sq<-ebB&lM2jkXmcV9wFPEN&af zzaK+GyyVHXpO_`Wco_@u3f1%_Uqa_pEm;lQo79M*je)UYM5Tu>U>0lIB&Our^-B_aQwy5O2pZJTvp8 zxW}JvG5q-Q$I}ttbyof5F_QW@0P$T!&D@N^*L}6DttA#G#)fh5#8^EQ-D;mTg30wX zn6ZAE{z-b$L0^|X5R!{?mJi;E{fLLXEtmd!0p>&JQjkYKT=TTi*_TYBOGTeJt&mB04}JDF6(W)@8D~|7h!G zdR`a+M3G3+5KO`&IP2q)^QqOdC)}e{!DlK64$4cP(tg+5Fu@mm-g=E$9477a91)*h zqcAJG+1woHXS7;;pvKYdwfw<%F^3{eO2yi=%lmij)10dtv1r z4{}YO``>3Hnarct=zqnmA$Z7~(r%~eay$9DyM7&=H_7oz&}UeySM_c`h-GwnUrNRU zg8O|OUaW}~C!GJJCUlsdJby8#+nK5~octdkxu$EH_Xru7iqq%$hrWw!Nmsk+&fV_7 z1}HV;q5{Mtymub9aH86;T@PS)FJc6i^WL9=3j{Jw*i*{a)n5WKMdJsj?GO^`Gh%oxjOU{@Q+i?RRs>LLa|J+}wzy>xK z&Q`9=lPoqbN=}7DsSMMY!>+pZ(d)NKg>C6d=7`^^@V%x(km!z5Q=iSR{(>}0v0a5i zNYQE`ZN7~IwYRD3!W1@VX$rXIE+(#wKWzICwYi+%xY!b*Q3YXVLcpfUxHI^=uln-+ zDa#JJ6M?(IfHhg=RP;Qhuq9G!47)2i?_t!(%s6$nqVVixnW;B6Pl^R?!u~1~ve*Rz*K(h$uy(%kYxoBk0Sm zle~)6+nYmY!r2KmHUNswXo8yN?a<@*XDV{tIV?oabY3^?nl1Ft`+%V=rs-A{^68+p z!i_@!v1&;I!u03ihZhU^o-?_QB}cRh3}CqjcyNIh`Tx7+)=Rw(zlajgrcc^$@vt}m zef6)4tk?)wT7YIcl{vM3crCyOIG}$1=4_22CKM8&Z{AxGp?I&1_WgC}D4X>_a$`@s zS@OxBD4ks?v%hqN@@=&dDAynhH9$Z3#N~VOos8;h3o2@7dUqcz9EOH>*-h6!gV=>z zx7ts7onCE)NZ%tY{%OmEXJl_!)%rLs4qNco(m(65s^nW`?$mns`6+?`ybzFS2Vl*# zhPbDhYWY&?hc>#gt)QQDuTWdQY^maI_lR4W&HXsd>SSgxB2?V_4FqS>6L|!}3k^nu zdEsB#ZluQR6wXKyhSAc%Y8pJm1xomD>JKIfWDheh3T`pBoq4ks;f)%V88;4oGF z3)<2uiODhQp;xSj;yBPN2ilk^gXlc?G|kKQ?`ZyR+U``2`hbIeBI4DEIQ3hWmJP(`el~2a^#mr8)YGLgEk>otF%n`G?H2j z!vhnISFILd5H1{rDbiZjI}-lhe-^`O7dhhu=(x>|9J=}AZNT+ak9vc>y%EWhM9}j0 zt}D@L)w@SH`RuT9$ms8oFpSFb4yo|5`Tqt!?~3SO_9pLMkx!_D266*VWvFMOTdVEx F=HG%Z-berd literal 0 HcmV?d00001 diff --git a/src/logo/csharp.png b/src/logo/csharp.png new file mode 100644 index 0000000000000000000000000000000000000000..7f02eb89589f3ca1c6d8358464ac85fa65a73736 GIT binary patch literal 4007 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 N002ovPDHLkV1f=$qs#yR literal 0 HcmV?d00001 diff --git a/src/preload.js b/src/preload.js index dea8484..710dbee 100644 --- a/src/preload.js +++ b/src/preload.js @@ -448,45 +448,51 @@ runCodeFile = (cmd, option, terminal, callback) => { // 批处理和 powershell 默认编码为 GBK, 解决批处理的换行问题 if (ext == 'bat' || ext == 'ps1') cmd = iconv.encode(cmd.replace(/\n/g, '\r\n'), 'GBK'); fs.writeFileSync(script, cmd); - var argvs = [script] - if (argv) { - argvs = argv.split(' ') - argvs.push(script); - } - var child; - if (bin) { - // 在终端中输出 - if (terminal) { - if (utools.isWindows()) { - child = child_process.spawn(`start cmd /k ${bin} ${argv} "${script}"`, { encoding: 'buffer', shell: true }) - } else if(utools.isMacOs()){ - var appleScript = `if application "Terminal" is running then - tell application "Terminal" - # do script without "in window" will open a new window - do script "clear;${bin} ${argv} ${script}" - activate - end tell - else - tell application "Terminal" - # window 1 is guaranteed to be recently opened window - do script "clear;${bin} ${argv} ${script}" in window 1 - activate - end tell - end if`; - child = child_process.spawn('osascript', ['-e', appleScript], { encoding: 'buffer' }) - } else { - return message('Linux 不支持在终端输出') - } - } else { - child = child_process.spawn(bin, argvs, { encoding: 'buffer' }) - } + // var argvs = [script] + // if (argv) { + // argvs = argv.split(' ') + // argvs.push(script); + // } + var child, cmdline + if (bin.slice(-7) == 'csc.exe') { + cmdline = `pushd "${path.dirname(script)}" && ${bin} ${argv} "${script}" && "${script.slice(0, -2) + 'exe'}"` + } else if (bin == 'gcc') { + var suffix = utools.isWindows() ? '.exe' : '' + cmdline = `pushd "${path.dirname(script)}" && ${bin} ${argv} ${script.slice(0, -2)} "${script}" && "${script.slice(0, -2) + suffix}"` + } else if (utools.isWindows() && bin == 'bash') { + cmdline = `${bin} ${argv} "${script.replace(/\\/g, '/').replace(/C:/i, '/mnt/c')}"` } else { - if (terminal) { - child = child_process.spawn(`start cmd /k "${script}"`, { encoding: 'buffer', shell: true }) + cmdline = `${bin} ${argv} "${script}"` + } + // 在终端中输出 + if (terminal) { + if (utools.isWindows()) { + if (bin.slice(-7) == 'csc.exe' || bin == 'gcc') { + cmdline = cmdline.split("&&") + cmdline = cmdline[0] + "&&" + cmdline[1] + "&& start cmd /k " + cmdline[2] + } else { + cmdline = `start cmd /k ${cmdline}` + } + } else if(utools.isMacOs()){ + var appleScript = `if application "Terminal" is running then + tell application "Terminal" + # do script without "in window" will open a new window + do script "clear;${bin} ${argv} ${script}" + activate + end tell + else + tell application "Terminal" + # window 1 is guaranteed to be recently opened window + do script "clear;${bin} ${argv} ${script}" in window 1 + activate + end tell + end if`; + cmdline = `osascript -e '${appleScript}'` } else { - child = child_process.spawn(script, { encoding: 'buffer' }) + return message('Linux 不支持在终端输出') } } + child = child_process.spawn(cmdline, { encoding: 'buffer', shell: true }) // var chunks = [], // err_chunks = []; child.stdout.on('data', chunk => {