def _change_workspace_layout(): """Change current workspace's layout. Layouts are following kinds: * Tile * TileLeft * TileTop * TileBottom * Oneline * Onecolumn * Magnifier * Fullscreen """ ret = message.confirm( "Layout:", ["Tile", "TileLeft", "TileTop", "TileBottom", "Oneline", "Onecolumn", "Magnifier", "Fullscreen"]) filer = widgets.filer if "Tile" == ret: filer.workspace.tile() elif "TileLeft" == ret: filer.workspace.tileleft() elif "TileTop" == ret: filer.workspace.tiletop() elif "TileBottom" == ret: filer.workspace.tilebottom() elif "Oneline" == ret: filer.workspace.oneline() elif "Onecolumn" == ret: filer.workspace.onecolumn() elif "Magnifier" == ret: filer.workspace.magnifier() elif "Fullscreen" == ret: filer.workspace.fullscreen()
def execute(self, path, action): filer = widgets.filer trashbox = os.path.expanduser(self.path) msg = path.replace(filer.dir.path, "") ret = message.confirm("Move `{0}' to trashbox? ".format(msg), ["No", "Yes"]) if ret == "Yes": filectrl.move(path, trashbox) filer.workspace.all_reload()
def execute(self, path, action): if not path: return filer = widgets.filer msg = path.replace(filer.dir.path, "") ret = message.confirm("Delete? ({0}):".format(msg), ["No", "Yes"]) if ret == "Yes": filectrl.delete(path)
def kill_thread(): try: thread = Filectrl.threads[0] except IndexError: return message.error("Thread doesn't exist.") title = thread.title ret = message.confirm("Kill {0}: ".format(title), ["OK", "Cancel"]) if ret == "OK": thread.kill()
def _switch_workspace(): """Switching workspaces.""" filer = widgets.filer titles = [w.title for w in filer.workspaces] pos = filer.cursor ret = message.confirm("Switch workspace:", options=titles, position=pos) for i, w in enumerate(filer.workspaces): if w.title == ret: filer.focus_workspace(i) break
def _tar(): """Invoke command line of tar mode.""" tarmode = message.confirm("Tar mode:", ["gzip", "bzip2", "tar"]) if tarmode is None: return filer = widgets.filer cmdline = widgets.cmdline if filer.dir.ismark(): cmdline.start(mode.Tar(tarmode)) else: cmdline.start(mode.Tar(tarmode), filer.file.name)
def _trashbox(): """Invoke command line of trashbox mode.""" filer = widgets.filer cmdline = widgets.cmdline trashbox = os.path.expanduser(mode.TrashBox.path) if not os.path.exists(trashbox): if "Yes" == message.confirm("Trashbox doesn't exist. Make trashbox? ({0}):".format(trashbox), ["No", "Yes"]): try: os.makedirs(trashbox) except Exception as e: return message.exception(e) else: return if filer.dir.ismark(): files = filer.dir.get_mark_files() ret = message.confirm("Move mark files to trashbox? ", ["No", "Yes"], files) if ret == "Yes": filectrl.move(files, trashbox) else: cmdline.start(mode.TrashBox(), filer.file.name)
def _delete(): """Invoke command line of delete mode.""" filer = widgets.filer cmdline = widgets.cmdline if filer.dir.ismark(): files = filer.dir.get_mark_files() ret = message.confirm("Delete mark files? ", ["No", "Yes"], files) if ret == "No" or ret is None: return filectrl.delete(files) else: cmdline.start(mode.Delete(), filer.file.name)
def get_mode(self): if os.path.exists(self.dst): ret = message.confirm("Zip file exist - {0}:".format(self.dst), ["Add", "Override", "Cancel"]) if ret == "Add": return "a" elif ret == "Override": return "w" else: raise FilectrlCancel("Zip canceled") else: return "w"
def replace(pattern, repstr): filer = widgets.filer files = filer.dir.get_mark_files() renamed = [pattern.sub(r""+repstr, f) for f in files] msg = [] matched = [] for i in range(0, len(files)): if files[i] != renamed[i]: msg.append("{0} -> {1}".format(files[i], renamed[i])) matched.append((files[i], renamed[i])) if not matched: return message.error("No pattern matched for mark files: {0} ".format(pattern.pattern)) if "Start" != message.confirm("Replace:", ["Start", "Cancel"], msg): return ret = "" for member in matched: src, dst = member if os.path.exists(os.path.join(filer.dir.path, dst)): if ret == "No(all)": continue if ret != "Yes(all)": ret = message.confirm( "{0}; Override? {{{1} -> {2}}}".format(os.strerror(errno.EEXIST), src, dst), ["Yes", "No", "Yes(all)", "No(all)", "Cancel"]) if ret == "Yes" or ret == "Yes(all)": pass elif ret == "No" or ret == "No(all)": continue elif ret is None or ret == "Cancel": break try: os.renames(src, dst) message.puts("Renamed: {0} -> {1}".format(src, dst)) except Exception as e: message.exception(e) break filer.dir.mark_clear()
def _pack(): """File pack by tar, zip and rar.""" ret = message.confirm("Pack type:", ["zip", "tgz", "bz2", "tar", "rar"]) if "zip" == ret: _zip() elif ret == "tgz" or ret == "bz2" or ret == "tar": filer = widgets.filer cmdline = widgets.cmdline if filer.dir.ismark(): cmdline.start(mode.Tar(ret)) else: cmdline.start(mode.Tar(ret), filer.file.name) elif ret == "rar": widgets.cmdline.start(mode.Shell(), "rar u %D2.rar %m", -8)
def rename(src, dst): if os.path.exists(dst) and os.path.samefile(src, dst): return if os.path.exists(dst): ret = message.confirm( "{0}; Override? {{{1} -> {2}}}".format(os.strerror(errno.EEXIST), src, dst), ["Yes", "No", "Cancel"]) if "Yes" != ret: return try: os.renames(src, dst) message.puts("Renamed: {0} -> {1}".format(src, dst)) except Exception as e: message.exception(e)
def check_override(self, src, dst): if not os.path.lexists(dst) or \ util.unix_basename(src) != util.unix_basename(dst): return "Yes" checked = None if "Yes(all)" == self.confirm: checked = "Yes" elif "No(all)" == self.confirm: checked = "No" elif "Newer(all)" == self.confirm: if os.lstat(src).st_mtime > os.lstat(dst).st_mtime: checked = "Yes" else: checked = "No" elif "Importunate" == self.confirm: sstat, dstat = os.lstat(src), os.lstat(dst) stime = time.strftime("%c", time.localtime(sstat.st_mtime)) dtime = time.strftime("%c", time.localtime(dstat.st_mtime)) ret = message.confirm( "Override?", ["Yes", "No", "Newer", "Yes(all)", "No(all)", "Newer(all)", "Cancel"], ["Source", "Path: {0}".format(src), "Size: {0}".format(sstat.st_size), "Time: {0}".format(stime), "Destination", "Path: {0}".format(dst), "Size: {0}".format(dstat.st_size), "Time: {0}".format(dtime),]) if ret == "Yes" or ret == "No" or ret == "Cancel": checked = ret elif ret == "Newer": if sstat.st_mtime > dstat.st_mtime: checked = "Yes" else: checked = "No" elif ret == "Yes(all)" or ret == "No(all)" or ret == "Newer(all)": self.confirm = ret checked = ret[:-5] else: checked = "Cancel" return checked
def invalid_encoding_error(self): perm = self.get_permission() nlink = self.stat.st_nlink user = self.get_user_name() group = self.get_group_name() size = "{0} ({1})".format(self.get_file_size(), self.stat.st_size) mtime = self.get_mtime() ret = message.confirm( "Invalid encoding error. What do you do?", ["ignore", "delete"], ["The file of invalid encoding status", "-"*100, "Permission: {0}".format(perm), "Link: {0}".format(nlink), "User: {0}".format(user), "Group: {0}".format(group), "Size: {0}".format(size), "Time: {0}".format(mtime)]) if ret == "delete": import shutil if self.isdir(): shutil.rmtree(self.name) else: os.remove(self.name) raise InvalidEncodingError else: self.name = ""
def _tareach(): """Invoke command line of tareach mode.""" tarmode = message.confirm("Tar mode:", ["gzip", "bzip2", "tar"]) if tarmode is None: return widgets.cmdline.start(mode.Tar(tarmode, each=True))
def _exit(): """Termination of application.""" if "Yes" == message.confirm("Exit?", ["Yes", "No"]): sys.exit(0)