mirror of
https://github.com/SqrtMinusOne/dotfiles.git
synced 2025-12-11 19:45:25 +03:00
fix(emacs): wakatime workarounds
This commit is contained in:
parent
0ae6b3127d
commit
0ad807a841
2 changed files with 142 additions and 6 deletions
|
|
@ -267,7 +267,8 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
|
|
||||||
(general-define-key
|
(general-define-key
|
||||||
:keymaps 'evil-window-map
|
:keymaps 'evil-window-map
|
||||||
"x" 'kill-buffer-and-window)
|
"x" 'kill-buffer-and-window
|
||||||
|
"d" 'kill-current-buffer)
|
||||||
|
|
||||||
(winner-mode 1)
|
(winner-mode 1)
|
||||||
|
|
||||||
|
|
@ -570,6 +571,9 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
"gt" 'my/treemacs-open-vterm
|
"gt" 'my/treemacs-open-vterm
|
||||||
"`" 'my/treemacs-open-vterm))
|
"`" 'my/treemacs-open-vterm))
|
||||||
|
|
||||||
|
;; (treemacs-define-custom-icon (concat " " (all-the-icons-fileicon "typescript")) "spec.ts")
|
||||||
|
;; (setq treemacs-file-extension-regex (rx "." (or "spec.ts" (+ (not "."))) eos))
|
||||||
|
|
||||||
(use-package projectile
|
(use-package projectile
|
||||||
:straight t
|
:straight t
|
||||||
:config
|
:config
|
||||||
|
|
@ -658,7 +662,49 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
:straight t
|
:straight t
|
||||||
:if (not my/is-termux)
|
:if (not my/is-termux)
|
||||||
:config
|
:config
|
||||||
(advice-add 'wakatime-init :after (lambda () (setq wakatime-cli-path "/home/pavel/bin/wakatime")))
|
(defun wakatime-client-command (savep)
|
||||||
|
"Return client command executable and arguments.
|
||||||
|
Set SAVEP to non-nil for write action."
|
||||||
|
(format "%s%s--entity \"%s\" --plugin \"%s/%s\" --time %.2f%s%s"
|
||||||
|
(if (s-blank wakatime-python-bin) "" (format "\"%s\" " wakatime-python-bin))
|
||||||
|
(if (s-blank wakatime-cli-path) "wakatime " (format "\"%s\" " wakatime-cli-path))
|
||||||
|
(buffer-file-name (current-buffer))
|
||||||
|
wakatime-user-agent
|
||||||
|
wakatime-version
|
||||||
|
(float-time)
|
||||||
|
(if savep " --write" "")
|
||||||
|
(if (s-blank wakatime-api-key) "" (format " --key %s" wakatime-api-key))))
|
||||||
|
(defun wakatime-call (savep)
|
||||||
|
"Call WakaTime command."
|
||||||
|
(let*
|
||||||
|
((command (wakatime-client-command savep))
|
||||||
|
(process-environment (if wakatime-python-path (cons (format "PYTHONPATH=%s" wakatime-python-path) process-environment) process-environment))
|
||||||
|
(process
|
||||||
|
(start-process
|
||||||
|
"Shell"
|
||||||
|
(generate-new-buffer " *WakaTime messages*")
|
||||||
|
shell-file-name
|
||||||
|
shell-command-switch
|
||||||
|
command)))
|
||||||
|
|
||||||
|
(set-process-sentinel process
|
||||||
|
`(lambda (process signal)
|
||||||
|
(when (memq (process-status process) '(exit signal))
|
||||||
|
(kill-buffer (process-buffer process))
|
||||||
|
(let ((exit-status (process-exit-status process)))
|
||||||
|
(when (and (not (= 0 exit-status)) (not (= 102 exit-status)) (not (= 1 exit-status)))
|
||||||
|
(when wakatime-disable-on-error
|
||||||
|
(wakatime-mode -1)
|
||||||
|
(global-wakatime-mode -1))
|
||||||
|
(cond
|
||||||
|
((= exit-status 103) (error "WakaTime Error (%s) Config file parse error. Check your ~/.wakatime.cfg file." exit-status))
|
||||||
|
((= exit-status 104) (error "WakaTime Error (%s) Invalid API Key. Set your api key with: (custom-set-variables '(wakatime-api-key \"XXXX\"))" exit-status))
|
||||||
|
((= exit-status 105) (error "WakaTime Error (%s) Unknown wakatime-cli error. Please check your ~/.wakatime.log file and open a new issue at https://github.com/wakatime/wakatime-mode" exit-status))
|
||||||
|
((= exit-status 106) (error "WakaTime Error (%s) Malformed heartbeat error. Please check your ~/.wakatime.log file and open a new issue at https://github.com/wakatime/wakatime-mode" exit-status))
|
||||||
|
(t (message "WakaTime Error (%s) Make sure this command runs in a Terminal: %s" exit-status (wakatime-client-command nil)))))))))
|
||||||
|
(set-process-query-on-exit-flag process nil)))
|
||||||
|
(advice-add 'wakatime-init :after (lambda () (setq wakatime-cli-path "/home/pavel/bin/wakatime-cli")))
|
||||||
|
;; (setq wakatime-cli-path (executable-find "wakatime"))
|
||||||
(global-wakatime-mode))
|
(global-wakatime-mode))
|
||||||
|
|
||||||
(use-package request
|
(use-package request
|
||||||
|
|
@ -3161,6 +3207,9 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
:init
|
:init
|
||||||
(my-leader-def "ai" #'erc-tls)
|
(my-leader-def "ai" #'erc-tls)
|
||||||
:config
|
:config
|
||||||
|
;; Logging
|
||||||
|
(setq erc-log-channels-directory "~/.erc/logs")
|
||||||
|
(setq erc-save-buffer-on-part t)
|
||||||
;; Config of my ZNC instance.
|
;; Config of my ZNC instance.
|
||||||
(setq erc-server "sqrtminusone.xyz")
|
(setq erc-server "sqrtminusone.xyz")
|
||||||
(setq erc-port 1984)
|
(setq erc-port 1984)
|
||||||
|
|
@ -3170,6 +3219,17 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
(setq erc-kill-buffer-on-part t)
|
(setq erc-kill-buffer-on-part t)
|
||||||
(setq erc-track-shorten-start 8))
|
(setq erc-track-shorten-start 8))
|
||||||
|
|
||||||
|
(setq erc-track-exclude-types '("NICK" "JOIN" "LEAVE" "QUIT" "PART"
|
||||||
|
"301" ; away notice
|
||||||
|
"305" ; return from awayness
|
||||||
|
"306" ; set awayness
|
||||||
|
"324" ; modes
|
||||||
|
"329" ; channel creation date
|
||||||
|
"332" ; topic notice
|
||||||
|
"333" ; who set the topic
|
||||||
|
"353" ; Names notice
|
||||||
|
))
|
||||||
|
|
||||||
(use-package erc-hl-nicks
|
(use-package erc-hl-nicks
|
||||||
:hook (erc-mode . erc-hl-nicks-mode)
|
:hook (erc-mode . erc-hl-nicks-mode)
|
||||||
:after (erc)
|
:after (erc)
|
||||||
|
|
|
||||||
84
Emacs.org
84
Emacs.org
|
|
@ -1,5 +1,5 @@
|
||||||
#+PROPERTY: header-args :mkdirp yes
|
#+PROPERTY: header-args :mkdirp yes
|
||||||
#+PROPERTY: header-args:bash :tangle-mode (identity #o755) :comments link :shebang "#!/usr/bin/env bash"
|
#+PROPERTY: header-args:bash :tangle-mode (identity #o755) :comments link :shebang "#!/usr/bin/env bash"
|
||||||
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/init.el :mkdirp yes
|
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/init.el :mkdirp yes
|
||||||
#+TODO: CHECK(s) | OFF(o)
|
#+TODO: CHECK(s) | OFF(o)
|
||||||
|
|
||||||
|
|
@ -693,7 +693,8 @@ Some keybindings I used in vim to switch buffers and can't let go of.
|
||||||
|
|
||||||
(general-define-key
|
(general-define-key
|
||||||
:keymaps 'evil-window-map
|
:keymaps 'evil-window-map
|
||||||
"x" 'kill-buffer-and-window)
|
"x" 'kill-buffer-and-window
|
||||||
|
"d" 'kill-current-buffer)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
And winner-mode to keep the history of window states.
|
And winner-mode to keep the history of window states.
|
||||||
|
|
@ -1153,6 +1154,11 @@ Function to open dired and vterm at given nodes.
|
||||||
"gt" 'my/treemacs-open-vterm
|
"gt" 'my/treemacs-open-vterm
|
||||||
"`" 'my/treemacs-open-vterm))
|
"`" 'my/treemacs-open-vterm))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
*** Custom icons
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
;; (treemacs-define-custom-icon (concat " " (all-the-icons-fileicon "typescript")) "spec.ts")
|
||||||
|
;; (setq treemacs-file-extension-regex (rx "." (or "spec.ts" (+ (not "."))) eos))
|
||||||
|
#+end_src
|
||||||
** Projectile
|
** Projectile
|
||||||
[[https://github.com/bbatsov/projectile][Projectile]] gives a bunch of useful functions for managing projects, like finding files within a project, fuzzy-find, replace, etc.
|
[[https://github.com/bbatsov/projectile][Projectile]] gives a bunch of useful functions for managing projects, like finding files within a project, fuzzy-find, replace, etc.
|
||||||
|
|
||||||
|
|
@ -1291,14 +1297,67 @@ Before I figure out how to package this for Guix:
|
||||||
- Run ~go build~
|
- Run ~go build~
|
||||||
- Copy the binary to the =~/bin= folder
|
- Copy the binary to the =~/bin= folder
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp :noweb yes
|
||||||
(use-package wakatime-mode
|
(use-package wakatime-mode
|
||||||
:straight t
|
:straight t
|
||||||
:if (not my/is-termux)
|
:if (not my/is-termux)
|
||||||
:config
|
:config
|
||||||
(advice-add 'wakatime-init :after (lambda () (setq wakatime-cli-path "/home/pavel/bin/wakatime")))
|
<<wakatime-fixes>>
|
||||||
|
(advice-add 'wakatime-init :after (lambda () (setq wakatime-cli-path "/home/pavel/bin/wakatime-cli")))
|
||||||
|
;; (setq wakatime-cli-path (executable-find "wakatime"))
|
||||||
(global-wakatime-mode))
|
(global-wakatime-mode))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
**** Fixes
|
||||||
|
wakatime-mode.el seems to be incompatible with the latest Go cli. The fix is to replace =--file= with =--entity=.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp :tangle no :noweb-ref wakatime-fixes
|
||||||
|
(defun wakatime-client-command (savep)
|
||||||
|
"Return client command executable and arguments.
|
||||||
|
Set SAVEP to non-nil for write action."
|
||||||
|
(format "%s%s--entity \"%s\" --plugin \"%s/%s\" --time %.2f%s%s"
|
||||||
|
(if (s-blank wakatime-python-bin) "" (format "\"%s\" " wakatime-python-bin))
|
||||||
|
(if (s-blank wakatime-cli-path) "wakatime " (format "\"%s\" " wakatime-cli-path))
|
||||||
|
(buffer-file-name (current-buffer))
|
||||||
|
wakatime-user-agent
|
||||||
|
wakatime-version
|
||||||
|
(float-time)
|
||||||
|
(if savep " --write" "")
|
||||||
|
(if (s-blank wakatime-api-key) "" (format " --key %s" wakatime-api-key))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Also, until [[https://github.com/wakatime/wakatime-cli/issues/509][this issue]] is resolved, I set =wakatime-call= to ignore exit-code 1.
|
||||||
|
#+begin_src emacs-lisp :tangle no :noweb-ref wakatime-fixes
|
||||||
|
(defun wakatime-call (savep)
|
||||||
|
"Call WakaTime command."
|
||||||
|
(let*
|
||||||
|
((command (wakatime-client-command savep))
|
||||||
|
(process-environment (if wakatime-python-path (cons (format "PYTHONPATH=%s" wakatime-python-path) process-environment) process-environment))
|
||||||
|
(process
|
||||||
|
(start-process
|
||||||
|
"Shell"
|
||||||
|
(generate-new-buffer " *WakaTime messages*")
|
||||||
|
shell-file-name
|
||||||
|
shell-command-switch
|
||||||
|
command)))
|
||||||
|
|
||||||
|
(set-process-sentinel process
|
||||||
|
`(lambda (process signal)
|
||||||
|
(when (memq (process-status process) '(exit signal))
|
||||||
|
(kill-buffer (process-buffer process))
|
||||||
|
(let ((exit-status (process-exit-status process)))
|
||||||
|
(when (and (not (= 0 exit-status)) (not (= 102 exit-status)) (not (= 1 exit-status)))
|
||||||
|
(when wakatime-disable-on-error
|
||||||
|
(wakatime-mode -1)
|
||||||
|
(global-wakatime-mode -1))
|
||||||
|
(cond
|
||||||
|
((= exit-status 103) (error "WakaTime Error (%s) Config file parse error. Check your ~/.wakatime.cfg file." exit-status))
|
||||||
|
((= exit-status 104) (error "WakaTime Error (%s) Invalid API Key. Set your api key with: (custom-set-variables '(wakatime-api-key \"XXXX\"))" exit-status))
|
||||||
|
((= exit-status 105) (error "WakaTime Error (%s) Unknown wakatime-cli error. Please check your ~/.wakatime.log file and open a new issue at https://github.com/wakatime/wakatime-mode" exit-status))
|
||||||
|
((= exit-status 106) (error "WakaTime Error (%s) Malformed heartbeat error. Please check your ~/.wakatime.log file and open a new issue at https://github.com/wakatime/wakatime-mode" exit-status))
|
||||||
|
(t (message "WakaTime Error (%s) Make sure this command runs in a Terminal: %s" exit-status (wakatime-client-command nil)))))))))
|
||||||
|
(set-process-query-on-exit-flag process nil)))
|
||||||
|
#+end_src
|
||||||
*** ActivityWatch
|
*** ActivityWatch
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package request
|
(use-package request
|
||||||
|
|
@ -4783,6 +4842,9 @@ ERC is a built-it Emacs IRC client.
|
||||||
:init
|
:init
|
||||||
(my-leader-def "ai" #'erc-tls)
|
(my-leader-def "ai" #'erc-tls)
|
||||||
:config
|
:config
|
||||||
|
;; Logging
|
||||||
|
(setq erc-log-channels-directory "~/.erc/logs")
|
||||||
|
(setq erc-save-buffer-on-part t)
|
||||||
;; Config of my ZNC instance.
|
;; Config of my ZNC instance.
|
||||||
(setq erc-server "sqrtminusone.xyz")
|
(setq erc-server "sqrtminusone.xyz")
|
||||||
(setq erc-port 1984)
|
(setq erc-port 1984)
|
||||||
|
|
@ -4793,6 +4855,20 @@ ERC is a built-it Emacs IRC client.
|
||||||
(setq erc-track-shorten-start 8))
|
(setq erc-track-shorten-start 8))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
Exclude everything but actual messages from notifications.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(setq erc-track-exclude-types '("NICK" "JOIN" "LEAVE" "QUIT" "PART"
|
||||||
|
"301" ; away notice
|
||||||
|
"305" ; return from awayness
|
||||||
|
"306" ; set awayness
|
||||||
|
"324" ; modes
|
||||||
|
"329" ; channel creation date
|
||||||
|
"332" ; topic notice
|
||||||
|
"333" ; who set the topic
|
||||||
|
"353" ; Names notice
|
||||||
|
))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
A plugin to highlight IRC nicknames:
|
A plugin to highlight IRC nicknames:
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package erc-hl-nicks
|
(use-package erc-hl-nicks
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue