summaryrefslogtreecommitdiff
path: root/src/fe-text
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-11-15 00:52:35 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-11-15 00:52:35 +0000
commit4d771c54d9e1396792248f611453cbfccfad9570 (patch)
treee1dfd682ead85510a27fef2ffad77ba1ef61cbb8 /src/fe-text
parent0dafb7349ae7fb31215fde6016b6d63008ba5b2c (diff)
downloadirssi-4d771c54d9e1396792248f611453cbfccfad9570.zip
/SET force_colors -> /SET term_force_colors. Added /SET term_scroll_fast
option to specify if we want to scroll with fastest method, or the cleanest method. The default is cleanest and it looks best with xterm, with some other terminals where line-by-line scroll is slow, you might want to use the fast scrolling. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2015 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-text')
-rw-r--r--src/fe-text/term-curses.c7
-rw-r--r--src/fe-text/term-terminfo.c7
-rw-r--r--src/fe-text/term.c6
-rw-r--r--src/fe-text/term.h3
-rw-r--r--src/fe-text/terminfo-core.c41
-rw-r--r--src/fe-text/terminfo-core.h4
6 files changed, 57 insertions, 11 deletions
diff --git a/src/fe-text/term-curses.c b/src/fe-text/term-curses.c
index 6f71ac29..41139b97 100644
--- a/src/fe-text/term-curses.c
+++ b/src/fe-text/term-curses.c
@@ -193,6 +193,13 @@ void term_force_colors(int set)
/* don't do anything with curses */
}
+/* Setup scrolling - if fast is TRUE, we'll use the fastest method to
+ scroll, if it's FALSE, we'll use the one that looks cleanest. */
+void term_setup_scroll(int fast)
+{
+ /* don't do anything with curses */
+}
+
/* Clear screen */
void term_clear(void)
{
diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c
index e110085f..a0fb1422 100644
--- a/src/fe-text/term-terminfo.c
+++ b/src/fe-text/term-terminfo.c
@@ -170,6 +170,13 @@ void term_force_colors(int set)
terminfo_setup_colors(current_term, set);
}
+/* Setup scrolling - if fast is TRUE, we'll use the fastest method to
+ scroll, if it's FALSE, we'll use the one that looks cleanest. */
+void term_setup_scroll(int fast)
+{
+ terminfo_setup_scroll(current_term, fast);
+}
+
/* Clear screen */
void term_clear(void)
{
diff --git a/src/fe-text/term.c b/src/fe-text/term.c
index 2889f8eb..f2847661 100644
--- a/src/fe-text/term.c
+++ b/src/fe-text/term.c
@@ -92,7 +92,8 @@ static void read_settings(void)
{
int old_colors = term_use_colors;
- if (settings_get_bool("force_colors")) {
+ term_setup_scroll(settings_get_bool("term_scroll_fast"));
+ if (settings_get_bool("term_force_colors")) {
if (!term_use_colors) {
term_force_colors(TRUE);
term_use_colors = TRUE;
@@ -115,7 +116,8 @@ void term_common_init(void)
struct sigaction act;
#endif
settings_add_bool("lookandfeel", "colors", TRUE);
- settings_add_bool("lookandfeel", "force_colors", FALSE);
+ settings_add_bool("lookandfeel", "term_force_colors", FALSE);
+ settings_add_bool("lookandfeel", "term_scroll_fast", FALSE);
term_use_colors = term_has_colors() && settings_get_bool("colors");
read_settings();
diff --git a/src/fe-text/term.h b/src/fe-text/term.h
index 74e51f31..255329d6 100644
--- a/src/fe-text/term.h
+++ b/src/fe-text/term.h
@@ -40,6 +40,9 @@ void term_resize_dirty(void);
int term_has_colors(void);
/* Force the colors on any way you can */
void term_force_colors(int set);
+/* Setup scrolling - if fast is TRUE, we'll use the fastest method to
+ scroll, if it's FALSE, we'll use the one that looks cleanest. */
+void term_setup_scroll(int fast);
/* Clear screen */
void term_clear(void);
diff --git a/src/fe-text/terminfo-core.c b/src/fe-text/terminfo-core.c
index e6ff8ac4..79151fa0 100644
--- a/src/fe-text/terminfo-core.c
+++ b/src/fe-text/terminfo-core.c
@@ -484,6 +484,36 @@ void terminfo_cont(TERM_REC *term)
terminfo_input_init(term);
}
+/* Setup scrolling - if fast is TRUE, we'll use the fastest method to
+ scroll, if it's FALSE, we'll use the one that looks cleanest. */
+void terminfo_setup_scroll(TERM_REC *term, int fast)
+{
+ int region_1;
+
+ if ((term->TI_csr || term->TI_wind) && term->TI_rin && term->TI_indn) {
+ /* this is excellent - if only terminals supported it.. */
+ term->scroll = _scroll_region;
+ return;
+ }
+
+ region_1 = (term->TI_csr || term->TI_wind) && term->TI_ri && term->TI_ind;
+ if (!fast && region_1) {
+ /* we prefer pretty */
+ term->scroll = _scroll_region_1;
+ } else if (term->TI_il && term->TI_dl) {
+ /* either we prefer fast, or can't do pretty */
+ term->scroll = _scroll_line;
+ } else if (region_1) {
+ /* we prefer fast, but can't do it */
+ term->scroll = _scroll_region_1;
+ }
+
+ if (term->scroll == NULL && (term->TI_il1 && term->TI_dl1)) {
+ /* the final slowest and ugliest method we can use */
+ term->scroll = _scroll_line_1;
+ }
+}
+
void terminfo_stop(TERM_REC *term)
{
/* reset colors */
@@ -543,15 +573,8 @@ static int term_setup(TERM_REC *term)
_set_cursor_visible : _ignore_parm;
/* Scrolling */
- if ((term->TI_csr || term->TI_wind) && term->TI_rin && term->TI_indn)
- term->scroll = _scroll_region;
- else if (term->TI_il && term->TI_dl)
- term->scroll = _scroll_line;
- else if ((term->TI_csr || term->TI_wind) && term->TI_ri && term->TI_ind)
- term->scroll = _scroll_region_1;
- else if (term->TI_il1 && term->TI_dl1)
- term->scroll = _scroll_line_1;
- else {
+ terminfo_setup_scroll(term, FALSE);
+ if (term->scroll == NULL) {
fprintf(term->out, "Terminal doesn't support scrolling\n");
return 0;
}
diff --git a/src/fe-text/terminfo-core.h b/src/fe-text/terminfo-core.h
index 93afa78b..5c823854 100644
--- a/src/fe-text/terminfo-core.h
+++ b/src/fe-text/terminfo-core.h
@@ -93,6 +93,10 @@ void terminfo_core_deinit(TERM_REC *term);
terminal capabilities don't contain color codes */
void terminfo_setup_colors(TERM_REC *term, int force);
+/* Setup scrolling - if fast is TRUE, we'll use the fastest method to
+ scroll, if it's FALSE, we'll use the one that looks cleanest. */
+void terminfo_setup_scroll(TERM_REC *term, int fast);
+
/* Terminal was resized - ask the width/height from terminfo again */
void terminfo_resize(TERM_REC *term);