This comment implies yes: /* * Lookup ``tn'' in each possible terminfo file until * we find it or reach the end. */ for (fname = pathvec; *fname; fname++) {
And this one from read_entry.c: #ifdef __OpenBSD__ /* First check the BSD terminfo.db file */ if (_nc_read_bsd_terminfo_entry(name, filename, tp) == 1) return (1); #endif /* __OpenBSD__ */ . On Mon, Mar 24, 2014 at 10:33:43PM +0100, Nils R wrote: > > int > > _nc_read_bsd_terminfo_entry(tn, filename, tp) > > const char *const tn; > > char *const filename; > > TERMTYPE *const tp; > > { > > char **fname, *p; > > char envterm[PATH_MAX]; /* local copy of $TERMINFO */ > > char hometerm[PATH_MAX]; /* local copy of $HOME/.terminfo */ > > char *pathvec[4]; /* list of possible terminfo files */ > > size_t len; > > > > fname = pathvec; > > /* $TERMINFO may hold a path to a terminfo file */ > > if (use_terminfo_vars() && (p = getenv("TERMINFO")) != NULL) { > > len = strlcpy(envterm, p, sizeof(envterm)); > > if (len < sizeof(envterm)) > > *fname++ = envterm; > > } > > > > /* Also check $HOME/.terminfo if it exists */ > > if (use_terminfo_vars() && (p = getenv("HOME")) != NULL && *p != '\0') > > { > > len = snprintf(hometerm, sizeof(hometerm), "%s/.terminfo", p); > > if (len > 0 && len < sizeof(hometerm)) > > *fname++ = hometerm; > > } > > > > /* Finally we check the system terminfo file */ > > *fname++ = _PATH_TERMINFO; > > *fname = NULL; > > > > /* > > * Lookup ``tn'' in each possible terminfo file until > > * we find it or reach the end. > > */ > > for (fname = pathvec; *fname; fname++) { > > if (_nc_lookup_bsd_terminfo_entry(tn, *fname, tp) == 1) { > > /* Set copyout parameter and return */ > > (void)strlcpy(filename, *fname, PATH_MAX); > > return (1); > > } > > } > > return (0); > > } > > > > > > If i understand correctly, this program is used to read terminfo files > > and to lookup entries later, though i have no idea how it is done. From > > this code, it seems that a dir given with TERMINFO and ~/.terminfo are > > checked as well, but always *before* the systemwide db is checked, and > > therefore, all previous entries are overridden if the same terminal id > > is found there in the system db. Maybe changing the order of checks will > > allow entries in ~ to dominate entries from the system db, and even > > though i don't really know what i'm doing, i think i will try it out and > > see if it helps :) > > > > Best, > > Nils > > > > > > I was wrong here, the for-loop returns as soon as it finds a valid > entry. I left the order as it is and just added a few debug statements. > After installing the new compiled libcurses, when i start a new terminal, > it tries to lookup existing information in existing databases, and > once an entry is found, it is used immediately. Only when no database > contains an entry for the terminal, a terminfo file is read: > > >> _nc_read_bsd_terminfo_entry: Description of stnew-256color in > /home/nils/.terminfo > >> _nc_lookup_bsd_terminfo_entry: tn=stnew-256color, > filename=/home/nils/.terminfo > >> _nc_lookup_bsd_terminfo_entry: Read entries for stnew-256color > from /home/nils/.terminfo > >> _nc_read_bsd_terminfo_entry: not found! Should continue. > >> _nc_read_bsd_terminfo_entry: Description of stnew-256color in > /usr/share/misc/terminfo > >> _nc_lookup_bsd_terminfo_entry: tn=stnew-256color, > filename=/usr/share/misc/terminfo > >> _nc_lookup_bsd_terminfo_entry: Read entries for stnew-256color > from /usr/share/misc/terminfo > >> _nc_read_bsd_terminfo_entry: not found! Should continue. > >> _nc_read_bsd_terminfo_file: > filename=/home/nils/.terminfo/s/stnew-256color > >> _nc_lookup_bsd_terminfo_entry: tn=stnew-256color, > filename=/home/nils/.terminfo > > > Is this intended? > > Nils