SHOW:
|
|
- or go back to the newest paste.
| 1 | -- Buffer API, By Symmetryc | |
| 2 | -- Edited by AgentE382 to change ":" OO-syntax to "." OO-syntax. (First step to redirect target based on this.) | |
| 3 | -- Edited by AgentE382 to add preliminary redirect-target capability. | |
| 4 | -- Edited by AgentE382 to add full redirect-target functionality. | |
| 5 | return {
| |
| 6 | new = function() | |
| 7 | local self = {
| |
| 8 | act = {pos = {}};
| |
| 9 | pos = {};
| |
| 10 | back = colors.white; | |
| 11 | text = colors.lightGray; | |
| 12 | blink = true | |
| 13 | } | |
| 14 | ||
| 15 | function self.write(_str) | |
| 16 | local act = self.act | |
| 17 | local selfpos = self.pos | |
| 18 | local append = true | |
| 19 | if selfpos[1] ~= act.pos[1] or selfpos[2] ~= act.pos[2] then | |
| 20 | act[#act + 1] = {term.setCursorPos, selfpos[1], selfpos[2]}
| |
| 21 | append = false | |
| 22 | end | |
| 23 | if self.back ~= act.back then | |
| 24 | act[#act + 1] = {term.setBackgroundColor, self.back}
| |
| 25 | act.back = self.back | |
| 26 | append = false | |
| 27 | end | |
| 28 | if self.text ~= act.text then | |
| 29 | act[#act + 1] = {term.setTextColor, self.text}
| |
| 30 | act.text = self.text | |
| 31 | append = false | |
| 32 | end | |
| 33 | if self.blink ~= act.blink then | |
| 34 | act[#act + 1] = {term.setCursorBlink, self.blink}
| |
| 35 | act.blink = self.blink | |
| 36 | append = false | |
| 37 | end | |
| 38 | for line, nl in _str:gmatch("([^\n]*)(\n?)") do
| |
| 39 | if append then | |
| 40 | act[#act][2] = act[#act][2]..line | |
| 41 | append = false | |
| 42 | else | |
| 43 | act[#act + 1] = {term.write, line}
| |
| 44 | end | |
| 45 | selfpos[1] = selfpos[1] + #line | |
| 46 | if nl == "\n" then | |
| 47 | selfpos[1] = 1 | |
| 48 | selfpos[2] = selfpos[2] + 1 | |
| 49 | act[#act + 1] = {term.setCursorPos, 1, selfpos[2]}
| |
| 50 | end | |
| 51 | end | |
| 52 | act.pos = {selfpos[1], selfpos[2]}
| |
| 53 | return self | |
| 54 | end; | |
| 55 | function self.draw(self) | |
| 56 | for i, v in ipairs(self.act) do | |
| 57 | if v[3] then | |
| 58 | v[1](v[2], v[3]) | |
| 59 | else | |
| 60 | v[1](v[2]) | |
| 61 | - | for i = #act, 1 do |
| 61 | + | |
| 62 | - | act[i] = nil |
| 62 | + | |
| 63 | self.act = {}
| |
| 64 | return self | |
| 65 | end; | |
| 66 | ||
| 67 | function self.clear() | |
| 68 | local a = self.act | |
| 69 | for i = #a, 1 do | |
| 70 | a[i] = nil | |
| 71 | end | |
| 72 | return self | |
| 73 | end | |
| 74 | ||
| 75 | function self.clearLine() | |
| 76 | local a = self.act | |
| 77 | if a[#a][1] ~= term.clearLine then | |
| 78 | a[#a + 1] = {term.clearLine}
| |
| 79 | end | |
| 80 | return self | |
| 81 | end | |
| 82 | ||
| 83 | - | |
| 83 | + | |
| 84 | local p = self.pos | |
| 85 | return p[1], p[2] | |
| 86 | end | |
| 87 | ||
| 88 | function self.setCursorPos(x, y) | |
| 89 | local p = self.pos | |
| 90 | - | self.redirect = term.redirect |
| 90 | + | |
| 91 | return self | |
| 92 | - | self.restore = term.restore |
| 92 | + | |
| 93 | ||
| 94 | function self.setCursorBlink(state) | |
| 95 | - | |
| 95 | + | self.blink = state |
| 96 | return self | |
| 97 | end | |
| 98 | ||
| 99 | self.isColor = term.isColor | |
| 100 | ||
| 101 | self.getSize = term.getSize | |
| 102 | ||
| 103 | function self.redirect(target) | |
| 104 | term.redirect(target) | |
| 105 | return self | |
| 106 | end | |
| 107 | ||
| 108 | function self.restore() | |
| 109 | term.restore() | |
| 110 | return self | |
| 111 | end | |
| 112 | ||
| 113 | function self.scroll(n) | |
| 114 | local a = self.act | |
| 115 | if a[#a][1] ~= term.scroll then | |
| 116 | a[#a + 1] = {term.scroll, n}
| |
| 117 | else | |
| 118 | local s = a[#a] | |
| 119 | s[2] = s[2] + n | |
| 120 | end | |
| 121 | return self | |
| 122 | end | |
| 123 | ||
| 124 | function self.setTextColor(color) | |
| 125 | self.text = color | |
| 126 | return self | |
| 127 | end | |
| 128 | ||
| 129 | function self.setBackgroundColor(color) | |
| 130 | self.back = color | |
| 131 | return self | |
| 132 | end | |
| 133 | ||
| 134 | return self | |
| 135 | end; | |
| 136 | } |