Make the default session name configurable.

See #523.
This commit is contained in:
Florian Bruhin 2015-04-05 23:30:43 +02:00
parent 2c99520f79
commit 9b8f5e3ff0
6 changed files with 58 additions and 8 deletions

View File

@ -439,7 +439,8 @@ Syntax: +:session-save [*--current*] [*--quiet*] [*--force*] ['name']+
Save a session.
==== positional arguments
* +'name'+: The name of the session.
* +'name'+: The name of the session. If not given, the session configured in general -> session-default-name is saved.
==== optional arguments
* +*-c*+, +*--current*+: Save the current session instead of the default.

View File

@ -22,6 +22,7 @@
|<<general-new-instance-open-target,new-instance-open-target>>|How to open links in an existing instance if a new one is launched.
|<<general-log-javascript-console,log-javascript-console>>|Whether to log javascript console messages.
|<<general-save-session,save-session>>|Whether to always save the open pages.
|<<general-session-default-name,session-default-name>>|The name of the session to save by default, or empty for the last loaded session.
|==============
.Quick reference for section ``ui''
@ -419,6 +420,12 @@ Valid values:
Default: +pass:[false]+
[[general-session-default-name]]
=== session-default-name
The name of the session to save by default, or empty for the last loaded session.
Default: +pass:[default]+
== ui
General options related to the user interface.

View File

@ -829,7 +829,7 @@ class Application(QApplication):
@cmdutils.register(instance='app', name='wq',
completion=[usertypes.Completion.sessions])
def save_and_quit(self, name='default'):
def save_and_quit(self, name=sessions.default):
"""Save open pages and quit.
Args:
@ -863,7 +863,7 @@ class Application(QApplication):
session_manager.save(session, last_window=last_window,
load_next_time=True)
elif config.get('general', 'save-session'):
session_manager.save('default', last_window=last_window,
session_manager.save(sessions.default, last_window=last_window,
load_next_time=True)
deferrer = False

View File

@ -216,6 +216,11 @@ def data(readonly=False):
SettingValue(typ.Bool(), 'false'),
"Whether to always save the open pages."),
('session-default-name',
SettingValue(typ.SessionName(none_ok=True), ''),
"The name of the session to save by default, or empty for the "
"last loaded session."),
readonly=readonly
)),

View File

@ -1294,6 +1294,22 @@ class UrlList(List):
"{}".format(val.errorString()))
class SessionName(BaseType):
"""The name of a session."""
typestr = 'session'
def validate(self, value):
if not value:
if self._none_ok:
return
else:
raise configexc.ValidationError(value, "may not be empty!")
if value.startswith('_'):
raise configexc.ValidationError(value, "may not start with '_'!")
class SelectOnRemove(BaseType):
"""Which tab to select when the focused tab is removed."""

View File

@ -35,6 +35,10 @@ from qutebrowser.utils import (standarddir, objreg, qtutils, log, usertypes,
message)
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.mainwindow import mainwindow
from qutebrowser.config import config
default = object() # Sentinel value
class SessionError(Exception):
@ -163,10 +167,22 @@ class SessionManager(QObject):
"""Save a named session.
Args:
name: The name of the session to save, or the 'default' sentinel
object.
last_window: If set, saves the saved self._last_window_session
instead of the currently open state.
load_next_time: If set, prepares this session to be load next time.
Return:
The name of the saved session.
"""
if name is default:
name = config.get('general', 'session-default-name')
if name is None:
if self._current is not None:
name = self._current
else:
name = 'default'
path = self._get_session_path(name)
log.misc.debug("Saving session {} to {}...".format(name, path))
@ -187,6 +203,7 @@ class SessionManager(QObject):
if load_next_time:
state_config = objreg.get('state-config')
state_config['general']['session'] = name
return name
def save_last_window_session(self):
"""Temporarily save the session for the last closed window."""
@ -299,18 +316,22 @@ class SessionManager(QObject):
@cmdutils.register(name=['session-save', 'w'],
completion=[usertypes.Completion.sessions],
instance='session-manager')
def session_save(self, win_id: {'special': 'win_id'}, name='default',
current=False, quiet=False, force=False):
def session_save(self, win_id: {'special': 'win_id'},
name: {'type': str}=default, current=False, quiet=False,
force=False):
"""Save a session.
Args:
win_id: The current window ID.
name: The name of the session.
name: The name of the session. If not given, the session configured
in general -> session-default-name is saved.
current: Save the current session instead of the default.
quiet: Don't show confirmation message.
force: Force saving internal sessions (starting with an underline).
"""
if name.startswith('_') and not force:
if (name is not default and
name.startswith('_') and # pylint: disable=no-member
not force):
raise cmdexc.CommandError("{!r} is an internal session, use "
"--force to save anyways.".format(name))
if current:
@ -319,7 +340,7 @@ class SessionManager(QObject):
name = self._current
assert not name.startswith('_')
try:
self.save(name)
name = self.save(name)
except SessionError as e:
raise cmdexc.CommandError("Error while saving session: {}"
.format(e))