Browse Source

Merge pull request #4627 from strackr/timer_plugin

Adding Timer plugin
Robby Russell 6 years ago
parent
commit
e8318e4abe
2 changed files with 46 additions and 0 deletions
  1. 17 0
      plugins/timer/README.md
  2. 29 0
      plugins/timer/timer.plugin.zsh

+ 17 - 0
plugins/timer/README.md

@@ -0,0 +1,17 @@
+This plugin allows to display command's execution time in a very nonintrusive way.
+
+Timer can be tuned by these two variables:
+* `TIMER_PRECISION` allows to control number of decimal places (default `1`)
+* `TIMER_FORMAT` allows to adjust display format (default `'/%d'`)
+
+Sample session:
+
+    me@here:~$ sleep 1                                         /1.0s
+    me@here:~$ sleep 73                                     /1m13.0s
+    me@here:~$ TIMER_FORMAT='[%d]'; TIMER_PRECISION=2        [0.00s]
+    me@here:~$ head -c50 < /dev/urandom | hexdump
+    0000000 b2 16 20 f0 29 1f 61 2d 8a 29 20 8c 8c 39 5a ab
+    0000010 21 47 0e f9 ee a4 76 46 71 9e 4f 6b a4 c4 51 cb
+    0000020 f9 1f 7e b9 6f 2c ae dd cf 40 6d 64 a8 fb d3 db
+    0000030 09 37
+    0000032                                                  [0.02s]

+ 29 - 0
plugins/timer/timer.plugin.zsh

@@ -0,0 +1,29 @@
+__timer_current_time() {
+  perl -MTime::HiRes=time -e'print time'
+}
+
+__timer_format_duration() {
+  local mins=$(printf '%.0f' $(($1 / 60)))
+  local secs=$(printf "%.${TIMER_PRECISION:-1}f" $(($1 - 60 * mins)))
+  local duration_str=$(echo "${mins}m${secs}s")
+  local format="${TIMER_FORMAT:-/%d}"
+  echo "${format//\%d/${duration_str#0m}}"
+}
+
+__timer_save_time_preexec() {
+  __timer_cmd_start_time=$(__timer_current_time)
+}
+
+__timer_display_timer_precmd() {
+  if [ -n "${__timer_cmd_start_time}" ]; then
+    local cmd_end_time=$(__timer_current_time)
+    local tdiff=$((cmd_end_time - __timer_cmd_start_time))
+    unset __timer_cmd_start_time
+    local tdiffstr=$(__timer_format_duration ${tdiff})
+    local cols=$((COLUMNS - ${#tdiffstr} - 1))
+    echo -e "\033[1A\033[${cols}C ${tdiffstr}"
+  fi
+}
+
+preexec_functions+=(__timer_save_time_preexec)
+precmd_functions+=(__timer_display_timer_precmd)