コード例 #1
0
ファイル: command.py プロジェクト: anmitsu/pyful
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()
コード例 #2
0
ファイル: mode.py プロジェクト: anmitsu/pyful
 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()
コード例 #3
0
ファイル: mode.py プロジェクト: anmitsu/pyful
 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)
コード例 #4
0
ファイル: filectrl.py プロジェクト: anmitsu/pyful
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()
コード例 #5
0
ファイル: command.py プロジェクト: anmitsu/pyful
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
コード例 #6
0
ファイル: command.py プロジェクト: anmitsu/pyful
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)
コード例 #7
0
ファイル: command.py プロジェクト: anmitsu/pyful
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)
コード例 #8
0
ファイル: command.py プロジェクト: anmitsu/pyful
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)
コード例 #9
0
ファイル: filectrl.py プロジェクト: anmitsu/pyful
 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"
コード例 #10
0
ファイル: filectrl.py プロジェクト: anmitsu/pyful
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()
コード例 #11
0
ファイル: command.py プロジェクト: anmitsu/pyful
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)
コード例 #12
0
ファイル: filectrl.py プロジェクト: anmitsu/pyful
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)
コード例 #13
0
ファイル: filectrl.py プロジェクト: anmitsu/pyful
 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
コード例 #14
0
ファイル: filer.py プロジェクト: anmitsu/pyful
 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 = ""
コード例 #15
0
ファイル: command.py プロジェクト: anmitsu/pyful
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))
コード例 #16
0
ファイル: command.py プロジェクト: anmitsu/pyful
def _exit():
    """Termination of application."""
    if "Yes" == message.confirm("Exit?", ["Yes", "No"]):
        sys.exit(0)