| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent a4b6668 commit 7a8232a
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -398,6 +398,19 @@ reading input from a TTY stream. The position of cursor determines the | |||
| 398 | 398 | portion of the input string that will be modified as input is processed, | |
| 399 | 399 | as well as the column where the terminal caret will be rendered. | |
| 400 | 400 | ||
| 401 | + ### `rl.getCursorPos()` | ||
| 402 | + <!-- YAML | ||
| 403 | + added: REPLACEME | ||
| 404 | + --> | ||
| 405 | + | ||
| 406 | + * Returns: {Object} | ||
| 407 | + * `rows` {number} the row of the prompt the cursor currently lands on | ||
| 408 | + * `cols` {number} the screen column the cursor currently lands on | ||
| 409 | + | ||
| 410 | + Returns the real position of the cursor in relation to the input | ||
| 411 | + prompt + string. Long input (wrapping) strings, as well as multiple | ||
| 412 | + line prompts are included in the calculations. | ||
| 413 | + | ||
| 401 | 414 | ## `readline.clearLine(stream, dir[, callback])` | |
| 402 | 415 | <!-- YAML | |
| 403 | 416 | added: v0.7.7 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -366,7 +366,7 @@ Interface.prototype._refreshLine = function() { | |||
| 366 | 366 | const lineRows = dispPos.rows; | |
| 367 | 367 | ||
| 368 | 368 | // cursor position | |
| 369 | - const cursorPos = this._getCursorPos(); | ||
| 369 | + const cursorPos = this.getCursorPos(); | ||
| 370 | 370 | ||
| 371 | 371 | // First move to the bottom of the current line, based on cursor pos | |
| 372 | 372 | const prevRows = this.prevRows || 0; | |
@@ -482,7 +482,7 @@ Interface.prototype._insertString = function(c) { | |||
| 482 | 482 | this.line += c; | |
| 483 | 483 | this.cursor += c.length; | |
| 484 | 484 | ||
| 485 | - if (this._getCursorPos().cols === 0) { | ||
| 485 | + if (this.getCursorPos().cols === 0) { | ||
| 486 | 486 | this._refreshLine(); | |
| 487 | 487 | } else { | |
| 488 | 488 | this._writeToOutput(c); | |
@@ -761,7 +761,7 @@ Interface.prototype._getDisplayPos = function(str) { | |||
| 761 | 761 | ||
| 762 | 762 | ||
| 763 | 763 | // Returns current cursor's position and line | |
| 764 | - Interface.prototype._getCursorPos = function() { | ||
| 764 | + Interface.prototype.getCursorPos = function() { | ||
| 765 | 765 | const columns = this.columns; | |
| 766 | 766 | const strBeforeCursor = this._prompt + this.line.substring(0, this.cursor); | |
| 767 | 767 | const dispPos = this._getDisplayPos( | |
@@ -778,20 +778,21 @@ Interface.prototype._getCursorPos = function() { | |||
| 778 | 778 | } | |
| 779 | 779 | return { cols: cols, rows: rows }; | |
| 780 | 780 | }; | |
| 781 | + Interface.prototype._getCursorPos = Interface.prototype.getCursorPos; | ||
| 781 | 782 | ||
| 782 | 783 | ||
| 783 | 784 | // This function moves cursor dx places to the right | |
| 784 | 785 | // (-dx for left) and refreshes the line if it is needed | |
| 785 | 786 | Interface.prototype._moveCursor = function(dx) { | |
| 786 | 787 | const oldcursor = this.cursor; | |
| 787 | - const oldPos = this._getCursorPos(); | ||
| 788 | + const oldPos = this.getCursorPos(); | ||
| 788 | 789 | this.cursor += dx; | |
| 789 | 790 | ||
| 790 | 791 | // bounds check | |
| 791 | 792 | if (this.cursor < 0) this.cursor = 0; | |
| 792 | 793 | else if (this.cursor > this.line.length) this.cursor = this.line.length; | |
| 793 | 794 | ||
| 794 | - const newPos = this._getCursorPos(); | ||
| 795 | + const newPos = this.getCursorPos(); | ||
| 795 | 796 | ||
| 796 | 797 | // Check if cursors are in the same line | |
| 797 | 798 | if (oldPos.rows === newPos.rows) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -570,7 +570,7 @@ function isWarned(emitter) { | |||
| 570 | 570 | rli.question(expectedLines[0], function() { | |
| 571 | 571 | rli.close(); | |
| 572 | 572 | }); | |
| 573 | - const cursorPos = rli._getCursorPos(); | ||
| 573 | + const cursorPos = rli.getCursorPos(); | ||
| 574 | 574 | assert.strictEqual(cursorPos.rows, 0); | |
| 575 | 575 | assert.strictEqual(cursorPos.cols, expectedLines[0].length); | |
| 576 | 576 | rli.close(); | |
@@ -586,7 +586,7 @@ function isWarned(emitter) { | |||
| 586 | 586 | rli.question(expectedLines.join('\n'), function() { | |
| 587 | 587 | rli.close(); | |
| 588 | 588 | }); | |
| 589 | - const cursorPos = rli._getCursorPos(); | ||
| 589 | + const cursorPos = rli.getCursorPos(); | ||
| 590 | 590 | assert.strictEqual(cursorPos.rows, expectedLines.length - 1); | |
| 591 | 591 | assert.strictEqual(cursorPos.cols, expectedLines.slice(-1)[0].length); | |
| 592 | 592 | rli.close(); | |
@@ -603,11 +603,11 @@ function isWarned(emitter) { | |||
| 603 | 603 | }); | |
| 604 | 604 | fi.emit('data', 'the quick brown fox'); | |
| 605 | 605 | fi.emit('keypress', '.', { ctrl: true, name: 'a' }); | |
| 606 | - let cursorPos = rli._getCursorPos(); | ||
| 606 | + let cursorPos = rli.getCursorPos(); | ||
| 607 | 607 | assert.strictEqual(cursorPos.rows, 0); | |
| 608 | 608 | assert.strictEqual(cursorPos.cols, 0); | |
| 609 | 609 | fi.emit('keypress', '.', { ctrl: true, name: 'e' }); | |
| 610 | - cursorPos = rli._getCursorPos(); | ||
| 610 | + cursorPos = rli.getCursorPos(); | ||
| 611 | 611 | assert.strictEqual(cursorPos.rows, 0); | |
| 612 | 612 | assert.strictEqual(cursorPos.cols, 19); | |
| 613 | 613 | rli.close(); | |
@@ -623,28 +623,28 @@ function isWarned(emitter) { | |||
| 623 | 623 | terminal: terminal | |
| 624 | 624 | }); | |
| 625 | 625 | fi.emit('data', 'the quick brown fox'); | |
| 626 | - let cursorPos = rli._getCursorPos(); | ||
| 626 | + let cursorPos = rli.getCursorPos(); | ||
| 627 | 627 | assert.strictEqual(cursorPos.rows, 0); | |
| 628 | 628 | assert.strictEqual(cursorPos.cols, 19); | |
| 629 | 629 | ||
| 630 | 630 | // Back one character | |
| 631 | 631 | fi.emit('keypress', '.', { ctrl: true, name: 'b' }); | |
| 632 | - cursorPos = rli._getCursorPos(); | ||
| 632 | + cursorPos = rli.getCursorPos(); | ||
| 633 | 633 | assert.strictEqual(cursorPos.rows, 0); | |
| 634 | 634 | assert.strictEqual(cursorPos.cols, 18); | |
| 635 | 635 | // Back one character | |
| 636 | 636 | fi.emit('keypress', '.', { ctrl: true, name: 'b' }); | |
| 637 | - cursorPos = rli._getCursorPos(); | ||
| 637 | + cursorPos = rli.getCursorPos(); | ||
| 638 | 638 | assert.strictEqual(cursorPos.rows, 0); | |
| 639 | 639 | assert.strictEqual(cursorPos.cols, 17); | |
| 640 | 640 | // Forward one character | |
| 641 | 641 | fi.emit('keypress', '.', { ctrl: true, name: 'f' }); | |
| 642 | - cursorPos = rli._getCursorPos(); | ||
| 642 | + cursorPos = rli.getCursorPos(); | ||
| 643 | 643 | assert.strictEqual(cursorPos.rows, 0); | |
| 644 | 644 | assert.strictEqual(cursorPos.cols, 18); | |
| 645 | 645 | // Forward one character | |
| 646 | 646 | fi.emit('keypress', '.', { ctrl: true, name: 'f' }); | |
| 647 | - cursorPos = rli._getCursorPos(); | ||
| 647 | + cursorPos = rli.getCursorPos(); | ||
| 648 | 648 | assert.strictEqual(cursorPos.rows, 0); | |
| 649 | 649 | assert.strictEqual(cursorPos.cols, 19); | |
| 650 | 650 | rli.close(); | |
@@ -663,13 +663,13 @@ function isWarned(emitter) { | |||
| 663 | 663 | ||
| 664 | 664 | // Move left one character/code point | |
| 665 | 665 | fi.emit('keypress', '.', { name: 'left' }); | |
| 666 | - let cursorPos = rli._getCursorPos(); | ||
| 666 | + let cursorPos = rli.getCursorPos(); | ||
| 667 | 667 | assert.strictEqual(cursorPos.rows, 0); | |
| 668 | 668 | assert.strictEqual(cursorPos.cols, 0); | |
| 669 | 669 | ||
| 670 | 670 | // Move right one character/code point | |
| 671 | 671 | fi.emit('keypress', '.', { name: 'right' }); | |
| 672 | - cursorPos = rli._getCursorPos(); | ||
| 672 | + cursorPos = rli.getCursorPos(); | ||
| 673 | 673 | assert.strictEqual(cursorPos.rows, 0); | |
| 674 | 674 | if (common.hasIntl) { | |
| 675 | 675 | assert.strictEqual(cursorPos.cols, 2); | |
@@ -697,12 +697,12 @@ function isWarned(emitter) { | |||
| 697 | 697 | ||
| 698 | 698 | // Move left one character/code point | |
| 699 | 699 | fi.emit('keypress', '.', { name: 'left' }); | |
| 700 | - let cursorPos = rli._getCursorPos(); | ||
| 700 | + let cursorPos = rli.getCursorPos(); | ||
| 701 | 701 | assert.strictEqual(cursorPos.rows, 0); | |
| 702 | 702 | assert.strictEqual(cursorPos.cols, 0); | |
| 703 | 703 | ||
| 704 | 704 | fi.emit('data', '🐕'); | |
| 705 | - cursorPos = rli._getCursorPos(); | ||
| 705 | + cursorPos = rli.getCursorPos(); | ||
| 706 | 706 | assert.strictEqual(cursorPos.rows, 0); | |
| 707 | 707 | ||
| 708 | 708 | if (common.hasIntl) { | |
@@ -733,7 +733,7 @@ function isWarned(emitter) { | |||
| 733 | 733 | ||
| 734 | 734 | // Move left one character/code point | |
| 735 | 735 | fi.emit('keypress', '.', { name: 'right' }); | |
| 736 | - let cursorPos = rli._getCursorPos(); | ||
| 736 | + let cursorPos = rli.getCursorPos(); | ||
| 737 | 737 | assert.strictEqual(cursorPos.rows, 0); | |
| 738 | 738 | if (common.hasIntl) { | |
| 739 | 739 | assert.strictEqual(cursorPos.cols, 2); | |
@@ -744,7 +744,7 @@ function isWarned(emitter) { | |||
| 744 | 744 | } | |
| 745 | 745 | ||
| 746 | 746 | fi.emit('data', '🐕'); | |
| 747 | - cursorPos = rli._getCursorPos(); | ||
| 747 | + cursorPos = rli.getCursorPos(); | ||
| 748 | 748 | assert.strictEqual(cursorPos.rows, 0); | |
| 749 | 749 | if (common.hasIntl) { | |
| 750 | 750 | assert.strictEqual(cursorPos.cols, 4); | |
@@ -770,19 +770,19 @@ function isWarned(emitter) { | |||
| 770 | 770 | }); | |
| 771 | 771 | fi.emit('data', 'the quick brown fox'); | |
| 772 | 772 | fi.emit('keypress', '.', { ctrl: true, name: 'left' }); | |
| 773 | - let cursorPos = rli._getCursorPos(); | ||
| 773 | + let cursorPos = rli.getCursorPos(); | ||
| 774 | 774 | assert.strictEqual(cursorPos.rows, 0); | |
| 775 | 775 | assert.strictEqual(cursorPos.cols, 16); | |
| 776 | 776 | fi.emit('keypress', '.', { meta: true, name: 'b' }); | |
| 777 | - cursorPos = rli._getCursorPos(); | ||
| 777 | + cursorPos = rli.getCursorPos(); | ||
| 778 | 778 | assert.strictEqual(cursorPos.rows, 0); | |
| 779 | 779 | assert.strictEqual(cursorPos.cols, 10); | |
| 780 | 780 | fi.emit('keypress', '.', { ctrl: true, name: 'right' }); | |
| 781 | - cursorPos = rli._getCursorPos(); | ||
| 781 | + cursorPos = rli.getCursorPos(); | ||
| 782 | 782 | assert.strictEqual(cursorPos.rows, 0); | |
| 783 | 783 | assert.strictEqual(cursorPos.cols, 16); | |
| 784 | 784 | fi.emit('keypress', '.', { meta: true, name: 'f' }); | |
| 785 | - cursorPos = rli._getCursorPos(); | ||
| 785 | + cursorPos = rli.getCursorPos(); | ||
| 786 | 786 | assert.strictEqual(cursorPos.rows, 0); | |
| 787 | 787 | assert.strictEqual(cursorPos.cols, 19); | |
| 788 | 788 | rli.close(); | |
@@ -884,13 +884,13 @@ function isWarned(emitter) { | |||
| 884 | 884 | terminal: terminal | |
| 885 | 885 | }); | |
| 886 | 886 | fi.emit('data', 'the quick brown fox'); | |
| 887 | - let cursorPos = rli._getCursorPos(); | ||
| 887 | + let cursorPos = rli.getCursorPos(); | ||
| 888 | 888 | assert.strictEqual(cursorPos.rows, 0); | |
| 889 | 889 | assert.strictEqual(cursorPos.cols, 19); | |
| 890 | 890 | ||
| 891 | 891 | // Delete left character | |
| 892 | 892 | fi.emit('keypress', '.', { ctrl: true, name: 'h' }); | |
| 893 | - cursorPos = rli._getCursorPos(); | ||
| 893 | + cursorPos = rli.getCursorPos(); | ||
| 894 | 894 | assert.strictEqual(cursorPos.rows, 0); | |
| 895 | 895 | assert.strictEqual(cursorPos.cols, 18); | |
| 896 | 896 | rli.on('line', common.mustCall((line) => { | |
@@ -910,7 +910,7 @@ function isWarned(emitter) { | |||
| 910 | 910 | terminal: terminal | |
| 911 | 911 | }); | |
| 912 | 912 | fi.emit('data', '💻'); | |
| 913 | - let cursorPos = rli._getCursorPos(); | ||
| 913 | + let cursorPos = rli.getCursorPos(); | ||
| 914 | 914 | assert.strictEqual(cursorPos.rows, 0); | |
| 915 | 915 | if (common.hasIntl) { | |
| 916 | 916 | assert.strictEqual(cursorPos.cols, 2); | |
@@ -919,7 +919,7 @@ function isWarned(emitter) { | |||
| 919 | 919 | } | |
| 920 | 920 | // Delete left character | |
| 921 | 921 | fi.emit('keypress', '.', { ctrl: true, name: 'h' }); | |
| 922 | - cursorPos = rli._getCursorPos(); | ||
| 922 | + cursorPos = rli.getCursorPos(); | ||
| 923 | 923 | assert.strictEqual(cursorPos.rows, 0); | |
| 924 | 924 | assert.strictEqual(cursorPos.cols, 0); | |
| 925 | 925 | rli.on('line', common.mustCall((line) => { | |
@@ -942,13 +942,13 @@ function isWarned(emitter) { | |||
| 942 | 942 | ||
| 943 | 943 | // Go to the start of the line | |
| 944 | 944 | fi.emit('keypress', '.', { ctrl: true, name: 'a' }); | |
| 945 | - let cursorPos = rli._getCursorPos(); | ||
| 945 | + let cursorPos = rli.getCursorPos(); | ||
| 946 | 946 | assert.strictEqual(cursorPos.rows, 0); | |
| 947 | 947 | assert.strictEqual(cursorPos.cols, 0); | |
| 948 | 948 | ||
| 949 | 949 | // Delete right character | |
| 950 | 950 | fi.emit('keypress', '.', { ctrl: true, name: 'd' }); | |
| 951 | - cursorPos = rli._getCursorPos(); | ||
| 951 | + cursorPos = rli.getCursorPos(); | ||
| 952 | 952 | assert.strictEqual(cursorPos.rows, 0); | |
| 953 | 953 | assert.strictEqual(cursorPos.cols, 0); | |
| 954 | 954 | rli.on('line', common.mustCall((line) => { | |
@@ -971,13 +971,13 @@ function isWarned(emitter) { | |||
| 971 | 971 | ||
| 972 | 972 | // Go to the start of the line | |
| 973 | 973 | fi.emit('keypress', '.', { ctrl: true, name: 'a' }); | |
| 974 | - let cursorPos = rli._getCursorPos(); | ||
| 974 | + let cursorPos = rli.getCursorPos(); | ||
| 975 | 975 | assert.strictEqual(cursorPos.rows, 0); | |
| 976 | 976 | assert.strictEqual(cursorPos.cols, 0); | |
| 977 | 977 | ||
| 978 | 978 | // Delete right character | |
| 979 | 979 | fi.emit('keypress', '.', { ctrl: true, name: 'd' }); | |
| 980 | - cursorPos = rli._getCursorPos(); | ||
| 980 | + cursorPos = rli.getCursorPos(); | ||
| 981 | 981 | assert.strictEqual(cursorPos.rows, 0); | |
| 982 | 982 | assert.strictEqual(cursorPos.cols, 0); | |
| 983 | 983 | rli.on('line', common.mustCall((line) => { | |
@@ -997,13 +997,13 @@ function isWarned(emitter) { | |||
| 997 | 997 | terminal: terminal | |
| 998 | 998 | }); | |
| 999 | 999 | fi.emit('data', 'the quick brown fox'); | |
| 1000 | - let cursorPos = rli._getCursorPos(); | ||
| 1000 | + let cursorPos = rli.getCursorPos(); | ||
| 1001 | 1001 | assert.strictEqual(cursorPos.rows, 0); | |
| 1002 | 1002 | assert.strictEqual(cursorPos.cols, 19); | |
| 1003 | 1003 | ||
| 1004 | 1004 | // Delete from current to start of line | |
| 1005 | 1005 | fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'backspace' }); | |
| 1006 | - cursorPos = rli._getCursorPos(); | ||
| 1006 | + cursorPos = rli.getCursorPos(); | ||
| 1007 | 1007 | assert.strictEqual(cursorPos.rows, 0); | |
| 1008 | 1008 | assert.strictEqual(cursorPos.cols, 0); | |
| 1009 | 1009 | rli.on('line', common.mustCall((line) => { | |
@@ -1026,13 +1026,13 @@ function isWarned(emitter) { | |||
| 1026 | 1026 | ||
| 1027 | 1027 | // Go to the start of the line | |
| 1028 | 1028 | fi.emit('keypress', '.', { ctrl: true, name: 'a' }); | |
| 1029 | - let cursorPos = rli._getCursorPos(); | ||
| 1029 | + let cursorPos = rli.getCursorPos(); | ||
| 1030 | 1030 | assert.strictEqual(cursorPos.rows, 0); | |
| 1031 | 1031 | assert.strictEqual(cursorPos.cols, 0); | |
| 1032 | 1032 | ||
| 1033 | 1033 | // Delete from current to end of line | |
| 1034 | 1034 | fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'delete' }); | |
| 1035 | - cursorPos = rli._getCursorPos(); | ||
| 1035 | + cursorPos = rli.getCursorPos(); | ||
| 1036 | 1036 | assert.strictEqual(cursorPos.rows, 0); | |
| 1037 | 1037 | assert.strictEqual(cursorPos.cols, 0); | |
| 1038 | 1038 | rli.on('line', common.mustCall((line) => { | |
@@ -1053,7 +1053,7 @@ function isWarned(emitter) { | |||
| 1053 | 1053 | }); | |
| 1054 | 1054 | fi.columns = 10; | |
| 1055 | 1055 | fi.emit('data', 'multi-line text'); | |
| 1056 | - const cursorPos = rli._getCursorPos(); | ||
| 1056 | + const cursorPos = rli.getCursorPos(); | ||
| 1057 | 1057 | assert.strictEqual(cursorPos.rows, 1); | |
| 1058 | 1058 | assert.strictEqual(cursorPos.cols, 5); | |
| 1059 | 1059 | rli.close(); | |
@@ -1070,7 +1070,7 @@ function isWarned(emitter) { | |||
| 1070 | 1070 | }); | |
| 1071 | 1071 | fi.columns = 10; | |
| 1072 | 1072 | fi.emit('data', 't'); | |
| 1073 | - const cursorPos = rli._getCursorPos(); | ||
| 1073 | + const cursorPos = rli.getCursorPos(); | ||
| 1074 | 1074 | assert.strictEqual(cursorPos.rows, 4); | |
| 1075 | 1075 | assert.strictEqual(cursorPos.cols, 3); | |
| 1076 | 1076 | rli.close(); | |
@@ -1088,7 +1088,7 @@ function isWarned(emitter) { | |||
| 1088 | 1088 | const lines = ['line 1', 'line 2', 'line 3']; | |
| 1089 | 1089 | fi.emit('data', lines.join('\n')); | |
| 1090 | 1090 | fi.emit('keypress', '.', { ctrl: true, name: 'l' }); | |
| 1091 | - const cursorPos = rli._getCursorPos(); | ||
| 1091 | + const cursorPos = rli.getCursorPos(); | ||
| 1092 | 1092 | assert.strictEqual(cursorPos.rows, 0); | |
| 1093 | 1093 | assert.strictEqual(cursorPos.cols, 6); | |
| 1094 | 1094 | rli.on('line', common.mustCall((line) => { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -37,7 +37,7 @@ const ctrlU = { ctrl: true, name: 'u' }; | |||
| 37 | 37 | ||
| 38 | 38 | for (const [cursor, string] of tests) { | |
| 39 | 39 | rl.write(string); | |
| 40 | - assert.strictEqual(rl._getCursorPos().cols, cursor); | ||
| 40 | + assert.strictEqual(rl.getCursorPos().cols, cursor); | ||
| 41 | 41 | rl.write(null, ctrlU); | |
| 42 | 42 | } | |
| 43 | 43 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments