NAME
Regexp::Common::Emacs -- regexps for some Emacs filenames
SYNOPSIS
use Regexp::Common 'Emacs', 'no_defaults';
if ($str =~ /$RE{Emacs}{backup}/) {
# ...
}
# regexp
my $re1 = $RE{Emacs}{lockfile};
# subroutine style to get regexp
use Regexp::Common 'RE_Emacs_autosave';
my $re2 = RE_Emacs_autosave();
DESCRIPTION
This module is regexps matching filenames used by Emacs. They're designed to operate only on the filename without a directory part, so
foo.txt good
/dir/foo.txt bad
Basename-only is because the directory and/or volume part is system dependent and best left to something like splitpath()
from File::Spec. The basename is as per readdir()
if scanning a directory.
See Regexp::Common for basic operation of Regexp::Common
.
Patterns
$RE{Emacs}{backup}
-
Match an Emacs backup filename, with no directory part. This is filenames like
foo.txt~ single foo.txt.~123~ numbered
The
-keep
option captures are$1 whole string $2 originating filename "foo.txt" $3 backup number "123", or undef if single
Options can restrict to numbered or single backups.
$RE{Emacs}{backup}{-numbered}
-
Match only numbered backup files, not single ones.
foo.txt.~123~ matched foo.txt~ not matched
$RE{Emacs}{backup}{-notnumbered}
-
Match only single backup files, not numbered ones.
foo.txt~ matched foo.txt.~123~ not matched
-numbered
and-notnumbered
are mutually exclusive. A given backup file matches just one of the two.A file such as foo.txt.~123~ is presumed to be a numbered backup. It could be a single backup from foo.txt.~123, but files named that way ought to be unusual.
$RE{Emacs}{backup}{-single}
-
Match backup files and assume that they are always single backups. This pattern is anything ending ~.
foo.txt~ matched foo.txt.~123~ matched, $2 = foo.txt.~123
This is the same as the default
$RE{Emacs}{backup
>, but the-keep
originating name in$2
becomes everything before the ending ~, with no number part distinguished.
Emacs makes a backup file when first changing a file. The default is a single backup foo.txt~. The
version-control
variable can be set for rolling numbered backups foo.txt.~1~, foo.txt.~2~, foo.txt.~3~ etc.See the GNU Emacs Manual section "Single or Numbered Backups" (node "Backup Names") and function
backup-file-name-p
for the name pattern.For reference, the
mount
program (see mount(8)) uses /etc/mtab~ as a lockfile. mtab~ would be reckoned an Emacs backup file by the patterns here. $RE{Emacs}{lockfile}
-
Match an Emacs lockfile filename, with no directory part. This is a filename like
.#foo.txt
The
-keep
option captures are$1 whole string $2 originating filename "foo.txt"
Emacs creates a lockfile to prevent two users or two running copies of Emacs from editing the same file simultaneously. On a Unix-like system a lockfile is normally a symlink to a non-existent target with user and PID. That means ignoring dangling symlinks will also ignore Emacs lockfiles -- if that's easier than checking filenames.
See the GNU Emacs Manual section "Protection against Simultaneous Editing" (node "Interlocking") and C source code
fill_in_lock_file_name()
for the name construction. $RE{Emacs}{autosave}
-
Match an Emacs autosave filename, with no directory part. This is a filename like
#foo.txt#
The
-keep
option captures are$1 whole string $2 originating filename "foo.txt"
Emacs creates an autosave file with the content of a file buffer which has been edited and not yet saved. The autosave file can be used to recover those edits in the event of a system crash (
M-x recover-session
or individualM-x recover-file
orM-x recover-this-file
).See the GNU Emacs Manual section "Auto-Save Files" (node "Auto-Saving") and function
auto-save-file-name-p
for the pattern. $RE{Emacs}{skipfile}
-
Match Emacs-related filenames which can generally be skipped. This means a backup, lockfile or autosave as above.
foo.txt~ backup foo.txt.~123~ backup .#foo.txt lockfile #foo.txt# autosave
With the
-keep
option the only capture is$1 whole string
For example to exclude Emacs bits when reading a directory,
opendir DH, '/some/dir' or die $!; while (my $filename = readdir DH) { next if $filename =~ $RE{Emacs}{skipfile}; print "$filename\n"; } closedir DH;
IMPORTS
This module should be loaded through the Regexp::Common
mechanism, see "Loading specific sets of patterns." in Regexp::Common. Remember that loading an add-on pattern like this module also loads all the builtin patterns by default.
# Emacs plus all builtins
use Regexp::Common 'Emacs';
If you want only $RE{Emacs}
then add no_defaults
(or list specific desired builtins).
# Emacs alone
use Regexp::Common 'Emacs', 'no_defaults';
SEE ALSO
HOME PAGE
http://user42.tuxfamily.org/regexp-common-other/index.html
LICENSE
Copyright 2012, 2013, 2014, 2015 Kevin Ryde
Regexp-Common-Other is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Regexp-Common-Other is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Regexp-Common-Other. If not, see <http://www.gnu.org/licenses/>.