Files
lix/src/libcmd/editor-for.cc
T
Raito Bezarius f76b2961e7 chore(libcmd): license it under LGPL-2.1-only
Progress towards REUSE compliance.

Change-Id: I0f9d13cb2ceaedab4a1695bd90f57d86ee8cb3e5
Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-08-10 20:47:02 +02:00

29 lines
836 B
C++

// SPDX-FileCopyrightText: 2024 Nix and Lix Authors
//
// SPDX-License-Identifier: LGPL-2.1-only
#include "editor-for.hh"
#include "environment-variables.hh"
#include "source-path.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;
}
}