From a6e9ded55fd2852168976ed4e2010e9a38726a74 Mon Sep 17 00:00:00 2001 From: Rob Hoelz Date: Mon, 25 Jun 2012 23:16:39 +0200 Subject: Import of first release of lua-term --- CHANGES | 2 ++ COPYING | 19 +++++++++++ README.md | 23 ++++++++++++++ core.c | 22 +++++++++++++ lua-term-0.1-1.rockspec | 21 +++++++++++++ term/colors.lua | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ term/init.lua | 24 ++++++++++++++ 7 files changed, 195 insertions(+) create mode 100644 CHANGES create mode 100644 COPYING create mode 100644 README.md create mode 100644 core.c create mode 100644 lua-term-0.1-1.rockspec create mode 100644 term/colors.lua create mode 100644 term/init.lua diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..e334205 --- /dev/null +++ b/CHANGES @@ -0,0 +1,2 @@ +0.01 2012-06-25 23:30:00 + - Initial release. Includes colors and isatty. diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..48de251 --- /dev/null +++ b/COPYING @@ -0,0 +1,19 @@ +Copyright (c) 2009 Rob Hoelz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9b67a96 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +Overview +-------- + +lua-term is a Lua module for manipulating a terminal. + +Installation +------------ + +lua-term is available on Luarocks. + +Usage +----- + +```lua + local term = require 'term' + local colors = term.colors -- or require 'term.colors' + + print(term.isatty(io.stdout)) -- true if standard output goes to the terminal + + print(color.red 'hello') + print(color.red .. 'hello' .. color.reset) + print(color.red, 'hello', color.reset) +``` diff --git a/core.c b/core.c new file mode 100644 index 0000000..04ff4ef --- /dev/null +++ b/core.c @@ -0,0 +1,22 @@ +#include +#include +#include + +static int +lua_isatty(lua_State *L) +{ + FILE *fp = (FILE *) luaL_checkudata(L, -1, LUA_FILEHANDLE); + + lua_pushboolean(L, isatty(fileno(fp))); + return 1; +} + +int +luaopen_term_core(lua_State *L) +{ + lua_newtable(L); + lua_pushcfunction(L, lua_isatty); + lua_setfield(L, -2, "isatty"); + + return 1; +} diff --git a/lua-term-0.1-1.rockspec b/lua-term-0.1-1.rockspec new file mode 100644 index 0000000..3ae9092 --- /dev/null +++ b/lua-term-0.1-1.rockspec @@ -0,0 +1,21 @@ +package = 'lua-term' +version = '0.1-1' + +source = { + url = 'https://github.com/hoelzro/lua-term.git', +} + +description = { + summary = 'Terminal functions for Lua', + homepage = 'https://github.com/hoelzro/lua-term', + license = "MIT/X11", +} + +build = { + modules = { + ['term'] = 'term/init.lua', + ['term.colors'] = 'term/colors.lua', + ['term.core'] = 'core.c', + }, + type = 'builtin', +} diff --git a/term/colors.lua b/term/colors.lua new file mode 100644 index 0000000..4ab9140 --- /dev/null +++ b/term/colors.lua @@ -0,0 +1,84 @@ +-- Copyright (c) 2009 Rob Hoelz +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +local pairs = pairs +local tostring = tostring +local setmetatable = setmetatable +local schar = string.char + +local colors = {} + +local colormt = {} + +function colormt:__tostring() + return self.value +end + +function colormt:__concat(other) + return tostring(self) .. tostring(other) +end + +function colormt:__call(s) + return self .. s .. colors.reset +end + +colormt.__metatable = {} + +local function makecolor(value) + return setmetatable({ value = schar(27) .. '[' .. tostring(value) .. 'm' }, colormt) +end + +local colorvalues = { + -- attributes + reset = 0, + clear = 0, + bright = 1, + dim = 2, + underscore = 4, + blink = 5, + reverse = 7, + hidden = 8, + + -- foreground + black = 30, + red = 31, + green = 32, + yellow = 33, + blue = 34, + magenta = 35, + cyan = 36, + white = 37, + + -- background + onblack = 40, + onred = 41, + ongreen = 42, + onyellow = 43, + onblue = 44, + onmagenta = 45, + oncyan = 46, + onwhite = 47, +} + +for c, v in pairs(colorvalues) do + colors[c] = makecolor(v) +end + +return colors diff --git a/term/init.lua b/term/init.lua new file mode 100644 index 0000000..07be081 --- /dev/null +++ b/term/init.lua @@ -0,0 +1,24 @@ +-- Copyright (c) 2009 Rob Hoelz +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +local term = require 'term.core' +term.colors = require 'term.colors' + +return term -- cgit v1.2.3-55-g6feb