M home/modules/profiles/development/emacs/default.nix => home/modules/profiles/development/emacs/default.nix +27 -1
@@ 14,7 14,9 @@
{ config, lib, pkgs, ... }:
let
- doomRev = "5f5a163c49207a7083ab1ecc9e78d268fd6600b8";
+ doomRev = "9620bb45ac4cd7b0274c497b2d9d93c4ad9364ee";
+ vterm = pkgs.emacsPackages.vterm;
+ emacsVtermPath = "${vterm}/share/emacs/site-lisp/elpa/${vterm.pname}-${vterm.version}";
in {
config = lib.mkIf config.profiles.development.enable {
services.emacs = {
@@ 35,6 37,30 @@ in {
];
};
+ programs.zsh.initExtra = ''
+ # Emacs
+ if [[ "$INSIDE_EMACS" = 'vterm' ]] \
+ && [[ -n ${emacsVtermPath} ]] \
+ && [[ -f ${emacsVtermPath}/etc/emacs-vterm-zsh.sh ]]; then
+ source ${emacsVtermPath}/etc/emacs-vterm-zsh.sh
+
+ find_file() {
+ vterm_cmd find-file "$(realpath "''${@:-.}")"
+ }
+
+ say() {
+ vterm_cmd message "%s" "$*"
+ }
+
+ vterm_set_directory() {
+ vterm_cmd update-pwd "$PWD/"
+ }
+
+ autoload -U add-zsh-hook
+ add-zsh-hook -Uz chpwd (){ vterm_set_directory }
+ fi
+ '';
+
home.activation = {
linkDoomConfig = {
after = [ "writeBoundary" "createXdgUserDirectories" ];
M home/modules/profiles/development/emacs/doom.d/config.el => home/modules/profiles/development/emacs/doom.d/config.el +26 -0
@@ 264,3 264,29 @@
(remove-hook 'doom-first-buffer-hook #'smartparens-global-mode)
(add-hook 'write-file-functions 'delete-trailing-whitespace)
+
+(add-to-list 'vterm-eval-cmds '("update-pwd" (lambda (path) (setq default-directory path))))
+
+;; (after! vterm
+;; (defun mog_cd_for_toggle (arg)
+;; (vterm-send-string (concat "cd " arg) t)
+;; (vterm-send-return)
+;; )
+;; (defun my_cd_on_toggle (oldfun &rest arg)
+;; (let* ((project-root (or (doom-project-root) default-directory))
+;; (default-directory
+;; (if arg
+;; default-directory
+;; project-root))
+;; display-buffer-alist)
+;; (apply oldfun arg)
+;; (vterm-send-C-a)
+;; (vterm-send-C-k)
+;; (sleep-for 0.01)
+;; (if
+;; (vterm-cursor-in-command-buffer-p)
+;; (mog_cd_for_toggle project-root)
+;; )
+;; ))
+;; (advice-add #'+vterm/toggle :around #'my_cd_on_toggle)
+;; ))
M home/modules/profiles/development/emacs/doom.d/init.el => home/modules/profiles/development/emacs/doom.d/init.el +2 -2
@@ 75,9 75,9 @@
:term
eshell ; the elisp shell that works everywhere
- ;;shell ; simple shell REPL for Emacs
+ shell ; simple shell REPL for Emacs
term ; basic terminal emulator for Emacs
- ;;vterm ; the best terminal emulation in Emacs
+ vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget