בדיון בפורום "למה אין לי תפריט כלים באפיפני?" הובע הצורך בפתיחת טאבים ע"י לחיצה כפולה. באופן אישי זה לא כל כך חסר לי, רוב הזמן אני משתמש במקלדת, ו-CTRL+T נחמד מאוד, ולפעמים המועטות שאני חפץ בעכבר התוסף של ה-gestures עושה את העבודה יפה.
מאחר שקל מאוד להרחיב את אפיפני בעזרת פייתון ומעט האקינג לא הרג אף אחד (נו, אולי המחסור בשעות שינה כן ;-) אז בואו ניצור תוסף שעושה זאת.
הרחבה של אפיפני כוללת 2 קבצים (לפחות):
- קובץ עם סיומת ephy-extension, אשר מספק מידע על התוסף (כולל שם הקובץ להפעלת התוסף)
- הקובץ עצמו אשר הוצהר עליו
תוכן הקובץ newtab-dblclick.ephy-extension:
[Epiphany Extension]
Name=New tab with double click
Description=Opens new tab double clicking empty space on the tab bar
Authors=Meir Kriheli <meir@mksoft.co.il>
URL=http://whatsup.org.il/meir/newtab_dblclick.tar.gz
Version=0.1
[Loader]
Type=python
Module=newtab-dblclick
המדור החשוב ביותר הוא ה-Loader. שם מציינים את סוג התוסף (פייתון) ושם המודול אותו נטען (ללא סיומת ה-py במקרה שלנו).
מדור ה-Epiphany Extension מספק מידע אודות התוסף ודי מדבר בעד עצמו.
כעת נכתוב את התוסף עצמו בקובץ newtab-dblclick.py:
import gtk
import epiphany
# default url for the new tab
DEFAULT_URL = 'about:blank'
# new tab options for Epiphany, just to make the
# code readable later on
NEW_TAB_OPTS = \
epiphany.NEW_TAB_IN_EXISTING_WINDOW | \
epiphany.NEW_TAB_APPEND_LAST | \
epiphany.NEW_TAB_OPEN_PAGE
def button_pressed(object, event, window):
"Check if it's a double click, if so open new tab"
if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
e_shell = epiphany.ephy_shell_get_default()
tab = window.get_active_tab()
notebook = window.get_notebook()
# Create a new tab
new_tab = e_shell.new_tab( window, tab, DEFAULT_URL, NEW_TAB_OPTS )
# Give it focus
notebook.set_current_page( notebook.page_num(new_tab) )
return True
else:
return False
def attach_window(window):
"Called upon loading the extension"
notebook = window.get_notebook()
notebook.newtab_signal_handler = notebook.connect('button-press-event', button_pressed , window)
def detach_window(window):
"Called upon unloading the extension"
notebook = window.get_notebook()
if notebook.newtab_signal_handler:
notebook.disconnect(notebook.newtab_signal_handler)
del notebook.newtab_signal_handler
הפונקציות החשובות ביותר הן attach_window ו-detach_window, אשר נקראות כאשר התוסף נטען או מוסר (בהתאמה). אליהן גם מועבר החלון הנוכחי של אפיפני. בפונקציית ה-attach_window אנו מתחברים לסיגנל לחיצת העכבר, דואגים שגם החלון יועבר אל הפונקציה המטפלת בו (button_pressed) ושומרים את ה-handle המתקבל. אנו משתמשים ב-handle הזה כדי לנתק את החיבור לסיגנל כאשר התוסף מוסר בפונקציית detach_window.
כעת כל שנשאר הוא לטפל בלחיצה עצמה. אנו בודקים שזו אכן לחיצה כפולה, יוצרים טאב חדש ונותנים לו את הפוקוס.
עדכון: שוחררה גרסה חדשה - 0.2 המתאימה גם לאפיפני 2.22.0 ומעלה
זוהי גרסה ראשונית ובוסרית של התוסף. הקוד תחת רישיון ה-GPL זמין להורדה. כדי להתקינו יש לפתוח את הקובץ לתיקיה
.gnome2/epiphany/extensions בתיקיית הבית שלכם (לעת עתה, מי שירצה לייצר deb או rpm יבורך). לא לשכוח כמובן להפעיל את התוסף.
להאקינג ושימוש ב-reflection ו-introspection של פייתון כדי להכיר את ממשקי התכנות ניתן להשתמש בתוסף python console. הרחבות מעניינות נוספות תמצאו ב-sstuhr.dk.