Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Copyright (c) 2011, M Rawash <mrawash@gmail.com>
Released under the most recent GPL <http://www.gnu.org/licenses/gpl.html>
*/
"use strict";
XML.ignoreWhitespace = false;
XML.prettyPrinting = false;
var INFO =
<plugin name="penta-sessions" version="0.1"
href="https://github.com/gwash/penta-sessions"
summary="Pentadactyl Session Manager"
xmlns={NS}>
<author email="mrawash@gmail.com">M Rawash</author>
<license href="http://www.gnu.org/licenses/gpl.html">GPL</license>
<project name="Pentadactyl" min-version="1.0"/>
<p>
This plugin provides Vim-like session handeling.
</p>
<note>Only operates on current window</note>
<item>
<tags>'sesdir' 'sessiondir'</tags>
<spec>'sessiondir' 'sesdir'</spec>
<type>string</type>
<default>{options.runtimepath}/sessions/</default>
<description>
<p>
The default directory to save/load sessions from.
</p>
</description>
</item>
<item>
<tags>'sesfile' 'sessionfile'</tags>
<spec>'sessionfile' 'sesfile'</spec>
<type>string</type>
<default></default>
<description>
<p>
The session file you are currently working with, this will be set automatically whenever you
save or load a session, but you can set it manually if you want.
</p>
</description>
</item>
<item>
<tags>ss :sessions :sessionsave :mkses :mksesion</tags>
<strut/>
<spec>:sessions<oa>ave</oa><oa>!</oa> <oa>file</oa></spec>
<spec>ss</spec>
<description>
<p>
Saves current session to an ExCommand <oa>file</oa>, which can be restored later
with <ex>:sessionload <oa>file</oa></ex>.
</p>
<p>
If <oa>file</oa> is just a basename (without directory path), it will create a session file
with that name in the <o>sessiondir</o>.
<example><ex>:sessionsave</ex> pythonref</example>
</p>
<p>
If no <oa>file</oa> was specified it will save to a numbered file (based on current date) in <o>sessiondir</o>.
</p>
<p>
Adding ! will overwrite the file if it exists.
<example><ex>:sessionsave!</ex> {options.runtimepath}/sessions/gapi.penta</example>
</p>
</description>
</item>
<item>
<tags>sl :sessionl :sessionload</tags>
<strut/>
<spec>:sessionl<oa>oad</oa><oa>!</oa> <oa>file</oa></spec>
<spec>sl</spec>
<description>
<p>
Loads session from <oa>file</oa>, replacing all tabs in current window if no ! was added.
</p>
<p>
If <oa>file</oa> is a basename, it will look for it in <o>sessiondir</o>.
</p>
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
</description>
</item>
</plugin>;
var setsessiondir = function (value) {
let dir = io.File(value);
if (!dir.exists()) {
try { dir.create(1,488) } catch(e) { return dactyl.echoerr(e.message) };
} else if (!dir.isDirectory())
return dactyl.echoerr(value+' is not a directory!');
if (!/\/$/.test(value)) value+='/';
return value
}
group.options.add(['sessiondir', 'sesdir'],
'Default directory for saving sessions',
'string',
options.runtimepath+'/sessions/',
{
setter: setsessiondir,
}
)
group.options.add(['sessionfile', 'sesfile'],
'Current session file',
'string', ''
)
group.commands.add(['sessions[ave]','mkses[sion]'],
'Save current window',
function(args) {
let filename = args[0] ? (/\//.test(args[0]) ? args[0] : options.sessiondir+args[0])
: options.sessiondir+Date.now()+'.penta'
let file = io.File(filename);
dactyl.assert(!file.exists() || args.bang, _("io.exists", file.path.quote()));
let data = '" vim: set ft=pentadactyl:\n';
data+='\ncd '+io.cwd.path;
data+='\nse '+options.runtimepath;
data+='\nse '+options.sessiondir;
data+='\nt '+tab.linkedBrowser.contentDocument.location.href;
});
try {
file.write(data)
} catch(e) {
dactyl.echoerr(_("io.notWriteable", file.path.quote()));
return;
};
options.sessionfile=file.path;
dactyl.echomsg('Saved session to '+file.path.quote());
}, {
argCount: '?',
bang: true,
completer: function (context) {context.anchored=false; completion.file(context,true,options.sessiondir)}
}
);
group.commands.add(['sessionl[oad]'],
'Load a session file',
function(args) {
let file = io.File(/\//.test(args[0]) ? args[0] : options.sessiondir+args[0]);
if (!file.exists() || !file.isReadable() || file.isDirectory()) {
dactyl.echoerr(_("io.notReadable", file.path.quote()));
return;
}
let curtab = gBrowser.mCurrentTab;
if(!args.bang) tabs.keepOnly(curtab);
let sessionscript = io.source(file.path);
sessionscript.unload();
options.sessionfile=file.path;
if(!args.bang) tabs.remove(curtab);
dactyl.echomsg('Loaded session from '+file.path.quote());
}, {
argCount: "1",
bang: true,
completer: function (context) {context.anchored=false; completion.file(context,true,options.sessiondir)}
}
);
group.mappings.add([modes.NORMAL], ['ss'],
'Save current window',
function() { CommandExMode().open('sessionsave! ')}
);
group.mappings.add([modes.NORMAL], ['sl'],
'Load a session file',
function() { CommandExMode().open('sessionload ')}
);
/* vim:se sts=4 sw=4 et: */