Exemple #1
0
    def ls(self, dirname, cheap_remote_ls=False):
        if not cheap_remote_ls and len(dirname) > len(self.root_dir):
            local_files = set([
                name
                for name in Shell.run('ls -p {}'.format(dirname)).split('\n')
                if len(name) > 0
            ])
            remote_files = set([
                name for name in Shell.run('rclone lsf "{}"'.format(
                    self.rpath(dirname))).split('\n') if len(name) > 0
            ])

            for name in remote_files.difference(local_files):
                if name[-1] == '/':
                    Shell.mkdir(os.path.join(dirname, name))
                else:
                    Shell.touch(os.path.join(dirname, name))

            for name in local_files.difference(remote_files):
                log('rclone copyto "{}" "{}"'.format(
                    os.path.join(dirname, name),
                    os.path.join(self.rpath(dirname), name)))
                Shell.run('rclone copyto "{}" "{}"'.format(
                    os.path.join(dirname, name),
                    os.path.join(self.rpath(dirname), name)))
        return super(Rclone, self).ls(dirname)
Exemple #2
0
    def NETRParentDir(self):
        log('open cwd: ', self.cwd)
        log(self.pages)

        if self.cwd == self.pinnedRoot:
            return
        pdir = self.fs.parent_dir(self.cwd)
        self.set_cwd(pdir, isParentOfPrev=True)
Exemple #3
0
 def _ask(self, char):
     cmd = self.options[ord(char) - 97]
     log(self.options)
     log(char, cmd, cmd == 'vim')
     if cmd == 'vim':
         self.netranger.NETROpen(use_rifle=False)
     else:
         self.netranger.NETROpen(rifle_cmd=cmd)
Exemple #4
0
    def refresh_page(self, wd=None):
        if wd is None:
            wd = self.cwd

        if wd == self.cwd:
            log('update cwd {}'.format(self.cwd))
            self.pages[wd] = Page(self.vim, wd, self.fs)
            self.render()
        else:
            log('update {}'.format(wd))
            self.pages[wd] = None
            del self.pages[wd]
Exemple #5
0
    def __init__(self, lpath, path):
        Shell.mkdir(lpath)
        self.lpath = lpath

        self.child = {}
        self.cached = False
        self.path = path

        if path is None:
            remotes = Shell.run('rclone listremotes').split(':\n')
            log(remotes)
            for remote in remotes:
                if len(remote)==0:
                    continue
                self.child[remote] = RcloneDir(os.path.join(lpath, remote), remote+':/')
            self.cached = True
Exemple #6
0
    def on_cursormoved(self):
        """
        Remember the current line no. and refresh the highlight of the current line no.
        """
        log('on_cursormoved')
        if self.is_editing:
            return

        clineNo = int(self.vim.eval("line('.')")) - 1

        # do not stay on footer
        if clineNo == len(self.nodes) - 1:
            self.vim.command('normal! k')
            clineNo -= 1

        self.setClineNo(clineNo)

        self.vim.command("setlocal modifiable")
        self.set_header_content()
        self.set_footer_content()
        self.set_pseudo_header_content(clineNo)
        self.set_pseudo_footer_content(clineNo)
        self.vim.command("setlocal nomodifiable")
Exemple #7
0
 def initKeymaps(self):
     self.keymaps = {}
     self.keymap_doc = {}
     skip = []
     log(self.vim.vars['NETRDefaultMapSkip'])
     for k in self.vim.vars['NETRDefaultMapSkip']:
         log(k[0], k[-1])
         if k[0]=='<' and k[-1]=='>':
             skip = [k.lower()]
     log(skip)
     for fn, (keys, desc) in default.keymap.items():
         user_keys = self.vim.vars.get(fn, [])
         user_keys += [k for k in keys if k not in skip]
         self.keymaps[fn] = user_keys
         self.keymap_doc[fn] = (keys, desc)
Exemple #8
0
from netranger.ui import BookMarkUI, HelpUI, SortUI, AskUI
from netranger.rifle import Rifle
from netranger.Vim import VimVar, VimErrorMsg, VimCurWinWidth, pbar
from netranger.enum import Enum
from collections import defaultdict
from netranger.config import file_sz_display_wid
from netranger.api import Hookers, has_hooker, disableHookers

from sys import platform
if platform == "win32":
    from os import getenv
else:
    import pwd
    import grp

log('')


class Node(object):
    """
    General node. Inherited by header nodes or entry nodes.
    """
    State = Enum('NodeState', 'NORMAL, PICKED, UNDEROP')
    ToggleOpRes = Enum('NodeToggleOpRes', 'INVALID, ON, OFF')

    def __init__(self, fullpath, name, highlight, level=0):
        self.fullpath = fullpath
        self.name = name
        self.set_highlight(highlight)
        self.level = level
        self.state = Node.State.NORMAL
Exemple #9
0
 def invoke_map(self, fn):
     log('invoke_map', fn)
     if hasattr(self, fn):
         getattr(self, fn)()
     else:
         getattr(self.curBuf, fn)()
Exemple #10
0
 def update_dirty_pages(self):
     log('update')
     dirty_page_wds = [wd for wd, page in self.pages.items() if page.is_dirty]
     for wd in dirty_page_wds:
         self.refresh_page(wd)