Mercurial > hg > nnchat
comparison main.c @ 503:bac3f9af112c
More work on curses cleanup. Almost working now.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 02 Jun 2012 20:03:08 +0300 |
parents | 52da406caf54 |
children | 12939e665e49 |
comparison
equal
deleted
inserted
replaced
502:52da406caf54 | 503:bac3f9af112c |
---|---|
1632 | 1632 |
1633 // Handle user input | 1633 // Handle user input |
1634 if (cursesInit) | 1634 if (cursesInit) |
1635 { | 1635 { |
1636 int c, cnt = 0; | 1636 int c, cnt = 0; |
1637 BOOL update = FALSE, updateMain = FALSE; | 1637 BOOL update = FALSE; |
1638 | 1638 |
1639 // Handle several buffered keypresses at once | 1639 // Handle several buffered keypresses at once |
1640 do | 1640 do |
1641 { | 1641 { |
1642 c = wgetch(stdscr); | 1642 c = wgetch(stdscr); |
1715 // Chat window switching via Meta/Esc-[1..9] | 1715 // Chat window switching via Meta/Esc-[1..9] |
1716 nn_window_t *win = nnwin_get(c - 0x30); | 1716 nn_window_t *win = nnwin_get(c - 0x30); |
1717 if (win != NULL) | 1717 if (win != NULL) |
1718 { | 1718 { |
1719 currWin = win; | 1719 currWin = win; |
1720 update = updateMain = TRUE; | 1720 update = TRUE; |
1721 } | 1721 } |
1722 c = ERR; | 1722 c = ERR; |
1723 } | 1723 } |
1724 else | 1724 else |
1725 { | 1725 { |
1733 // Chat window switching via Meta/Esc-[1..9] | 1733 // Chat window switching via Meta/Esc-[1..9] |
1734 nn_window_t *win = nnwin_get(c - 0x198); | 1734 nn_window_t *win = nnwin_get(c - 0x198); |
1735 if (win != NULL) | 1735 if (win != NULL) |
1736 { | 1736 { |
1737 currWin = win; | 1737 currWin = win; |
1738 update = updateMain = TRUE; | 1738 update = TRUE; |
1739 } | 1739 } |
1740 c = ERR; | 1740 c = ERR; |
1741 } | 1741 } |
1742 #endif | 1742 #endif |
1743 | 1743 |
1747 case KEY_RESIZE: | 1747 case KEY_RESIZE: |
1748 resize_term(0, 0); | 1748 resize_term(0, 0); |
1749 erase(); | 1749 erase(); |
1750 timeout(SET_DELAY); | 1750 timeout(SET_DELAY); |
1751 nnwin_reset(); | 1751 nnwin_reset(); |
1752 update = updateMain = TRUE; | 1752 update = TRUE; |
1753 break; | 1753 break; |
1754 #endif | 1754 #endif |
1755 | 1755 |
1756 case KEY_ENTER: | 1756 case KEY_ENTER: |
1757 case '\n': | 1757 case '\n': |
1785 else | 1785 else |
1786 { | 1786 { |
1787 // Update time value of last sent message for unidle timeouts | 1787 // Update time value of last sent message for unidle timeouts |
1788 prevKeepAlive = time(NULL); | 1788 prevKeepAlive = time(NULL); |
1789 } | 1789 } |
1790 | |
1791 updateMain = update = TRUE; | |
1792 } | 1790 } |
1793 break; | 1791 break; |
1794 | 1792 |
1795 case KEY_UP: // Backwards in input history | 1793 case KEY_UP: // Backwards in input history |
1796 if (histPos == 0) | 1794 if (histPos == 0) |
1801 if (histPos < histMax) | 1799 if (histPos < histMax) |
1802 { | 1800 { |
1803 histPos++; | 1801 histPos++; |
1804 nn_editbuf_free(editBuf); | 1802 nn_editbuf_free(editBuf); |
1805 editBuf = nn_editbuf_copy(histBuf[histPos]); | 1803 editBuf = nn_editbuf_copy(histBuf[histPos]); |
1806 update = TRUE; | |
1807 } | 1804 } |
1808 break; | 1805 break; |
1809 | 1806 |
1810 case KEY_DOWN: // Forwards in input history | 1807 case KEY_DOWN: // Forwards in input history |
1811 if (histPos > 0) | 1808 if (histPos > 0) |
1812 { | 1809 { |
1813 histPos--; | 1810 histPos--; |
1814 nn_editbuf_free(editBuf); | 1811 nn_editbuf_free(editBuf); |
1815 editBuf = nn_editbuf_copy(histBuf[histPos]); | 1812 editBuf = nn_editbuf_copy(histBuf[histPos]); |
1816 update = TRUE; | |
1817 } | 1813 } |
1818 break; | 1814 break; |
1819 | 1815 |
1820 case 0x204: // ctrl+left arrow = Skip words left | 1816 case 0x204: // ctrl+left arrow = Skip words left |
1821 case 0x20b: | 1817 case 0x20b: |
1822 while (editBuf->pos > 0 && isspace((int) editBuf->data[editBuf->pos - 1])) | 1818 while (editBuf->pos > 0 && isspace((int) editBuf->data[editBuf->pos - 1])) |
1823 editBuf->pos--; | 1819 editBuf->pos--; |
1824 while (editBuf->pos > 0 && !isspace((int) editBuf->data[editBuf->pos - 1])) | 1820 while (editBuf->pos > 0 && !isspace((int) editBuf->data[editBuf->pos - 1])) |
1825 editBuf->pos--; | 1821 editBuf->pos--; |
1826 update = TRUE; | |
1827 editBuf->dirty = TRUE; | 1822 editBuf->dirty = TRUE; |
1828 break; | 1823 break; |
1829 | 1824 |
1830 case 0x206: // ctrl+right arrow = Skip words right | 1825 case 0x206: // ctrl+right arrow = Skip words right |
1831 case 0x210: | 1826 case 0x210: |
1832 while (editBuf->pos < editBuf->len && isspace((int) editBuf->data[editBuf->pos])) | 1827 while (editBuf->pos < editBuf->len && isspace((int) editBuf->data[editBuf->pos])) |
1833 editBuf->pos++; | 1828 editBuf->pos++; |
1834 while (editBuf->pos < editBuf->len && !isspace((int) editBuf->data[editBuf->pos])) | 1829 while (editBuf->pos < editBuf->len && !isspace((int) editBuf->data[editBuf->pos])) |
1835 editBuf->pos++; | 1830 editBuf->pos++; |
1836 update = TRUE; | |
1837 editBuf->dirty = TRUE; | 1831 editBuf->dirty = TRUE; |
1838 break; | 1832 break; |
1839 | 1833 |
1840 case KEY_HOME: | 1834 case KEY_HOME: |
1841 nn_editbuf_setpos(editBuf, 0); | 1835 nn_editbuf_setpos(editBuf, 0); |
1842 update = TRUE; | |
1843 break; | 1836 break; |
1844 case KEY_END: | 1837 case KEY_END: |
1845 nn_editbuf_setpos(editBuf, editBuf->len); | 1838 nn_editbuf_setpos(editBuf, editBuf->len); |
1846 update = TRUE; | |
1847 break; | 1839 break; |
1848 case KEY_LEFT: | 1840 case KEY_LEFT: |
1849 nn_editbuf_setpos(editBuf, editBuf->pos - 1); | 1841 nn_editbuf_setpos(editBuf, editBuf->pos - 1); |
1850 update = TRUE; | |
1851 break; | 1842 break; |
1852 case KEY_RIGHT: | 1843 case KEY_RIGHT: |
1853 nn_editbuf_setpos(editBuf, editBuf->pos + 1); | 1844 nn_editbuf_setpos(editBuf, editBuf->pos + 1); |
1854 update = TRUE; | |
1855 break; | 1845 break; |
1856 | 1846 |
1857 case KEY_BACKSPACE: | 1847 case KEY_BACKSPACE: |
1858 case 0x08: | 1848 case 0x08: |
1859 case 0x7f: | 1849 case 0x7f: |
1860 nn_editbuf_delete(editBuf, editBuf->pos - 1); | 1850 nn_editbuf_delete(editBuf, editBuf->pos - 1); |
1861 nn_editbuf_setpos(editBuf, editBuf->pos - 1); | 1851 nn_editbuf_setpos(editBuf, editBuf->pos - 1); |
1862 update = TRUE; | |
1863 break; | 1852 break; |
1864 | 1853 |
1865 case KEY_DC: // Delete character | 1854 case KEY_DC: // Delete character |
1866 nn_editbuf_delete(editBuf, editBuf->pos); | 1855 nn_editbuf_delete(editBuf, editBuf->pos); |
1867 update = TRUE; | |
1868 break; | 1856 break; |
1869 | 1857 |
1870 | 1858 |
1871 case KEY_IC: // Ins = Toggle insert / overwrite mode | 1859 case KEY_IC: // Ins = Toggle insert / overwrite mode |
1872 insertMode = !insertMode; | 1860 insertMode = !insertMode; |
1873 update = TRUE; | |
1874 break; | 1861 break; |
1875 | 1862 |
1876 case KEY_F(2): // F2 = Clear editbuffer | 1863 case KEY_F(2): // F2 = Clear editbuffer |
1877 nn_editbuf_clear(editBuf); | 1864 nn_editbuf_clear(editBuf); |
1878 update = TRUE; | |
1879 break; | 1865 break; |
1880 | 1866 |
1881 case KEY_F(5): // F5 = Ignore mode | 1867 case KEY_F(5): // F5 = Ignore mode |
1882 setIgnoreMode = !setIgnoreMode; | 1868 setIgnoreMode = !setIgnoreMode; |
1883 printMsgQ(currWin, "Ignore mode = %s\n", setIgnoreMode ? "ON" : "OFF"); | 1869 printMsgQ(currWin, "Ignore mode = %s\n", setIgnoreMode ? "ON" : "OFF"); |
1896 exitProg = TRUE; | 1882 exitProg = TRUE; |
1897 break; | 1883 break; |
1898 | 1884 |
1899 case 0x09: // Tab = complete username or command | 1885 case 0x09: // Tab = complete username or command |
1900 nn_tabcomplete_buffer(editBuf); | 1886 nn_tabcomplete_buffer(editBuf); |
1887 break; | |
1888 | |
1889 case 0x0c: // Ctrl + L | |
1901 update = TRUE; | 1890 update = TRUE; |
1902 break; | |
1903 | |
1904 case 0x0c: // Ctrl + L | |
1905 wrefresh(stdscr); | |
1906 break; | 1891 break; |
1907 | 1892 |
1908 case KEY_NPAGE: | 1893 case KEY_NPAGE: |
1909 case KEY_PPAGE: | 1894 case KEY_PPAGE: |
1910 // Page Up / Page Down | 1895 // Page Up / Page Down |
1918 currWin->pos = 0; | 1903 currWin->pos = 0; |
1919 else if (currWin->pos >= currWin->data->n - 10) | 1904 else if (currWin->pos >= currWin->data->n - 10) |
1920 currWin->pos = currWin->data->n - 10; | 1905 currWin->pos = currWin->data->n - 10; |
1921 | 1906 |
1922 if (oldPos != currWin->pos) | 1907 if (oldPos != currWin->pos) |
1923 updateMain = TRUE; | 1908 update = TRUE; |
1924 } | 1909 } |
1925 break; | 1910 break; |
1926 | 1911 |
1927 case ERR: | 1912 case ERR: |
1928 // Ignore | 1913 // Ignore |
1934 if (insertMode) | 1919 if (insertMode) |
1935 nn_editbuf_insert(editBuf, editBuf->pos, c); | 1920 nn_editbuf_insert(editBuf, editBuf->pos, c); |
1936 else | 1921 else |
1937 nn_editbuf_write(editBuf, editBuf->pos, c); | 1922 nn_editbuf_write(editBuf, editBuf->pos, c); |
1938 nn_editbuf_setpos(editBuf, editBuf->pos + 1); | 1923 nn_editbuf_setpos(editBuf, editBuf->pos + 1); |
1939 update = TRUE; | |
1940 } | 1924 } |
1941 else | 1925 else |
1942 { | 1926 { |
1943 if (optDebug) | 1927 if (optDebug) |
1944 printMsg(currWin, "Unhandled key: 0x%02x\n", c); | 1928 printMsg(currWin, "Unhandled key: 0x%02x\n", c); |
1946 break; | 1930 break; |
1947 } | 1931 } |
1948 } | 1932 } |
1949 while (c != ERR && !exitProg && ++cnt < 10); | 1933 while (c != ERR && !exitProg && ++cnt < 10); |
1950 | 1934 |
1951 nnwin_update(FALSE, editBuf, optUserName, optUserColor); | 1935 nnwin_update(update, editBuf, optUserName, optUserColor); |
1952 } // cursesInit | 1936 } // cursesInit |
1953 | 1937 |
1954 if (++updateCount > 10) | 1938 if (++updateCount > 10) |
1955 { | 1939 { |
1956 time_t tmpTime = time(NULL); | 1940 time_t tmpTime = time(NULL); |