Skip to content

Commit 93054fa

Browse files
committed
Add TERMINFO env var
Add lib4bin hook for ncurses terminfo and tabset
1 parent ac223fd commit 93054fa

File tree

4 files changed

+50
-27
lines changed

4 files changed

+50
-27
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sharun"
3-
version = "0.2.2"
3+
version = "0.2.3"
44
readme = "README.md"
55
license = "MIT"
66
repository = "https://github.com/VHSgunzo/sharun"

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ cp ./target/$(uname -m)-unknown-linux-musl/release/sharun .
123123
* `XKB_CONFIG_ROOT` -- `${SHARUN_DIR}/share/X11/xkb`
124124
* `GSETTINGS_SCHEMA_DIR` -- `${SHARUN_DIR}/share/glib-2.0/schemas`
125125
* `GIMP2_DATADIR` -- `${SHARUN_DIR}/share/gimp/2.0`
126+
* `TERMINFO` -- `${SHARUN_DIR}/share/terminfo`
126127

127128
* `FONTCONFIG_FILE` -- `${SHARUN_DIR}/etc/fonts/fonts.conf`
128129
* `GIMP2_SYSCONFDIR` -- `${SHARUN_DIR}/etc/gimp/2.0`

lib4bin

+17
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,23 @@ for binary in "${BINARY_LIST[@]}"
620620
try_cp -T "$sys_vk_icd_dir" "$dst_vk_icd_dir"
621621
sed -i 's|/usr/lib||g;s|/.*-linux-gnu||g;s|"/|"|g' "$dst_vk_icd_dir"/*
622622
fi ;;
623+
*/libncursesw.so*|*/libcursesw.so*|*/libcurses.so*)
624+
sys_terminfo_dir='/usr/share/terminfo'
625+
dst_terminfo_dir="$dst_dir/share/terminfo"
626+
if [[ -d "$sys_terminfo_dir" && ! -d "$dst_terminfo_dir" ]]
627+
then
628+
info_msg "$YELLOW[ HOOK ]:$GREEN copy terminfo..."
629+
try_mkdir "$dst_terminfo_dir"
630+
try_cp -T "$sys_terminfo_dir" "$dst_terminfo_dir"
631+
fi
632+
sys_tabset_dir='/usr/share/tabset'
633+
dst_tabset_dir="$dst_dir/share/tabset"
634+
if [[ -d "$sys_tabset_dir" && ! -d "$dst_tabset_dir" ]]
635+
then
636+
info_msg "$YELLOW[ HOOK ]:$GREEN copy tabset..."
637+
try_mkdir "$dst_tabset_dir"
638+
try_cp -T "$sys_tabset_dir" "$dst_tabset_dir"
639+
fi ;;
623640
esac
624641
fi
625642
LIBRARIES["$lib_dst_pth"]=1

src/main.rs

+31-26
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::{
22
env, fs,
3-
ffi::CString,
43
str::FromStr,
54
collections::HashSet,
5+
ffi::{CString, OsStr},
66
path::{Path, PathBuf},
77
process::{Command, Stdio, exit},
88
io::{Read, Result, Error, Write},
@@ -106,16 +106,17 @@ fn is_elf32(path: &str) -> Result<bool> {
106106
Ok(buff[4] == 1)
107107
}
108108

109-
fn get_env_var(var: &str) -> String {
110-
env::var(var).unwrap_or("".into())
109+
fn get_env_var<K: AsRef<OsStr>>(key: K) -> String {
110+
env::var(key).unwrap_or("".into())
111111
}
112112

113-
fn add_to_env(var: &str, val: &str) {
114-
let old_val = get_env_var(var);
113+
fn add_to_env<K: AsRef<OsStr>, V: AsRef<OsStr>>(key: K, val: V) {
114+
let (key, val) = (key.as_ref(), val.as_ref().to_str().unwrap());
115+
let old_val = get_env_var(key);
115116
if old_val.is_empty() {
116-
env::set_var(var, val)
117+
env::set_var(key, val)
117118
} else if !old_val.contains(val) {
118-
env::set_var(var, format!("{val}:{old_val}"))
119+
env::set_var(key, format!("{val}:{old_val}"))
119120
}
120121
}
121122

@@ -507,47 +508,50 @@ fn main() {
507508
let share_dir = PathBuf::from(format!("{sharun_dir}/share"));
508509
if share_dir.exists() {
509510
if let Ok(dir) = share_dir.read_dir() {
510-
let share = share_dir.to_string_lossy();
511511
add_to_env("XDG_DATA_DIRS", "/usr/local/share");
512512
add_to_env("XDG_DATA_DIRS", "/usr/share");
513-
add_to_env("XDG_DATA_DIRS", &share);
513+
add_to_env("XDG_DATA_DIRS", &share_dir);
514514
for entry in dir.flatten() {
515-
if entry.path().is_dir() {
515+
let entry_path = entry.path();
516+
if entry_path.is_dir() {
516517
let name = entry.file_name();
517518
match name.to_str().unwrap() {
518519
"glvnd" => {
519-
let egl_vendor = &format!("{share}/glvnd/egl_vendor.d");
520-
if Path::new(egl_vendor).exists() {
520+
let egl_vendor = &entry_path.join("egl_vendor.d");
521+
if egl_vendor.exists() {
521522
add_to_env("__EGL_VENDOR_LIBRARY_DIRS", "/usr/share/glvnd/egl_vendor.d");
522523
add_to_env("__EGL_VENDOR_LIBRARY_DIRS", egl_vendor)
523524
}
524525
}
525526
"vulkan" => {
526-
let icd = &format!("{share}/vulkan/icd.d");
527-
if Path::new(icd).exists() {
527+
let icd = &entry_path.join("icd.d");
528+
if icd.exists() {
528529
add_to_env("VK_DRIVER_FILES", "/usr/share/vulkan/icd.d");
529530
add_to_env("VK_DRIVER_FILES", icd)
530531
}
531532
}
532533
"X11" => {
533-
let xkb = &format!("{share}/X11/xkb");
534-
if Path::new(xkb).exists() {
534+
let xkb = &entry_path.join("xkb");
535+
if xkb.exists() {
535536
env::set_var("XKB_CONFIG_ROOT", xkb)
536537
}
537538
}
538539
"glib-2.0" => {
539-
let schemas = &format!("{share}/glib-2.0/schemas");
540-
if Path::new(schemas).exists() {
540+
let schemas = &entry_path.join("schemas");
541+
if schemas.exists() {
541542
add_to_env("GSETTINGS_SCHEMA_DIR", "/usr/share/glib-2.0/schemas");
542543
add_to_env("GSETTINGS_SCHEMA_DIR", schemas)
543544
}
544545
}
545546
"gimp" => {
546-
let gimp = &format!("{share}/gimp/2.0");
547-
if Path::new(gimp).exists() {
548-
env::set_var("GIMP2_DATADIR",gimp)
547+
let gimp2_datadir = &entry_path.join("2.0");
548+
if gimp2_datadir.exists() {
549+
env::set_var("GIMP2_DATADIR",gimp2_datadir)
549550
}
550551
}
552+
"terminfo" => {
553+
env::set_var("TERMINFO",entry_path)
554+
}
551555
_ => {}
552556
}
553557
}
@@ -559,19 +563,20 @@ fn main() {
559563
if etc_dir.exists() {
560564
if let Ok(dir) = etc_dir.read_dir() {
561565
for entry in dir.flatten() {
562-
if entry.path().is_dir() {
566+
let entry_path = entry.path();
567+
if entry_path.is_dir() {
563568
let name = entry.file_name();
564569
match name.to_str().unwrap() {
565570
"fonts" => {
566-
let fonts_conf = etc_dir.join("fonts/fonts.conf");
571+
let fonts_conf = entry_path.join("fonts.conf");
567572
if fonts_conf.exists() {
568573
env::set_var("FONTCONFIG_FILE", fonts_conf)
569574
}
570575
}
571576
"gimp" => {
572-
let conf = etc_dir.join("gimp/2.0");
573-
if conf.exists() {
574-
env::set_var("GIMP2_SYSCONFDIR", conf)
577+
let gimp2_sysconfdir = entry_path.join("2.0");
578+
if gimp2_sysconfdir.exists() {
579+
env::set_var("GIMP2_SYSCONFDIR", gimp2_sysconfdir)
575580
}
576581
}
577582
_ => {}

0 commit comments

Comments
 (0)