Skip to content

Commit 3e4eefc

Browse files
committed
Minor code update and error management
1 parent 156af87 commit 3e4eefc

33 files changed

+1359
-90
lines changed

guake/boxes.py

+15-19
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
import gi
66
gi.require_version('Vte', '2.91') # vte-0.42
77
gi.require_version('Gtk', '3.0')
8+
from gi.repository import GLib
9+
from gi.repository import GObject
810
from gi.repository import Gdk
911
from gi.repository import Gio
1012
from gi.repository import Gtk
1113
from gi.repository import Vte
12-
from gi.repository import GLib
13-
from gi.repository import GObject
1414

1515
from guake.callbacks import MenuHideCallback
1616
from guake.callbacks import TerminalContextMenuCallbacks
@@ -21,7 +21,6 @@
2121
from guake.utils import TabNameUtils
2222
from guake.utils import save_tabs_when_changed
2323

24-
2524
log = logging.getLogger(__name__)
2625

2726
# TODO remove calls to guake
@@ -118,34 +117,29 @@ def _add_search_box(self):
118117
b'#search-frame border {'
119118
b' padding: 5px 5px 5px 5px;'
120119
b' background-color: #CFCFCF;'
121-
b'}')
120+
b'}'
121+
)
122122
Gtk.StyleContext.add_provider_for_screen(
123-
Gdk.Screen.get_default(),
124-
css_provider,
125-
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
123+
Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
124+
)
126125

127126
# Add to revealer
128127
self.search_revealer.add(self.search_frame)
129128
self.search_revealer.set_transition_duration(500)
130-
self.search_revealer.set_transition_type(
131-
Gtk.RevealerTransitionType.CROSSFADE)
129+
self.search_revealer.set_transition_type(Gtk.RevealerTransitionType.CROSSFADE)
132130
self.search_revealer.set_valign(Gtk.Align.END)
133131
self.search_revealer.set_halign(Gtk.Align.END)
134132

135133
# Welcome to the overlay
136134
self.add_overlay(self.search_revealer)
137135

138136
# Events
139-
self.search_entry.connect('key-press-event',
140-
self.on_search_entry_keypress)
137+
self.search_entry.connect('key-press-event', self.on_search_entry_keypress)
141138
self.search_entry.connect('changed', self.do_search)
142139
self.search_entry.connect('activate', self.do_search)
143-
self.search_entry.connect('focus-out-event',
144-
self.on_search_entry_focus_out_event)
145-
self.search_next_btn.connect('clicked',
146-
self.on_search_next_clicked)
147-
self.search_prev_btn.connect('clicked',
148-
self.on_search_prev_clicked)
140+
self.search_entry.connect('focus-out-event', self.on_search_entry_focus_out_event)
141+
self.search_next_btn.connect('clicked', self.on_search_next_clicked)
142+
self.search_prev_btn.connect('clicked', self.on_search_prev_clicked)
149143
self.search_prev = False
150144

151145
def get_terminals(self):
@@ -216,7 +210,8 @@ def show_search_box(self):
216210
self.search_entry.grab_focus()
217211
GObject.signal_handler_block(
218212
self.get_notebook(),
219-
self.get_notebook().notebook_on_button_press_id)
213+
self.get_notebook().notebook_on_button_press_id
214+
)
220215

221216
def hide_search_box(self):
222217
if self.search_revealer.get_reveal_child():
@@ -225,7 +220,8 @@ def hide_search_box(self):
225220
self.last_terminal_focused.unselect_all()
226221
GObject.signal_handler_unblock(
227222
self.get_notebook(),
228-
self.get_notebook().notebook_on_button_press_id)
223+
self.get_notebook().notebook_on_button_press_id
224+
)
229225

230226
def on_search_entry_focus_out_event(self, event, user_data):
231227
self.hide_search_box()

guake/guake_app.py

+36-27
Original file line numberDiff line numberDiff line change
@@ -1150,37 +1150,49 @@ def save_tabs(self, filename='session.json'):
11501150
for key, nb in self.notebook_manager.get_notebooks().items():
11511151
tabs = []
11521152
for index in range(nb.get_n_pages()):
1153-
page = nb.get_nth_page(index)
1154-
tabs.append({
1155-
'directory': page.child.terminal.get_current_directory(),
1156-
'label': nb.get_tab_text_index(index),
1157-
'custom_label_set': getattr(page, 'custom_label_set', False)
1158-
})
1153+
try:
1154+
page = nb.get_nth_page(index)
1155+
tabs.append({
1156+
'directory': page.child.terminal.get_current_directory(),
1157+
'label': nb.get_tab_text_index(index),
1158+
'custom_label_set': getattr(page, 'custom_label_set', False)
1159+
})
1160+
except FileNotFoundError:
1161+
# discard same broken tabs
1162+
pass
11591163
# NOTE: Maybe we will have frame inside the workspace in future
11601164
# So lets use list to store the tabs (as for each frame)
11611165
config['workspace'][key] = [tabs]
11621166

1163-
with open(self.get_xdg_config_directory() / filename, 'w') as f:
1167+
if not self.get_xdg_config_directory().exists():
1168+
self.get_xdg_config_directory().mkdir(parents=True)
1169+
session_file = self.get_xdg_config_directory() / filename
1170+
with session_file.open('w') as f:
11641171
json.dump(config, f, ensure_ascii=False, indent=4)
11651172

1166-
log.info('Guake tabs saved')
1173+
log.info('Guake tabs saved to %s', session_file)
11671174

11681175
def restore_tabs(self, filename='session.json', suppress_notify=False):
1169-
path = self.get_xdg_config_directory() / filename
1170-
if not path.exists():
1176+
session_file = self.get_xdg_config_directory() / filename
1177+
if not session_file.exists():
11711178
log.info('Cannot found tabs session.json file')
11721179
return
1173-
with open(path) as f:
1180+
with session_file.open() as f:
11741181
try:
11751182
config = json.load(f)
11761183
except Exception:
11771184
log.warning('session.json is broken')
1178-
shutil.copy(path, self.get_xdg_config_directory() / '{}.bak'.format(filename))
1185+
shutil.copy(
1186+
session_file,
1187+
self.get_xdg_config_directory() / '{0}.bak'.format(filename)
1188+
)
11791189
img_filename = pixmapfile('guake-notification.png')
11801190
notifier.showMessage(
11811191
_('Guake Terminal'),
1182-
_('Your session.json file is broken, backup to {}.bak'.format(filename)),
1183-
img_filename)
1192+
_('Your session.json file is broken, backup to {session_filename}.bak').format(
1193+
session_filename=filename
1194+
), img_filename
1195+
)
11841196
return
11851197

11861198
# Disable auto save tabs
@@ -1198,9 +1210,8 @@ def restore_tabs(self, filename='session.json', suppress_notify=False):
11981210
for tabs in frames:
11991211
for index, tab in enumerate(tabs):
12001212
nb.new_page_with_focus(
1201-
tab['directory'],
1202-
tab['label'],
1203-
tab['custom_label_set'])
1213+
tab['directory'], tab['label'], tab['custom_label_set']
1214+
)
12041215

12051216
# Remove original pages in notebook
12061217
for i in range(current_pages):
@@ -1213,20 +1224,18 @@ def restore_tabs(self, filename='session.json', suppress_notify=False):
12131224
img_filename = pixmapfile('guake-notification.png')
12141225
notifier.showMessage(
12151226
_('Guake Terminal'),
1216-
_('Your session.json schema is broken, backup to {0}.bak,'
1217-
'and error message has been saved to {0}.log.err'.format(filename)),
1218-
img_filename)
1227+
_(
1228+
'Your session.json schema is broken, backup to {0}.bak,'
1229+
'and error message has been saved to {0}.log.err'.format(filename)
1230+
), img_filename
1231+
)
12191232

12201233
# Reset auto save tabs
12211234
self.settings.general.set_boolean('save-tabs-when-changed', v)
12221235

12231236
# Notify the user
1224-
if (self.settings.general.get_boolean('restore-tabs-notify') and
1225-
not suppress_notify):
1237+
if (self.settings.general.get_boolean('restore-tabs-notify') and not suppress_notify):
12261238
filename = pixmapfile('guake-notification.png')
1227-
notifier.showMessage(
1228-
_("Guake Terminal"),
1229-
_("Your tabs has been restored!"),
1230-
filename)
1239+
notifier.showMessage(_("Guake Terminal"), _("Your tabs has been restored!"), filename)
12311240

1232-
log.info('Guake tabs restored')
1241+
log.info('Guake tabs restored from %s', session_file)

guake/main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838

3939
from guake.globals import NAME
4040
from guake.globals import bindtextdomain
41-
from guake.utils import save_preferences
4241
from guake.utils import restore_preferences
42+
from guake.utils import save_preferences
4343

4444
# When we are in the document generation on readthedocs, we do not have paths.py generated
4545
try:

guake/notebook.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ def __init__(self, *args, **kwargs):
7878
self.add_events(Gdk.EventMask.SCROLL_MASK)
7979
self.connect('scroll-event', self.scroll_callback.on_scroll)
8080
self.notebook_on_button_press_id = self.connect(
81-
"button-press-event", self.on_button_press, None)
81+
"button-press-event", self.on_button_press, None
82+
)
8283

8384
self.new_page_button = Gtk.Button(
8485
image=Gtk.Image.new_from_icon_name("tab-new", Gtk.IconSize.MENU), visible=True
@@ -137,7 +138,10 @@ def get_running_fg_processes_count(self):
137138
def get_running_fg_processes_count_page(self, index):
138139
total_procs = 0
139140
for terminal in self.get_terminals_for_page(index):
140-
fdpty = terminal.get_pty().get_fd()
141+
pty = terminal.get_pty()
142+
if not pty:
143+
continue
144+
fdpty = pty.get_fd()
141145
term_pid = terminal.pid
142146
try:
143147
fgpid = posix.tcgetpgrp(fdpty)
@@ -236,8 +240,7 @@ def terminal_attached(self, terminal):
236240
terminal.emit("focus", Gtk.DirectionType.TAB_FORWARD)
237241
self.emit('terminal-spawned', terminal, terminal.pid)
238242

239-
def new_page_with_focus(self, directory=None,
240-
label=None, user_set=False):
243+
def new_page_with_focus(self, directory=None, label=None, user_set=False):
241244
box, page_num, terminal = self.new_page(directory)
242245
self.set_current_page(page_num)
243246
if not label:

guake/prefs.py

+22-30
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,28 @@
9090
{
9191
'label': _('General'),
9292
'key': 'general',
93-
'keys': [
94-
{
95-
'key': 'show-hide',
96-
'label': _('Toggle Guake visibility')
97-
},
98-
{
99-
'key': 'show-focus',
100-
'label': _('Show and focus Guake window')
101-
},
102-
{
103-
'key': 'toggle-fullscreen',
104-
'label': _('Toggle Fullscreen')
105-
},
106-
{
107-
'key': 'toggle-hide-on-lose-focus',
108-
'label': _('Toggle Hide on Lose Focus')
109-
},
110-
{
111-
'key': 'quit',
112-
'label': _('Quit')
113-
},
114-
{
115-
'key': 'reset-terminal',
116-
'label': _('Reset terminal')
117-
},
118-
{
119-
'key': 'search-terminal',
120-
'label': _('Search terminal')
121-
}
122-
]
93+
'keys': [{
94+
'key': 'show-hide',
95+
'label': _('Toggle Guake visibility')
96+
}, {
97+
'key': 'show-focus',
98+
'label': _('Show and focus Guake window')
99+
}, {
100+
'key': 'toggle-fullscreen',
101+
'label': _('Toggle Fullscreen')
102+
}, {
103+
'key': 'toggle-hide-on-lose-focus',
104+
'label': _('Toggle Hide on Lose Focus')
105+
}, {
106+
'key': 'quit',
107+
'label': _('Quit')
108+
}, {
109+
'key': 'reset-terminal',
110+
'label': _('Reset terminal')
111+
}, {
112+
'key': 'search-terminal',
113+
'label': _('Search terminal')
114+
}]
123115
},
124116
{
125117
'label': _('Tab management'),

guake/tests/test_about.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,27 @@
22
# pylint: disable=redefined-outer-name
33

44
import pytest
5+
import os
56

67
from guake import guake_version
78
from guake.about import AboutDialog
8-
from locale import gettext as _
99

1010

1111
@pytest.fixture
1212
def dialog(mocker):
1313
mocker.patch('guake.simplegladeapp.Gtk.Widget.show_all')
14-
ad = AboutDialog()
15-
return ad
14+
try:
15+
old_os_environ = os.environ
16+
os.environ["LANGUAGE"] = "en_US.UTF-8"
17+
ad = AboutDialog()
18+
yield ad
19+
finally:
20+
os.environ = old_os_environ
1621

1722

1823
def test_version_test(dialog):
1924
assert dialog.get_widget('aboutdialog').get_version() == guake_version()
2025

2126

2227
def test_title(dialog):
23-
assert dialog.get_widget('aboutdialog').get_title() == _('About Guake')
28+
assert dialog.get_widget('aboutdialog').get_title() == 'About Guake'

guake/tests/test_notebook.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ def nb(mocker):
1111
targets = [
1212
'guake.notebook.TerminalNotebook.terminal_spawn',
1313
'guake.notebook.TerminalNotebook.terminal_attached',
14-
'guake.notebook.TerminalNotebook.guake',
15-
'guake.notebook.TerminalBox.set_terminal'
14+
'guake.notebook.TerminalNotebook.guake', 'guake.notebook.TerminalBox.set_terminal'
1615
]
1716
for target in targets:
1817
mocker.patch(target, create=True)

guake/utils.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
from guake.globals import ALIGN_TOP
4141
from guake.globals import ALWAYS_ON_PRIMARY
4242

43-
4443
log = logging.getLogger(__name__)
4544

4645

@@ -59,6 +58,7 @@ def get_server_time(widget):
5958
def save_tabs_when_changed(func):
6059
"""Decorator for save-tabs-when-changed
6160
"""
61+
6262
def wrapper(*args, **kwargs):
6363
func(*args, **kwargs)
6464
log.debug("mom, I've been called: %s %s", func.__name__, func)
@@ -80,6 +80,7 @@ def wrapper(*args, **kwargs):
8080
# Tada!
8181
if g and g.settings.general.get_boolean('save-tabs-when-changed'):
8282
g.save_tabs()
83+
8384
return wrapper
8485

8586

@@ -94,8 +95,7 @@ def restore_preferences(filename):
9495
# XXX: Hardcode?
9596
with open(filename, 'rb') as f:
9697
prefs = f.read()
97-
p = subprocess.Popen(['dconf', 'load', '/apps/guake/'],
98-
stdin=subprocess.PIPE)
98+
p = subprocess.Popen(['dconf', 'load', '/apps/guake/'], stdin=subprocess.PIPE)
9999
p.communicate(input=prefs)
100100

101101

0 commit comments

Comments
 (0)