Problem
The README says brew install wakatime-cli, but wakatime-mode cannot find the binary on Apple Silicon Macs.
Cause
$ where wakatime-cli
/opt/homebrew/bin/wakatime-cli
Homebrew's prefix on Apple Silicon is /opt/homebrew, but wakatime-find-binary only checks /usr/local/bin, ~/.wakatime/, etc.
The executable-find fallback at the end looks for "wakatime", not "wakatime-cli", so it never matches.
|
(defun wakatime-find-binary (program) |
|
"Find the full path to an executable program." |
|
(cond |
|
((file-exists-p (format "/usr/local/bin/%s" program)) |
|
(format "/usr/local/bin/%s" program)) |
|
((file-exists-p (format "/usr/bin/%s" program)) |
|
(format "/usr/bin/%s" program)) |
|
((file-exists-p (format "/bin/%s" program)) |
|
(format "/bin/%s" program)) |
|
((file-exists-p (format "/usr/local/sbin/%s" program)) |
|
(format "/usr/local/sbin/%s" program)) |
|
((file-exists-p (format "/usr/sbin/%s" program)) |
|
(format "/usr/sbin/%s" program)) |
|
((file-exists-p (format "/sbin/%s" program)) |
|
(format "/sbin/%s" program)) |
|
;; For linux users |
|
((file-exists-p "~/.wakatime/wakatime-cli") |
|
"~/.wakatime/wakatime-cli") |
|
;; For windows 10+ fix to get wakatime-cli.exe |
|
((file-exists-p (concat |
|
(string-replace "\\" "/" (concat |
|
(substitute-env-vars "$HOMEDRIVE") |
|
(substitute-env-vars "$HOMEPATH"))) |
|
(format "/.wakatime/%s" program))) |
|
(concat (string-replace "\\" "/" (concat |
|
(substitute-env-vars "$HOMEDRIVE") |
|
(substitute-env-vars "$HOMEPATH"))) |
|
(format "/.wakatime/%s" program))) |
|
;; For windows 10+ fix to get wakatime-cli-amd64.exe |
|
((file-exists-p (concat |
|
(string-replace "\\" "/" (concat |
|
(substitute-env-vars "$HOMEDRIVE") |
|
(substitute-env-vars "$HOMEPATH"))) |
|
"/.wakatime/wakatime-cli-windows-amd64.exe")) |
|
(concat (string-replace "\\" "/" (concat |
|
(substitute-env-vars "$HOMEDRIVE") |
|
(substitute-env-vars "$HOMEPATH"))) |
|
"/.wakatime/wakatime-cli-windows-amd64.exe")) |
|
((not (s-blank (executable-find "wakatime"))) |
|
(executable-find "wakatime")) |
|
(t program))) |
Suggested fix
Make executable-find the primary method, while keeping /opt/homebrew/bin and /usr/local/bin as hardcoded fallbacks for GUI Emacs environments where $PATH may be incomplete.
This also covers #72, which similarly proposed switching to executable-find:
(defun wakatime-find-binary (program)
(cond
((executable-find program))
((file-exists-p (format "/opt/homebrew/bin/%s" program))
(format "/opt/homebrew/bin/%s" program))
((file-exists-p (format "/usr/local/bin/%s" program))
(format "/usr/local/bin/%s" program))
((file-exists-p "~/.wakatime/wakatime-cli")
"~/.wakatime/wakatime-cli")
;; ... Windows paths
(t program)))
Problem
The
READMEsaysbrew install wakatime-cli, butwakatime-modecannot find the binary on Apple Silicon Macs.Cause
Homebrew's prefix on Apple Silicon is
/opt/homebrew, butwakatime-find-binaryonly checks/usr/local/bin,~/.wakatime/, etc.The
executable-findfallback at the end looks for"wakatime", not"wakatime-cli", so it never matches.wakatime-mode/wakatime-mode.el
Lines 103 to 143 in 1c5b225
Suggested fix
Make
executable-findthe primary method, while keeping/opt/homebrew/binand/usr/local/binas hardcoded fallbacks for GUI Emacs environments where$PATHmay be incomplete.This also covers #72, which similarly proposed switching to
executable-find: