/
githubmirror
/
lazygit
Обзор
Документация
Войти
/
githubmirror
/
lazygit
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
vendor/github.com/xo/terminfo/load.go
64 строки
2 KB
Jesse Duffield
Add cli/go-gh/v2 and cli/safeexec vendor dependencies
01 апр 2026, 10:13
01 апр 2026, 10:13
678a2a9
Код
Авторство
О чём код?
package terminfo import ( "os" "os/user" "path" "strings" "sync" ) // termCache is the terminfo cache. var termCache = struct { db map[string]*Terminfo sync.RWMutex }{ db: make(map[string]*Terminfo), } // Load follows the behavior described in terminfo(5) to find correct the // terminfo file using the name, reads the file and then returns a Terminfo // struct that describes the file. func Load(name string) (*Terminfo, error) { if name == "" { return nil, ErrEmptyTermName } termCache.RLock() ti, ok := termCache.db[name] termCache.RUnlock() if ok { return ti, nil } var checkDirs []string // check $TERMINFO if dir := os.Getenv("TERMINFO"); dir != "" { checkDirs = append(checkDirs, dir) } // check $HOME/.terminfo u, err := user.Current() if err != nil { return nil, err } checkDirs = append(checkDirs, path.Join(u.HomeDir, ".terminfo")) // check $TERMINFO_DIRS if dirs := os.Getenv("TERMINFO_DIRS"); dirs != "" { checkDirs = append(checkDirs, strings.Split(dirs, ":")...) } // check fallback directories checkDirs = append(checkDirs, "/etc/terminfo", "/lib/terminfo", "/usr/share/terminfo") for _, dir := range checkDirs { ti, err = Open(dir, name) if err != nil && err != ErrFileNotFound && !os.IsNotExist(err) { return nil, err } else if err == nil { return ti, nil } } return nil, ErrDatabaseDirectoryNotFound } // LoadFromEnv loads the terminal info based on the name contained in // environment variable TERM. func LoadFromEnv() (*Terminfo, error) { return Load(os.Getenv("TERM")) }