+ if (!NIL_P (opts)) {
+ VALUE sort, exclude_tags, omit_excluded;
+ VALUE kwargs[3];
+ static ID keyword_ids[3];
+
+ if (!keyword_ids[0]) {
+ keyword_ids[0] = rb_intern_const ("sort");
+ keyword_ids[1] = rb_intern_const ("exclude_tags");
+ keyword_ids[2] = rb_intern_const ("omit_excluded");
+ }
+
+ rb_get_kwargs (opts, keyword_ids, 0, 3, kwargs);
+
+ sort = kwargs[0];
+ exclude_tags = kwargs[1];
+ omit_excluded = kwargs[2];
+
+ if (sort != Qundef)
+ notmuch_query_set_sort (query, FIX2UINT (sort));
+
+ if (exclude_tags != Qundef) {
+ for (int i = 0; i < RARRAY_LEN (exclude_tags); i++) {
+ VALUE e = RARRAY_AREF (exclude_tags, i);
+ notmuch_query_add_tag_exclude (query, RSTRING_PTR (e));
+ }
+ }
+
+ if (omit_excluded != Qundef) {
+ notmuch_exclude_t omit;
+ omit = FIXNUM_P (omit_excluded) ? FIX2UINT (omit_excluded) : RTEST(omit_excluded);
+ notmuch_query_set_omit_excluded (query, omit);
+ }
+ }
+
+ return Data_Wrap_Notmuch_Object (notmuch_rb_cQuery, ¬much_rb_query_type, query);