aboutsummaryrefslogtreecommitdiff
path: root/src/libcmd/editor-for.cc
blob: 868153e90476873013e92dd66e9b18e3fb2fdcaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "editor-for.hh"
#include "environment-variables.hh"
#include "source-path.hh"
#include "strings.hh"

namespace nix {

Strings editorFor(const SourcePath & file, uint32_t line)
{
    auto path = file.getPhysicalPath();
    if (!path)
        throw Error("cannot open '%s' in an editor because it has no physical path", file);
    auto editor = getEnv("EDITOR").value_or("cat");
    auto args = tokenizeString<Strings>(editor);
    if (line > 0 && (
        editor.find("emacs") != std::string::npos ||
        editor.find("nano") != std::string::npos ||
        editor.find("vim") != std::string::npos ||
        editor.find("kak") != std::string::npos))
        args.push_back(fmt("+%d", line));
    args.push_back(path->abs());
    return args;
}

}