Change flag lines highlighter to use faces instead of colors
Fixes #130
This commit is contained in:
parent
504862fce7
commit
dc504284c3
|
@ -22,6 +22,8 @@ hook global WinSetOption filetype=(?!git-status).* %{
|
||||||
decl line-flag-list git_blame_flags
|
decl line-flag-list git_blame_flags
|
||||||
decl line-flag-list git_diff_flags
|
decl line-flag-list git_diff_flags
|
||||||
|
|
||||||
|
face GitBlame default,magenta
|
||||||
|
|
||||||
def -shell-params \
|
def -shell-params \
|
||||||
-docstring %sh{printf "%%{Git wrapping helper\navailable commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-blame\n log\n show\n show-diff\n status\n update-diff}"} \
|
-docstring %sh{printf "%%{Git wrapping helper\navailable commands:\n add\n rm\n blame\n commit\n checkout\n diff\n hide-blame\n log\n show\n show-diff\n status\n update-diff}"} \
|
||||||
-shell-completion %{
|
-shell-completion %{
|
||||||
|
@ -58,7 +60,7 @@ def -shell-params \
|
||||||
run_git_blame() {
|
run_git_blame() {
|
||||||
(
|
(
|
||||||
echo "eval -client '$kak_client' %{
|
echo "eval -client '$kak_client' %{
|
||||||
try %{ addhl flag_lines magenta git_blame_flags }
|
try %{ addhl flag_lines GitBlame git_blame_flags }
|
||||||
set buffer=$kak_bufname git_blame_flags ''
|
set buffer=$kak_bufname git_blame_flags ''
|
||||||
}" | kak -p ${kak_session}
|
}" | kak -p ${kak_session}
|
||||||
git blame "$@" --incremental ${kak_buffile} | awk -e '
|
git blame "$@" --incremental ${kak_buffile} | awk -e '
|
||||||
|
@ -66,10 +68,10 @@ def -shell-params \
|
||||||
if (line == "") { return; }
|
if (line == "") { return; }
|
||||||
text=substr(sha,1,8) " " dates[sha] " " authors[sha]
|
text=substr(sha,1,8) " " dates[sha] " " authors[sha]
|
||||||
gsub(":", "\\:", text)
|
gsub(":", "\\:", text)
|
||||||
gsub(",", "\\,", text)
|
# gsub("|", "\\|", text)
|
||||||
flag=line ",black," text
|
flag=line "|default|" text
|
||||||
for ( i=1; i < count; i++ ) {
|
for ( i=1; i < count; i++ ) {
|
||||||
flag=flag ":" line+i ",black," text
|
flag=flag ":" line+i "|default|" text
|
||||||
}
|
}
|
||||||
cmd = "kak -p " ENVIRON["kak_session"]
|
cmd = "kak -p " ENVIRON["kak_session"]
|
||||||
print "set -add buffer=" ENVIRON["kak_bufname"] " git_blame_flags %{" flag "}" | cmd
|
print "set -add buffer=" ENVIRON["kak_bufname"] " git_blame_flags %{" flag "}" | cmd
|
||||||
|
@ -94,7 +96,7 @@ def -shell-params \
|
||||||
git diff -U0 $kak_buffile | awk -e '
|
git diff -U0 $kak_buffile | awk -e '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
line=0
|
line=0
|
||||||
flags="0,red,."
|
flags="0|red|."
|
||||||
}
|
}
|
||||||
/^---.*/ {}
|
/^---.*/ {}
|
||||||
/^@@ -[0-9]+(,[0-9]+)? \+[0-9]+(,[0-9]+)? @@.*/ {
|
/^@@ -[0-9]+(,[0-9]+)? \+[0-9]+(,[0-9]+)? @@.*/ {
|
||||||
|
@ -105,10 +107,10 @@ def -shell-params \
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/^\+/ {
|
/^\+/ {
|
||||||
flags=flags ":" line ",green,+"
|
flags=flags ":" line "|green|+"
|
||||||
line++
|
line++
|
||||||
}
|
}
|
||||||
/^\-/ { flags=flags ":" line ",red,-" }
|
/^\-/ { flags=flags ":" line "|red|-" }
|
||||||
END { print "set buffer git_diff_flags ", flags }
|
END { print "set buffer git_diff_flags ", flags }
|
||||||
'
|
'
|
||||||
}
|
}
|
||||||
|
@ -150,7 +152,7 @@ def -shell-params \
|
||||||
}"
|
}"
|
||||||
;;
|
;;
|
||||||
show-diff)
|
show-diff)
|
||||||
echo "try %{ addhl flag_lines black git_diff_flags }"
|
echo "try %{ addhl flag_lines default,black git_diff_flags }"
|
||||||
update_diff
|
update_diff
|
||||||
;;
|
;;
|
||||||
update-diff) update_diff ;;
|
update-diff) update_diff ;;
|
||||||
|
|
|
@ -42,6 +42,13 @@ constexpr bool operator!=(const Face& lhs, const Face& rhs)
|
||||||
return not (lhs == rhs);
|
return not (lhs == rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr Face merge_faces(const Face& base, const Face& face)
|
||||||
|
{
|
||||||
|
return { face.fg == Color::Default ? base.fg : face.fg,
|
||||||
|
face.bg == Color::Default ? base.bg : face.bg,
|
||||||
|
face.attributes | base.attributes };
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // face_hh_INCLUDED
|
#endif // face_hh_INCLUDED
|
||||||
|
|
|
@ -155,12 +155,7 @@ void apply_highlighter(const Context& context,
|
||||||
auto apply_face = [](const Face& face)
|
auto apply_face = [](const Face& face)
|
||||||
{
|
{
|
||||||
return [&face](DisplayAtom& atom) {
|
return [&face](DisplayAtom& atom) {
|
||||||
if (face.fg != Color::Default)
|
atom.face = merge_faces(atom.face, face);
|
||||||
atom.face.fg = face.fg;
|
|
||||||
if (face.bg != Color::Default)
|
|
||||||
atom.face.bg = face.bg;
|
|
||||||
if (face.attributes != Attribute::Normal)
|
|
||||||
atom.face.attributes |= face.attributes;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -891,7 +886,8 @@ HighlighterAndId create_flag_lines_highlighter(HighlighterParameters params)
|
||||||
throw runtime_error("wrong parameter count");
|
throw runtime_error("wrong parameter count");
|
||||||
|
|
||||||
const String& option_name = params[1];
|
const String& option_name = params[1];
|
||||||
Color bg = str_to_color(params[0]);
|
String default_face = params[0];
|
||||||
|
get_face(default_face); // validate param
|
||||||
|
|
||||||
// throw if wrong option type
|
// throw if wrong option type
|
||||||
GlobalScope::instance().options()[option_name].get<Vector<LineAndFlag, MemoryDomain::Options>>();
|
GlobalScope::instance().options()[option_name].get<Vector<LineAndFlag, MemoryDomain::Options>>();
|
||||||
|
@ -902,6 +898,8 @@ HighlighterAndId create_flag_lines_highlighter(HighlighterParameters params)
|
||||||
auto& lines_opt = context.options()[option_name];
|
auto& lines_opt = context.options()[option_name];
|
||||||
auto& lines = lines_opt.get<Vector<LineAndFlag, MemoryDomain::Options>>();
|
auto& lines = lines_opt.get<Vector<LineAndFlag, MemoryDomain::Options>>();
|
||||||
|
|
||||||
|
auto def_face = get_face(default_face);
|
||||||
|
|
||||||
CharCount width = 0;
|
CharCount width = 0;
|
||||||
for (auto& l : lines)
|
for (auto& l : lines)
|
||||||
width = std::max(width, std::get<2>(l).char_length());
|
width = std::max(width, std::get<2>(l).char_length());
|
||||||
|
@ -915,7 +913,7 @@ HighlighterAndId create_flag_lines_highlighter(HighlighterParameters params)
|
||||||
String content = it != lines.end() ? std::get<2>(*it) : empty;
|
String content = it != lines.end() ? std::get<2>(*it) : empty;
|
||||||
content += String(' ', width - content.char_length());
|
content += String(' ', width - content.char_length());
|
||||||
DisplayAtom atom{std::move(content)};
|
DisplayAtom atom{std::move(content)};
|
||||||
atom.face = { it != lines.end() ? std::get<1>(*it) : Color::Default , bg };
|
atom.face = it != lines.end() ? merge_faces(get_face(std::get<1>(*it)), def_face) : def_face;
|
||||||
line.insert(line.begin(), std::move(atom));
|
line.insert(line.begin(), std::move(atom));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace Kakoune
|
||||||
|
|
||||||
void register_highlighters();
|
void register_highlighters();
|
||||||
|
|
||||||
using LineAndFlag = std::tuple<LineCount, Color, String>;
|
using LineAndFlag = std::tuple<LineCount, String, String>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ void option_from_string(StringView str, UnorderedMap<Key, Value, domain>& opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr char tuple_separator = ',';
|
constexpr char tuple_separator = '|';
|
||||||
|
|
||||||
template<size_t I, typename... Types>
|
template<size_t I, typename... Types>
|
||||||
struct TupleOptionDetail
|
struct TupleOptionDetail
|
||||||
|
@ -176,9 +176,9 @@ bool option_add(T&, const T&)
|
||||||
template<typename EffectiveType, typename LineType, typename ColumnType>
|
template<typename EffectiveType, typename LineType, typename ColumnType>
|
||||||
inline void option_from_string(StringView str, LineAndColumn<EffectiveType, LineType, ColumnType>& opt)
|
inline void option_from_string(StringView str, LineAndColumn<EffectiveType, LineType, ColumnType>& opt)
|
||||||
{
|
{
|
||||||
auto vals = split(str, tuple_separator);
|
auto vals = split(str, ',');
|
||||||
if (vals.size() != 2)
|
if (vals.size() != 2)
|
||||||
throw runtime_error(format("expected <line>{}<column>", tuple_separator));
|
throw runtime_error("expected <line>,<column>");
|
||||||
opt.line = str_to_int(vals[0]);
|
opt.line = str_to_int(vals[0]);
|
||||||
opt.column = str_to_int(vals[1]);
|
opt.column = str_to_int(vals[1]);
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ inline void option_from_string(StringView str, LineAndColumn<EffectiveType, Line
|
||||||
template<typename EffectiveType, typename LineType, typename ColumnType>
|
template<typename EffectiveType, typename LineType, typename ColumnType>
|
||||||
inline String option_to_string(const LineAndColumn<EffectiveType, LineType, ColumnType>& opt)
|
inline String option_to_string(const LineAndColumn<EffectiveType, LineType, ColumnType>& opt)
|
||||||
{
|
{
|
||||||
return to_string(opt.line) + tuple_separator + to_string(opt.column);
|
return format("{},{}", opt.line, opt.column);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum YesNoAsk
|
enum YesNoAsk
|
||||||
|
|
Loading…
Reference in New Issue
Block a user