Giter Site home page Giter Site logo

hellosystem / filer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lxqt/pcmanfm-qt

30.0 3.0 9.0 10.2 MB

A file manager that can also render the desktop

License: GNU General Public License v2.0

CMake 2.42% C++ 95.57% Roff 0.17% C 1.84%
qt hellosystem file-manager

filer's Introduction

Filer Build Status Translation status Help Wanted Issues

A file manager that also renders the desktop. A key component of helloSystem.

Features

Minimalistic simplicity, see hello for the background

  • Appeal to users coming from macOS
  • Cross platform: Builds for Linux, FreeBSD
  • Spatial mode (each folder opens in its own window)
  • Can handle Application Bundles
  • Can handle ELF files that are lacking the executable bit (backlog)
  • Can handle AppImages (backlog)
  • Context menu can be extended using file manager actions

Dependencies

On Alpine Linux:

apk add --no-cache qt5-qtbase-dev kwindowsystem-dev qt5-qttools-dev kdbusaddons-dev baloo-dev xcb-util-wm-dev libdbusmenu-qt-dev git cmake musl-dev alpine-sdk clang qt5-qtmultimedia-dev libfm-dev libfm-extra-dev menu-cache-dev

Not all of the above may actually be required.

Build

mkdir build
cd build
cmake ..
make
sudo make install

filer's People

Contributors

agaida avatar attuska avatar bitigchi avatar bittin avatar comradekingu avatar davidliang11292 avatar gcurse avatar helixbot avatar hugok79 avatar ilya87 avatar jleclanche avatar kuzmas avatar larshenrikoern avatar lisapple avatar louies0623 avatar luis-pereira avatar mbouzada avatar moochris avatar paulolieuthier avatar pcman avatar probonopd avatar santossi avatar smarquespt avatar stefonarch avatar taraspanchenko avatar tsujan avatar ufleisch avatar vitorhcl avatar weblate avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

filer's Issues

Put 'Eject' into context menu for disks/mountpoints

Especially in Spatial mode there is currently no way to eject/unmount disks/loop-mounted partitions.

Whenever the user right-clicks on a directory, we should check whether something is mounted at that directory (a mountpoint) and if yes, offer "Eject" rather than "Move to Trash" in the context menu.

Does not refresh folders automatically

Filer currently does not refresh the contents of folders automatically as it should. One has to manually press F5 to reflect changes in folder contents.

I suspect it has to do with the QKqueueFileSystemWatcherEngine::addPaths: open: No such file or directory message that we keep seeing on helloSystem.

.app bundles within mounted .zip archives are not recognized

Now that we are mounting, rather than extracting, archives and images including .zip files I wonder why .app bundles within mounted .zip files don't seem to get treated as such:

image

As soon as one copies the .app out of the archive (and refreshes the window), it works as intended.

(The application can be executed just fine from the mounted archive, it is just not treated correctly by Filer.)

Dragging a mountpoint to the Trash should unmount/eject

Related to #41

Whenever the user tries to move a folder to the Trash, check whether something is mounted at that location(s), and ask the user whether that volume should be ejected/unmounted. In no case move a directory that has something mounted to it to the Trash!

What shall happen if a combination of files, folders and mountpoints is dragged by the user to the Trash? (What happens on a Mac in this case)?

Add Open, Open in new Tab to global menu

Add Open, Open in new Tab to global menu. Right now they are not reachable with a single-button mouse.

Open should have Command-O, Command-KeyDown, and Enter as usable shortcuts.

Consider basing on newest version

That doesn't seem to depend on libfm anymore!

But it is split across 2 git repositories, and needs lxqt-build-tools. Argh!

(Please do not start working on this without prior discussions on the pros and cons, and a potential CI workflow.)

Show name of the volume instead of something like da0s1

% gpart show -l '/dev/da0s1'       
gpart: No such geom: /dev/da0s1.

% gpart show -l /dev/da0  
=>     32  1014752  da0  MBR  (496M)
       32       31       - free -  (16K)
       63  1014678    1  (null)  (495M)
  1014741       43       - free -  (22K)

Looks like this disk has no name ((null)), even though it has the name "FAT" which the Mac shows correctly...

Display volumes on the desktop

We want to show disks on the desktop.

image

In desktopwindow.cpp change Fm::CachedFolderModel::modelFromPath(fm_path_get_desktop()); to Fm::CachedFolderModel::modelFromPath(fm_path_new_for_uri("computer://")); in two places.

Then, instead of the files in the desktop folder determined by XDG_DESKTOP_DIR, the volumes are shown on the desktop.

Now, how can we show both? Best would be if we could put more than one model into the Fm::CachedFolderModel... is it possible?

Reference:
lxqt#1192 (comment)

Smaller font size

Currently we have:

image

We are already defaulting to 9 pt on the Desktop:

image

We would like to have 9 pt for the sidebar, the status bar at the bottom, and for the main are with the icons/lists.

But we should find a way to fix the grid size, allowing for the labels under the buttons to use more width.

image

Order items on the desktop, volumes should always be first

This is a follow-up from #9.

Would it be possible to adjust the order a bit?

Ideally:

  • The "File System" icon (/, URL computer:///root.link) should always be the first one
  • Followed by any other disks (MIME type inode/mount-point, URL computer:///*.mount) ideally in the order of time when they were mounted (oldest mounts first)
  • Everything else, depending on the order set by the user

cc @moochris

Miller columns

Leaning in from a FreeBSD area:

– and partly from a LIVEstep perspective:

Miller columns pictured at https://github.com/helloSystem/hello/wiki#user-content-nextstep-nextstep-openstep and https://github.com/probonopd/LIVEstep although I have no idea whether any part of e.g. File Viewer can go towards Miller columns for Filer.


Side note: /probonopd/ above, I just realised the connection :-)

Key phrases for search purposes: Finder, Mac OS X, macOS

Make "Compress" do something

Right-click a file or folder -> "Compress"
should do something.

Currently it does nothing.

Need to understand what fm_archiver is supposed to do, and possibly replace it by calling zip...

Trash folder problem (In experimental-12.2)

  1. When the files on the desktop are directly moved to the trash can, the moving menu will be displayed, Not moved directly to the trash.
    image

  2. An error occurs when moving files from the desktop to the trash.
    image

  3. When in the file manager will move files to the trash, but not working.
    image

  4. In the file manager or the desktop, Move the files to the Dock trash, Is not working.

  5. Click the Dock trash, Is not working
    image

  6. After selecting "Move to Trash" from the right-click menu of the file, there is no original file in the trash can.
    image

Use sudo to copy, move/rename, delete

Our objective is that "mere mortals" will never use the Terminal to use the system.

Right now copy, move/rename, delete operations just fail if the user does not have the required permissions.
This makes it impossible to remove an application from /Applications without the Terminal, for example.

This is what happens:

image

Instead of showing an error, Filer should:

image

  1. Set the SUDO_ASKPASS environment variable to /usr/local/bin/askpass (the experimental builds ship it already)
  2. Launch sudo <helper> <action to be performed>

<helper> could either be the full filer-qt or a subset of it that just exposes the copy, move/rename, delete functionality.

Notes:

  • In the Tools menu, Filer has "Open as Root" but it seemingly does nothing. Related?
  • We don't want polkit

Support "show in file manager" operations

User story:
When I select "show in folder" for a download in a browser, then not only the Downloads folder should open but also the downloaded file should be selected.

Looks like GNOME and KDE use https://www.freedesktop.org/wiki/Specifications/file-manager-interface/, org.freedesktop.FileManager1 DBus name and the /org/freedesktop/FileManager1 object path.

And e.g., Chromium implements it:
https://chromium.googlesource.com/chromium/src/+/master/chrome/browser/platform_util_linux.cc

Reference:
probonopd/go-appimage#12

This was also requested upstream.

Rename

The following replaces file and directory names recursively in a directory tree. Very handy!

renamex -s/pcmanfm/filer/g -R .

The following replaces the string in all files:

find . -type f  -not -path './.git/*' -exec sed -i -e 's|pcmanfm|filer|g' {} \;
find . -type f  -not -path './.git/*' -exec sed -i -e 's|PCManFM|Filer|g' {} \;

Show menu when no window is open

Show menu when no window is open (in --desktop mode). You can do most things you can do in a Filer window also on the desktop.

Replace gvfs

    gnome-online-accounts: 3.36.0
    gvfs: 1.30.4_4
    libgdata: 0.17.9_1
    webkit2-gtk3: 2.30.1
    wpebackend-fdo: 1.4.1

103 MiB

Move the trash onto the Desktop

Bruce "Tog" Tognazzini who wrote the first five editions of the Apple Human Interface Guidelines argues in favor of putting the Trash on the Desktop rather than having it in the Dock.

This is especially valuable if the Dock becomes optional.

If we put a desktop file in ~/Desktop like

[Desktop Entry]
Type=Application
Name=Trash
Icon=user-trash
Exec=launch Filer trash:///

then the Trash gets displayed in the bottom-right corner of the desktop; but this is not fully functinal yet. We'd need to backport proper trash-related handling from https://github.com/lxqt/pcmanfm-qt/blob/master/pcmanfm/desktopwindow.cpp

Once this is backported/implemented properly in Filer, we can remove the Trash from the Dock and/or make the Dock optional.

Related:

Get rid of computer:///

When I Right Click On The File System I see all 0
Capture

This Have been Installed On vbox And The real size is 16 GB

and thx!

Allow users to add scripts used as context menu items

Allow users to add scripts used as context menu items for certain types of files and folders.

Currently, we have the Tools menu and a context menu that appears when you right-click a file or folder.
We want to give the user an (easy!) way of extending these with custom scripts.

There should be a way to specify under which circumstances a certain context menu should be added, e.g.,

  • Name: If the file or folder has certain name(s)
  • Name *.txt: If the file or folder has certain suffix(es)
  • MIME: If the file or folder has certain MIME type(s)
  • DirectoryContains enclosing modifier: If the folder contains a file that has certain name(s)
  • DirectoryTreeContains enclosing modifier: If the file or folder is in a folder or in a sub-folder of a folder that contains a file that has certain name(s) (e.g., to add git pull to any file or folder that is in a git repository)

Brainstorming on the format

Git.app # A filer plugin is a normal `.app` bundle or `.AppDir`
Git.app/Git # Main executable
Git.app/Resources/DesktopActions.json # Configuration that specifies what files/folders to display the menu item(s) on
Git.app/Resources/arrow-down.png
Git.app/Resources/arrow-up.png

Contents of DesktopActions.json:

{
  "GitPushPull": {
    "Conditions": [
      {
        "DirectoryTreeContains": [
          {
            "Name": ".git",
            "MIME": "inode/directory"
          }
        ]
      },
      {
        "Name": ".git",
        "MIME": "inode/directory"
      }
    ],
    "Actions": [
      {
        "Name": "Git Pull",
        "Icon": "arrow-down",
        "Args": "pull"
      },
      {
        "Name": "Git Push",
        "Icon": "arrow-up",
        "Args": "push"
      }
    ]
  }
}

Renered as YAML:

GitPushPull:

  Conditions:
    - DirectoryTreeContains:
      - Name: .git
        MIME: inode/directory
    - Name: .git
      MIME: inode/directory

  Actions:
    - Name: Git Pull
      Icon: arrow-down
      Args: pull

    - Name: Git Push
      Icon: arrow-up
      Args: push

Say, we have a file /home/user/helloSystem/ISO/build.sh. When the user right-clicks on this

  1. The system checks whether the parent directory (or any of its parent directories) contains a .git with the MIME type inode/directory
  2. Because this is the case, two context menus get added: "Git Pull" with the icon from Git.app/Resources/arrow-down.png, and "Git Push" with the icon from Git.app/Resources/arrow-up.png
  3. When the user clicks "Git Pull", then launch Git.app pull /home/user/helloSystem/ISO/build.sh gets invoked
  4. From there, Git.app/Git can do as it pleases (e.g., show a GUI, etc.)

Too complicated to implement and use? Can we simplify?

Prior Art

KDE Service Menus

$HOME/.local/share/kservices5/ServiceMenus/
/usr/local/share/kservices5/ServiceMenus/
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=all/allfiles;
Actions=Shred
#X-KDE-Submenu=Shred

[Desktop Action Shred]
Name=Safe Remove
Icon=trash-empty
Exec=shred -u -f -z -n3 %u

GNOME Nautilus Scripts

https://help.ubuntu.com/community/NautilusScriptsHowto

~/.local/share/nautilus/scripts/

http://g-scripts.sourceforge.net/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.