Use ncurses::newterm instead of initscr

This leaves stdout untouched, so it can better be composed in other
commands.
This commit is contained in:
Alexandre Bury 2018-04-05 17:36:58 -07:00
parent fd09b5f806
commit b34fb14957
3 changed files with 9 additions and 4 deletions

View File

@ -23,6 +23,7 @@ toml = "0.4"
unicode-segmentation = "1.0"
unicode-width = "0.1"
xi-unicode = "0.1.0"
libc = "0.2"
[dependencies.maplit]
optional = true

View File

@ -4,8 +4,10 @@ use self::ncurses::mmask_t;
use self::super::{find_closest, split_i32};
use backend;
use event::{Event, Key, MouseButton, MouseEvent};
use libc;
use std::cell::{Cell, RefCell};
use std::collections::HashMap;
use std::ffi::CString;
use std::io::{stdout, Write};
use theme::{Color, ColorPair, Effect};
use utf8;
@ -32,7 +34,10 @@ impl Backend {
// Default delay is way too long. 25 is imperceptible yet works fine.
::std::env::set_var("ESCDELAY", "25");
ncurses::initscr();
let tty_path = CString::new("/dev/tty").unwrap();
let mode = CString::new("r+").unwrap();
let tty = unsafe { libc::fopen(tty_path.as_ptr(), mode.as_ptr()) };
ncurses::newterm(None, tty, tty);
ncurses::keypad(ncurses::stdscr(), true);
// This disables mouse click detection,
@ -73,9 +78,7 @@ impl Backend {
/// Save a new color pair.
fn insert_color(
&self,
pairs: &mut HashMap<ColorPair, i16>,
pair: ColorPair,
&self, pairs: &mut HashMap<ColorPair, i16>, pair: ColorPair
) -> i16 {
let n = 1 + pairs.len() as i16;
let target = if ncurses::COLOR_PAIRS() > i32::from(n) {

View File

@ -73,6 +73,7 @@ extern crate log;
extern crate maplit;
extern crate num;
extern crate libc;
extern crate owning_ref;
extern crate toml;
extern crate unicode_segmentation;