mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-16 05:47:06 +09:00
Add line numbers
This commit is contained in:
29
src/view.d
29
src/view.d
@@ -9,6 +9,7 @@ import std.utf: count;
|
|||||||
|
|
||||||
class View {
|
class View {
|
||||||
uint topline;
|
uint topline;
|
||||||
|
uint xOffset;
|
||||||
|
|
||||||
uint width;
|
uint width;
|
||||||
uint height;
|
uint height;
|
||||||
@@ -113,7 +114,7 @@ class View {
|
|||||||
} else if (e.key == Key.arrowLeft) {
|
} else if (e.key == Key.arrowLeft) {
|
||||||
cursorLeft();
|
cursorLeft();
|
||||||
} else if (e.key == Key.mouseLeft) {
|
} else if (e.key == Key.mouseLeft) {
|
||||||
cursor.x = e.x;
|
cursor.x = e.x - xOffset;
|
||||||
cursor.y = e.y + topline;
|
cursor.y = e.y + topline;
|
||||||
if (cursor.y - topline > height-1) {
|
if (cursor.y - topline > height-1) {
|
||||||
cursor.y = height + topline-1;
|
cursor.y = height + topline-1;
|
||||||
@@ -164,7 +165,7 @@ class View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void display(bool drawCursor = true) {
|
void display() {
|
||||||
uint x, y;
|
uint x, y;
|
||||||
|
|
||||||
string[] lines;
|
string[] lines;
|
||||||
@@ -174,7 +175,21 @@ class View {
|
|||||||
lines = buf.lines[topline .. topline + height];
|
lines = buf.lines[topline .. topline + height];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ulong maxLength = to!string(buf.lines.length).length;
|
||||||
|
xOffset = cast(int) maxLength + 1;
|
||||||
|
|
||||||
foreach (i, line; lines) {
|
foreach (i, line; lines) {
|
||||||
|
// Write the line number
|
||||||
|
string lineNum = to!string(i + topline + 1);
|
||||||
|
foreach (_; 0 .. maxLength - lineNum.length) {
|
||||||
|
setCell(cast(int) x++, cast(int) y, ' ', Color.basic, Color.black);
|
||||||
|
}
|
||||||
|
foreach (dchar ch; lineNum) {
|
||||||
|
setCell(cast(int) x++, cast(int) y, ch, Color.basic, Color.black);
|
||||||
|
}
|
||||||
|
setCell(cast(int) x++, cast(int) y, ' ', Color.basic | Attribute.bold, Color.black);
|
||||||
|
|
||||||
|
// Write the line
|
||||||
foreach (dchar ch; line) {
|
foreach (dchar ch; line) {
|
||||||
setCell(x++, y, ch, Color.basic, Color.basic);
|
setCell(x++, y, ch, Color.basic, Color.basic);
|
||||||
}
|
}
|
||||||
@@ -182,12 +197,10 @@ class View {
|
|||||||
x = 0;
|
x = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drawCursor) {
|
if (cursor.y - topline < 0 || cursor.y - topline > height-1) {
|
||||||
if (cursor.y - topline < 0 || cursor.y - topline > height-1) {
|
hideCursor();
|
||||||
hideCursor();
|
} else {
|
||||||
} else {
|
setCursor(cursor.x + xOffset, cursor.y - topline);
|
||||||
setCursor(cursor.x, cursor.y - topline);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sl.display();
|
sl.display();
|
||||||
|
|||||||
Reference in New Issue
Block a user