From b37114b4d5804f8125d3951efde6a1b9d39610d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 27 Sep 2021 18:08:12 +0200 Subject: [PATCH] refactor(emacs): remove dependency on `require_tool.sh` and clean up code style --- plugins/emacs/emacs.plugin.zsh | 90 +++++++++++++++++----------------- 1 file changed, 44 insertions(+), 46 deletions(-) diff --git a/plugins/emacs/emacs.plugin.zsh b/plugins/emacs/emacs.plugin.zsh index 0b602d12a..027c7550f 100644 --- a/plugins/emacs/emacs.plugin.zsh +++ b/plugins/emacs/emacs.plugin.zsh @@ -9,57 +9,55 @@ # - You can share opened buffered across opened frames. # - Configuration changes made at runtime are applied to all frames. +# Require emacs version to be minimum 24 +autoload -Uz is-at-least +is-at-least 24 "${${(Az)"$(emacsclient --version 2>/dev/null)"}[2]}" || return 0 -if "$ZSH/tools/require_tool.sh" emacsclient 24 2>/dev/null ; then - export EMACS_PLUGIN_LAUNCHER="$ZSH/plugins/emacs/emacsclient.sh" +# Path to custom emacsclient launcher +export EMACS_PLUGIN_LAUNCHER="${0:A:h}/emacsclient.sh" - # set EDITOR if not already defined. - export EDITOR="${EDITOR:-${EMACS_PLUGIN_LAUNCHER}}" +# set EDITOR if not already defined. +export EDITOR="${EDITOR:-${EMACS_PLUGIN_LAUNCHER}}" - alias emacs="$EMACS_PLUGIN_LAUNCHER --no-wait" - alias e=emacs - # open terminal emacsclient - alias te="$EMACS_PLUGIN_LAUNCHER -nw" +alias emacs="$EMACS_PLUGIN_LAUNCHER --no-wait" +alias e=emacs +# open terminal emacsclient +alias te="$EMACS_PLUGIN_LAUNCHER -nw" - # same than M-x eval but from outside Emacs. - alias eeval="$EMACS_PLUGIN_LAUNCHER --eval" - # create a new X frame - alias eframe='emacsclient --alternate-editor "" --create-frame' +# same than M-x eval but from outside Emacs. +alias eeval="$EMACS_PLUGIN_LAUNCHER --eval" +# create a new X frame +alias eframe='emacsclient --alternate-editor "" --create-frame' - # Emacs ANSI Term tracking - if [[ -n "$INSIDE_EMACS" ]]; then - chpwd_emacs() { print -P "\033AnSiTc %d"; } - print -P "\033AnSiTc %d" # Track current working directory - print -P "\033AnSiTu %n" # Track username +# Emacs ANSI Term tracking +if [[ -n "$INSIDE_EMACS" ]]; then + chpwd_emacs() { print -P "\033AnSiTc %d"; } + print -P "\033AnSiTc %d" # Track current working directory + print -P "\033AnSiTu %n" # Track username - # add chpwd hook - autoload -Uz add-zsh-hook - add-zsh-hook chpwd chpwd_emacs - fi - - # Write to standard output the path to the file - # opened in the current buffer. - function efile { - local cmd="(buffer-file-name (window-buffer))" - "$EMACS_PLUGIN_LAUNCHER" --eval "$cmd" | tr -d \" - } - - # Write to standard output the directory of the file - # opened in the the current buffer - function ecd { - local cmd="(let ((buf-name (buffer-file-name (window-buffer)))) - (if buf-name (file-name-directory buf-name)))" - - local dir="$($EMACS_PLUGIN_LAUNCHER --eval $cmd | tr -d \")" - if [ -n "$dir" ] ;then - echo "$dir" - else - echo "can not deduce current buffer filename." >/dev/stderr - return 1 - fi - } + # add chpwd hook + autoload -Uz add-zsh-hook + add-zsh-hook chpwd chpwd_emacs fi -## Local Variables: -## mode: sh -## End: +# Write to standard output the path to the file +# opened in the current buffer. +function efile { + local cmd="(buffer-file-name (window-buffer))" + local file="$("$EMACS_PLUGIN_LAUNCHER" --eval "$cmd" | tr -d \")" + + if [[ -z "$file" ]]; then + echo "Can't deduce current buffer filename." >&2 + return 1 + fi + + echo "$file" +} + +# Write to standard output the directory of the file +# opened in the the current buffer +function ecd { + local file + file="$(efile)" || return $? + echo "${file:h}" +}