Hello,
Geany doesn't find the vte lib in fedora when you have just the vte
package installed, but it works fine when you have vte-devel installed.
This is because the normal vte package is something like libvte.so.0.9.4
or something like that, and geany doesn't pick it up, however vte-devel
installs libvte.so which geany does pick up, and since i need vte-devel
to build the geany package for fedora I didn't notice this, but if you
don't have vte-devel installed geany complains about not being able to
load the terminal. Since I can't require a -devel package for a normal
package I have to make geany link vte in during compile instead of doing
g_module_open. I just finished this patch this morning and tested it
and it works well. Will you guys include this? Or is there a specific
reason you use g_module_open and g_module_symbol? It looks like you
were putting it in the configure script at one point, but just commented
it out. This has been hashed out in between work and in a couple of
airports so I apologize if its messy or I missed something stupid. Thanks,
Josef
--- geany/doc/geany.1.in.josef 2007-01-24 07:50:48.000000000 -0500
+++ geany/doc/geany.1.in 2007-01-24 07:51:02.000000000 -0500
@@ -38,10 +38,6 @@ Don't load the previous session's files
Don't load terminal support. Use this option, if you don't want to load the virtual terminal
emulator widget at startup. If you don't have libvte.so.4 installed, then terminal-support is
automatically disabled. Only available if Geany was compiled with support for VTE.
-.IP "\fB\fP \fB\-\-vte-lib\fP " 10
-Specify explicitly the path including filename or only the filename to the VTE library, e.g.
-/usr/lib/libvte.so or libvte.so. This option is only needed, when the autodetection doesn't
-work. Only available if Geany was compiled with support for VTE.
.IP "\fB-v\fP \fB\-\-version\fP " 10
Show version information and exit.
.IP "\fB-?\fP \fB\-\-help\fP " 10
--- geany/configure.in.josef 2007-01-24 07:41:10.000000000 -0500
+++ geany/configure.in 2007-01-23 17:31:07.000000000 -0500
@@ -84,14 +84,13 @@ fi
AC_ARG_ENABLE(vte, AC_HELP_STRING([--enable-vte],[enable if you want virtual termninal support [[default=yes]]]),
[want_vte="$enableval"], [want_vte="yes"])
-# if test "$want_vte" = "yes"; then
-# PKG_CHECK_MODULES(VTE, [vte],
-# [AC_DEFINE(HAVE_VTE, 1, [Define if you want VTE support])],
-# [AC_MSG_ERROR([VTE support enabled, but VTE not found])])
-# AC_CHECK_LIB(vte, vte_terminal_new,
-# [AC_DEFINE(HAVE_VTE, 1, [Define if you want VTE support])],
-# [AC_MSG_ERROR([VTE support enabled, but VTE not found])], [])
-# fi
+if test "$want_vte" = "yes"; then
+ PKG_CHECK_MODULES([VTE],[vte],
+ [AC_DEFINE(HAVE_VTE, 1, [Define if you want VTE support])],
+ [AC_MSG_ERROR([VTE support enabled, but VTE not found])])
+ AC_SUBST([VTE_LIBS])
+ AC_SUBST([VTE_CFLAGS])
+fi
# Check for random number paths (skip when cross compiling)
if test "x$build" = "x$target"; then
--- geany/src/vte.c.josef 2007-01-24 07:40:43.000000000 -0500
+++ geany/src/vte.c 2007-01-24 07:43:15.000000000 -0500
@@ -41,8 +41,6 @@ VteInfo vte_info;
extern gchar **environ;
static pid_t pid;
-static GModule *module = NULL;
-static struct VteFunctions *vf;
static gboolean popup_menu_created = FALSE;
static gchar *gtk_menu_key_accel = NULL;
static gint vte_prefs_tab_num = -1;
@@ -52,12 +50,11 @@ static const gchar VTE_WORDCHARS[] = "-A
#define VTE_TERMINAL(obj) (GTK_CHECK_CAST((obj), VTE_TYPE_TERMINAL, VteTerminal))
-#define VTE_TYPE_TERMINAL (vf->vte_terminal_get_type())
+#define VTE_TYPE_TERMINAL (vte_terminal_get_type())
static void vte_start(GtkWidget *widget);
static gboolean vte_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
static gboolean vte_keypress(GtkWidget *widget, GdkEventKey *event, gpointer data);
-static void vte_register_symbols(GModule *module);
static void vte_popup_menu_clicked(GtkMenuItem *menuitem, gpointer user_data);
static GtkWidget *vte_create_popup_menu(void);
@@ -128,33 +125,8 @@ void vte_init(void)
return;
}
- if (vte_info.lib_vte && strlen(vte_info.lib_vte))
- {
- module = g_module_open(vte_info.lib_vte, G_MODULE_BIND_LAZY);
- }
- else
- {
- module = g_module_open("libvte.so", G_MODULE_BIND_LAZY);
- // try to fallback to different versions of libvte.so.x
- if (module == NULL) module = g_module_open("libvte.so.4", G_MODULE_BIND_LAZY);
- else if (module == NULL) module = g_module_open("libvte.so.8", G_MODULE_BIND_LAZY);
- else if (module == NULL) module = g_module_open("libvte.so.9", G_MODULE_BIND_LAZY);
- }
-
- if (module == NULL)
- {
- vte_info.have_vte = FALSE;
- geany_debug("Could not load libvte.so, terminal support disabled");
- return;
- }
- else
- {
- vte_info.have_vte = TRUE;
- vf = g_new0(struct VteFunctions, 1);
- vte_register_symbols(module);
- }
-
- vte = vf->vte_terminal_new();
+ vte = vte_terminal_new();
+ vte_info.have_vte = TRUE;
vc->vte = vte;
scrollbar = gtk_vscrollbar_new(GTK_ADJUSTMENT(VTE_TERMINAL(vte)->adjustment));
GTK_WIDGET_UNSET_FLAGS(scrollbar, GTK_CAN_FOCUS);
@@ -169,11 +141,11 @@ void vte_init(void)
/* set the default widget size first to prevent VTE expanding too much,
* sometimes causing the hscrollbar to be too big or out of view. */
gtk_widget_set_size_request(GTK_WIDGET(vte), 10, 10);
- vf->vte_terminal_set_size(VTE_TERMINAL(vte), 30, 1);
+ vte_terminal_set_size(VTE_TERMINAL(vte), 30, 1);
- //vf->vte_terminal_set_encoding(VTE_TERMINAL(vte), "UTF-8");
- vf->vte_terminal_set_mouse_autohide(VTE_TERMINAL(vte), TRUE);
- vf->vte_terminal_set_word_chars(VTE_TERMINAL(vte), VTE_WORDCHARS);
+ //vte_terminal_set_encoding(VTE_TERMINAL(vte), "UTF-8");
+ vte_terminal_set_mouse_autohide(VTE_TERMINAL(vte), TRUE);
+ vte_terminal_set_word_chars(VTE_TERMINAL(vte), VTE_WORDCHARS);
g_signal_connect(G_OBJECT(vte), "child-exited", G_CALLBACK(vte_start), NULL);
g_signal_connect(G_OBJECT(vte), "button-press-event", G_CALLBACK(vte_button_pressed), NULL);
@@ -196,7 +168,6 @@ void vte_init(void)
void vte_close(void)
{
- g_free(vf);
/* free the vte widget before unloading vte module
* this prevents a segfault on X close window if the message window is hidden */
gtk_widget_destroy(vc->vte);
@@ -228,7 +199,7 @@ static gboolean vte_keypress(GtkWidget *
kill(pid, SIGINT);
pid = 0;
- vf->vte_terminal_reset(VTE_TERMINAL(widget), TRUE, TRUE);
+ vte_terminal_reset(VTE_TERMINAL(widget), TRUE, TRUE);
vte_start(widget);
return TRUE;
@@ -244,7 +215,7 @@ static void vte_start(GtkWidget *widget)
gchar **env;
env = vte_get_child_environment();
- pid = vf->vte_terminal_fork_command(VTE_TERMINAL(vte), vc->shell, NULL, env,
+ pid = vte_terminal_fork_command(VTE_TERMINAL(vte), vc->shell, NULL, env,
vte_info.dir, TRUE, TRUE, TRUE);
g_strfreev(env);
}
@@ -257,7 +228,7 @@ static gboolean vte_button_pressed(GtkWi
if (! popup_menu_created)
{
vc->menu = vte_create_popup_menu();
- vf->vte_terminal_im_append_menuitems(VTE_TERMINAL(vc->vte), GTK_MENU_SHELL(vc->im_submenu));
+ vte_terminal_im_append_menuitems(VTE_TERMINAL(vc->vte), GTK_MENU_SHELL(vc->im_submenu));
popup_menu_created = TRUE;
}
@@ -267,44 +238,17 @@ static gboolean vte_button_pressed(GtkWi
return FALSE;
}
-
-static void vte_register_symbols(GModule *mod)
-{
- g_module_symbol(mod, "vte_terminal_new", (void*)&vf->vte_terminal_new);
- g_module_symbol(mod, "vte_terminal_set_size", (void*)&vf->vte_terminal_set_size);
- g_module_symbol(mod, "vte_terminal_fork_command", (void*)&vf->vte_terminal_fork_command);
- g_module_symbol(mod, "vte_terminal_set_word_chars", (void*)&vf->vte_terminal_set_word_chars);
- g_module_symbol(mod, "vte_terminal_set_mouse_autohide", (void*)&vf->vte_terminal_set_mouse_autohide);
- g_module_symbol(mod, "vte_terminal_set_encoding", (void*)&vf->vte_terminal_set_encoding);
- g_module_symbol(mod, "vte_terminal_reset", (void*)&vf->vte_terminal_reset);
- g_module_symbol(mod, "vte_terminal_set_cursor_blinks", (void*)&vf->vte_terminal_set_cursor_blinks);
- g_module_symbol(mod, "vte_terminal_get_type", (void*)&vf->vte_terminal_get_type);
- g_module_symbol(mod, "vte_terminal_set_scroll_on_output", (void*)&vf->vte_terminal_set_scroll_on_output);
- g_module_symbol(mod, "vte_terminal_set_scroll_on_keystroke", (void*)&vf->vte_terminal_set_scroll_on_keystroke);
- g_module_symbol(mod, "vte_terminal_set_font_from_string", (void*)&vf->vte_terminal_set_font_from_string);
- g_module_symbol(mod, "vte_terminal_set_scrollback_lines", (void*)&vf->vte_terminal_set_scrollback_lines);
- g_module_symbol(mod, "vte_terminal_get_has_selection", (void*)&vf->vte_terminal_get_has_selection);
- g_module_symbol(mod, "vte_terminal_copy_clipboard", (void*)&vf->vte_terminal_copy_clipboard);
- g_module_symbol(mod, "vte_terminal_paste_clipboard", (void*)&vf->vte_terminal_paste_clipboard);
- g_module_symbol(mod, "vte_terminal_set_emulation", (void*)&vf->vte_terminal_set_emulation);
- g_module_symbol(mod, "vte_terminal_set_color_foreground", (void*)&vf->vte_terminal_set_color_foreground);
- g_module_symbol(mod, "vte_terminal_set_color_background", (void*)&vf->vte_terminal_set_color_background);
- g_module_symbol(mod, "vte_terminal_feed_child", (void*)&vf->vte_terminal_feed_child);
- g_module_symbol(mod, "vte_terminal_im_append_menuitems", (void*)&vf->vte_terminal_im_append_menuitems);
-}
-
-
void vte_apply_user_settings(void)
{
if (! app->msgwindow_visible) return;
//if (! GTK_WIDGET_REALIZED(vc->vte)) gtk_widget_realize(vc->vte);
- vf->vte_terminal_set_scrollback_lines(VTE_TERMINAL(vc->vte), vc->scrollback_lines);
- vf->vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(vc->vte), vc->scroll_on_key);
- vf->vte_terminal_set_scroll_on_output(VTE_TERMINAL(vc->vte), vc->scroll_on_out);
- vf->vte_terminal_set_emulation(VTE_TERMINAL(vc->vte), vc->emulation);
- vf->vte_terminal_set_font_from_string(VTE_TERMINAL(vc->vte), vc->font);
- vf->vte_terminal_set_color_foreground(VTE_TERMINAL(vc->vte), vc->colour_fore);
- vf->vte_terminal_set_color_background(VTE_TERMINAL(vc->vte), vc->colour_back);
+ vte_terminal_set_scrollback_lines(VTE_TERMINAL(vc->vte), vc->scrollback_lines);
+ vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(vc->vte), vc->scroll_on_key);
+ vte_terminal_set_scroll_on_output(VTE_TERMINAL(vc->vte), vc->scroll_on_out);
+ vte_terminal_set_emulation(VTE_TERMINAL(vc->vte), vc->emulation);
+ vte_terminal_set_font_from_string(VTE_TERMINAL(vc->vte), vc->font);
+ vte_terminal_set_color_foreground(VTE_TERMINAL(vc->vte), vc->colour_fore);
+ vte_terminal_set_color_background(VTE_TERMINAL(vc->vte), vc->colour_back);
override_menu_key();
}
@@ -316,13 +260,13 @@ static void vte_popup_menu_clicked(GtkMe
{
case 0:
{
- if (vf->vte_terminal_get_has_selection(VTE_TERMINAL(vc->vte)))
- vf->vte_terminal_copy_clipboard(VTE_TERMINAL(vc->vte));
+ if (vte_terminal_get_has_selection(VTE_TERMINAL(vc->vte)))
+ vte_terminal_copy_clipboard(VTE_TERMINAL(vc->vte));
break;
}
case 1:
{
- vf->vte_terminal_paste_clipboard(VTE_TERMINAL(vc->vte));
+ vte_terminal_paste_clipboard(VTE_TERMINAL(vc->vte));
break;
}
case 2:
@@ -385,7 +329,7 @@ static GtkWidget *vte_create_popup_menu(
void vte_send_cmd(const gchar *cmd)
{
- vf->vte_terminal_feed_child(VTE_TERMINAL(vc->vte), cmd, strlen(cmd));
+ vte_terminal_feed_child(VTE_TERMINAL(vc->vte), cmd, strlen(cmd));
}
--- geany/src/vte.h.josef 2007-01-24 07:40:35.000000000 -0500
+++ geany/src/vte.h 2007-01-24 07:33:27.000000000 -0500
@@ -31,7 +31,7 @@
* in stdlib.h, on FreeBSD in unistd.h */
#include <stdlib.h>
#include <unistd.h>
-
+#include <vte/vte.h>
typedef struct
{
@@ -86,53 +86,6 @@ gboolean vte_drag_drop(GtkWidget *widget
gpointer user_data);
*/
-/* taken from original vte.h to make my life easier ;-) */
-
-typedef struct _VteTerminalPrivate VteTerminalPrivate;
-
-typedef struct _VteTerminal VteTerminal;
-struct _VteTerminal
-{
- GtkWidget widget;
- GtkAdjustment *adjustment;
- glong char_width, char_height;
- glong char_ascent, char_descent;
- glong row_count, column_count;
- gchar *window_title;
- gchar *icon_title;
- VteTerminalPrivate *pvt;
-};
-
-
-/* store function pointers in a struct to avoid a strange segfault if they are stored directly
- * if accessed directly, gdb says the segfault arrives at old_tab_width(prefs.c), don't ask me */
-struct VteFunctions
-{
- GtkWidget* (*vte_terminal_new) (void);
- pid_t (*vte_terminal_fork_command) (VteTerminal *terminal, const char *command, char **argv,
- char **envv, const char *directory, gboolean lastlog,
- gboolean utmp, gboolean wtmp);
- void (*vte_terminal_set_size) (VteTerminal *terminal, glong columns, glong rows);
- void (*vte_terminal_set_word_chars) (VteTerminal *terminal, const char *spec);
- void (*vte_terminal_set_mouse_autohide) (VteTerminal *terminal, gboolean setting);
- void (*vte_terminal_reset) (VteTerminal *terminal, gboolean full, gboolean clear_history);
- void (*vte_terminal_set_encoding) (VteTerminal *terminal, const char *codeset);
- void (*vte_terminal_set_cursor_blinks) (VteTerminal *terminal, gboolean blink);
- GtkType (*vte_terminal_get_type) (void);
- void (*vte_terminal_set_scroll_on_output) (VteTerminal *terminal, gboolean scroll);
- void (*vte_terminal_set_scroll_on_keystroke) (VteTerminal *terminal, gboolean scroll);
- void (*vte_terminal_set_font_from_string) (VteTerminal *terminal, const char *name);
- void (*vte_terminal_set_scrollback_lines) (VteTerminal *terminal, glong lines);
- gboolean (*vte_terminal_get_has_selection) (VteTerminal *terminal);
- void (*vte_terminal_copy_clipboard) (VteTerminal *terminal);
- void (*vte_terminal_paste_clipboard) (VteTerminal *terminal);
- void (*vte_terminal_set_emulation) (VteTerminal *terminal, const gchar *emulation);
- void (*vte_terminal_set_color_foreground) (VteTerminal *terminal, const GdkColor *foreground);
- void (*vte_terminal_set_color_background) (VteTerminal *terminal, const GdkColor *background);
- void (*vte_terminal_feed_child) (VteTerminal *terminal, const char *data, glong length);
- void (*vte_terminal_im_append_menuitems) (VteTerminal *terminal, GtkMenuShell *menushell);
-};
-
#endif
#endif
--- geany/src/Makefile.am.josef 2007-01-24 07:40:55.000000000 -0500
+++ geany/src/Makefile.am 2007-01-23 17:23:03.000000000 -0500
@@ -41,7 +41,7 @@ if MINGW
WINDRES = /usr/local/cross-tools/bin/i386-mingw32msvc-windres
geany_SOURCES = $(SRCS) win32.c win32.h
-geany_LDADD = ../scintilla/libscintilla.a ../tagmanager/libtagmanager.a -lstdc++ @PACKAGE_LIBS@ \
+geany_LDADD = ../scintilla/libscintilla.a ../tagmanager/libtagmanager.a -lstdc++ @PACKAGE_LIBS@ @VTE_LIBS@ \
$(INTLLIBS) -lgdi32 -limm32 -lshell32 -lole32 -luuid -liberty -lcomdlg32 -lcomctl32 \
geany_private.res
AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe -mms-bitfields
@@ -49,7 +49,7 @@ AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe -m
geany_LDFLAGS = -mwindows
INCLUDES = -I../scintilla/include -I../tagmanager/include -DENABLE_NLS \
- -I/usr/local/cross-tools/include @PACKAGE_CFLAGS@
+ -I/usr/local/cross-tools/include @PACKAGE_CFLAGS@ @VTE_CFLAGS@
geany_windres.res:
$(WINDRES) -i ../geany_private.rc --input-format=rc -o geany_private.res -O coff;
@@ -62,11 +62,11 @@ else
AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe
#AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe -g -O0
geany_SOURCES = $(SRCS) vte.c vte.h
-geany_LDADD = ../scintilla/libscintilla.a ../tagmanager/libtagmanager.a @PACKAGE_LIBS@ -lstdc++ $(INTLLIBS)
+geany_LDADD = ../scintilla/libscintilla.a ../tagmanager/libtagmanager.a @PACKAGE_LIBS@ @VTE_LIBS@ -lstdc++ $(INTLLIBS)
INCLUDES = \
-DPACKAGE_DATA_DIR=\""$(datadir)"\" -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
- -I../scintilla/include -I../tagmanager/include @PACKAGE_CFLAGS@
+ -I../scintilla/include -I../tagmanager/include @PACKAGE_CFLAGS@ @VTE_CFLAGS@
clean-local:
--- geany/src/main.c.josef 2007-01-24 07:48:29.000000000 -0500
+++ geany/src/main.c 2007-01-24 07:45:59.000000000 -0500
@@ -77,7 +77,6 @@ static gboolean show_version = FALSE;
static gchar *alternate_config = NULL;
#ifdef HAVE_VTE
static gboolean no_vte = FALSE;
-static gchar *lib_vte = NULL;
#endif
#ifdef HAVE_SOCKET
static gboolean ignore_socket = FALSE;
@@ -98,7 +97,6 @@ static GOptionEntry entries[] =
{ "no-session", 's', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &cl_options.load_session, N_("don't load the previous session's files"), NULL },
#ifdef HAVE_VTE
{ "no-terminal", 't', 0, G_OPTION_ARG_NONE, &no_vte, N_("don't load terminal support"), NULL },
- { "vte-lib", 0, 0, G_OPTION_ARG_FILENAME, &lib_vte, N_("filename of libvte.so"), NULL },
#endif
{ "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, N_("show version and exit"), NULL },
{ NULL, 0, 0, 0, NULL, NULL, NULL }
@@ -434,9 +432,6 @@ static void parse_command_line_options(g
#ifdef HAVE_SOCKET
socket_info.ignore_socket = ignore_socket;
#endif
-#ifdef HAVE_VTE
- vte_info.lib_vte = lib_vte;
-#endif
app->ignore_global_tags = ignore_global_tags;
}
@@ -737,7 +732,6 @@ void main_quit()
scintilla_release_resources();
#ifdef HAVE_VTE
if (vte_info.have_vte) vte_close();
- g_free(vte_info.lib_vte);
g_free(vte_info.dir);
#endif
gtk_widget_destroy(app->window);