~ruther/nixos-config

a30b53efdb27f46623d535c91dd62204af9d54ee — Frantisek Bohacek 10 months ago 82327f0
feat(emacs): use vterm, add functions to communicate with emacs from vterm
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

Do not follow this link