3

I would like to add files to the bookmarks pane. Is this somehow achievable?

enter image description here

orschiro
  • 13,737

1 Answers1

3

Introduction

While technically it is not possible to bookmark a file in Nautilus, it is possible to add specific directory and save symbolic links to files there. The script I wrote does exactly that.

Usage

The script is meant to behave this way: right click on a selected file, navigate to Scripts , click bookmark_file.py . The script will automatically create Bookmarked_Files directory in your file, and add it to Nautilus panel. Next time you click on it, you will find symlink to your file there

Note that symlinks can safely be removed from the bookmarks folder, and the actual files will remain in their respective place.

Obtaining the script.

The script source code is provided in this answer as well as on GitHub

If you want to manually add the file:

  1. Copy the script source code and save it as bookmark_files.py in $HOME/.local/share/nautilus/scripts directory.
  2. make sure you make the file executable. You can either do this via right click in Nautilus, or chmod +x $HOME/.local/share/nautilus/scripts/bookmark_files.py in terminal

Alternatively you can do it via git in command line (you will need to have git installed first ):

git clone https://github.com/SergKolo/nautilus_scripts.git  $HOME/.local/share/nautilus/scripts

Another way is to get zip file from the same github repository.

Source Code

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Sergiy Kolodyazhnyy
# Contact: 1047481448@qq.com
# Description: Creates a symlink to user-selected file in 
#              /home/username/Bookmarked_Files
#
# The MIT License (MIT)
# 
# Copyright (c) 2016 Sergiy Kolodyazhnyy 
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
__author__ = "Sergiy Kolodyazhnyy <1047481448@qq.com>"

import os
import sys
import subprocess

def main():

    user_home = os.path.expanduser('~')
    bookmark_dir = os.path.join( user_home,'Bookmarked_Files'  )
    file_path = os.path.abspath(sys.argv[1])


    # ensure the directory exists
    if not os.path.lexists( bookmark_dir  ):
       os.mkdir( bookmark_dir  )

    # check if the directory is already added as bookmark
    try:

        bookmarks = os.path.join(user_home,'.config/gtk-3.0/bookmarks')
        with open(bookmarks ,'a+') as file:
            file.seek(0)
            data = file.read()  
            if not bookmark_dir in data:
                file.write('file://' + bookmark_dir )   

    except IOError:
         text = '--text="Cannot auto-add bookmark directory to panel.'
         subprocess.call(['zenity','--error',text])             

    # create symlink to file
    try:
        basename = sys.argv[1].split('/')[-1]
        os.symlink(file_path, os.path.join(bookmark_dir,basename))
    except OSError as error :
        text = '--text="' + str(error) + '"'
        subprocess.call( ['zenity','--error',text] ) 

if __name__ == '__main__':
    main()

Screenshots

Before running the script

enter image description here

After running the script. The image shows newly created Bookmarked_Files directory and symbolic link to the file from previous image

enter image description here