def __init__(self, buffer_number): # Determine defaults default_rc = util.get_var('taskwiki_taskrc_location') or '~/.taskrc' default_data = util.get_var('taskwiki_data_location') or None extra_warrior_defs = util.get_var('taskwiki_extra_warriors', {}) markup_syntax = util.get_var('taskwiki_markup_syntax') or 'default' # Handle bytes (vim returnes bytes for Python3) if six.PY3: default_rc = util.decode_bytes(default_rc) default_data = util.decode_bytes(default_data) extra_warrior_defs = util.decode_bytes(extra_warrior_defs) markup_syntax = util.decode_bytes(markup_syntax) # Validate markup choice and set it if markup_syntax in ["default", "markdown"]: self.markup_syntax = markup_syntax else: msg = "Unknown markup given: {}".format(markup_syntax) raise errors.TaskWikiException(msg) # Initialize all the subcomponents self.buffer = BufferProxy(buffer_number) self.task = store.TaskStore(self) self.presets = store.PresetStore(self) self.vwtask = store.VwtaskStore(self) self.viewport = store.ViewportStore(self) self.line = store.LineStore(self) self.warriors = store.WarriorStore(default_rc, default_data, extra_warrior_defs) self.buffer_has_authority = True
def __init__(self, buffer_number): # Determine defaults default_rc = util.get_var('taskwiki_taskrc_location') or '~/.taskrc' default_data = util.get_var('taskwiki_data_location') or None extra_warrior_defs = util.get_var('taskwiki_extra_warriors', {}) #markup_syntax = vim.eval("vimwiki#vars#get_wikilocal('syntax')") or 'default' markup_syntax = 'markdown' # Validate markup choice and set it if markup_syntax in ["default", "markdown"]: self.markup_syntax = markup_syntax else: msg = "Unknown markup given: {}".format(markup_syntax) raise errors.TaskWikiException(msg) # Initialize all the subcomponents self.buffer = BufferProxy(buffer_number) self.completion = store.CompletionStore(self) self.task = store.TaskStore(self) self.presets = store.PresetStore(self) self.vwtask = store.VwtaskStore(self) self.viewport = store.ViewportStore(self) self.line = store.LineStore(self) self.warriors = store.WarriorStore(default_rc, default_data, extra_warrior_defs) self.buffer_has_authority = True
def save_to_tw(self): # This method persumes all the dependencies have been created at the # point it was called, hence move set the dependencies for the underlying # task. Remove dependencies for all other tasks within the viewport. # This happens so that the dependencies are rebuilt from the tree after # each save, since tasks may have been moved within the tree and dependencies # added / removed in this implicit manner. port = self.cache.get_viewport_by_task(self.task) if port is not None: self.task['depends'] -= set(port.viewport_tasks) self.task['depends'] |= set(s.task for s in self.add_dependencies) if util.get_var('taskwiki_default_tag'): self.task['tags'] |= {util.get_var('taskwiki_default_tag')} # Push the values to the Task only if the Vimwiki representation # somehow differs if self.task.modified or not self.uuid: self.task.save() # If task was first time saved now, add it to the cache and remove # the temporary reference if self.__unsaved_task is not None: self.uuid = ShortUUID(self.__unsaved_task['uuid'], self.tw) self.cache.task[self.uuid] = self.__unsaved_task self.__unsaved_task = None # If we saved the task, we need to update. Hooks may have changed data. self.update_from_task()
def __init__(self, line_number, cache, tw, name, filterstring, defaultstring, sort=None): """ Constructs a ViewPort out of given line. """ self.cache = cache self.tw = tw self.name = name self.line_number = line_number self.taskfilter, self.meta = self.process_filterstring( filterstring, use_presets=True) if defaultstring: self.defaults = util.tw_modstring_to_kwargs(defaultstring) else: pure_filter, _ = self.process_filterstring(filterstring, use_presets=False) self.defaults = util.tw_args_to_kwargs(pure_filter) self.tasks = set() self.sort = (sort or util.get_var('taskwiki_sort_order') or constants.DEFAULT_SORT_ORDER)
def set_proper_colors(self): tw_color_counterparts = { 'TaskWikiTaskActive': 'color.active', 'TaskWikiTaskCompleted': 'color.completed', 'TaskWikiTaskDeleted': 'color.deleted', 'TaskWikiTaskRecurring': 'color.recurring', 'TaskWikiTaskWaiting': 'color.completed', } taskwiki_native_colors = { 'TaskWikiTaskActive': 'Type', 'TaskWikiTaskCompleted': 'Comment', 'TaskWikiTaskRecurring': 'Comment', 'TaskWikiTaskWaiting': 'Comment', 'TaskWikiTaskDeleted': 'Error', 'TaskWikiTaskPriority': 'Error', } # If tw support is enabled, try to find definition in TW first if util.get_var('taskwiki_source_tw_colors'): tw = cache().get_relevant_tw() for syntax in tw_color_counterparts.keys(): tw_def = tw.config.get(tw_color_counterparts[syntax]) if tw_def: vim_def = util.convert_colorstring_for_vim(tw_def) vim.command('hi def {0} {1}'.format(syntax, vim_def)) # Define taskwiki (native) color. This can be overriden by user # by using :hi <group name> <color> command. for syntax in taskwiki_native_colors.keys(): vim.command('hi def link {0} {1}' .format(syntax, taskwiki_native_colors[syntax]))
def execute(self): super(CallbackSplitMixin, self).execute() # Close the split if the user leaves it vim.command('au BufLeave <buffer> :bwipe') # SREMatch objecets cannot be pickled cache().line.clear() # We can't save the current instance in vim variable # so save the pickled version dump = pickle.dumps( ({k: v for k, v in self.__dict__.items() if k != 'selected'}, self.selected.__dict__)) vim.current.buffer.vars['taskwiki_callback'] = base64.encodebytes( bytes(dump)) # Remap <CR> to calling the callback and wiping the buffer vim.command("nnoremap <silent> <buffer> <enter> :" + util.get_var('taskwiki_py') + "callback = {0}('');".format(self.__class__.__name__) + "orig_dict, selected_dict = pickle.loads(" "base64.decodebytes(" "six.b(util.get_var('taskwiki_callback', " "vars_obj=vim.current.buffer.vars)))); " "callback.__dict__.update(orig_dict);" "callback.selected.__dict__ = selected_dict;" "callback.callback(); " "vim.command('bwipe') <CR>") # Show cursorline in split if required if self.split_cursorline: vim.current.window.options['cursorline'] = True
def __init__(self, cache, tasks, sortstring=None): self.cache = cache self.tasks = tasks self.sortstring = ( sortstring or util.get_var('taskwiki_sort_default') or constants.DEFAULT_SORT_ORDER ) + ',line_number+'
def __init__(self, buffer_number): # Determine defaults default_rc = util.get_var('taskwiki_taskrc_location') or '~/.taskrc' default_data = util.get_var('taskwiki_data_location') or None extra_warrior_defs = util.get_var('taskwiki_extra_warriors', {}) # Handle bytes (vim returnes bytes for Python3) if six.PY3: default_rc = util.decode_bytes(default_rc) default_data = util.decode_bytes(default_data) extra_warrior_defs = util.decode_bytes(extra_warrior_defs) self.buffer = BufferProxy(buffer_number) self.task = store.TaskStore(self) self.vwtask = store.VwtaskStore(self) self.viewport = store.ViewportStore(self) self.line = store.LineStore(self) self.warriors = store.WarriorStore(default_rc, default_data, extra_warrior_defs) self.buffer_has_authority = True
def note(self): for vimwikitask in self.tasks: # note: tasknote must be installed command = '! tasknote {0}' #vim.command(command.format(vimwikitask.uuid)) uuid = str(vimwikitask.uuid) path = util.get_var('taskwiki_note_path') vim.command('call wiki#page#open("{}.md")'.format( os.path.join(path, uuid))) #vim.command('e {0}'.format(os.path.join(path, uuid))+'.md') self.save_action('note')
def from_line(cls, number, cache): match = cache.line[(cls, number)] if not match: return None filterstring = match.group('filter') defaults = match.group('defaults') name = match.group('name').strip() if six.PY2: filterstring = filterstring.decode('utf-8') defaults = defaults.decode( 'utf-8') if defaults is not None else defaults name = name.decode('utf-8') tw = cache.warriors[match.group('source') or 'default'] sort_id = match.group('sort') sorts_configured = util.get_var('taskwiki_sort_orders', {}) sortstring = None # Perform the detection only if specific sort was set if sort_id: sortstring = sorts_configured.get(sort_id) # If we failed to fetch the sortstring, warn the user if sortstring is None and sort_id is not None: print( u"Sort indicator '{0}' for viewport '{1}' is not defined," " using default.".format(sort_id, name), sys.stderr) count = match.group('count') self = cls(number, cache, tw, name, filterstring, defaults, sortstring, count) return self