diff options
| author | Kevin Ballard <kevin@sb.org> | 2013-06-09 23:42:26 -0700 |
|---|---|---|
| committer | Kevin Ballard <kevin@sb.org> | 2013-06-10 15:52:10 -0700 |
| commit | 8f1edd5307079851f85dc2bade2081a2343b6ce8 (patch) | |
| tree | 795421ffa63b947f27ca4bf93d132112e4ab1d5d | |
| parent | 1310212c27c1c294e1f907b05a225440c987a912 (diff) | |
| download | rust-8f1edd5307079851f85dc2bade2081a2343b6ce8.tar.gz rust-8f1edd5307079851f85dc2bade2081a2343b6ce8.zip | |
terminfo: Support more terminfo directory structures
OS X's terminfo uses the hex representation of the first character of the terminal name as the directory name. Ubuntu seems to use /lib/terminfo instead of /usr/share/terminfo, at least on the one machine I have access to.
| -rw-r--r-- | src/libextra/terminfo/searcher.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/libextra/terminfo/searcher.rs b/src/libextra/terminfo/searcher.rs index d109bb12e02..ecc99f74626 100644 --- a/src/libextra/terminfo/searcher.rs +++ b/src/libextra/terminfo/searcher.rs @@ -44,8 +44,13 @@ pub fn get_dbpath_for_term(term: &str) -> Option<~path> { dirs_to_search.push(path(i.to_owned())); } }, - // Found nothing, use the default path - None => dirs_to_search.push(path("/usr/share/terminfo")) + // Found nothing, use the default paths + // /usr/share/terminfo is the de facto location, but it seems + // Ubuntu puts it in /lib/terminfo + None => { + dirs_to_search.push(path("/usr/share/terminfo")); + dirs_to_search.push(path("/lib/terminfo")); + } } } }; @@ -56,6 +61,11 @@ pub fn get_dbpath_for_term(term: &str) -> Option<~path> { if os::path_exists(p) && os::path_exists(newp) { return Some(newp); } + // on some installations the dir is named after the hex of the char (e.g. OS X) + let newp = ~p.push_many(&[fmt!("%x", first_char[0] as uint), term.to_owned()]); + if os::path_exists(p) && os::path_exists(newp) { + return Some(newp); + } } None } @@ -72,6 +82,7 @@ pub fn open(term: &str) -> Result<@Reader, ~str> { #[ignore(reason = "buildbots don't have ncurses installed and I can't mock everything I need")] fn test_get_dbpath_for_term() { // woefully inadequate test coverage + // note: current tests won't work with non-standard terminfo hierarchies (e.g. OS X's) use std::os::{setenv, unsetenv}; fn x(t: &str) -> ~str { get_dbpath_for_term(t).expect("no terminfo entry found").to_str() }; assert!(x("screen") == ~"/usr/share/terminfo/s/screen"); |
