From e8f03d9e3ad86b2e070eedef106ab822f7c36df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Sat, 30 Jul 2016 17:28:09 +0200 Subject: [PATCH] terminfo: makes it so terminfo files are looked up from a set of dirs On Ubuntu, terminfo files are stored in /lib/terminfo, but they can also be found in any of the other dirs listed in TERMINFO-DIRS. --- extra/terminfo/terminfo.factor | 41 +++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/extra/terminfo/terminfo.factor b/extra/terminfo/terminfo.factor index 3372a07e82..156ca33be1 100644 --- a/extra/terminfo/terminfo.factor +++ b/extra/terminfo/terminfo.factor @@ -1,15 +1,21 @@ ! Copyright (C) 2013 John Benediktsson. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs combinators formatting fry grouping -hashtables io io.binary io.directories io.encodings.binary -io.files kernel math math.parser memoize pack sequences -sequences.generalizations splitting strings system ; +USING: accessors assocs combinators formatting fry grouping hashtables +io io.binary io.directories io.encodings.binary io.files +io.files.types io.pathnames kernel math math.parser memoize pack +sequences sequences.generalizations splitting strings system ; IN: terminfo ! Reads compiled terminfo files -! typically located in /usr/share/terminfo +! typically located in any of the directories below. +CONSTANT: TERMINFO-DIRS { + "~/.terminfo" + "/etc/terminfo" + "/lib/terminfo" + "/usr/share/terminfo" +} : file>terminfo ( path -- terminfo ) binary [ read-terminfo ] with-file-reader ; -HOOK: terminfo-path os ( name -- path ) +HOOK: terminfo-relative-path os ( name -- path ) -M: macosx terminfo-path ( name -- path ) - [ first >hex ] keep "/usr/share/terminfo/%s/%s" sprintf ; +M: macosx terminfo-relative-path ( name -- path ) + [ first >hex ] keep "%s/%s" sprintf ; -M: linux terminfo-path ( name -- path ) - [ first ] keep "/usr/share/terminfo/%c/%s" sprintf ; +M: linux terminfo-relative-path ( name -- path ) + [ first ] keep "%c/%s" sprintf ; + +: terminfo-path ( name -- path ) + terminfo-relative-path TERMINFO-DIRS [ swap append-path ] with map + [ exists? ] find nip ; + +: terminfo-names-for-path ( path -- names ) + [ + [ type>> +directory+ = ] filter + [ name>> directory-files ] map concat + ] with-directory-entries ; MEMO: terminfo-names ( -- names ) - "/usr/share/terminfo" [ - [ directory-files ] map concat - ] with-directory-files ; + TERMINFO-DIRS [ exists? ] filter + [ terminfo-names-for-path ] map concat ;