Merge remote-tracking branch 'lenormf/drop-travis'
This commit is contained in:
commit
9ea1d82135
41
.travis.yml
41
.travis.yml
|
@ -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
|
|
@ -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]
|
||||
:logo: https://rawgit.com/mawww/kakoune/master/doc/kakoune_logo.svg
|
||||
: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-url: https://cirrus-ci.com/github/mawww/kakoune
|
||||
:irc-img: https://img.shields.io/badge/IRC-%23kakoune-blue.svg
|
||||
|
|
|
@ -286,7 +286,7 @@ void TerminalUI::Screen::output(bool force, bool synchronized, Writer& writer)
|
|||
|
||||
// iTerm2 "begin synchronized update" sequence
|
||||
if (synchronized)
|
||||
writer.write("\033P=1s\033\\");
|
||||
writer.write("\033[?2026h");
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
struct Change { int keep; int add; int del; };
|
||||
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)
|
||||
for (int line = 0; line < (int)size.line; ++line)
|
||||
{
|
||||
line += change.keep;
|
||||
if (int del = change.del - change.add; del > 0)
|
||||
{
|
||||
format_with(writer, "\033[{}H\033[{}M", line + 1, del);
|
||||
line -= del;
|
||||
}
|
||||
line += change.del;
|
||||
}
|
||||
auto hash = hash_line(lines[line]);
|
||||
if (hash == hashes[line])
|
||||
continue;
|
||||
hashes[line] = hash;
|
||||
|
||||
line = 0;
|
||||
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);
|
||||
format_with(writer, "\033[{}H", line + 1);
|
||||
|
||||
ColumnCount pending_move = 0;
|
||||
for (auto& [text, skip, face] : lines[line++].atoms)
|
||||
ColumnCount pending_move = 0;
|
||||
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)
|
||||
continue;
|
||||
|
||||
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});
|
||||
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});
|
||||
}
|
||||
}
|
||||
|
||||
// iTerm2 "end synchronized update" sequence
|
||||
if (synchronized)
|
||||
writer.write("\033P=2s\033\\");
|
||||
writer.write("\033[?2026l");
|
||||
}
|
||||
|
||||
constexpr int TerminalUI::default_shift_function_key;
|
||||
|
|
Loading…
Reference in New Issue
Block a user