Changeset d296c9a
- Timestamp:
- Jul 18, 2010, 4:48:15 PM (15 years ago)
- Branches:
- master, release-1.10, release-1.7, release-1.8, release-1.9
- Children:
- 205e164
- Parents:
- 1cc9b615 (diff), 8bba1ae (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Files:
-
- 17 added
- 1 deleted
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.am
r9d27ee8 rd296c9a 39 39 $(GIT_FLAGS) 40 40 41 BASE_SRCS=list.c message.c mainwin.c popwin.c zephyr.c messagelist.c \41 CODELIST_SRCS=list.c message.c mainwin.c popwin.c zephyr.c messagelist.c \ 42 42 commands.c global.c text.c fmtext.c editwin.c util.c logging.c \ 43 43 perlconfig.c keys.c functions.c zwrite.c viewwin.c help.c filter.c \ … … 46 46 aim.c buddy.c buddylist.c style.c errqueue.c \ 47 47 zbuddylist.c popexec.c select.c wcwidth.c \ 48 glib_compat.c filterproc.c 48 glib_compat.c mainpanel.c msgwin.c sepbar.c 49 50 NORMAL_SRCS = filterproc.c window.c windowcb.c 51 52 BASE_SRCS = $(CODELIST_SRCS) $(NORMAL_SRCS) 49 53 50 54 GEN_C = varstubs.c perlglue.c … … 68 72 $(AM_V_GEN)perl $< $(sort $(filter-out $<,$+)) > $@ 69 73 70 owl_prototypes.h.new: codelist.pl varstubs.c $( BASE_SRCS)74 owl_prototypes.h.new: codelist.pl varstubs.c $(CODELIST_SRCS) 71 75 $(AM_V_GEN)perl $< $(sort $(filter-out $<,$+)) > $@ 72 76 -
cmd.c
r1cc9b615 rd296c9a 74 74 } else if (NULL != (cmd = owl_dict_find_element(cd, argv[0]))) { 75 75 retval = owl_cmd_execute(cmd, cd, ctx, argc, argv, buff); 76 /* redraw the sepbar; TODO: don't violate layering */ 77 owl_global_sepbar_dirty(&g); 76 78 } else { 77 79 owl_function_makemsg("Unknown command '%s'.", buff); … … 90 92 if (argc < 0) { 91 93 owl_free(tmpbuff); 92 sepbar(NULL);93 94 owl_function_makemsg("Unbalanced quotes"); 94 95 return NULL; … … 105 106 owl_parse_delete(argv, argc); 106 107 owl_free(tmpbuff); 107 sepbar(NULL);108 108 return retval; 109 109 } -
commands.c
r987cf3f rd296c9a 1371 1371 { 1372 1372 owl_function_full_redisplay(); 1373 owl_global_set_needrefresh(&g);1374 1373 } 1375 1374 … … 1387 1386 { 1388 1387 owl_global_set_rightshift(&g, shift); 1389 owl_mainwin_redisplay(owl_global_get_mainwin(&g));1390 owl_global_set_needrefresh(&g);1391 1388 } 1392 1389 … … 2693 2690 } 2694 2691 2695 owl_global_set_needrefresh(&g);2696 2692 owl_global_pop_context(&g); 2697 2693 … … 2714 2710 owl_editwin_clear(e); 2715 2711 owl_editwin_insert_string(e, ptr); 2716 owl_editwin_redisplay(e);2717 owl_global_set_needrefresh(&g);2718 2712 } else { 2719 2713 owl_function_beep(); … … 2731 2725 owl_editwin_clear(e); 2732 2726 owl_editwin_insert_string(e, ptr); 2733 owl_editwin_redisplay(e);2734 owl_global_set_needrefresh(&g);2735 2727 } else { 2736 2728 owl_function_beep(); … … 2742 2734 buff = skiptokens(buff, 1); 2743 2735 owl_editwin_insert_string(e, buff); 2744 owl_editwin_redisplay(e);2745 owl_global_set_needrefresh(&g);2746 2736 return NULL; 2747 2737 } … … 2758 2748 owl_global_set_typwin_inactive(&g); 2759 2749 owl_global_pop_context(&g); 2760 owl_global_set_needrefresh(&g);2761 2750 2762 2751 owl_editwin_do_callback(e); … … 2780 2769 void owl_command_popless_quit(owl_viewwin *vw) 2781 2770 { 2771 owl_viewwin_cleanup(vw); 2782 2772 owl_popwin_close(owl_global_get_popwin(&g)); 2783 2773 owl_global_pop_context(&g); 2784 owl_viewwin_cleanup(vw); 2785 owl_global_set_needrefresh(&g); 2786 } 2774 } -
configure.ac
r04af908 rd296c9a 115 115 116 116 dnl Add CFLAGS and LDFLAGS for glib-2.0 117 PKG_CHECK_MODULES(GLIB, glib-2.0)117 PKG_CHECK_MODULES(GLIB,[glib-2.0 gobject-2.0]) 118 118 119 119 AC_MSG_NOTICE([Adding glib-2.0 CFLAGS ${GLIB_CFLAGS}]) -
context.c
r2a17b63 r07b59ea 9 9 ctx->mode = OWL_CTX_STARTUP; 10 10 ctx->data = NULL; 11 ctx->cursor = NULL; 11 12 return 0; 12 13 } -
editwin.c
r9d7a720 r3f11c00 28 28 int cursorx; 29 29 int winlines, wincols, fillcol, wrapcol; 30 WINDOW *curswin; 30 owl_window *win; 31 gulong repaint_id; 32 gulong resized_id; 31 33 int style; 32 34 int lock; … … 40 42 }; 41 43 44 static void oe_set_window(owl_editwin *e, owl_window *w, int winlines, int wincols); 45 static void oe_redraw(owl_window *win, WINDOW *curswin, void *user_data); 42 46 static void oe_reframe(owl_editwin *e); 43 47 static void oe_save_excursion(owl_editwin *e, oe_excursion *x); … … 58 62 static char *oe_chunk(owl_editwin *e, int start, int end); 59 63 static void oe_destroy_cbdata(owl_editwin *e); 64 static void oe_dirty(owl_editwin *e); 65 static void oe_window_resized(owl_window *w, owl_editwin *e); 60 66 61 67 #define INCR 4096 … … 73 79 void owl_editwin_delete(owl_editwin *e) 74 80 { 81 if (e->win) { 82 g_signal_handler_disconnect(e->win, e->repaint_id); 83 g_signal_handler_disconnect(e->win, e->resized_id); 84 } 75 85 owl_free(e->buff); 76 86 owl_free(e->killbuf); … … 91 101 } 92 102 e->index = index; 103 oe_dirty(e); 93 104 } 94 105 … … 105 116 106 117 static void _owl_editwin_init(owl_editwin *e, 107 WINDOW *win,108 118 int winlines, 109 119 int wincols, … … 130 140 e->style=OWL_EDITWIN_STYLE_MULTILINE; 131 141 } 132 owl_editwin_set_curswin(e, win, winlines, wincols);133 142 e->lock=0; 134 143 e->dotsend=0; 135 144 e->echochar='\0'; 136 137 if (win) werase(win); 138 } 139 140 owl_editwin *owl_editwin_new(WINDOW *win, int winlines, int wincols, int style, owl_history *hist) 145 } 146 147 owl_editwin *owl_editwin_new(owl_window *win, int winlines, int wincols, int style, owl_history *hist) 141 148 { 142 149 owl_editwin *e = owl_editwin_allocate(); 143 150 144 _owl_editwin_init(e, win, winlines, wincols, style, hist); 151 _owl_editwin_init(e, winlines, wincols, style, hist); 152 oe_set_window(e, win, winlines, wincols); 145 153 return e; 146 154 } 147 155 148 void owl_editwin_set_curswin(owl_editwin *e, WINDOW *w, int winlines, int wincols) 149 { 150 e->curswin=w; 156 static void oe_window_resized(owl_window *w, owl_editwin *e) 157 { 158 /* update the sizes */ 159 owl_window_get_position(w, &e->winlines, &e->wincols, NULL, NULL); 160 } 161 162 static void oe_set_window(owl_editwin *e, owl_window *w, int winlines, int wincols) 163 { 164 e->win=w; 151 165 e->winlines=winlines; 152 166 e->wincols=wincols; … … 156 170 else 157 171 e->wrapcol = 0; 172 if (e->win) { 173 e->repaint_id = g_signal_connect(w, "redraw", G_CALLBACK(oe_redraw), e); 174 e->resized_id = g_signal_connect(w, "resized", G_CALLBACK(oe_window_resized), e); 175 owl_window_dirty(e->win); 176 } 158 177 } 159 178 … … 165 184 { 166 185 e->echochar=ch; 167 } 168 169 WINDOW *owl_editwin_get_curswin(owl_editwin *e) 170 { 171 return(e->curswin); 186 oe_dirty(e); 172 187 } 173 188 … … 239 254 e->lock=e->bufflen; 240 255 oe_set_index(e, e->lock); 241 o wl_editwin_redisplay(e);256 oe_dirty(e); 242 257 } 243 258 … … 265 280 266 281 owl_free(e->buff); 267 _owl_editwin_init(e, e-> curswin, e->winlines, e->wincols, e->style, e->hist);282 _owl_editwin_init(e, e->winlines, e->wincols, e->style, e->hist); 268 283 269 284 if (lock > 0) { … … 286 301 { 287 302 e->topindex = -1; 303 oe_dirty(e); 288 304 } 289 305 … … 467 483 468 484 oe_restore_excursion(e, &x); 469 } 470 471 static void oe_addnec(owl_editwin *e, int count) 485 oe_dirty(e); 486 } 487 488 static void oe_addnec(owl_editwin *e, WINDOW *curswin, int count) 472 489 { 473 490 int i; 474 491 475 492 for (i = 0; i < count; i++) 476 waddch( e->curswin, e->echochar);477 } 478 479 static void oe_mvaddnec(owl_editwin *e, int y, int x, int count)480 { 481 wmove( e->curswin, y, x);482 oe_addnec(e, c ount);493 waddch(curswin, e->echochar); 494 } 495 496 static void oe_mvaddnec(owl_editwin *e, WINDOW *curswin, int y, int x, int count) 497 { 498 wmove(curswin, y, x); 499 oe_addnec(e, curswin, count); 483 500 } 484 501 485 502 /* regenerate the text on the curses window */ 486 void owl_editwin_redisplay(owl_editwin *e)503 static void oe_redraw(owl_window *win, WINDOW *curswin, void *user_data) 487 504 { 488 505 int x = -1, y = -1, t, hard; 489 506 int line, index, lineindex, times = 0; 507 owl_editwin *e = user_data; 490 508 491 509 do { 492 werase( e->curswin);510 werase(curswin); 493 511 494 512 if (e->topindex == -1 || e->index < e->topindex) … … 505 523 if (index - lineindex) { 506 524 if (!e->echochar) 507 mvwaddnstr( e->curswin, line, 0,525 mvwaddnstr(curswin, line, 0, 508 526 e->buff + lineindex, 509 527 index - lineindex); 510 528 else { 511 529 if(lineindex < e->lock) { 512 mvwaddnstr( e->curswin, line, 0,530 mvwaddnstr(curswin, line, 0, 513 531 e->buff + lineindex, 514 532 MIN(index - lineindex, 515 533 e->lock - lineindex)); 516 534 if (e->lock < index) 517 oe_addnec(e, 535 oe_addnec(e, curswin, 518 536 oe_region_width(e, e->lock, index, 519 537 oe_region_width(e, lineindex, e->lock, 0))); 520 538 } else 521 oe_mvaddnec(e, line, 0, oe_region_width(e, lineindex, index, 0));539 oe_mvaddnec(e, curswin, line, 0, oe_region_width(e, lineindex, index, 0)); 522 540 } 523 541 if (!hard) 524 waddch( e->curswin, '\\');542 waddch(curswin, '\\'); 525 543 } 526 544 line++; … … 531 549 } while(x == -1 && times < 3); 532 550 533 wmove( e->curswin, y, x);551 wmove(curswin, y, x); 534 552 e->cursorx = x; 535 553 } … … 624 642 if (start <= e->topindex) 625 643 owl_editwin_recenter(e); 644 645 oe_dirty(e); 626 646 627 647 return change; … … 857 877 858 878 e->goal_column = goal_column; 879 oe_dirty(e); 859 880 860 881 return distance; … … 1211 1232 return; 1212 1233 } 1213 owl_editwin_redisplay(e);1214 1234 } 1215 1235 … … 1346 1366 } 1347 1367 1368 static void oe_dirty(owl_editwin *e) 1369 { 1370 if (e->win) owl_window_dirty(e->win); 1371 } 1372 1348 1373 1349 1374 -
functions.c
r7bfc613 rd296c9a 216 216 /* redisplay etc. */ 217 217 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 218 owl_global_set_needrefresh(&g);219 218 } 220 219 … … 287 286 owl_editwin_set_cbdata(e, data, cleanup); 288 287 owl_editwin_set_callback(e, callback); 289 owl_global_push_context(&g, OWL_CTX_EDITMULTI, e, "editmulti" );288 owl_global_push_context(&g, OWL_CTX_EDITMULTI, e, "editmulti", owl_global_get_typwin_window(&g)); 290 289 } 291 290 … … 786 785 { 787 786 owl_global_set_rightshift(&g, owl_global_get_rightshift(&g)+10); 788 owl_mainwin_redisplay(owl_global_get_mainwin(&g));789 owl_global_set_needrefresh(&g);790 787 } 791 788 … … 797 794 if (shift > 0) { 798 795 owl_global_set_rightshift(&g, MAX(shift - 10, 0)); 799 owl_mainwin_redisplay(owl_global_get_mainwin(&g));800 owl_global_set_needrefresh(&g);801 796 } else { 802 797 owl_function_beep(); … … 1201 1196 if (owl_global_is_bell(&g)) { 1202 1197 beep(); 1203 owl_global_set_needrefresh(&g); /* do we really need this? */1204 1198 } 1205 1199 } … … 1230 1224 } 1231 1225 1232 void owl_function_set_cursor(WINDOW *win) 1233 { 1234 /* Be careful that this window is actually empty, otherwise panels get confused */ 1235 if (is_wintouched(win)) { 1236 owl_function_debugmsg("Warning: owl_function_set_cursor called on dirty window"); 1237 update_panels(); 1238 } 1239 wnoutrefresh(win); 1226 static void _dirty_everything(owl_window *w) { 1227 if (!owl_window_is_realized(w)) 1228 return; 1229 owl_window_dirty(w); 1230 owl_window_children_foreach(w, (GFunc)_dirty_everything, NULL); 1240 1231 } 1241 1232 1242 1233 void owl_function_full_redisplay(void) 1243 1234 { 1244 touchwin(owl_global_get_curs_recwin(&g)); 1245 touchwin(owl_global_get_curs_sepwin(&g)); 1246 touchwin(owl_global_get_curs_typwin(&g)); 1247 touchwin(owl_global_get_curs_msgwin(&g)); 1248 1249 sepbar(""); 1250 owl_function_makemsg(""); 1251 1252 owl_global_set_needrefresh(&g); 1235 _dirty_everything(owl_window_get_screen()); 1253 1236 } 1254 1237 … … 1262 1245 1263 1246 owl_popwin_up(pw); 1264 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless"); 1265 owl_viewwin_init_text(v, owl_popwin_get_curswin(pw), 1266 owl_popwin_get_lines(pw), owl_popwin_get_cols(pw), 1267 text); 1268 owl_viewwin_redisplay(v); 1269 owl_global_set_needrefresh(&g); 1247 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless", NULL); 1248 owl_viewwin_init_text(v, owl_popwin_get_content(pw), text); 1270 1249 } 1271 1250 … … 1279 1258 1280 1259 owl_popwin_up(pw); 1281 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless"); 1282 owl_viewwin_init_fmtext(v, owl_popwin_get_curswin(pw), 1283 owl_popwin_get_lines(pw), owl_popwin_get_cols(pw), 1284 fm); 1285 owl_viewwin_redisplay(v); 1286 owl_global_set_needrefresh(&g); 1260 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless", NULL); 1261 owl_viewwin_init_fmtext(v, owl_popwin_get_content(pw), fm); 1287 1262 } 1288 1263 … … 1544 1519 /* redisplay */ 1545 1520 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 1546 owl_global_set_needrefresh(&g);1547 1521 } 1548 1522 … … 1550 1524 { 1551 1525 owl_global_set_typwin_lines(&g, newsize); 1552 owl_ global_set_relayout_pending(&g);1526 owl_mainpanel_layout_contents(&g.mainpanel); 1553 1527 } 1554 1528 … … 1664 1638 } 1665 1639 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 1666 owl_global_set_needrefresh(&g);1667 1640 } else { 1668 1641 owl_function_error("No message with id %d: unable to mark for (un)delete",id); … … 1700 1673 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 1701 1674 owl_function_makemsg("%i messages marked for deletion", count); 1702 owl_global_set_needrefresh(&g);1703 1675 } 1704 1676 … … 1905 1877 1906 1878 owl_editwin_set_locktext(tw, "command: "); 1907 owl_global_set_needrefresh(&g);1908 1879 1909 1880 owl_editwin_insert_string(tw, line); 1910 owl_editwin_redisplay(tw); 1911 1912 owl_global_push_context(&g, OWL_CTX_EDITLINE, tw, "editline"); 1881 1882 owl_global_push_context(&g, OWL_CTX_EDITLINE, tw, "editline", owl_global_get_typwin_window(&g)); 1913 1883 owl_editwin_set_callback(tw, owl_callback_command); 1914 1884 } … … 1921 1891 1922 1892 owl_editwin_set_locktext(tw, line); 1923 owl_global_set_needrefresh(&g); 1924 1925 owl_editwin_redisplay(tw); 1926 1927 owl_global_push_context(&g, OWL_CTX_EDITRESPONSE, tw, "editresponse"); 1893 1894 owl_global_push_context(&g, OWL_CTX_EDITRESPONSE, tw, "editresponse", owl_global_get_typwin_window(&g)); 1928 1895 return tw; 1929 1896 } … … 1938 1905 1939 1906 owl_editwin_set_locktext(tw, line); 1940 owl_global_set_needrefresh(&g); 1941 1942 owl_editwin_redisplay(tw); 1943 1944 owl_global_push_context(&g, OWL_CTX_EDITRESPONSE, tw, "editresponse"); 1907 1908 owl_global_push_context(&g, OWL_CTX_EDITRESPONSE, tw, "editresponse", owl_global_get_typwin_window(&g)); 1945 1909 return tw; 1946 1910 } … … 2105 2069 } 2106 2070 owl_filter_set_fgcolor(f, owl_util_string_to_color(argv[3])); 2107 owl_global_set_needrefresh(&g);2108 2071 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 2109 2072 return; … … 2120 2083 } 2121 2084 owl_filter_set_bgcolor(f, owl_util_string_to_color(argv[3])); 2122 owl_global_set_needrefresh(&g);2123 2085 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 2124 2086 return; … … 2149 2111 owl_function_change_currentview_filter(argv[1]); 2150 2112 } 2151 owl_global_set_needrefresh(&g);2152 2113 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 2153 2114 } … … 2693 2654 owl_filter_set_fgcolor(f, owl_util_string_to_color(fgcolor)); 2694 2655 2695 owl_global_set_needrefresh(&g);2696 2656 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 2697 2657 return(0); … … 3407 3367 { 3408 3368 va_list ap; 3409 char buff[2048]; 3410 3411 if (!owl_global_get_curs_msgwin(&g)) return; 3369 char *str; 3412 3370 3413 3371 va_start(ap, fmt); 3414 werase(owl_global_get_curs_msgwin(&g)); 3415 3416 vsnprintf(buff, 2048, fmt, ap); 3417 owl_function_debugmsg("makemsg: %s", buff); 3418 waddstr(owl_global_get_curs_msgwin(&g), buff); 3419 owl_global_set_needrefresh(&g); 3372 str = g_strdup_vprintf(fmt, ap); 3420 3373 va_end(ap); 3374 3375 owl_function_debugmsg("makemsg: %s", str); 3376 owl_msgwin_set_text(&g.msgwin, str); 3421 3377 } 3422 3378 -
global.c
refc460e rd296c9a 13 13 #endif 14 14 15 static void _owl_global_init_windows(owl_global *g); 16 15 17 void owl_global_init(owl_global *g) { 16 18 struct hostent *hent; 17 19 char hostname[MAXHOSTNAMELEN]; 18 20 char *cd; 21 22 g_type_init(); 19 23 20 24 gethostname(hostname, MAXHOSTNAMELEN); … … 26 30 } 27 31 32 g->lines=LINES; 33 g->cols=COLS; 34 /* We shouldn't need this if we initialize lines and cols before the first 35 * owl_window_get_screen, but to be safe, we synchronize. */ 36 owl_window_resize(owl_window_get_screen(), g->lines, g->cols); 37 28 38 g->context_stack = NULL; 29 owl_global_push_context(g, OWL_CTX_STARTUP, NULL, NULL );39 owl_global_push_context(g, OWL_CTX_STARTUP, NULL, NULL, NULL); 30 40 31 41 g->curmsg=0; 32 42 g->topmsg=0; 33 43 g->markedmsgid=-1; 34 g->needrefresh=1;35 44 g->startupargs=NULL; 36 45 37 46 owl_variable_dict_setup(&(g->vars)); 38 39 g->lines=LINES;40 g->cols=COLS;41 47 42 48 g->rightshift=0; … … 54 60 g->curmsg_vert_offset=0; 55 61 g->resizepending=0; 56 g->relayoutpending = 0;57 62 g->direction=OWL_DIRECTION_DOWNWARDS; 58 63 g->zaway=0; … … 76 81 g->nextmsgid=0; 77 82 78 _owl_global_setup_windows(g);79 80 83 /* Fill in some variables which don't have constant defaults */ 81 84 /* TODO: come back later and check passwd file first */ … … 89 92 90 93 owl_messagelist_create(&(g->msglist)); 91 owl_mainwin_init(&(g->mw)); 92 owl_popwin_init(&(g->pw));94 95 _owl_global_init_windows(g); 93 96 94 97 g->aim_screenname=NULL; … … 115 118 g->timerlist = NULL; 116 119 g->interrupted = FALSE; 120 } 121 122 static void _owl_global_init_windows(owl_global *g) 123 { 124 /* Create the main window */ 125 owl_mainpanel_init(&(g->mainpanel)); 126 127 /* Create the widgets */ 128 owl_mainwin_init(&(g->mw), g->mainpanel.recwin); 129 owl_popwin_init(&(g->pw)); 130 owl_msgwin_init(&(g->msgwin), g->mainpanel.msgwin); 131 owl_sepbar_init(g->mainpanel.sepwin); 132 133 owl_window_set_default_cursor(g->mainpanel.sepwin); 117 134 118 135 /* set up a pad for input */ … … 121 138 keypad(g->input_pad, 1); 122 139 meta(g->input_pad, 1); 140 } 141 142 void owl_global_sepbar_dirty(owl_global *g) 143 { 144 owl_window_dirty(g->mainpanel.sepwin); 123 145 } 124 146 … … 153 175 } 154 176 155 void _owl_global_setup_windows(owl_global *g) {156 int cols, typwin_lines;157 158 cols=g->cols;159 typwin_lines=owl_global_get_typwin_lines(g);160 161 /* set the new window sizes */162 g->recwinlines=g->lines-(typwin_lines+2);163 if (g->recwinlines<0) {164 /* gotta deal with this */165 g->recwinlines=0;166 }167 168 /* create the new windows */169 _owl_panel_set_window(&g->recpan, newwin(g->recwinlines, cols, 0, 0));170 _owl_panel_set_window(&g->seppan, newwin(1, cols, g->recwinlines, 0));171 _owl_panel_set_window(&g->msgpan, newwin(1, cols, g->recwinlines+1, 0));172 _owl_panel_set_window(&g->typpan, newwin(typwin_lines, cols, g->recwinlines+2, 0));173 174 if (g->tw)175 owl_editwin_set_curswin(g->tw, owl_global_get_curs_typwin(g), typwin_lines, g->cols);176 177 idlok(owl_global_get_curs_typwin(g), FALSE);178 idlok(owl_global_get_curs_recwin(g), FALSE);179 idlok(owl_global_get_curs_sepwin(g), FALSE);180 idlok(owl_global_get_curs_msgwin(g), FALSE);181 182 wmove(owl_global_get_curs_typwin(g), 0, 0);183 }184 185 177 owl_context *owl_global_get_context(owl_global *g) { 186 178 if (!g->context_stack) … … 189 181 } 190 182 191 static void owl_global_lookup_keymap(owl_global *g) { 192 owl_context *c = owl_global_get_context(g); 193 if (!c || !c->keymap) 183 static void owl_global_activate_context(owl_global *g, owl_context *c) { 184 if (!c) 194 185 return; 195 186 196 if (!owl_keyhandler_activate(owl_global_get_keyhandler(g), c->keymap)) { 197 owl_function_error("Unable to activate keymap '%s'", c->keymap); 198 } 199 } 200 201 void owl_global_push_context(owl_global *g, int mode, void *data, const char *keymap) { 187 if (c->keymap) { 188 if (!owl_keyhandler_activate(owl_global_get_keyhandler(g), c->keymap)) { 189 owl_function_error("Unable to activate keymap '%s'", c->keymap); 190 } 191 } 192 owl_window_set_cursor(c->cursor); 193 } 194 195 void owl_global_push_context(owl_global *g, int mode, void *data, const char *keymap, owl_window *cursor) { 202 196 owl_context *c; 203 197 if (!(mode & OWL_CTX_MODE_BITS)) … … 206 200 c->mode = mode; 207 201 c->data = data; 202 c->cursor = cursor ? g_object_ref(cursor) : NULL; 208 203 c->keymap = owl_strdup(keymap); 209 204 g->context_stack = g_list_prepend(g->context_stack, c); 210 owl_global_ lookup_keymap(g);205 owl_global_activate_context(g, owl_global_get_context(g)); 211 206 } 212 207 … … 218 213 g->context_stack = g_list_delete_link(g->context_stack, 219 214 g->context_stack); 215 if (c->cursor) 216 g_object_unref(c->cursor); 220 217 owl_free(c->keymap); 221 218 owl_free(c); 222 owl_global_ lookup_keymap(g);219 owl_global_activate_context(g, owl_global_get_context(g)); 223 220 } 224 221 … … 232 229 233 230 int owl_global_get_recwin_lines(const owl_global *g) { 234 return (g->recwinlines);231 return g->mainpanel.recwinlines; 235 232 } 236 233 … … 298 295 } 299 296 300 /* curses windows */ 301 302 WINDOW *owl_global_get_curs_recwin(const owl_global *g) { 303 return panel_window(g->recpan); 304 } 305 306 WINDOW *owl_global_get_curs_sepwin(const owl_global *g) { 307 return panel_window(g->seppan); 308 } 309 310 WINDOW *owl_global_get_curs_msgwin(const owl_global *g) { 311 return panel_window(g->msgpan); 312 } 313 314 WINDOW *owl_global_get_curs_typwin(const owl_global *g) { 315 return panel_window(g->typpan); 297 /* underlying owl_windows */ 298 299 owl_window *owl_global_get_typwin_window(const owl_global *g) { 300 return g->mainpanel.typwin; 316 301 } 317 302 … … 322 307 } 323 308 324 /* refresh */325 326 int owl_global_is_needrefresh(const owl_global *g) {327 if (g->needrefresh==1) return(1);328 return(0);329 }330 331 void owl_global_set_needrefresh(owl_global *g) {332 g->needrefresh=1;333 }334 335 void owl_global_set_noneedrefresh(owl_global *g) {336 g->needrefresh=0;337 }338 339 309 /* variable dictionary */ 340 310 … … 352 322 353 323 void owl_global_set_rightshift(owl_global *g, int i) { 354 g->rightshift=i; 324 g->rightshift = i; 325 owl_mainwin_redisplay(owl_global_get_mainwin(g)); 355 326 } 356 327 … … 367 338 owl_function_resize_typwin(owl_global_get_typwin_lines(g) + d); 368 339 369 g->tw = owl_editwin_new(owl_global_get_curs_typwin(g), 340 if (g->typwin_erase_id) { 341 g_signal_handler_disconnect(owl_global_get_typwin_window(g), g->typwin_erase_id); 342 g->typwin_erase_id = 0; 343 } 344 345 g->tw = owl_editwin_new(owl_global_get_typwin_window(g), 370 346 owl_global_get_typwin_lines(g), 371 347 g->cols, … … 380 356 owl_function_resize_typwin(owl_global_get_typwin_lines(g) - d); 381 357 382 werase(owl_global_get_curs_typwin(g)); 358 if (!g->typwin_erase_id) { 359 g->typwin_erase_id = 360 g_signal_connect(owl_global_get_typwin_window(g), "redraw", G_CALLBACK(owl_window_erase_cb), NULL); 361 } 362 owl_window_dirty(owl_global_get_typwin_window(g)); 363 383 364 g->tw = NULL; 384 365 } … … 388 369 void owl_global_set_resize_pending(owl_global *g) { 389 370 g->resizepending=1; 390 }391 392 void owl_global_set_relayout_pending(owl_global *g) {393 g->relayoutpending = 1;394 371 } 395 372 … … 471 448 * fail. 472 449 */ 473 static void _owl_global_get_size(int *lines, int *cols) {450 void owl_global_get_terminal_size(int *lines, int *cols) { 474 451 struct winsize size; 475 452 /* get the new size */ … … 488 465 } 489 466 490 void owl_global_ resize(owl_global *g, int x, int y) {491 /* resize the screen. If x or yis 0 use the terminal size */467 void owl_global_check_resize(owl_global *g) { 468 /* resize the screen. If lines or cols is 0 use the terminal size */ 492 469 if (!g->resizepending) return; 493 470 g->resizepending = 0; 494 471 495 _owl_global_get_size(&g->lines, &g->cols); 496 if (x != 0) { 497 g->lines = x; 498 } 499 if (y != 0) { 500 g->cols = y; 501 } 502 503 resizeterm(g->lines, g->cols); 472 owl_global_get_terminal_size(&g->lines, &g->cols); 473 owl_window_resize(owl_window_get_screen(), g->lines, g->cols); 504 474 505 475 owl_function_debugmsg("New size is %i lines, %i cols.", g->lines, g->cols); 506 owl_global_set_relayout_pending(g);507 }508 509 void owl_global_relayout(owl_global *g) {510 owl_popwin *pw;511 owl_viewwin *vw;512 513 if (!g->relayoutpending) return;514 g->relayoutpending = 0;515 516 owl_function_debugmsg("Relayouting...");517 518 /* re-initialize the windows */519 _owl_global_setup_windows(g);520 521 /* in case any styles rely on the current width */522 owl_messagelist_invalidate_formats(owl_global_get_msglist(g));523 524 /* recalculate the topmsg to make sure the current message is on525 * screen */526 owl_function_calculate_topmsg(OWL_DIRECTION_NONE);527 528 /* recreate the popwin */529 pw = owl_global_get_popwin(g);530 if (owl_popwin_is_active(pw)) {531 /*532 * This is somewhat hacky; we probably want a proper windowing layer. We533 * destroy the popwin and recreate it. Then the viewwin is redirected to534 * the new window.535 */536 vw = owl_global_get_viewwin(g);537 owl_popwin_close(pw);538 owl_popwin_up(pw);539 owl_viewwin_set_curswin(vw, owl_popwin_get_curswin(pw),540 owl_popwin_get_lines(pw), owl_popwin_get_cols(pw));541 owl_viewwin_redisplay(vw);542 }543 544 /* refresh stuff */545 g->needrefresh=1;546 owl_mainwin_redisplay(&(g->mw));547 sepbar(NULL);548 if (g->tw)549 owl_editwin_redisplay(g->tw);550 else551 werase(owl_global_get_curs_typwin(g));552 553 owl_function_full_redisplay();554 555 owl_function_makemsg("");556 476 } 557 477 … … 623 543 624 544 void owl_global_set_curmsg_vert_offset(owl_global *g, int i) { 625 g->curmsg_vert_offset =i;545 g->curmsg_vert_offset = i; 626 546 } 627 547 -
keys.c
r44cc9ab r5cc7e5e 338 338 owl_editwin_post_process_char(e, j); 339 339 } 340 owl_global_set_needrefresh(&g);341 340 } 342 341 343 342 void owl_keys_popless_postalways(owl_input j) { 344 owl_viewwin *v = owl_global_get_viewwin(&g);345 const owl_popwin *pw = owl_global_get_popwin(&g);346 347 if (pw && owl_popwin_is_active(pw) && v) {348 owl_viewwin_redisplay(v);349 owl_global_set_needrefresh(&g);350 }351 343 } 352 344 -
mainwin.c
rf449096 r5cc7e5e 1 1 #include "owl.h" 2 2 3 void owl_mainwin_init(owl_mainwin *mw) 3 static void owl_mainwin_redraw(owl_window *w, WINDOW *recwin, void *user_data); 4 static void owl_mainwin_resized(owl_window *w, void *user_data); 5 6 void owl_mainwin_init(owl_mainwin *mw, owl_window *window) 4 7 { 5 8 mw->curtruncated=0; 6 9 mw->lastdisplayed=-1; 10 mw->window = g_object_ref(window); 11 /* for now, just assume this object lasts forever */ 12 g_signal_connect(window, "redraw", G_CALLBACK(owl_mainwin_redraw), mw); 13 g_signal_connect(window, "resized", G_CALLBACK(owl_mainwin_resized), mw); 14 owl_window_dirty(window); 15 16 /* For now, we do not bother with connecting up dependencies; that'll be a 17 * future refactor of the mainwin */ 18 } 19 20 static void owl_mainwin_resized(owl_window *w, void *user_data) 21 { 22 owl_mainwin *mw = user_data; 23 24 /* in case any styles rely on the current width */ 25 owl_messagelist_invalidate_formats(owl_global_get_msglist(&g)); 26 27 /* recalculate the topmsg to make sure the current message is on 28 * screen */ 29 owl_function_calculate_topmsg(OWL_DIRECTION_NONE); 30 31 /* Schedule a redraw */ 32 owl_window_dirty(mw->window); 7 33 } 8 34 9 35 void owl_mainwin_redisplay(owl_mainwin *mw) 36 { 37 owl_window_dirty(mw->window); 38 } 39 40 static void owl_mainwin_redraw(owl_window *w, WINDOW *recwin, void *user_data) 10 41 { 11 42 owl_message *m; … … 13 44 int x, y, savey, recwinlines, start; 14 45 int topmsg, curmsg, markedmsgid, fgcolor, bgcolor; 15 WINDOW *recwin;16 46 const owl_view *v; 17 47 GList *fl; 18 48 const owl_filter *f; 49 owl_mainwin *mw = user_data; 19 50 20 recwin = owl_global_get_curs_recwin(&g);21 51 topmsg = owl_global_get_topmsg(&g); 22 52 curmsg = owl_global_get_curmsg(&g); … … 43 73 mw->curtruncated=0; 44 74 mw->lastdisplayed=-1; 45 owl_global_set_needrefresh(&g);46 75 return; 47 76 } … … 88 117 if (y+lines > recwinlines-1) { 89 118 isfull=1; 90 owl_message_curs_waddstr(m, owl_global_get_curs_recwin(&g),119 owl_message_curs_waddstr(m, recwin, 91 120 start, 92 121 start+recwinlines-y, … … 96 125 } else { 97 126 /* otherwise print the whole thing */ 98 owl_message_curs_waddstr(m, owl_global_get_curs_recwin(&g),127 owl_message_curs_waddstr(m, recwin, 99 128 start, 100 129 start+lines, … … 139 168 } 140 169 mw->lastdisplayed=i-1; 141 142 owl_global_set_needrefresh(&g);143 170 } 144 171 -
owl.c
rdec60b4 rd296c9a 240 240 /* log the message if we need to */ 241 241 owl_log_message(m); 242 /* redraw the sepbar; TODO: don't violate layering */ 243 owl_global_sepbar_dirty(&g); 242 244 243 245 return 1; … … 272 274 /* this should be optimized to not run if the new messages won't be displayed */ 273 275 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 274 sepbar(NULL);275 owl_global_set_needrefresh(&g);276 276 } 277 277 return newmsgs; … … 428 428 { 429 429 /* if a resize has been scheduled, deal with it */ 430 owl_global_resize(&g, 0, 0); 431 /* also handle relayouts */ 432 owl_global_relayout(&g); 433 430 owl_global_check_resize(&g); 434 431 /* update the terminal if we need to */ 435 if (owl_global_is_needrefresh(&g)) { 436 /* these are here in case a relayout changes the windows */ 437 WINDOW *sepwin = owl_global_get_curs_sepwin(&g); 438 WINDOW *typwin = owl_global_get_curs_typwin(&g); 439 440 /* push all changed windows to screen */ 441 update_panels(); 442 /* leave the cursor in the appropriate window */ 443 if (!owl_popwin_is_active(owl_global_get_popwin(&g)) 444 && owl_global_get_typwin(&g)) { 445 owl_function_set_cursor(typwin); 446 } else { 447 owl_function_set_cursor(sepwin); 448 } 449 doupdate(); 450 owl_global_set_noneedrefresh(&g); 451 } 432 owl_window_redraw_scheduled(); 452 433 return 0; 453 434 } … … 519 500 520 501 owl_global_pop_context(&g); 521 owl_global_push_context(&g, OWL_CTX_READCONFIG, NULL, NULL );502 owl_global_push_context(&g, OWL_CTX_READCONFIG, NULL, NULL, NULL); 522 503 523 504 perlerr=owl_perlconfig_initperl(opts.configfile, &argc, &argv, &env); … … 563 544 "-----------------------------------------------------------------m-m---\n" 564 545 ); 565 sepbar(NULL);566 546 567 547 /* process the startup file */ … … 587 567 588 568 owl_global_pop_context(&g); 589 owl_global_push_context(&g, OWL_CTX_READCONFIG|OWL_CTX_RECV, NULL, "recv" );569 owl_global_push_context(&g, OWL_CTX_READCONFIG|OWL_CTX_RECV, NULL, "recv", NULL); 590 570 591 571 owl_select_add_pre_select_action(owl_refresh_pre_select_action, NULL, NULL); -
owl.h
r987cf3f rd296c9a 60 60 typedef void HV; 61 61 #endif 62 63 #include "window.h" 62 64 63 65 #ifdef GIT_VERSION … … 308 310 void *data; /* determined by mode */ 309 311 char *keymap; 312 owl_window *cursor; 310 313 } owl_context; 311 314 … … 395 398 int lasttruncated; 396 399 int lastdisplayed; 400 owl_window *window; 397 401 } owl_mainwin; 398 402 … … 402 406 int topline; 403 407 int rightshift; 404 int winlines, wincols;405 WINDOW *curswin;408 owl_window *window; 409 gulong sig_redraw_id; 406 410 void (*onclose_hook) (struct _owl_viewwin *vwin, void *data); 407 411 void *onclose_hook_data; … … 409 413 410 414 typedef struct _owl_popwin { 411 PANEL *borderpanel; 412 PANEL *poppanel; 413 int lines; 414 int cols; 415 owl_window *border; 416 owl_window *content; 415 417 int active; 416 418 } owl_popwin; 419 420 typedef struct _owl_msgwin { 421 char *msg; 422 owl_window *window; 423 gulong redraw_id; 424 } owl_msgwin; 417 425 418 426 typedef struct _owl_messagelist { … … 464 472 typedef struct _owl_editwin_excursion owl_editwin_excursion; 465 473 474 typedef struct _owl_mainpanel { 475 owl_window *panel; 476 owl_window *typwin; 477 owl_window *sepwin; 478 owl_window *msgwin; 479 owl_window *recwin; 480 int recwinlines; 481 } owl_mainpanel; 482 466 483 typedef struct _owl_keybinding { 467 484 int *keys; /* keypress stack */ … … 547 564 } owl_popexec; 548 565 566 typedef struct _OwlGlobalNotifier OwlGlobalNotifier; 567 549 568 typedef struct _owl_global { 550 569 owl_mainwin mw; 551 570 owl_popwin pw; 571 owl_msgwin msgwin; 552 572 owl_history cmdhist; /* command history */ 553 573 owl_history msghist; /* outgoing message history */ … … 567 587 owl_messagelist msglist; 568 588 WINDOW *input_pad; 569 PANEL *recpan, *seppan, *msgpan, *typpan;570 int needrefresh;589 owl_mainpanel mainpanel; 590 gulong typwin_erase_id; 571 591 int rightshift; 572 592 volatile sig_atomic_t resizepending; 573 int relayoutpending;574 int recwinlines;575 593 char *thishost; 576 594 char *homedir; -
popexec.c
r125fd21 r07b59ea 27 27 28 28 owl_popwin_up(pw); 29 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless"); 30 owl_viewwin_init_text(v, owl_popwin_get_curswin(pw), 31 owl_popwin_get_lines(pw), owl_popwin_get_cols(pw), 32 ""); 33 owl_viewwin_redisplay(v); 34 owl_global_set_needrefresh(&g); 29 owl_global_push_context(&g, OWL_CTX_POPLESS, v, "popless", NULL); 30 owl_viewwin_init_text(v, owl_popwin_get_content(pw), ""); 35 31 owl_viewwin_set_onclose_hook(v, owl_popexec_viewwin_onclose, pe); 36 32 pe->refcount++; … … 111 107 if (pe->winactive) { 112 108 owl_viewwin_append_text(pe->vwin, "\n"); 113 owl_viewwin_redisplay(pe->vwin);114 owl_global_set_needrefresh(&g);115 109 } 116 110 owl_select_remove_io_dispatch(d); … … 139 133 if (pe->winactive) { 140 134 owl_viewwin_append_text(pe->vwin, buf); 141 owl_viewwin_redisplay(pe->vwin);142 owl_global_set_needrefresh(&g);143 135 } 144 136 owl_free(buf); -
popwin.c
r0881cdd r05ca0d8 4 4 { 5 5 pw->active=0; 6 pw->lines=0;7 pw->cols=0;8 6 return(0); 9 7 } … … 11 9 int owl_popwin_up(owl_popwin *pw) 12 10 { 13 int glines, gcols, startcol, startline; 14 WINDOW *popwin, *borderwin; 11 pw->border = owl_window_new(NULL); 12 pw->content = owl_window_new(pw->border); 13 g_signal_connect(pw->border, "redraw", G_CALLBACK(owl_popwin_draw_border), 0); 14 owl_signal_connect_object(owl_window_get_screen(), "resized", G_CALLBACK(owl_popwin_size_border), pw->border, 0); 15 owl_signal_connect_object(pw->border, "resized", G_CALLBACK(owl_popwin_size_content), pw->content, 0); 15 16 16 /* calculate the size of the popwin */ 17 glines=owl_global_get_lines(&g); 18 gcols=owl_global_get_cols(&g); 17 /* bootstrap sizing */ 18 owl_popwin_size_border(owl_window_get_screen(), pw->border); 19 19 20 pw->lines = owl_util_min(glines,24)*3/4 + owl_util_max(glines-24,0)/2; 21 startline = (glines-pw->lines)/2; 20 owl_window_show_all(pw->border); 22 21 23 pw->cols = owl_util_min(gcols,90)*15/16 + owl_util_max(gcols-90,0)/2; 24 startcol = (gcols-pw->cols)/2; 22 pw->active=1; 23 return(0); 24 } 25 25 26 borderwin = newwin(pw->lines, pw->cols, startline, startcol); 27 pw->borderpanel = new_panel(borderwin); 28 popwin = newwin(pw->lines-2, pw->cols-2, startline+1, startcol+1); 29 pw->poppanel = new_panel(popwin); 26 void owl_popwin_size_border(owl_window *parent, void *user_data) 27 { 28 int lines, cols, startline, startcol; 29 int glines, gcols; 30 owl_window *border = user_data; 30 31 31 werase(popwin); 32 werase(borderwin); 32 owl_window_get_position(parent, &glines, &gcols, 0, 0); 33 34 lines = owl_util_min(glines,24)*3/4 + owl_util_max(glines-24,0)/2; 35 startline = (glines-lines)/2; 36 cols = owl_util_min(gcols,90)*15/16 + owl_util_max(gcols-90,0)/2; 37 startcol = (gcols-cols)/2; 38 39 owl_window_set_position(border, lines, cols, startline, startcol); 40 } 41 42 void owl_popwin_size_content(owl_window *parent, void *user_data) 43 { 44 int lines, cols; 45 owl_window *content = user_data; 46 owl_window_get_position(parent, &lines, &cols, 0, 0); 47 owl_window_set_position(content, lines-2, cols-2, 1, 1); 48 } 49 50 void owl_popwin_draw_border(owl_window *w, WINDOW *borderwin, void *user_data) 51 { 52 int lines, cols; 53 owl_window_get_position(w, &lines, &cols, 0, 0); 33 54 if (owl_global_is_fancylines(&g)) { 34 55 box(borderwin, 0, 0); … … 37 58 wmove(borderwin, 0, 0); 38 59 waddch(borderwin, '+'); 39 wmove(borderwin, pw->lines-1, 0);60 wmove(borderwin, lines-1, 0); 40 61 waddch(borderwin, '+'); 41 wmove(borderwin, pw->lines-1, pw->cols-1);62 wmove(borderwin, lines-1, cols-1); 42 63 waddch(borderwin, '+'); 43 wmove(borderwin, 0, pw->cols-1);64 wmove(borderwin, 0, cols-1); 44 65 waddch(borderwin, '+'); 45 66 } 46 47 owl_global_set_needrefresh(&g);48 pw->active=1;49 return(0);50 67 } 51 68 52 69 int owl_popwin_close(owl_popwin *pw) 53 70 { 54 WINDOW *popwin, *borderwin; 71 owl_window_unlink(pw->border); 72 g_object_unref(pw->border); 73 g_object_unref(pw->content); 55 74 56 popwin = panel_window(pw->poppanel); 57 borderwin = panel_window(pw->borderpanel); 58 59 del_panel(pw->poppanel); 60 del_panel(pw->borderpanel); 61 delwin(popwin); 62 delwin(borderwin); 63 75 pw->border = 0; 76 pw->content = 0; 64 77 pw->active=0; 65 owl_global_set_needrefresh(&g);66 78 return(0); 67 79 } … … 72 84 } 73 85 74 WINDOW *owl_popwin_get_curswin(const owl_popwin *pw)86 owl_window *owl_popwin_get_content(const owl_popwin *pw) 75 87 { 76 return p anel_window(pw->poppanel);88 return pw->content; 77 89 } 78 79 int owl_popwin_get_lines(const owl_popwin *pw)80 {81 return(pw->lines-2);82 }83 84 int owl_popwin_get_cols(const owl_popwin *pw)85 {86 return(pw->cols-2);87 } -
stubgen.pl
rd7cc50b rea7daa8 12 12 my $altvarname = $2; 13 13 $altvarname = $3 if ($3); 14 my $detailname = $altvarname; 15 $detailname =~ s/[^a-zA-Z0-9]/-/g; 16 $detailname =~ s/^[^a-zA-Z]+//; 14 17 if ($vartype =~ /^BOOL/) { 15 print "void owl_global_set_${altvarname}_on(owl_global *g) {\n"; 16 print " owl_variable_set_bool_on(&g->vars, \"$varname\");\n}\n"; 17 print "void owl_global_set_${altvarname}_off(owl_global *g) {\n"; 18 print " owl_variable_set_bool_off(&g->vars, \"$varname\");\n}\n"; 19 print "int owl_global_is_$altvarname(const owl_global *g) {\n"; 20 print " return owl_variable_get_bool(&g->vars, \"$varname\");\n}\n"; 18 print <<EOT; 19 void owl_global_set_${altvarname}_on(owl_global *g) { 20 owl_variable_set_bool_on(&g->vars, "$altvarname"); 21 } 22 void owl_global_set_${altvarname}_off(owl_global *g) { 23 owl_variable_set_bool_off(&g->vars, "$altvarname"); 24 } 25 int owl_global_is_$altvarname(const owl_global *g) { 26 return owl_variable_get_bool(&g->vars, "$varname"); 27 } 28 EOT 21 29 } elsif ($vartype =~ /^PATH/ or $vartype =~ /^STRING/) { 22 print "void owl_global_set_$altvarname(owl_global *g, const char *text) {\n"; 23 print " owl_variable_set_string(&g->vars, \"$varname\", text);\n}\n"; 24 print "const char *owl_global_get_$altvarname(const owl_global *g) {\n"; 25 print " return owl_variable_get_string(&g->vars, \"$varname\");\n}\n"; 30 print <<EOT; 31 void owl_global_set_${altvarname}(owl_global *g, const char *text) { 32 owl_variable_set_string(&g->vars, "$altvarname", text); 33 } 34 const char *owl_global_get_$altvarname(const owl_global *g) { 35 return owl_variable_get_string(&g->vars, "$varname"); 36 } 37 EOT 26 38 } elsif ($vartype =~ /^INT/ or $vartype =~ /^ENUM/) { 27 print "void owl_global_set_$altvarname(owl_global *g, int n) {\n"; 28 print " owl_variable_set_int(&g->vars, \"$varname\", n);\n}\n"; 29 print "int owl_global_get_$altvarname(const owl_global *g) {\n"; 30 print " return owl_variable_get_int(&g->vars, \"$varname\");\n}\n"; 39 print <<EOT; 40 void owl_global_set_${altvarname}(owl_global *g, int n) { 41 owl_variable_set_int(&g->vars, "$altvarname", n); 42 } 43 int owl_global_get_$altvarname(const owl_global *g) { 44 return owl_variable_get_int(&g->vars, "$varname"); 45 } 46 EOT 31 47 } 32 48 } -
util.c
r9a7b4f2 rc1f1e1e 8 8 #include <sys/types.h> 9 9 10 void sepbar(const char *in) 11 { 12 WINDOW *sepwin; 13 const owl_messagelist *ml; 14 const owl_view *v; 15 int x, y, i; 16 const char *foo, *appendtosepbar; 17 18 sepwin=owl_global_get_curs_sepwin(&g); 19 ml=owl_global_get_msglist(&g); 20 v=owl_global_get_current_view(&g); 21 22 werase(sepwin); 23 wattron(sepwin, A_REVERSE); 24 if (owl_global_is_fancylines(&g)) { 25 whline(sepwin, ACS_HLINE, owl_global_get_cols(&g)); 26 } else { 27 whline(sepwin, '-', owl_global_get_cols(&g)); 28 } 29 30 if (owl_global_is_sepbar_disable(&g)) { 31 getyx(sepwin, y, x); 32 wmove(sepwin, y, owl_global_get_cols(&g)-1); 33 return; 34 } 35 36 wmove(sepwin, 0, 2); 37 38 if (owl_messagelist_get_size(ml) == 0) 39 waddstr(sepwin, " (-/-) "); 40 else 41 wprintw(sepwin, " (%i/%i/%i) ", owl_global_get_curmsg(&g) + 1, 42 owl_view_get_size(v), 43 owl_messagelist_get_size(ml)); 44 45 foo=owl_view_get_filtname(v); 46 if (strcmp(foo, owl_global_get_view_home(&g))) 47 wattroff(sepwin, A_REVERSE); 48 wprintw(sepwin, " %s ", owl_view_get_filtname(v)); 49 if (strcmp(foo, owl_global_get_view_home(&g))) 50 wattron(sepwin, A_REVERSE); 51 52 if (owl_mainwin_is_curmsg_truncated(owl_global_get_mainwin(&g))) { 53 getyx(sepwin, y, x); 54 wmove(sepwin, y, x+2); 55 wattron(sepwin, A_BOLD); 56 waddstr(sepwin, " <truncated> "); 57 wattroff(sepwin, A_BOLD); 58 } 59 60 i=owl_mainwin_get_last_msg(owl_global_get_mainwin(&g)); 61 if ((i != -1) && 62 (i < owl_view_get_size(v)-1)) { 63 getyx(sepwin, y, x); 64 wmove(sepwin, y, x+2); 65 wattron(sepwin, A_BOLD); 66 waddstr(sepwin, " <more> "); 67 wattroff(sepwin, A_BOLD); 68 } 69 70 if (owl_global_get_rightshift(&g)>0) { 71 getyx(sepwin, y, x); 72 wmove(sepwin, y, x+2); 73 wprintw(sepwin, " right: %i ", owl_global_get_rightshift(&g)); 74 } 75 76 if (owl_global_is_zaway(&g) || owl_global_is_aaway(&g)) { 77 getyx(sepwin, y, x); 78 wmove(sepwin, y, x+2); 79 wattron(sepwin, A_BOLD); 80 wattroff(sepwin, A_REVERSE); 81 if (owl_global_is_zaway(&g) && owl_global_is_aaway(&g)) { 82 waddstr(sepwin, " AWAY "); 83 } else if (owl_global_is_zaway(&g)) { 84 waddstr(sepwin, " Z-AWAY "); 85 } else if (owl_global_is_aaway(&g)) { 86 waddstr(sepwin, " A-AWAY "); 87 } 88 wattron(sepwin, A_REVERSE); 89 wattroff(sepwin, A_BOLD); 90 } 91 92 if (owl_global_get_curmsg_vert_offset(&g)) { 93 getyx(sepwin, y, x); 94 wmove(sepwin, y, x+2); 95 wattron(sepwin, A_BOLD); 96 wattroff(sepwin, A_REVERSE); 97 waddstr(sepwin, " SCROLL "); 98 wattron(sepwin, A_REVERSE); 99 wattroff(sepwin, A_BOLD); 100 } 101 102 if (in) { 103 getyx(sepwin, y, x); 104 wmove(sepwin, y, x+2); 105 waddstr(sepwin, in); 106 } 107 108 appendtosepbar = owl_global_get_appendtosepbar(&g); 109 if (appendtosepbar && *appendtosepbar) { 110 getyx(sepwin, y, x); 111 wmove(sepwin, y, x+2); 112 waddstr(sepwin, " "); 113 waddstr(sepwin, owl_global_get_appendtosepbar(&g)); 114 waddstr(sepwin, " "); 115 } 116 117 getyx(sepwin, y, x); 118 wmove(sepwin, y, owl_global_get_cols(&g)-1); 119 120 wattroff(sepwin, A_BOLD); 121 wattroff(sepwin, A_REVERSE); 122 } 10 #include <glib-object.h> 123 11 124 12 char **atokenize(const char *buffer, const char *sep, int *i) … … 786 674 return buf; 787 675 } 676 677 gulong owl_dirty_window_on_signal(owl_window *w, gpointer sender, const gchar *detailed_signal) 678 { 679 return owl_signal_connect_object(sender, detailed_signal, G_CALLBACK(owl_window_dirty), w, G_CONNECT_SWAPPED); 680 } 681 682 typedef struct { /*noproto*/ 683 GObject *sender; 684 gulong signal_id; 685 } SignalData; 686 687 static void _closure_invalidated(gpointer data, GClosure *closure); 688 689 /* 690 * GObject's g_signal_connect_object has a documented bug. This function is 691 * identical except it does not leak the signal handler. 692 */ 693 gulong owl_signal_connect_object(gpointer sender, const gchar *detailed_signal, GCallback c_handler, gpointer receiver, GConnectFlags connect_flags) 694 { 695 g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (sender), 0); 696 g_return_val_if_fail (detailed_signal != NULL, 0); 697 g_return_val_if_fail (c_handler != NULL, 0); 698 699 if (receiver) { 700 SignalData *sdata; 701 GClosure *closure; 702 gulong signal_id; 703 704 g_return_val_if_fail (G_IS_OBJECT (receiver), 0); 705 706 closure = ((connect_flags & G_CONNECT_SWAPPED) ? g_cclosure_new_object_swap : g_cclosure_new_object) (c_handler, receiver); 707 signal_id = g_signal_connect_closure (sender, detailed_signal, closure, connect_flags & G_CONNECT_AFTER); 708 709 /* Register the missing hooks */ 710 sdata = g_slice_new0(SignalData); 711 sdata->sender = sender; 712 sdata->signal_id = signal_id; 713 714 g_closure_add_invalidate_notifier(closure, sdata, _closure_invalidated); 715 716 return signal_id; 717 } else { 718 return g_signal_connect_data(sender, detailed_signal, c_handler, NULL, NULL, connect_flags); 719 } 720 } 721 722 /* 723 * There are three ways the signal could come to an end: 724 * 725 * 1. The user explicitly disconnects it with the returned signal_id. 726 * - In that case, the disconnection unref's the closure, causing it 727 * to first be invalidated. The handler's already disconnected, so 728 * we have no work to do. 729 * 2. The sender gets destroyed. 730 * - GObject will disconnect each signal which then goes into the above 731 * case. Our handler does no work. 732 * 3. The receiver gets destroyed. 733 * - The GClosure was created by g_cclosure_new_object_{,swap} which gets 734 * invalidated when the receiver is destroyed. We then follow through case 1 735 * again, but *this* time, the handler has not been disconnected. We then 736 * clean up ourselves. 737 * 738 * We can't actually hook into this process earlier with weakrefs as GObject 739 * will, on object dispose, first disconnect signals, then invalidate closures, 740 * and notify weakrefs last. 741 */ 742 static void _closure_invalidated(gpointer data, GClosure *closure) 743 { 744 SignalData *sdata = data; 745 if (g_signal_handler_is_connected(sdata->sender, sdata->signal_id)) { 746 g_signal_handler_disconnect(sdata->sender, sdata->signal_id); 747 } 748 g_slice_free(SignalData, sdata); 749 } 750 -
variable.c
rd544237 rf6fae8d 400 400 int rv; 401 401 rv = owl_variable_int_set_default(v, newval); 402 if (0 == rv) owl_ global_set_relayout_pending(&g);402 if (0 == rv) owl_mainpanel_layout_contents(&g.mainpanel); 403 403 return(rv); 404 404 } -
viewwin.c
rfe4c786 r0b9e607 4 4 #define BOTTOM_OFFSET 1 5 5 6 static void owl_viewwin_redraw(owl_window *w, WINDOW *curswin, void *user_data); 7 6 8 /* initialize the viewwin e. 'win' is an already initialzed curses 7 9 * window that will be used by viewwin 8 10 */ 9 void owl_viewwin_init_text(owl_viewwin *v, WINDOW *win, int winlines, int wincols, const char *text)11 void owl_viewwin_init_text(owl_viewwin *v, owl_window *win, const char *text) 10 12 { 11 13 owl_fmtext_init_null(&(v->fmtext)); … … 19 21 v->topline=0; 20 22 v->rightshift=0; 21 v->winlines=winlines;22 v->wincols=wincols;23 v->curswin=win;24 23 v->onclose_hook = NULL; 24 25 owl_viewwin_set_window(v, win); 25 26 } 26 27 … … 28 29 owl_fmtext_append_normal(&(v->fmtext), text); 29 30 v->textlines=owl_fmtext_num_lines(&(v->fmtext)); 31 owl_window_dirty(v->window); 30 32 } 31 33 … … 33 35 * window that will be used by viewwin 34 36 */ 35 void owl_viewwin_init_fmtext(owl_viewwin *v, WINDOW *win, int winlines, int wincols, const owl_fmtext *fmtext)37 void owl_viewwin_init_fmtext(owl_viewwin *v, owl_window *win, const owl_fmtext *fmtext) 36 38 { 37 39 char *text; … … 46 48 v->topline=0; 47 49 v->rightshift=0; 48 v->winlines=winlines; 49 v->wincols=wincols; 50 v->curswin=win; 50 51 owl_viewwin_set_window(v, win); 51 52 } 52 53 53 void owl_viewwin_set_ curswin(owl_viewwin *v, WINDOW *w, int winlines, int wincols)54 void owl_viewwin_set_window(owl_viewwin *v, owl_window *w) 54 55 { 55 v->curswin=w; 56 v->winlines=winlines; 57 v->wincols=wincols; 56 if (v->window) { 57 g_signal_handler_disconnect(v->window, v->sig_redraw_id); 58 g_object_unref(v->window); 59 } 60 v->window = w; 61 if (w) { 62 g_object_ref(v->window); 63 v->sig_redraw_id = g_signal_connect(w, "redraw", G_CALLBACK(owl_viewwin_redraw), v); 64 } 58 65 } 59 66 … … 64 71 65 72 /* regenerate text on the curses window. */ 66 void owl_viewwin_redisplay(owl_viewwin *v)73 static void owl_viewwin_redraw(owl_window *w, WINDOW *curswin, void *user_data) 67 74 { 68 75 owl_fmtext fm1, fm2; 76 owl_viewwin *v = user_data; 77 int winlines, wincols; 69 78 70 /* avoid segfault when screen too small to create curswin */ 71 if (v->curswin == NULL) 72 return; 79 owl_window_get_position(w, &winlines, &wincols, 0, 0); 73 80 74 werase( v->curswin);75 wmove( v->curswin, 0, 0);81 werase(curswin); 82 wmove(curswin, 0, 0); 76 83 77 84 owl_fmtext_init_null(&fm1); 78 85 owl_fmtext_init_null(&fm2); 79 86 80 owl_fmtext_truncate_lines(&(v->fmtext), v->topline, v->winlines-BOTTOM_OFFSET, &fm1);81 owl_fmtext_truncate_cols(&fm1, v->rightshift, v->wincols-1+v->rightshift, &fm2);87 owl_fmtext_truncate_lines(&(v->fmtext), v->topline, winlines-BOTTOM_OFFSET, &fm1); 88 owl_fmtext_truncate_cols(&fm1, v->rightshift, wincols-1+v->rightshift, &fm2); 82 89 83 owl_fmtext_curs_waddstr_without_search(&fm2, v->curswin);90 owl_fmtext_curs_waddstr_without_search(&fm2, curswin); 84 91 85 92 /* print the message at the bottom */ 86 wmove( v->curswin, v->winlines-1, 0);87 wattrset( v->curswin, A_REVERSE);88 if (v->textlines - v->topline > v->winlines-BOTTOM_OFFSET) {89 waddstr( v->curswin, "--More-- (Space to see more, 'q' to quit)");93 wmove(curswin, winlines-1, 0); 94 wattrset(curswin, A_REVERSE); 95 if (v->textlines - v->topline > winlines-BOTTOM_OFFSET) { 96 waddstr(curswin, "--More-- (Space to see more, 'q' to quit)"); 90 97 } else { 91 waddstr( v->curswin, "--End-- (Press 'q' to quit)");98 waddstr(curswin, "--End-- (Press 'q' to quit)"); 92 99 } 93 wattroff( v->curswin, A_REVERSE);100 wattroff(curswin, A_REVERSE); 94 101 95 102 owl_fmtext_cleanup(&fm1); … … 99 106 void owl_viewwin_pagedown(owl_viewwin *v) 100 107 { 101 v->topline+=v->winlines - BOTTOM_OFFSET; 102 if ( (v->topline+v->winlines-BOTTOM_OFFSET) > v->textlines) { 103 v->topline = v->textlines - v->winlines + BOTTOM_OFFSET; 108 int winlines; 109 owl_window_get_position(v->window, &winlines, 0, 0, 0); 110 v->topline+=winlines - BOTTOM_OFFSET; 111 if ( (v->topline+winlines-BOTTOM_OFFSET) > v->textlines) { 112 v->topline = v->textlines - winlines + BOTTOM_OFFSET; 104 113 } 114 owl_window_dirty(v->window); 105 115 } 106 116 107 117 void owl_viewwin_linedown(owl_viewwin *v) 108 118 { 119 int winlines; 120 owl_window_get_position(v->window, &winlines, 0, 0, 0); 109 121 v->topline++; 110 if ( (v->topline+ v->winlines-BOTTOM_OFFSET) > v->textlines) {111 v->topline = v->textlines - v->winlines + BOTTOM_OFFSET;122 if ( (v->topline+winlines-BOTTOM_OFFSET) > v->textlines) { 123 v->topline = v->textlines - winlines + BOTTOM_OFFSET; 112 124 } 125 owl_window_dirty(v->window); 113 126 } 114 127 115 128 void owl_viewwin_pageup(owl_viewwin *v) 116 129 { 117 v->topline-=v->winlines; 130 int winlines; 131 owl_window_get_position(v->window, &winlines, 0, 0, 0); 132 v->topline-=winlines; 118 133 if (v->topline<0) v->topline=0; 134 owl_window_dirty(v->window); 119 135 } 120 136 … … 123 139 v->topline--; 124 140 if (v->topline<0) v->topline=0; 141 owl_window_dirty(v->window); 125 142 } 126 143 … … 128 145 { 129 146 v->rightshift+=n; 147 owl_window_dirty(v->window); 130 148 } 131 149 … … 134 152 v->rightshift-=n; 135 153 if (v->rightshift<0) v->rightshift=0; 154 owl_window_dirty(v->window); 136 155 } 137 156 … … 140 159 v->topline=0; 141 160 v->rightshift=0; 161 owl_window_dirty(v->window); 142 162 } 143 163 144 164 void owl_viewwin_bottom(owl_viewwin *v) 145 165 { 146 v->topline = v->textlines - v->winlines + BOTTOM_OFFSET; 166 int winlines; 167 owl_window_get_position(v->window, &winlines, 0, 0, 0); 168 v->topline = v->textlines - winlines + BOTTOM_OFFSET; 169 owl_window_dirty(v->window); 147 170 } 148 171 149 172 void owl_viewwin_cleanup(owl_viewwin *v) 150 173 { 174 owl_viewwin_set_window(v, NULL); 151 175 if (v->onclose_hook) { 152 176 v->onclose_hook(v, v->onclose_hook_data); -
.gitignore
r7d03c8d rde18326 35 35 pm_to_blib 36 36 stamp-h1 37 tester38 37 varstubs.c -
README
r62c91c1 raeadc74 1 1 BarnOwl - owl, with more ponies 2 2 3 Source is freely available from http://github.com/barnowl/barnowl/ 4 3 5 Based on owl 2.1.11, by James Kretchmar (http://www.ktools.org) 4 5 This project is a work in progress.6 We guarantee no stability of form or function.7 6 8 7 Notes: -
barnowl
r9a7b4f2 rde18326 5 5 6 6 SRCDIR=`dirname "${0}"` 7 EXE="$ SRCDIR/barnowl.bin"7 EXE="$0.bin" 8 8 9 9 if ! test -x "$EXE"; then -
perl/modules/Jabber/lib/BarnOwl/Message/Jabber.pm
r8278543 r2f25537 20 20 sub to { shift->{to} }; 21 21 sub room { shift->{room} }; 22 sub nick { shift->{nick} }; 22 23 sub subject { shift->{subject} }; 23 24 sub status { shift->{status} } … … 41 42 sub long_sender { 42 43 my $self = shift; 44 if ($self->jtype eq 'groupchat' && $self->nick) { 45 my $from_jid = Net::Jabber::JID->new($self->from); 46 if ($from_jid->GetJID('base') eq $self->room && 47 $from_jid->GetResource() eq $self->nick) { 48 return $self->nick; 49 } 50 } 43 51 return $self->from; 44 52 } -
perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
raa0a0b5 r2f25537 1241 1241 $muc = $connection->FindMUC(jid => $to); 1242 1242 } 1243 $props{from} = $muc->GetFullJID($from) || $ nick || $room;1243 $props{from} = $muc->GetFullJID($from) || $props{from}; 1244 1244 $props{sender} = $nick || $room; 1245 1245 $props{recipient} = $room; -
perl/modules/Twitter/.gitignore
r47a5e46 rd27ecf3 1 1 *~ 2 2 blib/ 3 inc/4 3 META.yml 5 4 Makefile 6 5 Twitter.par 7 6 pm_to_blib 7 inc/.author -
perl/modules/Twitter/lib/BarnOwl/Message/Twitter.pm
rf6413c3 r5d59c1e 17 17 sub service { return (shift->{"service"} || "http://twitter.com"); } 18 18 sub account { return shift->{"account"}; } 19 sub retweeted_by { shift->{retweeted_by}; } 19 20 sub long_sender { 20 21 my $self = shift; 21 22 $self->service =~ m#^\s*(.*?://.*?)/.*$#; 22 23 my $service = $1 || $self->service; 23 return $service . '/' . $self->sender 24 my $long = $service . '/' . $self->sender; 25 if ($self->retweeted_by) { 26 $long = "(retweeted by " . $self->retweeted_by . ") $long"; 27 } 28 return $long; 24 29 } 25 30 -
perl/modules/Twitter/lib/BarnOwl/Module/Twitter/Handle.pm
ra2640485 r5d59c1e 248 248 next; 249 249 } 250 my $orig = $tweet->{retweeted_status}; 251 $orig = $tweet unless defined($orig); 252 250 253 my $msg = BarnOwl::Message->new( 251 254 type => 'Twitter', 252 sender => $ tweet->{user}{screen_name},255 sender => $orig->{user}{screen_name}, 253 256 recipient => $self->{cfg}->{user} || $self->{user}, 254 257 direction => 'in', 255 source => decode_entities($ tweet->{source}),256 location => decode_entities($ tweet->{user}{location}||""),257 body => decode_entities($ tweet->{text}),258 source => decode_entities($orig->{source}), 259 location => decode_entities($orig->{user}{location}||""), 260 body => decode_entities($orig->{text}), 258 261 status_id => $tweet->{id}, 259 262 service => $self->{cfg}->{service}, 260 263 account => $self->{cfg}->{account_nickname}, 264 $tweet->{retweeted_status} ? (retweeted_by => $tweet->{user}{screen_name}) : () 261 265 ); 262 266 BarnOwl::queue_message($msg); -
perlconfig.c
r3aa0522 rdec60b4 12 12 /* extern XS(boot_DBI); */ 13 13 14 static void owl_perl_xs_init(pTHX) 14 void owl_perl_xs_init(pTHX) /* noproto */ 15 15 { 16 16 const char *file = __FILE__; … … 363 363 perl_construct(p); 364 364 365 PL_exit_flags |= PERL_EXIT_DESTRUCT_END; 366 365 367 owl_global_set_no_have_config(&g); 366 368 -
runtests.sh
r9f026c1 r5aa33fd 1 1 #!/bin/sh 2 HARNESS_PERL=./perl_tester exec prove t/ 2 SRCDIR=`dirname "${0}"` 3 4 export BARNOWL_DATA_DIR="$SRCDIR/perl/" 5 export BARNOWL_BIN_DIR="$SRCDIR/" 6 7 HARNESS_PERL=./tester exec prove t/ -
t/00-core-tests.t
r1cf3f8d3 r95414bf 1 1 #!/usr/bin/env perl 2 2 use File::Basename; 3 system(dirname($0) . "/../tester" );3 system(dirname($0) . "/../tester", "--builtin"); -
t/mock.pl
r42ad917 r5aa33fd 1 use File::Basename;2 use lib (dirname($0) . '/../perl/lib');3 4 1 package BarnOwl; 5 2 use strict; 6 3 use warnings; 7 use Carp;8 4 9 sub get_data_dir {"."} 10 sub get_config_dir {"."} 11 sub create_style {} 12 13 sub debug { 5 no warnings 'redefine'; 6 sub debug($) { 14 7 warn "[DEBUG] ", shift, "\n" if $ENV{TEST_VERBOSE}; 15 8 } 16 9 17 sub BarnOwl::Internal::new_command {}18 sub BarnOwl::Internal::new_variable_bool {}19 sub BarnOwl::Internal::new_variable_int {}20 sub BarnOwl::Internal::new_variable_string {}21 sub BarnOwl::Editwin::save_excursion(&) {}22 23 use BarnOwl;24 25 10 1; -
tester.c
r3f6555d rdec60b4 1 #define OWL_PERL 2 #define WINDOW FAKE_WINDOW 1 3 #include "owl.h" 4 #undef WINDOW 5 2 6 #include <unistd.h> 3 7 #include <stdlib.h> 4 8 9 #undef instr 10 #include <curses.h> 11 5 12 owl_global g; 6 13 7 14 int numtests; 8 15 16 int owl_regtest(void); 9 17 int owl_util_regtest(void); 10 18 int owl_dict_regtest(void); … … 14 22 int owl_editwin_regtest(void); 15 23 24 extern void owl_perl_xs_init(pTHX); 25 16 26 int main(int argc, char **argv, char **env) 17 27 { 28 FILE *rnull; 29 FILE *wnull; 30 char *perlerr; 31 int status = 0; 32 33 if (argc <= 1) { 34 fprintf(stderr, "Usage: %s --builtin|TEST.t|-le CODE\n", argv[0]); 35 return 1; 36 } 37 18 38 /* initialize a fake ncurses, detached from std{in,out} */ 19 FILE *rnull = fopen("/dev/null", "r");20 FILE *wnull = fopen("/dev/null", "w");39 wnull = fopen("/dev/null", "w"); 40 rnull = fopen("/dev/null", "r"); 21 41 newterm("xterm", wnull, rnull); 22 42 /* initialize global structures */ 23 43 owl_global_init(&g); 24 44 45 perlerr = owl_perlconfig_initperl(NULL, &argc, &argv, &env); 46 if (perlerr) { 47 endwin(); 48 fprintf(stderr, "Internal perl error: %s\n", perlerr); 49 status = 1; 50 goto out; 51 } 52 53 owl_global_complete_setup(&g); 54 owl_global_setup_default_filters(&g); 55 56 owl_view_create(owl_global_get_current_view(&g), "main", 57 owl_global_get_filter(&g, "all"), 58 owl_global_get_style_by_name(&g, "default")); 59 60 owl_function_firstmsg(); 61 62 ENTER; 63 SAVETMPS; 64 65 if (strcmp(argv[1], "--builtin") == 0) { 66 status = owl_regtest(); 67 } else if (strcmp(argv[1], "-le") == 0 && argc > 2) { 68 /* 69 * 'prove' runs its harness perl with '-le CODE' to get some 70 * information out. 71 */ 72 moreswitches("l"); 73 eval_pv(argv[2], true); 74 } else { 75 sv_setpv(get_sv("0", false), argv[1]); 76 sv_setpv(get_sv("main::test_prog", TRUE), argv[1]); 77 78 eval_pv("do $main::test_prog; die($@) if($@)", true); 79 } 80 81 status = 0; 82 83 FREETMPS; 84 LEAVE; 85 86 out: 87 perl_destruct(owl_global_get_perlinterp(&g)); 88 perl_free(owl_global_get_perlinterp(&g)); 89 /* probably not necessary, but tear down the screen */ 90 endwin(); 91 fclose(rnull); 92 fclose(wnull); 93 return status; 94 } 95 96 int owl_regtest(void) { 25 97 numtests = 0; 26 98 int numfailures=0; … … 38 110 } 39 111 printf("1..%d\n", numtests); 40 41 /* probably not necessary, but tear down the screen */42 endwin();43 fclose(rnull);44 fclose(wnull);45 112 46 113 return(numfailures); -
zcrypt.c
r60fcd71 r3c2c7fc 88 88 89 89 cipher_pair ciphers[NCIPHER] = { 90 [CIPHER_DES] { do_encrypt_des, do_decrypt_des},91 [CIPHER_AES] { do_encrypt_aes, do_decrypt_aes},90 [CIPHER_DES] = { do_encrypt_des, do_decrypt_des}, 91 [CIPHER_AES] = { do_encrypt_aes, do_decrypt_aes}, 92 92 }; 93 93 … … 113 113 int mode = M_NONE; 114 114 115 extern int optind, opterr;116 extern char *optarg;117 115 char c; 118 116 -
zephyr.c
r922f589 r987cf3f 852 852 char *tmpbuff, *myuser, *to; 853 853 owl_message *mout; 854 owl_zwrite *z; 854 855 855 856 /* bail if it doesn't look like a message we should reply to. Some … … 887 888 owl_free(to); 888 889 890 z = owl_zwrite_new(tmpbuff); 891 owl_zwrite_set_message(z, owl_global_get_zaway_msg(&g)); 892 owl_zwrite_set_zsig(z, "Automated reply:"); 893 889 894 /* display the message as an admin message in the receive window */ 890 mout=owl_function_make_outgoing_zephyr( owl_global_get_zaway_msg(&g), tmpbuff, "Automated reply:");895 mout=owl_function_make_outgoing_zephyr(z); 891 896 owl_global_messagequeue_addmsg(&g, mout); 892 897 owl_free(tmpbuff); 898 owl_zwrite_delete(z); 893 899 #endif 894 900 } -
zwrite.c
rc230bc1 r7bfc613 5 5 #include "owl.h" 6 6 7 owl_zwrite *owl_zwrite_new(const char *line) 8 { 9 owl_zwrite *z = owl_malloc(sizeof *z); 10 if (owl_zwrite_create_from_line(z, line) < 0) { 11 owl_zwrite_delete(z); 12 return NULL; 13 } 14 return z; 15 } 16 7 17 int owl_zwrite_create_from_line(owl_zwrite *z, const char *line) 8 18 { … … 15 25 16 26 /* start with null entries */ 27 z->cmd=NULL; 17 28 z->realm=NULL; 18 29 z->class=NULL; … … 35 46 myargc=argc; 36 47 if (myargc && *(myargv[0])!='-') { 48 z->cmd=owl_strdup(myargv[0]); 37 49 myargc--; 38 50 myargv++; … … 187 199 } 188 200 201 /* Set the message with no post-processing*/ 202 void owl_zwrite_set_message_raw(owl_zwrite *z, const char *msg) 203 { 204 if (z->message) owl_free(z->message); 205 z->message = owl_validate_utf8(msg); 206 } 207 189 208 void owl_zwrite_set_message(owl_zwrite *z, const char *msg) 190 209 { … … 350 369 } 351 370 371 void owl_zwrite_delete(owl_zwrite *z) 372 { 373 owl_zwrite_cleanup(z); 374 owl_free(z); 375 } 376 352 377 void owl_zwrite_cleanup(owl_zwrite *z) 353 378 {
Note: See TracChangeset
for help on using the changeset viewer.