1
1

Reorganization of TTY color functions.

Этот коммит содержится в:
Andrew Borodin 2009-05-14 19:18:03 +04:00
родитель bcc6a40486
Коммит c12ddff69b
15 изменённых файлов: 155 добавлений и 149 удалений

Просмотреть файл

@ -45,8 +45,8 @@
#define MAX_LINE_LEN 1024
#include "../src/tty/tty.h" /* tty_setcolor() */
#include "../src/tty/color.h" /* EDITOR_NORMAL_COLOR */
#include "../src/tty/tty.h" /* tty_printf() */
#include "../src/tty/color.h"
#include "../src/tty/key.h" /* is_idle() */
#include "../src/widget.h" /* buttonbar_redraw() */
@ -391,7 +391,7 @@ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
if (row <= edit->total_lines - edit->start_line) {
long tws = 0;
if (use_colors && visible_tws) {
if (tty_use_colors () && visible_tws) {
tws = edit_eol (edit, b);
while (tws > b && ((c = edit_get_byte (edit, tws - 1)) == ' '
|| c == '\t'))
@ -435,10 +435,10 @@ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
case '\t':
i = TAB_SIZE - ((int) col % TAB_SIZE);
col += i;
if (use_colors &&
if (tty_use_colors() &&
((visible_tabs || (visible_tws && q >= tws)) && enable_show_tabs_tws)) {
if (p->style & MOD_MARKED)
c = (p->style);
c = p->style;
else
c = p->style | MOD_WHITESPACE;
if (i > 2) {
@ -465,7 +465,7 @@ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
p->style = c;
p++;
}
} else if (use_colors && visible_tws && q >= tws && enable_show_tabs_tws) {
} else if (tty_use_colors() && visible_tws && q >= tws && enable_show_tabs_tws) {
p->ch = '.';
p->style |= MOD_WHITESPACE;
c = p->style & ~MOD_CURSOR;
@ -487,7 +487,7 @@ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
}
break;
case ' ':
if (use_colors && visible_tws && q >= tws && enable_show_tabs_tws) {
if (tty_use_colors() && visible_tws && q >= tws && enable_show_tabs_tws) {
p->ch = '.';
p->style |= MOD_WHITESPACE;
p++;

Просмотреть файл

@ -53,7 +53,7 @@
#include "../src/search/search.h" /* search engine */
#include "../src/tty/color.h" /* use_colors */
#include "../src/tty/color.h"
#include "edit-impl.h"
#include "edit-widget.h"
@ -501,10 +501,10 @@ static void translate_rule_to_color (WEdit * edit, struct syntax_rule rule, int
void edit_get_syntax_color (WEdit * edit, long byte_index, int *color)
{
if (edit->rules && byte_index < edit->last_byte &&
option_syntax_highlighting && use_colors) {
option_syntax_highlighting && tty_use_colors ()) {
translate_rule_to_color (edit, edit_get_rule (edit, byte_index), color);
} else {
*color = use_colors ? EDITOR_NORMAL_COLOR_INDEX : 0;
*color = tty_use_colors () ? EDITOR_NORMAL_COLOR_INDEX : 0;
}
}
@ -668,7 +668,7 @@ this_try_alloc_color_pair (const char *fg, const char *bg)
*p = '\0';
bg = b;
}
return try_alloc_color_pair (fg, bg);
return tty_try_alloc_color_pair (fg, bg);
}
static char *error_file_name = 0;
@ -1181,7 +1181,7 @@ edit_load_syntax (WEdit *edit, char ***pnames, const char *type)
edit_free_syntax_rules (edit);
if (!use_colors)
if (!tty_use_colors ())
return;
if (!option_syntax_highlighting && (!pnames || !*pnames))

Просмотреть файл

@ -584,7 +584,7 @@ done_screen ()
reset_shell_mode ();
mc_noraw_mode ();
keypad (stdscr, FALSE);
done_colors ();
tty_colors_done ();
}
static void

Просмотреть файл

@ -39,18 +39,20 @@
#include <string.h>
#include "global.h"
#include "../src/tty/tty.h"
#include "../src/tty/color.h"
#include "../src/tty/mouse.h"
#include "../src/tty/key.h" /* For mi_getch() */
#include "wtools.h" /* message() */
#include "dir.h"
#include "dialog.h"
#include "widget.h"
#include "panel.h"
#include "../src/tty/mouse.h"
#include "main.h"
#include "file.h" /* For copy_dir_dir(), move_dir_dir(), erase_dir() */
#include "help.h"
#include "../src/tty/key.h" /* For mi_getch() */
#include "tree.h"
#include "treestore.h"
#include "cmd.h"
@ -269,7 +271,7 @@ static void show_tree (WTree *tree)
/* Top level directory */
if (tree->active && current == tree->selected_ptr) {
if (!use_colors && !tree->is_panel)
if (!tty_use_colors () && !tree->is_panel)
tty_setcolor (MARKED_COLOR);
else
tty_setcolor (SELECTED_COLOR);
@ -302,7 +304,7 @@ static void show_tree (WTree *tree)
if (tree->active && current == tree->selected_ptr) {
/* Selected directory -> change color */
if (!use_colors && !tree->is_panel)
if (!tty_use_colors () && !tree->is_panel)
tty_setcolor (MARKED_COLOR);
else
tty_setcolor (SELECTED_COLOR);

Просмотреть файл

@ -18,6 +18,7 @@
extern gboolean disable_colors;
extern gboolean force_colors; /* for S-Lang only */
extern gboolean use_colors;
struct color_table_s {
const char *name;
@ -104,6 +105,7 @@ extern int max_index;
size_t color_table_len (void);
size_t color_map_len (void);
void tty_init_colors (void);
void configure_colors (void);
void load_dialog_colors (void);
void get_color (const char *cpp, CTYPE *colp);

Просмотреть файл

@ -36,10 +36,10 @@
int attr_pairs [MAX_PAIRS];
void
init_colors (void)
tty_init_colors (void)
{
if (has_colors () && !disable_colors)
use_colors = 1;
use_colors = TRUE;
if (use_colors) {
const size_t map_len = color_map_len ();
@ -74,6 +74,13 @@ init_colors (void)
load_dialog_colors ();
}
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
(void) force_colors;
}
/* Functions necessary to implement syntax highlighting */
void
mc_init_pair (int index, CTYPE foreground, CTYPE background)
@ -84,7 +91,7 @@ mc_init_pair (int index, CTYPE foreground, CTYPE background)
}
int
try_alloc_color_pair (const char *fg, const char *bg)
tty_try_alloc_color_pair (const char *fg, const char *bg)
{
int fg_index, bg_index;
int bold_attr;
@ -123,3 +130,15 @@ try_alloc_color_pair (const char *fg, const char *bg)
attr_pairs [p->index] = bold_attr;
return p->index;
}
void
tty_setcolor (int color)
{
attrset (color);
}
void
tty_lowlevel_setcolor (int color)
{
attrset (MY_COLOR_PAIR (color));
}

Просмотреть файл

@ -8,11 +8,13 @@
#include "../../src/tty/tty-ncurses.h" /* NCurses headers */
gboolean tty_use_colors ();
#define MAX_PAIRS 64
extern int attr_pairs [MAX_PAIRS];
#define MY_COLOR_PAIR(x) (COLOR_PAIR (x) | attr_pairs [x])
#define IF_COLOR(co, bw) (use_colors ? MY_COLOR_PAIR (co) : bw)
#define IF_COLOR(co, bw) (tty_use_colors () ? MY_COLOR_PAIR (co) : bw)
#define MARKED_SELECTED_COLOR IF_COLOR (4, A_REVERSE | A_BOLD)

Просмотреть файл

@ -33,13 +33,69 @@
#include "../../src/tty/color.h" /* variables */
#include "../../src/tty/color-internal.h"
#include "../../src/setup.h" /* color_terminal_string */
static int
has_colors (void)
{
const char *terminal = getenv ("TERM");
char *cts = color_terminal_string;
char *s;
size_t i;
if (force_colors)
SLtt_Use_Ansi_Colors = 1;
if (getenv ("COLORTERM") != NULL)
SLtt_Use_Ansi_Colors = 1;
/* We want to allow overwriding */
if (!disable_colors) {
/* check color_terminal_string */
while (*cts != '\0') {
while (*cts == ' ' || *cts == '\t')
cts++;
s = cts;
i = 0;
while (*cts != '\0' && *cts != ',') {
cts++;
i++;
}
if (i != 0 && i == strlen (terminal) && strncmp (s, terminal, i) == 0)
SLtt_Use_Ansi_Colors = 1;
if (*cts == ',')
cts++;
}
}
/* Setup emulated colors */
if (SLtt_Use_Ansi_Colors) {
if (tty_use_colors ()) {
mc_init_pair (A_REVERSE, "black", "white");
mc_init_pair (A_BOLD, "white", "black");
} else {
mc_init_pair (A_REVERSE, "black", "lightgray");
mc_init_pair (A_BOLD, "white", "black");
mc_init_pair (A_BOLD_REVERSE, "white", "lightgray");
}
} else {
SLtt_set_mono (A_BOLD, NULL, SLTT_BOLD_MASK);
SLtt_set_mono (A_REVERSE, NULL, SLTT_REV_MASK);
SLtt_set_mono (A_BOLD|A_REVERSE, NULL, SLTT_BOLD_MASK | SLTT_REV_MASK);
}
return SLtt_Use_Ansi_Colors;
}
void
init_colors (void)
tty_init_colors (void)
{
/* FIXME: if S-Lang is used, has_colors() must be called regardless
of whether we are interested in its result */
if (has_colors () && !disable_colors)
use_colors = 1;
use_colors = TRUE;
if (use_colors) {
const size_t map_len = color_map_len ();
@ -67,6 +123,13 @@ init_colors (void)
load_dialog_colors ();
}
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
force_colors = force;
}
/* Functions necessary to implement syntax highlighting */
void
mc_init_pair (int index, CTYPE foreground, CTYPE background)
@ -83,7 +146,7 @@ mc_init_pair (int index, CTYPE foreground, CTYPE background)
}
int
try_alloc_color_pair (const char *fg, const char *bg)
tty_try_alloc_color_pair (const char *fg, const char *bg)
{
struct colors_avail *p = &c;
@ -109,3 +172,24 @@ try_alloc_color_pair (const char *fg, const char *bg)
p->index = alloc_color_pair (fg, bg);
return p->index;
}
void
tty_setcolor (int color)
{
if (!SLtt_Use_Ansi_Colors)
SLsmg_set_color (color);
else if ((color & A_BOLD) != 0) {
if (color == A_BOLD)
SLsmg_set_color (A_BOLD);
else
SLsmg_set_color ((color & (~A_BOLD)) + 8);
} else
SLsmg_set_color (color);
}
/* Set colorpair by index, don't interpret S-Lang "emulated attributes" */
void
tty_lowlevel_setcolor (int color)
{
SLsmg_set_color (color & 0x7F);
}

Просмотреть файл

@ -31,9 +31,11 @@ enum {
# define A_NORMAL 0x00
#endif
gboolean tty_use_colors ();
#define COLOR_PAIR(x) x
#define IF_COLOR(co, bw) (use_colors ? COLOR_PAIR (co) : bw)
#define IF_COLOR(co, bw) (tty_use_colors () ? COLOR_PAIR (co) : bw)
#define MARKED_SELECTED_COLOR IF_COLOR (4, (SLtt_Use_Ansi_Colors ? A_BOLD_REVERSE : A_REVERSE | A_BOLD))

Просмотреть файл

@ -6,16 +6,16 @@
#ifndef MC_COLOR_H
#define MC_COLOR_H
#include "../../src/global.h" /* glib.h */
#ifdef HAVE_SLANG
# include "../../src/tty/color-slang.h"
#else
# include "../../src/tty/color-ncurses.h"
#endif
extern int use_colors;
/* Beware! When using Slang with color, not all the indexes are free.
See myslang.h (A_*) */
See color-slang.h (A_*) */
#define NORMAL_COLOR IF_COLOR (1, 0)
#define SELECTED_COLOR IF_COLOR (2, A_REVERSE)
#define MARKED_COLOR IF_COLOR (3, A_BOLD)
@ -83,8 +83,11 @@ extern int alarm_colors[4];
#define ERROR_HOT_NORMAL IF_COLOR (39, 0)
#define ERROR_HOT_FOCUS IF_COLOR (40, 0)
void init_colors (void);
void done_colors (void);
int try_alloc_color_pair (const char *fg, const char *bg);
void tty_colors_done (void);
gboolean tty_use_colors (void);
void tty_disable_colors (gboolean disable, gboolean force);
int tty_try_alloc_color_pair (const char *fg, const char *bg);
void tty_setcolor (int color);
void tty_lowlevel_setcolor (int color);
#endif /* MC_COLOR_H */

Просмотреть файл

@ -14,9 +14,9 @@
# define WANT_TERM_H
#endif
#include "../../src/tty/tty.h" /* tty_is_ugly_line_drawing() */
#include "../../src/tty/color-ncurses.h"
#include "../../src/tty/tty-ncurses.h"
#include "../../src/tty/color-internal.h" /* disable_colors */
#include "../../src/tty/color-internal.h"
#include "../../src/tty/win.h"
#include "../../src/background.h" /* we_are_background */
@ -83,7 +83,7 @@ init_curses (void)
noecho ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
init_colors ();
tty_init_colors ();
if (tty_is_ugly_line_drawing ()) {
int i;
@ -92,25 +92,6 @@ init_curses (void)
}
}
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
(void) force_colors;
}
void
tty_setcolor (int color)
{
attrset (color);
}
void
tty_lowlevel_setcolor (int color)
{
attrset (MY_COLOR_PAIR (color));
}
void
tty_gotoyx (int y, int x)
{

Просмотреть файл

@ -16,8 +16,8 @@
#include "../../src/global.h"
#include "../../src/tty/tty-slang.h" /* mc_init_pair */
#include "../../src/tty/color.h"
#include "../../src/tty/tty.h" /* tty_is_ugly_line_drawing() */
#include "../../src/tty/color-slang.h"
#include "../../src/tty/color-internal.h"
#include "../../src/tty/mouse.h" /* Gpm_Event is required in key.h */
#include "../../src/tty/key.h" /* define_sequence */
@ -27,7 +27,6 @@
#include "../../src/main.h" /* for slow_terminal */
#include "../../src/util.h" /* str_unconst */
#include "../../src/strutil.h" /* str_term_form */
#include "../../src/setup.h"
/*** global variables **************************************************/
@ -335,7 +334,7 @@ init_curses (void)
{
SLsmg_init_smg ();
do_enter_ca_mode ();
init_colors ();
tty_init_colors ();
keypad (stdscr, TRUE);
nodelay (stdscr, FALSE);
}
@ -383,89 +382,6 @@ vline (int character, int len)
}
}
int
has_colors (void)
{
const char *terminal = getenv ("TERM");
char *cts = color_terminal_string;
char *s;
size_t i;
if (force_colors)
SLtt_Use_Ansi_Colors = 1;
if (getenv ("COLORTERM") != NULL)
SLtt_Use_Ansi_Colors = 1;
/* We want to allow overwriding */
if (!disable_colors) {
/* check color_terminal_string */
while (*cts != '\0') {
while (*cts == ' ' || *cts == '\t')
cts++;
s = cts;
i = 0;
while (*cts != '\0' && *cts != ',') {
cts++;
i++;
}
if (i != 0 && i == strlen (terminal)
&& strncmp (s, terminal, i) == 0)
SLtt_Use_Ansi_Colors = 1;
if (*cts == ',')
cts++;
}
}
/* Setup emulated colors */
if (SLtt_Use_Ansi_Colors) {
if (use_colors) {
mc_init_pair (A_REVERSE, "black", "white");
mc_init_pair (A_BOLD, "white", "black");
} else {
mc_init_pair (A_REVERSE, "black", "lightgray");
mc_init_pair (A_BOLD, "white", "black");
mc_init_pair (A_BOLD_REVERSE, "white", "lightgray");
}
} else {
SLtt_set_mono (A_BOLD, NULL, SLTT_BOLD_MASK);
SLtt_set_mono (A_REVERSE, NULL, SLTT_REV_MASK);
SLtt_set_mono (A_BOLD|A_REVERSE, NULL, SLTT_BOLD_MASK | SLTT_REV_MASK);
}
return SLtt_Use_Ansi_Colors;
}
void
tty_disable_colors (gboolean disable, gboolean force)
{
disable_colors = disable;
force_colors = force;
}
void
tty_setcolor (int color)
{
if (!SLtt_Use_Ansi_Colors)
SLsmg_set_color (color);
else if ((color & A_BOLD) != 0) {
if (color == A_BOLD)
SLsmg_set_color (A_BOLD);
else
SLsmg_set_color ((color & (~A_BOLD)) + 8);
} else
SLsmg_set_color (color);
}
/* Set colorpair by index, don't interpret S-Lang "emulated attributes" */
void
tty_lowlevel_setcolor (int color)
{
SLsmg_set_color (color & 0x7F);
}
int
getch (void)
{

Просмотреть файл

@ -64,7 +64,6 @@ int getch (void);
void slang_keypad (int set);
void slang_shell_mode (void);
void slang_shutdown (void);
int has_colors (void);
#define printw SLsmg_printf
#define COLS SLtt_Screen_Cols
@ -87,7 +86,6 @@ mc_addch (char c)
#define addch(c) SLsmg_write_char (c)
#endif
#define addstr(s) SLsmg_write_string (str_unconst(s))
#define endwin() SLsmg_reset_smg ()
#define SLsmg_draw_double_box(r, c, dr, dc) SLsmg_draw_box ((r), (c), (dr), (dc))

Просмотреть файл

@ -36,7 +36,6 @@
#include "../../src/global.h"
#include "../../src/tty/tty.h"
#include "../../src/tty/color.h"
#include "../../src/main.h" /* for slow_terminal */
#include "../../src/strutil.h"
@ -110,12 +109,14 @@ tty_got_interrupt(void)
return rv;
}
void tty_set_ugly_line_drawing (gboolean do_ugly)
void
tty_set_ugly_line_drawing (gboolean do_ugly)
{
force_ugly_line_drawing = do_ugly;
}
gboolean tty_is_ugly_line_drawing (void)
gboolean
tty_is_ugly_line_drawing (void)
{
return force_ugly_line_drawing;
}

Просмотреть файл

@ -38,10 +38,6 @@ extern gboolean tty_got_interrupt(void);
extern void tty_gotoyx(int y, int x);
extern void tty_getyx(int *py, int *px);
extern void tty_disable_colors (gboolean disable, gboolean force);
extern void tty_setcolor(int color);
extern void tty_lowlevel_setcolor(int color);
extern void tty_print_char(int c);
extern void tty_print_alt_char(int c);
extern void tty_print_string(const char *s);