def set_tags(cls): """ Set tags for current heading """ heading = Document.current_heading() if not heading: return # retrieve tags res = None if heading.tags: res = vim.eval( 'input("Tags: ", ":%s:", "customlist,Org_complete_tags")' % ':'.join(heading.tags)) else: res = vim.eval( 'input("Tags: ", "", "customlist,Org_complete_tags")') if res == None: # user pressed <Esc> abort any further processing return # remove empty tags heading.tags = filter(lambda x: x.strip() != '', res.strip().strip(':').split(':')) return 'OrgSetTags'
def realign_all_tags(cls): """ Updates tags when user finishes editing a heading """ for h in Document.headings(): if h.tags: h.tags = h.tags
def realign_tags(cls): """ Updates tags when user finished editing a heading """ heading = Document.current_heading() if not heading: return if vim.current.window.cursor[0] == heading.start_vim: heading.tags = heading.tags
def complete_tags(cls): """ build a list of tags and store it in variable b:org_tag_completion """ heading = Document.current_heading() if not heading: return leading_portion = vim.eval('a:ArgLead') cursor = int(vim.eval('a:CursorPos')) # extract currently completed tag idx_orig = leading_portion.rfind(':', 0, cursor) if idx_orig == -1: idx = 0 else: idx = idx_orig current_tag = leading_portion[idx:cursor].lstrip(':') head = leading_portion[:idx + 1] if idx_orig == -1: head = '' tail = leading_portion[cursor:] # extract all tags of the current file all_tags = set() for h in Document.headings(): for t in h.tags: all_tags.add(t) ignorecase = bool( int(settings.get('org_tags_completion_ignorecase', '0'))) possible_tags = [] current_tags = heading.tags for t in all_tags: if ignorecase: if t.lower().startswith(current_tag.lower()): possible_tags.append(t) elif t.startswith(current_tag): possible_tags.append(t) vim.command( 'let b:org_complete_tags = [%s]' % ', '.join(['"%s%s:%s"' % (head, i, tail) for i in possible_tags]))
def complete_tags(cls): """ build a list of tags and store it in variable b:org_tag_completion """ heading = Document.current_heading() if not heading: return leading_portion = vim.eval('a:ArgLead') cursor = int(vim.eval('a:CursorPos')) # extract currently completed tag idx_orig = leading_portion.rfind(':', 0, cursor) if idx_orig == -1: idx = 0 else: idx = idx_orig current_tag = leading_portion[idx: cursor].lstrip(':') head = leading_portion[:idx + 1] if idx_orig == -1: head = '' tail = leading_portion[cursor:] # extract all tags of the current file all_tags = set() for h in Document.headings(): for t in h.tags: all_tags.add(t) ignorecase = bool(int(settings.get('org_tags_completion_ignorecase', '0'))) possible_tags = [] current_tags = heading.tags for t in all_tags: if ignorecase: if t.lower().startswith(current_tag.lower()): possible_tags.append(t) elif t.startswith(current_tag): possible_tags.append(t) vim.command('let b:org_complete_tags = [%s]' % ', '.join(['"%s%s:%s"' % (head, i, tail) for i in possible_tags]))
def toggle_todo_state(cls, direction=DIRECTION_FORWARD): """ Toggle state of TODO item :returns: The changed heading """ lineno, colno = vim.current.window.cursor # get heading heading = Document.current_heading() if not heading: vim.eval('feedkeys("^", "n")') return # get todo states todo_states, done_states = Todo._get_states() all_states = todo_states + done_states if len(all_states) < 2: echom('No todo keywords configured.') return # current_state and rest of heading current_state, rest = Todo._split_heading(heading.text, all_states) # get new state new_state = Todo._get_next_state(current_state, all_states, direction) # set new headline if not new_state: new_heading = ' '.join(('*' * heading.level, rest)) else: new_heading = ' '.join(('*' * heading.level, new_state, rest)) vim.current.buffer[heading.start] = new_heading # move cursor along with the inserted state only when current position # is in the heading; otherwite do nothing if heading.start_vim == lineno: if current_state is None: offset = len(new_state) elif new_state is None: offset = -len(current_state) else: offset = len(current_state) - len(new_state) vim.current.window.cursor = (lineno, colno + offset) # plug plug = 'OrgToggleTodoForward' if direction == DIRECTION_BACKWARD: plug = 'OrgToggleTodoBackward' return plug
def set_tags(cls): """ Set tags for current heading """ heading = Document.current_heading() if not heading: return # retrieve tags res = None if heading.tags: res = vim.eval('input("Tags: ", ":%s:", "customlist,Org_complete_tags")' % ':'.join(heading.tags)) else: res = vim.eval('input("Tags: ", "", "customlist,Org_complete_tags")') if res == None: # user pressed <Esc> abort any further processing return # remove empty tags heading.tags = filter(lambda x: x.strip() != '', res.strip().strip(':').split(':')) return 'OrgSetTags'