Changes in / [dec60b4:95414bf]
- Files:
-
- 1 added
- 19 deleted
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.am
r5aa33fd r5aa33fd 1 1 ACLOCAL_AMFLAGS = -I m4 2 CFLAGS += $(EXTRA_CFLAGS)3 2 4 3 GIT_DESCRIPTION := $(if $(wildcard .git),$(shell git describe --match='barnowl-*' HEAD 2>/dev/null)) … … 42 41 keypress.c keymap.c keybinding.c cmd.c context.c \ 43 42 aim.c buddy.c buddylist.c style.c errqueue.c \ 44 zbuddylist.c popexec.c select.c wcwidth.c \43 zbuddylist.c popexec.c obarray.c select.c wcwidth.c \ 45 44 glib_compat.c filterproc.c 46 45 -
commands.c
r89ce405 r7ba9e0de 106 106 OWLCMD_ARGS("zwrite", owl_command_zwrite, OWL_CTX_INTERACTIVE, 107 107 "send a zephyr", 108 "zwrite [-n] [-C] [-c class] [-i instance] [-r realm] [-O opc ode] [<user> ...] [-m <message...>]",108 "zwrite [-n] [-C] [-c class] [-i instance] [-r realm] [-O opcde] [<user> ...] [-m <message...>]", 109 109 "Zwrite send a zephyr to the one or more users specified.\n\n" 110 110 "The following options are available:\n\n" … … 138 138 OWLCMD_ARGS("zcrypt", owl_command_zcrypt, OWL_CTX_INTERACTIVE, 139 139 "send an encrypted zephyr", 140 "zcrypt [-n] [-C] [-c class] [-i instance] [-r realm] [-O opc ode] [-m <message...>]\n",140 "zcrypt [-n] [-C] [-c class] [-i instance] [-r realm] [-O opcde] [-m <message...>]\n", 141 141 "Behaves like zwrite but uses encryption. Not for use with\n" 142 142 "personal messages\n"), … … 148 148 "allow editing.\n\n" 149 149 "If 'sender' is specified, reply to the sender.\n\n" 150 "If 'all' or no args are specified, reply public ly to the\n"150 "If 'all' or no args are specified, reply publically to the\n" 151 151 "same class/instance for non-personal messages and to the\n" 152 152 "sender for personal messages.\n\n" … … 266 266 "zpunt <class> <instance> [recipient]\n" 267 267 "zpunt <instance>", 268 "The zpunt command will sup press messagesto the specified\n"268 "The zpunt command will supress message to the specified\n" 269 269 "zephyr triplet. In the second usage messages are suppressed\n" 270 270 "for class MESSAGE and the named instance.\n\n" … … 283 283 "punt <filter-text>", 284 284 "punt <filter-text (multiple words)>\n" 285 "The punt command will sup press messagesto the specified\n"285 "The punt command will supress message to the specified\n" 286 286 "filter\n\n" 287 287 "SEE ALSO: unpunt, zpunt, show zpunts\n"), … … 586 586 "name style after the -s argument.\n" 587 587 "\n" 588 "The other usages listed above are abbre viated forms that simply set\n"588 "The other usages listed above are abbreivated forms that simply set\n" 589 589 "the filter of the current view. The -d option allows you to write a\n" 590 590 "filter expression that will be dynamically created by owl and then\n" … … 594 594 OWLCMD_ARGS("smartnarrow", owl_command_smartnarrow, OWL_CTX_INTERACTIVE, 595 595 "view only messages similar to the current message", 596 "smartnarrow [-i | --instance] [-r | --relat ed]",596 "smartnarrow [-i | --instance] [-r | --relatde]", 597 597 "If the curmsg is a personal message narrow\n" 598 598 " to the conversation with that user.\n" … … 614 614 " message, the filter is to that instance.\n" 615 615 "If the curmsg is a class message, the filter is that class.\n" 616 "If the curmsg is a class message and '-i' is speci fied\n"616 "If the curmsg is a class message and '-i' is specied\n" 617 617 " the filter is to that class and instance.\n"), 618 618 … … 674 674 "for formatting messages.\n\n" 675 675 "Show variables will list the names of all variables.\n\n" 676 "Show errors will show a list of errors e ncountered by Owl.\n\n"676 "Show errors will show a list of errors ecountered by Owl.\n\n" 677 677 "SEE ALSO: filter, view, alias, bindkey, help\n"), 678 678 … … 743 743 "set the search highlight string without searching", 744 744 "setsearch <string>", 745 "The setsearch command highlights all occur rences of its\n"745 "The setsearch command highlights all occurences of its\n" 746 746 "argument and makes it the default argument for future\n" 747 747 "search commands, but does not move the cursor. With\n" … … 2184 2184 argc--; 2185 2185 argv++; 2186 } else if (!strcmp(argv[0], "-r")) { 2187 const char *foo; 2188 foo=owl_function_create_negative_filter(owl_view_get_filtname(owl_global_get_current_view(&g))); 2189 owl_function_change_currentview_filter(foo); 2186 2190 } else if (!strcmp(argv[0], "-s")) { 2187 2191 if (argc<2) { -
doc/code.txt
r44cc9ab r1286893 86 86 Meta. At any one time, there is exactly one active 87 87 keymap which determines where keybindings are looked for 88 (along with its parents).88 (along with its submaps). 89 89 90 90 list: Simple list abstraction. (Uses realloc to resize the list.) -
functions.c
r13ebf92 r7ba9e0de 1999 1999 pclose(p); 2000 2000 2001 if (type == OWL_OUTPUT_RETURN) { 2001 if (type == OWL_OUTPUT_POPUP) { 2002 owl_function_popless_text(out); 2003 } else if (type == OWL_OUTPUT_RETURN) { 2002 2004 owl_free(newbuff); 2003 2005 return out; 2004 2006 } else if (type == OWL_OUTPUT_ADMINMSG) { 2005 2007 owl_function_adminmsg(buff, out); 2008 } else { 2009 owl_function_popless_text(out); 2006 2010 } 2007 2011 owl_free(out); … … 2036 2040 } else if (type == OWL_OUTPUT_RETURN) { 2037 2041 return perlout; 2042 } else { 2043 owl_function_popless_text(perlout); 2038 2044 } 2039 2045 owl_free(perlout); … … 2499 2505 2500 2506 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 2501 }2502 2503 static char *owl_function_smartfilter_cc(const owl_message *m) {2504 const char *ccs;2505 char *filtname;2506 char *text;2507 owl_filter *f;2508 2509 ccs = owl_message_get_attribute_value(m, "zephyr_ccs");2510 2511 filtname = owl_sprintf("conversation-%s", ccs);2512 owl_text_tr(filtname, ' ', '-');2513 2514 if (owl_global_get_filter(&g, filtname)) {2515 return filtname;2516 }2517 2518 text = owl_sprintf("type ^zephyr$ and filter personal and "2519 "zephyr_ccs ^%s%s%s$",2520 owl_getquoting(ccs), ccs, owl_getquoting(ccs));2521 2522 f = owl_filter_new_fromstring(filtname, text);2523 2524 owl_global_add_filter(&g, f);2525 2526 owl_free(text);2527 2528 return filtname;2529 2507 } 2530 2508 … … 2582 2560 if (owl_message_is_type_zephyr(m)) { 2583 2561 if (owl_message_is_personal(m) || owl_message_is_loginout(m)) { 2584 if (owl_message_get_attribute_value(m, "zephyr_ccs") != NULL) {2585 return owl_function_smartfilter_cc(m);2586 }2587 2588 2562 if (owl_message_is_direction_in(m)) { 2589 2563 zperson=short_zuser(owl_message_get_sender(m)); … … 2879 2853 km = owl_keyhandler_get_keymap(kh, kmname); 2880 2854 owl_fmtext_append_bold(&fm, "\n\n----------------------------------------------------------------------------------------------------\n\n"); 2881 owl_keymap_get_details(km, &fm , 0);2855 owl_keymap_get_details(km, &fm); 2882 2856 } 2883 2857 owl_fmtext_append_normal(&fm, "\n"); … … 2905 2879 km = owl_keyhandler_get_keymap(owl_global_get_keyhandler(&g), name); 2906 2880 if (km) { 2907 owl_keymap_get_details(km, &fm , 1);2881 owl_keymap_get_details(km, &fm); 2908 2882 } else { 2909 2883 owl_fmtext_append_normal(&fm, "No such keymap...\n"); -
global.c
r68e5464 r04b16f8 18 18 char *cd; 19 19 20 g->malloced=0; 21 g->freed=0; 22 20 23 gethostname(hostname, MAXHOSTNAMELEN); 21 24 hent=gethostbyname(hostname); … … 50 53 g->filterlist = NULL; 51 54 owl_list_create(&(g->puntlist)); 52 g->messagequeue = g_queue_new();55 owl_list_create(&(g->messagequeue)); 53 56 owl_dict_create(&(g->styledict)); 54 57 g->curmsg_vert_offset=0; … … 110 113 g->pseudologin_notify = 0; 111 114 115 owl_obarray_init(&(g->obarray)); 116 112 117 owl_message_init_fmtext_cache(); 113 118 owl_list_create(&(g->io_dispatch_list)); … … 859 864 void owl_global_messagequeue_addmsg(owl_global *g, owl_message *m) 860 865 { 861 g_queue_push_tail(g->messagequeue, m);866 owl_list_append_element(&(g->messagequeue), m); 862 867 } 863 868 … … 870 875 owl_message *out; 871 876 872 if ( g_queue_is_empty(g->messagequeue))873 return NULL;874 o ut = g_queue_pop_head(g->messagequeue);875 return out;877 if (owl_list_get_size(&(g->messagequeue))==0) return(NULL); 878 out=owl_list_get_element(&(g->messagequeue), 0); 879 owl_list_remove_element(&(g->messagequeue), 0); 880 return(out); 876 881 } 877 882 878 883 int owl_global_messagequeue_pending(owl_global *g) 879 884 { 880 return !g_queue_is_empty(g->messagequeue); 885 if (owl_list_get_size(&(g->messagequeue))==0) return(0); 886 return(1); 881 887 } 882 888 … … 1004 1010 { 1005 1011 return(&(g->startup_tio)); 1012 } 1013 1014 const char * owl_global_intern(owl_global *g, const char * string) 1015 { 1016 return owl_obarray_insert(&(g->obarray), string); 1006 1017 } 1007 1018 -
keymap.c
r44cc9ab r8a921b5 1 1 #include <string.h> 2 2 #include "owl.h" 3 4 static void _owl_keymap_format_bindings(const owl_keymap *km, owl_fmtext *fm);5 static void _owl_keymap_format_with_parents(const owl_keymap *km, owl_fmtext *fm);6 3 7 4 /* returns 0 on success */ … … 12 9 if ((km->desc = owl_strdup(desc)) == NULL) return(-1); 13 10 if (0 != owl_list_create(&km->bindings)) return(-1); 14 km-> parent= NULL;11 km->submap = NULL; 15 12 km->default_fn = default_fn; 16 13 km->prealways_fn = prealways_fn; … … 27 24 } 28 25 29 void owl_keymap_set_ parent(owl_keymap *km, const owl_keymap *parent)30 { 31 km-> parent = parent;26 void owl_keymap_set_submap(owl_keymap *km, const owl_keymap *submap) 27 { 28 km->submap = submap; 32 29 } 33 30 … … 89 86 90 87 /* Appends details about the keymap to fm */ 91 void owl_keymap_get_details(const owl_keymap *km, owl_fmtext *fm, int recurse) 92 { 88 void owl_keymap_get_details(const owl_keymap *km, owl_fmtext *fm) 89 { 90 int i, nbindings; 91 const owl_keybinding *kb; 92 93 93 owl_fmtext_append_bold(fm, "KEYMAP - "); 94 94 owl_fmtext_append_bold(fm, km->name); … … 99 99 owl_fmtext_append_normal(fm, "\n"); 100 100 } 101 if (km-> parent) {102 owl_fmtext_append_normal(fm, OWL_TABSTR "Has parent: ");103 owl_fmtext_append_normal(fm, km-> parent->name);101 if (km->submap) { 102 owl_fmtext_append_normal(fm, OWL_TABSTR "Has submap: "); 103 owl_fmtext_append_normal(fm, km->submap->name); 104 104 owl_fmtext_append_normal(fm, "\n"); 105 105 } … … 119 119 120 120 owl_fmtext_append_bold(fm, "\nKey bindings:\n\n"); 121 if (recurse) {122 _owl_keymap_format_with_parents(km, fm);123 } else {124 _owl_keymap_format_bindings(km, fm);125 }126 }127 128 static void _owl_keymap_format_with_parents(const owl_keymap *km, owl_fmtext *fm)129 {130 while (km) {131 _owl_keymap_format_bindings(km, fm);132 km = km->parent;133 if (km) {134 owl_fmtext_append_bold(fm, "\nInherited from ");135 owl_fmtext_append_bold(fm, km->name);136 owl_fmtext_append_bold(fm, ":\n\n");137 }138 }139 }140 141 static void _owl_keymap_format_bindings(const owl_keymap *km, owl_fmtext *fm)142 {143 int i, nbindings;144 const owl_keybinding *kb;145 146 121 nbindings = owl_list_get_size(&km->bindings); 147 122 for (i=0; i<nbindings; i++) { … … 273 248 } 274 249 275 /* deal with the always_fn for the map and parents */276 for (km=kh->active; km; km=km-> parent) {250 /* deal with the always_fn for the map and submaps */ 251 for (km=kh->active; km; km=km->submap) { 277 252 if (km->prealways_fn) { 278 253 km->prealways_fn(j); … … 281 256 282 257 /* search for a match. goes through active keymap and then 283 * through parents... TODO: clean this up so we can pull258 * through submaps... TODO: clean this up so we can pull 284 259 * keyhandler and keymap apart. */ 285 for (km=kh->active; km; km=km-> parent) {260 for (km=kh->active; km; km=km->submap) { 286 261 for (i=owl_list_get_size(&km->bindings)-1; i>=0; i--) { 287 262 kb = owl_list_get_element(&km->bindings, i); -
keys.c
r44cc9ab r8a5b5a1 30 30 "Text editing and command window", 31 31 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 32 owl_keymap_set_ parent(km_editwin, km_global);32 owl_keymap_set_submap(km_editwin, km_global); 33 33 /* 34 34 BIND_CMD("F1", "help", ""); … … 99 99 "Multi-line text editing", 100 100 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 101 owl_keymap_set_ parent(km_ew_multi, km_editwin);101 owl_keymap_set_submap(km_ew_multi, km_editwin); 102 102 103 103 BIND_CMD("UP", "edit:move-up-line", ""); … … 129 129 "Single-line text editing", 130 130 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 131 owl_keymap_set_ parent(km_ew_onel, km_editwin);131 owl_keymap_set_submap(km_ew_onel, km_editwin); 132 132 133 133 BIND_CMD("C-u", "edit:delete-all", "Clears the entire line"); … … 154 154 "Single-line response to question", 155 155 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 156 owl_keymap_set_ parent(km_ew_onel, km_editwin);156 owl_keymap_set_submap(km_ew_onel, km_editwin); 157 157 158 158 BIND_CMD("C-u", "edit:delete-all", "Clears the entire line"); … … 169 169 "Pop-up window (eg, help)", 170 170 owl_keys_default_invalid, NULL, owl_keys_popless_postalways); 171 owl_keymap_set_ parent(km_viewwin, km_global);171 owl_keymap_set_submap(km_viewwin, km_global); 172 172 173 173 BIND_CMD("SPACE", "popless:scroll-down-page", ""); … … 222 222 "Main window / message list", 223 223 owl_keys_default_invalid, owl_keys_recwin_prealways, NULL); 224 owl_keymap_set_ parent(km_mainwin, km_global);224 owl_keymap_set_submap(km_mainwin, km_global); 225 225 BIND_CMD("C-x C-c", "start-command quit", ""); 226 226 BIND_CMD("F1", "help", ""); -
logging.c
r839697d r91634ec 128 128 char filename[MAXPATHLEN], *logpath; 129 129 char *to, *temp; 130 GList *cc;131 130 132 131 /* expand ~ in path names */ … … 136 135 if (owl_message_is_type_zephyr(m)) { 137 136 /* If this has CC's, do all but the "recipient" which we'll do below */ 138 cc = owl_message_get_cc_without_recipient(m); 139 while (cc != NULL) { 140 temp = short_zuser(cc->data); 141 snprintf(filename, MAXPATHLEN, "%s/%s", logpath, temp); 142 owl_log_append(m, filename); 143 144 owl_free(cc->data); 145 cc = g_list_delete_link(cc, cc); 146 } 147 137 to = owl_message_get_cc_without_recipient(m); 138 if (to != NULL) { 139 temp = strtok(to, " "); 140 while (temp != NULL) { 141 temp = short_zuser(temp); 142 snprintf(filename, MAXPATHLEN, "%s/%s", logpath, temp); 143 owl_log_append(m, filename); 144 temp = strtok(NULL, " "); 145 } 146 owl_free(to); 147 } 148 148 to = short_zuser(owl_message_get_recipient(m)); 149 149 } else if (owl_message_is_type_jabber(m)) { … … 325 325 * the sender, as well. 326 326 */ 327 char *temp; 328 GList *cc; 327 char *cc, *temp; 329 328 cc = owl_message_get_cc_without_recipient(m); 330 while (cc != NULL) { 331 temp = short_zuser(cc->data); 332 if (strcasecmp(temp, frombuff) != 0) { 333 snprintf(filename, MAXPATHLEN, "%s/%s", logpath, temp); 334 owl_log_append(m, filename); 329 if (cc != NULL) { 330 temp = strtok(cc, " "); 331 while (temp != NULL) { 332 temp = short_zuser(temp); 333 if (strcasecmp(temp, frombuff) != 0) { 334 snprintf(filename, MAXPATHLEN, "%s/%s", logpath, temp); 335 owl_log_append(m, filename); 336 } 337 temp = strtok(NULL, " "); 335 338 } 336 337 owl_free(cc->data); 338 cc = g_list_delete_link(cc, cc); 339 owl_free(cc); 339 340 } 340 341 } -
message.c
rc314f39 r9a7b4f2 61 61 owl_pair *p = NULL, *pair = NULL; 62 62 63 attrname = g_intern_string(attrname);64 65 63 /* look for an existing pair with this key, */ 66 64 j=owl_list_get_size(&(m->attributes)); 67 65 for (i=0; i<j; i++) { 68 66 p=owl_list_get_element(&(m->attributes), i); 69 if ( owl_pair_get_key(p) == attrname) {67 if (!strcmp(owl_pair_get_key(p), attrname)) { 70 68 owl_free(owl_pair_get_value(p)); 71 69 pair = p; … … 76 74 if(pair == NULL) { 77 75 pair = owl_malloc(sizeof(owl_pair)); 78 owl_pair_create(pair, attrname, NULL);76 owl_pair_create(pair, owl_global_intern(&g, attrname), NULL); 79 77 owl_list_append_element(&(m->attributes), pair); 80 78 } … … 89 87 int i, j; 90 88 owl_pair *p; 91 GQuark quark;92 93 quark = g_quark_try_string(attrname);94 if (quark == 0)95 /* don't bother inserting into string table */96 return NULL;97 attrname = g_quark_to_string(quark);98 89 99 90 j=owl_list_get_size(&(m->attributes)); 100 91 for (i=0; i<j; i++) { 101 92 p=owl_list_get_element(&(m->attributes), i); 102 if ( owl_pair_get_key(p) == attrname) {93 if (!strcmp(owl_pair_get_key(p), attrname)) { 103 94 return(owl_pair_get_value(p)); 104 95 } … … 505 496 void owl_message_set_hostname(owl_message *m, const char *hostname) 506 497 { 507 m->hostname = g_intern_string(hostname);498 m->hostname=owl_global_intern(&g, hostname); 508 499 } 509 500 … … 593 584 594 585 /* caller must free return value */ 595 GList*owl_message_get_cc_without_recipient(const owl_message *m)596 { 597 char *cc, * shortuser, *recip;586 char *owl_message_get_cc_without_recipient(const owl_message *m) 587 { 588 char *cc, *out, *end, *shortuser, *recip; 598 589 const char *user; 599 GList *out = NULL;600 590 601 591 cc = owl_message_get_cc(m); … … 604 594 605 595 recip = short_zuser(owl_message_get_recipient(m)); 596 out = owl_malloc(strlen(cc) + 2); 597 end = out; 606 598 607 599 user = strtok(cc, " "); … … 609 601 shortuser = short_zuser(user); 610 602 if (strcasecmp(shortuser, recip) != 0) { 611 out = g_list_prepend(out, owl_strdup(user)); 603 strcpy(end, user); 604 end[strlen(user)] = ' '; 605 end += strlen(user) + 1; 612 606 } 613 607 owl_free(shortuser); 614 608 user = strtok(NULL, " "); 615 609 } 610 end[0] = '\0'; 616 611 617 612 owl_free(recip); 618 613 owl_free(cc); 614 615 if (strlen(out) == 0) { 616 owl_free(out); 617 out = NULL; 618 } 619 619 620 620 return(out); … … 732 732 owl_message_set_recipient(m, "looprecip"); 733 733 owl_message_set_isprivate(m); 734 }735 736 void owl_message_save_ccs(owl_message *m) {737 GList *cc;738 char *tmp;739 740 cc = owl_message_get_cc_without_recipient(m);741 742 if (cc != NULL) {743 GString *recips = g_string_new("");744 cc = g_list_prepend(cc, short_zuser(owl_message_get_sender(m)));745 cc = g_list_prepend(cc, short_zuser(owl_message_get_recipient(m)));746 cc = g_list_sort(cc, (GCompareFunc)strcasecmp);747 748 while(cc != NULL) {749 /* Collapse any identical entries */750 while (cc->next && strcasecmp(cc->data, cc->next->data) == 0) {751 owl_free(cc->data);752 cc = g_list_delete_link(cc, cc);753 }754 755 tmp = short_zuser(cc->data);756 g_string_append(recips, tmp);757 758 owl_free(tmp);759 owl_free(cc->data);760 cc = g_list_delete_link(cc, cc);761 762 if (cc)763 g_string_append_c(recips, ' ');764 }765 766 owl_message_set_attribute(m, "zephyr_ccs", recips->str);767 g_string_free(recips, true);768 }769 734 } 770 735 … … 904 869 } 905 870 } 906 907 owl_message_save_ccs(m);908 871 } 909 872 #else … … 1000 963 owl_message_set_isprivate(m); 1001 964 } 1002 1003 owl_message_save_ccs(m);1004 965 } 1005 966 -
owl.c
r04b16f8 r04b16f8 589 589 owl_global_push_context(&g, OWL_CTX_READCONFIG|OWL_CTX_RECV, NULL, "recv"); 590 590 591 /* If we ever deprecate the mainloop hook, remove this. */ 592 owl_select_add_timer(0, 1, owl_perlconfig_mainloop, NULL, NULL); 593 591 594 owl_select_add_pre_select_action(owl_refresh_pre_select_action, NULL, NULL); 592 595 owl_select_add_pre_select_action(owl_process_messages, NULL, NULL); -
owl.h
r68e5464 r7ba9e0de 476 476 char *desc; /* description */ 477 477 owl_list bindings; /* key bindings */ 478 const struct _owl_keymap * parent; /* parent*/478 const struct _owl_keymap *submap; /* submap */ 479 479 void (*default_fn)(owl_input j); /* default action (takes a keypress) */ 480 480 void (*prealways_fn)(owl_input j); /* always called before a keypress is received */ … … 521 521 short **pairs; 522 522 } owl_colorpair_mgr; 523 524 typedef struct _owl_obarray { 525 owl_list strings; 526 } owl_obarray; 523 527 524 528 typedef struct _owl_io_dispatch { … … 595 599 owl_colorpair_mgr cpmgr; 596 600 pid_t newmsgproc_pid; 601 int malloced, freed; 597 602 owl_regex search_re; 598 603 aim_session_t aimsess; … … 605 610 char *aim_screenname_for_filters; /* currently logged in AIM screen name */ 606 611 owl_buddylist buddylist; /* list of logged in AIM buddies */ 607 GQueue *messagequeue;/* for queueing up aim and other messages */612 owl_list messagequeue; /* for queueing up aim and other messages */ 608 613 owl_dict styledict; /* global dictionary of available styles */ 609 614 char *response; /* response to the last question asked */ … … 618 623 int pseudologin_notify; 619 624 struct termios startup_tio; 625 owl_obarray obarray; 620 626 owl_list io_dispatch_list; 621 627 owl_list psa_list; -
perl/lib/BarnOwl/Hooks.pm
r3aa0522 rb30c256 79 79 our %EXPORT_TAGS = (all => [@EXPORT_OK]); 80 80 81 use BarnOwl::MainLoopCompatHook;82 83 81 our $startup = BarnOwl::Hook->new; 84 82 our $shutdown = BarnOwl::Hook->new; 85 83 our $receiveMessage = BarnOwl::Hook->new; 86 84 our $newMessage = BarnOwl::Hook->new; 87 our $mainLoop = BarnOwl:: MainLoopCompatHook->new;85 our $mainLoop = BarnOwl::Hook->new; 88 86 our $getBuddyList = BarnOwl::Hook->new; 89 87 our $getQuickstart = BarnOwl::Hook->new; … … 164 162 } 165 163 166 $mainLoop->check_owlconf();167 164 $startup->run(0); 168 165 BarnOwl::startup() if *BarnOwl::startup{CODE}; … … 189 186 190 187 BarnOwl::new_msg($m) if *BarnOwl::new_msg{CODE}; 188 } 189 190 sub _mainloop_hook { 191 $mainLoop->run; 192 BarnOwl::mainloop_hook() if *BarnOwl::mainloop_hook{CODE}; 191 193 } 192 194 -
perl/lib/BarnOwl/Message/Generic.pm
r5d1324f ree183be 6 6 use base qw( BarnOwl::Message ); 7 7 8 sub body { "" }9 10 8 11 9 1; -
perl/lib/BarnOwl/Style/Default.pm
r08544e0 r0fe69d2 32 32 my $m = shift; 33 33 return $m->is_personal && $m->direction eq "in"; 34 }35 36 sub maybe {37 my $x = shift;38 return defined($x) ? $x : "";39 34 } 40 35 … … 104 99 $header .= ' / ' . $self->humanize($m->subcontext, 1); 105 100 } 106 $header .= ' / @b{' . maybe($m->pretty_sender). '}';101 $header .= ' / @b{' . $m->pretty_sender . '}'; 107 102 } 108 103 -
perl/lib/BarnOwl/Timer.pm
r8d16e58 ree183be 21 21 } 22 22 23 sub stop {24 my $self = shift;25 if(defined($self->{timer})) {26 BarnOwl::Internal::remove_timer($self->{timer});27 undef $self->{timer};28 }29 }30 31 23 sub do_callback { 32 24 my $self = shift; … … 36 28 sub DESTROY { 37 29 my $self = shift; 38 $self->stop; 30 if(defined($self->{timer})) { 31 BarnOwl::Internal::remove_timer($self->{timer}); 32 } 39 33 } 40 34 -
perl/modules/Jabber/lib/BarnOwl/Message/Jabber.pm
r2f25537 rc854e74 20 20 sub to { shift->{to} }; 21 21 sub room { shift->{room} }; 22 sub nick { shift->{nick} };23 22 sub subject { shift->{subject} }; 24 23 sub status { shift->{status} } … … 42 41 sub long_sender { 43 42 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 }51 43 return $self->from; 52 44 } … … 85 77 } elsif ($self->jtype eq 'groupchat') { 86 78 my $room = $self->room; 87 if ($inst) { 88 my $subject = $self->subject; 89 $filter = "jabber-room-$room-subject-$subject"; 90 BarnOwl::command(qw[filter], $filter, 91 qw[type ^jabber$ and room], "^\Q$room\E\$", 92 qw[and subject], "^\Q$subject\E\$"); 93 } else { 94 $filter = "jabber-room-$room"; 95 BarnOwl::command(qw[filter], $filter, 96 qw[type ^jabber$ and room], "^\Q$room\E\$"); 97 } 79 $filter = "jabber-room-$room"; 80 BarnOwl::command(qw[filter], $filter, 81 qw[type ^jabber$ and room], "^\Q$room\E\$"); 98 82 return $filter; 99 83 } elsif ($self->login ne 'none') { -
perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
r2f25537 r8789410 285 285 { 286 286 summary => "Send a Jabber Message", 287 usage => "jwrite <jid> [-t <thread>] [-s <subject>] [-a <account>] [-m <message>]"287 usage => "jwrite <jid> [-t <thread>] [-s <subject>] [-a <account>]" 288 288 } 289 289 ); … … 308 308 description => "jmuc sends Jabber commands related to MUC.\n\n" 309 309 . "The following commands are available\n\n" 310 . "join <muc>[/<nick>]\n" 311 . " Join a MUC (with a given nickname, or otherwise your JID).\n\n" 310 . "join <muc> Join a MUC.\n\n" 312 311 . "part <muc> Part a MUC.\n" 313 312 . " The MUC is taken from the current message if not supplied.\n\n" … … 378 377 my $cjidStr = $conn->baseJIDExists($jidStr); 379 378 if ($cjidStr) { 380 die("Already logged in as $cjidStr.\n"); 379 BarnOwl::error("Already logged in as $cjidStr."); 380 return; 381 381 } 382 382 } … … 387 387 388 388 if ( !$uid || !$componentname ) { 389 die("usage: $cmd JID\n"); 389 BarnOwl::error("usage: $cmd JID"); 390 return; 390 391 } 391 392 392 393 if ( $conn->jidActive($jidStr) ) { 393 die("Already logged in as $jidStr.\n"); 394 BarnOwl::error("Already logged in as $jidStr."); 395 return; 394 396 } elsif ($conn->jidExists($jidStr)) { 395 397 return $conn->tryReconnect($jidStr, 1); … … 524 526 sub cmd_jlist { 525 527 if ( !( scalar $conn->getJIDs() ) ) { 526 die("You are not logged in to Jabber.\n"); 528 BarnOwl::error("You are not logged in to Jabber."); 529 return; 527 530 } 528 531 BarnOwl::popless_ztext( onGetBuddyList() ); … … 531 534 sub cmd_jwrite { 532 535 if ( !$conn->connected() ) { 533 die("You are not logged in to Jabber.\n"); 536 BarnOwl::error("You are not logged in to Jabber."); 537 return; 534 538 } 535 539 … … 539 543 my $jwrite_thread = ""; 540 544 my $jwrite_subject = ""; 541 my $jwrite_body;542 545 my ($to, $from); 543 546 my $jwrite_type = "chat"; … … 551 554 'subject=s' => \$jwrite_subject, 552 555 'account=s' => \$from, 553 'id=s' => \$jwrite_sid, 554 'message=s' => \$jwrite_body, 556 'id=s' => \$jwrite_sid, 555 557 ) or die("Usage: jwrite <jid> [-t <thread>] [-s <subject>] [-a <account>]\n"); 556 558 $jwrite_type = 'groupchat' if $gc; 557 559 558 560 if ( scalar @ARGV != 1 ) { 559 die("Usage: jwrite <jid> [-t <thread>] [-s <subject>] [-a <account>]\n"); 561 BarnOwl::error( 562 "Usage: jwrite <jid> [-t <thread>] [-s <subject>] [-a <account>]"); 563 return; 560 564 } 561 565 else { … … 566 570 567 571 unless(scalar @candidates) { 568 die("Unable to resolve JID $to \n");572 die("Unable to resolve JID $to"); 569 573 } 570 574 … … 573 577 unless(scalar @candidates) { 574 578 if(!$from) { 575 die("You must specify an account with -a \n");579 die("You must specify an account with -a"); 576 580 } else { 577 die("Unable to resolve account $from \n");581 die("Unable to resolve account $from"); 578 582 } 579 583 } … … 590 594 type => $jwrite_type 591 595 }; 592 593 if (defined($jwrite_body)) {594 process_owl_jwrite($jwrite_body);595 return;596 }597 596 598 597 if(scalar @candidates > 1) { … … 632 631 my $func = $jmuc_commands{$cmd}; 633 632 if ( !$func ) { 634 die("jmuc: Unknown command: $cmd\n"); 633 BarnOwl::error("jmuc: Unknown command: $cmd"); 634 return; 635 635 } 636 636 … … 654 654 } 655 655 else { 656 die("You must specify an account with -a <jid>\n");656 BarnOwl::error('You must specify an account with -a <jid>'); 657 657 } 658 658 return $func->( $jid, $muc, @ARGV ); … … 667 667 668 668 $muc = shift @ARGV 669 or die("Usage: jmuc join <muc> [-p <password>] [-a <account>] \n");669 or die("Usage: jmuc join <muc> [-p <password>] [-a <account>]"); 670 670 671 671 die("Error: Must specify a fully-qualified MUC name (e.g. barnowl\@conference.mit.edu)\n") … … 680 680 MaxChars => 0 681 681 }); 682 $completion_jids{$muc ->GetJID('base')} = 1;682 $completion_jids{$muc} = 1; 683 683 return; 684 684 } … … 688 688 689 689 $muc = shift @args if scalar @args; 690 die("Usage: jmuc part [<muc>] [-a <account>] \n") unless $muc;690 die("Usage: jmuc part [<muc>] [-a <account>]") unless $muc; 691 691 692 692 if($conn->getConnectionFromJID($jid)->MUCLeave(JID => $muc)) { 693 693 queue_admin_msg("$jid has left $muc."); 694 694 } else { 695 die("Error: Not joined to $muc \n");695 die("Error: Not joined to $muc"); 696 696 } 697 697 } … … 703 703 $muc = shift @args if scalar @args; 704 704 705 die( "Usage: jmuc invite <jid> [<muc>] [-a <account>]\n")705 die('Usage: jmuc invite <jid> [<muc>] [-a <account>]') 706 706 unless $muc && $invite_jid; 707 707 … … 718 718 my ( $jid, $muc, @args ) = @_; 719 719 $muc = shift @args if scalar @args; 720 die("Usage: jmuc configure [<muc>] \n") unless $muc;720 die("Usage: jmuc configure [<muc>]") unless $muc; 721 721 my $iq = Net::Jabber::IQ->new(); 722 722 $iq->SetTo($muc); … … 759 759 760 760 $muc = shift @args if scalar @args; 761 die("Usage: jmuc presence [<muc>] \n") unless $muc;761 die("Usage: jmuc presence [<muc>]") unless $muc; 762 762 763 763 if ($muc eq '-a') { … … 774 774 else { 775 775 my $m = $conn->getConnectionFromJID($jid)->FindMUC(jid => $muc); 776 die("No such muc: $muc \n") unless $m;776 die("No such muc: $muc") unless $m; 777 777 BarnOwl::popless_ztext(jmuc_presence_single($m)); 778 778 } … … 801 801 my $func = $jroster_commands{$cmd}; 802 802 if ( !$func ) { 803 die("jroster: Unknown command: $cmd\n"); 803 BarnOwl::error("jroster: Unknown command: $cmd"); 804 return; 804 805 } 805 806 … … 824 825 } 825 826 else { 826 die("You must specify an account with -a <jid>\n");827 BarnOwl::error('You must specify an account with -a <jid>'); 827 828 } 828 829 return $func->( $jid, $name, \@groups, $purgeGroups, @ARGV ); … … 848 849 } 849 850 else { 850 die("You must specify an account with -a <jid>\n");851 BarnOwl::error('You must specify an account with -a <jid>'); 851 852 } 852 853 … … 1233 1234 $completion_jids{$room} = 1; 1234 1235 1235 my $muc;1236 if ($dir eq 'in') {1237 my $connection = $conn->getConnectionFromSid($props{sid});1238 $muc = $connection->FindMUC(jid => $from);1239 } else {1240 my $connection = $conn->getConnectionFromJID($props{from});1241 $muc = $connection->FindMUC(jid => $to);1242 }1243 $props{from} = $muc->GetFullJID($from) || $props{from};1244 1236 $props{sender} = $nick || $room; 1245 1237 $props{recipient} = $room; … … 1339 1331 return $givenJIDStr if ($conn->jidExists($givenJIDStr) ); 1340 1332 return resolveConnectedJID($givenJID->GetJID('base')) if $loose; 1341 die("Invalid account: $givenJIDStr \n");1333 die("Invalid account: $givenJIDStr"); 1342 1334 } 1343 1335 … … 1392 1384 # Not one of ours. 1393 1385 else { 1394 die("Invalid account: $givenJIDStr \n");1386 die("Invalid account: $givenJIDStr"); 1395 1387 } 1396 1388 … … 1438 1430 if($from) { 1439 1431 $from_jid = resolveConnectedJID($from, 1); 1440 die("Unable to resolve account $from \n") unless $from_jid;1432 die("Unable to resolve account $from") unless $from_jid; 1441 1433 $to_jid = resolveDestJID($to, $from_jid); 1442 1434 push @matches, [$from_jid, $to_jid] if $to_jid; -
perl/modules/Makefile.am
r1fd469d4 r636de2a 1 MODULES = Jabber IRC WordWrap Twitter1 MODULES = Jabber IRC WordWrap 2 2 3 3 EXTRA_DIST = $(MODULES:=/Makefile.PL) $(MODULES:=/inc) $(MODULES:=/lib) -
perlconfig.c
r5aa33fd r5aa33fd 584 584 } 585 585 586 void owl_perlconfig_mainloop(owl_timer *t, void *data) 587 { 588 dSP; 589 if (!owl_perlconfig_is_function("BarnOwl::Hooks::_mainloop_hook")) 590 return; 591 PUSHMARK(SP) ; 592 call_pv("BarnOwl::Hooks::_mainloop_hook", G_DISCARD|G_EVAL); 593 if(SvTRUE(ERRSV)) { 594 owl_function_error("%s", SvPV_nolen(ERRSV)); 595 } 596 return; 597 } 598 586 599 void owl_perlconfig_io_dispatch(const owl_io_dispatch *d, void *data) 587 600 { -
tester.c
r95414bf r95414bf 105 105 numfailures += owl_variable_regtest(); 106 106 numfailures += owl_filter_regtest(); 107 numfailures += owl_obarray_regtest(); 107 108 numfailures += owl_editwin_regtest(); 108 109 if (numfailures) { … … 367 368 } 368 369 370 371 int owl_obarray_regtest(void) { 372 int numfailed = 0; 373 const char *p,*p2; 374 375 owl_obarray oa; 376 owl_obarray_init(&oa); 377 378 printf("# BEGIN testing owl_obarray\n"); 379 380 p = owl_obarray_insert(&oa, "test"); 381 FAIL_UNLESS("returned string is equal", p && !strcmp(p, "test")); 382 p2 = owl_obarray_insert(&oa, "test"); 383 FAIL_UNLESS("returned string is equal", p2 && !strcmp(p2, "test")); 384 FAIL_UNLESS("returned the same string", p2 && p == p2); 385 386 p = owl_obarray_insert(&oa, "test2"); 387 FAIL_UNLESS("returned string is equal", p && !strcmp(p, "test2")); 388 p2 = owl_obarray_find(&oa, "test2"); 389 FAIL_UNLESS("returned the same string", p2 && !strcmp(p2, "test2")); 390 391 p = owl_obarray_find(&oa, "nothere"); 392 FAIL_UNLESS("Didn't find a string that isn't there", p == NULL); 393 394 printf("# END testing owl_obarray (%d failures)\n", numfailed); 395 396 return numfailed; 397 } 398 369 399 int owl_editwin_regtest(void) { 370 400 int numfailed = 0; -
variable.c
rd544237 r3687413 110 110 111 111 OWLVAR_ENUM( "loggingdirection" /* %OwlVarStub */, OWL_LOGGING_DIRECTION_BOTH, 112 "specifi es which kind of messages should be logged",112 "specifices which kind of messages should be logged", 113 113 "Can be one of 'both', 'in', or 'out'. If 'in' is\n" 114 114 "selected, only incoming messages are logged, if 'out'\n" … … 138 138 "location of users in your .anyone file. If a user is present\n" 139 139 "but sent no login message, or a user is not present that sent no\n" 140 "logout message, a pseudo login or logout message wil lbe created\n",140 "logout message, a pseudo login or logout message wil be created\n", 141 141 NULL, owl_variable_pseudologins_set, NULL), 142 142 … … 151 151 152 152 "If non empty, any messages matching the given filter will be logged.\n" 153 "This is a completely separate mechanis m from the other logging\n"153 "This is a completely separate mechanisim from the other logging\n" 154 154 "variables like logging, classlogging, loglogins, loggingdirection,\n" 155 155 "etc. If you want this variable to control all logging, make sure\n" … … 198 198 OWLVAR_PATH( "newmsgproc" /* %OwlVarStub:newmsgproc */, NULL, 199 199 "name of a program to run when new messages are present", 200 "The named program will be run when owl rece ives new\n"200 "The named program will be run when owl recevies new.\n" 201 201 "messages. It will not be run again until the first\n" 202 202 "instance exits"), … … 213 213 "Called every time you start a zephyrgram without an\n" 214 214 "explicit zsig. The default setting implements the policy\n" 215 "descri bed in the documentation for the 'zsig' variable.\n"),215 "descripted in the documentation for the 'zsig' variable.\n"), 216 216 217 217 OWLVAR_STRING( "zsig" /* %OwlVarStub */, "", … … 297 297 "number of seconds after AIM login to ignore login messages", 298 298 "This specifies the number of seconds to wait after an\n" 299 "AIM login before allowing the rec eipt of AIM login notifications.\n"299 "AIM login before allowing the recipt of AIM login notifications.\n" 300 300 "By default this is set to 15. If you would like to view login\n" 301 301 "notifications of buddies as soon as you login, set it to 0 instead."), -
zephyr.c
r922f589 r3687413 258 258 259 259 if (stat(subsfile, &statbuff) != 0) { 260 owl_free(subsfile);261 260 if (error_on_nofile == 1) 262 261 return -1; … … 374 373 subsfile = owl_zephyr_dotfile(".anyone", filename); 375 374 376 if (stat(subsfile, &statbuff) == -1) { 377 owl_free(subsfile); 375 if (stat(subsfile, &statbuff) == -1) 378 376 return 0; 379 }380 377 381 378 ZResetAuthentication();
Note: See TracChangeset
for help on using the changeset viewer.