diff options
author | 2014-03-15 12:14:03 -0400 | |
---|---|---|
committer | 2014-03-15 12:14:03 -0400 | |
commit | f761ac30abee4fb675b0ec8a24f6970aef247426 (patch) | |
tree | 3fb58cbfd3687e072d4b59a87980f048c357f1ca | |
parent | d259a28a561d18889d8e2f6bb570d7d5e98be87d (diff) | |
download | inxi-f761ac30abee4fb675b0ec8a24f6970aef247426.tar.bz2 inxi-f761ac30abee4fb675b0ec8a24f6970aef247426.tar.xz inxi-f761ac30abee4fb675b0ec8a24f6970aef247426.tar.zst |
Imported Upstream version 2.1.2upstream/2.1.2
-rwxr-xr-x | inxi | 468 | ||||
-rwxr-xr-x | inxi.1 | 8 | ||||
-rwxr-xr-x | inxi.1.gz | bin | 8233 -> 8251 bytes | |||
-rwxr-xr-x | inxi.changelog | 50 |
4 files changed, 313 insertions, 213 deletions
@@ -1,8 +1,8 @@ #!/usr/bin/env bash ######################################################################## #### Script Name: inxi -#### Version: 2.1.0 -#### Date: 2014-03-13 +#### Version: 2.1.2 +#### Date: 2014-03-14 #### Patch Number: 00 ######################################################################## #### SPECIAL THANKS @@ -193,37 +193,47 @@ ## NOTE: we can use hwinfo if it's available in all systems, or most, to get ## a lot more data and verbosity levels going -# set to default LANG to avoid locales errors with , or . -LANG=C -### Variable initializations: null values -BSD_TYPE='' -BSD_VERSION= -CMDL_MAX='' -COLOR_SCHEME='' + +### DISTRO MAINTAINER FLAGS ### +# flag to allow distro maintainers to turn off update features. If false, turns off +# -U and -! testing/advanced update options, as well as removing the -U help menu item +# NOTE: Usually you want to create these in /etc/inxi.conf to avoid having to update each time +B_ALLOW_UPDATE='true' +B_ALLOW_WEATHER='true' + +### USER CONFIGS: SET IN inxi.conf file see wiki for directions ### +# http://code.google.com/p/inxi/wiki/script_configuration_files # override in user config if desired, seems like less than .3 doesn't work as reliably CPU_SLEEP='0.3' -DEV_DISK_ID='' -DEV_DISK_LABEL='' -DEV_DISK_MAPPER='' -DEV_DISK_UUID='' -DMIDECODE_DATA='' FILTER_STRING='<filter>' -IRC_CLIENT='' -IRC_CLIENT_VERSION='' -LINE_MAX='' -# for features like help/version will fit to terminal / console screen width -LINE_MAX_BASIC='120' -LINE_MAX_CONSOLE='115' -LINE_MAX_IRC='105' + +# for features like help/version will fit to terminal / console screen width. Console +# widths will be dynamically set in main() based on cols in term/console +COLS_MAX_CONSOLE='115' +COLS_MAX_IRC='105' PS_COUNT=5 -PS_THROTTLED='' -REPO_DATA='' -SED_I='-i' # for gnu sed, will be set to -i '' for bsd sed -SED_RX='-r' # for gnu sed, will be set to -E for bsd sed for backward compatibility # change to less, or more if you have very slow connection WGET_TIMEOUT=8 +### END USER CONFIGS ### + +### LOCALIZATION - DO NOT CHANGE! ### +# set to default LANG to avoid locales errors with , or . +LANG=C +# Make sure every program speaks English. +LC_ALL="C" +export LC_ALL -### primary data array holders ## usage: 'A_<var>' +### ARRAYS ### +## Prep +# Clear nullglob, because it creates unpredictable situations with IFS=$'\n' ARR=($VAR) IFS="$ORIGINAL_IFS" +# type constructs. Stuff like [rev a1] is now seen as a glob expansion pattern, and fails, and +# therefore results in nothing. +shopt -u nullglob +## info on bash built in: $IFS - http://tldp.org/LDP/abs/html/internalvariables.html +# Backup the current Internal Field Separator +ORIGINAL_IFS="$IFS" + +## Initialize A_ALSA_DATA='' A_AUDIO_DATA='' A_CMDL='' @@ -250,12 +260,7 @@ A_UNMOUNTED_PARTITION_DATA='' A_WEATHER_DATA='' A_DISPLAY_SERVER_DATA='' -### Boolean true/false globals ## usage: 'B_<var>' -## Distro maintainer flags ## -# flag to allow distro maintainers to turn off update features. If false, turns off -# -U and -! testing/advanced update options, as well as removing the -U help menu item -B_ALLOW_UPDATE='true' -B_ALLOW_WEATHER='true' +### BOOLEANS ### ## standard boolean flags ## B_BSD_RAID='false' B_COLOR_SCHEME_SET='false' @@ -292,10 +297,10 @@ B_RAID_SET='false' B_ROOT='false' B_RUN_COLOR_SELECTOR='false' B_RUNNING_IN_DISPLAY='false' # in x type display server -# Running in a shell? Defaults to false, and is determined later. -B_RUNNING_IN_SHELL='false' if tty >/dev/null;then B_RUNNING_IN_SHELL='true' +else + B_RUNNING_IN_SHELL='false' fi # this sets the debug buffer B_SCRIPT_UP='false' @@ -348,7 +353,7 @@ B_USE_LOGGING='false' B_UUID_SET='false' B_XORG_LOG='false' -### Directory/file exist flags; test as [[ $(boolean) ]] not [[ $boolean ]] +## Directory/file exist flags; test as [[ $(boolean) ]] not [[ $boolean ]] B_ASOUND_DEVICE_FILE='false' B_ASOUND_VERSION_FILE='false' B_BASH_ARRAY='false' @@ -364,64 +369,21 @@ B_PARTITIONS_FILE='false' # B_PROC_DIR='false' B_SCSI_FILE='false' -### File's used when present -FILE_ASOUND_DEVICE='/proc/asound/cards' -FILE_ASOUND_MODULES='/proc/asound/modules' # not used but maybe for -A? -FILE_ASOUND_VERSION='/proc/asound/version' -FILE_CPUINFO='/proc/cpuinfo' -FILE_DMESG_BOOT='/var/run/dmesg.boot' -FILE_LSB_RELEASE='/etc/lsb-release' -FILE_MDSTAT='/proc/mdstat' -FILE_MEMINFO='/proc/meminfo' -FILE_MODULES='/proc/modules' -FILE_MOUNTS='/proc/mounts' -FILE_OS_RELEASE='/etc/os-release' -FILE_PARTITIONS='/proc/partitions' -FILE_SCSI='/proc/scsi/scsi' -FILE_XORG_LOG='/var/log/Xorg.0.log' # if not found, search and replace with actual location - ## app tested for and present, to avoid repeat tests B_FILE_TESTED='false' B_HDDTEMP_TESTED='false' B_MODINFO_TESTED='false' B_SUDO_TESTED='false' -FILE_PATH='' -HDDTEMP_PATH='' -MODINFO_PATH='' -SUDO_PATH='' -### Variable initializations: constants +### CONSTANTS/INITIALIZE - SOME MAY BE RESET LATER ### DCOPOBJ="default" DEBUG=0 # Set debug levels from 1-10 (8-10 trigger logging levels) # Debug Buffer Index, index into a debug buffer storing debug messages until inxi is 'all up' DEBUG_BUFFER_INDEX=0 ## note: the debugger rerouting to /dev/null has been moved to the end of the get_parameters function ## so -@[number] debug levels can be set if there is a failure, otherwise you can't even see the errors - -# Defaults to 2, make this 1 for normal, 0 for no colorcodes at all. Use following variables in config -# files to change defaults for each type, or global -# Same as runtime parameter. -DEFAULT_COLOR_SCHEME=2 -# Always leave these blank, these are only going to be set in inxi.conf files, that makes testing -# for user changes easier after sourcing the files -GLOBAL_COLOR_SCHEME='' -IRC_COLOR_SCHEME='' -IRC_CONS_COLOR_SCHEME='' -IRC_X_TERM_COLOR_SCHEME='' -CONSOLE_COLOR_SCHEME='' -VIRT_TERM_COLOR_SCHEME='' - -# Default indentation level -INDENT=10 - -# logging eval variables, start and end function: Insert to LOGFS LOGFE when debug level >= 8 -LOGFS_STRING='log_function_data fs $FUNCNAME "$( echo $@ )"' -LOGFE_STRING='log_function_data fe $FUNCNAME' -LOGFS='' -LOGFE='' -# uncomment for debugging from script start -# LOGFS=$LOGFS_STRING -# LOGFE=$LOGFE_STRING +SED_I='-i' # for gnu sed, will be set to -i '' for bsd sed +SED_RX='-r' # for gnu sed, will be set to -E for bsd sed for backward compatibility # default to false, no konversation found, 1 is native konvi (qt3/KDE3) script mode, 2 is /cmd inxi start, ## 3 is Konversation > 1.2 (qt4/KDE4) @@ -440,24 +402,38 @@ VERBOSITY_LEVEL=0 # Supported number of verbosity levels, including 0 VERBOSITY_LEVELS=7 -# Clear nullglob, because it creates unpredictable situations with IFS=$'\n' ARR=($VAR) IFS="$ORIGINAL_IFS" -# type constructs. Stuff like [rev a1] is now seen as a glob expansion pattern, and fails, and -# therefore results in nothing. -shopt -u nullglob -## info on bash built in: $IFS - http://tldp.org/LDP/abs/html/internalvariables.html -# Backup the current Internal Field Separator -ORIGINAL_IFS="$IFS" +### LOGGING ### +## logging eval variables, start and end function: Insert to LOGFS LOGFE when debug level >= 8 +LOGFS_STRING='log_function_data fs $FUNCNAME "$( echo $@ )"' +LOGFE_STRING='log_function_data fe $FUNCNAME' +LOGFS='' +LOGFE='' +# uncomment for debugging from script start +# LOGFS=$LOGFS_STRING +# LOGFE=$LOGFE_STRING -# These two determine separators in single line output, to force irc clients not to break off sections -SEP1='~' -SEP2=' ' -# these will assign a separator to non irc states. Important! Using ':' can trigger stupid emoticon -# behaviors in output on IRC, so do not use those. -SEP3_IRC='' -SEP3_CONSOLE=':' -SEP3='' # do not set, will be set dynamically +### FILE NAMES/PATHS/URLS - must be non root writable ### +# File's used when present +FILE_ASOUND_DEVICE='/proc/asound/cards' +FILE_ASOUND_MODULES='/proc/asound/modules' # not used but maybe for -A? +FILE_ASOUND_VERSION='/proc/asound/version' +FILE_CPUINFO='/proc/cpuinfo' +FILE_DMESG_BOOT='/var/run/dmesg.boot' +FILE_LSB_RELEASE='/etc/lsb-release' +FILE_MDSTAT='/proc/mdstat' +FILE_MEMINFO='/proc/meminfo' +FILE_MODULES='/proc/modules' +FILE_MOUNTS='/proc/mounts' +FILE_OS_RELEASE='/etc/os-release' +FILE_PARTITIONS='/proc/partitions' +FILE_SCSI='/proc/scsi/scsi' +FILE_XORG_LOG='/var/log/Xorg.0.log' # if not found, search and replace with actual location + +FILE_PATH='' +HDDTEMP_PATH='' +MODINFO_PATH='' +SUDO_PATH='' -### Script names/paths - must be non root writable SCRIPT_DATA_DIR="$HOME/.inxi" ALTERNATE_FTP='' # for data uploads ALTERNATE_WEATHER_LOCATION='' # weather alternate location @@ -483,25 +459,76 @@ SCRIPT_DOWNLOAD_DEV='http://smxi.org/test/' WAN_IP_URL='http://smxi.org/opt/ip.php' KONVI_CFG="konversation/scripts/$SCRIPT_NAME.conf" # relative path to $(kde-config --path data) -TERM_LINES=100 +### INITIALIZE VARIABLES NULL ### +BSD_TYPE='' +BSD_VERSION= +CMDL_MAX='' + +DEV_DISK_ID='' +DEV_DISK_LABEL='' +DEV_DISK_MAPPER='' +DEV_DISK_UUID='' +DMIDECODE_DATA='' +IRC_CLIENT='' +IRC_CLIENT_VERSION='' +PS_THROTTLED='' +REPO_DATA='' + +### LAYOUT ### +# These two determine separators in single line output, to force irc clients not to break off sections +SEP1='~' +SEP2=' ' +# these will assign a separator to non irc states. Important! Using ':' can trigger stupid emoticon +# behaviors in output on IRC, so do not use those. +SEP3_IRC='' +SEP3_CONSOLE=':' +SEP3='' # do not set, will be set dynamically + +# Default indentation level. NOTE: actual indent is 1 greater to allow for spacing +INDENT=10 + +### COLUMN WIDTHS ### +COLS_INNER='' ## for width minus INDENT +COLS_MAX='' + TERM_COLUMNS=80 +TERM_LINES=100 + # http://stackoverflow.com/questions/1780483/lines-and-columns-environmental-variables-lost-in-a-script if [[ -n $( type -p tput ) ]];then - TERM_LINES=$(tput lines) TERM_COLUMNS=$(tput cols) + TERM_LINES=$(tput lines) fi # double check, just in case it's missing functionality or whatever if [[ -n ${TERM_COLUMNS##[0-9]*} ]];then - TERM_LINES=100 TERM_COLUMNS=80 + TERM_LINES=100 fi -### Script Localization -# Make sure every program speaks English. -LC_ALL="C" -export LC_ALL +# Only for legacy user config files se we can test and convert the var name +LINE_MAX_CONSOLE='' +LINE_MAX_IRC='' -### Output Colors +### COLORS ### +# Defaults to 2, make this 1 for normal, 0 for no colorcodes at all. Use following variables in config +# files to change defaults for each type, or global +# Same as runtime parameter. +DEFAULT_COLOR_SCHEME=2 +## color variables - set dynamically +COLOR_SCHEME='' +C1='' +C2='' +CN='' +## Always leave these blank, these are only going to be set in inxi.conf files, that makes testing +## for user changes easier after sourcing the files +GLOBAL_COLOR_SCHEME='' +IRC_COLOR_SCHEME='' +IRC_CONS_COLOR_SCHEME='' +IRC_X_TERM_COLOR_SCHEME='' +CONSOLE_COLOR_SCHEME='' +VIRT_TERM_COLOR_SCHEME='' + +## Output colors # A more elegant way to have a scheme that doesn't print color codes (neither ANSI nor mIRC) at all. See below. unset EMPTY # DGREY BLACK RED DRED GREEN DGREEN YELLOW DYELLOW @@ -558,12 +585,12 @@ RED,WHITE,NORMAL BLUE,WHITE,NORMAL ) -## Actual color variables -C1='' -C2='' -CN='' +# WARNING: In the main part below (search for 'KONVI') +# there's a check for Konversation-specific config files. +# Any one of these can override the above if inxi is run +# from Konversation! -### Distro Data +## DISTRO DATA/ID ## # In cases of derived distros where the version file of the base distro can also be found under /etc, # the derived distro's version file should go first. (Such as with Sabayon / Gentoo) DISTROS_DERIVED="antix-version aptosid-version kanotix-version knoppix-version mandrake-release pardus-release sabayon-release siduction-version sidux-version solusos-release turbolinux-release zenwalk-version" @@ -578,7 +605,7 @@ DISTROS_OS_RELEASE_GOOD="arch-release SuSE-release" # DSL (Bash 2.05b: grep -m doesn't work; arrays won't work) --> unusable output # Puppy Linux 4.1.2 (Bash 3.0: arrays won't work) --> works partially -### Bans Data +## OUTPUT FILTERS/SEARCH ## # Note that \<ltd\> bans only words, not parts of strings; in \<corp\> you can't use punctuation characters like . or , # we're saving about 10+% of the total script exec time by hand building the ban lists here, using hard quotes. BAN_LIST_NORMAL='chipset|components|computing|computer|corporation|communications|electronics|electrical|electric|gmbh|group|industrial|international|revision|semiconductor|software|technologies|technology|ltd\.|\<ltd\>|inc\.|\<inc\>|intl\.|co\.|\<co\>|corp\.|\<corp\>|\(tm\)|\(r\)|®|\(rev ..\)' @@ -595,11 +622,6 @@ USB_NETWORK_SEARCH="$USB_NETWORK_SEARCH|Actiontec.*Wireless|Actiontec.*Network|A # belkin=050d; d-link=07d1; netgear=0846; ralink=148f; realtek=0bda; USB_NETWORK_SEARCH="$USB_NETWORK_SEARCH|050d:935b|0bda:8189|0bda:8197" -# WARNING: In the main part below (search for 'KONVI') -# there's a check for Konversation-specific config files. -# Any one of these can override the above if inxi is run -# from Konversation! - ######################################################################## #### MAIN: Where it all begins ######################################################################## @@ -623,7 +645,35 @@ main() if [[ -s $HOME/.$SCRIPT_NAME/$SCRIPT_NAME.conf ]];then source $HOME/.$SCRIPT_NAME/$SCRIPT_NAME.conf fi - + # Convert to new variable names if set in config files, legacy test + if [[ -n $LINE_MAX_CONSOLE ]];then + COLS_MAX_CONSOLE=$LINE_MAX_CONSOLE + fi + if [[ -n $LINE_MAX_IRC ]];then + COLS_MAX_IRC=$LINE_MAX_IRC + fi + # TERM_COLUMNS is set in top globals, using tput cols + if [[ $TERM_COLUMNS -lt $COLS_MAX_CONSOLE ]];then + COLS_MAX_CONSOLE=$TERM_COLUMNS + fi + # adjust, some terminals will wrap if output cols == term cols + COLS_MAX_CONSOLE=$(( $COLS_MAX_CONSOLE - 2 )) + + # comes after source for user set stuff + if [[ $B_RUNNING_IN_SHELL == 'true' ]];then + COLS_MAX=$COLS_MAX_CONSOLE + SEP3=$SEP3_CONSOLE + else + # too hard to read if no colors, so force that for users on irc + if [[ $SCHEME == 0 ]];then + SEP3=$SEP3_CONSOLE + else + SEP3=$SEP3_IRC + fi + COLS_MAX=$COLS_MAX_IRC + fi + + COLS_INNER=$(( $COLS_MAX - $INDENT - 1 )) # Check for dependencies BEFORE running ANYTHING else except above functions # Not all distro's have these depends installed by default. Don't want to run # this if the user is requesting to see this information in the first place @@ -716,19 +766,7 @@ main() set_color_scheme $color_scheme fi fi - if [[ $B_RUNNING_IN_SHELL == 'true' ]];then - LINE_MAX=$LINE_MAX_CONSOLE - SEP3=$SEP3_CONSOLE - else - # too hard to read if no colors, so force that for users on irc - if [[ $SCHEME == 0 ]];then - SEP3=$SEP3_CONSOLE - else - SEP3=$SEP3_IRC - fi - LINE_MAX=$LINE_MAX_IRC - fi - + # all the pre-start stuff is in place now B_SCRIPT_UP='true' script_debugger "Debugger: $SCRIPT_NAME is up and running..." @@ -759,7 +797,7 @@ initialize_data() { eval $LOGFS BSD_VERSION=$( uname -s 2>/dev/null | tr '[A-Z]' '[a-z]' ) - + # note: archbsd says they are a freebsd distro, so assuming it's the same as freebsd if [[ -n $( grep 'bsd' <<< "$BSD_VERSION" ) ]];then # GNU/kfreebsd will by definition have GNU tools like sed/grep @@ -1972,7 +2010,8 @@ print_screen_output() { eval $LOGFS # the double quotes are needed to avoid losing whitespace in data when certain output types are used - local print_data="$( echo -e "$1" )" + # trim off whitespace at end + local print_data="$( echo -e "$1" )" # just using basic debugger stuff so you can tell which thing is printing out the data. This # should help debug kde 4 konvi issues when that is released into sid, we'll see. Turning off @@ -2015,7 +2054,8 @@ print_screen_output() create_print_line() { eval $LOGFS - printf "${C1}%-${INDENT}s${C2} %s" "$1" "$2" + local line=$2 + printf "${C1}%-${INDENT}s${C2} %s" "$1" "$line" eval $LOGFE } @@ -2487,7 +2527,7 @@ show_options() print_lines_basic "2" "97" "Console IRC running in X - like irssi in xTerm" print_lines_basic "2" "98" "Console IRC not in X" print_lines_basic "2" "99" "Global - Overrides/removes all settings. Setting specific removes global." - print_lines_basic "1" "-C" "Full CPU output, including per CPU clockspeed (if available)." + print_lines_basic "1" "-C" "CPU output, including per CPU clockspeed (if available)." print_lines_basic "1" "-d" "Optical drive data. Same as -Dd. See also -x and -xx." print_lines_basic "1" "-D" "Full hard Disk info, not only model, ie: /dev/sda ST380817AS 80.0GB. See also -x and -xx." print_lines_basic "1" "-f" "All cpu flags, triggers -C. Not shown with -F to avoid spamming. ARM cpus show 'features'." @@ -2499,7 +2539,7 @@ show_options() print_lines_basic "1" "-M" "Machine data. Motherboard, Bios, and if present, System Builder (Like Lenovo). Older systems/kernels without the required /sys data can use dmidecode instead, run as root." print_lines_basic "1" "-n" "Advanced Network card information. Same as -Nn. Shows interface, speed, mac id, state, etc." print_lines_basic "1" "-N" "Network card information. With -x, shows PCI BusID, Port number." - print_lines_basic "1" "-o" "Unmounted ${partition_string} information (includes UUID and LABEL if available). Shows file system type if you have file installed, if you are root OR if you have added to /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/bin/file (sample)" + print_lines_basic "1" "-o" "Unmounted ${partition_string} information (includes UUID and LABEL if available). Shows file system type if you have file installed, if you are root OR if you have added to /etc/sudoers (sudo v. 1.7 or newer) Example:^<username>^ALL^=^NOPASSWD:^/usr/bin/file^" print_lines_basic "1" "-p" "Full ${partition_string} information (-P plus all other detected ${partition_string}s)." print_lines_basic "1" "-P" "Basic ${partition_string} information (shows what -v 4 would show, but without extra data). Shows, if detected: / /boot /home /tmp /usr /var. Use -p to see all mounted ${partition_string}s." print_lines_basic "1" "-r" "Distro repository data. Supported repo types: APT; PACMAN; PISI; YUM; URPMQ; Ports." @@ -2523,13 +2563,12 @@ show_options() # if distro maintainers don't want the weather feature disable it if [[ $B_ALLOW_WEATHER == 'true' ]];then print_lines_basic "1" "-w" "Local weather data/time. To check an alternate location, see: -W^<location>. For extra weather data options see -x, -xx, and -xxx." - print_lines_basic "1" "-W <location>" "Supported options for <location>: postal code; city, state/country; latitude/longitude." - print_lines_basic "1" "" "Only use if you want the weather somewhere other than the machine running $SCRIPT_NAME. Use only ascii characters, replace spaces in city/state/country names with +: new+york,ny" + print_lines_basic "1" "-W" "<location> Supported options for <location>: postal code; city, state/country; latitude/longitude. Only use if you want the weather somewhere other than the machine running $SCRIPT_NAME. Use only ascii characters, replace spaces in city/state/country names with '+'. Example:^$SCRIPT_NAME^-W^new+york,ny" fi print_lines_basic "1" "-x" "Adds the following extra data (only works with verbose or line output, not short form):" - print_lines_basic "2" "-C" "Bogomips on Cpu;" + print_lines_basic "2" "-C" "CPU Flags, Bogomips on Cpu;" print_lines_basic "2" "-d" "Extra optical drive data; adds rev version to optical drive." - print_lines_basic "2" "-D" "Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/sbin/hddtemp (sample)" + print_lines_basic "2" "-D" "Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to /etc/sudoers (sudo v. 1.7 or newer) Example:^<username>^ALL^=^NOPASSWD:^/usr/sbin/hddtemp" print_lines_basic "2" "-G" "Direct rendering status for Graphics (in X)." print_lines_basic "2" "-G" "(for single gpu, nvidia driver) screen number gpu is running on." print_lines_basic "2" "-i" "IPv6 as well for LAN interface (IF) devices." @@ -2585,7 +2624,7 @@ show_options() print_lines_basic "2" "12" "With xorg conf and log data, xrandr, xprop, xdpyinfo, glxinfo etc." print_lines_basic "2" "13" "With data from dev, disks, ${partition_string}s, etc., plus xiin data file." print_lines_basic "2" "14" "Everything, full data collection." - print_lines_basic "2" "" "" + print_screen_output " " print_screen_output "Advanced Options:" print_lines_basic "1" "-! 31" "Turns off hostname in output. Useful if showing output from servers etc." print_lines_basic "1" "-! 32" "Turns on hostname in output. Overrides global B_SHOW_HOST='false'" @@ -2612,26 +2651,19 @@ show_options() print_screen_output " " } -# uses $TERM_COLUMNS global in terminal to set width using $LINE_MAX_BASIC +# uses $TERM_COLUMNS to set width using $COLS_MAX as max width # IMPORTANT: minimize use of subshells here or the output is too slow # args: $1 - 0 1 2 3 4 for indentation level; $2 -line starter, like -m; $3 - content of block. print_lines_basic() { - local line_width=$LINE_MAX_BASIC - local line_starter=$2 + local line_width=$COLS_MAX local print_string='' indent_inner='' indent_full='' indent_x='' local indent_working='' indent_working_full='' local line_starter='' line_1_starter='' line_x_starter='' # note: to create a padded string below local fake_string=' ' temp_count='' line_count='' spacer='' - local indent_main=6 indent_x='' b_indent_x='true' - # TERM_COLUMNS is set in top globals, using tput cols - if [[ $TERM_COLUMNS -lt $LINE_MAX_BASIC ]];then - line_width=$TERM_COLUMNS - fi - case $1 in # for no options, start at left edge 0) indent_full=0 @@ -2640,9 +2672,8 @@ print_lines_basic() b_indent_x='false' ;; 1) indent_full=$indent_main - # temp_count=$( wc -c <<< $2 ) temp_count=${#2} - if [[ $temp_count -lt $indent_full ]];then + if [[ $temp_count -le $indent_full ]];then indent_working=$indent_full else indent_working=$temp_count #$(( $temp_count + 1 )) @@ -2693,19 +2724,13 @@ print_lines_basic() line_count=$(( $line_width - $indent_full )) - # bash loop is so slow, only run this if required - # temp_count=$( wc -c <<< $3 ) - temp_count=${#3} - # line_count=1000 - if [[ $temp_count -gt $line_count ]];then + # bash loop is slow, only run this if required + if [[ ${#3} -gt $line_count ]];then for word in $3 do temp_string="$print_string$spacer$word" spacer=' ' - # note: wc -c here will return +1 actual string length - #temp_count=$( wc -c <<< $temp_string ) - temp_count=${#temp_string} - if [[ $temp_count -lt $line_count ]];then + if [[ ${#temp_string} -lt $line_count ]];then print_string=$temp_string # lose any white space start/end # echo -n $(( $line_width - $indent_full )) else @@ -8729,10 +8754,9 @@ get_weather_data() # returns count of string length minus colors calculate_line_length() { - local string="$1" + local string=$1 # ansi: [1;34m irc: \x0312 string=$( sed -e "s/\x1b\[[0-9]\{1,2\}\(;[0-9]\{1,2\}\)\{0,2\}m//g" -e "s/\\\x0[0-9]\{1,3\}//g" <<< $string ) - # count=$( wc -c <<< $string ) count=${#string} echo $count } @@ -8786,8 +8810,7 @@ process_cpu_flags() # sse, sse2, pni = sse1,2,3,4,5 gfx extensions # svm = AMD pacifica virtualization extensions # vmx = Intel IVT (vanderpool) virtualization extensions - cpu_flags=$( - echo "$cpu_flags_working" | gawk ' + cpu_flags=$( gawk ' BEGIN { RS=" " count = 0 @@ -8816,7 +8839,7 @@ process_cpu_flags() } } print flag_string - }' ) + }' <<< "$cpu_flags_working" ) #grep -oE '\<(nx|lm|sse[0-9]?|pni|svm|vmx)\>' | tr '\n' ' ')) if [[ -z $cpu_flags ]];then @@ -9111,13 +9134,13 @@ print_audio_data() fi # only print alsa on last line if short enough, otherwise print on its own line if [[ $i -eq 0 ]];then - if [[ -n $alsa_data && $( calculate_line_length "$card_string${audio_data}$alsa_data" ) -lt $LINE_MAX ]];then + if [[ -n $alsa_data && $( calculate_line_length "$card_string${audio_data}$alsa_data" ) -lt $COLS_INNER ]];then audio_data="$audio_data$alsa_data" alsa_data='' fi fi if [[ -n $audio_data ]];then - if [[ $( calculate_line_length "$card_string$audio_data" ) -lt $LINE_MAX ]];then + if [[ $( calculate_line_length "$card_string$audio_data" ) -lt $COLS_INNER ]];then print_data=$( create_print_line "$line_starter" "$card_string$audio_data" ) print_screen_output "$print_data" # print the line @@ -9154,6 +9177,7 @@ print_cpu_data() local a_cpu_working='' cpu_model='' cpu_clock='' cpu_null_error='' local cpc_plural='' cpu_count_print='' model_plural='' cpu_data_string='' local cpu_physical_count='' cpu_core_count='' cpu_core_alpha='' cpu_type='' + local cpu_2_data='' line_starter='' ##print_screen_output "A_CPU_DATA[0]=\"${A_CPU_DATA[0]}\"" # Array A_CPU_DATA always has one extra element: max clockfreq found. @@ -9192,9 +9216,9 @@ print_cpu_data() cpu_count_print="$cpu_physical_count " model_plural='s' fi - + line_starter="CPU$cpc_plural:" cpu_data_string="${cpu_count_print}${cpu_core_alpha} core" - cpu_data=$( create_print_line "CPU$cpc_plural:" "${C1}${cpu_data_string}${C2} ${a_cpu_working[0]}$model_plural (${cpu_type})" ) + cpu_data="${C1}${cpu_data_string}${C2} ${a_cpu_working[0]}$model_plural (${cpu_type})" if [[ $B_SHOW_CPU == 'true' ]];then # update for multicore, bogomips x core count. if [[ $B_EXTRA_DATA == 'true' ]];then @@ -9203,6 +9227,7 @@ print_cpu_data() # echo $cpu_core_count $cpu_physical_count if [[ -n ${a_cpu_working[4]} ]];then bmip_data=$( calculate_multicore_data "${a_cpu_working[4]}" "$(( $cpu_core_count * $cpu_physical_count ))" ) + bmip_data=${bmip_data%.*} fi # else # bmip_data="${a_cpu_working[4]}" @@ -9211,7 +9236,7 @@ print_cpu_data() if [[ $BSD_TYPE == 'bsd' && -z $bmip_data ]];then bmip_data='' else - bmip_data=" ${C1}bmips$SEP3${C2} $bmip_data" + bmip_data="${C1}bmips$SEP3${C2} $bmip_data " fi fi ## note: this handles how intel reports L2, total instead of per core like AMD does @@ -9228,16 +9253,20 @@ print_cpu_data() # only print shortened list if [[ $B_CPU_FLAGS_FULL != 'true' ]];then # gawk has already sorted this output, no flags returns - - cpu_flags=$( process_cpu_flags "${a_cpu_working[3]}" "${a_cpu_working[6]}" ) - cpu_flags="($cpu_flags)" - if [[ ${a_cpu_working[6]} == 'true' ]];then - flag_feature='features' + if [[ $B_EXTRA_DATA == 'true' ]];then + cpu_flags=$( process_cpu_flags "${a_cpu_working[3]}" "${a_cpu_working[6]}" ) + cpu_flags="($cpu_flags)" + if [[ ${a_cpu_working[6]} == 'true' ]];then + flag_feature='features' + fi + + cpu_flags="${C1}$flag_feature$SEP3${C2} $cpu_flags " fi - cpu_flags=" ${C1}$flag_feature$SEP3${C2} $cpu_flags" fi # arm cpus do not have flags or cache if [[ ${a_cpu_working[6]} != 'true' ]];then - cpu_data="$cpu_data${C2} ${C1}cache$SEP3${C2} $cpu_cache$cpu_flags$bmip_data${CN}" + cpu_data="$cpu_data${C2} ${C1}cache$SEP3${C2} $cpu_cache${CN}" + cpu_2_data="$cpu_flags$bmip_data${CN}" else cpu_data="$cpu_data${C2} (ARM)$bmip_data${CN}" fi @@ -9246,16 +9275,31 @@ print_cpu_data() if [[ ${#A_CPU_DATA[@]} -gt 2 && $B_SHOW_CPU == 'true' ]];then cpu_clock_speed='' # null < verbosity level 5 else - cpu_data="$cpu_data ${C1}clocked at${C2} ${a_cpu_working[1]} MHz${CN}" + cpu_data="$cpu_data ${C1}clocked at${C2} ${a_cpu_working[1]%.*} MHz${CN}" fi - cpu_data="$cpu_data $cpu_clock_speed" + cpu_2_data="$cpu_2_data$cpu_clock_speed" else if [[ $BSD_TYPE == 'bsd' && $B_ROOT != 'true' ]];then cpu_null_error=' No permissions for sysctl use?' fi - cpu_data=$( create_print_line "CPU:" "${C2}No CPU data available.$cpu_null_error" ) + cpu_data="${C2}No CPU data available.$cpu_null_error" + fi +# echo $cpu_data $cpu_2_data +# echo ln: $( calculate_line_length "$cpu_data $cpu_2_data" ) +# echo cpl: $( create_print_line "$line_starter" "${cpu_2_data}" ): +# echo icols: $COLS_INNER +# echo tc: $TERM_COLUMNS + # echo :${cpu_2_data}: + if [[ -n $cpu_2_data && $( calculate_line_length "$cpu_data $cpu_2_data" ) -gt $COLS_INNER ]];then + cpu_data=$( create_print_line "$line_starter" "${cpu_data}" ) + line_starter='' + print_screen_output "$cpu_data" + cpu_data=$( create_print_line " " "${cpu_2_data}" ) + print_screen_output "$cpu_data" + else + cpu_data=$( create_print_line "$line_starter" "${cpu_data}" ) + print_screen_output "$cpu_data ${cpu_2_data}" fi - print_screen_output "$cpu_data" # we don't this printing out extra line unless > 1 cpu core # note the numbering, the last array item is the min/max/not found for cpu speeds if [[ ${#A_CPU_DATA[@]} -gt 2 && $B_SHOW_CPU == 'true' ]];then @@ -9265,7 +9309,7 @@ print_cpu_data() a_cpu_working=(${A_CPU_DATA[i]}) IFS="$ORIGINAL_IFS" # note: the first iteration will create a first space, for color code separation below - cpu_multi_clock_data="$cpu_multi_clock_data ${C1}$(( i + 1 )):${C2} ${a_cpu_working[1]} MHz${CN}" + cpu_multi_clock_data="$cpu_multi_clock_data ${C1}$(( i + 1 )):${C2} ${a_cpu_working[1]%.*} MHz${CN}" # someone actually appeared with a 16 core system, so going to stop the cpu core throttle # if this had some other purpose which we can't remember we'll add it back in #if [[ $i -gt 10 ]];then @@ -9290,36 +9334,42 @@ print_cpu_flags_full() eval $LOGFS # note: sort only sorts lines, not words in a string, so convert to lines local cpu_flags_full="$( echo $1 | tr " " "\n" | sort )" - local a_cpu_flags='' line_starter='' temp_count='' - local i=0 counter=0 max_length=85 max_length_minus=15 flag='' flag_data='' - local line_length_max='' flag_feature='Flags' + local a_cpu_flags='' line_starter='' temp_string='' + local i=0 counter=0 starter_length=15 flag='' flag_data='' + local line_length='' flag_feature='Flags' spacer='' flag_string='' if [[ $2 == 'true' ]];then flag_feature='Features' fi - - + line_starter="CPU $flag_feature$SEP3" + starter_length=$(( ${#line_starter} + 1 )) + line_starter="${C1}$line_starter${C2} " + line_length=$(( $COLS_INNER - $starter_length )) # build the flag line array for flag in $cpu_flags_full do - a_cpu_flags[$counter]="${a_cpu_flags[$counter]}$flag " - if [[ $counter -eq 0 ]];then - line_length_max=$(( $max_length - $max_length_minus )) + temp_string="$flag_string$spacer$flag" + spacer=' ' + # handle inner line starter + if [[ $counter -gt 0 ]];then + line_length=$COLS_INNER + fi + if [[ $line_length -ge ${#temp_string} ]];then + flag_string=$temp_string else - line_length_max=$max_length - fi - # temp_count=$( wc -c <<< ${a_cpu_flags[$counter]} ) - temp_count=${#a_cpu_flags[$counter]} - if [[ $temp_count -gt $line_length_max ]];then + a_cpu_flags[$counter]=$flag_string + flag_string=$flag (( counter++ )) fi + temp_string='' done + if [[ -n $flag_string ]];then + a_cpu_flags[$counter]=$flag_string + fi # then print it out for (( i=0; i < ${#a_cpu_flags[@]};i++ )) do - if [[ $i -eq 0 ]];then - line_starter="${C1}CPU $flag_feature$SEP3${C2} " - else + if [[ $i -gt 0 ]];then line_starter='' fi flag_data=$( create_print_line " " "$line_starter${a_cpu_flags[$i]}" ) @@ -9477,7 +9527,7 @@ print_graphics_data() else graphics_data="${C1}Card:${C2} Failed to Detect Video Card! " fi - if [[ -n $graphics_data && $( calculate_line_length "${graphics_data}$display_full_string" ) -lt $LINE_MAX ]];then + if [[ -n $graphics_data && $( calculate_line_length "${graphics_data}$display_full_string" ) -lt $COLS_INNER ]];then graphics_data=$( create_print_line "$line_starter" "${graphics_data}$display_full_string" ) else if [[ -n $graphics_data ]];then @@ -9742,7 +9792,7 @@ print_info_data() closing_data="$client_data${C1}$SCRIPT_NAME$SEP3${C2} $SCRIPT_VERSION_NUMBER$patch_version_number${CN}" # sometimes gcc is very long, and default runlevel can be long with systemd, so create a gcc-less line first - if [[ $( calculate_line_length "${info_data}${init_data}${gcc_installed}${closing_data}" ) -gt $LINE_MAX ]];then + if [[ $( calculate_line_length "${info_data}${init_data}${gcc_installed}${closing_data}" ) -gt $COLS_INNER ]];then info_data=${info_data}${init_data} info_data=$( create_print_line "$line_starter" "$info_data" ) print_screen_output "$info_data" @@ -9752,7 +9802,7 @@ print_info_data() line_starter=' ' #echo 1 fi - if [[ $( calculate_line_length "${info_data}${init_data}${gcc_installed}${closing_data}" ) -gt $LINE_MAX ]];then + if [[ $( calculate_line_length "${info_data}${init_data}${gcc_installed}${closing_data}" ) -gt $COLS_INNER ]];then info_data=${info_data}${init_data}${gcc_installed} info_data=$( create_print_line "$line_starter" "$info_data" ) print_screen_output "$info_data" @@ -9883,7 +9933,7 @@ print_machine_data() fi mobo_line="${C1}Mobo$SEP3${C2} $mobo_vendor ${C1}model$SEP3${C2} $mobo_model$mobo_version$mobo_serial" bios_line="${C1}Bios$SEP3${C2} $bios_vendor ${C1}version$SEP3${C2} $bios_version ${C1}date$SEP3${C2} $bios_date$bios_rom" - if [[ $( calculate_line_length "$mobo_line$bios_line" ) -lt $LINE_MAX ]];then + if [[ $( calculate_line_length "$mobo_line$bios_line" ) -lt $COLS_INNER ]];then mobo_line="$mobo_line $bios_line" bios_line='' fi @@ -9908,7 +9958,7 @@ print_machine_data() product_serial=" ${C1}serial$SEP3${C2} ${A_MACHINE_DATA[3]} " fi system_line="${C1}System$SEP3${C2} $system_vendor ${C1}product$SEP3${C2} $product_name$product_version$product_serial" - if [[ -n $chassis_line && $( calculate_line_length "$system_line$chassis_line" ) -lt $LINE_MAX ]];then + if [[ -n $chassis_line && $( calculate_line_length "$system_line$chassis_line" ) -lt $COLS_INNER ]];then system_line="$system_line $chassis_line" chassis_line='' fi @@ -10065,7 +10115,7 @@ print_networking_data() fi card_string="${C1}Card$card_id:${C2} ${a_network_working[0]} " card_data="$driver_data$port_data$pci_bus_id$chip_id" - if [[ $( calculate_line_length "$card_string$card_data" ) -gt $LINE_MAX ]];then + if [[ $( calculate_line_length "$card_string$card_data" ) -gt $COLS_INNER ]];then network_data=$( create_print_line "$line_starter" "$card_string" ) line_starter=' ' card_string='' @@ -10144,7 +10194,7 @@ print_networking_ip_data() local wan_ip_data='' a_interfaces_working='' interfaces='' i='' local if_id='' if_ip='' if_ipv6='' if_ipv6_string='' full_string='' if_string='' local if_id_string='' if_ip_string='' - local line_max=$(( $LINE_MAX - 50 )) + local line_max=$(( $COLS_INNER - 40 )) # set A_INTERFACES_DATA get_networking_local_ip_data @@ -10365,9 +10415,9 @@ print_partition_data() { eval $LOGFS local a_partition_working='' partition_used='' partition_data='' - local counter=0 i=0 a_partition_data='' line_starter='' line_max=$(( $LINE_MAX - 35 )) + local counter=0 i=0 a_partition_data='' line_starter='' line_max=$(( $COLS_INNER - 25 )) local partitionIdClean='' part_dev='' full_dev='' part_label='' full_label='' - local part_uuid='' full_uuid='' dev_remote='' full_fs='' line_max_label_uuid=$(( $LINE_MAX - 10 )) + local part_uuid='' full_uuid='' dev_remote='' full_fs='' line_max_label_uuid=$COLS_INNER local b_non_dev='false' holder='' # set A_PARTITION_DATA @@ -10474,7 +10524,7 @@ print_program_version() # left pad: sed -e :a -e 's/^.\{1,80\}$/& /;ta' # right pad: sed -e :a -e 's/^.\{1,80\}$/ &/;ta' # center pad: sed -e :a -e 's/^.\{1,80\}$/ & /;ta' - #local line_max=$(( $LINE_MAX - 10 )) + #local line_max=$COLS_INNER #program_version="$( sed -e :a -e "s/^.\{1,$line_max\}$/ &/;ta" <<< $program_version )" # use to create padding if needed # program_version=$( create_print_line "Version:" "$program_version" ) print_screen_output "$program_version" @@ -10986,7 +11036,7 @@ print_sensors_data() gpu_temp=$( get_gpu_temp_data ) # dump the unneeded screen data for single gpu systems if [[ $( wc -w <<< $gpu_temp ) -eq 1 && $B_EXTRA_DATA != 'true' ]];then - gpu_temp=$( cut -d ':' -f 2 <<< $gpu_temp ) + gpu_temp=${gpu_temp#*:} fi if [[ -n $gpu_temp ]];then gpu_temp="${C1}gpu$SEP3${C2} ${gpu_temp} " @@ -11155,7 +11205,7 @@ print_system_data() system_data=$( create_print_line "System:" "$host_string$host_name ${C1}Kernel$SEP3${C2}" ) fi host_kernel_string="$host_string${C1}Kernel$SEP3${C2} $current_kernel$bits " - if [[ $( calculate_line_length "$host_kernel_string$de_distro_string" ) -lt $LINE_MAX ]];then + if [[ $( calculate_line_length "$host_kernel_string$de_distro_string" ) -lt $COLS_INNER ]];then system_data="$host_kernel_string$de_distro_string" system_data=$( create_print_line "System:" "$system_data" ) else @@ -1,4 +1,4 @@ -.TH INXI 1 "2014\-03\-13" inxi "inxi manual" +.TH INXI 1 "2014\-03\-14" inxi "inxi manual" .SH NAME inxi \- Command line system information script for console and IRC @@ -85,7 +85,7 @@ Setting specific color type removes the global color selection. .TP .B \-C -Show full CPU output, including per CPU clockspeed if available. +Show full CPU output, including per CPU clockspeed if available. See \fB\-x\fR for more options. .TP .B \-d Shows optical drive data. Same as \fB\-Dd\fR. With \fB\-x\fR, adds features line to output. @@ -110,7 +110,7 @@ Show Graphic card information. Card(s), Display Server (vendor and version numbe may be added once enough data has been collected. .TP .B \-h -The help menu. Features dynamic sizing to fit into terminal window. Set script global \fBLINE_MAX_BASIC\fR +The help menu. Features dynamic sizing to fit into terminal window. Set script global \fBCOLS_MAX_CONSOLE\fR if you want a different default value. .TP .B \-\-help @@ -296,7 +296,7 @@ The following shows which lines / items get extra information with each extra da \- Shows PCI Bus ID/Usb ID number of each Audio device. .TP .B \-x \-C -\- bogomips on CPU (if available). +\- bogomips on CPU (if available); CPU Flags (short list). .TP .B \-x \-d \- Adds items to features line of optical drive; adds rev version to optical drive. Binary files differdiff --git a/inxi.changelog b/inxi.changelog index bc40cdb..ceba726 100755 --- a/inxi.changelog +++ b/inxi.changelog @@ -1,4 +1,54 @@ ===================================================================================== +Version: 2.1.2 +Patch Version: 00 +Script Date: 2014-03-14 +----------------------------------- +Changes: +----------------------------------- +New version. Updated dynamic sizing, fixed some glitches in cpu flags, fixed bugs in +cpu main. Cleaned up a few more variable and width issues. Used a few more ${#var} for +counting. + +----------------------------------- +-- Harald Hope - Fri, 14 Mar 2014 20:39:13 -0700 + +===================================================================================== +Version: 2.1.1 +Patch Version: 00 +Script Date: 2014-03-14 +----------------------------------- +Changes: +----------------------------------- +New Version, new man. This continues the dyanamic line sizing, I'm doing these one at a +time to make it easier to test stuff one by one. + +Full refactoring/reordering of top global variables, moved user/maintainer set variables +to top, and clearly identify all globals. + +Changed LINE_MAX to COL_MAX but all user configuration files will stay working since +inxi now will check for that and translate them to the new variable names. + +New lines fixed, -C cpu and -f cpu plus full flags. Flags output is now fully dynamic to +display screen in terminal/console. Moved cpu short flags to -x because it's not that +important in general and just clutters things up in my opinion. + +Print flags/bogomips on separate line if line greater than display width. + +The rest of the lines will get a similar treatment, but it takes a bit of trial and error +for each line to get it working right. + +Note that IRC line lengths are NOT dyanamic unless I can find a way to determine the column +width of irc clients, but that won't be accurate since fonts vary in widths for each character. + +CPU was the worst offender in my opinion in terms of regular output wrapping to new line messily, +next will be the things with ports/chip id/card id. + +Tightened up a bit more the dyanamic help / version output handler. + +----------------------------------- +-- Harald Hope - Fri, 14 Mar 2014 13:14:51 -0700 + +===================================================================================== Version: 2.1.0 Patch Version: 00 Script Date: 2014-03-13 |