Example #1
0
    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
Example #2
0
    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
Example #3
0
    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()
Example #4
0
    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)
Example #5
0
    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]))
Example #6
0
    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
Example #7
0
 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+'
Example #8
0
    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
Example #9
0
    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')
Example #10
0
    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