diff options
| -rw-r--r-- | .gitignore | 12 | ||||
| -rw-r--r-- | CMakeLists.txt | 114 | ||||
| -rw-r--r-- | LICENSE | 2 | ||||
| -rw-r--r-- | README.adoc | 29 | ||||
| -rw-r--r-- | config.h.in | 1 | ||||
| -rw-r--r-- | docs/tdv.1.adoc (renamed from docs/sdtui.1.adoc) | 24 | ||||
| -rw-r--r-- | po/tdv.pot (renamed from po/sdtui.pot) | 0 | ||||
| -rw-r--r-- | src/query-tool.c | 2 | ||||
| -rw-r--r-- | src/tdv-gui.c (renamed from src/sdgui.c) | 40 | ||||
| -rw-r--r-- | src/tdv-tui.c (renamed from src/sdtui.c) | 51 | ||||
| -rw-r--r-- | src/tdv.c | 98 | ||||
| -rw-r--r-- | tdv.desktop (renamed from sdgui.desktop) | 8 | ||||
| -rw-r--r-- | tdv.png (renamed from sdtui.png) | bin | 40457 -> 40457 bytes | |||
| -rw-r--r-- | tdv.svg (renamed from sdgui.svg) | 0 | ||||
| -rw-r--r-- | tdv.xml (renamed from sdgui.xml) | 0 | 
15 files changed, 205 insertions, 176 deletions
| @@ -3,9 +3,9 @@  # Qt Creator files  /CMakeLists.txt.user* -/sdtui.cflags -/sdtui.cxxflags -/sdtui.config -/sdtui.files -/sdtui.creator* -/sdtui.includes +/tdv.cflags +/tdv.cxxflags +/tdv.config +/tdv.files +/tdv.creator* +/tdv.includes diff --git a/CMakeLists.txt b/CMakeLists.txt index 86c49ff..9d4c494 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,15 @@  cmake_minimum_required (VERSION 3.0) -project (sdtui VERSION 0.1.0 LANGUAGES C) +project (tdv VERSION 0.1.0 LANGUAGES C) -# Moar warnings +# Adjust warnings  if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)  	set (ignores "-Wno-missing-field-initializers -Wno-cast-function-type")  	set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ${ignores}")  	set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra")  endif () +add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38) +  # For custom modules  set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) @@ -108,6 +110,7 @@ if (WITH_GUI)  		message (FATAL_ERROR "GTK+ not found")  	endif () +	include_directories (${gtk_INCLUDE_DIRS})  	link_directories (${gtk_LIBRARY_DIRS})  endif () @@ -198,25 +201,7 @@ configure_file (${PROJECT_SOURCE_DIR}/config.h.in  	${PROJECT_BINARY_DIR}/config.h)  include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}) -# Primary target source files -set (project_sources -	src/${PROJECT_NAME}.c) -set (project_headers -	${project_common_headers}) - -# Build the main executable and link it -add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38) -if (NOT WIN32) -	add_executable (${PROJECT_NAME} -		${project_sources} ${project_headers} ${project_common_sources}) -	target_link_libraries (${PROJECT_NAME} ${project_common_libraries} -		${Ncursesw_LIBRARIES} termo-static) -	if (WITH_X11) -		target_link_libraries (${PROJECT_NAME} ${xcb_LIBRARIES}) -	endif () -endif (NOT WIN32) - -# The same for the alternative GTK+ UI +# Icon generation utilities  if (NOT ${CMAKE_VERSION} VERSION_LESS 3.18.0)  	set (find_program_REQUIRE REQUIRED)  endif () @@ -224,7 +209,7 @@ endif ()  function (icon_to_png svg size output_dir output)  	set (_dimensions ${size}x${size})  	set (_png_path ${output_dir}/hicolor/${_dimensions}/apps) -	set (_png ${_png_path}/sdgui.png) +	set (_png ${_png_path}/${PROJECT_NAME}.png)  	set (${output} ${_png} PARENT_SCOPE)  	find_program (rsvg_convert_EXECUTABLE rsvg-convert ${find_program_REQUIRE}) @@ -244,8 +229,17 @@ function (icon_for_win32 pngs ico)  		COMMENT "Generating Windows program icon" VERBATIM)  endfunction () +# Build the main executable and link it +set (project_libraries +	${project_common_libraries}) +set (project_sources +	${project_common_sources} +	src/${PROJECT_NAME}.c) +set (project_headers +	${project_common_headers}) +  if (WITH_GUI) -	set (icon_svg ${PROJECT_SOURCE_DIR}/sdgui.svg) +	set (icon_svg ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.svg)  	set (icon_base ${PROJECT_BINARY_DIR}/icons)  	# The largest size is mainly for an appropriately sized Windows icon @@ -254,31 +248,42 @@ if (WITH_GUI)  		icon_to_png (${icon_svg} ${icon_size} ${icon_base} icon_png)  		list (APPEND icon_png_list ${icon_png})  	endforeach () -	add_custom_target (sdgui-icons ALL DEPENDS ${icon_png_list}) +	add_custom_target (icons ALL DEPENDS ${icon_png_list}) +endif () -	set (sdgui_sources -		src/sdgui.c -		src/stardict-view.c -		${project_common_sources}) +if (WIN32) +	set (icon_ico ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.ico) +	icon_for_win32 ("${icon_png_list}" ${icon_ico}) -	if (WIN32) -		set (icon_ico ${PROJECT_BINARY_DIR}/sdgui.ico) -		icon_for_win32 ("${icon_png_list}" ${icon_ico}) +	set (resource_file ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc) +	list (APPEND project_sources ${resource_file}) +	add_custom_command (OUTPUT ${resource_file} +		COMMAND ${CMAKE_COMMAND} -E echo "1 ICON \"${PROJECT_NAME}.ico\"" +			> ${resource_file} VERBATIM) +	set_property (SOURCE ${resource_file} +		APPEND PROPERTY OBJECT_DEPENDS ${icon_ico}) +else () +	list (APPEND project_libraries ${Ncursesw_LIBRARIES} termo-static) +	list (APPEND project_sources +		src/${PROJECT_NAME}-tui.c) +endif () -		set (resource_file ${PROJECT_BINARY_DIR}/sdgui.rc) -		list (APPEND sdgui_sources ${resource_file}) -		add_custom_command (OUTPUT ${resource_file} -			COMMAND ${CMAKE_COMMAND} -E echo "1 ICON \"sdgui.ico\"" -				> ${resource_file} VERBATIM) -		set_property (SOURCE ${resource_file} -			APPEND PROPERTY OBJECT_DEPENDS ${icon_ico}) -	endif () +if (WITH_X11) +	list (APPEND project_libraries ${xcb_LIBRARIES}) +endif () +if (WITH_GUI) +	list (APPEND project_libraries ${gtk_LIBRARIES}) +	list (APPEND project_sources +		src/${PROJECT_NAME}-gui.c +		src/stardict-view.c) -	add_executable (sdgui WIN32 ${sdgui_sources}) -	target_include_directories (sdgui PUBLIC ${gtk_INCLUDE_DIRS}) -	target_link_libraries (sdgui ${project_common_libraries} ${gtk_LIBRARIES}) +	add_executable (${PROJECT_NAME} WIN32 ${project_sources} ${project_headers}) +else () +	add_executable (${PROJECT_NAME} ${project_sources} ${project_headers})  endif () +target_link_libraries (${PROJECT_NAME} ${project_libraries}) +  # Tools  set (tools tabfile add-pronunciation query-tool transform)  foreach (tool ${tools}) @@ -311,14 +316,13 @@ if (NOT WIN32)  	install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})  	if (WITH_GUI) -		install (TARGETS sdgui DESTINATION ${CMAKE_INSTALL_BINDIR}) -		install (FILES sdgui.svg +		install (FILES ${PROJECT_NAME}.svg  			DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)  		install (DIRECTORY ${PROJECT_BINARY_DIR}/icons  			DESTINATION ${CMAKE_INSTALL_DATADIR}) -		install (FILES sdgui.desktop +		install (FILES ${PROJECT_NAME}.desktop  			DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) -		install (FILES sdgui.xml +		install (FILES ${PROJECT_NAME}.xml  			DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)  	endif () @@ -329,7 +333,7 @@ if (NOT WIN32)  	endforeach ()  elseif (WITH_GUI)  	# This rather crude filter has been mostly copied over from logdiag -	install (TARGETS sdgui DESTINATION .) +	install (TARGETS ${PROJECT_NAME} DESTINATION .)  	install (DIRECTORY  		${win32_deps_prefix}/bin/  		DESTINATION . @@ -377,7 +381,7 @@ if (BUILD_TESTING)  	find_program (xmlwf_EXECUTABLE xmlwf)  	find_program (xmllint_EXECUTABLE xmllint) -	foreach (xml sdgui.xml) +	foreach (xml ${PROJECT_NAME}.xml)  		if (xmlwf_EXECUTABLE)  			add_test (test-xmlwf-${xml} ${xmlwf_EXECUTABLE}  				${PROJECT_SOURCE_DIR}/${xml}) @@ -397,7 +401,7 @@ if (BUILD_TESTING)  endif ()  # CPack -set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "StarDict TUI and GUI") +set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Translation dictionary viewer")  set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")  set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")  set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") @@ -413,17 +417,17 @@ set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")  set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)  set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}") -set (CPACK_NSIS_INSTALLED_ICON_NAME sdgui.exe) -set (CPACK_PACKAGE_EXECUTABLES sdgui sdgui) +set (CPACK_NSIS_INSTALLED_ICON_NAME ${PROJECT_NAME}.exe) +set (CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} ${PROJECT_NAME})  set (CPACK_NSIS_EXECUTABLES_DIRECTORY .)  set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[ -	WriteRegStr HKCR '.ifo' '' 'sdgui.Dictionary' -	WriteRegStr HKCR 'sdgui.Dictionary' '' 'StarDict Dictionary' -	WriteRegStr HKCR 'sdgui.Dictionary\\shell\\open\\command' '' '\"$INSTDIR\\sdgui.exe\" \"%1\"' +	WriteRegStr HKCR '.ifo' '' 'tdv.Dictionary' +	WriteRegStr HKCR 'tdv.Dictionary' '' 'StarDict Dictionary' +	WriteRegStr HKCR 'tdv.Dictionary\\shell\\open\\command' '' '\"$INSTDIR\\tdv.exe\" \"%1\"'  	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'  ]])  set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS [[ -	DeleteRegKey HKCR 'sdgui.Dictionary' +	DeleteRegKey HKCR 'tdv.Dictionary'  	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'  ]]) @@ -1,4 +1,4 @@ -Copyright (c) 2013 - 2022, Přemysl Eric Janouch <p@janouch.name> +Copyright (c) 2013 - 2023, Přemysl Eric Janouch <p@janouch.name>  Permission to use, copy, modify, and/or distribute this software for any  purpose with or without fee is hereby granted. diff --git a/README.adoc b/README.adoc index 9667784..0d9ca4e 100644 --- a/README.adoc +++ b/README.adoc @@ -1,20 +1,19 @@ -StarDict Terminal and Graphical UI -================================== +Translation dictionary viewer +============================= -'sdtui' aims to provide an easy way of viewing translation as well as other -kinds of dictionaries in your terminal, and is inspired by the dictionary -component of PC Translator.  I wasn't successful in finding any free software -of this kind, GUI or not, and thus decided to write my own. +'tdv' aims to provide an easy way of viewing translation as well as other kinds +of StarDict dictionaries, and is inspired by the dictionary component +of PC Translator.  I was unsuccessful in finding any free software of this kind, +and thus decided to write my own.  The project is covered by a permissive license, unlike vast majority of other  similar projects, and can serve as a base for implementing other dictionary  software. -image::sdtui.png[align="center"] +image::tdv.png[align="center"] -As a recent addition, there is now an alternative GTK+ 3 based frontend as well, -called 'sdgui'.  It shares its dictionary list with 'sdtui', but styling will -follow your theme, and may be customized from 'gtk.css'. +As a recent addition, the program also offers a GTK+ 3 based user interface, +whose styling will follow your theme, and may be customized from 'gtk.css'.  Packages  -------- @@ -23,7 +22,7 @@ a package with the latest development version from Archlinux's AUR.  Documentation  ------------- -See the link:docs/sdtui.1.adoc[man page] for information about usage. +See the link:docs/tdv.1.adoc[man page] for information about usage.  The rest of this README will concern itself with externalities.  Building and Running @@ -51,16 +50,16 @@ To install the application, you can do either the usual:  Or you can try telling CMake to make a package for you.  For Debian it is:   $ cpack -G DEB - # dpkg -i sdtui-*.deb + # dpkg -i tdv-*.deb  Having the program installed, simply run it with a StarDict '.ifo' file as  an argument.  It is, however, preferable to -link:docs/sdtui.1.adoc#_configuration[configure it] to load your dictionaries +link:docs/tdv.1.adoc#_configuration[configure it] to load your dictionaries  automatically.  Windows  ~~~~~~~ -With the help of Mingw-w64 and WINE, 'sdgui' will successfully cross-compile +With the help of Mingw-w64 and WINE, 'tdv' will successfully cross-compile  for Windows.  It isn't particularly usable on that system, if only because  selection watching is a very X11/Wayland-specific feature.  Beware that build  dependencies take up almost a gigabyte of disk space. @@ -91,7 +90,7 @@ https://mega.co.nz/#!axtD0QRK!sbtBgizksyfkPqKvKEgr8GQ11rsWhtqyRgUUV0B7pwg[CZ <--  Further Development  ------------------- -While I've been successfully using 'sdtui' for many years now, some issues +While I've been successfully using 'tdv' for many years now, some issues  should be addressed before including the software in regular Linux and/or  BSD distributions: diff --git a/config.h.in b/config.h.in index 4fef753..eae452a 100644 --- a/config.h.in +++ b/config.h.in @@ -8,6 +8,7 @@  #define GETTEXT_DIRNAME "${CMAKE_INSTALL_PREFIX}/share/locale"  #cmakedefine WITH_X11 +#cmakedefine WITH_GUI  #cmakedefine HAVE_RESIZETERM  #endif  // ! CONFIG_H diff --git a/docs/sdtui.1.adoc b/docs/tdv.1.adoc index 71bd904..f7961e2 100644 --- a/docs/sdtui.1.adoc +++ b/docs/tdv.1.adoc @@ -1,21 +1,21 @@ -sdtui(1) -======== +tdv(1) +======  :doctype: manpage -:manmanual: sdtui Manual -:mansource: sdtui {release-version} +:manmanual: tdv Manual +:mansource: tdv {release-version}  Name  ---- -sdtui - StarDict terminal UI +tdv - Translation dictionary viewer  Synopsis  -------- -*sdtui* [_OPTION_]... [_DICTIONARY_.ifo]... +*tdv* [_OPTION_]... [_DICTIONARY_.ifo]...  Description  ----------- -*sdtui* is a StarDict dictionary viewer, custom-tailored for translation -dictionaries, with a simple curses-based terminal UI. +*tdv* is a StarDict dictionary viewer, custom-tailored for translation +dictionaries, with a simple curses-based terminal UI, and a GTK+ graphical UI.  Without any command line arguments, the program expects to find a list of  dictionaries to load on start-up in its configuration file.  The _.ifo_ files @@ -32,7 +32,7 @@ Options  Configuration  ------------- -You can start your _sdtui.conf_ file with the following snippet: +You can start your _tdv.conf_ file with the following snippet:   [Settings]   center-search = true     # Ensure visibility of preceding entries? @@ -75,16 +75,16 @@ Extensions  ----------  Because the StarDict file format is a bit of a clusterfuck with regard to  collation of dictionary entries, this software introduces an additional, -optional "collation" field into the _.ifo_ file.  When *sdtui* discovers this +optional "collation" field into the _.ifo_ file.  When *tdv* discovers this  field while reading a dictionary, it automatically reorders the index according  to that locale (e.g., "cs_CZ").  This operation may take a little while,  in the order of seconds.  Files  ----- -*sdtui* follows the XDG Base Directory Specification. +*tdv* follows the XDG Base Directory Specification. -_~/.config/sdtui/sdtui.conf_:: +_~/.config/tdv/tdv.conf_::  	The configuration file.  Reporting bugs diff --git a/po/sdtui.pot b/po/tdv.pot index dd347fa..dd347fa 100644 --- a/po/sdtui.pot +++ b/po/tdv.pot diff --git a/src/query-tool.c b/src/query-tool.c index 825bada..6cfdc66 100644 --- a/src/query-tool.c +++ b/src/query-tool.c @@ -6,7 +6,7 @@   * finalised with an empty line.  Newlines are escaped with `\n',   * backslashes with `\\'.   * - * So far only the `m', `g`, and `x` fields are supported, as in sdtui. + * So far only the `m', `g`, and `x` fields are supported, as in tdv.   *   * Copyright (c) 2013 - 2021, Přemysl Eric Janouch <p@janouch.name>   * diff --git a/src/sdgui.c b/src/tdv-gui.c index 993d1f5..fcb254f 100644 --- a/src/sdgui.c +++ b/src/tdv-gui.c @@ -19,7 +19,6 @@  #include <gtk/gtk.h>  #include <glib/gi18n.h> -#include <locale.h>  #include <stdlib.h>  #include "config.h" @@ -27,9 +26,6 @@  #include "utils.h"  #include "stardict-view.h" -#undef PROJECT_NAME -#define PROJECT_NAME "sdgui" -  static struct  {  	GtkWidget    *window;            ///< Top-level window @@ -452,42 +448,18 @@ die_with_dialog (const gchar *message)  }  int -main (int argc, char *argv[]) +gui_main (char *argv[])  { -	if (!setlocale (LC_ALL, "")) -		g_printerr ("%s: %s\n", _("Warning"), _("failed to set the locale")); - -	bindtextdomain (GETTEXT_PACKAGE, GETTEXT_DIRNAME); -	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -	textdomain (GETTEXT_PACKAGE); - -	gchar **filenames = NULL; -	GOptionEntry option_entries[] = -	{ -		{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, -			NULL, N_("[FILE]...")}, -		{}, -	}; - -	GError *error = NULL; -	gtk_init_with_args (&argc, &argv, N_("- StarDict GTK+ UI"), -		option_entries, GETTEXT_PACKAGE, &error); -	if (error) -	{ -		g_warning ("%s", error->message); -		g_error_free (error); -		return 1; -	} +	// Just like with GtkApplication, argv has been parsed by the option group. +	gtk_init (NULL, NULL);  	gtk_window_set_default_icon_name (PROJECT_NAME); +	GError *error = NULL;  	GPtrArray *new_dictionaries =  		g_ptr_array_new_with_free_func ((GDestroyNotify) dictionary_destroy); -	if (filenames) -	{ -		load_from_filenames (new_dictionaries, filenames); -		g_strfreev (filenames); -	} +	if (argv[0]) +		load_from_filenames (new_dictionaries, argv);  	else if (!load_from_config (new_dictionaries, &error) && error)  		die_with_dialog (error->message); diff --git a/src/sdtui.c b/src/tdv-tui.c index c078f1a..2863884 100644 --- a/src/sdtui.c +++ b/src/tdv-tui.c @@ -18,16 +18,15 @@  #include <stdio.h>  #include <stdlib.h> -#include <locale.h>  #include <stdarg.h>  #include <limits.h>  #include <string.h>  #include <glib.h>  #include <glib-unix.h> +#include <glib/gi18n.h>  #include <gio/gio.h>  #include <pango/pango.h> -#include <glib/gi18n.h>  #include <unistd.h>  #include <poll.h> @@ -2438,53 +2437,10 @@ log_handler (const gchar *domain, GLogLevelFlags level,  }  int -main (int argc, char *argv[]) +tui_main (char *argv[])  { -G_GNUC_BEGIN_IGNORE_DEPRECATIONS -	if (glib_check_version (2, 36, 0)) -		g_type_init (); -G_GNUC_END_IGNORE_DEPRECATIONS - -	gboolean show_version = FALSE; -	GOptionEntry entries[] = -	{ -		{ "version", 0, G_OPTION_FLAG_IN_MAIN, -		  G_OPTION_ARG_NONE, &show_version, -		  N_("Output version information and exit"), NULL }, -		{ NULL } -	}; - -	if (!setlocale (LC_ALL, "")) -		g_printerr ("%s: %s\n", _("Warning"), _("failed to set the locale")); - -	bindtextdomain (GETTEXT_PACKAGE, GETTEXT_DIRNAME); -	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -	textdomain (GETTEXT_PACKAGE); - -	GError *error = NULL; -	GOptionContext *ctx = g_option_context_new -		(N_("[dictionary.ifo...] - StarDict terminal UI")); -	GOptionGroup *group = g_option_group_new ("", "", "", NULL, NULL); -	g_option_group_add_entries (group, entries); -	g_option_group_set_translation_domain (group, GETTEXT_PACKAGE); -	g_option_context_add_group (ctx, group); -	g_option_context_set_translation_domain (ctx, GETTEXT_PACKAGE); -	if (!g_option_context_parse (ctx, &argc, &argv, &error)) -	{ -		g_printerr ("%s: %s: %s\n", _("Error"), _("option parsing failed"), -			error->message); -		exit (EXIT_FAILURE); -	} -	g_option_context_free (ctx); - -	if (show_version) -	{ -		g_print (PROJECT_NAME " " PROJECT_VERSION "\n"); -		exit (EXIT_SUCCESS); -	} -  	Application app; -	app_init (&app, argv + 1); +	app_init (&app, argv);  	app_init_terminal (&app);  	app_redraw (&app); @@ -2528,4 +2484,3 @@ G_GNUC_END_IGNORE_DEPRECATIONS  	return 0;  } - diff --git a/src/tdv.c b/src/tdv.c new file mode 100644 index 0000000..44484fa --- /dev/null +++ b/src/tdv.c @@ -0,0 +1,98 @@ +/* + * Translation dictionary viewer + * + * Copyright (c) 2023, Přemysl Eric Janouch <p@janouch.name> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "config.h" + +#include <glib.h> +#include <glib/gi18n.h> +#ifdef WITH_GUI +#include <gtk/gtk.h> +#endif + +#include <locale.h> +#ifndef G_OS_WIN32 +#include <unistd.h> +#endif + +int tui_main (char *[]); +int gui_main (char *[]); + +int +main (int argc, char *argv[]) +{ +	if (!setlocale (LC_ALL, "")) +		g_printerr ("%s: %s\n", _("Warning"), _("failed to set the locale")); + +	bindtextdomain (GETTEXT_PACKAGE, GETTEXT_DIRNAME); +	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +	textdomain (GETTEXT_PACKAGE); + +	gboolean show_version = FALSE; +#ifdef WITH_GUI +# ifndef G_OS_WIN32 +	gboolean gui = FALSE; +# endif +#endif +	GOptionEntry entries[] = +	{ +		{ "version", 0, G_OPTION_FLAG_IN_MAIN, +		  G_OPTION_ARG_NONE, &show_version, +		  N_("Output version information and exit"), NULL }, +#ifdef WITH_GUI +# ifndef G_OS_WIN32 +		{ "gui", 0, G_OPTION_FLAG_IN_MAIN, +		  G_OPTION_ARG_NONE, &gui, +		  N_("Launch the GUI even when run from a terminal"), NULL }, +# endif +#endif +		{ }, +	}; + +	GOptionContext *ctx = g_option_context_new +		(N_("[dictionary.ifo...] - Translation dictionary viewer")); +	g_option_context_add_main_entries (ctx, entries, GETTEXT_PACKAGE); +#ifdef WITH_GUI +	g_option_context_add_group (ctx, gtk_get_option_group (FALSE)); +#endif +	g_option_context_set_translation_domain (ctx, GETTEXT_PACKAGE); + +	GError *error = NULL; +	if (!g_option_context_parse (ctx, &argc, &argv, &error)) +	{ +		g_printerr ("%s: %s: %s\n", _("Error"), _("option parsing failed"), +			error->message); +		exit (EXIT_FAILURE); +	} +	g_option_context_free (ctx); + +	if (show_version) +	{ +		g_print (PROJECT_NAME " " PROJECT_VERSION "\n"); +		exit (EXIT_SUCCESS); +	} + +#ifdef WITH_GUI +# ifndef G_OS_WIN32 +	if (gui || !isatty (STDIN_FILENO)) +# endif +		return gui_main (argv + 1); +#endif +#ifndef G_OS_WIN32 +	return tui_main (argv + 1); +#endif +} diff --git a/sdgui.desktop b/tdv.desktop index da5fcc6..1629f45 100644 --- a/sdgui.desktop +++ b/tdv.desktop @@ -1,9 +1,9 @@  [Desktop Entry]  Type=Application -Name=sdgui -GenericName=StarDict GUI -Icon=sdgui -Exec=sdgui %F +Name=tdv +GenericName=Translation dictionary viewer +Icon=tdv +Exec=tdv %F  StartupNotify=true  MimeType=application/x-stardict-ifo;  Categories=Office;Dictionary;GTK;Binary files differ | 
