diff --git a/Changelog.md b/Changelog.md
index 94e763e0..7764afd9 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -11,6 +11,7 @@
- Added new function called `checkoldflags` which informs users about deprecated config options.
- Change all `OS X` references to `macOS`. **[@iandrewt](https://github.com/iandrewt)**
- Fix corrupted text when long lines are cut-off.
+- Don't dynamically place prompt in `image=off` mode.
## Operating System
@@ -67,8 +68,15 @@ https://github.com/dylanaraps/neofetch/commit/3e9c3d648cb4c6f0d5fe5f0b96f9e29429
**CPU**
+- Expanded `cpu_cores` option by adding two new values, `logical` and `physical`.
+ - `logical`: Show all virtual cores (hyperthreaded).
+ - `physical`: Only show physical cores.
- [macOS] Print physical cores instead of hyper-threaded cores. **[@iandrewt](https://github.com/iandrewt)**
+**Uptime**
+
+- Rewrote uptime function to use seconds since boot instead of the `uptime` command.
+
**Resolution**
- [macOS] Add @2x label for retina resolutions. **[@iandrewt](https://github.com/iandrewt)**
@@ -96,6 +104,7 @@ https://github.com/dylanaraps/neofetch/commit/3e9c3d648cb4c6f0d5fe5f0b96f9e29429
**Terminal and Terminal Font**
- Uppercase first letter of `term` and `termfont` outputs.
+- Don't print broken output of busybox's `ps`.
- Remove path from output.
**Song**
diff --git a/README.md b/README.md
index b6a8c9f2..1ab0e7a3 100644
--- a/README.md
+++ b/README.md
@@ -371,7 +371,9 @@ alias neofetch2="neofetch \
NOTE: This only support Linux with cpufreq.
--cpu_shorthand type Shorten the output of CPU
Possible values: name, speed, tiny, on, off
- --cpu_cores on/off Whether or not to display the number of CPU cores
+ --cpu_cores type Whether or not to display the number of CPU cores
+ Takes: logical, physical, off
+ Note: 'physical' doesn't work on BSD.
--distro_shorthand on/off Shorten the output of distro (tiny, on, off)
NOTE: This is only possible on Linux, macOS, and Solaris
--kernel_shorthand on/off Shorten the output of kernel
diff --git a/config/config b/config/config
index d4cc28ba..605ed6bd 100644
--- a/config/config
+++ b/config/config
@@ -108,8 +108,11 @@ cpu_display="off"
# CPU Cores
# Display CPU cores in output
-# --cpu_cores on/off
-cpu_cores="on"
+# Logical: All virtual cores
+# Physical: All physical cores
+# --cpu_cores logical, physical, off
+# Note: 'physical' doesn't work on BSD.
+cpu_cores="logical"
# GPU
diff --git a/neofetch b/neofetch
index 24d08f90..8fe058b5 100755
--- a/neofetch
+++ b/neofetch
@@ -268,73 +268,52 @@ getkernel() {
# Uptime {{{
getuptime() {
+ # Get uptime in seconds
case "$os" in
"Linux" | "Windows")
- case "$distro" in
- *"Puppy"* | "Quirky Werewolf"* | "Alpine Linux"* | "OpenWRT"* | "Windows"*)
- uptime="$(uptime | awk -F ':[0-9]{2}+ |(, ){1}+' '{printf $2}')"
- ;;
-
- "openSUSE"*)
- uptime="$(uptime | awk -F ':[0-9]{2}+[a-z][a-z] |(, ){1}+' '{printf $2}')"
- ;;
-
- *)
- uptime="$(uptime -p)"
- [ "$uptime" == "up " ] && uptime="up $(awk -F'.' '{print $1}' /proc/uptime) seconds"
- ;;
- esac
+ seconds="$(< /proc/uptime)"
+ seconds="${seconds/.*}"
;;
"Mac OS X" | "iPhone OS" | "BSD")
- # Get boot time in seconds
boot="$(sysctl -n kern.boottime)"
boot="${boot/'{ sec = '}"
boot="${boot/,*}"
# Get current date in seconds
now="$(date +%s)"
- uptime="$((now - boot))"
-
- # Convert uptime to days/hours/mins
- minutes="$((uptime / 60%60))"
- hours="$((uptime / 3600%24))"
- days="$((uptime / 86400))"
-
- case "$minutes" in
- 1) minutes="1 minute" ;;
- 0) unset minutes ;;
- *) minutes="$minutes minutes" ;;
- esac
-
- case "$hours" in
- 1) hours="1 hour" ;;
- 0) unset hours ;;
- *) hours="$hours hours" ;;
- esac
-
- case "$days" in
- 1) days="1 day" ;;
- 0) unset days ;;
- *) days="$days days" ;;
- esac
-
- [ "$hours" ] && \
- [ "$minutes" ] && \
- hours+=","
-
- [ "$days" ] && \
- [ "$hours" ] && \
- days+=","
-
- uptime="up $days $hours $minutes"
+ seconds="$((now - boot))"
;;
"Solaris")
- uptime="$(uptime | /usr/xpg4/bin/awk -F ':[0-9]{2}+[a-z][a-z] |(, ){1}+' '{printf $2}')"
+ seconds="$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}')"
+ seconds="${seconds/.*}"
;;
esac
+ days="$((seconds / 60 / 60 / 24)) days"
+ hours="$((seconds / 60 / 60 % 24)) hours"
+ minutes="$((seconds / 60 % 60)) minutes"
+
+ case "$days" in
+ "0 days") unset days ;;
+ "1 days") days="${days/s}" ;;
+ esac
+
+ case "$hours" in
+ "0 hours") unset hours ;;
+ "1 hours") hours="${hours/s}" ;;
+ esac
+
+ case "$minutes" in
+ "0 minutes") unset minutes ;;
+ "1 minutes") minutes="${minutes/s}" ;;
+ esac
+
+ uptime="${days:+$days, }${hours:+$hours, }${minutes}"
+ uptime="${uptime%', '}"
+ uptime="up ${uptime:-${seconds} seconds}"
+
# Make the output of uptime smaller.
case "$uptime_shorthand" in
"on")
@@ -353,7 +332,7 @@ getuptime() {
uptime="${uptime/ minutes/m}"
uptime="${uptime/ minute/m}"
uptime="${uptime/ seconds/s}"
- uptime="${uptime/,}"
+ uptime="${uptime//,}"
;;
esac
}
@@ -724,7 +703,11 @@ getcpu() {
speed="$((speed / 100))"
fi
- cores="$(grep -c ^processor /proc/cpuinfo)"
+ # Show/hide hyperthreaded cores
+ case "$cpu_cores" in
+ "logical" | "on") cores="$(grep -c ^processor /proc/cpuinfo)" ;;
+ "physical") cores="$(grep "^core id" /proc/cpuinfo | sort -u | wc -l)" ;;
+ esac
# Fix for speeds under 1ghz
if [ -z "${speed:1}" ]; then
@@ -738,7 +721,12 @@ getcpu() {
"Mac OS X")
cpu="$(sysctl -n machdep.cpu.brand_string)"
- cores="$(sysctl -n hw.ncpu)"
+
+ # Show/hide hyperthreaded cores
+ case "$cpu_cores" in
+ "logical" | "on") cores="$(sysctl -n hw.logicalcpu_max)" ;;
+ "physical") cores="$(sysctl -n hw.physicalcpu_max)" ;;
+ esac
;;
"iPhone OS")
@@ -884,8 +872,11 @@ getcpu() {
speed="$(psrinfo -v | awk '/operates at/ {print $6}')"
speed="$((speed / 100))"
- # Get cpu cores
- cores="$(kstat -m cpu_info | grep -c "chip_id")"
+ # Show/hide hyperthreaded cores
+ case "$cpu_cores" in
+ "logical" | "on") cores="$(kstat -m cpu_info | grep -c "chip_id")" ;;
+ "physical") cores="$(psrinfo -p)" ;;
+ esac
# Fix for speeds under 1ghz
if [ -z "${speed:1}" ]; then
@@ -913,7 +904,7 @@ getcpu() {
cpu="${cpu//with Radeon HD Graphics}"
# Add cpu cores to output
- [ "$cpu_cores" == "on" ] && [ "$cores" ] && \
+ [ "$cpu_cores" != "off" ] && [ "$cores" ] && \
cpu="${cpu/@/(${cores}) @}"
# Make the output of cpu shorter
@@ -1581,7 +1572,7 @@ getterm() {
case "${name// }" in
"${SHELL/*\/}" | *"sh" | "tmux"* | "screen") getterm "$parent" ;;
"login"* | *"Login"* | "init") term="$(tty)" ;;
- "ruby" | "1" | "systemd" | "sshd"* | "python"*) unset term ;;
+ "ruby" | "1" | "systemd" | "sshd"* | "python"* | "USER"*"PID"*) unset term ;;
"gnome-terminal-") term="gnome-terminal" ;;
*) term="${name##*/}" ;;
esac
@@ -2916,7 +2907,7 @@ kdeconfigdir() {
dynamicprompt() {
# Calculate image height in terminal cells.
# The '+ 4' adds a gap between the prompt and the content.
- [ "$image" != "ascii" ] && [ "$image" != "off" ] && \
+ [ "$image" != "ascii" ] && \
lines="$((${height:-1} / ${font_height:-1} + 4))"
# If the info is higher than the ascii/image place the prompt
@@ -2975,7 +2966,9 @@ usage() { cat << EOF
NOTE: This only support Linux with cpufreq.
--cpu_shorthand type Shorten the output of CPU
Possible values: name, speed, tiny, on, off
- --cpu_cores on/off Whether or not to display the number of CPU cores
+ --cpu_cores type Whether or not to display the number of CPU cores
+ Takes: logical, physical, off
+ Note: 'physical' doesn't work on BSD.
--distro_shorthand on/off Shorten the output of distro (tiny, on, off)
NOTE: This is only possible on Linux, macOS, and Solaris
--kernel_shorthand on/off Shorten the output of kernel
@@ -3312,17 +3305,17 @@ main() {
# Display the image if enabled
displayimage
+
+ # Set cursor position next to ascii art
+ printf "\033[$((${lines:-4} - ${prompt_loc:-4}))A"
+
+ # Reset horizontal cursor position
+ printf "\033[9999999D"
fi
- # Set cursor position next to ascii art
- printf "\033[$((${lines:-4} - ${prompt_loc:-4}))A"
-
- # Reset horizontal cursor position
- printf "\033[9999999D"
-
# Print the info
printinfo
- dynamicprompt
+ [ "$image" != "off" ] && dynamicprompt
# Re-enable line wrap
printf "%b%s" "\033[?7h"
diff --git a/neofetch.1 b/neofetch.1
index 71cbf2b9..62e3cd62 100644
--- a/neofetch.1
+++ b/neofetch.1
@@ -35,8 +35,10 @@ Shorten the output of CPU
.br
Possible values: name, speed, tiny, on, off
.TP
-.B \--cpu_cores 'on/off'
+.B \--cpu_cores 'logical/physical/off'
Whether or not to display the number of CPU cores
+.br
+Note: 'physical' doesn't work on BSD.
.TP
.B \--distro_shorthand 'on/off'
Shorten the output of distro (tiny, on, off)
@@ -51,7 +53,8 @@ Shorten the output of uptime (tiny, on, off)
.TP
.B \--refresh_rate 'on/off'
Whether to display the refresh rate of each monitor
-Unsupported on Windows
+.br
+Note: Unsupported on Windows
.TP
.B \--gpu_shorthand 'on/off'
Shorten the output of GPU (tiny, on, off)