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);