tsvm: highlighter and popup drawing fix

This commit is contained in:
minjaesong
2026-05-25 01:03:20 +09:00
parent 0d564d5f82
commit 6db6a2e7ed
2 changed files with 45 additions and 23 deletions

View File

@@ -428,9 +428,26 @@ const OP_BUTTONS = [
let opHover = -1 let opHover = -1
let opPanelDraw = (wo) => { let opPanelDraw = (wo) => {
function hr(y) { function hr(i, y) {
// draw horizontal rule...
con.color_pair(COL_TEXT, 255)
con.move(y, xp) con.move(y, xp)
print(`\x84196u`.repeat(SIDEBAR_WIDTH - 2)) print(`\u00C4`.repeat(SIDEBAR_WIDTH - 2))
// if mouse is up, draw the whole box
if (opHover == i) {
let moveBack = (i == 0) ? 6 : 3
con.color_pair(COL_HLTEXT, 255)
con.move(y - moveBack, xp - 1)
con.prnch(0xDA); print('\u00C4'.repeat(SIDEBAR_WIDTH - 2)); con.prnch(0xBF)
for (let yy = 1; yy < moveBack; yy++) {
con.move(y - moveBack + yy, xp - 1); con.prnch(0xB3)
con.move(y - moveBack + yy, xp + SIDEBAR_WIDTH); con.prnch(0xB3)
}
con.move(y, xp - 1)
con.prnch(0xC0); print('\u00C4'.repeat(SIDEBAR_WIDTH - 2)); con.prnch(0xD9)
}
} }
function labCol(i) { return (opHover === i) ? COL_HLTEXT : COL_TEXT } function labCol(i) { return (opHover === i) ? COL_HLTEXT : COL_TEXT }
@@ -441,76 +458,77 @@ let opPanelDraw = (wo) => {
// other panel // other panel
con.move(yp + 2, xp + 3) con.move(yp + 2, xp + 3)
con.prnch((windowMode) ? 0x11 : 0x10) con.color_pair(labCol(0), 255); con.prnch((windowMode) ? 0x11 : 0x10)
con.move(yp + 3, xp) con.move(yp + 3, xp)
print(` \x1B[38;5;${labCol(0)}m[\x1B[38;5;${COL_HLACTION}mZ\x1B[38;5;${labCol(0)}m]`) print(` \x1B[38;5;${labCol(0)}m[\x1B[38;5;${COL_HLACTION}mZ\x1B[38;5;${labCol(0)}m]`)
hr(yp+5) hr(0, yp+5)
// go up // go up
con.mvaddch(yp + 6, xp + 3, 0x18) con.color_pair(labCol(1), 255); con.mvaddch(yp + 6, xp + 3, 0x18)
con.move(yp + 7, xp) con.move(yp + 7, xp)
print(` \x1B[38;5;${labCol(1)}mGo \x1B[38;5;${COL_HLACTION}mU\x1B[38;5;${labCol(1)}mp`) print(` \x1B[38;5;${labCol(1)}mGo \x1B[38;5;${COL_HLACTION}mU\x1B[38;5;${labCol(1)}mp`)
hr(yp+8) hr(1, yp+8)
// copy // copy
con.move(yp + 9, xp + 2) con.move(yp + 9, xp + 2)
con.prnch(0xDB);con.prnch((windowMode) ? 0x1B : 0x1A);con.prnch(0xDB) con.color_pair(labCol(2), 255); con.prnch(0xDB);con.prnch((windowMode) ? 0x1B : 0x1A);con.prnch(0xDB)
con.move(yp + 10, xp) con.move(yp + 10, xp)
print(` \x1B[38;5;${COL_HLACTION}mC\x1B[38;5;${labCol(2)}mopy`) print(` \x1B[38;5;${COL_HLACTION}mC\x1B[38;5;${labCol(2)}mopy`)
hr(yp+11) hr(2, yp+11)
// move // move
con.move(yp + 12, xp + 2) con.move(yp + 12, xp + 2)
if (windowMode) con.prnch([0xDB, 0x1B, 0xB0]); else con.prnch([0xB0, 0x1A, 0xDB]) con.color_pair(labCol(3), 255); if (windowMode) con.prnch([0xDB, 0x1B, 0xB0]); else con.prnch([0xB0, 0x1A, 0xDB])
con.move(yp + 13, xp) con.move(yp + 13, xp)
print(` \x1B[38;5;${labCol(3)}mMo\x1B[38;5;${COL_HLACTION}mv\x1B[38;5;${labCol(3)}me`) print(` \x1B[38;5;${labCol(3)}mMo\x1B[38;5;${COL_HLACTION}mv\x1B[38;5;${labCol(3)}me`)
hr(yp+14) hr(3, yp+14)
// delete // delete
con.move(yp + 15, xp + 2) con.move(yp + 15, xp + 2)
if (windowMode) con.prnch([0xDB, 0x1A, 0xF9]); else con.prnch([0xF9, 0x1B, 0xDB]) con.color_pair(labCol(4), 255); if (windowMode) con.prnch([0xDB, 0x1A, 0xF9]); else con.prnch([0xF9, 0x1B, 0xDB])
con.move(yp + 16, xp) con.move(yp + 16, xp)
print(` \x1B[38;5;${COL_HLACTION}mD\x1B[38;5;${labCol(4)}melete`) print(` \x1B[38;5;${COL_HLACTION}mD\x1B[38;5;${labCol(4)}melete`)
hr(yp+17) hr(4, yp+17)
// mkdir // mkdir
con.move(yp + 18, xp + 2) con.move(yp + 18, xp + 2)
con.color_pair(labCol(5), 255);
con.prnch(0xDB) con.prnch(0xDB)
con.video_reverse();con.prnch(0x2B);con.video_reverse() con.video_reverse();con.prnch(0x2B);con.video_reverse()
con.prnch(0xDF) con.prnch(0xDF)
con.move(yp + 19, xp) con.move(yp + 19, xp)
print(` \x1B[38;5;${labCol(5)}mM\x1B[38;5;${COL_HLACTION}mk\x1B[38;5;${labCol(5)}mDir`) print(` \x1B[38;5;${labCol(5)}mM\x1B[38;5;${COL_HLACTION}mk\x1B[38;5;${labCol(5)}mDir`)
hr(yp+20) hr(5, yp+20)
// rename // rename
con.move(yp + 21, xp + 2) con.move(yp + 21, xp + 2)
con.prnch(0x4E);con.prnch(0x1A);con.prnch(0x52) con.color_pair(labCol(6), 255); con.prnch(0x4E);con.prnch(0x1A);con.prnch(0x52)
con.move(yp + 22, xp) con.move(yp + 22, xp)
print(` \x1B[38;5;${COL_HLACTION}mR\x1B[38;5;${labCol(6)}mename`) print(` \x1B[38;5;${COL_HLACTION}mR\x1B[38;5;${labCol(6)}mename`)
hr(yp+23) hr(6, yp+23)
// the dreaded hamburger menu // the dreaded hamburger menu
con.move(yp + 24, xp + 3) con.move(yp + 24, xp + 3)
con.prnch(0xf0) con.color_pair(labCol(7), 255); con.prnch(0xf0)
con.move(yp + 25, xp) con.move(yp + 25, xp)
print(` \x1B[38;5;${COL_HLACTION}mM\x1B[38;5;${labCol(7)}more`) print(` \x1B[38;5;${COL_HLACTION}mM\x1B[38;5;${labCol(7)}more`)
hr(yp+26) hr(7, yp+26)
// quit // quit
con.move(yp + 27, xp + 3) con.move(yp + 27, xp + 3)
con.prnch(0x58) con.color_pair(labCol(8), 255); con.prnch(0x58)
con.move(yp + 28, xp) con.move(yp + 28, xp)
print(` \x1B[38;5;${COL_HLACTION}mQ\x1B[38;5;${labCol(8)}muit`) print(` \x1B[38;5;${COL_HLACTION}mQ\x1B[38;5;${labCol(8)}muit`)
con.color_pair(COL_TEXT, 255)
} }

View File

@@ -220,6 +220,9 @@ function showDialog(opts) {
const values = fields.map(f => (f.initial == null) ? '' : ('' + f.initial)) const values = fields.map(f => (f.initial == null) ? '' : ('' + f.initial))
const cursors = values.map(v => v.length) const cursors = values.map(v => v.length)
let oldFG = con.get_color_fore()
let oldBG = con.get_color_back()
let buttons let buttons
if (opts.buttons) { if (opts.buttons) {
buttons = opts.buttons buttons = opts.buttons
@@ -322,23 +325,23 @@ function showDialog(opts) {
// Top border // Top border
con.color_pair(frameFg, bg) con.color_pair(frameFg, bg)
con.move(fbRow, fbCol) con.move(fbRow, fbCol)
print('Ú' + 'Ä'.repeat(fw) + '¿') print('\u00DA' + '\u00C4'.repeat(fw) + '\u00BF')
// Side borders + content // Side borders + content
con.color_pair(frameFg, bg) con.color_pair(frameFg, bg)
con.move(fbRow + 1, fbCol) con.move(fbRow + 1, fbCol)
print('³') print('\u00B3')
con.color_pair(fg, fieldBg) con.color_pair(fg, fieldBg)
const s = fieldScroll(cursors[i], fw) const s = fieldScroll(cursors[i], fw)
const vis = values[i].substring(s, s + fw) const vis = values[i].substring(s, s + fw)
print(vis.padEnd(fw, ' ')) print(vis.padEnd(fw, ' '))
con.color_pair(frameFg, bg) con.color_pair(frameFg, bg)
con.move(fbRow + 1, fbCol + fw + 1) con.move(fbRow + 1, fbCol + fw + 1)
print('³') print('\u00B3')
// Bottom border // Bottom border
con.move(fbRow + 2, fbCol) con.move(fbRow + 2, fbCol)
print('À' + 'Ä'.repeat(fw) + 'Ù') print('\u00C0' + '\u00C4'.repeat(fw) + '\u00D9')
con.color_pair(fg, bg) con.color_pair(fg, bg)
} }
@@ -518,6 +521,7 @@ function showDialog(opts) {
} }
con.curs_set(0) con.curs_set(0)
con.color_pair(oldFG, oldBG)
return done return done
} }