Ejemplo n.º 1
0
def AddLogbook(view, node, key, value, onDone=None):
    if(InsertDrawerIfNotPresent(view, node, ":LOGBOOK:")):
        # File is reloaded have to regrab node
        node = db.Get().At(view, node.start_row)
    drawer = node.get_drawer("LOGBOOK")
    loc = drawer['loc']
    end = loc[1]
    pt = view.text_point(end, 0)
    level = node.level
    indent = "   " + (" " * level)
    drawer['loc'] = (loc[0], loc[1] + 1)
    view.run_command("org_internal_insert", {"location": pt, "text": indent + str(key) + " " + str(value) + "\n", "onDone": onDone})
Ejemplo n.º 2
0
def GetCapturePath(view, template):
    target = ['file', '{refile}']
    if 'target' in template:
        target = template['target']
    filename = None
    file = None
    at = None
    if ('file' in target[0]):
        temp = templateEngine.TemplateFormatter()
        tempDict = {'refile': sets.Get('refile', '')}
        filename = templateEngine.ExpandTemplate(view, target[1], tempDict)[0]
    if ('id' == target[0]):
        file, at = db.Get().FindByCustomId(target[1])
        if (file == None):
            log.error("Could not find id: " + target[1])
            return
        filename = file.filename
    if ('clock' == target[0]):
        if (not clk.ClockManager.ClockRunning()):
            log.debug("ERROR: clock is not running!")
            raise "ERROR: clock is not running"
        filename = clk.ClockManager.GetActiveClockFile()
        at = clk.ClockManager.GetActiveClockAt()
    # Try to create my capture file if I can
    try:
        if (not os.path.isfile(str(filename))):
            with open(filename, "w") as fp:
                fp.write("#+TAGS: refile\n")
    except:
        log.error("@@@@@@@@@@@@\nFailed to create capture file: " +
                  str(filename))
    # Now make sure that file is loaded in the DB
    # it might not be in my org path
    if (file != None):
        file.Reload()
    else:
        file = db.Get().LoadNew(filename)
    if (not at and file):
        at = file.org.start_row
    return (target, filename, file, at)
Ejemplo n.º 3
0
 def run(self, edit, onDone=None):
     curNode = db.Get().AtInView(self.view)
     needsNewline = False
     if (not curNode):
         file = db.Get().FindInfo(self.view)
         if (len(file.org) > 0):
             curNode = file.org[len(file.org) - 1]
     if (not curNode):
         level = 1
         l = self.view.line(self.view.size())
         reg = sublime.Region(l.start(), l.start())
         reg = here
     else:
         level = curNode.level
         reg = curNode.region(self.view, True)
         if (level == 0):
             level = 1
             here = sublime.Region(view.size(), view.size())
         else:
             here = sublime.Region(reg.end(), reg.end())
             text = self.view.substr(self.view.line(here))
             if (text.strip() != ""):
                 needsNewline = True
     self.view.sel().clear()
     self.view.sel().add(reg.end())
     self.view.show(here)
     if (needsNewline):
         self.view.insert(edit, self.view.sel()[0].begin(), '\n')
     ai = sublime.active_window().active_view().settings().get(
         'auto_indent')
     self.view.settings().set('auto_indent', False)
     self.view.run_command(
         "insert_snippet", {
             "name":
             "Packages/OrgExtended/snippets/heading" + str(
                 (level + 1)) + ".sublime-snippet"
         })
     sublime.active_window().active_view().settings().set('auto_indent', ai)
     evt.EmitIf(onDone)
Ejemplo n.º 4
0
def plot_table_command(table,view):
    # First get parameters
    ps = plot_get_params(table,view)
    # Next build the data file
    datafile = plot_build_data_file(table,ps)
    # Next build the plot command file
    plot_build_command_file(table,ps)
    # Shell out to gnu plot
    plotcmd = sets.Get("gnuplot",r"C:\Program Files\gnuplot\bin\gnuplot.exe")
    output = ps['_filename']

    outpath    = os.path.dirname(output)
    sourcepath = os.path.dirname(view.file_name())
    commandLine = [plotcmd, "-c", ps['_gpltfile'] ]
    try:
        startupinfo = subprocess.STARTUPINFO()
        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    except:
        startupinfo = None
    cwd = os.path.join(sublime.packages_path(),"User") 
    if(output == "viewer" and platform.system() == "Windows"):
        global ppp
        ppp = subprocess.Popen(commandLine, universal_newlines=True, cwd=cwd, startupinfo=startupinfo, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        o = ""
        e = ""
    else:
        popen = subprocess.Popen(commandLine, universal_newlines=True, cwd=cwd, startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        (o,e) = popen.communicate()
    print("Attempting to plot data from table:")
    print("STDOUT: \n" + str(o))
    print("STDERR: \n" + str(e))
    cullTempFiles = True
    if(cullTempFiles):
        if(os.path.exists(ps['_datafile'])):
            os.remove(ps['_datafile']) 
        if(os.path.exists(ps['_gpltfile'])):
            os.remove(ps['_gpltfile']) 
    row = view.curRow()
    node = db.Get().At(view, row)
    level = 1
    indent = " "
    if(node):
        level = node.level
        indent = " " * level + " "
    o = indent + "#+RESULTS:\n"+indent+"[[file:" + output.replace("\\","/") + "]]"
    if(output != "viewer"):
        have = plot_find_results(table,view)
        if(not have):
            o = "\n" + o
        view.run_command("org_internal_replace", {"start": table.resultsRegion.begin(), "end": table.resultsRegion.end(), "text": o})
    print(o)
Ejemplo n.º 5
0
 def OnDoneSourceBlockExecution(self):
   # Reload if necessary
   self.file = db.Get().FindInfo(self.view)
   doc = None
   self.style = exp.GetGlobalOption(self.file,"HTML_STYLE","HtmlStyle","blocky").lower()
   log.log(51,"EXPORT STYLE: " + self.style)
   try:
     outputFilename = exp.ExportFilename(self.view,".html", self.suffix)
     doc            = HtmlDoc(outputFilename, self.file)
     doc.style      = self.style
     self.helper    = HtmlExportHelper(self.view, self.index)
     self.helper.Run(outputFilename, doc)
   finally:  
     evt.EmitIf(self.onDone)
Ejemplo n.º 6
0
 def run(self, edit):
     n = db.Get().AtInView(self.view)
     s = self.view.text_point(n.start_row, 0)
     e = self.view.line(self.view.text_point(n.end_row, 0)).end()
     r = sublime.Region(s, e)
     ct = self.view.substr(r)
     start = ""
     #if "#+TITLE:" not in ct:
     #	start = "#+TITLE: " + os.path.splitext(os.path.basename(self.view.file_name()))[0]
     tempFile = tf.CreateTempFileFromRegion(self.view, r, ".org", start)
     #print("temp file: " + str(tempFile))
     self.tempView = self.view.window().open_file(tempFile)
     self.tempView.run_command('org_export_file_org_html',
                               {"onDone": evt.Make(self.onDone)})
Ejemplo n.º 7
0
 def OnDoneSourceBlockExecution(self):
     # Reload if necessary
     self.file = db.Get().FindInfo(self.view)
     self.doc = None
     self.docClass = exp.GetGlobalOption(self.file, "LATEX_CLASS",
                                         "latexClass", "article").lower()
     try:
         outputFilename = exp.ExportFilename(self.view, ".tex", self.suffix)
         self.doc = LatexDoc(outputFilename, self.file)
         self.doc.setClass(self.docClass)
         self.helper = exp.OrgExportHelper(self.view, self.index)
         self.helper.Run(outputFilename, self.doc)
     finally:
         evt.EmitIf(self.onDone)
Ejemplo n.º 8
0
 def run(self, edit):
     self.files = []
     bl = db.Get().GetBacklinks(self.view)
     if(bl):
         self.links = bl
         for l in bl:
             title = l.fromFile.org.get_comment("TITLE",[""])[0]
             desc = l.desc if l.desc else ""
             if(title.strip() != ""):
                 desc = title + ": " + desc
             self.files.append([desc, l.link])
         self.view.window().show_quick_panel(self.files, self.on_done, -1, -1)
         return
     log.debug("NO BACKLINKS")
Ejemplo n.º 9
0
 def run(self,edit,onDone=None):
   self.onDone = onDone
   n = db.Get().AtInView(self.view)
   if(n == None):
     log.error(" Failed to find node! Subtree cannot be exported!")
     return
   index = 0
   for i in range(0,len(n.env._nodes)):
     if(n == n.env._nodes[i]):
       index = i
   if(index == 0):
     log.error(" Failed to find node in file! Something is wrong. Cannot export subtree!")
     return
   self.view.run_command('org_export_file_org_html', {"onDone": evt.Make(self.OnDone), "index": index, "suffix":"_subtree"})
Ejemplo n.º 10
0
 def run(self, edit):
     self.links = []
     self.lobjs = []
     self.transientview = None
     files = db.Get().Files
     if(files):
         for f in files:
             lnks = f.org.env.links
             for l in lnks:
                 desc = l.desc + " : " if l.desc else ""
                 self.links.append([desc + l.link,f.filename])
                 l.inFile = f
                 self.lobjs.append(l)
         self.view.window().show_quick_panel(self.links, self.on_done, -1, -1,self.on_highlighted)
         return
Ejemplo n.º 11
0
def onActivated(view):
    shouldHandleActivationFolding = sets.Get("onFocusRespectStartupFolds",
                                             None)
    if (shouldHandleActivationFolding):
        # Now lets respect the fold state if we have any.
        file = db.Get().FindInfo(view)
        if (file):
            r = file.org[0]
            globalStartup = sets.Get("startup", ["showall"])
            startup = r.startup(globalStartup)
            if (Startup.overview in startup or Startup.fold in startup):
                fold_all_but_my_tree(view)
            elif (Startup.content in startup):
                fold_all_but_my_tree(view)
        fold_all_links(view)
Ejemplo n.º 12
0
 def on_done(self, index):
     view = self.view
     (curRow, curCol) = view.curRowCol()
     node = db.Get().NodeAtIndex(view.file_name(), index)
     print(str(node))
     if (node != None):
         row = node.start_row
         linePos = view.text_point(row, curCol)
         view.show_at_center(linePos)
         view.sel().clear()
         view.sel().add(linePos)
     else:
         view.set_status(
             "Error: ",
             "filename {0} not found in orgDb".format(view.file_name()))
Ejemplo n.º 13
0
 def run(self, edit):
     line = self.view.curLine()
     cb = checkbox.get_checkbox(self.view, line)
     if (cb):
         self.view.run_command('org_insert_checkbox')
         return
     if (checkbox.isUnorderedList(self.view.substr(line))):
         self.view.run_command('org_insert_unordered_list')
         return
     if (numberedlist.isNumberedLine(self.view)):
         numberedlist.AppendLine(self.view, edit)
         return
     n = db.Get().AtInView(self.view)
     if (not n.is_root()):
         self.view.run_command('org_insert_heading_sibling')
Ejemplo n.º 14
0
def ShouldFoldLocalCycle(view):
    fnode = db.Get().AtInView(view)
    if (fnode):
        row, col = view.curRowCol()
        if (fnode.start_row == row):
            return True
        else:
            # This could be a property drawer. We want to fold that if so.
            if (not type(fnode) is node.OrgRootNode
                    and fnode.is_foldable_drawertype(view, row)):
                return True
            else:
                return False
            pass
    return False
Ejemplo n.º 15
0
def onLoad(view):
    remove_all_folds(view)
    # Now lets respect the fold state if we have any.
    file = db.Get().FindInfo(view)
    if (file):
        r = file.org[0]
        globalStartup = sets.Get("startup", ["showall"])
        startup = r.startup(globalStartup)
        if (Startup.overview in startup or Startup.fold in startup):
            fold_all(view)
        elif (Startup.content in startup):
            fold_content(view)
            #if(Startup.showall in startup or Startup.nofold in startup):
        else:
            fold_showall(view)
        fold_all_links(view)
Ejemplo n.º 16
0
 def run(self,edit, onDone=None, index=None, suffix=""):
   self.file = db.Get().FindInfo(self.view)
   self.onDone = onDone
   self.suffix = suffix
   if(index != None):
     self.index = index
   else:
     self.index = None
   if(None == self.file):
     log.error("Not an org file? Cannot build reveal document")
     evt.EmitIf(onDone)  
     return
   if(sets.Get("htmlExecuteSourceOnExport",True)):
     self.view.run_command('org_execute_all_source_blocks',{"onDone":evt.Make(self.OnDoneSourceBlockExecution),"amExporting": True})
   else:
     self.OnDoneSourceBlockExecution()
Ejemplo n.º 17
0
 def tryMatchNamedObject(self, filepath, val):
     fpath = self.view.RelativeTo(filepath).lower()
     fi = db.Get().FindInfo(fpath)
     if(fi):
         if(fi.org.names):
             if(val in fi.org.names):
                 tgt = fi.org.names[val]
                 row = tgt['row'] + 1
                 col = 0
                 if row:
                     filepath += ':{0}'.format(row)
                 if col:
                     filepath += ':{0}'.format(col)
                 self.view.window().open_file(filepath, sublime.ENCODED_POSITION)
                 return True
     return None
Ejemplo n.º 18
0
 def run(self, edit, onDone=None):
     self.onDone = onDone
     # Schedule this item so it is in the agenda
     self.view.run_command("org_schedule",
                           {"dateval": str(datetime.datetime.now())})
     # Create a link to the current location so we can insert it in our today item
     self.link = orglink.CreateLink(self.view)
     curNode = db.Get().AtInView(self.view)
     # Should we add a heading to this?
     if (curNode and not curNode.is_root()):
         self.ed = RunEditingCommandOnToday(
             self.view, "org_insert_text_as_child_heading",
             {'heading': curNode.heading})
         self.ed.Run(evt.Make(self.InsertLink))
     else:
         self.InsertLink()
Ejemplo n.º 19
0
 def OnDone(self, text):
     if (not text):
         return
     node = db.Get().AtInView(self.view)
     if (node):
         if not text in node.tags:
             (region, line) = self.view.getLineAndRegion(node.start_row)
             m = RE_TAGS.search(line)
             if (m.group('tags') != None):
                 tags = m.group('tags') + text + ":"
             else:
                 tags = "    :" + text + ":"
             toline = "{0:70}{1}".format(m.group('heading'), tags)
             self.view.ReplaceRegion(region, toline, self.onDone)
         else:
             log.debug("Tag already part of node")
             evt.EmitIf(self.onDone)
Ejemplo n.º 20
0
 def Run(self, onDone=None):
     self.onDone = onDone
     idValue = "TODAY"
     file, at = db.Get().FindByCustomId(idValue)
     if (file != None and at != None):
         node = file.At(at)
         if (node):
             self.n = node
             self.f = file
             self.savedView = get_view_for_silent_edit_file(file)
             # Give time for the document to be opened.
             sublime.set_timeout_async(lambda: self.onLoaded(), 200)
             return
         else:
             log.warning("COULD NOT LOCATE TODAY")
     else:
         log.warning("Could not locate today")
Ejemplo n.º 21
0
def Execute(view, params):
    level = get_level(params)
    if (params.Get('scope', 'subtree') == 'subtree'):
        return handle_subtree(view, params, level)
    else:
        print(params['scope'] + " is not implemented")

    file = db.Get().FindInfo(view)
    if (file):
        r = file.org
        for n in r.children:
            n.duration()
    output = []
    output.append("|Heading|Time|")
    output.append("|-")
    output.append("|A|B|")
    return output
Ejemplo n.º 22
0
 def tryMatchHeading(self, filepath, heading):
     fpath = self.view.RelativeTo(filepath).lower()
     fi = db.Get().FindInfo(fpath)
     row = None
     col = None
     if(fi):
         for n in fi.org:
             if not n.is_root() and n.heading == heading:
                 row = n.start_row + 1
                 col = 0
                 if row:
                     filepath += ':%s' % row
                 if col:
                     filepath += ':%s' % col
                 self.view.window().open_file(filepath, sublime.ENCODED_POSITION)
                 return True
     return None
Ejemplo n.º 23
0
 def on_done(self, index, modifiers=None):
     if(index >= 0):
         f = self.files[index]
         link = self.view.MakeRelativeToMe(f[0])
         desc = os.path.basename(link)
         if(len(f) > 1):
             desc = f[1]
             includeRoamTag = sets.Get("insertRoamTagToFileLink", True)
             if includeRoamTag is False:
                 log.error(self.rawTitles[f[0]])
                 desc = self.rawTitles[f[0]]
         indent = ""
         node = db.Get().AtInView(self.view)
         if(node):
             indent = node.indent()
         data = r"{indent}[[file:{link}][{desc}]]".format(indent=indent, link=link, desc=desc)
         self.view.run_command("org_internal_insert", {"location": self.view.sel()[0].begin(), "text": data})
Ejemplo n.º 24
0
 def tryMatchDirectTarget(self, val):
     fpath = self.view.file_name().lower()
     fi = db.Get().FindInfo(fpath)
     if(fi):
         if(fi.org.targets):
             if(val in fi.org.targets):
                 tgt = fi.org.targets[val]
                 row = tgt['row'] + 1
                 col = tgt['col']
                 filepath = self.view.file_name()
                 if row:
                     filepath += ':{0}'.format(row)
                 if col:
                     filepath += ':{0}'.format(col)
                 self.view.window().open_file(filepath, sublime.ENCODED_POSITION)
                 return True
     return None
Ejemplo n.º 25
0
def plot_get_params(table,view):
    dt = datetime.datetime.now()
    sourcepath = os.path.dirname(view.file_name())
    filename = "plot_" + str(dt.year) + "_" + str(dt.month) + "_" + str(dt.day) + "_" + str(dt.time().hour) + "_" + str(dt.time().minute) + "_" + str(dt.time().second) + ".png"
    params = {}
    params['_filename'] = os.path.join(sourcepath,filename)
    params['_sourcepath'] = sourcepath
    row = view.curRow()
    node = db.Get().At(view, row)
    if(node):
        plot = " " + node.get_comment('PLOT',"")[0]
        ps     = re.split(r'\s+[a-zA-Z][a-zA-Z0-9]+[:]',plot) 
        ps = ps[1:]
        keys   = [m.group(0) for m in re.finditer(r'\s+[a-zA-Z][a-zA-Z0-9]+[:]',plot)]
        #keys   = [m.group(0) for m in re.finditer(r'(^|\s+)[^: ]+[:]',plot)]
        for i in range(0,len(keys)):
            k = keys[i].strip()
            if(k.endswith(':')):
                k = k[:-1]
            v = ps[i].strip()
            if(k == 'set'):
                if(not 'set' in params):
                    params['set'] = []
                params['set'].append(v.replace("\"",""))
                continue
            if(k == 'unset'):
                if(not 'unset' in params):
                    params['unset'] = []
                params['unset'].append(v.replace("\"",""))
                continue
            if(k == 'file'):
                filename = v
                if(filename == "viewer"):
                    params["_filename"] = "viewer"
                    continue
                sourcepath = os.path.dirname(filename)
                if(len(sourcepath) > 2):
                    params['_sourcepath'] = sourcepath
                    params['_filename'] = filename
                else:
                    params['_filename'] = os.path.join(params['_sourcepath'],filename)
                continue
            else:
                params[k] = v
    return params
Ejemplo n.º 26
0
 def run(self, edit):
     node = db.Get().AtInView(self.view)
     if (not node.is_root()):
         self.oldsel = self.view.sel()[0]
         pt = self.view.text_point(node.start_row, 0)
         l = self.view.line(pt)
         # Last row handling If we are the last row we can't jump over the newline
         # we have to add one.
         nl = ""
         addnl = 1
         if (self.view.isBeyondLastRow(node.start_row + 1)):
             nl = "\n"
             addnl = 0
         now = datetime.datetime.now()
         toInsert = orgdate.OrgDate.format_clock(now, False)
         self.view.insert(edit,
                          l.end() + addnl,
                          nl + node.indent() + "CLOSED: " + toInsert + "\n")
Ejemplo n.º 27
0
 def run(self, edit, onDone=None):
     self.onDone = onDone
     self.node = db.Get().AtInView(self.view)
     self.priorities = self.node.priorities()
     self.priorities = copy.copy(self.priorities)
     self.priorities.append("none")
     row = self.node.start_row
     self.Re = r"^([*]+ [^\[\]]*\s*)(\[\#[a-zA-Z0-9]+\]\s+)"
     self.Re = re.compile(self.Re)
     sp = self.view.text_point(row, 0)
     self.row = self.view.line(sp)
     self.bufferContents = self.view.substr(self.row)
     if (int(sublime.version()) <= 4096):
         self.view.window().show_quick_panel(self.priorities, self.on_done,
                                             -1, -1)
     else:
         self.view.window().show_quick_panel(self.priorities,
                                             self.on_done_st4, -1, -1)
Ejemplo n.º 28
0
    def run(self, edit):
        self.file = db.Get().FindInfo(self.view)
        if (None == self.file):
            log.debug("Not an org file? Cannot build reveal document")
            return
        doc = None
        try:
            doc = RevealDoc(RevealFilename(self.view))
            doc.StartHead()
            self.build_head(doc)
            doc.EndHead()

            doc.StartBody()
            self.build_body(doc)
            doc.EndBody()
        finally:
            if (None != doc):
                doc.Close()
Ejemplo n.º 29
0
def fold_local_cycle(view):
    fnode = db.Get().AtInView(view)
    if (fnode and not fnode.is_root()):
        row, col = view.curRowCol()
        if (fnode.start_row == row):
            if (fnode.is_folded(view)):
                fnode.unfold(view)
                if (fnode.num_children > 0):
                    for n in fnode.children:
                        n.fold(view)
            else:
                if (fnode.num_children > 0
                        and fnode.children[0].is_folded(view)):
                    for n in fnode.children:
                        n.unfold(view)
                else:
                    fnode.fold(view)
            fold_all_links(view)
            return True
        else:
            # This could be a property drawer. We want to fold that if so.
            if (not type(fnode) is node.OrgRootNode
                    and fnode.is_foldable_item(view, row)):
                if (fnode.is_item_folded(view, row)):
                    fnode.unfold_item(view, row)
                    fold_all_links(view)
                    return True
                else:
                    fnode.fold_item(view, row)
                    fold_all_links(view)
                    return True
            #linePos = view.text_point(row,0)
            #reg     = view.line(linePos)
            #bufferContents = view.substr(reg)
            #if(":PROPERTIES:" in bufferContents or ":END:" in bufferContents):
            #    if(node.is_properties_folded(view)):
            #        node.unfold_properties(view)
            #    else:
            #        node.fold_properties(view)
            #    return True
            else:
                return False
    return False
Ejemplo n.º 30
0
def CreateLink(view):
    fn = view.file_name()
    # Org Files have a LOT more potential for making links!
    if (util.isPotentialOrgFile(fn)):
        r = view.curRow()
        line = view.getLine(r)
        linet = RE_TARGET.match(line)
        namet = RE_NAMED.match(line)
        link = None
        # have target on this line?
        if (linet):
            link = "[[file:{0}::{1}][{1}]]".format(view.file_name(),
                                                   linet.group('target'))
        # have named object on this line?
        if (link == None and namet):
            link = "[[file:{0}::{1}][{1}]]".format(view.file_name(),
                                                   namet.group('target'))
        n = db.Get().AtInView(view)
        if (link == None and n and not n.is_root()):
            p = n.get_property("ID")
            cp = n.get_property("CUSTOM_ID")
            if (p):
                link = "[[file:{0}::#{1}][{2}]]".format(
                    view.file_name(), p, n.heading)
            # Have custom id?
            elif (cp):
                link = "[[file:{0}::#{1}][{2}]]".format(
                    view.file_name(), cp, n.heading)
            # Am near a heading?
            else:
                link = "[[file:{0}::*{1}][{1}]]".format(
                    view.file_name(), n.heading)
        # okay then just use row,col
        if (link == None):
            r, c = view.curRowCol()
            link = "[[file:{0}::{1},{2}][{3}]]".format(
                view.file_name(), r, c, os.path.basename(view.file_name()))
        return link
    else:
        # Other file types only have line and column
        r, c = view.curRowCol()
        link = "[[{0}::{1}::{2}][{3}]]".format(fn, r, c, os.path.basename(fn))
        return link