require("curses"); function show_message(m) local width = string.len(m) + 6; local win = curses.newwin(5, width, (lines - 5) / 2, (cols - width) / 2); win:keypad(true); win:attron(curses.COLOR_PAIR(curses.COLOR_RED)); win:box('|', '-', '+'); win:mvaddstr(2, 3, m); win:refresh(); win:getch(); win:delwin(); end curses.initscr(); curses.start_color(); curses.init_pair(curses.COLOR_BLUE, curses.COLOR_BLUE, curses.COLOR_WHITE); curses.init_pair(curses.COLOR_RED, curses.COLOR_RED, curses.COLOR_WHITE); curses.cbreak(); curses.noecho(); curses.keypad(curses.stdscr(), true); lines = curses.LINES(); cols = curses.COLS(); mmasks = { curses.BUTTON1_CLICKED, curses.BUTTON2_CLICKED, curses.BUTTON3_CLICKED, curses.BUTTON4_CLICKED }; table.foreachi(mmasks, function(_i, _m) curses.addmousemask(_m) end); curses.attron(curses.COLOR_PAIR(curses.COLOR_BLUE)); curses.attron(curses.A_BOLD); curses.mvaddstr((lines - 5) / 2, (cols - 10) / 2, "click"); curses.refresh(); while(true) do local c = curses.getch(); if (c == curses.KEY_MOUSE) then local r, id, x, y, z, bstate = curses.getmouse(); if (r) then show_message("id = " .. id .. ", x = " .. x .. ", y = " .. y .. ", z = " .. z .. ", bstate = " .. string.format("0x%x", bstate)); end break; end end curses.endwin();