Ubuntu gnome-terminal添加选择拷贝和右键粘贴功能

本文介绍了如何在Ubuntu系统中为gnome-terminal添加选择复制和右键粘贴功能,通过安装源码包并进行特定代码合并来实现。

参考:http://www.taika.org/~tomba/gnome-terminal/index.html

  1. sudo apt-get build-dep gnome-terminal
  2. mkdir gnome-terminal
    cd gnome-terminal
    apt-get source gnome-terminal
    cd gnome-terminal-2.32.1
  3. 合并git库中src/terminal-screen.c中关于copy/paste部分的代码
  4. dpkg-buildpackage -us -uc -b
    cd ..
    dpkg -i *.deb
  • Ubuntu 16.04 gnome-terminal-3.18.3
diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index f9efbea..9712c5a 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -140,6 +140,8 @@ static void terminal_screen_system_font_changed_cb (GSettings *,
 static gboolean terminal_screen_popup_menu (GtkWidget *widget);
 static gboolean terminal_screen_button_press (GtkWidget *widget,
                                               GdkEventButton *event);
+static gboolean terminal_screen_button_release (GtkWidget *widget,
+                                                GdkEventButton *event);
 static void terminal_screen_hierarchy_changed (GtkWidget *widget,
                                                GtkWidget *previous_toplevel);
 static gboolean terminal_screen_do_exec (TerminalScreen *screen,
@@ -527,6 +529,7 @@ terminal_screen_class_init (TerminalScreenClass *klass)
   widget_class->style_updated = terminal_screen_style_updated;
   widget_class->drag_data_received = terminal_screen_drag_data_received;
   widget_class->button_press_event = terminal_screen_button_press;
+  widget_class->button_release_event = terminal_screen_button_release;
   widget_class->popup_menu = terminal_screen_popup_menu;
   widget_class->hierarchy_changed = terminal_screen_hierarchy_changed;

@@ -1683,13 +1686,7 @@ terminal_screen_button_press (GtkWidget      *widget,
     {
       if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)))
         {
-          /* on right-click, we should first try to send the mouse event to
-           * the client, and popup only if that's not handled. */
-          if (button_press_event && button_press_event (widget, event))
-            return TRUE;
-
-          terminal_screen_do_popup (screen, event, matched_string, matched_flavor);
-          matched_string = NULL; /* adopted to the popup info */
+          vte_terminal_paste_clipboard (VTE_TERMINAL (screen));
           return TRUE;
         }
       else if (!(event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)))
@@ -1708,6 +1705,33 @@ terminal_screen_button_press (GtkWidget      *widget,
   return FALSE;
 }

+static gboolean
+terminal_screen_button_release (GtkWidget      *widget,
+                                GdkEventButton *event)
+{
+  gboolean ret;
+
+  TerminalScreen *screen = TERMINAL_SCREEN (widget);
+  gboolean (* button_release_event) (GtkWidget*, GdkEventButton*) =
+    GTK_WIDGET_CLASS (terminal_screen_parent_class)->button_release_event;
+
+  ret = FALSE;
+  if (button_release_event) {
+    ret = button_release_event (widget, event);
+  }
+
+  if (event->button == 1) {
+    gboolean can_copy;
+
+    can_copy = vte_terminal_get_has_selection (VTE_TERMINAL (screen));
+
+    if (can_copy)
+      vte_terminal_copy_clipboard (VTE_TERMINAL (screen));
+  }
+
+  return ret;
+}
+
 /**
  * terminal_screen_get_current_dir:
  * @screen:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值