diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-07-31 18:19:43 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-31 18:19:43 -0400 |
| commit | 15967a87b3948f1631dbcbed540378fc6e302415 (patch) | |
| tree | f033d355b85c678b59cf0a519403810b9f4ca2a1 /docs/repl.js | |
| parent | c2afaad9f6951c2f635f2ac63842f190dd799573 (diff) | |
| parent | bbcb9e49d454c2d4d203df7675626c10c25e539d (diff) | |
Merge pull request #13 from pkova/master
Add customizable prefix key in js repl
Diffstat (limited to 'docs/repl.js')
| -rw-r--r-- | docs/repl.js | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/docs/repl.js b/docs/repl.js index 5ec386a5..25eef499 100644 --- a/docs/repl.js +++ b/docs/repl.js @@ -78,7 +78,8 @@ sysvals.plot = (x,w) => { return '\0'; } -let keymode=0; // 1 for backslash +let keymode=0; // 1 for prefix +let prefix='\\'; doc.code.onkeydown = ev => { let k = ev.which; if (16<=k && k<=20) { @@ -87,12 +88,12 @@ doc.code.onkeydown = ev => { repl(); return false; } if (keymode) { keymode = 0; - doc.kb.classList.remove('backslash'); + doc.kb.classList.remove('prefix'); let c = keys[ev.key]; if (c) return typeChar(ev.target, c, ev); - } else if (ev.key=='\\') { + } else if (ev.key==prefix) { keymode = 1; - doc.kb.classList.add('backslash'); + doc.kb.classList.add('prefix'); ev.preventDefault(); } } @@ -111,14 +112,20 @@ let kk=Array.from('`123456890-=~!@#$%^&*()_+qwertuiop[]QWERTIOP{}asdfghjkl;ASFGH let kv=Array.from('˜˘¨⁼⌜´˝∞¯•÷׬⎉⚇⍟◶⊘⎊⍎⍕⟨⟩√⋆⌽𝕨∊↑∧⊔⊏⊐π←→↙𝕎⍷𝕣⍋⊑⊒⍳⊣⊢⍉𝕤↕𝕗𝕘⊸∘○⟜⋄↖𝕊𝔽𝔾«⌾»·˙⥊𝕩↓∨⌊≡∾≍≠𝕏⍒⌈≢≤≥⇐‿↩'); let keys={}, revkeys={}, primhelp={}; kk.map((k,i)=>{keys[k]=kv[i];revkeys[kv[i]]=k;}); -doc.kb.innerHTML = keydesc.map(d=>{ - let s = syncls[d[0]]; - let c = Array.from(d)[1]; - let t = d.slice(1+c.length).replace(';','\n'); - let k = revkeys[c]; if (k) t += '\n\\ '+(k==='"'?'"':k); - primhelp[c] = t; - return '<span title="'+t+'" class="'+s+'">'+c+'</span>' -}).concat(['<a href="keymap.html" target="_blank">map</span>']).join("​"); // zero-width space +doc.kb.innerHTML = keydesc + .map(d=>'<span class="'+syncls[d[0]]+'">'+Array.from(d)[1]+'</span>') + .concat(['<a href="keymap.html" target="_blank">map</a>']) + .join("​"); // zero-width space +let setPrefix = () => { + doc.kb.querySelectorAll("span").forEach((x,i) => { + let d = keydesc[i]; + let c = Array.from(d)[1]; + let t = d.slice(1+c.length).replace(';','\n'); + let k = revkeys[c]; if (k) t += '\n'+prefix+(k==='"'?'"':k); + x.title = primhelp[c] = t; + }); +} +setPrefix(); doc.kb.onmousedown = ev => { let t = ev.target; if (t.nodeName === 'SPAN') { @@ -126,17 +133,25 @@ doc.kb.onmousedown = ev => { } } +doc.kb.innerHTML += '<div class="kbext"></div>'; +doc.kbext = doc.kb.querySelector('.kbext'); + if (doc.demo) { let fonts=[["BQN386"],["DejaVu","Mod"],["Fairfax","HD"],["3270","font"],["Iosevka","Term"],["Julia","Mono"]]; let fclass = f => f==="3270"?"f"+f:f let fontsel = '<select>'+fonts.map(f => '<option value="'+f[0]+'">'+f[0]+(f[1]?' '+f[1]:'')+'</option>' ).join("")+'select'; - doc.kb.innerHTML += fontsel; - doc.kb.querySelector('select').onchange = + doc.kbext.innerHTML += fontsel; + doc.kbext.querySelector('select').onchange = e=>doc.cont.className='cont '+fclass(e.target.value); } +doc.kbext.innerHTML += '<input class="prfx" type="text" maxlength="1" value="'+prefix+'"/>'; +doc.kbext.querySelector(".prfx").onchange = ev => { + prefix = ev.target.value; setPrefix(); +} + if (doc.perm) doc.perm.onmouseover = doc.perm.onfocus = () => { let b=(new TextEncoder()).encode(doc.code.value); doc.perm.href='#code='+btoa(String.fromCharCode(...b)); |
