diff --git a/share/man/man4/syscons.4 b/share/man/man4/syscons.4 index 49b4c84aabf1..8fa34eefb67d 100644 --- a/share/man/man4/syscons.4 +++ b/share/man/man4/syscons.4 @@ -38,6 +38,7 @@ .Cd "options SC_ALT_MOUSE_IMAGE" .Cd "options SC_CUT_SEPCHARS=_characters_" .Cd "options SC_CUT_SPACES2TABS" +.Cd "options SC_DFLT_TERM" .Cd "options SC_DISABLE_KDBKEY" .Cd "options SC_DISABLE_REBOOT" .Cd "options SC_HISTORY_SIZE=N" @@ -48,6 +49,9 @@ .Cd "options SC_NO_PALETTE_LOADING" .Cd "options SC_NO_SUSPEND_VTYSWITCH" .Cd "options SC_NO_SYSMOUSE" +.Cd "options SC_NO_TERM_DUMB" +.Cd "options SC_NO_TERM_SC" +.Cd "options SC_NO_TERM_SCTEKEN" .Cd "options SC_PIXEL_MODE" .Cd "options SC_TWOBUTTON_MOUSE" .Cd "options SC_NORM_ATTR=_attribute_" @@ -285,6 +289,8 @@ This options instructs the driver to convert leading spaces into tabs when copying data into cut buffer. This might be useful to preserve indentation when copying tab-indented text. +.It Dv SC_DFLT_TERM=_name_ +This option specifies the name of the preferred terminal emulator. .It Dv SC_DISABLE_KDBKEY This option disables the ``debug'' key combination (by default, it is .Dv Alt-Esc , @@ -409,6 +415,15 @@ will fail if this option is defined. This option implies the .Dv SC_NO_CUTPASTE option too. +.It Dv SC_NO_TERM_DUMB +.It Dv SC_NO_TERM_SC +.It Dv SC_NO_TERM_SCTEKEN +These options remove the +.Qq dumb , +.Qq sc , +and +.Qq scteken +terminal emulators, respectively. .El .Ss Driver Flags The following driver flags can be used to control the diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 8c143205cee8..620a542fd7d9 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -1488,6 +1488,7 @@ options MAXCONS=16 # number of virtual consoles options SC_ALT_MOUSE_IMAGE # simplified mouse cursor in text mode options SC_DFLT_FONT # compile font in makeoptions SC_DFLT_FONT=cp850 +options SC_DFLT_TERM=\"sc\" # default terminal emulator options SC_DISABLE_KDBKEY # disable `debug' key options SC_DISABLE_REBOOT # disable reboot key sequence options SC_HISTORY_SIZE=200 # number of history buffer lines @@ -1518,6 +1519,9 @@ options SC_NO_HISTORY options SC_NO_MODE_CHANGE options SC_NO_SYSMOUSE options SC_NO_SUSPEND_VTYSWITCH +#!options SC_NO_TERM_DUMB +#!options SC_NO_TERM_SC +#!options SC_NO_TERM_SCTEKEN # `flags' for sc # 0x80 Put the video card in the VESA 800x600 dots, 16 color mode diff --git a/sys/conf/files b/sys/conf/files index 6dbb61c59846..c12d4f38bac0 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -3133,7 +3133,9 @@ dev/syscons/rain/rain_saver.c optional rain_saver dev/syscons/schistory.c optional sc dev/syscons/scmouse.c optional sc dev/syscons/scterm.c optional sc -dev/syscons/scterm-teken.c optional sc +dev/syscons/scterm-dumb.c optional sc !SC_NO_TERM_DUMB +dev/syscons/scterm-sc.c optional sc !SC_NO_TERM_SC +dev/syscons/scterm-teken.c optional sc !SC_NO_TERM_TEKEN dev/syscons/scvidctl.c optional sc dev/syscons/scvtb.c optional sc dev/syscons/snake/snake_saver.c optional snake_saver @@ -4883,7 +4885,7 @@ security/mac_veriexec/mac_veriexec_sha1.c optional mac_veriexec_sha1 security/mac_veriexec/mac_veriexec_sha256.c optional mac_veriexec_sha256 security/mac_veriexec/mac_veriexec_sha384.c optional mac_veriexec_sha384 security/mac_veriexec/mac_veriexec_sha512.c optional mac_veriexec_sha512 -teken/teken.c optional sc | vt +teken/teken.c optional sc !SC_NO_TERM_TEKEN | vt ufs/ffs/ffs_alloc.c optional ffs ufs/ffs/ffs_balloc.c optional ffs ufs/ffs/ffs_inode.c optional ffs diff --git a/sys/conf/options b/sys/conf/options index a602ff5b05a6..c0ef70f26541 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -767,6 +767,7 @@ SC_CUT_SPACES2TABS opt_syscons.h SC_CUT_SEPCHARS opt_syscons.h SC_DEBUG_LEVEL opt_syscons.h SC_DFLT_FONT opt_syscons.h +SC_DFLT_TERM opt_syscons.h SC_DISABLE_KDBKEY opt_syscons.h SC_DISABLE_REBOOT opt_syscons.h SC_HISTORY_SIZE opt_syscons.h @@ -780,6 +781,9 @@ SC_NO_HISTORY opt_syscons.h SC_NO_MODE_CHANGE opt_syscons.h SC_NO_SUSPEND_VTYSWITCH opt_syscons.h SC_NO_SYSMOUSE opt_syscons.h +SC_NO_TERM_DUMB opt_syscons.h +SC_NO_TERM_SC opt_syscons.h +SC_NO_TERM_TEKEN opt_syscons.h SC_NORM_ATTR opt_syscons.h SC_NORM_REV_ATTR opt_syscons.h SC_PIXEL_MODE opt_syscons.h diff --git a/usr.sbin/vidcontrol/vidcontrol.1 b/usr.sbin/vidcontrol/vidcontrol.1 index 6bc8d582b04d..e811d82c6865 100644 --- a/usr.sbin/vidcontrol/vidcontrol.1 +++ b/usr.sbin/vidcontrol/vidcontrol.1 @@ -21,9 +21,10 @@ .Nd system console control and configuration utility .Sh SYNOPSIS .Nm -.Op Fl CdLHPpx +.Op Fl CdHLPpx .Op Fl b Ar color .Op Fl c Ar appearance +.Op Fl E Ar emulator .Oo .Fl f .Oo @@ -282,6 +283,11 @@ Show the current changes. .El .It Fl d Print out current output screen map. +.It Fl E Ar emulator +Set the terminal emulator to +.Ar emulator . +.It Fl e +Show the active and available terminal emulators. .It Xo .Fl f .Oo diff --git a/usr.sbin/vidcontrol/vidcontrol.c b/usr.sbin/vidcontrol/vidcontrol.c index 67c0a9d3f8a5..c7e0524241bd 100644 --- a/usr.sbin/vidcontrol/vidcontrol.c +++ b/usr.sbin/vidcontrol/vidcontrol.c @@ -204,11 +204,11 @@ usage(void) " [foreground [background]] [show]"); else fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n", -"usage: vidcontrol [-CdHLPpx] [-b color] [-c appearance] [-f [size] file]", -" [-g geometry] [-h size] [-i active | adapter | mode]", -" [-l screen_map] [-M char] [-m on | off]", -" [-r foreground background] [-S on | off] [-s number]", -" [-T xterm | cons25] [-t N | off] [mode]", +"usage: vidcontrol [-CdHLPpx] [-b color] [-c appearance] [-E emulator]", +" [-f [[size] file]] [-g geometry] [-h size]", +" [-i active | adapter | mode] [-l screen_map] [-M char]", +" [-m on | off] [-r foreground background] [-S on | off]", +" [-s number] [-T xterm | cons25] [-t N | off] [mode]", " [foreground [background]] [show]"); exit(1); } @@ -1384,6 +1384,45 @@ clear_history(void) } } +static int +get_terminal_emulator(int i, struct term_info *tip) +{ + tip->ti_index = i; + if (ioctl(0, CONS_GETTERM, tip) == 0) + return (1); + strlcpy(tip->ti_name, "unknown", sizeof(tip->ti_name)); + strlcpy(tip->ti_desc, "unknown", sizeof(tip->ti_desc)); + return (0); +} + +static void +get_terminal_emulators(void) +{ + struct term_info ti; + int i; + + for (i = 0; i < 10; i++) { + if (get_terminal_emulator(i, &ti) == 0) + break; + printf("%d: %s (%s)%s\n", i, ti.ti_name, ti.ti_desc, + i == 0 ? " (active)" : ""); + } +} + +static void +set_terminal_emulator(const char *name) +{ + struct term_info old_ti, ti; + + get_terminal_emulator(0, &old_ti); + strlcpy(ti.ti_name, name, sizeof(ti.ti_name)); + if (ioctl(0, CONS_SETTERM, &ti) != 0) + warn("SETTERM '%s'", name); + get_terminal_emulator(0, &ti); + printf("%s (%s) -> %s (%s)\n", old_ti.ti_name, old_ti.ti_desc, + ti.ti_name, ti.ti_desc); +} + static void set_terminal_mode(char *arg) { @@ -1412,7 +1451,7 @@ main(int argc, char **argv) if (vt4_mode) opts = "b:Cc:fg:h:Hi:M:m:pPr:S:s:T:t:x"; else - opts = "b:Cc:dfg:h:Hi:l:LM:m:pPr:S:s:T:t:x"; + opts = "b:Cc:deE:fg:h:Hi:l:LM:m:pPr:S:s:T:t:x"; while ((opt = getopt(argc, argv, opts)) != -1) switch(opt) { @@ -1430,6 +1469,16 @@ main(int argc, char **argv) break; print_scrnmap(); break; + case 'E': + if (vt4_mode) + break; + set_terminal_emulator(optarg); + break; + case 'e': + if (vt4_mode) + break; + get_terminal_emulators(); + break; case 'f': optarg = nextarg(argc, argv, &optind, 'f', 0); if (optarg != NULL) {