filetags.el icon indicating copy to clipboard operation
filetags.el copied to clipboard

Emacs package to manage filetags in the filename

[[file:https://github.com/DerBeutlin/filetags.el/workflows/CI/badge.svg]] [[https://melpa.org/#/filetags][file:https://melpa.org/packages/filetags-badge.svg]]

  • Filetags Filetags is an Emacs package inspired by [[https://github.com/novoid/filetags][filetags]] which manages filetags directly in the filename. By default tags are space seperated words seperated from the rest of the filename by =--= e.g. : image -- holiday italy.png One can change the seperator between the filename and the tags as well as the seperator between the tags by customizing =filetags-delimiter-between-filename-and-tags= and =filetags-delimiter-between-tags=. This package provides a simple function to update these tags from the dired file browser and the option to restrict tags to a controlled vocabulary.

This is up until now just a hobby project to teach me elisp. So I am grateful for every feedback.

** Installation Install filetags from melpa. ** Usage In dired call =filetags-dired-update-tags= to add or remove tags to multiple marked files or if no files are marked to the file on point. The User is then prompted for tags and kann add tags by entering "+tag". If there are already tags present in one of the files the respective action to remove this tag "-tag" is proposed. The user can enter tag actions until he hits "Perform actions". Then the tags are applied.

If one adds #+BEGIN_SRC emacs-lisp (setq filetags-enforce-controlled-vocabulary t) (setq filetags-controlled-vocabulary '(("winter" "summer") ("emacs"))) #+END_SRC to one's =.emacs= file, then only tags from the controlled vocabulary can be added to the files (plus tags which are already present in the filenames). =filetags-controlled-vocabulary= is a list of list of strings. Tags which are in the same list are mutually exclusive which means if one of those tags is added, all other tags of the same group are removed. When adding the tag winter to the following file: : test -- emacs summer.pdf then it is renamed to : test -- emacs winter.pdf If =filetags-enforce-controlled-vocabulary= is nil then also other tags are accepted. If one sets #+BEGIN_SRC emacs-lisp (setq filetags-load-controlled-vocabulary-from-file t) #+END_SRC then the vocabulary in =filetags-controlled-vocabulary= is ignored and the controlled vocabulary is loaded from the next =.filetags= file in the upper directory tree. The syntax of this file is equal to the one in [[https://github.com/novoid/filetags#get-the-most-out-of-filetags-controlled-vocabulary-filetags][filetags]]. One can add comments with =#= and multiple tags on the same line are mutually exclusive.

*** Handling of symbolic links When changing the tags of symbolic links, the tags of the origin file are also changed. This works recursively for a chain of links. E.g., if one has a chain of links : original-file.pdf : link.pdf -> original-file.pdf : another-link.pdf -> link.pdf

adding the tag important to =another-link.pdf= changes the files to : original-file -- important.pdf : link -- important.pdf -> original-file -- important.pdf : another-link -- important.pdf -> link -- important.pdf

The other way round (when changing =original-file.pdf= does not work as one would have to scan the whole file system for links. ** Related projects Also inspired by novoids work: [[https://github.com/DerBeutlin/date2name.el][date2name.el]]