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)
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)
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)
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]
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
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")
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)
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
def invoke_map(self, fn): log('invoke_map', fn) if hasattr(self, fn): getattr(self, fn)() else: getattr(self.curBuf, fn)()
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)