Merge TUI and GUI binaries, using a new name
The appropriate interface will be chosen automatically.
This commit is contained in:
		
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,9 +3,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Qt Creator files
 | 
					# Qt Creator files
 | 
				
			||||||
/CMakeLists.txt.user*
 | 
					/CMakeLists.txt.user*
 | 
				
			||||||
/sdtui.cflags
 | 
					/tdv.cflags
 | 
				
			||||||
/sdtui.cxxflags
 | 
					/tdv.cxxflags
 | 
				
			||||||
/sdtui.config
 | 
					/tdv.config
 | 
				
			||||||
/sdtui.files
 | 
					/tdv.files
 | 
				
			||||||
/sdtui.creator*
 | 
					/tdv.creator*
 | 
				
			||||||
/sdtui.includes
 | 
					/tdv.includes
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										122
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								CMakeLists.txt
									
									
									
									
									
								
							@@ -1,13 +1,15 @@
 | 
				
			|||||||
cmake_minimum_required (VERSION 3.0)
 | 
					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)
 | 
					if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
 | 
				
			||||||
	set (ignores "-Wno-missing-field-initializers -Wno-cast-function-type")
 | 
						set (ignores "-Wno-missing-field-initializers -Wno-cast-function-type")
 | 
				
			||||||
	set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ${ignores}")
 | 
						set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 ${ignores}")
 | 
				
			||||||
	set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra")
 | 
						set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wextra")
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# For custom modules
 | 
					# For custom modules
 | 
				
			||||||
set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
 | 
					set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -108,6 +110,7 @@ if (WITH_GUI)
 | 
				
			|||||||
		message (FATAL_ERROR "GTK+ not found")
 | 
							message (FATAL_ERROR "GTK+ not found")
 | 
				
			||||||
	endif ()
 | 
						endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						include_directories (${gtk_INCLUDE_DIRS})
 | 
				
			||||||
	link_directories (${gtk_LIBRARY_DIRS})
 | 
						link_directories (${gtk_LIBRARY_DIRS})
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -198,25 +201,7 @@ configure_file (${PROJECT_SOURCE_DIR}/config.h.in
 | 
				
			|||||||
	${PROJECT_BINARY_DIR}/config.h)
 | 
						${PROJECT_BINARY_DIR}/config.h)
 | 
				
			||||||
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
 | 
					include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Primary target source files
 | 
					# Icon generation utilities
 | 
				
			||||||
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
 | 
					 | 
				
			||||||
if (NOT ${CMAKE_VERSION} VERSION_LESS 3.18.0)
 | 
					if (NOT ${CMAKE_VERSION} VERSION_LESS 3.18.0)
 | 
				
			||||||
	set (find_program_REQUIRE REQUIRED)
 | 
						set (find_program_REQUIRE REQUIRED)
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
@@ -224,7 +209,7 @@ endif ()
 | 
				
			|||||||
function (icon_to_png svg size output_dir output)
 | 
					function (icon_to_png svg size output_dir output)
 | 
				
			||||||
	set (_dimensions ${size}x${size})
 | 
						set (_dimensions ${size}x${size})
 | 
				
			||||||
	set (_png_path ${output_dir}/hicolor/${_dimensions}/apps)
 | 
						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)
 | 
						set (${output} ${_png} PARENT_SCOPE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	find_program (rsvg_convert_EXECUTABLE rsvg-convert ${find_program_REQUIRE})
 | 
						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)
 | 
							COMMENT "Generating Windows program icon" VERBATIM)
 | 
				
			||||||
endfunction ()
 | 
					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)
 | 
					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)
 | 
						set (icon_base ${PROJECT_BINARY_DIR}/icons)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# The largest size is mainly for an appropriately sized Windows icon
 | 
						# 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)
 | 
							icon_to_png (${icon_svg} ${icon_size} ${icon_base} icon_png)
 | 
				
			||||||
		list (APPEND icon_png_list ${icon_png})
 | 
							list (APPEND icon_png_list ${icon_png})
 | 
				
			||||||
	endforeach ()
 | 
						endforeach ()
 | 
				
			||||||
	add_custom_target (sdgui-icons ALL DEPENDS ${icon_png_list})
 | 
						add_custom_target (icons ALL DEPENDS ${icon_png_list})
 | 
				
			||||||
 | 
					 | 
				
			||||||
	set (sdgui_sources
 | 
					 | 
				
			||||||
		src/sdgui.c
 | 
					 | 
				
			||||||
		src/stardict-view.c
 | 
					 | 
				
			||||||
		${project_common_sources})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (WIN32)
 | 
					 | 
				
			||||||
		set (icon_ico ${PROJECT_BINARY_DIR}/sdgui.ico)
 | 
					 | 
				
			||||||
		icon_for_win32 ("${icon_png_list}" ${icon_ico})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		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 ()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	add_executable (sdgui WIN32 ${sdgui_sources})
 | 
					 | 
				
			||||||
	target_include_directories (sdgui PUBLIC ${gtk_INCLUDE_DIRS})
 | 
					 | 
				
			||||||
	target_link_libraries (sdgui ${project_common_libraries} ${gtk_LIBRARIES})
 | 
					 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (WIN32)
 | 
				
			||||||
 | 
						set (icon_ico ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.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 ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 (${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
 | 
					# Tools
 | 
				
			||||||
set (tools tabfile add-pronunciation query-tool transform)
 | 
					set (tools tabfile add-pronunciation query-tool transform)
 | 
				
			||||||
foreach (tool ${tools})
 | 
					foreach (tool ${tools})
 | 
				
			||||||
@@ -311,14 +316,13 @@ if (NOT WIN32)
 | 
				
			|||||||
	install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
 | 
						install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WITH_GUI)
 | 
						if (WITH_GUI)
 | 
				
			||||||
		install (TARGETS sdgui DESTINATION ${CMAKE_INSTALL_BINDIR})
 | 
							install (FILES ${PROJECT_NAME}.svg
 | 
				
			||||||
		install (FILES sdgui.svg
 | 
					 | 
				
			||||||
			DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
 | 
								DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
 | 
				
			||||||
		install (DIRECTORY ${PROJECT_BINARY_DIR}/icons
 | 
							install (DIRECTORY ${PROJECT_BINARY_DIR}/icons
 | 
				
			||||||
			DESTINATION ${CMAKE_INSTALL_DATADIR})
 | 
								DESTINATION ${CMAKE_INSTALL_DATADIR})
 | 
				
			||||||
		install (FILES sdgui.desktop
 | 
							install (FILES ${PROJECT_NAME}.desktop
 | 
				
			||||||
			DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
 | 
								DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
 | 
				
			||||||
		install (FILES sdgui.xml
 | 
							install (FILES ${PROJECT_NAME}.xml
 | 
				
			||||||
			DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
 | 
								DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
 | 
				
			||||||
	endif ()
 | 
						endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -329,7 +333,7 @@ if (NOT WIN32)
 | 
				
			|||||||
	endforeach ()
 | 
						endforeach ()
 | 
				
			||||||
elseif (WITH_GUI)
 | 
					elseif (WITH_GUI)
 | 
				
			||||||
	# This rather crude filter has been mostly copied over from logdiag
 | 
						# This rather crude filter has been mostly copied over from logdiag
 | 
				
			||||||
	install (TARGETS sdgui DESTINATION .)
 | 
						install (TARGETS ${PROJECT_NAME} DESTINATION .)
 | 
				
			||||||
	install (DIRECTORY
 | 
						install (DIRECTORY
 | 
				
			||||||
		${win32_deps_prefix}/bin/
 | 
							${win32_deps_prefix}/bin/
 | 
				
			||||||
		DESTINATION .
 | 
							DESTINATION .
 | 
				
			||||||
@@ -377,7 +381,7 @@ if (BUILD_TESTING)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	find_program (xmlwf_EXECUTABLE xmlwf)
 | 
						find_program (xmlwf_EXECUTABLE xmlwf)
 | 
				
			||||||
	find_program (xmllint_EXECUTABLE xmllint)
 | 
						find_program (xmllint_EXECUTABLE xmllint)
 | 
				
			||||||
	foreach (xml sdgui.xml)
 | 
						foreach (xml ${PROJECT_NAME}.xml)
 | 
				
			||||||
		if (xmlwf_EXECUTABLE)
 | 
							if (xmlwf_EXECUTABLE)
 | 
				
			||||||
			add_test (test-xmlwf-${xml} ${xmlwf_EXECUTABLE}
 | 
								add_test (test-xmlwf-${xml} ${xmlwf_EXECUTABLE}
 | 
				
			||||||
				${PROJECT_SOURCE_DIR}/${xml})
 | 
									${PROJECT_SOURCE_DIR}/${xml})
 | 
				
			||||||
@@ -397,7 +401,7 @@ if (BUILD_TESTING)
 | 
				
			|||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# CPack
 | 
					# 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_VENDOR "Premysl Eric Janouch")
 | 
				
			||||||
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
 | 
					set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
 | 
				
			||||||
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
 | 
					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_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
 | 
				
			||||||
set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
 | 
					set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set (CPACK_NSIS_INSTALLED_ICON_NAME sdgui.exe)
 | 
					set (CPACK_NSIS_INSTALLED_ICON_NAME ${PROJECT_NAME}.exe)
 | 
				
			||||||
set (CPACK_PACKAGE_EXECUTABLES sdgui sdgui)
 | 
					set (CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} ${PROJECT_NAME})
 | 
				
			||||||
set (CPACK_NSIS_EXECUTABLES_DIRECTORY .)
 | 
					set (CPACK_NSIS_EXECUTABLES_DIRECTORY .)
 | 
				
			||||||
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[
 | 
					set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS [[
 | 
				
			||||||
	WriteRegStr HKCR '.ifo' '' 'sdgui.Dictionary'
 | 
						WriteRegStr HKCR '.ifo' '' 'tdv.Dictionary'
 | 
				
			||||||
	WriteRegStr HKCR 'sdgui.Dictionary' '' 'StarDict Dictionary'
 | 
						WriteRegStr HKCR 'tdv.Dictionary' '' 'StarDict Dictionary'
 | 
				
			||||||
	WriteRegStr HKCR 'sdgui.Dictionary\\shell\\open\\command' '' '\"$INSTDIR\\sdgui.exe\" \"%1\"'
 | 
						WriteRegStr HKCR 'tdv.Dictionary\\shell\\open\\command' '' '\"$INSTDIR\\tdv.exe\" \"%1\"'
 | 
				
			||||||
	System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
 | 
						System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
 | 
				
			||||||
]])
 | 
					]])
 | 
				
			||||||
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS [[
 | 
					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)'
 | 
						System::Call 'shell32::SHChangeNotify(i,i,i,i) (0x08000000, 0x1000, 0, 0)'
 | 
				
			||||||
]])
 | 
					]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -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
 | 
					Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
purpose with or without fee is hereby granted.
 | 
					purpose with or without fee is hereby granted.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								README.adoc
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								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
 | 
					'tdv' aims to provide an easy way of viewing translation as well as other kinds
 | 
				
			||||||
kinds of dictionaries in your terminal, and is inspired by the dictionary
 | 
					of StarDict dictionaries, and is inspired by the dictionary component
 | 
				
			||||||
component of PC Translator.  I wasn't successful in finding any free software
 | 
					of PC Translator.  I was unsuccessful in finding any free software of this kind,
 | 
				
			||||||
of this kind, GUI or not, and thus decided to write my own.
 | 
					and thus decided to write my own.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The project is covered by a permissive license, unlike vast majority of other
 | 
					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
 | 
					similar projects, and can serve as a base for implementing other dictionary
 | 
				
			||||||
software.
 | 
					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,
 | 
					As a recent addition, the program also offers a GTK+ 3 based user interface,
 | 
				
			||||||
called 'sdgui'.  It shares its dictionary list with 'sdtui', but styling will
 | 
					whose styling will follow your theme, and may be customized from 'gtk.css'.
 | 
				
			||||||
follow your theme, and may be customized from 'gtk.css'.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Packages
 | 
					Packages
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
@@ -23,7 +22,7 @@ a package with the latest development version from Archlinux's AUR.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Documentation
 | 
					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.
 | 
					The rest of this README will concern itself with externalities.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Building and Running
 | 
					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:
 | 
					Or you can try telling CMake to make a package for you.  For Debian it is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 $ cpack -G DEB
 | 
					 $ cpack -G DEB
 | 
				
			||||||
 # dpkg -i sdtui-*.deb
 | 
					 # dpkg -i tdv-*.deb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Having the program installed, simply run it with a StarDict '.ifo' file as
 | 
					Having the program installed, simply run it with a StarDict '.ifo' file as
 | 
				
			||||||
an argument.  It is, however, preferable to
 | 
					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.
 | 
					automatically.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Windows
 | 
					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
 | 
					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
 | 
					selection watching is a very X11/Wayland-specific feature.  Beware that build
 | 
				
			||||||
dependencies take up almost a gigabyte of disk space.
 | 
					dependencies take up almost a gigabyte of disk space.
 | 
				
			||||||
@@ -91,7 +90,7 @@ https://mega.co.nz/#!axtD0QRK!sbtBgizksyfkPqKvKEgr8GQ11rsWhtqyRgUUV0B7pwg[CZ <--
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Further Development
 | 
					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
 | 
					should be addressed before including the software in regular Linux and/or
 | 
				
			||||||
BSD distributions:
 | 
					BSD distributions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@
 | 
				
			|||||||
#define GETTEXT_DIRNAME "${CMAKE_INSTALL_PREFIX}/share/locale"
 | 
					#define GETTEXT_DIRNAME "${CMAKE_INSTALL_PREFIX}/share/locale"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#cmakedefine WITH_X11
 | 
					#cmakedefine WITH_X11
 | 
				
			||||||
 | 
					#cmakedefine WITH_GUI
 | 
				
			||||||
#cmakedefine HAVE_RESIZETERM
 | 
					#cmakedefine HAVE_RESIZETERM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  // ! CONFIG_H
 | 
					#endif  // ! CONFIG_H
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,21 +1,21 @@
 | 
				
			|||||||
sdtui(1)
 | 
					tdv(1)
 | 
				
			||||||
========
 | 
					======
 | 
				
			||||||
:doctype: manpage
 | 
					:doctype: manpage
 | 
				
			||||||
:manmanual: sdtui Manual
 | 
					:manmanual: tdv Manual
 | 
				
			||||||
:mansource: sdtui {release-version}
 | 
					:mansource: tdv {release-version}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name
 | 
					Name
 | 
				
			||||||
----
 | 
					----
 | 
				
			||||||
sdtui - StarDict terminal UI
 | 
					tdv - Translation dictionary viewer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Synopsis
 | 
					Synopsis
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
*sdtui* [_OPTION_]... [_DICTIONARY_.ifo]...
 | 
					*tdv* [_OPTION_]... [_DICTIONARY_.ifo]...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Description
 | 
					Description
 | 
				
			||||||
-----------
 | 
					-----------
 | 
				
			||||||
*sdtui* is a StarDict dictionary viewer, custom-tailored for translation
 | 
					*tdv* is a StarDict dictionary viewer, custom-tailored for translation
 | 
				
			||||||
dictionaries, with a simple curses-based terminal UI.
 | 
					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
 | 
					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
 | 
					dictionaries to load on start-up in its configuration file.  The _.ifo_ files
 | 
				
			||||||
@@ -32,7 +32,7 @@ Options
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Configuration
 | 
					Configuration
 | 
				
			||||||
-------------
 | 
					-------------
 | 
				
			||||||
You can start your _sdtui.conf_ file with the following snippet:
 | 
					You can start your _tdv.conf_ file with the following snippet:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 [Settings]
 | 
					 [Settings]
 | 
				
			||||||
 center-search = true     # Ensure visibility of preceding entries?
 | 
					 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
 | 
					Because the StarDict file format is a bit of a clusterfuck with regard to
 | 
				
			||||||
collation of dictionary entries, this software introduces an additional,
 | 
					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
 | 
					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,
 | 
					to that locale (e.g., "cs_CZ").  This operation may take a little while,
 | 
				
			||||||
in the order of seconds.
 | 
					in the order of seconds.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Files
 | 
					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.
 | 
						The configuration file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Reporting bugs
 | 
					Reporting bugs
 | 
				
			||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
 * finalised with an empty line.  Newlines are escaped with `\n',
 | 
					 * finalised with an empty line.  Newlines are escaped with `\n',
 | 
				
			||||||
 * backslashes with `\\'.
 | 
					 * 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>
 | 
					 * Copyright (c) 2013 - 2021, Přemysl Eric Janouch <p@janouch.name>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,6 @@
 | 
				
			|||||||
#include <gtk/gtk.h>
 | 
					#include <gtk/gtk.h>
 | 
				
			||||||
#include <glib/gi18n.h>
 | 
					#include <glib/gi18n.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <locale.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
@@ -27,9 +26,6 @@
 | 
				
			|||||||
#include "utils.h"
 | 
					#include "utils.h"
 | 
				
			||||||
#include "stardict-view.h"
 | 
					#include "stardict-view.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef PROJECT_NAME
 | 
					 | 
				
			||||||
#define PROJECT_NAME "sdgui"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct
 | 
					static struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	GtkWidget    *window;            ///< Top-level window
 | 
						GtkWidget    *window;            ///< Top-level window
 | 
				
			||||||
@@ -452,42 +448,18 @@ die_with_dialog (const gchar *message)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
main (int argc, char *argv[])
 | 
					gui_main (char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!setlocale (LC_ALL, ""))
 | 
						// Just like with GtkApplication, argv has been parsed by the option group.
 | 
				
			||||||
		g_printerr ("%s: %s\n", _("Warning"), _("failed to set the locale"));
 | 
						gtk_init (NULL, NULL);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gtk_window_set_default_icon_name (PROJECT_NAME);
 | 
						gtk_window_set_default_icon_name (PROJECT_NAME);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						GError *error = NULL;
 | 
				
			||||||
	GPtrArray *new_dictionaries =
 | 
						GPtrArray *new_dictionaries =
 | 
				
			||||||
		g_ptr_array_new_with_free_func ((GDestroyNotify) dictionary_destroy);
 | 
							g_ptr_array_new_with_free_func ((GDestroyNotify) dictionary_destroy);
 | 
				
			||||||
	if (filenames)
 | 
						if (argv[0])
 | 
				
			||||||
	{
 | 
							load_from_filenames (new_dictionaries, argv);
 | 
				
			||||||
		load_from_filenames (new_dictionaries, filenames);
 | 
					 | 
				
			||||||
		g_strfreev (filenames);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if (!load_from_config (new_dictionaries, &error) && error)
 | 
						else if (!load_from_config (new_dictionaries, &error) && error)
 | 
				
			||||||
		die_with_dialog (error->message);
 | 
							die_with_dialog (error->message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,16 +18,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <locale.h>
 | 
					 | 
				
			||||||
#include <stdarg.h>
 | 
					#include <stdarg.h>
 | 
				
			||||||
#include <limits.h>
 | 
					#include <limits.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <glib.h>
 | 
					#include <glib.h>
 | 
				
			||||||
#include <glib-unix.h>
 | 
					#include <glib-unix.h>
 | 
				
			||||||
 | 
					#include <glib/gi18n.h>
 | 
				
			||||||
#include <gio/gio.h>
 | 
					#include <gio/gio.h>
 | 
				
			||||||
#include <pango/pango.h>
 | 
					#include <pango/pango.h>
 | 
				
			||||||
#include <glib/gi18n.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#include <poll.h>
 | 
					#include <poll.h>
 | 
				
			||||||
@@ -2438,53 +2437,10 @@ log_handler (const gchar *domain, GLogLevelFlags level,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					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;
 | 
						Application app;
 | 
				
			||||||
	app_init (&app, argv + 1);
 | 
						app_init (&app, argv);
 | 
				
			||||||
	app_init_terminal (&app);
 | 
						app_init_terminal (&app);
 | 
				
			||||||
	app_redraw (&app);
 | 
						app_redraw (&app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2528,4 +2484,3 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										98
									
								
								src/tdv.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/tdv.c
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
[Desktop Entry]
 | 
					[Desktop Entry]
 | 
				
			||||||
Type=Application
 | 
					Type=Application
 | 
				
			||||||
Name=sdgui
 | 
					Name=tdv
 | 
				
			||||||
GenericName=StarDict GUI
 | 
					GenericName=Translation dictionary viewer
 | 
				
			||||||
Icon=sdgui
 | 
					Icon=tdv
 | 
				
			||||||
Exec=sdgui %F
 | 
					Exec=tdv %F
 | 
				
			||||||
StartupNotify=true
 | 
					StartupNotify=true
 | 
				
			||||||
MimeType=application/x-stardict-ifo;
 | 
					MimeType=application/x-stardict-ifo;
 | 
				
			||||||
Categories=Office;Dictionary;GTK;
 | 
					Categories=Office;Dictionary;GTK;
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB  | 
		Reference in New Issue
	
	Block a user