emacs-libvterm
emacs-libvterm copied to clipboard
Nushell integration
I've got integration working for Nushell 0.83. However there are multiple sections for multiple editors in the README now. It might be best to move them all in a doc/ directory and just have links. I can make a PR if you think that's a good idea. Also, Nushell isn't 1.0 yet (but close), so it may just be better to leave this as an issue until then.
.config/nushell/emacs-config.nu
source ~/.config/nushell/config.nu
source ~/.config/nushell/vterm.nu
.config/nushell/vterm.nu
module vterm {
# Escape a command for outputting by vterm send
def escape-for-send [
to_escape: string # The data to escape
] {
$to_escape | str replace --all '\\' '\\' | str replace --all '"' '\"'
}
# Send a command to vterm
export def send [
command: string # Command to pass to vterm
...args: string # Arguments to pass to vterm
] {
print --no-newline "\e]51;E"
print --no-newline $"\"(escape-for-send $command)\" "
for arg in $args {
print --no-newline $"\"(escape-for-send $arg)\" "
}
print --no-newline "\e\\"
}
# Clear the terminal window
export def clear [] {
send vterm-clear-scrollback
tput clear
}
# Open a file in Emacs
export def open [
filepath: path # File to open
] {
send "find-file" $filepath
}
}
module vprompt {
# Complete escape sequence based on environment
def complete-escape-by-env [
arg: string # argument to send
] {
let tmux: string = (if ($env.TMUX? | is-empty) { '' } else { $env.TMUX })
let term: string = (if ($env.TERM? | is-empty) { '' } else { $env.TERM })
if $tmux =~ "screen|tmux" {
# tell tmux to pass the escape sequences through
$"\ePtmux;\e\e]($arg)\a\e\\"
} else if $term =~ "screen.*" {
# GNU screen (screen, screen-256color, screen-256color-bce)
$"\eP\e]($arg)\a\e\\"
} else {
$"\e]($arg)\e\\"
}
}
# Output text prompt that vterm can use to track current directory
export def left-prompt-track-cwd [] {
$"(create_left_prompt)(complete-escape-by-env $'51;A(whoami)@(hostname):(pwd)')"
}
}
use vterm
use vprompt
$env.PROMPT_COMMAND = {|| vprompt left-prompt-track-cwd }
Emacs config
(setf vterm-shell "nu --config ~/.config/nushell/emacs-config.nu")
Examples
Autocomplete
~| vterm
vterm send Send a command to vterm
vterm open Open a file in Emacs
vterm clear Clear the terminal window
I'm trying out nushell and this is very helpful, so thanks!
I do have one question: if I understand correctly, you're defining an open
command to open files in Emacs, but how do I use it without conflicting with nushell's built-in open
command?
[edit]
Ok, I think I found it, I need to use vterm open
...
Quick tip for anyone else reading this: you can add an alias to emacs-config.nu
to access this command with fewer keystrokes:
alias ff = vterm open
Thanks @herbertjones for this configuration, it works pretty well, I think that this should be added to the official README.
I It works well
But I have some weird symbols it seems this problemrevert-buffer-with-coding-system but it didn't work
@anquegi I don't have that problem. Perhaps the font you are using is missing those glyphs.
@anquegi That's definitely an encoding issue. I'm not sure what you hoped to get from the page you linked to, but revert-buffer-with-coding-system
is not the answer. You'll need to make sure the encodings match up. I can't help with that, though. I use UTF-8 throughout my system just to avoid such issues...
Thanks for reading this and sorry for my too late answer. Maybe the problem in my case is thar I'm not using a valid locale for emacs xlib:
emacs --debug-init
Loading /home/toni/.config/emacs/lisp/doom.el (source)...
* 0.008225:*:load: doom-start nil
* 0.009674:*:hook:doom-before-init-hook: run doom--begin-init-h
* 0.009707::context: +init (t)
* 0.009723:*:init:hook:doom-before-init-hook: run doom--reset-custom-dont-initialize-h
* 0.009749:*:init:hook:doom-before-init-hook: run doom--reset-load-suffixes-h
* 0.010025:*:init:load: ~/.config/doom/init t
Warning: locale not supported by Xlib, locale set to C
locale
LANG=ca_ES@valencia
LC_CTYPE="ca_ES@valencia"
LC_NUMERIC=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_COLLATE="ca_ES@valencia"
LC_MONETARY=es_ES.UTF-8
LC_MESSAGES="ca_ES@valencia"
LC_PAPER=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8
LC_ALL=
may be should I change to a locale with better support