#!/usr/bin/env bash
# $Id: yemacs,v 1.21 2019/01/26 21:49:35 friedman Exp $

client()
{
    PATH=$ydir/src:$ydir/lib-src:$PATH
    EMACS_SERVER_FILE=gnuedit
    export EMACS_SERVER_FILE
    exec emacsclient --quiet --no-wait --eval "$@"
}

locate_build()
{
    ydir=
    for dir in ${builddirs[@]}; do
        test -d $dir || continue
        for subdir in $( cd $dir && ls -1r ); do
            if [ -d $dir/$subdir -a -f $dir/$subdir/src/emacs ]; then
                # Use /bin/pwd to follow symlinks
                ydir=$( cd $dir/$subdir && /bin/pwd )
                break 2
            fi
        done
    done

    case $ydir in
        '' ) return 1 ;;
    esac

    case $progname in
        emacs ) progname="$progname (${ydir##*/})" ;;
    esac

    test -e "$ydir/src/$progname"  || ln -s emacs "$ydir/src/$progname"
    test -f "$ydir/src/emacs.pdmp" || return 0

    path_exec=$( sed -n \
                     -e '/^#define PATH_EXEC/!d' \
                     -e 's/.*"\(.*\)".*/\1/p' \
                     -e q \
                     $ydir/src/epaths.h )
    mkdir -p $path_exec
    test -e $path_exec/emacs.pdmp ||
        ln -s --relative $ydir/src/emacs.pdmp $path_exec/emacs.pdmp

    return 0 # success
}

main()
{
    ulimit -c unlimited  # I want core dumps from emacs

    builddirs=( $HOME/src/emacs/build
                /export/src/emacs/build )

    case $1 in
        -login ) progname=-emacs ; shift ;;
        *      ) progname=emacs          ;;
    esac

    locate_build || exit $?

    case $1 in
        -attach )
            case $DISPLAY in
                '' ) client "(make-frame-on-tty \"$(tty)\" \"$TERM\")" ;;
                *  ) client "(make-frame-on-display \"$DISPLAY\")"    ;;
            esac > /dev/null ;;

        -workspaces )
            client "(let ((f (make-frame-on-display \"$DISPLAY\")))
                      (with-selected-frame f
                        (make-my-workspace-frames))
                      (delete-frame f))" ;;

        -eval ) client "$@" ;;
    esac

    YEMACS_EXECDIR=$ydir/src
    PATH=$YEMACS_EXECDIR:$PATH
    export YEMACS_EXECDIR PATH
    exec -a "$progname" $ydir/src/emacs "$@"
    exec emacs "$@"
}

main "$@"

# eof
