mirror of
https://github.com/visit1985/mdp.git
synced 2024-11-22 06:22:50 +03:00
config.h file
This commit is contained in:
parent
10e3f11239
commit
41979819e7
@ -62,7 +62,7 @@ Review sample.md for more details.
|
||||
|
||||
---
|
||||
|
||||
***Controls:***
|
||||
***Default controls:***
|
||||
|
||||
- h, j, k, l, Arrow keys,
|
||||
Space, Enter, Backspace,
|
||||
@ -73,6 +73,12 @@ Review sample.md for more details.
|
||||
- r - reload input file
|
||||
- q - exit
|
||||
|
||||
---
|
||||
|
||||
***Configuration***:
|
||||
|
||||
A `config.h` configuration file is available in `include/`, change the settings you want and recompile.
|
||||
Colors, keybindings and list types are configurable as of now. Note that configuring colors only works in 8 color mode.
|
||||
|
||||
---
|
||||
|
||||
|
133
include/config.h
Normal file
133
include/config.h
Normal file
@ -0,0 +1,133 @@
|
||||
#if !defined( CONFIG_H )
|
||||
#define CONFIG_H
|
||||
|
||||
/*
|
||||
* User configuration file
|
||||
* Copyright (C) 2018 Michael Goehler
|
||||
*
|
||||
* This file is part of mdp.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
// unordered list characters
|
||||
//
|
||||
// you can also override via env vars:
|
||||
// export MDP_LIST_OPEN1=" " MDP_LIST_OPEN2=" " MDP_LIST_OPEN3=" "
|
||||
// export MDP_LIST_HEAD1=" ■ " MDP_LIST_HEAD2=" ● " MDP_LIST_HEAD3=" ▫ "
|
||||
// or export MDP_LIST_OPEN to override all MDP_LIST_OPENx variables
|
||||
// and similarly for MDP_LIST_HEAD
|
||||
static const char *list_open1 = " | ";
|
||||
static const char *list_open2 = " | ";
|
||||
static const char *list_open3 = " | ";
|
||||
static const char *list_head1 = " +- ";
|
||||
static const char *list_head2 = " +- ";
|
||||
static const char *list_head3 = " +- ";
|
||||
|
||||
#define FADE_DELAY 15000 // micro seconds
|
||||
#define GOTO_SLIDE_DELAY 5 // tenths of seconds
|
||||
|
||||
// colors - you can only set in 8-bit color mode
|
||||
//
|
||||
/* Use the ncurses defined colors, here's a list of them:
|
||||
* COLOR_BLACK
|
||||
* COLOR_RED
|
||||
* COLOR_GREEN
|
||||
* COLOR_YELLOW
|
||||
* COLOR_BLUE
|
||||
* COLOR_MAGENTA
|
||||
* COLOR_CYAN
|
||||
* COLOR_WHITE
|
||||
*/
|
||||
#define FG_COLOR COLOR_WHITE
|
||||
#define BG_COLOR COLOR_BLACK
|
||||
#define TITLE_COLOR COLOR_YELLOW
|
||||
#define HEADER_COLOR COLOR_BLUE
|
||||
#define BOLD_COLOR COLOR_RED
|
||||
|
||||
// color ramp for fading from black to color
|
||||
static short white_ramp[24] = { 16, 232, 233, 234, 235, 236,
|
||||
237, 238, 239, 240, 241, 242,
|
||||
244, 245, 246, 247, 248, 249,
|
||||
250, 251, 252, 253, 254, 255 };
|
||||
|
||||
static short blue_ramp[24] = { 16, 17, 17, 18, 18, 19,
|
||||
19, 20, 20, 21, 27, 33,
|
||||
32, 39, 38, 45, 44, 44,
|
||||
81, 81, 51, 51, 123, 123 };
|
||||
|
||||
static short red_ramp[24] = { 16, 52, 52, 53, 53, 89,
|
||||
89, 90, 90, 126, 127, 127,
|
||||
163, 163, 164, 164, 200, 200,
|
||||
201, 201, 207, 207, 213, 213 };
|
||||
|
||||
// color ramp for fading from white to color
|
||||
static short white_ramp_invert[24] = { 15, 255, 254, 254, 252, 251,
|
||||
250, 249, 248, 247, 246, 245,
|
||||
243, 242, 241, 240, 239, 238,
|
||||
237, 236, 235, 234, 233, 232 };
|
||||
|
||||
static short blue_ramp_invert[24] = { 15, 231, 231, 195, 195, 159,
|
||||
159, 123, 123, 87, 51, 44,
|
||||
45, 38, 39, 32, 33, 33,
|
||||
26, 26, 27, 27, 21, 21 };
|
||||
|
||||
static short red_ramp_invert[24] = { 15, 231, 231, 224, 224, 225,
|
||||
225, 218, 218, 219, 212, 213,
|
||||
206, 207, 201, 200, 199, 199,
|
||||
198, 198, 197, 197, 196, 196 };
|
||||
|
||||
// keybindings
|
||||
static const int prev_slide_binding[] = {
|
||||
KEY_UP,
|
||||
KEY_LEFT,
|
||||
KEY_PPAGE,
|
||||
8, // BACKSPACE (ascii)
|
||||
127, // BACKSPACE (xterm)
|
||||
263, // BACKSPACE (getty)
|
||||
'h',
|
||||
'k',
|
||||
0
|
||||
};
|
||||
static const int next_slide_binding[] = {
|
||||
KEY_DOWN,
|
||||
KEY_RIGHT,
|
||||
KEY_NPAGE,
|
||||
'\n', // ENTER
|
||||
' ', // SPACE
|
||||
'j',
|
||||
'l',
|
||||
0
|
||||
};
|
||||
static const int first_slide_binding[] = {
|
||||
'g',
|
||||
KEY_HOME,
|
||||
0
|
||||
};
|
||||
static const int last_slide_binding[] = {
|
||||
'G',
|
||||
KEY_END,
|
||||
0
|
||||
};
|
||||
static const int reload_binding[] = {
|
||||
'r',
|
||||
0
|
||||
};
|
||||
static const int quit_binding[] = {
|
||||
'q',
|
||||
0
|
||||
};
|
||||
|
||||
#endif // !defined( CONFIG_H )
|
@ -52,9 +52,6 @@
|
||||
#define CP_YELLOW 4 // 208
|
||||
#define CP_BLACK 5 // CP_WHITE with foreground and background swapped
|
||||
|
||||
#define FADE_DELAY 15000 // micro seconds
|
||||
#define GOTO_SLIDE_DELAY 5 // tenths of seconds
|
||||
|
||||
int ncurses_display(deck_t *deck, int notrans, int nofade, int invert, int reload, int noreload, int slidenum, int nocodebg);
|
||||
void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colors, int nocodebg);
|
||||
void inline_display(WINDOW *window, const wchar_t *c, const int colors, int nocodebg);
|
||||
@ -63,5 +60,6 @@ void fade_in(WINDOW *window, int trans, int colors, int invert);
|
||||
int int_length (int val);
|
||||
int get_slide_number(char init);
|
||||
void setup_list_strings(void);
|
||||
bool evaluate_binding(const int bindings[], char c);
|
||||
|
||||
#endif // !defined( VIEWER_H )
|
||||
|
3
mdp.1
3
mdp.1
@ -168,6 +168,9 @@ This key is disabled if input was read from standard input.
|
||||
Exit
|
||||
.BR mdp "."
|
||||
.
|
||||
.SH CUSTOMIZATION
|
||||
.B mdp
|
||||
can be configured by modifying config.h and recompiling.
|
||||
.SH AUTHOR
|
||||
Written by Michael Goehler and others, see
|
||||
.IR https://github.com/visit1985/mdp/blob/master/AUTHORS "."
|
||||
|
269
src/viewer.c
269
src/viewer.c
@ -28,50 +28,7 @@
|
||||
#include <unistd.h> // usleep
|
||||
#include <stdlib.h> // getenv
|
||||
#include "viewer.h"
|
||||
|
||||
// color ramp for fading from black to color
|
||||
static short white_ramp[24] = { 16, 232, 233, 234, 235, 236,
|
||||
237, 238, 239, 240, 241, 242,
|
||||
244, 245, 246, 247, 248, 249,
|
||||
250, 251, 252, 253, 254, 255 };
|
||||
|
||||
static short blue_ramp[24] = { 16, 17, 17, 18, 18, 19,
|
||||
19, 20, 20, 21, 27, 33,
|
||||
32, 39, 38, 45, 44, 44,
|
||||
81, 81, 51, 51, 123, 123 };
|
||||
|
||||
static short red_ramp[24] = { 16, 52, 52, 53, 53, 89,
|
||||
89, 90, 90, 126, 127, 127,
|
||||
163, 163, 164, 164, 200, 200,
|
||||
201, 201, 207, 207, 213, 213 };
|
||||
|
||||
// color ramp for fading from white to color
|
||||
static short white_ramp_invert[24] = { 15, 255, 254, 254, 252, 251,
|
||||
250, 249, 248, 247, 246, 245,
|
||||
243, 242, 241, 240, 239, 238,
|
||||
237, 236, 235, 234, 233, 232};
|
||||
|
||||
static short blue_ramp_invert[24] = { 15, 231, 231, 195, 195, 159,
|
||||
159, 123, 123, 87, 51, 44,
|
||||
45, 38, 39, 32, 33, 33,
|
||||
26, 26, 27, 27, 21, 21};
|
||||
|
||||
static short red_ramp_invert[24] = { 15, 231, 231, 224, 224, 225,
|
||||
225, 218, 218, 219, 212, 213,
|
||||
206, 207, 201, 200, 199, 199,
|
||||
198, 198, 197, 197, 196, 196};
|
||||
|
||||
// unordered list characters
|
||||
//
|
||||
// override via env vars:
|
||||
// export MDP_LIST_OPEN1=" " MDP_LIST_OPEN2=" " MDP_LIST_OPEN3=" "
|
||||
// export MDP_LIST_HEAD1=" ■ " MDP_LIST_HEAD2=" ● " MDP_LIST_HEAD3=" ▫ "
|
||||
static const char *list_open1 = " | ";
|
||||
static const char *list_open2 = " | ";
|
||||
static const char *list_open3 = " | ";
|
||||
static const char *list_head1 = " +- ";
|
||||
static const char *list_head2 = " +- ";
|
||||
static const char *list_head3 = " +- ";
|
||||
#include "config.h"
|
||||
|
||||
int ncurses_display(deck_t *deck, int notrans, int nofade, int invert, int reload, int noreload, int slidenum, int nocodebg) {
|
||||
|
||||
@ -227,22 +184,22 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert, int reloa
|
||||
|
||||
if(notrans) {
|
||||
if(invert) {
|
||||
trans = 7; // white in 8 color mode
|
||||
trans = FG_COLOR; // white in 8 color mode
|
||||
} else {
|
||||
trans = 0; // black in 8 color mode
|
||||
trans = BG_COLOR; // black in 8 color mode
|
||||
}
|
||||
}
|
||||
|
||||
if(invert) {
|
||||
init_pair(CP_WHITE, 0, trans);
|
||||
init_pair(CP_BLACK, 7, 0);
|
||||
init_pair(CP_WHITE, BG_COLOR, trans);
|
||||
init_pair(CP_BLACK, FG_COLOR, BG_COLOR);
|
||||
} else {
|
||||
init_pair(CP_WHITE, 7, trans);
|
||||
init_pair(CP_BLACK, 0, 7);
|
||||
init_pair(CP_WHITE, FG_COLOR, trans);
|
||||
init_pair(CP_BLACK, BG_COLOR, FG_COLOR);
|
||||
}
|
||||
init_pair(CP_BLUE, 4, trans);
|
||||
init_pair(CP_RED, 1, trans);
|
||||
init_pair(CP_YELLOW, 3, trans);
|
||||
init_pair(CP_BLUE, HEADER_COLOR, trans);
|
||||
init_pair(CP_RED, BOLD_COLOR, trans);
|
||||
init_pair(CP_YELLOW, TITLE_COLOR, trans);
|
||||
}
|
||||
|
||||
colors = 1;
|
||||
@ -385,138 +342,99 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert, int reloa
|
||||
|
||||
// evaluate user input
|
||||
i = 0;
|
||||
switch(c) {
|
||||
|
||||
if (evaluate_binding(prev_slide_binding, c)) {
|
||||
// show previous slide or stop bit
|
||||
case KEY_UP:
|
||||
case KEY_LEFT:
|
||||
case KEY_PPAGE:
|
||||
case 8: // BACKSPACE (ascii)
|
||||
case 127: // BACKSPACE (xterm)
|
||||
case 263: // BACKSPACE (getty)
|
||||
case 'h':
|
||||
case 'k':
|
||||
if(stop > 1 || (stop == 1 && !line)) {
|
||||
// show current slide again
|
||||
// but stop one stop bit earlier
|
||||
slide->stop--;
|
||||
fade = false;
|
||||
if(stop > 1 || (stop == 1 && !line)) {
|
||||
// show current slide again
|
||||
// but stop one stop bit earlier
|
||||
slide->stop--;
|
||||
fade = false;
|
||||
} else {
|
||||
if(slide->prev) {
|
||||
// show previous slide
|
||||
slide = slide->prev;
|
||||
sc--;
|
||||
//stop on first bullet point always
|
||||
if(slide->stop > 0)
|
||||
slide->stop = 0;
|
||||
} else {
|
||||
if(slide->prev) {
|
||||
// show previous slide
|
||||
slide = slide->prev;
|
||||
sc--;
|
||||
//stop on first bullet point always
|
||||
if(slide->stop > 0)
|
||||
slide->stop = 0;
|
||||
} else {
|
||||
// do nothing
|
||||
fade = false;
|
||||
}
|
||||
// do nothing
|
||||
fade = false;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
} else if (evaluate_binding(next_slide_binding, c)) {
|
||||
// show next slide or stop bit
|
||||
case KEY_DOWN:
|
||||
case KEY_RIGHT:
|
||||
case KEY_NPAGE:
|
||||
case '\n': // ENTER
|
||||
case ' ': // SPACE
|
||||
case 'j':
|
||||
case 'l':
|
||||
if(stop && line) {
|
||||
// show current slide again
|
||||
// but stop one stop bit later (or at end of slide)
|
||||
slide->stop++;
|
||||
fade = false;
|
||||
if(stop && line) {
|
||||
// show current slide again
|
||||
// but stop one stop bit later (or at end of slide)
|
||||
slide->stop++;
|
||||
fade = false;
|
||||
} else {
|
||||
if(slide->next) {
|
||||
// show next slide
|
||||
slide = slide->next;
|
||||
sc++;
|
||||
} else {
|
||||
if(slide->next) {
|
||||
// show next slide
|
||||
slide = slide->next;
|
||||
sc++;
|
||||
} else {
|
||||
// do nothing
|
||||
fade = false;
|
||||
}
|
||||
// do nothing
|
||||
fade = false;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
} else if (isdigit(c) && c != '0') {
|
||||
// show slide n
|
||||
case '9':
|
||||
case '8':
|
||||
case '7':
|
||||
case '6':
|
||||
case '5':
|
||||
case '4':
|
||||
case '3':
|
||||
case '2':
|
||||
case '1':
|
||||
i = get_slide_number(c);
|
||||
if(i > 0 && i <= deck->slides) {
|
||||
while(sc != i) {
|
||||
// search forward
|
||||
if(sc < i) {
|
||||
if(slide->next) {
|
||||
slide = slide->next;
|
||||
sc++;
|
||||
}
|
||||
// search backward
|
||||
} else {
|
||||
if(slide->prev) {
|
||||
slide = slide->prev;
|
||||
sc--;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// disable fading if slide n doesn't exist
|
||||
fade = false;
|
||||
}
|
||||
break;
|
||||
|
||||
// show first slide
|
||||
case 'g':
|
||||
case KEY_HOME:
|
||||
slide = deck->slide;
|
||||
sc = 1;
|
||||
break;
|
||||
|
||||
// show last slide
|
||||
case 'G':
|
||||
case KEY_END:
|
||||
for(i = sc; i <= deck->slides; i++) {
|
||||
if(slide->next) {
|
||||
i = get_slide_number(c);
|
||||
if(i > 0 && i <= deck->slides) {
|
||||
while(sc != i) {
|
||||
// search forward
|
||||
if(sc < i) {
|
||||
if(slide->next) {
|
||||
slide = slide->next;
|
||||
sc++;
|
||||
}
|
||||
// search backward
|
||||
} else {
|
||||
if(slide->prev) {
|
||||
slide = slide->prev;
|
||||
sc--;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// reload
|
||||
case 'r':
|
||||
if(noreload == 0) {
|
||||
// reload slide N
|
||||
reload = sc;
|
||||
slide = NULL;
|
||||
} else {
|
||||
// disable fading if reload is not possible
|
||||
fade = false;
|
||||
} else {
|
||||
// disable fading if slide n doesn't exist
|
||||
fade = false;
|
||||
}
|
||||
} else if (evaluate_binding(first_slide_binding, c)) {
|
||||
// show first slide
|
||||
slide = deck->slide;
|
||||
sc = 1;
|
||||
} else if (evaluate_binding(last_slide_binding, c)) {
|
||||
// show last slide
|
||||
for(i = sc; i <= deck->slides; i++) {
|
||||
if(slide->next) {
|
||||
slide = slide->next;
|
||||
sc++;
|
||||
}
|
||||
break;
|
||||
|
||||
// quit
|
||||
case 'q':
|
||||
// do not fade out on exit
|
||||
fade = false;
|
||||
// do not reload
|
||||
reload = 0;
|
||||
}
|
||||
} else if (evaluate_binding(reload_binding, c)) {
|
||||
// reload
|
||||
if(noreload == 0) {
|
||||
// reload slide N
|
||||
reload = sc;
|
||||
slide = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
// disable fading on undefined key press
|
||||
} else {
|
||||
// disable fading if reload is not possible
|
||||
fade = false;
|
||||
break;
|
||||
}
|
||||
} else if (evaluate_binding(quit_binding, c)) {
|
||||
// quit
|
||||
// do not fade out on exit
|
||||
fade = false;
|
||||
// do not reload
|
||||
reload = 0;
|
||||
slide = NULL;
|
||||
} else {
|
||||
// disable fading on undefined key press
|
||||
fade = false;
|
||||
}
|
||||
|
||||
// fade out
|
||||
@ -998,3 +916,14 @@ int get_slide_number(char init) {
|
||||
cbreak(); // go back to cbreak
|
||||
return retval;
|
||||
}
|
||||
|
||||
bool evaluate_binding(const int bindings[], char c) {
|
||||
int binding;
|
||||
int ind = 0;
|
||||
while((binding = bindings[ind]) != 0) {
|
||||
if (c == binding) return true;
|
||||
ind++;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user