aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--configure.ac25
-rw-r--r--src/interface-curses/curses-info-popup.c24
-rw-r--r--src/interface-curses/curses-utils.c22
-rw-r--r--src/interface-curses/curses-utils.h9
-rw-r--r--src/interface-curses/interface.c26
5 files changed, 79 insertions, 27 deletions
diff --git a/configure.ac b/configure.ac
index 9d5e059..7168ae2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -247,7 +247,7 @@ if [[ x$LEXILLA_PATH != xno ]]; then
fi
AC_ARG_WITH(interface,
- AS_HELP_STRING([--with-interface=ncurses|netbsd-curses|xcurses|pdcurses|pdcurses-gui|gtk],
+ AS_HELP_STRING([--with-interface=ncurses|netbsd-curses|xcurses|pdcurses|pdcurses-gui|pdcurses-x11|gtk],
[Specify user interface [default=ncurses]]),
[INTERFACE=$withval], [INTERFACE=ncurses])
@@ -299,6 +299,29 @@ case $INTERFACE in
;;
xcurses)
+ # libcurses written by Mortice Kern Systems Inc. for Solaris and is nowadays
+ # available in OmniOS/Illumos.
+ AC_DEFINE(MKS_CURSES, 1, [Building against libcurses (MKS I/XCU 4.3 Curses)])
+
+ CFLAGS="$CFLAGS $CURSES_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $CURSES_CFLAGS"
+ LIBS="$LIBS $CURSES_LIBS"
+
+ if [[ "x$CURSES_LIBS" = "x" ]]; then
+ AC_CHECK_LIB(curses, __m_curses_version, , [
+ AC_MSG_ERROR([libcurses (MKS I/XCU 4.3 Curses) missing!])
+ ])
+ else
+ AC_MSG_CHECKING([checking for libcurses (CURSES_LIBS)])
+ AC_MSG_RESULT([$CURSES_LIBS])
+ LIBS="$LIBS $CURSES_LIBS"
+ fi
+
+ AC_CHECK_FUNCS([tigetstr])
+ ;;
+
+ pdcurses-x11)
+ # The X11 port of PDCurses is also known as XCurses.
AC_CHECK_PROG(XCURSES_CONFIG, xcurses-config, xcurses-config)
if [[ "x$CURSES_CFLAGS" = "x" -a "x$XCURSES_CONFIG" != "x" ]]; then
diff --git a/src/interface-curses/curses-info-popup.c b/src/interface-curses/curses-info-popup.c
index 332d434..13d8d65 100644
--- a/src/interface-curses/curses-info-popup.c
+++ b/src/interface-curses/curses-info-popup.c
@@ -23,6 +23,9 @@
#include <curses.h>
+#undef lines
+#undef buttons
+
#include "list.h"
#include "string-utils.h"
#include "interface.h"
@@ -71,7 +74,8 @@ teco_curses_info_popup_add(teco_curses_info_popup_t *ctx, teco_popup_entry_type_
static void
teco_curses_info_popup_init_pad(teco_curses_info_popup_t *ctx, attr_t attr)
{
- int cols = getmaxx(stdscr); /**! screen width */
+ G_GNUC_UNUSED gint cols, rows; /**! screen size */
+ getmaxyx(stdscr, rows, cols);
int pad_lines; /**! pad height */
gint pad_cols; /**! entry columns */
gint pad_colwidth; /**! width per entry column */
@@ -165,7 +169,8 @@ teco_curses_info_popup_show(teco_curses_info_popup_t *ctx, attr_t attr)
if (!ctx->pad)
teco_curses_info_popup_init_pad(ctx, attr);
- gint pad_lines = getmaxy(ctx->pad);
+ G_GNUC_UNUSED gint pad_cols, pad_lines;
+ getmaxyx(ctx->pad, pad_lines, pad_cols);
/*
* Popup window can cover all but one screen row.
@@ -227,7 +232,8 @@ teco_curses_info_popup_show(teco_curses_info_popup_t *ctx, attr_t attr)
const teco_string_t *
teco_curses_info_popup_getentry(teco_curses_info_popup_t *ctx, gint y, gint x)
{
- int cols = getmaxx(stdscr); /**! screen width */
+ G_GNUC_UNUSED gint lines, cols; /**! screen dimensions */
+ getmaxyx(stdscr, lines, cols);
gint pad_cols; /**! entry columns */
gint pad_colwidth; /**! width per entry column */
@@ -265,8 +271,10 @@ teco_curses_info_popup_getentry(teco_curses_info_popup_t *ctx, gint y, gint x)
void
teco_curses_info_popup_scroll_page(teco_curses_info_popup_t *ctx)
{
- gint lines = getmaxy(stdscr);
- gint pad_lines = getmaxy(ctx->pad);
+ G_GNUC_UNUSED gint lines, cols;
+ getmaxyx(stdscr, lines, cols);
+ G_GNUC_UNUSED gint pad_lines, pad_cols;
+ getmaxyx(ctx->pad, pad_lines, pad_cols);
gint popup_lines = MIN(pad_lines + 1, lines - 1);
/* progress scroll position */
@@ -281,8 +289,10 @@ teco_curses_info_popup_scroll_page(teco_curses_info_popup_t *ctx)
void
teco_curses_info_popup_scroll(teco_curses_info_popup_t *ctx, gint delta)
{
- gint lines = getmaxy(stdscr);
- gint pad_lines = getmaxy(ctx->pad);
+ G_GNUC_UNUSED gint lines, cols;
+ getmaxyx(stdscr, lines, cols);
+ G_GNUC_UNUSED gint pad_lines, pad_cols;
+ getmaxyx(ctx->pad, pad_lines, pad_cols);
gint popup_lines = MIN(pad_lines + 1, lines - 1);
ctx->pad_first_line = MAX(ctx->pad_first_line+delta, 0);
diff --git a/src/interface-curses/curses-utils.c b/src/interface-curses/curses-utils.c
index f94b6dc..39d9b3f 100644
--- a/src/interface-curses/curses-utils.c
+++ b/src/interface-curses/curses-utils.c
@@ -59,11 +59,12 @@ teco_curses_format_str(WINDOW *win, const gchar *str, gsize len, gint max_width)
short pair = 0;
wattr_get(win, &attrs, &pair, NULL);
- int old_x, old_y;
+ G_GNUC_UNUSED gint old_x, old_y, max_x, max_y;
getyx(win, old_y, old_x);
+ getmaxyx(win, max_y, max_x);
if (max_width < 0)
- max_width = getmaxx(win) - old_x;
+ max_width = max_x - old_x;
while (len > 0) {
/*
@@ -133,7 +134,9 @@ teco_curses_format_str(WINDOW *win, const gchar *str, gsize len, gint max_width)
len -= clen;
}
- return getcurx(win) - old_x;
+ G_GNUC_UNUSED gint cur_x, cur_y;
+ getyx(win, cur_y, cur_x);
+ return cur_x - old_x;
truncate:
if (max_width >= truncate_len) {
@@ -153,7 +156,8 @@ truncate:
}
}
- return getcurx(win) - old_x;
+ getyx(win, cur_y, cur_x);
+ return cur_x - old_x;
}
/**
@@ -174,13 +178,15 @@ guint
teco_curses_format_filename(WINDOW *win, const gchar *filename, gint max_width)
{
gint truncate_len = teco_ed & TECO_ED_ICONS ? 1 : 3;
- int old_x = getcurx(win);
+ G_GNUC_UNUSED gint old_x, old_y, max_x, max_y;
+ getyx(win, old_y, old_x);
+ getmaxyx(win, max_y, max_x);
g_autofree gchar *filename_printable = teco_string_echo(filename, strlen(filename));
glong filename_len = g_utf8_strlen(filename_printable, -1);
if (max_width < 0)
- max_width = getmaxx(win) - old_x;
+ max_width = max_x - old_x;
if (filename_len <= max_width) {
/*
@@ -217,5 +223,7 @@ teco_curses_format_filename(WINDOW *win, const gchar *filename, gint max_width)
waddstr(win, keep_post);
}
- return getcurx(win) - old_x;
+ G_GNUC_UNUSED gint cur_x, cur_y;
+ getyx(win, cur_y, cur_x);
+ return cur_x - old_x;
}
diff --git a/src/interface-curses/curses-utils.h b/src/interface-curses/curses-utils.h
index 18cdd3d..407380a 100644
--- a/src/interface-curses/curses-utils.h
+++ b/src/interface-curses/curses-utils.h
@@ -44,10 +44,11 @@ teco_curses_add_wc(WINDOW *win, gunichar chr)
static inline void
teco_curses_clrtobot(WINDOW *win)
{
- int max_x, max_y;
+ int cur_x, cur_y, max_x, max_y;
+ getyx(win, cur_y, cur_x);
getmaxyx(win, max_y, max_x);
- if (getcurx(win)+1 < max_x)
- whline(win, ' ', max_x - getcurx(win));
- for (int y = getcury(win)+1; y <= max_y; y++)
+ if (cur_x+1 < max_x)
+ whline(win, ' ', max_x - cur_x);
+ for (int y = cur_y+1; y <= max_y; y++)
mvwhline(win, y, 0, ' ', max_x);
}
diff --git a/src/interface-curses/interface.c b/src/interface-curses/interface.c
index 62a6e64..dfada8c 100644
--- a/src/interface-curses/interface.c
+++ b/src/interface-curses/interface.c
@@ -99,7 +99,7 @@
#endif
#endif
-#if defined(NCURSES_UNIX) || defined(NETBSD_CURSES)
+#if defined(NCURSES_UNIX) || defined(NETBSD_CURSES) || defined(MKS_CURSES)
/**
* Whether Curses works on a real or pseudo TTY
* (i.e. classic use with terminal emulators on Unix)
@@ -316,7 +316,7 @@ teco_view_noutrefresh(teco_view_t *ctx)
scintilla_noutrefresh(ctx);
}
-static inline WINDOW *
+static inline WINDOW * G_GNUC_UNUSED
teco_view_get_window(teco_view_t *ctx)
{
return scintilla_get_window(ctx);
@@ -398,8 +398,6 @@ static void teco_interface_restore_batch(void);
static void teco_interface_init_clipboard(void);
-static void teco_interface_resize_all_windows(void);
-
static void teco_interface_set_window_title(const gchar *title);
static void teco_interface_draw_info(void);
static void teco_interface_draw_cmdline(void);
@@ -732,7 +730,7 @@ teco_interface_init_interactive(GError **error)
*
* NOTE: The delay is overwritten by initscr() on netbsd-curses.
*/
-#ifdef CURSES_TTY
+#if defined(CURSES_TTY) && !defined(MKS_CURSES)
if (!g_getenv("ESCDELAY"))
set_escdelay(25);
#endif
@@ -867,6 +865,8 @@ teco_interface_restore_batch(void)
}
}
+#ifdef KEY_RESIZE
+
static void
teco_interface_resize_all_windows(void)
{
@@ -888,6 +888,8 @@ teco_interface_resize_all_windows(void)
teco_interface_draw_cmdline();
}
+#endif /* KEY_RESIZE */
+
void
teco_interface_msg_literal(teco_msg_t type, const gchar *str, gsize len)
{
@@ -994,6 +996,7 @@ teco_interface_show_view(teco_view_t *view)
{
teco_interface_current_view = view;
+#ifdef KEY_RESIZE
if (!teco_interface.cmdline_window) /* batch mode */
return;
@@ -1008,6 +1011,7 @@ teco_interface_show_view(teco_view_t *view)
wresize(current_view_win, lines - 3, cols);
/* Set up window position: never changes */
mvwin(current_view_win, 1, 0);
+#endif
}
#if PDCURSES
@@ -1127,6 +1131,8 @@ teco_interface_draw_info(void)
waddstr(teco_interface.info_window, PACKAGE_NAME " ");
+ G_GNUC_UNUSED gint cur_x, cur_y, max_x, max_y;
+
switch (teco_interface.info_type) {
case TECO_INFO_TYPE_QREG:
info_type_str = PACKAGE_NAME " - <QRegister> ";
@@ -1145,10 +1151,11 @@ teco_interface_draw_info(void)
teco_curses_add_wc(teco_interface.info_window,
teco_ed & TECO_ED_ICONS ? teco_curses_icons_lookup_file(teco_interface.info_current.data) : '-');
waddstr(teco_interface.info_window, " <Buffer> ");
+ getyx(teco_interface.info_window, cur_y, cur_x);
+ getmaxyx(teco_interface.info_window, max_y, max_x);
teco_curses_format_filename(teco_interface.info_window,
teco_interface.info_current.data,
- getmaxx(teco_interface.info_window) -
- getcurx(teco_interface.info_window) - 1);
+ max_x - cur_x - 1);
waddch(teco_interface.info_window, teco_interface.info_dirty ? '*' : ' ');
break;
@@ -1274,8 +1281,11 @@ teco_interface_cmdline_update(const teco_cmdline_t *cmdline)
static void
teco_interface_draw_cmdline(void)
{
+ G_GNUC_UNUSED gint max_x, max_y;
+ getmaxyx(teco_interface.cmdline_window, max_y, max_x);
+
/* total width available for command line */
- guint total_width = getmaxx(teco_interface.cmdline_window) - 1;
+ guint total_width = max_x - 1;
/* beginning of command line to show */
guint disp_offset = teco_interface.cmdline_len -