# Directory tracking in emacs julia-repl

**URL:** <https://discourse.julialang.org/t/directory-tracking-in-emacs-julia-repl/31770>\
**Category:** Tooling\
**Tags:** emacs\
**Created:** [December 2, 2019, 7:16pm UTC](https://discourse.julialang.org/t/directory-tracking-in-emacs-julia-repl/31770 "2019-12-02T19:16:23Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![recri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/recri/32/5280_2.png) [@recri](https://discourse.julialang.org/u/recri)\
**Post date:** [December 2, 2019, 7:16pm UTC](https://discourse.julialang.org/t/directory-tracking-in-emacs-julia-repl/31770/1 "2019-12-02T19:16:23Z")

</div>

The following snippet for `.julia/config/startup.jl` implements directory, user, and host tracking for julia-repl.

```julia
# set up emacs directory, host, and user tracking for julia-repl
atreplinit() do repl
    if haskey(ENV, "INSIDE_EMACS") &&
        occursin(r",term:", ENV["INSIDE_EMACS"])
        # acquire REPL
        @eval import REPL
        # only initialize repl.interface if necessary
        if ! isdefined(repl, :interface)
            repl.interface = REPL.setup_interface(repl)
        end
        # install a new prompt_prefix
        repl.interface.modes[1].prompt_prefix = 
            ((old, user, host, cwd) ->
             (() ->
              ((ENV["LOGNAME"] != user ?
                "\033AnSiTu "*(user = ENV["LOGNAME"])*"\n" : "") *
               (gethostname() != host ?
                "\033AnSiTh "*(host = gethostname())*"\n" : "") *
               (pwd() != cwd ?
                "\033AnSiTc "*(cwd = pwd())*"\n" : "") *
               (isa(old, String) ? old : old()))))(
                   repl.interface.modes[1].prompt_prefix, "", "", ""
               )
    end
end
# end of set up emacs directory, host, and user tracking for julia-repl

```

It’s restricted to julia-repl by the test for `occursin(r",term:", ENV["INSIDE_EMACS"]`, and it’s careful not to overwrite any previous modifications to `repl.interface` or `prompt_prefix`, but it won’t pick up subsequent changes to the color of the `julia> ` prompt, and it’s vulnerable to some subsequent snippet blindly reinitializing `repl.interface`.

It’s been tested only on linux and mostly on recent versions of julia, I’m curious if it’s more generally useful.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [December 3, 2019, 8:51am UTC](https://discourse.julialang.org/t/directory-tracking-in-emacs-julia-repl/31770/2 "2019-12-03T08:51:53Z")

</div>

Neat!
