/// module imap.system; version (linux) : import core.sys.linux.termios; import core.stdc.stdio; import core.stdc.string; import core.stdc.errno; import imap.sil : SILdoc; /// termios getTerminalAttributes() { import std.exception : enforce; import std.format : format; import std.string : fromStringz; termios t; enforce(tcgetattr(fileno(stdin), &t) == 0, format!"getting terminal attributes: %s"(strerror(errno).fromStringz)); return t; } /// void setTerminalAttributes(termios terminalAttributes, int optionalActions = TCSAFLUSH) { import std.exception : enforce; import std.string : fromStringz; import std.format : format; enforce(tcsetattr(fileno(stdin), optionalActions, &terminalAttributes) == 0, format!"setting term attributes; %s\n"(strerror(errno).fromStringz)); } @SILdoc("Enable character echoing.") void enableEcho() { termios t = getTerminalAttributes(); t.c_lflag |= (ECHO); t.c_lflag &= ~(ECHONL); t.setTerminalAttributes(TCSAFLUSH); } @SILdoc("Enable character echoing.") void disableEcho() { termios t = getTerminalAttributes(); t.c_lflag &= ~(ECHO); t.c_lflag |= (ECHONL); t.setTerminalAttributes(TCSAFLUSH); }