终端应用程序的编程模型是什么样的?


看了一部分 Node.js readline 模块的代码,
https://github.com/joyent/node/blob/master/lib/readline.js#L1028
中间有一些代码看不懂, 像是对键盘原始的编码做处理, 还有写入字符的...


 switch (code) {
      /* xterm/gnome ESC O letter */
      case 'OP': key.name = 'f1'; break;
      case 'OQ': key.name = 'f2'; break;
      case 'OR': key.name = 'f3'; break;
      case 'OS': key.name = 'f4'; break;

      /* xterm/rxvt ESC [ number ~ */
      case '[11~': key.name = 'f1'; break;
      case '[12~': key.name = 'f2'; break;
      case '[13~': key.name = 'f3'; break;
      case '[14~': key.name = 'f4'; break;


 function moveCursor(stream, dx, dy) {
  if (dx < 0) {
    stream.write('\x1b[' + (-dx) + 'D');
  } else if (dx > 0) {
    stream.write('\x1b[' + dx + 'C');
  }

  if (dy < 0) {
    stream.write('\x1b[' + (-dy) + 'A');
  } else if (dy > 0) {
    stream.write('\x1b[' + dy + 'B');
  }
}
exports.moveCursor = moveCursor;

但是终端里的字符不像是图形界面抽象那么清晰,
而且有些操作之后光标会跳到意外的位置, 也让我难以理解.
所以想问, 终端应用程序的编程模型是什么样子的?

node.js 终端

唤潮鲛姬娜美 11 years ago

Your Answer