Merge remote-tracking branch 'lenormf/drop-travis'

This commit is contained in:
Maxime Coste 2021-09-21 21:08:59 +10:00
commit 9ea1d82135
3 changed files with 27 additions and 106 deletions

View File

@ -1,41 +0,0 @@
language: cpp
sudo: false
os:
- linux
- osx
osx_image: xcode10.1
compiler:
- clang
- gcc
env:
global:
- secure: "R+NxqtytOslIcQ/eCbLoZhImsgYdJnljfjANdieFQGune9ACPPQL0YanXkF49c9SWGBSxrAcute0egQzv2CU2+ivSQIX/xnMebKHiOmSPYBoxX+VgxLT3U1itUYlpYwixo9rF8UnGdlgXid6oENSiCvfWtNKoM2qOL0Ttw31J9E="
before_install: if [ "$CXX" = "g++" ]; then export CXX=g++-7; fi
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- libstdc++-7-dev
- g++-7
- libncursesw5-dev
homebrew:
update: true
packages: gcc@7
coverity_scan:
project:
name: "mawww/kakoune"
description: "Build submitted via Travis CI"
notification_email: frrrwww@gmail.com
build_command_prepend: "cd src && make clean"
build_command: "make -j4"
branch_pattern: coverity-scan
script: cd src && make && make test

View File

@ -1,9 +1,7 @@
= image:{logo}[K,30,30,link="{website}",title="Kakoune logo by p0nce"] Kakoune image:{travis-img}[link="{travis-url}"] image:{cirrus-img}[link="{cirrus-url}"] image:{irc-img}[link="{irc-url}"] = image:{logo}[K,30,30,link="{website}",title="Kakoune logo by p0nce"] Kakoune image:{cirrus-img}[link="{cirrus-url}"] image:{irc-img}[link="{irc-url}"]
ifdef::env-github,env-browser[:outfilesuffix: .asciidoc] ifdef::env-github,env-browser[:outfilesuffix: .asciidoc]
:logo: https://rawgit.com/mawww/kakoune/master/doc/kakoune_logo.svg :logo: https://rawgit.com/mawww/kakoune/master/doc/kakoune_logo.svg
:website: https://kakoune.org :website: https://kakoune.org
:travis-img: https://travis-ci.org/mawww/kakoune.svg?branch=master
:travis-url: https://travis-ci.org/mawww/kakoune
:cirrus-img: https://api.cirrus-ci.com/github/mawww/kakoune.svg :cirrus-img: https://api.cirrus-ci.com/github/mawww/kakoune.svg
:cirrus-url: https://cirrus-ci.com/github/mawww/kakoune :cirrus-url: https://cirrus-ci.com/github/mawww/kakoune
:irc-img: https://img.shields.io/badge/IRC-%23kakoune-blue.svg :irc-img: https://img.shields.io/badge/IRC-%23kakoune-blue.svg

View File

@ -286,7 +286,7 @@ void TerminalUI::Screen::output(bool force, bool synchronized, Writer& writer)
// iTerm2 "begin synchronized update" sequence // iTerm2 "begin synchronized update" sequence
if (synchronized) if (synchronized)
writer.write("\033P=1s\033\\"); writer.write("\033[?2026h");
if (force) if (force)
{ {
@ -299,77 +299,41 @@ void TerminalUI::Screen::output(bool force, bool synchronized, Writer& writer)
return (hash_value(line.atoms) << 1) | 1; // ensure non-zero return (hash_value(line.atoms) << 1) | 1; // ensure non-zero
}; };
struct Change { int keep; int add; int del; }; for (int line = 0; line < (int)size.line; ++line)
Vector<Change> changes{Change{}};
auto new_hashes = ArrayView{lines.get(), (size_t)size.line} | transform(hash_line);
for_each_diff(hashes.get(), (int)size.line,
new_hashes.begin(), (int)size.line,
[&changes](DiffOp op, int len) mutable {
switch (op)
{
case DiffOp::Keep:
changes.push_back({len, 0, 0});
break;
case DiffOp::Add:
changes.back().add += len;
break;
case DiffOp::Remove:
changes.back().del += len;
break;
}
});
std::copy(new_hashes.begin(), new_hashes.end(), hashes.get());
int line = 0;
for (auto& change : changes)
{ {
line += change.keep; auto hash = hash_line(lines[line]);
if (int del = change.del - change.add; del > 0) if (hash == hashes[line])
{ continue;
format_with(writer, "\033[{}H\033[{}M", line + 1, del); hashes[line] = hash;
line -= del;
}
line += change.del;
}
line = 0; format_with(writer, "\033[{}H", line + 1);
for (auto& change : changes)
{
line += change.keep;
for (int i = 0; i < change.add; ++i)
{
if (int add = change.add - change.del; i == 0 and add > 0)
format_with(writer, "\033[{}H\033[{}L", line + 1, add);
else
format_with(writer, "\033[{}H", line + 1);
ColumnCount pending_move = 0; ColumnCount pending_move = 0;
for (auto& [text, skip, face] : lines[line++].atoms) for (auto& [text, skip, face] : lines[line].atoms)
{
if (text.empty() and skip == 0)
continue;
if (pending_move != 0)
{ {
if (text.empty() and skip == 0) format_with(writer, "\033[{}C", (int)pending_move);
continue; pending_move = 0;
if (pending_move != 0)
{
format_with(writer, "\033[{}C", (int)pending_move);
pending_move = 0;
}
set_face(face, writer);
writer.write(text);
if (skip > 3 and face.attributes == Attribute{})
{
writer.write("\033[K");
pending_move = skip;
}
else if (skip > 0)
writer.write(String{' ', skip});
} }
set_face(face, writer);
writer.write(text);
if (skip > 3 and face.attributes == Attribute{})
{
writer.write("\033[K");
pending_move = skip;
}
else if (skip > 0)
writer.write(String{' ', skip});
} }
} }
// iTerm2 "end synchronized update" sequence // iTerm2 "end synchronized update" sequence
if (synchronized) if (synchronized)
writer.write("\033P=2s\033\\"); writer.write("\033[?2026l");
} }
constexpr int TerminalUI::default_shift_function_key; constexpr int TerminalUI::default_shift_function_key;