├── .DirIcon ├── .clang-format ├── .gitignore ├── .tx └── config ├── .vscode ├── c_cpp_properties.json └── settings.json ├── AUTHORS ├── AppInfo.xml.in ├── AppRun ├── CMakeLists.txt ├── COPYING ├── COPYING-LGPL ├── ChangeLog.old ├── Config ├── Colours │ ├── GTK │ ├── Nocturne │ ├── Nord │ └── Tango └── Shortcuts │ └── Default ├── INSTALL ├── INSTALL.Debian ├── NEWS ├── README ├── README.md ├── README.translations ├── debian ├── changelog ├── compat ├── control ├── copyright ├── gbp.conf ├── roxterm-data.doc-base ├── roxterm-data.install ├── roxterm.install ├── roxterm.postinst ├── roxterm.prerm ├── rules ├── source │ ├── format │ └── options ├── upstream-signing-key.pgp └── watch ├── docs ├── en │ ├── guide.html │ ├── index.html │ ├── installation.html │ └── news.html ├── index.html ├── index.php └── lib │ ├── favicon.ico │ ├── header.png │ ├── logo_text.png │ ├── logo_text.xcf │ ├── logo_text_only.png │ ├── roxterm.css │ ├── roxterm_ie.css │ ├── roxterm_logo.png │ ├── screenshot1.png │ ├── screenshot2.png │ └── sprites.png ├── gendist.mk ├── gendist.sh ├── genlog ├── mkycmflags ├── po ├── LINGUAS ├── Makevars ├── POTFILES.in ├── es.po ├── fr.po ├── pt.po ├── pt_BR.po ├── ru.po └── uk.po ├── po4a ├── LINGUAS ├── guide.html.es.po ├── guide.html.fr.po ├── guide.html.pt_BR.po ├── guide.html.ru.po ├── guide.html.uk.po ├── index.html.de.po ├── index.html.es.po ├── index.html.fr.po ├── index.html.gl.po ├── index.html.pt_BR.po ├── index.html.ru.po ├── index.html.uk.po ├── index.html.zh_CN.po ├── installation.html.de.po ├── installation.html.es.po ├── installation.html.fr.po ├── installation.html.gl.po ├── installation.html.pt_BR.po ├── installation.html.ru.po ├── installation.html.uk.po ├── installation.html.zh_CN.po ├── news.html.de.po ├── news.html.es.po ├── news.html.fr.po ├── news.html.gl.po ├── news.html.pt_BR.po ├── news.html.ru.po ├── news.html.uk.po ├── news.html.zh_CN.po ├── roxterm-config.1.de.po ├── roxterm-config.1.es.po ├── roxterm-config.1.fr.po ├── roxterm-config.1.gl.po ├── roxterm-config.1.pt_BR.po ├── roxterm-config.1.ru.po ├── roxterm-config.1.uk.po ├── roxterm-config.1.zh_CN.po ├── roxterm.1.de.po ├── roxterm.1.es.po ├── roxterm.1.fr.po ├── roxterm.1.gl.po ├── roxterm.1.pt_BR.po ├── roxterm.1.ru.po ├── roxterm.1.uk.po └── roxterm.1.zh_CN.po ├── release_version ├── roxterm-config.1.xml.in ├── roxterm.1.xml.in ├── roxterm.desktop ├── roxterm.lsm.in ├── roxterm.metainfo.xml.in ├── roxterm.xml ├── src ├── CMakeLists.txt ├── about.c ├── about.h ├── boxcompat.h ├── capplet.c ├── capplet.h ├── colourgui.c ├── colourgui.h ├── colourscheme.c ├── colourscheme.h ├── config.h.in ├── configlet.c ├── configlet.h ├── defns.h ├── dlg.c ├── dlg.h ├── dragrcv.c ├── dragrcv.h ├── dynopts.c ├── dynopts.h ├── getname.c ├── getname.h ├── globalopts.c ├── globalopts.h ├── gresources.xml ├── icons │ └── roxterm.svg ├── intptrmap.h ├── main.c ├── menutree.c ├── menutree.h ├── multitab-close-button.c ├── multitab-close-button.h ├── multitab-label.c ├── multitab-label.h ├── multitab.c ├── multitab.h ├── options.c ├── options.h ├── optsdbus.c ├── optsdbus.h ├── optsfile.c ├── optsfile.h ├── osc52filter.c ├── osc52filter.h ├── profilegui.c ├── profilegui.h ├── resources.c ├── resources.h ├── roxterm-config.ui ├── roxterm-regex.c ├── roxterm-regex.h ├── roxterm.c ├── roxterm.h ├── rtdbus.c ├── rtdbus.h ├── search.c ├── search.h ├── session-file.c ├── session-file.h ├── shim │ └── roxterm-shim.go ├── shortcuts.c ├── shortcuts.h ├── terminal-regex.h ├── uri.c ├── uri.h └── version.h.in ├── update-tags ├── upload ├── upload_docs.sh ├── version.sh └── vte-osc52.diff /.DirIcon: -------------------------------------------------------------------------------- 1 | src/icons/roxterm.svg -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: LLVM 2 | IndentWidth: 4 3 | BreakBeforeBraces: Custom 4 | BraceWrapping: 5 | AfterControlStatement: Always 6 | AfterFunction: true 7 | AfterClass: false 8 | AfterEnum: false 9 | SpaceAfterCStyleCast: true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *~ 3 | *.lo 4 | *.la 5 | .cache 6 | Makefile 7 | Makefile.in 8 | .deps 9 | .libs 10 | ABOUT-NLS 11 | AppInfo.xml 12 | ChangeLog 13 | aclocal.m4 14 | autom4te.cache/ 15 | compile 16 | config.[^h]* 17 | configure 18 | configure.lineno 19 | depcomp 20 | install-sh 21 | intl/ 22 | libtool 23 | locale/ 24 | ltmain.sh 25 | m4/ 26 | missing 27 | obj-x86_64-linux-gnu/ 28 | *.1 29 | *.1.xml 30 | *.spec 31 | stamp* 32 | Help 33 | docs/AUTHORS 34 | docs/COPYING* 35 | docs/Changes 36 | docs/NEWS 37 | docs/README 38 | docs/es 39 | docs/fr 40 | docs/gl 41 | docs/pt_BR 42 | docs/ru 43 | docs/uk 44 | *.mo 45 | *.gmo 46 | *.pot 47 | po/Makefile.in.in 48 | po/Makevars.template 49 | po/POTFILES 50 | po/Rules-quot 51 | po/boldquot.sed 52 | po/en@boldquot.header 53 | po/en@quot.header 54 | po/insert-header.sin 55 | po/quot.sed 56 | po/remove-potcdate.sed 57 | po/remove-potcdate.sin 58 | po/stamp-po 59 | src/roxterm 60 | src/roxterm-config 61 | src/rtconfig.h 62 | src/version.h 63 | roxterm.lsm 64 | *.tar.gz 65 | tony 66 | debtmp 67 | po4a/Makefile.am 68 | po4a/*.xml.in 69 | po4a/*.1.es 70 | po4a/*.1.es.xml 71 | po4a/*.1.fr 72 | po4a/*.1.fr.xml 73 | po4a/*.1.gl 74 | po4a/*.1.gl.xml 75 | po4a/*.pot.old 76 | poxml/roxterm.appdata.xml 77 | roxterm-config.ui.stamp 78 | *.pyc 79 | *.pyo 80 | build 81 | tags 82 | .ycm_extra_conf.py 83 | .pc 84 | debian/build-* 85 | debian/deletable.files 86 | debian/debhelper-build-stamp 87 | debian/files 88 | debian/*.log 89 | debian/*.debhelper 90 | debian/*.substvars 91 | debian/tmp/ 92 | debian/roxterm*/ 93 | version 94 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [roxterm.roxtermconfig1pot] 2 | file_filter = po4a/roxterm-config.1..po 3 | source_file = po4a/roxterm-config.1.pot 4 | source_lang = en 5 | 6 | [roxterm.installationhtmlpot] 7 | file_filter = po4a/installation.html..po 8 | source_file = po4a/installation.html.pot 9 | source_lang = en 10 | 11 | [roxterm.indexhtmlpot] 12 | file_filter = po4a/index.html..po 13 | source_file = po4a/index.html.pot 14 | source_lang = en 15 | 16 | [roxterm.newshtmlpot] 17 | file_filter = po4a/news.html..po 18 | source_file = po4a/news.html.pot 19 | source_lang = en 20 | 21 | [roxterm.roxterm1pot] 22 | file_filter = po4a/roxterm.1..po 23 | source_file = po4a/roxterm.1.pot 24 | source_lang = en 25 | 26 | [main] 27 | host = https://www.transifex.com 28 | 29 | [roxterm.guidehtmlpot] 30 | file_filter = po4a/guide.html..po 31 | source_file = po4a/guide.html.pot 32 | source_lang = en 33 | 34 | [roxterm.roxtermpot] 35 | file_filter = po/.po 36 | source_file = po/roxterm.pot 37 | source_lang = en 38 | 39 | [roxterm.appdataxmlpot] 40 | source_file = poxml/roxterm.appdata.xml.pot 41 | file_filter = poxml/.po 42 | source_lang = en 43 | type = PO 44 | 45 | -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Linux", 5 | "includePath": [ 6 | "${workspaceFolder}/**", 7 | "/usr/include/gtk-3.0", 8 | "/usr/include/pango-1.0", 9 | "/usr/include/glib-2.0", 10 | "/usr/lib/glib-2.0/include", 11 | "/usr/lib/libffi-3.2.1/include", 12 | "/usr/include/fribidi", 13 | "/usr/include/cairo", 14 | "/usr/include/pixman-1", 15 | "/usr/include/freetype2", 16 | "/usr/include/libpng16", 17 | "/usr/include/harfbuzz", 18 | "/usr/include/uuid", 19 | "/usr/include/gdk-pixbuf-2.0", 20 | "/usr/include/gio-unix-2.0", 21 | "/usr/include/libmount", 22 | "/usr/include/blkid", 23 | "/usr/include/libdrm", 24 | "/usr/include/atk-1.0", 25 | "/usr/include/at-spi2-atk/2.0", 26 | "/usr/include/at-spi-2.0", 27 | "/usr/include/dbus-1.0", 28 | "/usr/lib/dbus-1.0/include", 29 | "/usr/include/vte-2.91", 30 | "/usr/include/p11-kit-1" 31 | ], 32 | "defines": [], 33 | "compilerPath": "/usr/bin/clang", 34 | "cStandard": "c11", 35 | "cppStandard": "c++17", 36 | "intelliSenseMode": "clang-x64", 37 | "compileCommands": "${workspaceFolder}/build/compile_commands.json" 38 | } 39 | ], 40 | "version": 4 41 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake.configureOnOpen": true, 3 | "editor.rulers": [80] 4 | } -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Tony Houghton 2 | 3 | Tango colour scheme contributed by Trustin Lee 4 | 5 | -------------------------------------------------------------------------------- /AppInfo.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | Run text-based programs (command prompt) 4 | 5 | A terminal emulator with a flexible GUI 6 | @APPINFO_VERSION@ 7 | Tony Houghton <h@realh.co.uk> 8 | GNU General Public License 9 | http://github.com/realh/roxterm 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /AppRun: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | PROG=roxterm 5 | 6 | APP_DIR=`dirname "$0"` 7 | APP_DIR=`cd "$APP_DIR";pwd`; export APP_DIR 8 | APPRUN="${APP_DIR}/AppRun" 9 | 10 | [ -d "${APP_DIR}/Help" ] || ln -nfs "docs" "${APP_DIR}/Help" 11 | 12 | for f in AUTHORS COPYING NEWS README ; do 13 | [ -f "$APP_DIR/Help/$f" ] || ln -nfs ../$f "$APP_DIR/Help/$f" 14 | done 15 | [ -f "$APP_DIR/Help/Changes" ] || ln -nfs ../debian/changeLog \ 16 | "$APP_DIR/Help/Changes" 17 | 18 | MAINTAIN="--enable-maintainer-mode" 19 | if [ -f "$APP_DIR/tony" ]; then 20 | cd $APP_DIR 21 | DEV_LDFLAGS="-L/usr/lib/debug $LDFLAGS" 22 | ulimit -c unlimited 23 | else 24 | LOGFILE= 25 | fi 26 | PREFIX="--prefix=/usr/local/stow/roxterm" 27 | 28 | DEBUGGER="" 29 | DBGENV="" 30 | FATAL="" 31 | 32 | configure() { 33 | if [ ! -d "$APP_DIR/src" ] ; then 34 | echo "ERROR from $APPRUN:" >&2 35 | echo "Cannot configure/compile - source code is missing!" >&2 36 | exit 1 37 | fi 38 | echo "Configuring/compiling $APP_DIR... please wait..." >&2 39 | mkdir -p "$APP_DIR/build" 40 | cd "$APP_DIR/build" 41 | export CFLAGS="-Wall -Wextra" 42 | cmake "$@" .. 43 | } 44 | 45 | RECOGNISED=1 46 | while [ "$RECOGNISED" = "1" ] ; do 47 | case $1 in 48 | --opt-vte) 49 | shift 50 | CVTELIB=~/opt/vte/lib 51 | PCP=$CVTELIB/pkgconfig 52 | if [ -f $CVTELIB/libvte-2.91.so -a $PCP/vte-2.91.pc ] ; then 53 | echo "Enabling custom vte in ~/opt" 54 | if echo "$PKG_CONFIG_PATH" | grep -qv $PCP ; then 55 | export PKG_CONFIG_PATH="$PCP:${PKG_CONFIG_PATH}" 56 | fi 57 | if echo "$LD_LIBRARY_PATH" | grep -qv $CVTELIB ; then 58 | export LD_LIBRARY_PATH="$CVTELIB:${LD_LIBRARY_PATH}" 59 | fi 60 | else 61 | echo "vte not found in ~/opt" 62 | fi 63 | ;; 64 | --verbose) 65 | shift 66 | DBGENV='G_MESSAGES_DEBUG=all' 67 | ;; 68 | --debug) 69 | shift 70 | DEBUGGER="gdb --args" 71 | DBGENV='G_MESSAGES_DEBUG=all' 72 | ;; 73 | --fatal) 74 | shift 75 | G_DEBUG=fatal-warnings 76 | ;; 77 | --config) 78 | shift 79 | PROG=roxterm-config 80 | ;; 81 | --valgrind) 82 | shift 83 | ulimit -c unlimited 84 | DEBUGGER="valgrind --freelist-vol=50000000" 85 | DBGENV='G_SLICE=always-malloc G_MESSAGES_DEBUG=all' 86 | ;; 87 | --leaks) 88 | shift 89 | DEBUGGER="valgrind --freelist-vol=50000000 " 90 | DEBUGGER="$DEBUGGER --leak-check=full --num-callers=80" 91 | DBGENV='G_SLICE=always-malloc G_MESSAGES_DEBUG=all' 92 | ;; 93 | --compile|--configure) 94 | cmd="$1" 95 | shift 96 | configure -DCMAKE_BUILD_TYPE=RELWITHDEBINFO "$@" && \ 97 | ( [ "$cmd" = "--compile" ] && make || true ) && \ 98 | echo Done >&2 && exit 0 99 | echo Compile/configure failed >&2 100 | echo Press Return... >&2 101 | read WAIT 102 | exit 1 ;; 103 | 104 | # Counterparts to compile/configure with developer flags etc 105 | --build|--develop) 106 | cmd="$1" 107 | shift 108 | export CFLAGS="-Wall -Wextra" 109 | export CC='clang' 110 | configure -DCMAKE_BUILD_TYPE=DEBUG \ 111 | -DCMAKE_EXPORT_COMPILE_COMMANDS=1 "$@" \ 112 | -G Ninja && \ 113 | ( [ "$cmd" = "--build" ] && ninja || true ) && \ 114 | echo Done >&2 && exit 0 115 | echo Configure failed >&2 116 | echo Press Return... >&2 117 | read WAIT 118 | exit 1 ;; 119 | 120 | *) 121 | RECOGNISED=0 122 | ;; 123 | esac 124 | done 125 | 126 | exitcode=1 127 | 128 | if [ -d "${APP_DIR}/src" ] ; then 129 | BIN="${APP_DIR}/build/src/$PROG" 130 | if [ ! -x "$BIN" ]; then 131 | echo "ERROR from $APPRUN:" >&2 132 | echo "I cannot find an executable file." >&2 133 | echo "Trying to compile..." >&2 134 | if [ -n "$DISPLAY" ] && echo $TERM | egrep -q -v 'term|rxvt' ; then 135 | xterm -e "$APPRUN" --compile 136 | else 137 | "$APPRUN" --compile 138 | fi 139 | fi 140 | else 141 | old_ifs="$IFS" 142 | IFS=':' 143 | for i in $PATH ; do 144 | BIN="$i/$PROG" 145 | [ -x "$BIN" ] && exec $DEBUGGER "$BIN" "$@" 146 | done 147 | IFS="$old_ifs" 148 | fi 149 | 150 | if [ -x "$BIN" ]; then 151 | exitcode=0 152 | [ -n "$DBGENV" ] && export $DBGENV 153 | [ -n "$G_DEBUG" ] && export G_DEBUG 154 | exec $DEBUGGER "$BIN" "--appdir=$APP_DIR" "$@" 155 | else 156 | echo "No roxterm executable found" >&2 157 | fi 158 | exit $exitcode 159 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(roxterm C) 4 | 5 | include(FindPkgConfig) 6 | include(GNUInstallDirs) 7 | 8 | execute_process(COMMAND cat ${PROJECT_SOURCE_DIR}/release_version 9 | OUTPUT_VARIABLE ROXTERM_VERSION) 10 | execute_process(COMMAND date "+%Y-%m-%d" 11 | OUTPUT_VARIABLE ROXTERM_DATE) 12 | 13 | set(APPINFO_VERSION "${ROXTERM_VERSION} ${ROXTERM_DATE}") 14 | configure_file(${PROJECT_SOURCE_DIR}/AppInfo.xml.in 15 | ${PROJECT_SOURCE_DIR}/AppInfo.xml) 16 | # metainfo should really be processed by i18n 17 | configure_file(${PROJECT_SOURCE_DIR}/roxterm.metainfo.xml.in 18 | ${PROJECT_BINARY_DIR}/roxterm.metainfo.xml) 19 | configure_file(${PROJECT_SOURCE_DIR}/roxterm.1.xml.in 20 | ${PROJECT_BINARY_DIR}/roxterm.1.xml) 21 | configure_file(${PROJECT_SOURCE_DIR}/roxterm-config.1.xml.in 22 | ${PROJECT_BINARY_DIR}/roxterm-config.1.xml) 23 | 24 | add_subdirectory(src) 25 | 26 | install(FILES src/icons/roxterm.svg 27 | DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps) 28 | 29 | install(DIRECTORY Config 30 | DESTINATION ${CMAKE_INSTALL_DATADIR}/roxterm) 31 | 32 | install(DIRECTORY docs/ 33 | DESTINATION ${CMAKE_INSTALL_DOCDIR}) 34 | 35 | find_program(XSLTPROC xsltproc) 36 | if (NOT "${XSLTPROC}" EQUAL "XSLTPROC-NOTFOUND") 37 | set(XSLTPROC_OPTIONS --novalid --param man.charmap.use.subset 0 38 | http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl) 39 | add_custom_command(OUTPUT roxterm.1 40 | COMMAND ${XSLTPROC} -o roxterm.1 ${XSLTPROC_OPTIONS} 41 | ${PROJECT_BINARY_DIR}/roxterm.1.xml 42 | MAIN_DEPENDENCY ${PROJECT_BINARY_DIR}/roxterm.1.xml 43 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 44 | add_custom_command(OUTPUT roxterm-config.1 45 | COMMAND ${XSLTPROC} -o roxterm-config.1 ${XSLTPROC_OPTIONS} 46 | ${PROJECT_BINARY_DIR}/roxterm-config.1.xml 47 | MAIN_DEPENDENCY ${PROJECT_BINARY_DIR}/roxterm-config.1.xml 48 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 49 | add_custom_target(manpages ALL 50 | DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/roxterm.1 51 | ${CMAKE_CURRENT_BINARY_DIR}/roxterm-config.1) 52 | install(FILES 53 | ${CMAKE_CURRENT_BINARY_DIR}/roxterm.1 54 | ${CMAKE_CURRENT_BINARY_DIR}/roxterm-config.1 55 | DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) 56 | else () 57 | message(WARNING "xsltproc not found, man pages will not be generated") 58 | endif () 59 | 60 | install(FILES roxterm.desktop 61 | DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) 62 | 63 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/roxterm.metainfo.xml 64 | DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) 65 | 66 | 67 | # It would be nice if we could use cmake -E tar here, but it doesn't support 68 | # any of the -- options needed here. 69 | set(ROXTERM_PACKAGE_NAME "${CMAKE_PROJECT_NAME}-${ROXTERM_VERSION}") 70 | set(TARBALL_NAME "${ROXTERM_PACKAGE_NAME}.tar.xz") 71 | add_custom_command(OUTPUT "${TARBALL_NAME}" 72 | COMMAND tar cfJ 73 | "${TARBALL_NAME}" 74 | "--directory=${PROJECT_SOURCE_DIR}" 75 | "--transform=s,^,${CMAKE_PROJECT_NAME}-${ROXTERM_VERSION}/," 76 | "--exclude=*~" 77 | AppInfo.xml 78 | AppInfo.xml.in 79 | AppRun 80 | AUTHORS 81 | CMakeLists.txt 82 | Config 83 | COPYING 84 | COPYING-LGPL 85 | docs 86 | INSTALL 87 | INSTALL.Debian 88 | mkycmflags 89 | NEWS 90 | README 91 | README.md 92 | README.translations 93 | roxterm.1.xml.in 94 | roxterm.metainfo.xml.in 95 | roxterm-config.1.xml.in 96 | roxterm.desktop 97 | roxterm.lsm.in 98 | roxterm.xml 99 | src 100 | version 101 | version.sh) 102 | add_custom_target(dist DEPENDS "${TARBALL_NAME}") 103 | -------------------------------------------------------------------------------- /Config/Colours/GTK: -------------------------------------------------------------------------------- 1 | [roxterm colour scheme] 2 | foreground=#000000 3 | background=#FFFFFF 4 | palette_size=16 5 | 0=#000000 6 | 1=#960000 7 | 2=#009600 8 | 3=#AA5500 9 | 4=#0000AA 10 | 5=#A000A0 11 | 6=#009696 12 | 7=#bababdbdb6b6 13 | 8=#646464 14 | 9=#F05050 15 | 10=#49DC49 16 | 11=#B8B81E 17 | 12=#5555FF 18 | 13=#E64CE6 19 | 14=#00C8C8 20 | 15=#d3d3d7d7cfcf 21 | bold=#000000 22 | 23 | -------------------------------------------------------------------------------- /Config/Colours/Nocturne: -------------------------------------------------------------------------------- 1 | [roxterm colour scheme] 2 | foreground=#eeeeeeeeecec 3 | background=#24241f1f3131 4 | 0=#2e2e34343636 5 | 1=#cccc00000000 6 | 2=#4e4e9a9a0606 7 | 3=#c4c4a0a00000 8 | 4=#72729f9fcfcf 9 | 5=#adad7f7fa8a8 10 | 6=#c1c17d7d1110 11 | 7=#eeeeeeeeecec 12 | 8=#555557575353 13 | 9=#efef29292929 14 | 10=#8a8ae2e23434 15 | 11=#fcfce9e94f4f 16 | 12=#3434e2e2e2e2 17 | 13=#ffffbbbbf8f8 18 | 14=#e9e9b9b96e6d 19 | 15=#d3d3d7d7cfcf 20 | 16=#4c4c4c4c4c4c 21 | 17=#a8a830303030 22 | 18=#202088882020 23 | 19=#a8a888880000 24 | 20=#555555559898 25 | 21=#888830308888 26 | 22=#303088888888 27 | 23=#d8d8d8d8d8d8 28 | cursor=#8a8ae2e23434 29 | palette_size=16 30 | cursorfg=#323232323232 31 | -------------------------------------------------------------------------------- /Config/Colours/Nord: -------------------------------------------------------------------------------- 1 | [roxterm colour scheme] 2 | foreground=#D8DEE9 3 | background=#3B4252 4 | 0=#3B4252 5 | 1=#BF616A 6 | 2=#A3BE8C 7 | 3=#EBCB8B 8 | 4=#81A1C1 9 | 5=#B48EAD 10 | 6=#88C0D0 11 | 7=#E5E9F0 12 | 8=#4C566A 13 | 9=#BF616A 14 | 10=#A3BE8C 15 | 11=#EBCB8B 16 | 12=#81A1C1 17 | 13=#B48EAD 18 | 14=#8FBCBB 19 | 15=#ECEFF4 20 | cursor=#D8DEE9 21 | palette_size=16 22 | cursorfg=#3B4252 23 | -------------------------------------------------------------------------------- /Config/Colours/Tango: -------------------------------------------------------------------------------- 1 | [roxterm colour scheme] 2 | foreground=#eeeeeeeeecec 3 | background=#17171a1a1b1b 4 | 0=#2e2e34343636 5 | 1=#cccc00000000 6 | 2=#4e4e9a9a0606 7 | 3=#c4c4a0a00000 8 | 4=#34346565a4a4 9 | 5=#757550507b7b 10 | 6=#060698989a9a 11 | 7=#d3d3d7d7cfcf 12 | 8=#555557575353 13 | 9=#efef29292929 14 | 10=#8a8ae2e23434 15 | 11=#fcfce9e94f4f 16 | 12=#72729f9fcfcf 17 | 13=#adad7f7fa8a8 18 | 14=#3434e2e2e2e2 19 | 15=#eeeeeeeeecec 20 | 16=#4c4c4c4c4c4c 21 | 17=#a8a830303030 22 | 18=#202088882020 23 | 19=#a8a888880000 24 | 20=#555555559898 25 | 21=#888830308888 26 | 22=#303088888888 27 | 23=#d8d8d8d8d8d8 28 | cursor=#eeeeeeeeecec 29 | palette_size=16 30 | -------------------------------------------------------------------------------- /Config/Shortcuts/Default: -------------------------------------------------------------------------------- 1 | [roxterm shortcuts scheme] 2 | File/New Window=n 3 | File/New Tab=t 4 | File/Close Window=q 5 | File/Close Tab=w 6 | Tabs/Previous Tab=Page_Up 7 | Tabs/Next Tab=Page_Down 8 | Edit/Select All=a 9 | Edit/Copy=c 10 | Edit/Paste=v 11 | View/Show Menubar=m 12 | View/Zoom In=plus 13 | View/Zoom Out=minus 14 | View/Normal Size=0 15 | View/Full Screen=F11 16 | View/Borderless=b 17 | View/Scroll Up One Line=Up 18 | View/Scroll Down One Line=Down 19 | Help/Show Manual=F1 20 | Edit/Copy & Paste=y 21 | Search/Find...=f 22 | Search/Find Next=i 23 | Search/Find Previous=p 24 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | Installation Instructions 2 | ************************* 3 | 4 | ROXTerm now uses CMake to build and install. 5 | 6 | Requirements 7 | ************ 8 | 9 | ROXTerm additionally needs xsltproc (and docbook-xsl if building without net 10 | access), and everything else required to compile an application linked with 11 | vte. 12 | 13 | Building with CMake 14 | ******************* 15 | 16 | Using a separate build directory is recommended: 17 | 18 | mkdir build 19 | cd build 20 | 21 | To see available build options etc: 22 | 23 | cmake --help .. 24 | 25 | To configure make: 26 | 27 | cmake .. [OPTIONS] 28 | 29 | Build step: 30 | 31 | make -j 4 32 | 33 | (the -j 4 is optional, but recommended for quad core CPUs). 34 | 35 | Install: 36 | 37 | sudo make install 38 | -------------------------------------------------------------------------------- /INSTALL.Debian: -------------------------------------------------------------------------------- 1 | Debian packaging is no longer included in release tarballs, but it is included 2 | in the master branch of the git repository. See the bottom of the Installation 3 | section of the HTML documentation. 4 | -------------------------------------------------------------------------------- /NEWS: -------------------------------------------------------------------------------- 1 | See docs/en/news.html for news. 2 | 3 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | ROXTerm - VTE/GTK terminal emulator with tabs 2 | 3 | See index.html in the docs subdirectory for full information. 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ROXTerm 2 | 3 | After a long break (literally) ROXTerm is making a comeback on 4 | [github](https://github.com/realh/roxterm). Its original home was on 5 | [Sourceforge](https://roxterm.sourceforge.net). 6 | 7 | 8 | ROXTerm is a terminal emulator intended to provide similar features to 9 | gnome-terminal, based on the same VTE library. It was originally designed to 10 | have a smaller footprint and quicker start-up time by not using the Gnome 11 | libraries and by using a separate applet to provide the configuration GUI, but 12 | thanks to all the features it's acquired over the years ROXTerm can probably 13 | now be accused of bloat. However, it is more configurable than gnome-terminal 14 | and aimed more at "power" users who make heavy use of terminals. 15 | 16 | It still supports the ROX desktop application layout it was named after, but 17 | can also be installed in a more conventional manner for use in other desktop 18 | environments. 19 | 20 | ## What's new 21 | 22 | The [Debian changelog](./debian/changelog) provides a good summary of what's 23 | changed between versions. 24 | 25 | ## CSS styling 26 | 27 | Version 3.15.1 onwards apply a CSS class name to ROXTerm's vte widget, based on 28 | the profile name. For example, a profile name of "My Profile" applies the CSS 29 | class name "roxterm-My-Profile". Use with care, because using different values 30 | of properties such as "padding" in the same window could cause problems with 31 | window geometry. 32 | 33 | ## OSC 52 Clipboard writing 34 | 35 | OSC 52 is an escape sequence that allows programs in the terminal to access 36 | the desktop's clipboard. This is now supported in ROXTerm, with some 37 | security measures: 38 | 39 | * Apps can only write the clipboard, not read it. 40 | * You have to confirm each clipboard write unless you change a profile 41 | setting. 42 | * OSC 52 is ignored if the originating terminal is not focused. 43 | * OSC 52 is ignored if the terminal has a selection made with its GUI. 44 | 45 | Each time the clipboard is written, an indicator flashes in the tab bar, then 46 | stays visible until cleared by clicking it or by performing a copy operation 47 | in ROXTerm's GUI. 48 | 49 | ROXTerm has to resort to intercepting read operations on the pty device, 50 | because VTE doesn't provide support for this OSC. ROXTerm does not intercept 51 | terminfo/termcap sequences to indicate that it supports OSC 52, so you may need 52 | to take extra steps to enable it in some apps, for example in neovim: 53 | 54 | ``` 55 | if vim.env.SSH_TTY then 56 | local function paste() 57 | return { 58 | vim.fn.split(vim.fn.getreg(""), "\n"), 59 | vim.fn.getregtype(""), 60 | } 61 | end 62 | 63 | vim.g.clipboard = { 64 | name = "OSC 52", 65 | copy = { 66 | ["+"] = require("vim.ui.clipboard.osc52").copy("+"), 67 | ["*"] = require("vim.ui.clipboard.osc52").copy("*"), 68 | }, 69 | paste = { 70 | ["+"] = paste, 71 | ["*"] = paste, 72 | }, 73 | } 74 | end 75 | ``` 76 | 77 | ## Kinetic scrolling 78 | 79 | Recent versions of ROXTerm, in conjunction with recent versions of vte, support 80 | kinetic scrolling with libinput, which considerably improves the UX on laptops 81 | for users of Wayland, and for xorg users who can't or prefer not to use the 82 | deprecated synaptics driver. ROXTerm can detect whether the feature is 83 | supported in vte at run-time, so no re-compilation is necessary if you upgrade 84 | from an older vte. 85 | 86 | ## Related sites 87 | 88 | * [User guide](https://realh.github.io/roxterm), 89 | * [Ubuntu PPA](https://launchpad.net/~h-realh/+archive/ubuntu/roxterm) 90 | * [roxterm-git in AUR](https://aur.archlinux.org/packages/roxterm-git/) 91 | 92 | [Tempus Themes](https://gitlab.com/protesilaos/tempus-themes) should have 93 | support for roxterm by the time you read this. If not, you can use 94 | [convert-tempus](https://gitlab.com/realh69/convert-tempus). 95 | -------------------------------------------------------------------------------- /README.translations: -------------------------------------------------------------------------------- 1 | Notes for translators 2 | ===================== 3 | 4 | For now I have disabled translation because the files were out of date and the 5 | i18n/l10n workflow interfered with version control. 6 | 7 | ROXTerm's translations were managed by Transifex at 8 | . There are links to help 9 | with using the transifex client there. 10 | 11 | If you are interested in maintaining a set of translations for roxterm, contact 12 | me by email or raise a github issue and I will try to devise a scheme that's 13 | convenient for us both. 14 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 10 2 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: roxterm 2 | Section: x11 3 | Priority: optional 4 | Maintainer: Tony Houghton 5 | Build-Depends: 6 | cmake, 7 | debhelper (>= 10), 8 | docbook-xsl, 9 | libdbus-glib-1-dev, 10 | libgtk-3-dev (>= 3.22.0), 11 | libpcre2-dev, 12 | libvte-2.91-dev (>= 0.52), 13 | xsltproc 14 | Standards-Version: 4.1.1 15 | Homepage: https://github.com/realh/roxterm 16 | Vcs-Git: https://github.com/realh/roxterm.git 17 | Vcs-Browser: https://github.com/realh/roxterm 18 | 19 | Package: roxterm-data 20 | Architecture: all 21 | Depends: ${misc:Depends} 22 | Replaces: roxterm-common 23 | Breaks: roxterm-common (<< 3.0.0) 24 | Recommends: dbus-x11, openssh-client, roxterm 25 | Description: Multi-tabbed GTK+/VTE terminal emulator - data files 26 | ROXTerm is a terminal emulator based on the VTE library. It was originally 27 | intended to be a lightweight alternative to gnome-terminal, but its role has 28 | shifted to providing a richer range of features for power users. This package 29 | contains ROXTerm's data files. 30 | 31 | Package: roxterm 32 | Architecture: any 33 | Depends: 34 | librsvg2-common, 35 | roxterm-data (= ${source:Version}), 36 | ${misc:Depends}, 37 | ${shlibs:Depends} 38 | Replaces: roxterm-gtk3 (<< 3.0.0), roxterm-gtk2 (<< 3.0.0) 39 | Breaks: roxterm-gtk3 (<< 3.0.0), roxterm-gtk2 (<< 3.0.0) 40 | Provides: x-terminal-emulator 41 | Description: Multi-tabbed GTK+/VTE terminal emulator - binaries 42 | ROXTerm is a terminal emulator based on the VTE library. It was originally 43 | intended to be a lightweight alternative to gnome-terminal, but its role has 44 | shifted to providing a richer range of features for power users. This package 45 | contains the compiled programs for ROXTerm. 46 | -------------------------------------------------------------------------------- /debian/gbp.conf: -------------------------------------------------------------------------------- 1 | # This is here so gbp knows which branch to use from a fresh clone 2 | [DEFAULT] 3 | debian-branch=master 4 | upstream-branch=master 5 | -------------------------------------------------------------------------------- /debian/roxterm-data.doc-base: -------------------------------------------------------------------------------- 1 | Document: roxterm 2 | Title: ROXTerm Manual 3 | Author: Tony Houghton 4 | Abstract: This manual describes what ROXTerm is, and how it can be used. 5 | Section: Terminal Emulators 6 | 7 | Format: HTML 8 | Index: /usr/share/doc/roxterm/en/index.html 9 | Files: /usr/share/doc/roxterm/*/*.html 10 | -------------------------------------------------------------------------------- /debian/roxterm-data.install: -------------------------------------------------------------------------------- 1 | usr/share/doc/roxterm/en 2 | usr/share/doc/roxterm/lib 3 | usr/share/icons/hicolor/scalable/apps/roxterm.svg 4 | usr/share/man/ 5 | usr/share/roxterm/* 6 | -------------------------------------------------------------------------------- /debian/roxterm.install: -------------------------------------------------------------------------------- 1 | usr/bin/roxterm* 2 | usr/share/applications/roxterm.desktop 3 | -------------------------------------------------------------------------------- /debian/roxterm.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$1" = "configure" ] ; then 6 | update-alternatives --install /usr/bin/x-terminal-emulator \ 7 | x-terminal-emulator /usr/bin/roxterm 50 --slave \ 8 | /usr/share/man/man1/x-terminal-emulator.1.gz x-terminal-emulator.1.gz \ 9 | /usr/share/man/man1/roxterm.1.gz 10 | fi 11 | 12 | #DEBHELPER# 13 | 14 | exit 0 15 | -------------------------------------------------------------------------------- /debian/roxterm.prerm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then 6 | update-alternatives --remove x-terminal-emulator /usr/bin/roxterm 7 | fi 8 | 9 | #DEBHELPER# 10 | 11 | exit 0 12 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | %: 4 | dh $@ --buildsystem=cmake 5 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /debian/source/options: -------------------------------------------------------------------------------- 1 | extend-diff-ignore = "\.pot?$" 2 | -------------------------------------------------------------------------------- /debian/upstream-signing-key.pgp: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG v1 3 | 4 | mQINBEwWOW0BEAC8SSt0pCAsSOahUhMiGjkCyGOq0HOW6edW7NCzcIyEEbwZluXl 5 | xTa2jGw5/Z6/p+GhjC9Y1qzQJe9APFB+D+9IYr3R/wm/jNiD4R+UAF5uOom2QXWs 6 | NTBKBd0tT+P+dvZQTwuGqCnVn0ndrqlRdpTUP4MapO7oD3oZph2PHEGJcqsjBmch 7 | u62cFl1oJRQAcZC9RhmawrDiO49oX0FptiYuJFjCDvRcZQqHtobl0mbmNGwnZ9KT 8 | lGTMe4QWOjnsaPhUykPtBhpkc8WOEiQpVGKDeUl3q1IXw+CYIDO/ApJAggEvNmer 9 | Xi69j27KPSpAhng9YbLLx4s0eo7+brMOjQEuO5N+SksatkSQEP209k9J7XgYGmpQ 10 | UGs95XL7J+8Cthit+UvEBiP2n2n9IUFPj7soulGzt8ctGe8WA5y3n8PXguc0v5b7 11 | lZBYpYmUdeuJkCvkHV6MNLoB1X88vT5TjsAiUBzgV4Z+o2NzsW1Qq4RaqHuYpqB7 12 | A8pxBpa3cTJFavN9GPiX/qJjreceOZaf0d5uFaRrL+h/XbmrBrgMHJCx3Cd162hv 13 | y2aywgVKMWaW2R+Hl8v1//LqsbN4HOiNBdu+XDIdHYXrI0XUJuGEbvkf+1FlYD0Z 14 | u4++MMZ2aZPJsFjNrwtMvqt9gVuh7VL1rfdh9HFu/yWL9uEc2yAPvmPqwQARAQAB 15 | tB1Ub255IEhvdWdodG9uIDxoQHJlYWxoLmNvLnVrPokCNwQTAQgAIQIbAwIeAQIX 16 | gAUCTBY7mgULCQgHAwUVCgkICwUWAgMBAAAKCRC/DrzRPZfNCVKPEACf8jMLaCMp 17 | r15KUrwoSwng+A3F1Ie7pr8Y/fYrsW52Wyz9IbV0YJpF+2vjwkNUnTzVDGxHZqsd 18 | B2yStuWyzCrayNIku8LuH+iDfAZLo5gFviwEGFOoBgAyJxJ3ipztuRwYaacAVjtX 19 | iRYC3RdE7PUx15vsxDMRq/NgSDGSODSHR1yGVL5+y8eBesj/0IB7O2Rl+RkzW3Ec 20 | YFdqLa3h1xEUhr+zfSuI6iBIkDdEoTqszHMBDqMf6bmiH3qS9zk1hYQQTMFJxqOj 21 | bf+iBsz65dwcUgLJl5zoTAgCyVHXo/+eRvd6MxrXkaPy27t/aAumM4MO3eNvLl5Y 22 | ZO1B7S6It1S3FrbfHXgpTXClDH9EjGx+e4VI1Jhl9G+m2WHZepzpo+tWKL8FNCf/ 23 | mcq/xX1dRRZrQARQbGdHg2m0mheWpkdvEeevjKLiKR4tYKPtEEk8/cnvO/Ufd1Du 24 | +svmN97C90g+PJqjspQ9RzAP5toD4J6/4V0bzJmSaydIFKKkVDkfVccOVQd4+cM0 25 | KO1NggeyyXRCNhbsUKxuS7ZCyUMAGo063xbQstd6Nx/yBX6Tv0/KvypKTYDcFteB 26 | epov1beClGATzc/Ma7IHeld19jVgTSezMzOeLGvYozYqc6y9Urgfo6jBDFOyC55c 27 | wHFKuvefcwauvDSjrrhF29nPu5W/oXCqfYhGBBARAgAGBQJMGSe4AAoJEDhzTXeH 28 | kBRSvvoAoJimUKxMhca9CgY5U8S8gWUiKewTAKDgEQgjvU8QBPqj7ajY5Eg8HyFq 29 | tbkCDQRMFjtBARAAyyeIwZQsXJYHeEstVKeZDfBuAok7DMZiz7N8V1De7oHy2usj 30 | Hj9oHNHVg3ovZyFIcwELnHQIgnvIazB41dzKicFL/I3MFX56cmXho+MyImcfShbB 31 | PgecDTJhs71RVr9Vm87vjhnjxkMPoBzYlIoqcdWkOzsHh31z4Z3ZV/4NzBVzC+k/ 32 | n74/XRVoO4J2Eox82Y9vrkoYdC0YU3cNmuAuwHoznmixzqZh3yjxCFFkijm3fsan 33 | N15oI3XdGo0ME1SF0OfnhPKEdn1QyZucb5jp9POTsUOdxJQpl3HJLje9T+qh+8qC 34 | OuLXdAIq3h2rVogEYGzgffs/8H9mtyCS0PbNAetqAp9S68b8/MycKFBRAu3QR/Hz 35 | D79dhZs+vJ4/SjoZ5XvSjcQEY9P0XRR6oRBBjClR/XUOzlOAPwgpWtJSKBoV2yRu 36 | BAYOQ0Pcci2xAh9ZZ99ty3ldI2ZSiAAdMdVmt/cYWCYrLqaYilb3hVn4M3dqlV7s 37 | rwJaFX4SwBBygZ2s5YSviVCpcyegsjQYUwrqRuOhzmF/P68VXUh0QQgoqdiGHYSD 38 | QDMnx6oEV17nylKgM0pYa8x/pMeYD5AS+U4HJJvNlLdmQHaeIhTlPym4IaGFRQim 39 | S5YXeQY5QQYfU3239rfgebOEnI8As2ExvMuxQCNYgiJyefKEPnPnmkSGMQUAEQEA 40 | AYkCHwQYAQgACQUCTBY7QQIbDAAKCRC/DrzRPZfNCe8rD/kBkQCRX376HBb8sDAU 41 | KQ69AjtMMw8v930ZC40GVeQg3u1HzRpRsyrb2sg1cMKe6YdgitBljdzgnlU4YArn 42 | 1sG56UouR99ggxhgxi865t/3uYSRziD0ynu+wYHiAIA9VnooRuBjCHSEwKzYs+ay 43 | ToohpXK6MXIibDrgbPpyIxyBOZQREdIz3SM0yZ3jCM799LOaOx9wjYOG5PNaGH/8 44 | /9UFnfVScXFF9wftYX79ynlPsI+pCk9kXd6X9QNcBuMngzlYdqBEkQCHsDKYsT9p 45 | qkmh7Q0JfjS6JbLXNbxRGiLxWexRtTKtyqhLGqV04YzyeyDMRsRTJSAJfzjk5X7p 46 | nYs32QZcnZIzBvhHq1IDWZk8TmV6fnbahyHhiFG4guo7jkn1R8pORwdxK30BvMIh 47 | 6Txmxiy5dkTlisZ6afQCe5bM0bjCaEnfVD+QwGwFX4coduyNO2SzjH4wYyfNdBpJ 48 | PHukkaDl3o5oYz3acydU+iIvr6g/8X6js3QOR3mWTWkZcJkfVqSgNG5iXNldqEmG 49 | 5oZVk9/eYhCckntcnmFlkq7125BUWgXlELDer4YHvCWbQnDDTwjM+lgXdxzfAdRa 50 | KRPqROG9L3ychiNjD/DYk5P+Z2o/xq7dRItb9WkYaikI7ixDMwdKxs+rB2rkvuUt 51 | ZuR5NzWtemeIZZeHVx9XjVufIw== 52 | =Nq/R 53 | -----END PGP PUBLIC KEY BLOCK----- 54 | -------------------------------------------------------------------------------- /debian/watch: -------------------------------------------------------------------------------- 1 | version=3 2 | opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/roxterm-$1\.tar\.gz/ \ 3 | https://github.com/realh/roxterm/tags .*/v?(\d\S+)\.tar\.gz, 4 | pgpsigurlmangle=s/archive\/(\d\S+)\.tar\.gz/releases\/download\/$1\/$1\.tar\.gz\.asc/ \ 5 | https://github.com/realh/roxterm/releases .*/(\d\S+)\.tar\.gz 6 | -------------------------------------------------------------------------------- /docs/en/index.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | ROXTerm 9 | 10 | 13 | 14 | 15 | 16 |
17 | 32 | 33 |
34 |
35 |

Welcome

36 | 37 |

ROXTerm is a terminal emulator intended to provide similar features to 38 | gnome-terminal, based on the same VTE library. It was originally designed to have a 39 | smaller footprint and quicker start-up time by not using the Gnome libraries and by 40 | using a separate applet to provide the configuration GUI, but thanks to all the 41 | features it's acquired over the years ROXTerm can probably now be accused of bloat. 42 | However, it is more configurable than gnome-terminal and aimed more at "power" users 43 | who make heavy use of terminals.

44 | 45 |

It still supports the ROX desktop application layout it was named after, but can 46 | also be installed in a more conventional manner for use in other desktop 47 | environments.

48 |
49 | 50 | 64 |
65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /docs/en/news.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | ROXTerm 9 | 10 | 13 | 14 | 15 | 16 |
17 | 32 | 33 |
34 |
35 |

News

36 | 37 | 38 | 39 |
40 | 2018-03-01 41 | Version 3.5.1 42 |
    43 |
  • Migrated to github.
  • 44 |
  • Use CMake build system.
  • 45 |
  • Fixed the geometry bug introduced by GTK 3.20.0.
  • 46 |
  • Removed X11-specific code and options for improved Wayland support.
  • 47 |
  • Minimum version requirements are now GTK 3.20 and vte 0.48.
  • 48 |
  • Improved support for URIs.
  • 49 |
  • Numerous other fixes and updates.
  • 50 |
51 |
52 | 53 |
54 | 2015-12-02 55 | Version 3.3.1 56 |
    57 |
  • Terminals running the default shell are only 58 | considered to be running (when confirming close actions) 59 | if the shells have child processes. This may only work 60 | in Linux.
  • 61 |
62 |
63 | 64 |
65 | 2015-08-11 66 | Version 3.1.1 67 |
    68 |
  • This version supports the saving and restoring 69 | of named user sessions.
  • 70 |
  • The initial number of tabs profile option has 71 | been removed; its functionality is better served by 72 | sessions.
  • 73 |
74 |
75 | 76 |
77 | 2015-07-09 78 | Version 3.0.1 79 |
    80 |
  • The GTK2 version has been dropped and only the 81 | vte-2.91 API (vte 0.38 or newer) is supported. You 82 | may need to change the background opacity setting (now 83 | found in the Appearance section of your profile) when 84 | upgrading from an earlier version.
  • 85 |
  • mscript.py now uses python3 by default, but is 86 | backwards compatible with python2. python3-lockfile is 87 | relatively new so you may need to explicitly run 88 | mscript.py in python2. To do this when building a 89 | Debian package edit debian/rules and change the 90 | dependencies in debian/control.
  • 91 |
92 |
93 |
94 |
95 | 96 | 110 |
111 | 112 | 113 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 |

English

11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/index.php: -------------------------------------------------------------------------------- 1 | . 5 | * Licence: GPL v3 or later. 6 | * This script is for uploading to the project web pages, 7 | * not for distribution with the package. 8 | */ 9 | function make_filename($lang, $page) 10 | { 11 | return str_replace('index.php', "$lang/$page.html", 12 | $_SERVER['SCRIPT_FILENAME']); 13 | } 14 | 15 | if (isset($_GET['page'])) 16 | { 17 | $page = $_GET['page']; 18 | } 19 | else 20 | { 21 | $page = 'index'; 22 | } 23 | if (isset($_GET['lang'])) 24 | { 25 | $lang = $_GET['lang']; 26 | setcookie('roxterm_lang', $lang); 27 | } 28 | elseif (isset($_COOKIE['roxterm_lang'])) 29 | { 30 | $lang = $_COOKIE['roxterm_lang']; 31 | } 32 | else 33 | { 34 | $lang = 'en'; 35 | } 36 | switch ($page) 37 | { 38 | case 'guide': 39 | case 'index': 40 | case 'installation': 41 | case 'news': 42 | break; 43 | default: 44 | $page = 'index'; 45 | } 46 | switch ($lang) 47 | { 48 | case 'en': 49 | case 'pt_BR': 50 | case 'fr': 51 | case 'es': 52 | case 'ru': 53 | case 'uk': 54 | break; 55 | default: 56 | $lang = 'en'; 57 | } 58 | $filename = make_filename($lang, $page); 59 | $file = fopen($filename, 'r'); 60 | if (!$file) 61 | { 62 | /* Redirect should cause a generic 404 */ 63 | header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . 64 | dirname($_SERVER['PHP_SELF']) . "/$lang/$page.html"); 65 | exit(); 66 | } 67 | while (!feof($file)) 68 | { 69 | $line = fgets($file); 70 | $line = str_replace('../lib/' , 'lib/', $line); 71 | $line = preg_replace('/href="(guide|index|installation|news)\.html"/', 72 | "href=\"index.php?page=\\1&lang=$lang\"", $line); 73 | if (trim($line) == '') 74 | { 75 | print '
'; 77 | print ''; 115 | print ''; 116 | print ''; 117 | print "
\n"; 118 | } 119 | else 120 | { 121 | print $line; 122 | } 123 | } 124 | fclose($file); 125 | ?> 126 | -------------------------------------------------------------------------------- /docs/lib/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/favicon.ico -------------------------------------------------------------------------------- /docs/lib/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/header.png -------------------------------------------------------------------------------- /docs/lib/logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/logo_text.png -------------------------------------------------------------------------------- /docs/lib/logo_text.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/logo_text.xcf -------------------------------------------------------------------------------- /docs/lib/logo_text_only.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/logo_text_only.png -------------------------------------------------------------------------------- /docs/lib/roxterm.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Author: Adrian Sampson 3 | */ 4 | 5 | html, body { 6 | background:#F3F3F3; 7 | font-family:Verdana,sans-serif; 8 | font-size:10pt; 9 | height:100%; 10 | margin:0; 11 | } 12 | 13 | h1, h2, h3, h4 { 14 | font-family:"Segoe UI","Trebuchet MS",Tahoma,sans-serif; 15 | } 16 | 17 | h1, h2, h3, h4, .newsItemHeader, a[href] { 18 | color:#4284C9; 19 | } 20 | 21 | h1 { 22 | border-bottom:1px solid #CCC; 23 | margin-top:0; 24 | padding-bottom:0.5em; 25 | } 26 | 27 | h2 { 28 | font-size:1.5em; 29 | position:relative; 30 | } 31 | 32 | /*hr { 33 | border-top:1px solid #CACACA; 34 | border-bottom:1px solid #FFF; 35 | }*/ 36 | 37 | a[href] { 38 | font-weight:bold; 39 | } 40 | 41 | a img { 42 | border:none; 43 | } 44 | 45 | #Container { 46 | min-height:100%; 47 | position:relative; 48 | } 49 | 50 | #Header, #Footer, #SubNav li a:hover { 51 | background:#222; 52 | } 53 | 54 | #Header { 55 | width:100%; 56 | height:7em; 57 | position:fixed; 58 | top:0; 59 | z-index:100; 60 | } 61 | 62 | #Header div { 63 | width:70em; 64 | margin:0 auto; 65 | white-space:nowrap; 66 | } 67 | 68 | #Logo { 69 | outline:none; 70 | text-decoration:none; 71 | margin:1.3em 3em 0 0; 72 | float:left; 73 | } 74 | 75 | #Logo img { 76 | border:none; 77 | vertical-align:middle; 78 | } 79 | 80 | #Header ul { 81 | list-style:none; 82 | padding:0; 83 | margin:3em 0 0; 84 | float:left; 85 | } 86 | 87 | #Header ul li { 88 | text-align:center; 89 | margin:0 1.5em; 90 | display:inline-block; 91 | } 92 | 93 | #Header ul li a, #SubNav li a { 94 | outline:none; 95 | text-decoration:none; 96 | font-family:"Segoe UI","Trebuchet MS",Tahoma,sans-serif; 97 | } 98 | 99 | #Header ul li a { 100 | border-bottom:3px solid transparent; 101 | color:#FAFAFA; 102 | font-family:'Trebuchet MS',sans-serif; 103 | /* font-size: 1.15em; */ 104 | padding-bottom: 0.35em; 105 | } 106 | 107 | #Header ul li a.active, #Header ul li a:hover { 108 | border-color:#4284C9; 109 | } 110 | 111 | #Middle { 112 | padding: 8em 0 9em; 113 | } 114 | 115 | a#TopAnchor { 116 | position:absolute; 117 | top:0; 118 | } 119 | 120 | #SubNav { 121 | list-style:none; 122 | width:25%; 123 | padding:0; 124 | margin:0; 125 | white-space:nowrap; 126 | position:fixed; 127 | left:0; 128 | } 129 | 130 | #SubNav li { 131 | margin:0.65em 0.5em; 132 | } 133 | 134 | #SubNav a { 135 | -moz-border-radius:0.75em; 136 | border-radius:0.75em; 137 | font-size:0.85em; 138 | padding:0.4em 1.25em; 139 | } 140 | 141 | #SubNav a:hover { 142 | color:#4891DE; 143 | } 144 | 145 | #Content { 146 | padding:0 4% 0 3%; 147 | } 148 | 149 | #Content.partialWidth { 150 | width:70%; 151 | padding-left:17.5em; 152 | } 153 | 154 | #Content li { 155 | color:#3A75B3; 156 | font-size:0.9em; 157 | font-weight:bold; 158 | } 159 | 160 | #Content li span { 161 | color:#000; 162 | font-weight:normal; 163 | } 164 | 165 | #Footer { 166 | border-top:2px solid #141414; 167 | width:100%; 168 | height:7em; 169 | padding:0.4em 0; 170 | clear:both; 171 | position:absolute; 172 | bottom:0; 173 | } 174 | 175 | #FooterButtons { 176 | text-align:center; 177 | width:200px; 178 | margin:0.25em auto 0.5em; 179 | } 180 | 181 | #FooterButtons a { 182 | color:#000; 183 | display:inline-block; 184 | } 185 | 186 | a#GithubLink { 187 | margin:0.25em 0 1em; 188 | color:#fff; 189 | text-decoration: none; 190 | } 191 | 192 | #FooterButtons a.spriteLink { 193 | background-image:url('sprites.png'); 194 | background-repeat:no-repeat; 195 | text-indent:-9999px; 196 | overflow:hidden; 197 | } 198 | 199 | a#DonationLink { 200 | background-position:left -30px; 201 | width:88px; 202 | height:32px; 203 | } 204 | 205 | a#ValidMarkupLink { 206 | background-position:-90px -30px; 207 | width:88px; 208 | height:31px; 209 | margin-bottom:1px; 210 | } 211 | 212 | #Footer p { 213 | color:#EEE; 214 | font-size:10px; 215 | text-align:center; 216 | margin:0; 217 | } 218 | 219 | .newsItem + .newsItem { 220 | border-top:1px solid #CCC; 221 | padding-top:1em; 222 | } 223 | 224 | .newsItemHeader, .newsItemSubHeader { 225 | font-weight:bold; 226 | display:block; 227 | } 228 | 229 | .newsItemHeader { 230 | font-size:1em; 231 | } 232 | 233 | .newsItemSubHeader { 234 | font-size:0.9em; 235 | margin:1em 0 0 2.5em; 236 | } 237 | 238 | .snippet { 239 | -moz-border-radius:0.75em; 240 | border-radius:0.75em; 241 | color:black; 242 | font-family:"Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono", 243 | "Liberation Mono","Nimbus Mono L",Monaco,monospace; 244 | font-size:0.85em; 245 | padding:1em; 246 | margin-left:2em; 247 | background:#ccc; 248 | } 249 | 250 | .snippet span { 251 | margin-left:0.5em; 252 | display:block; 253 | } 254 | 255 | a.toTop { 256 | font-size:0.75em; 257 | text-decoration:none; 258 | margin:0 0.5em; 259 | } 260 | 261 | a.pageAnchor { 262 | height:0; 263 | position:absolute; 264 | top:-5.45em; 265 | visibility:hidden; 266 | display:block; 267 | } 268 | 269 | /* Utility */ 270 | .indented , span.indented { 271 | margin-left:3em; 272 | } 273 | 274 | .centered { 275 | text-align:center; 276 | } 277 | 278 | .clear:after { 279 | content:'.'; 280 | height:0; 281 | clear:both; 282 | display:block; 283 | visibility:hidden; 284 | } 285 | 286 | /* Language selection form */ 287 | 288 | #Header { 289 | white-space:nowrap; 290 | } 291 | 292 | #Header form#LangForm { 293 | text-align:right; 294 | margin:3em 2em 0 0; 295 | } 296 | 297 | -------------------------------------------------------------------------------- /docs/lib/roxterm_ie.css: -------------------------------------------------------------------------------- 1 | /* IE6/IE7 fixes */ 2 | h1, h2, h3, h4, .newsItemHeader, a { 3 | color:#4284C9; 4 | } 5 | 6 | a { 7 | font-weight:bold; 8 | } 9 | 10 | #Header ul li { 11 | display:inline; 12 | } 13 | 14 | #Header ul li a { 15 | border-color:#222; 16 | display:block; 17 | } 18 | 19 | * html #Middle, 20 | * html #Content, 21 | * html #SubNav { 22 | padding-top:0; 23 | } 24 | 25 | #Middle { 26 | min-width:60em; 27 | width:auto; 28 | } 29 | 30 | * html #Middle { 31 | margin-top:2em; 32 | } 33 | 34 | #SubNav { 35 | min-width:25%; 36 | width:auto; 37 | } 38 | 39 | * html #SubNav { 40 | padding-left:1em; 41 | float:left; 42 | position:static; 43 | } 44 | 45 | * html #Content.partialWidth { 46 | padding:0 0 15em; 47 | margin:0 !important; 48 | float:left; 49 | } 50 | 51 | h2, h2 a.pageAnchor { 52 | position:static; 53 | top:0; 54 | } 55 | 56 | * html h2 a.pageAnchor { 57 | display:inline; 58 | } 59 | -------------------------------------------------------------------------------- /docs/lib/roxterm_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/roxterm_logo.png -------------------------------------------------------------------------------- /docs/lib/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/screenshot1.png -------------------------------------------------------------------------------- /docs/lib/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/screenshot2.png -------------------------------------------------------------------------------- /docs/lib/sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/realh/roxterm/26ae1e9baea889703c39270f86fb3c50a6b98619/docs/lib/sprites.png -------------------------------------------------------------------------------- /gendist.mk: -------------------------------------------------------------------------------- 1 | DOC_DIR = Help 2 | IMG_DIR = $(DOC_DIR)/lib 3 | LOGO_SVG = src/icons/roxterm.svg 4 | LOGO_PNG = $(IMG_DIR)/roxterm_logo.png 5 | FAVICON = $(IMG_DIR)/favicon.ico 6 | TEXT_LOGO = $(IMG_DIR)/logo_text.png 7 | TEXT_ONLY = $(IMG_DIR)/logo_text_only.png 8 | ALL = $(TEXT_LOGO) $(FAVICON) $(LOGO_PNG) \ 9 | $(ROXTERM_MAN) $(ROXTERM_CONFIG_MAN) 10 | 11 | all: $(ALL) 12 | 13 | $(LOGO_PNG): $(LOGO_SVG) 14 | $(CONVERT_SVG) $@ $? 15 | 16 | # Specify the inputs explicitly here in case $? doesn't guarantee they're 17 | # in the right order 18 | $(TEXT_LOGO): $(LOGO_PNG) $(TEXT_ONLY) 19 | $(COMPOSITE) -gravity SouthWest $(LOGO_PNG) $(TEXT_ONLY) $@ 20 | 21 | $(FAVICON): $(LOGO_PNG) 22 | $(CONVERT) $? -geometry 16x16 $@ 23 | 24 | DTD = http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl 25 | XMLTOMAN_OPTS = --novalid --param man.charmap.use.subset 0 $(DTD) 26 | XMLTOMAN = $(XSLTPROC) -o $@ $(XMLTOMAN_OPTS) $? 27 | 28 | $(ROXTERM_MAN): roxterm.1.xml 29 | $(XSLTPROC) -o $@ $(XMLTOMAN_OPTS) $? 30 | 31 | $(ROXTERM_CONFIG_MAN): roxterm-config.1.xml 32 | $(XSLTPROC) -o $@ $(XMLTOMAN_OPTS) $? 33 | 34 | clean: 35 | rm -f $(ALL) 36 | -------------------------------------------------------------------------------- /gendist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This script generates images etc that should be present in the release but 4 | # not in git, which aren't catered for very well by meson. 5 | 6 | cd `dirname "$0"` 7 | 8 | INKSCAPE=`which inkscape` 9 | RSVG=`which rsvg` 10 | if [ -z "$RSVG" ]; then 11 | RSVG=`which rsvg-convert` 12 | fi 13 | if [ -z "$INKSCAPE" -a -z "$RSVG" ]; then 14 | echo "Need inkscape or rsvg" >&2 15 | exit 1 16 | fi 17 | if [ ! -z "$RSVG" ]; then 18 | CONVERT_SVG="$RSVG -w 64 -h 64 -f png -o" 19 | else 20 | CONVERT_SVG="$INKSCAPE -w 64 -h 64 -e" 21 | fi 22 | 23 | CONVERT=`which convert` 24 | COMPOSITE=`which composite` 25 | if [ -z "$CONVERT" -o -z "$COMPOSITE" ]; then 26 | echo "Need convert and composite from ImageMagick" 27 | exit 1 28 | fi 29 | 30 | XSLTPROC=`which xsltproc` 31 | if [ -z "$XSLTPROC" ]; then 32 | echo "Need xsltproc" 33 | fi 34 | 35 | make -f preconf.mk CONVERT="$CONVERT" COMPOSITE="$COMPOSITE" \ 36 | CONVERT_SVG="$CONVERT_SVG" XSLTPROC="$XSLTPROC" 37 | -------------------------------------------------------------------------------- /genlog: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | EXCLUDE=" * Match window and terminal background colours" 4 | 5 | prev=HEAD 6 | use_grep=1 7 | 8 | # Merge x.y.0 entries with their subsequent release 9 | all=`git tag | grep '^[0-9]' | sort -r` 10 | first=`for i in $all; do echo $i; done | head -n 1` 11 | rest=`for i in $all; do echo $i; done | tail -n +2 | grep -v '\.0$'` 12 | if echo "$first" | grep -q '\.0$' ; then 13 | first=`echo $rest | sed 's/ .*//'` 14 | rest=`echo $rest | sed 's/^[^ ]* //'` 15 | fi 16 | 17 | for i in $first $rest; do 18 | [ "$prev" = "2.3.1" ] && use_grep=0 19 | if [ -n "`git log $i..$prev`" ] ; then 20 | printf "Version " 21 | if [ "$prev" = "HEAD" ] ; then 22 | git describe --match '[0-9]*' | sed 's/-/./;s/-/~/' 23 | else 24 | echo $prev 25 | fi 26 | # Need echo because if there's only one commit head strips trailing \n 27 | (git log '--pretty=format:Author: %an <%ae>%nDate: %aD' $i..$prev ; \ 28 | echo ) | head -n 2 29 | if [ $use_grep = 1 ] ; then 30 | git log '--pretty=format:%s' --grep='^\*' \ 31 | $i..$prev | sed "s/^\*/ */; s/[:.]$//; /$EXCLUDE/d" 32 | else 33 | git log '--pretty=format:%s' $i..$prev | sed 's/^/ * /; s/[:.]$//' 34 | fi 35 | echo 36 | echo 37 | fi 38 | prev=$i 39 | done 40 | cat `dirname $0`/ChangeLog.old 41 | -------------------------------------------------------------------------------- /mkycmflags: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import subprocess 5 | import sys 6 | 7 | clang_version = 5.0 8 | packages = ("gtk+-3.0", "vte-2.91", "libpcre2-8", "dbus-1", "dbus-glib-1") 9 | lang = "c" 10 | std = "c99" 11 | localincs = ("build/src",) 12 | 13 | clang_bin = "/usr/bin/clang-" + str(clang_version) 14 | 15 | here = os.path.abspath(os.path.dirname(sys.argv[0])) 16 | output = os.path.join(here, ".ycm_extra_conf.py") 17 | 18 | flags = [] 19 | 20 | subprocess.call( \ 21 | clang_bin + " -E -x" + lang + " -std=" + std + \ 22 | " -v - < /dev/null >/dev/null 2>" + \ 23 | output, 24 | shell = True) 25 | 26 | fp = open(output, 'r') 27 | inc = False 28 | for l in fp.readlines(): 29 | l = l.strip() 30 | if inc: 31 | if l.startswith("End"): 32 | break 33 | else: 34 | flags.extend(["-isystem", l]) 35 | elif l.startswith("#include <"): 36 | inc = True 37 | fp.close() 38 | 39 | os.unlink(output) 40 | subprocess.call("/usr/bin/pkg-config --cflags " + " ".join(packages) + 41 | " > " + output, shell = True) 42 | fp = open(output, 'r') 43 | flags.extend(fp.read().strip().split()) 44 | fp.close() 45 | 46 | for d in localincs: 47 | flags.append("-I" + os.path.join(here, d)) 48 | 49 | flags.extend(["-I.", "-Wall", "-Wextra", "-x"+lang, "-std="+std]) 50 | 51 | os.unlink(output) 52 | fp = open(output, 'w') 53 | fp.write( \ 54 | """def FlagsForFile(filename, **Kwargs): 55 | return { 56 | "flags": """ + str(flags) + """, 57 | "do_cache": True 58 | } 59 | """) 60 | fp.close() 61 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | es 2 | fr 3 | pt_BR 4 | ru 5 | uk 6 | -------------------------------------------------------------------------------- /po/Makevars: -------------------------------------------------------------------------------- 1 | # Makefile variables for PO directory in any package using GNU gettext. 2 | 3 | # Usually the message domain is the same as the package name. 4 | DOMAIN = $(PACKAGE) 5 | 6 | # These two variables depend on the location of this directory. 7 | subdir = po 8 | top_builddir = .. 9 | 10 | # These options get passed to xgettext. 11 | XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8 12 | 13 | # This is the copyright holder that gets inserted into the header of the 14 | # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding 15 | # package. (Note that the msgstr strings, extracted from the package's 16 | # sources, belong to the copyright holder of the package.) Translators are 17 | # expected to transfer the copyright for their translations to this person 18 | # or entity, or to disclaim their copyright. The empty string stands for 19 | # the public domain; in this case the translators are expected to disclaim 20 | # their copyright. 21 | COPYRIGHT_HOLDER = Tony Houghton 22 | 23 | # This is the email address or URL to which the translators shall report 24 | # bugs in the untranslated strings: 25 | # - Strings which are not entire sentences, see the maintainer guidelines 26 | # in the GNU gettext documentation, section 'Preparing Strings'. 27 | # - Strings which use unclear terms or require additional context to be 28 | # understood. 29 | # - Strings which make invalid assumptions about notation of date, time or 30 | # money. 31 | # - Pluralisation problems. 32 | # - Incorrect English spelling. 33 | # - Incorrect formatting. 34 | # It can be your email address, or a mailing list address where translators 35 | # can write to without being subscribed, or the URL of a web page through 36 | # which the translators can contact you. 37 | MSGID_BUGS_ADDRESS = http://sourceforge.net/projects/roxterm 38 | 39 | # This is the list of locale categories, beyond LC_MESSAGES, for which the 40 | # message catalogs shall be used. It is usually empty. 41 | EXTRA_LOCALE_CATEGORIES = 42 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | # List of source files which contain translatable strings. 2 | src/roxterm-config.ui 3 | src/about.c 4 | src/capplet.c 5 | src/colourgui.c 6 | src/colourscheme.c 7 | src/configlet.c 8 | src/dlg.c 9 | src/dragrcv.c 10 | src/getname.c 11 | src/globalopts.c 12 | src/main.c 13 | src/menutree.c 14 | src/multitab.c 15 | src/options.c 16 | src/optsdbus.c 17 | src/optsfile.c 18 | src/profilegui.c 19 | src/roxterm.c 20 | src/rtdbus.c 21 | src/search.c 22 | src/session-file.c 23 | src/shortcuts.c 24 | -------------------------------------------------------------------------------- /po4a/LINGUAS: -------------------------------------------------------------------------------- 1 | ../po/LINGUAS -------------------------------------------------------------------------------- /po4a/index.html.de.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: roxterm\n" 9 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 10 | "POT-Creation-Date: 2014-01-15 15:24+0000\n" 11 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 12 | "Last-Translator: Tony Houghton \n" 13 | "Language-Team: German (http://www.transifex.com/projects/p/roxterm/language/de/)\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Language: de\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #. type: Attribute 'lang' of: 21 | #: ../Help/en/index.html:3 22 | msgid "en-US" 23 | msgstr "" 24 | 25 | #. type: Attribute 'alt' of:
26 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 27 | msgid "ROXTerm" 28 | msgstr "" 29 | 30 | #. type: Content of:
31 | #: ../Help/en/index.html:19 32 | msgid "" 33 | msgstr "" 34 | 35 | #. type: Content of:
36 | #: ../Help/en/index.html:21 37 | msgid "" 38 | msgstr "" 39 | 40 | #. type: Content of:
  • 41 | #: ../Help/en/index.html:24 42 | msgid "Home" 43 | msgstr "" 44 | 45 | #. type: Content of:
    • 46 | #: ../Help/en/index.html:25 47 | msgid "News" 48 | msgstr "" 49 | 50 | #. type: Content of:
      • 51 | #: ../Help/en/index.html:26 52 | msgid "Installation" 53 | msgstr "" 54 | 55 | #. type: Content of:
        • 56 | #: ../Help/en/index.html:27 57 | msgid "User Guide" 58 | msgstr "" 59 | 60 | #. type: Content of:
          • 61 | #: ../Help/en/index.html:28 62 | msgid "" 63 | "Forums" 65 | msgstr "" 66 | 67 | #. type: Content of:

            68 | #: ../Help/en/index.html:36 69 | msgid "Welcome" 70 | msgstr "" 71 | 72 | #. type: Content of:

            73 | #: ../Help/en/index.html:38 74 | msgid "" 75 | "ROXTerm is a terminal emulator intended to provide similar features to " 76 | "gnome-terminal, based on the same VTE library. It was originally designed to" 77 | " have a smaller footprint and quicker start-up time by not using the Gnome " 78 | "libraries and by using a separate applet to provide the configuration GUI, " 79 | "but thanks to all the features it's acquired over the years ROXTerm can " 80 | "probably now be accused of bloat. However, it is more configurable than " 81 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 82 | "terminals." 83 | msgstr "" 84 | 85 | #. type: Content of:

            86 | #: ../Help/en/index.html:44 87 | msgid "" 88 | "It can be used as a ROX application, as the name implies, or in any other X " 89 | "environment." 90 | msgstr "" 91 | 92 | #. type: Content of:

            93 | #: ../Help/en/index.html:49 94 | msgid "" 95 | " roxterm @ sourceforge " 97 | msgstr "" 98 | 99 | #. type: Content of:
            100 | #: ../Help/en/index.html:55 101 | msgid "" 102 | "Donate " 104 | "Valid XHTML" 106 | msgstr "" 107 | 108 | #. type: Content of:

            109 | #: ../Help/en/index.html:59 110 | msgid "" 111 | "ROXTerm is licensed under the GPL | Site " 113 | "design by Adrian Sampson" 114 | msgstr "" 115 | -------------------------------------------------------------------------------- /po4a/index.html.es.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # Tony Houghton , 2010-2015 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: roxterm\n" 10 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 11 | "POT-Creation-Date: 2014-06-24 16:56+0100\n" 12 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 13 | "Last-Translator: Tony Houghton \n" 14 | "Language-Team: Spanish (http://www.transifex.com/projects/p/roxterm/language/" 15 | "es/)\n" 16 | "Language: es\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #. type: Attribute 'lang' of: 23 | #: ../Help/en/index.html:3 24 | msgid "en-US" 25 | msgstr "es-ES" 26 | 27 | #. type: Attribute 'alt' of:

            28 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 29 | msgid "ROXTerm" 30 | msgstr "ROXTerm" 31 | 32 | #. type: Content of:
            33 | #: ../Help/en/index.html:19 34 | msgid "" 35 | msgstr "" 36 | 37 | #. type: Content of:
            38 | #: ../Help/en/index.html:21 39 | msgid "" 40 | msgstr "" 41 | 42 | #. type: Content of:
            • 43 | #: ../Help/en/index.html:24 44 | msgid "Home" 45 | msgstr "Inicio" 46 | 47 | #. type: Content of:
              • 48 | #: ../Help/en/index.html:25 49 | msgid "News" 50 | msgstr "Noticias" 51 | 52 | #. type: Content of:
                • 53 | #: ../Help/en/index.html:26 54 | msgid "" 55 | "Installation" 56 | msgstr "" 57 | "Instalación" 58 | 59 | #. type: Content of:
                  • 60 | #: ../Help/en/index.html:27 61 | msgid "User Guide" 62 | msgstr "Guía de usuario" 63 | 64 | #. type: Content of:
                    • 65 | #: ../Help/en/index.html:28 66 | msgid "" 67 | "Forums" 69 | msgstr "" 70 | "Foros" 72 | 73 | #. type: Content of:

                      74 | #: ../Help/en/index.html:36 75 | msgid "Welcome" 76 | msgstr "Bienvenido" 77 | 78 | #. type: Content of:

                      79 | #: ../Help/en/index.html:38 80 | msgid "" 81 | "ROXTerm is a terminal emulator intended to provide similar features to gnome-" 82 | "terminal, based on the same VTE library. It was originally designed to have " 83 | "a smaller footprint and quicker start-up time by not using the Gnome " 84 | "libraries and by using a separate applet to provide the configuration GUI, " 85 | "but thanks to all the features it's acquired over the years ROXTerm can " 86 | "probably now be accused of bloat. However, it is more configurable than " 87 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 88 | "terminals." 89 | msgstr "" 90 | "ROXTerm es un emulador de terminal pensado para proporcionar características " 91 | "similares a gnome-terminal, basado en la misma librería VTE. Se diseñó " 92 | "originalmente para tener un menor consumo de memoria y un arranque más " 93 | "rápido al no utilizar las librerías de Gnome y al utilizar un applet " 94 | "separado para el interfaz de configuración, pero gracias a todas las " 95 | "características que ha adquirido a lo largo de los años ROXTerm puede ser " 96 | "probablemente acusado ahora de pesado. Sin embargo, es más configurable que " 97 | "gnome-terminal y se enfoca más a los usuarios «avanzados» que hacen un gran " 98 | "uso de las terminales." 99 | 100 | #. type: Content of:

                      101 | #: ../Help/en/index.html:44 102 | msgid "" 103 | "It can be used as a ROX application, as the name implies, or in any other X " 104 | "environment." 105 | msgstr "" 106 | "Se puede utilizar como una aplicación ROX, como su nombre indica, o con " 107 | "cualquier otro entorno X." 108 | 109 | #. type: Content of:

                      110 | #: ../Help/en/index.html:49 111 | msgid "" 112 | " roxterm @ sourceforge " 114 | msgstr "" 115 | 116 | #. type: Content of:
                      117 | #: ../Help/en/index.html:55 118 | msgid "" 119 | "Donate Valid XHTML" 123 | msgstr "" 124 | "Donar XHTML " 127 | "Válido" 128 | 129 | #. type: Content of:

                      130 | #: ../Help/en/index.html:59 131 | msgid "" 132 | "ROXTerm is licensed under the GPL | Site design by Adrian Sampson" 134 | msgstr "" 135 | "ROXTerm se publica bajo la licencia GPL | Diseño de la página web por Adrian " 137 | "Sampson | Traducción al español por Félix Medrano" 138 | -------------------------------------------------------------------------------- /po4a/index.html.fr.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # Philippe Etienne , 2014 7 | # Stéphane Aulery, 2012 8 | # Tetsumaki , 2011 9 | # Tony Houghton , 2010-2015 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: roxterm\n" 13 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 14 | "POT-Creation-Date: 2014-06-24 16:56+0100\n" 15 | "PO-Revision-Date: 2014-01-26 12:37+0000\n" 16 | "Last-Translator: Philippe Etienne \n" 17 | "Language-Team: French (http://www.transifex.com/projects/p/roxterm/language/" 18 | "fr/)\n" 19 | "Language: fr\n" 20 | "MIME-Version: 1.0\n" 21 | "Content-Type: text/plain; charset=UTF-8\n" 22 | "Content-Transfer-Encoding: 8bit\n" 23 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 24 | 25 | #. type: Attribute 'lang' of: 26 | #: ../Help/en/index.html:3 27 | msgid "en-US" 28 | msgstr "fr-FR" 29 | 30 | #. type: Attribute 'alt' of:

                      31 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 32 | msgid "ROXTerm" 33 | msgstr "ROXTerm" 34 | 35 | #. type: Content of:
                      36 | #: ../Help/en/index.html:19 37 | msgid "" 38 | msgstr "" 39 | 40 | #. type: Content of:
                      41 | #: ../Help/en/index.html:21 42 | msgid "" 43 | msgstr "" 44 | 45 | #. type: Content of:
                      • 46 | #: ../Help/en/index.html:24 47 | msgid "Home" 48 | msgstr "Accueil" 49 | 50 | #. type: Content of:
                        • 51 | #: ../Help/en/index.html:25 52 | msgid "News" 53 | msgstr "Nouveautés" 54 | 55 | #. type: Content of:
                          • 56 | #: ../Help/en/index.html:26 57 | msgid "" 58 | "Installation" 59 | msgstr "" 60 | "Installation" 61 | 62 | #. type: Content of:
                            • 63 | #: ../Help/en/index.html:27 64 | msgid "User Guide" 65 | msgstr "Guide utilisateur" 66 | 67 | #. type: Content of:
                              • 68 | #: ../Help/en/index.html:28 69 | msgid "" 70 | "Forums" 72 | msgstr "" 73 | "Forums" 75 | 76 | #. type: Content of:

                                77 | #: ../Help/en/index.html:36 78 | msgid "Welcome" 79 | msgstr "Bienvenue" 80 | 81 | #. type: Content of:

                                82 | #: ../Help/en/index.html:38 83 | msgid "" 84 | "ROXTerm is a terminal emulator intended to provide similar features to gnome-" 85 | "terminal, based on the same VTE library. It was originally designed to have " 86 | "a smaller footprint and quicker start-up time by not using the Gnome " 87 | "libraries and by using a separate applet to provide the configuration GUI, " 88 | "but thanks to all the features it's acquired over the years ROXTerm can " 89 | "probably now be accused of bloat. However, it is more configurable than " 90 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 91 | "terminals." 92 | msgstr "" 93 | "ROXTerm est un émulateur de terminal destiné à fournir des fonctionnalités " 94 | "similaires à gnome-terminal, basé sur la même bibliothèque VTE. Il a été " 95 | "initialement conçu pour avoir une plus petite empreinte et des temps de " 96 | "démarrage plus rapide en n'utilisant pas les bibliothèques Gnome et en " 97 | "utilisant un applet séparé pour fournir l'interface de configuration, mais " 98 | "grâce à toutes les fonctions qu'il a acquis au fil des années ROXTerm peut " 99 | "sans doute être maintenant taxé d'embonpoint. Cependant, il est plus " 100 | "configurable que gnome-terminal et vise les utilisateurs plus expérimentés " 101 | "qui font un usage intensif des terminaux." 102 | 103 | #. type: Content of:

                                104 | #: ../Help/en/index.html:44 105 | msgid "" 106 | "It can be used as a ROX application, as the name implies, or in any other X " 107 | "environment." 108 | msgstr "" 109 | "Il peut être utilisé comme une application ROX, comme son nom l'indique, ou " 110 | "dans tout autre environnement X." 111 | 112 | #. type: Content of:

                                113 | #: ../Help/en/index.html:49 114 | msgid "" 115 | " roxterm @ sourceforge " 117 | msgstr "" 118 | " roxterm @ sourceforge " 120 | 121 | #. type: Content of:
                                122 | #: ../Help/en/index.html:55 123 | msgid "" 124 | "Donate Valid XHTML" 128 | msgstr "" 129 | "Faire un don XHTML valide" 133 | 134 | #. type: Content of:

                                135 | #: ../Help/en/index.html:59 136 | msgid "" 137 | "ROXTerm is licensed under the GPL | Site design by Adrian Sampson" 139 | msgstr "" 140 | "ROXTerm est sous licence GPL | Site conçu par Adrian Sampson" 142 | -------------------------------------------------------------------------------- /po4a/index.html.gl.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # Tony Houghton , 2010 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: roxterm\n" 10 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 11 | "POT-Creation-Date: 2014-01-15 15:24+0000\n" 12 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 13 | "Last-Translator: Tony Houghton \n" 14 | "Language-Team: Galician (http://www.transifex.com/projects/p/roxterm/language/gl/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: gl\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #. type: Attribute 'lang' of: 22 | #: ../Help/en/index.html:3 23 | msgid "en-US" 24 | msgstr "" 25 | 26 | #. type: Attribute 'alt' of:

                                27 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 28 | msgid "ROXTerm" 29 | msgstr "" 30 | 31 | #. type: Content of:
                                32 | #: ../Help/en/index.html:19 33 | msgid "" 34 | msgstr "" 35 | 36 | #. type: Content of:
                                37 | #: ../Help/en/index.html:21 38 | msgid "" 39 | msgstr "" 40 | 41 | #. type: Content of:
                                • 42 | #: ../Help/en/index.html:24 43 | msgid "Home" 44 | msgstr "" 45 | 46 | #. type: Content of:
                                  • 47 | #: ../Help/en/index.html:25 48 | msgid "News" 49 | msgstr "" 50 | 51 | #. type: Content of:
                                    • 52 | #: ../Help/en/index.html:26 53 | msgid "Installation" 54 | msgstr "" 55 | 56 | #. type: Content of:
                                      • 57 | #: ../Help/en/index.html:27 58 | msgid "User Guide" 59 | msgstr "" 60 | 61 | #. type: Content of:
                                        • 62 | #: ../Help/en/index.html:28 63 | msgid "" 64 | "Forums" 66 | msgstr "" 67 | 68 | #. type: Content of:

                                          69 | #: ../Help/en/index.html:36 70 | msgid "Welcome" 71 | msgstr "" 72 | 73 | #. type: Content of:

                                          74 | #: ../Help/en/index.html:38 75 | msgid "" 76 | "ROXTerm is a terminal emulator intended to provide similar features to " 77 | "gnome-terminal, based on the same VTE library. It was originally designed to" 78 | " have a smaller footprint and quicker start-up time by not using the Gnome " 79 | "libraries and by using a separate applet to provide the configuration GUI, " 80 | "but thanks to all the features it's acquired over the years ROXTerm can " 81 | "probably now be accused of bloat. However, it is more configurable than " 82 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 83 | "terminals." 84 | msgstr "" 85 | 86 | #. type: Content of:

                                          87 | #: ../Help/en/index.html:44 88 | msgid "" 89 | "It can be used as a ROX application, as the name implies, or in any other X " 90 | "environment." 91 | msgstr "" 92 | 93 | #. type: Content of:

                                          94 | #: ../Help/en/index.html:49 95 | msgid "" 96 | " roxterm @ sourceforge " 98 | msgstr "" 99 | 100 | #. type: Content of:
                                          101 | #: ../Help/en/index.html:55 102 | msgid "" 103 | "Donate " 105 | "Valid XHTML" 107 | msgstr "" 108 | 109 | #. type: Content of:

                                          110 | #: ../Help/en/index.html:59 111 | msgid "" 112 | "ROXTerm is licensed under the GPL | Site " 114 | "design by Adrian Sampson" 115 | msgstr "" 116 | -------------------------------------------------------------------------------- /po4a/index.html.pt_BR.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # salmora8 , 2014 7 | # salmora8 , 2012 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: roxterm\n" 11 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 12 | "POT-Creation-Date: 2014-06-24 16:56+0100\n" 13 | "PO-Revision-Date: 2014-01-17 18:35+0000\n" 14 | "Last-Translator: salmora8 \n" 15 | "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" 16 | "roxterm/language/pt_BR/)\n" 17 | "Language: pt_BR\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 22 | 23 | #. type: Attribute 'lang' of: 24 | #: ../Help/en/index.html:3 25 | msgid "en-US" 26 | msgstr "pt-BR" 27 | 28 | #. type: Attribute 'alt' of:

                                          29 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 30 | msgid "ROXTerm" 31 | msgstr "ROXTerm" 32 | 33 | #. type: Content of:
                                          34 | #: ../Help/en/index.html:19 35 | msgid "" 36 | msgstr "" 37 | 38 | #. type: Content of:
                                          39 | #: ../Help/en/index.html:21 40 | msgid "" 41 | msgstr "" 42 | 43 | #. type: Content of:
                                          • 44 | #: ../Help/en/index.html:24 45 | msgid "Home" 46 | msgstr "Inicio" 47 | 48 | #. type: Content of:
                                            • 49 | #: ../Help/en/index.html:25 50 | msgid "News" 51 | msgstr "Notícias" 52 | 53 | #. type: Content of:
                                              • 54 | #: ../Help/en/index.html:26 55 | msgid "" 56 | "Installation" 57 | msgstr "" 58 | "Instalação" 59 | 60 | #. type: Content of:
                                                • 61 | #: ../Help/en/index.html:27 62 | msgid "User Guide" 63 | msgstr "Guia do Usuário" 64 | 65 | #. type: Content of:
                                                  • 66 | #: ../Help/en/index.html:28 67 | msgid "" 68 | "Forums" 70 | msgstr "" 71 | "Fóruns" 73 | 74 | #. type: Content of:

                                                    75 | #: ../Help/en/index.html:36 76 | msgid "Welcome" 77 | msgstr "Bem vindo" 78 | 79 | #. type: Content of:

                                                    80 | #: ../Help/en/index.html:38 81 | msgid "" 82 | "ROXTerm is a terminal emulator intended to provide similar features to gnome-" 83 | "terminal, based on the same VTE library. It was originally designed to have " 84 | "a smaller footprint and quicker start-up time by not using the Gnome " 85 | "libraries and by using a separate applet to provide the configuration GUI, " 86 | "but thanks to all the features it's acquired over the years ROXTerm can " 87 | "probably now be accused of bloat. However, it is more configurable than " 88 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 89 | "terminals." 90 | msgstr "" 91 | "ROXTerm é um emulador de terminal que pretende fornecer recursos semelhantes " 92 | "ao gnome-terminal, baseado na mesma biblioteca VTE. Ele foi originalmente " 93 | "projetado para haver um menor consumo de memória e um rápido tempo de " 94 | "arranque, não utilizando as bibliotecas do Gnome e utilizando um applet " 95 | "separado para fornecer uma interface gráfica de configuração, mas graças a " 96 | "todos os recursos que se adquiriu ao longo dos anos, ROXTerm pode " 97 | "provavelmente ser acusado de pesado. No entanto, é mais configurável que o " 98 | "gnome-terminal e destinado mais aos usuários \"avançados\" que fazem forte " 99 | "uso dos terminais." 100 | 101 | #. type: Content of:

                                                    102 | #: ../Help/en/index.html:44 103 | msgid "" 104 | "It can be used as a ROX application, as the name implies, or in any other X " 105 | "environment." 106 | msgstr "" 107 | "Pode-se utilizar como uma aplicação ROX, como o nome indica, ou em qualquer " 108 | "outro ambiente X." 109 | 110 | #. type: Content of:

                                                    111 | #: ../Help/en/index.html:49 112 | msgid "" 113 | " roxterm @ sourceforge " 115 | msgstr "" 116 | " roxterm @ sourceforge " 118 | 119 | #. type: Content of:
                                                    120 | #: ../Help/en/index.html:55 121 | msgid "" 122 | "Donate Valid XHTML" 126 | msgstr "" 127 | "Doar XHTML " 130 | "Válido" 131 | 132 | #. type: Content of:

                                                    133 | #: ../Help/en/index.html:59 134 | msgid "" 135 | "ROXTerm is licensed under the GPL | Site design by Adrian Sampson" 137 | msgstr "" 138 | "ROXTerm está licenciado sob a GPL | Design do site por Adrian Sampson | Tradução do " 140 | "Português Brasileiro por Alexandro Casanova" 141 | -------------------------------------------------------------------------------- /po4a/index.html.ru.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # Maxim Orlov , 2012 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: roxterm\n" 10 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 11 | "POT-Creation-Date: 2014-06-24 16:56+0100\n" 12 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 13 | "Last-Translator: Tony Houghton \n" 14 | "Language-Team: Russian (http://www.transifex.com/projects/p/roxterm/language/" 15 | "ru/)\n" 16 | "Language: ru\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 22 | 23 | #. type: Attribute 'lang' of: 24 | #: ../Help/en/index.html:3 25 | msgid "en-US" 26 | msgstr "ru-RU" 27 | 28 | #. type: Attribute 'alt' of:

                                                    29 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 30 | msgid "ROXTerm" 31 | msgstr "ROXTerm" 32 | 33 | #. type: Content of:
                                                    34 | #: ../Help/en/index.html:19 35 | msgid "" 36 | msgstr "" 37 | 38 | #. type: Content of:
                                                    39 | #: ../Help/en/index.html:21 40 | msgid "" 41 | msgstr "" 42 | 43 | #. type: Content of:
                                                    • 44 | #: ../Help/en/index.html:24 45 | msgid "Home" 46 | msgstr "На главную" 47 | 48 | #. type: Content of:
                                                      • 49 | #: ../Help/en/index.html:25 50 | msgid "News" 51 | msgstr "Новости" 52 | 53 | #. type: Content of:
                                                        • 54 | #: ../Help/en/index.html:26 55 | msgid "" 56 | "Installation" 57 | msgstr "" 58 | "Установка" 59 | 60 | #. type: Content of:
                                                          • 61 | #: ../Help/en/index.html:27 62 | msgid "User Guide" 63 | msgstr "" 64 | "Руководство пользователя" 65 | 66 | #. type: Content of:
                                                            • 67 | #: ../Help/en/index.html:28 68 | msgid "" 69 | "Forums" 71 | msgstr "" 72 | "Форум" 74 | 75 | #. type: Content of:

                                                              76 | #: ../Help/en/index.html:36 77 | msgid "Welcome" 78 | msgstr "Добро пожаловать" 79 | 80 | #. type: Content of:

                                                              81 | #: ../Help/en/index.html:38 82 | msgid "" 83 | "ROXTerm is a terminal emulator intended to provide similar features to gnome-" 84 | "terminal, based on the same VTE library. It was originally designed to have " 85 | "a smaller footprint and quicker start-up time by not using the Gnome " 86 | "libraries and by using a separate applet to provide the configuration GUI, " 87 | "but thanks to all the features it's acquired over the years ROXTerm can " 88 | "probably now be accused of bloat. However, it is more configurable than " 89 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 90 | "terminals." 91 | msgstr "" 92 | "ROXTerm это эмулятор терминала предназначенный для обеспечения аналогичных " 93 | "возможностей gnome-terminal, основанный на той же библиотеке VTE. " 94 | "Первоначально он был разработан как минималистичный, быстрый и не зависящий " 95 | "от Gnome-библиотек, с отдельной программой обеспечивающей конфигурацию " 96 | "интерфейса. Но, благодаря всем функциям приобретённым за несколько лет " 97 | "разработки, теперь, вероятно может быть обвинен в излишней навороченности. " 98 | "Тем не менее, ROXTerm более настраиваемый, чем gnome-terminal и в большей " 99 | "степени направлен на продвинутых пользователей, которые интенсивно " 100 | "используют командную строку." 101 | 102 | #. type: Content of:

                                                              103 | #: ../Help/en/index.html:44 104 | msgid "" 105 | "It can be used as a ROX application, as the name implies, or in any other X " 106 | "environment." 107 | msgstr "" 108 | "Он может быть использован в качестве ROX-приложения, как следует из " 109 | "названия, или в любой другой среде X." 110 | 111 | #. type: Content of:

                                                              112 | #: ../Help/en/index.html:49 113 | msgid "" 114 | " roxterm @ sourceforge " 116 | msgstr "" 117 | 118 | #. type: Content of:
                                                              119 | #: ../Help/en/index.html:55 120 | msgid "" 121 | "Donate Valid XHTML" 125 | msgstr "" 126 | "Пожертвовать Valid XHTML" 130 | 131 | #. type: Content of:

                                                              132 | #: ../Help/en/index.html:59 133 | msgid "" 134 | "ROXTerm is licensed under the GPL | Site design by Adrian Sampson" 136 | msgstr "" 137 | "ROXTerm лицензирован под GPL | Дизайн сайта Adrian Sampson" 139 | -------------------------------------------------------------------------------- /po4a/index.html.uk.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | # Translator: Rax G , 2012 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: roxterm\n" 10 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 11 | "POT-Creation-Date: 2014-06-24 16:56+0100\n" 12 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 13 | "Last-Translator: Tony Houghton \n" 14 | "Language-Team: Ukrainian (http://www.transifex.com/projects/p/roxterm/" 15 | "language/uk/)\n" 16 | "Language: uk\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 22 | 23 | #. type: Attribute 'lang' of: 24 | #: ../Help/en/index.html:3 25 | msgid "en-US" 26 | msgstr "uk-UA" 27 | 28 | #. type: Attribute 'alt' of:

                                                              29 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 30 | msgid "ROXTerm" 31 | msgstr "ROXTerm" 32 | 33 | #. type: Content of:
                                                              34 | #: ../Help/en/index.html:19 35 | msgid "" 36 | msgstr "" 37 | 38 | #. type: Content of:
                                                              39 | #: ../Help/en/index.html:21 40 | msgid "" 41 | msgstr "" 42 | 43 | #. type: Content of:
                                                              • 44 | #: ../Help/en/index.html:24 45 | msgid "Home" 46 | msgstr "Хата" 47 | 48 | #. type: Content of:
                                                                • 49 | #: ../Help/en/index.html:25 50 | msgid "News" 51 | msgstr "Новини" 52 | 53 | #. type: Content of:
                                                                  • 54 | #: ../Help/en/index.html:26 55 | msgid "" 56 | "Installation" 57 | msgstr "" 58 | "Встановлення" 59 | 60 | #. type: Content of:
                                                                    • 61 | #: ../Help/en/index.html:27 62 | msgid "User Guide" 63 | msgstr "Інструкція" 64 | 65 | #. type: Content of:
                                                                      • 66 | #: ../Help/en/index.html:28 67 | msgid "" 68 | "Forums" 70 | msgstr "" 71 | "Форуми" 73 | 74 | #. type: Content of:

                                                                        75 | #: ../Help/en/index.html:36 76 | msgid "Welcome" 77 | msgstr "Вітаємо" 78 | 79 | #. type: Content of:

                                                                        80 | #: ../Help/en/index.html:38 81 | msgid "" 82 | "ROXTerm is a terminal emulator intended to provide similar features to gnome-" 83 | "terminal, based on the same VTE library. It was originally designed to have " 84 | "a smaller footprint and quicker start-up time by not using the Gnome " 85 | "libraries and by using a separate applet to provide the configuration GUI, " 86 | "but thanks to all the features it's acquired over the years ROXTerm can " 87 | "probably now be accused of bloat. However, it is more configurable than " 88 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 89 | "terminals." 90 | msgstr "" 91 | "ROXTerm — емулятор терміналу, початковою задачею якого було надання функцій, " 92 | "властивих gnome-terminal (включно з використанням бібліотеки VTE), з меншим " 93 | "використанням системних ресурсів і швидшим запуском завдяки утриманню від " 94 | "бібліотек GNOME і використанню власного аплету налаштування інтерфейсу. З " 95 | "роками ROXTerm «навчився» достатній кількості можливостей, щоб " 96 | "звинувачуватись у роздутості, як і його основний конкурент. Проте ROXTerm " 97 | "дозволяє гнучкіше налаштування, ніж gnome-terminal, і спрямовується в бік " 98 | "досвідчених користувачів, що активно користуються терміналами." 99 | 100 | #. type: Content of:

                                                                        101 | #: ../Help/en/index.html:44 102 | msgid "" 103 | "It can be used as a ROX application, as the name implies, or in any other X " 104 | "environment." 105 | msgstr "" 106 | "Його можна використовувати як у ROX (про що каже назва), так і в будь-якому " 107 | "іншому X-середовищі." 108 | 109 | #. type: Content of:

                                                                        110 | #: ../Help/en/index.html:49 111 | msgid "" 112 | " roxterm @ sourceforge " 114 | msgstr "" 115 | 116 | #. type: Content of:
                                                                        117 | #: ../Help/en/index.html:55 118 | msgid "" 119 | "Donate Valid XHTML" 123 | msgstr "" 124 | "Внести пожертвування Дійсний XHTML" 128 | 129 | #. type: Content of:

                                                                        130 | #: ../Help/en/index.html:59 131 | msgid "" 132 | "ROXTerm is licensed under the GPL | Site design by Adrian Sampson" 134 | msgstr "" 135 | "ROXTerm підлягає умовам GPL | Дизайнер сайту — Adrian Sampson" 137 | -------------------------------------------------------------------------------- /po4a/index.html.zh_CN.po: -------------------------------------------------------------------------------- 1 | # Translations for roxterm docs 2 | # Copyright (C) 2010 Tony Houghton 3 | # This file is distributed under the same license as the roxterm package. 4 | # 5 | # Translators: 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: roxterm\n" 9 | "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=124080\n" 10 | "POT-Creation-Date: 2014-01-15 15:24+0000\n" 11 | "PO-Revision-Date: 2014-01-15 15:33+0000\n" 12 | "Last-Translator: Tony Houghton \n" 13 | "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/roxterm/language/zh_CN/)\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Language: zh_CN\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #. type: Attribute 'lang' of: 21 | #: ../Help/en/index.html:3 22 | msgid "en-US" 23 | msgstr "" 24 | 25 | #. type: Attribute 'alt' of:

                                                                        26 | #: ../Help/en/index.html:8 ../Help/en/index.html:20 27 | msgid "ROXTerm" 28 | msgstr "" 29 | 30 | #. type: Content of:
                                                                        31 | #: ../Help/en/index.html:19 32 | msgid "" 33 | msgstr "" 34 | 35 | #. type: Content of:
                                                                        36 | #: ../Help/en/index.html:21 37 | msgid "" 38 | msgstr "" 39 | 40 | #. type: Content of:
                                                                        • 41 | #: ../Help/en/index.html:24 42 | msgid "Home" 43 | msgstr "" 44 | 45 | #. type: Content of:
                                                                          • 46 | #: ../Help/en/index.html:25 47 | msgid "News" 48 | msgstr "" 49 | 50 | #. type: Content of:
                                                                            • 51 | #: ../Help/en/index.html:26 52 | msgid "Installation" 53 | msgstr "" 54 | 55 | #. type: Content of:
                                                                              • 56 | #: ../Help/en/index.html:27 57 | msgid "User Guide" 58 | msgstr "" 59 | 60 | #. type: Content of:
                                                                                • 61 | #: ../Help/en/index.html:28 62 | msgid "" 63 | "Forums" 65 | msgstr "" 66 | 67 | #. type: Content of:

                                                                                  68 | #: ../Help/en/index.html:36 69 | msgid "Welcome" 70 | msgstr "" 71 | 72 | #. type: Content of:

                                                                                  73 | #: ../Help/en/index.html:38 74 | msgid "" 75 | "ROXTerm is a terminal emulator intended to provide similar features to " 76 | "gnome-terminal, based on the same VTE library. It was originally designed to" 77 | " have a smaller footprint and quicker start-up time by not using the Gnome " 78 | "libraries and by using a separate applet to provide the configuration GUI, " 79 | "but thanks to all the features it's acquired over the years ROXTerm can " 80 | "probably now be accused of bloat. However, it is more configurable than " 81 | "gnome-terminal and aimed more at \"power\" users who make heavy use of " 82 | "terminals." 83 | msgstr "" 84 | 85 | #. type: Content of:

                                                                                  86 | #: ../Help/en/index.html:44 87 | msgid "" 88 | "It can be used as a ROX application, as the name implies, or in any other X " 89 | "environment." 90 | msgstr "" 91 | 92 | #. type: Content of:

                                                                                  93 | #: ../Help/en/index.html:49 94 | msgid "" 95 | " roxterm @ sourceforge " 97 | msgstr "" 98 | 99 | #. type: Content of:
                                                                                  100 | #: ../Help/en/index.html:55 101 | msgid "" 102 | "Donate " 104 | "Valid XHTML" 106 | msgstr "" 107 | 108 | #. type: Content of:

                                                                                  109 | #: ../Help/en/index.html:59 110 | msgid "" 111 | "ROXTerm is licensed under the GPL | Site " 113 | "design by Adrian Sampson" 114 | msgstr "" 115 | -------------------------------------------------------------------------------- /release_version: -------------------------------------------------------------------------------- 1 | 3.16.3 -------------------------------------------------------------------------------- /roxterm-config.1.xml.in: -------------------------------------------------------------------------------- 1 | 2 | .

                                                                                  will be generated. You 10 | may view the manual page with: nroff -man .
                                                                                  | less'. 11 | A typical entry in a Makefile or Makefile.am is: 12 | 13 | DB2MAN=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl 14 | XP=xsltproc -''-nonet 15 | 16 | manpage.1: manpage.dbk 17 | $(XP) $(DB2MAN) $< 18 | 19 | The xsltproc binary is found in the xsltproc package. The 20 | XSL files are in docbook-xsl. Please remember that if you 21 | create the nroff version in one of the debian/rules file 22 | targets (such as build), you will need to include xsltproc 23 | and docbook-xsl in your Build-Depends control field. 24 | 25 | --> 26 | 27 | 28 | Tony"> 29 | Houghton"> 30 | 31 | November 19, 2011"> 32 | 34 | 1"> 35 | h@realh.co.uk"> 36 | 37 | roxterm"> 38 | 39 | 40 | 41 | Debian"> 42 | GNU"> 43 | GPL"> 44 | ]> 45 | 46 | 47 | 48 |
                                                                                  49 | &dhemail; 50 |
                                                                                  51 | 52 | Developer 53 | &dhfirstname; &dhsurname; 54 | 55 | 56 | 2005-2015 57 | &dhusername; 58 | 59 | &dhdate; 60 |
                                                                                  61 | 62 | &dhucpackage; 63 | &dhsection; 64 | &product; 65 | @VERSION@ 66 | User Commands 67 | 68 | 69 | &dhpackage; 70 | 71 | terminal emulator 72 | 73 | 74 | 75 | &dhpackage; 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | DESCRIPTION 85 | 86 | This manual page documents briefly the 87 | &dhpackage; command. 88 | 89 | &dhpackage; is for configuring ROXTerm, the 90 | terminal emulator. 91 | 92 | 93 | 94 | OPTIONS 95 | 96 | These programs follow the usual &gnu; command line syntax, 97 | with long options starting with two dashes (`-'). A summary of 98 | options is included below. 99 | 100 | 101 | 102 | 103 | 104 | 105 | Application directory when run as a ROX app. 106 | 107 | 108 | 109 | 110 | 111 | 112 | Edit the named profile. 113 | 114 | 115 | 116 | 117 | 118 | 119 | Edit the named colour scheme. 120 | 121 | 122 | 123 | 124 | 125 | 126 | Do nothing but wait for ROXTerm to request operations 127 | via D-BUS. 128 | 129 | 130 | 131 | 132 | 133 | SEE ALSO 134 | 135 | roxterm-config is usually run by roxterm. The package is 136 | documented fully by the HTML file 137 | file://@CMAKE_INSTALL_FULL_DOCDIR@/en/index.html. 138 | 139 | 140 | AUTHOR 141 | 142 | This manual page was written by &dhusername; &dhemail;. 143 | Permission is granted to copy, distribute and/or modify this document 144 | under the terms of the &gnu; General Public License, Version 2 or any 145 | later version published by the Free Software Foundation. 146 | 147 | 148 | On Debian systems, the complete text of the GNU General Public 149 | License can be found in /usr/share/common-licenses/GPL. 150 | 151 | 152 | 153 |
                                                                                  154 | 155 | -------------------------------------------------------------------------------- /roxterm.lsm.in: -------------------------------------------------------------------------------- 1 | Begin3 2 | Title: roxterm 3 | Version: @VERSION@ 4 | Entered-date: @ISODATE@ 5 | Description: Multi-tabbed GTK/VTE terminal emulator 6 | @configure_input@ 7 | ROXTerm is a terminal emulator based on the VTE library. It was 8 | originally intended to be a lightweight alternative to gnome-terminal, 9 | but its role has shifted to providing a richer range of features for 10 | power users. It can be used as a ROX application, as the name implies, 11 | but also integrates well with other X desktop environments such as 12 | GNOME. 13 | Keywords: terminal emulator 14 | Author: h@realh.co.uk (Tony Houghton) 15 | Maintained-by: h@realh.co.uk (Tony Houghton) 16 | Primary-site: http://github.com/realh/roxterm 17 | 31k roxterm-@VERSION@.tar.gz 18 | 500 roxterm.lsm 19 | Alternate-site: 20 | Original-site: 21 | Platforms: 22 | Copying-policy: GNU copyleft 23 | End 24 | -------------------------------------------------------------------------------- /roxterm.metainfo.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | roxterm.desktop 5 | CC-BY-4.0 6 | GPL-2.0+ and LGPL-3.0+ 7 | ROXTerm 8 | Terminal emulator 9 | 10 |

                                                                                  11 | ROXTerm is a terminal emulator intended to provide similar features to 12 | gnome-terminal, based on the same VTE library. It is more configurable than 13 | gnome-terminal and aimed more at "power" users who make heavy use of 14 | terminals. 15 |

                                                                                  16 |
                                                                                  17 | 18 | 19 | http://roxterm.sourceforge.net/lib/screenshot1.png 20 | 21 | http://roxterm.sourceforge.net/lib/screenshot2.png 22 | 23 | https://github.com/realh/roxterm 24 | h@realh.co.uk 25 | GNOME 26 | 27 | HiDpiIcon 28 | ModernToolkit 29 | UserDocs 30 | 31 |
                                                                                  32 | -------------------------------------------------------------------------------- /roxterm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ROXTerm 7 | roxterm 8 | roxterm 9 | roxterm 10 | false 11 | false 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/about.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | #include "defns.h" 22 | 23 | #include 24 | 25 | #include "about.h" 26 | #include "glib.h" 27 | #include "resources.h" 28 | #include "version.h" 29 | 30 | static GtkWidget *about_dialog_create(void) 31 | { 32 | GtkWidget *about = gtk_about_dialog_new(); 33 | GtkAboutDialog *ad = GTK_ABOUT_DIALOG(about); 34 | char const *authors[] = { _("Tony Houghton "), 35 | _("Thanks to the developers of VTE"), 36 | NULL }; 37 | 38 | gtk_about_dialog_set_program_name(ad, "ROXTerm"); 39 | gtk_about_dialog_set_version(ad, VERSION); 40 | gtk_about_dialog_set_copyright(ad, _("(c) 2005-2018 Tony Houghton")); 41 | gtk_about_dialog_set_website(ad, "https://realh.github.io/roxterm"); 42 | gtk_about_dialog_set_authors(ad, authors); 43 | resources_access_icon(); 44 | gtk_about_dialog_set_logo_icon_name(ad, "roxterm"); 45 | return about; 46 | } 47 | 48 | void about_dialog_show(GtkWindow *parent, 49 | gboolean (*uri_handler)(GtkAboutDialog *, char *, gpointer), 50 | gpointer hook_data 51 | ) 52 | { 53 | GtkWidget *ad; 54 | 55 | ad = about_dialog_create(); 56 | if (parent) 57 | gtk_window_set_transient_for(GTK_WINDOW(ad), parent); 58 | g_signal_connect(ad, "activate-link", G_CALLBACK(uri_handler), hook_data); 59 | gtk_dialog_run(GTK_DIALOG(ad)); 60 | gtk_widget_destroy(ad); 61 | } 62 | 63 | /* vi:set sw=4 ts=4 et cindent cino= */ 64 | -------------------------------------------------------------------------------- /src/about.h: -------------------------------------------------------------------------------- 1 | #ifndef ABOUT_H 2 | #define ABOUT_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | void about_dialog_show(GtkWindow *parent, 28 | gboolean (*uri_handler)(GtkAboutDialog *, char *, gpointer), 29 | gpointer hook_data 30 | ); 31 | 32 | #endif /* ABOUT_H */ 33 | 34 | /* vi:set sw=4 ts=4 et cindent cino= */ 35 | -------------------------------------------------------------------------------- /src/boxcompat.h: -------------------------------------------------------------------------------- 1 | #ifndef BOXCOMPAT_H 2 | #define BOXCOMPAT_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | /* Makes it easy to migrate from GtkBox to GtkGrid */ 23 | 24 | #ifndef DEFNS_H 25 | #include "defns.h" 26 | #endif 27 | 28 | inline static void box_compat_pack(GtkWidget *box, GtkWidget *child, 29 | gboolean hexpand, gboolean vexpand, int hspacing, int vspacing) 30 | { 31 | gtk_container_add(GTK_CONTAINER(box), child); 32 | g_object_set(child, "hexpand", hexpand, "vexpand", vexpand, 33 | "margin-start", hspacing, "margin-end", hspacing, 34 | "margin-top", vspacing, "margin-bottom", vspacing, 35 | NULL); 36 | } 37 | 38 | inline static void box_compat_packh(GtkWidget *box, GtkWidget *child, 39 | gboolean expand, int spacing) 40 | { 41 | box_compat_pack(box, child, expand, TRUE, spacing / 2, 0); 42 | } 43 | 44 | inline static void box_compat_packv(GtkWidget *box, GtkWidget *child, 45 | gboolean expand, int spacing) 46 | { 47 | box_compat_pack(box, child, TRUE, expand, 0, spacing / 2); 48 | } 49 | 50 | #endif /* BOXCOMPAT_H */ 51 | 52 | /* vi:set sw=4 ts=4 et cindent cino= */ 53 | -------------------------------------------------------------------------------- /src/capplet.h: -------------------------------------------------------------------------------- 1 | #ifndef CAPPLET_H 2 | #define CAPPLET_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Main part of capplet program and tools for other parts */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | #include "options.h" 30 | 31 | typedef struct { 32 | GtkBuilder *builder; 33 | Options *options; 34 | } CappletData; 35 | 36 | /* This is set when one of the widgets is being changed by the program, so we 37 | * should ignore the resultant signal */ 38 | extern gboolean capplet_ignore_changes; 39 | 40 | void capplet_save_file(Options * options); 41 | 42 | /* Set a value, save file and send DBus message */ 43 | void capplet_set_int(Options * options, const char *name, int value); 44 | 45 | void capplet_set_string(Options * options, const char *name, const char *value); 46 | 47 | void capplet_set_float(Options * options, const char *name, double value); 48 | 49 | /* Returns -1 if there's an error */ 50 | int capplet_which_radio_is_selected(GtkWidget *widget); 51 | 52 | void capplet_set_radio_by_index(GtkBuilder *builder, 53 | const char *basename, int index); 54 | 55 | inline static GtkWidget *capplet_lookup_widget(const CappletData *capp, 56 | const char *name) 57 | { 58 | return GTK_WIDGET(gtk_builder_get_object(capp->builder, name)); 59 | } 60 | 61 | /**********************************************/ 62 | /* Generic handlers */ 63 | 64 | void on_boolean_toggled(GtkToggleButton * button, CappletData *); 65 | 66 | /* Returns false if the event should be ignored */ 67 | void on_radio_toggled(GtkToggleButton * button, CappletData *); 68 | 69 | void on_spin_button_changed(GtkSpinButton * button, CappletData *); 70 | 71 | void on_float_spin_button_changed(GtkSpinButton * button, CappletData *); 72 | 73 | void on_float_range_changed(GtkRange * range, CappletData *); 74 | 75 | void on_combo_changed(GtkComboBox * combo, CappletData *); 76 | 77 | /**********************************************/ 78 | 79 | /* As capplet_set_boolean_toggle but sets the given state instead of 80 | * looking up option */ 81 | void capplet_set_toggle(CappletData *capp, const char *name, gboolean state); 82 | 83 | /* Convenience functions to lookup an option and set the widget with the same 84 | * name. Returns the option's value */ 85 | gboolean capplet_set_boolean_toggle(CappletData *capp, 86 | const char *name, gboolean dflt); 87 | 88 | void capplet_set_text_entry(CappletData *capp, 89 | const char *name, const char *dflt); 90 | 91 | void capplet_set_radio(CappletData *capp, 92 | const char *name, int dflt); 93 | 94 | void capplet_set_spin_button(CappletData *capp, 95 | const char *name, int dflt); 96 | 97 | void capplet_set_spin_button_float(CappletData *capp, 98 | const char *name); 99 | 100 | void capplet_set_float_range(CappletData *capp, 101 | const char *name, double dflt); 102 | 103 | void capplet_set_combo(CappletData *capp, 104 | const char *name, int dflt); 105 | 106 | /* Keep track of number of open windows and quit when it reaches 0 */ 107 | void capplet_inc_windows(void); 108 | void capplet_dec_windows(void); 109 | 110 | #endif /* CAPPLET_H */ 111 | 112 | /* vi:set sw=4 ts=4 et cindent cino= */ 113 | -------------------------------------------------------------------------------- /src/colourgui.h: -------------------------------------------------------------------------------- 1 | #ifndef COLOURGUI_H 2 | #define COLOURGUI_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | /* Editing of a Colour with a GUI */ 28 | 29 | typedef struct _ColourGUI ColourGUI; 30 | 31 | /* Loads a Colour and creates a working dialog box for it. 32 | * Creates new colour scheme if it doesn't already exist */ 33 | ColourGUI *colourgui_open(const char *colour_scheme_name); 34 | 35 | void colourgui_delete(ColourGUI *); 36 | 37 | /* Handlers declared extern for GtkBuilder */ 38 | void on_Colour_Editor_destroy(GtkWidget *widget, ColourGUI * cg); 39 | void on_Colour_Editor_response(GtkWidget *widget, gint response, ColourGUI *cg); 40 | void on_Colour_Editor_close(GtkWidget *widget, ColourGUI * cg); 41 | void on_color_set(GtkColorButton *button, ColourGUI * cg); 42 | void on_set_fgbg_toggled(GtkToggleButton *button, ColourGUI * cg); 43 | void on_fgbg_track_palette_toggled(GtkToggleButton *button, ColourGUI * cg); 44 | void on_set_cursor_colour_toggled(GtkToggleButton *button, ColourGUI *cg); 45 | void on_palette_size_toggled(GtkToggleButton *button, ColourGUI *cg); 46 | void on_use_custom_colours_toggled(GtkToggleButton *button, ColourGUI *cg); 47 | 48 | #endif /* COLOURGUI_H */ 49 | 50 | /* vi:set sw=4 ts=4 et cindent cino= */ 51 | -------------------------------------------------------------------------------- /src/colourscheme.h: -------------------------------------------------------------------------------- 1 | #ifndef COLOURSCHEME_H 2 | #define COLOURSCHEME_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Colours are represented by strings as understood by gdk_color/rgba_parse */ 24 | 25 | #include "options.h" 26 | 27 | Options *colour_scheme_lookup_and_ref(const char *scheme); 28 | 29 | gboolean colour_scheme_unref(Options * opts); 30 | 31 | int colour_scheme_get_palette_size(Options * opts); 32 | 33 | /* A palette always has 16 valid entries even if logical palette size is 34 | * smaller */ 35 | GdkRGBA *colour_scheme_get_palette(Options * opts); 36 | 37 | /* If allow_null is FALSE a default colour is used */ 38 | GdkRGBA *colour_scheme_get_cursor_colour(Options * opts, 39 | gboolean allow_null); 40 | 41 | GdkRGBA *colour_scheme_get_cursorfg_colour(Options * opts, 42 | gboolean allow_null); 43 | 44 | GdkRGBA *colour_scheme_get_bold_colour(Options * opts, 45 | gboolean allow_null); 46 | 47 | GdkRGBA *colour_scheme_get_foreground_colour(Options * opts, 48 | gboolean allow_null); 49 | 50 | GdkRGBA *colour_scheme_get_background_colour(Options * opts, 51 | gboolean allow_null); 52 | 53 | void colour_scheme_set_palette_size(Options * opts, int size); 54 | 55 | void colour_scheme_set_palette_entry(Options * opts, int index, 56 | const char *colour_name); 57 | 58 | void colour_scheme_set_cursor_colour(Options * opts, const char *colour_name); 59 | 60 | void 61 | colour_scheme_set_cursorfg_colour(Options * opts, const char *colour_name); 62 | 63 | void colour_scheme_set_bold_colour(Options * opts, const char *colour_name); 64 | 65 | void colour_scheme_set_foreground_colour(Options * opts, 66 | const char *colour_name); 67 | 68 | void colour_scheme_set_background_colour(Options * opts, 69 | const char *colour_name); 70 | 71 | void colour_scheme_reset_cached_data(Options *opts); 72 | 73 | #endif /* COLOURSCHEME_H */ 74 | 75 | /* vi:set sw=4 ts=4 et cindent cino= */ 76 | -------------------------------------------------------------------------------- /src/config.h.in: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2018 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #ifndef ROXTERM__CONFIG_H 21 | #define ROXTERM__CONFIG_H 22 | 23 | #include 24 | 25 | #define BIN_DIR "@CMAKE_INSTALL_FULL_BINDIR@" 26 | 27 | #define DATA_DIR "@CMAKE_INSTALL_FULL_DATADIR@" 28 | 29 | #undef ENABLE_NLS 30 | 31 | #define HTML_DIR "@CMAKE_INSTALL_FULL_DOCDIR@" 32 | 33 | #define ICON_DIR "@CMAKE_INSTALL_FULL_DATADIR@/icons/hicolor/scalable/apps" 34 | 35 | #define LOCALEDIR "@CMAKE_INSTALL_FULL_LOCALEDIR@" 36 | 37 | #define PACKAGE "roxterm" 38 | 39 | #define PKG_DATA_DIR "@CMAKE_INSTALL_FULL_DATADIR@/roxterm" 40 | 41 | #define SYS_CONF_DIR "@CMAKE_INSTALL_FULL_SYSCONFDIR@" 42 | 43 | //#cmakedefine HAVE_VTE_HANDLE_SCROLL 44 | #define RT_VTE_LIBDIR "@RT_VTE_LIBDIR@" 45 | 46 | #if GLIB_MAJOR_VERSION < 2 || \ 47 | (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 74) 48 | #define G_CONNECT_DEFAULT ((GConnectFlags) 0) 49 | #endif 50 | 51 | #endif /* ROXTERM__CONFIG_H */ 52 | -------------------------------------------------------------------------------- /src/configlet.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIGLET_H 2 | #define CONFIGLET_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* "Configlet" is the main window where you can add, edit & delete profiles, 24 | * colour schemes and shortcut schemes */ 25 | 26 | #ifndef DEFNS_H 27 | #include "defns.h" 28 | #endif 29 | 30 | typedef struct _ConfigletList ConfigletList; 31 | typedef struct _ConfigletData ConfigletData; 32 | 33 | gboolean configlet_open(); 34 | 35 | /* Lock when editing a profile etc and unlock when editing is complete. This is 36 | * done with reference counting */ 37 | void configlet_lock_profiles(void); 38 | void configlet_unlock_profiles(void); 39 | void configlet_lock_colour_schemes(void); 40 | void configlet_unlock_colour_schemes(void); 41 | void configlet_lock_shortcuts(void); 42 | void configlet_unlock_shortcuts(void); 43 | 44 | /* These handlers aren't referred to elsewhere in the code but are used by 45 | * GtkBuilder. */ 46 | void on_Configlet_destroy(GtkWidget *widget, ConfigletData *cg); 47 | void on_Configlet_response(GtkWidget *widget, int response, ConfigletData *cg); 48 | void on_Configlet_close(GtkWidget *widget, ConfigletData *cg); 49 | void on_profile_edit_clicked(GtkButton *button, ConfigletData *cg); 50 | void on_colours_edit_clicked(GtkButton *button, ConfigletData *cg); 51 | void on_row_activated(GtkTreeView *tvwidget, GtkTreePath *path, 52 | GtkTreeViewColumn *column, ConfigletData *cg); 53 | void on_profile_copy_clicked(GtkButton *button, ConfigletData *cg); 54 | void on_colours_copy_clicked(GtkButton *button, ConfigletData *cg); 55 | void on_shortcuts_copy_clicked(GtkButton *button, ConfigletData *cg); 56 | void on_profile_delete_clicked(GtkButton *button, ConfigletData *cg); 57 | void on_colours_delete_clicked(GtkButton *button, ConfigletData *cg); 58 | void on_shortcuts_delete_clicked(GtkButton *button, ConfigletData *cg); 59 | void on_profile_rename_clicked(GtkButton *button, ConfigletData *cg); 60 | void on_colours_rename_clicked(GtkButton *button, ConfigletData *cg); 61 | void on_shortcuts_rename_clicked(GtkButton *button, ConfigletData *cg); 62 | 63 | #endif /* CONFIGLET_H */ 64 | 65 | /* vi:set sw=4 ts=4 et cindent cino= */ 66 | -------------------------------------------------------------------------------- /src/defns.h: -------------------------------------------------------------------------------- 1 | #ifndef DEFNS_H 2 | #define DEFNS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Macros, declarations and includes that are used by most other files. 24 | * Always include this first. 25 | */ 26 | 27 | #include "config.h" 28 | 29 | #include 30 | 31 | #if ENABLE_NLS 32 | #include 33 | #define _(s) ((const char *) gettext(s)) 34 | #else 35 | #define _(s) s 36 | #define gettext(s) s 37 | #endif 38 | #define N_(s) s 39 | 40 | /* 41 | #include "gettext.h" 42 | #ifndef _ 43 | #define _(String) gettext (String) 44 | #endif 45 | #ifndef N_ 46 | #define N_(String) gettext_noop (String) 47 | #endif 48 | */ 49 | 50 | #define ACCEL_PATH "" 51 | 52 | #define STR_EMPTY(s) ((s) ? (s) : "") 53 | 54 | /* 55 | #define UNREF_LOG(a) g_debug("Calling ` %s ' from %s", #a, __func__); \ 56 | a ; \ 57 | g_debug("unref complete"); 58 | */ 59 | #define UNREF_LOG(a) a 60 | 61 | #define ROXTERM_ARG_ERROR g_quark_from_static_string("roxterm-arg-error-quark") 62 | 63 | enum { 64 | ROXTermArgError 65 | }; 66 | 67 | #define ROXTERM_LEAF_DIR "roxterm.sourceforge.net" 68 | 69 | /* Whether to try to prevent tabs from being too wide to unmaximize correctly. 70 | * 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #include "dlg.h" 21 | 22 | static void run_msg_dialog(GtkWindow *parent, const char *title, 23 | GtkMessageType mtype, const char *msg) 24 | { 25 | GtkWidget *dialog; 26 | char *full_title = g_strdup_printf(_("%s from ROXTerm"), title); 27 | 28 | dialog = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, 29 | mtype, GTK_BUTTONS_OK, "%s", msg); 30 | gtk_window_set_title(GTK_WINDOW(dialog), full_title); 31 | g_free(full_title); 32 | gtk_dialog_run(GTK_DIALOG (dialog)); 33 | gtk_widget_destroy(dialog); 34 | } 35 | 36 | #define ROXTERM_DEFINE_REPORT_FN(fn, title, log_level, diag_type) \ 37 | void fn(GtkWindow *parent, const char *s, ...) \ 38 | { \ 39 | va_list ap; \ 40 | char *msg; \ 41 | va_start(ap, s); \ 42 | msg = g_strdup_vprintf(s, ap); \ 43 | g_log(G_LOG_DOMAIN, log_level, "%s", msg); \ 44 | run_msg_dialog(parent, title, diag_type, msg); \ 45 | va_end(ap); \ 46 | g_free(msg); \ 47 | } 48 | 49 | ROXTERM_DEFINE_REPORT_FN(dlg_message, _("Message"), G_LOG_LEVEL_MESSAGE, 50 | GTK_MESSAGE_INFO) 51 | 52 | ROXTERM_DEFINE_REPORT_FN(dlg_warning, _("Warning"), G_LOG_LEVEL_WARNING, 53 | GTK_MESSAGE_WARNING) 54 | 55 | ROXTERM_DEFINE_REPORT_FN(dlg_critical, _("Error"), G_LOG_LEVEL_CRITICAL, 56 | GTK_MESSAGE_ERROR) 57 | 58 | GtkWidget *dlg_ok_cancel(GtkWindow *parent, const char *title, 59 | const char *format, ...) 60 | { 61 | va_list ap; 62 | char *msg; 63 | GtkWidget *w; 64 | 65 | va_start(ap, format); 66 | msg = g_strdup_vprintf(format, ap); 67 | va_end(ap); 68 | w = gtk_message_dialog_new(parent, 69 | GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, 70 | GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, 71 | "%s", msg); 72 | g_free(msg); 73 | gtk_window_set_title(GTK_WINDOW(w), title); 74 | return w; 75 | } 76 | 77 | /* vi:set sw=4 ts=4 et cindent cino= */ 78 | -------------------------------------------------------------------------------- /src/dlg.h: -------------------------------------------------------------------------------- 1 | #ifndef DLG_H 2 | #define DLG_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | /* Miscellaneous dialog boxes */ 23 | 24 | #ifndef DEFNS_H 25 | #include "defns.h" 26 | #endif 27 | 28 | #define DLG_SPACING 4 29 | 30 | /* Show messages in dialog boxes and log them using g_log */ 31 | void dlg_message(GtkWindow *parent, const char *, ...); 32 | void dlg_warning(GtkWindow *parent, const char *, ...); 33 | void dlg_critical(GtkWindow *parent, const char *, ...); 34 | 35 | GtkWidget *dlg_ok_cancel(GtkWindow *parent, const char *title, 36 | const char *, ...); 37 | 38 | #endif /* DLG_H */ 39 | 40 | /* vi:set sw=4 ts=4 et cindent cino= */ 41 | -------------------------------------------------------------------------------- /src/dragrcv.h: -------------------------------------------------------------------------------- 1 | #ifndef DRAGRCV_H 2 | #define DRAGRCV_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | /* Handles drag & drop of text or URI onto a widget */ 23 | 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | enum 30 | { 31 | ROXTERM_DRAG_TARGET_URI_LIST, 32 | ROXTERM_DRAG_TARGET_UTF8_STRING, 33 | ROXTERM_DRAG_TARGET_TEXT, 34 | ROXTERM_DRAG_TARGET_COMPOUND_TEXT, 35 | ROXTERM_DRAG_TARGET_STRING, 36 | ROXTERM_DRAG_TARGET_TEXT_PLAIN, 37 | ROXTERM_DRAG_TARGET_MOZ_URL, 38 | ROXTERM_DRAG_TARGET_TEXT_UNICODE, 39 | ROXTERM_DRAG_TARGET_TAB 40 | /* 41 | ROXTERM_DRAG_TARGET_COLOR, 42 | ROXTERM_DRAG_TARGET_BGIMAGE, 43 | ROXTERM_DRAG_TARGET_RESET_BG, 44 | */ 45 | }; 46 | 47 | typedef struct DragReceiveData DragReceiveData; 48 | 49 | /* Function called when something's been dragged in and converted to text. 50 | * It should return FALSE if the text is invalid in some way. If we receive a 51 | * URI list, each URI is separated by \r\n, but any leading "file://" 52 | * is stripped. text is NULL-terminated. 53 | */ 54 | typedef gboolean (*DragReceiveHandler)(GtkWidget *, const char *text, 55 | gulong length, gpointer data); 56 | 57 | /* Called when a tab is dropped on a target widget. widget is the dragged 58 | * widget, data is as passed to drag_receive_setup_dest_widget. */ 59 | typedef void (*DragReceiveTabHandler)(GtkWidget *widget, gpointer data); 60 | 61 | /* Sets up widget as a destination for the types of drag we're interested in. 62 | * It returns a pointer to an opaque data structure which should be deleted 63 | * when the widget is destroyed. The tab handler may be NULL. */ 64 | DragReceiveData *drag_receive_setup_dest_widget(GtkWidget *widget, 65 | DragReceiveHandler, DragReceiveTabHandler, gpointer data); 66 | 67 | inline static void drag_receive_data_delete(DragReceiveData *drd) 68 | { 69 | g_free(drd); 70 | } 71 | 72 | #endif /* DRAGRCV_H */ 73 | 74 | /* vi:set sw=4 ts=4 et cindent cino= */ 75 | -------------------------------------------------------------------------------- /src/dynopts.h: -------------------------------------------------------------------------------- 1 | #ifndef DYNOPTS_H 2 | #define DYNOPTS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* A sort of base class for "dynamic options" ie profiles, colour schemes and 24 | * keyboard shortcuts, which can be looked up by name */ 25 | 26 | #include "options.h" 27 | 28 | typedef struct DynamicOptions DynamicOptions; 29 | 30 | /* family is subdir in roxterm: Profiles, Colours, Shortcuts. This 31 | * returns a reference to existing DynamicOptions if one has already been 32 | * created for the given family */ 33 | DynamicOptions *dynamic_options_get(const char *family); 34 | 35 | /* profile_name may actually be a colour scheme or keyboard shortcut scheme; 36 | * returns NULL if it hasn't already been opened with 37 | * dynamic_options_lookup_and_ref */ 38 | Options *dynamic_options_lookup(DynamicOptions * dynopts, 39 | const char *profile_name); 40 | 41 | /* Creates Options if it hasn't already been opened */ 42 | Options *dynamic_options_lookup_and_ref(DynamicOptions * dynopts, 43 | const char *profile_name, const char *group_name); 44 | 45 | /* Removes profile from dynopts without unrefing profile */ 46 | void 47 | dynamic_options_forget(DynamicOptions *dynopts, const char *profile_name); 48 | 49 | /* Calls options_unref on looked up profile and removes it from dynopts */ 50 | gboolean 51 | dynamic_options_unref(DynamicOptions * dynopts, const char *profile_name); 52 | 53 | /* Renames a profile */ 54 | void dynamic_options_rename(DynamicOptions *dynopts, 55 | const char *old_name, const char *new_name); 56 | 57 | char **dynamic_options_list_full(DynamicOptions *, gboolean sorted); 58 | 59 | /* Returns a list of names (g_strfreev them) of files within family's subdir; 60 | * the first item will always be "Default" even if no such file exists */ 61 | inline static char **dynamic_options_list(DynamicOptions *dynopts) 62 | { 63 | return dynamic_options_list_full(dynopts, FALSE); 64 | } 65 | 66 | /* As above but the list is sorted (but Default comes first) */ 67 | inline static char **dynamic_options_list_sorted(DynamicOptions *dynopts) 68 | { 69 | return dynamic_options_list_full(dynopts, TRUE); 70 | } 71 | 72 | /* Like g_strcmp0 but "Default" comes first */ 73 | int dynamic_options_strcmp(const char *s1, const char *s2); 74 | 75 | #endif /* DYNOPTS_H */ 76 | 77 | /* vi:set sw=4 ts=4 et cindent cino= */ 78 | -------------------------------------------------------------------------------- /src/getname.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | #include "defns.h" 22 | 23 | #include 24 | #include 25 | #include 26 | 27 | #include "getname.h" 28 | 29 | static gboolean name_clashes(const char *new_name, char const **existing) 30 | { 31 | while (*existing) 32 | { 33 | if (!strcmp(new_name, *existing)) 34 | { 35 | return TRUE; 36 | } 37 | ++existing; 38 | } 39 | return FALSE; 40 | } 41 | 42 | static char *suggest_name(const char *orig, char const **existing) 43 | { 44 | /* Does orig end in a number? */ 45 | size_t len = strlen(orig); 46 | size_t numoff = len; 47 | int num = 0; 48 | char *suggest; 49 | 50 | while (isdigit(orig[numoff - 1])) 51 | --numoff; 52 | if (numoff != len) 53 | num = atoi(orig + numoff); 54 | for (;;) 55 | { 56 | ++num; 57 | suggest = g_strdup_printf("%.*s%02d", (int) numoff, orig, num); 58 | if (!name_clashes(suggest, existing)) 59 | break; 60 | g_free(suggest); 61 | } 62 | return suggest; 63 | } 64 | 65 | char *getname_run_dialog(GtkWindow *parent, const char *old_name, 66 | char const **existing, const char *title, const char *button_label, 67 | GtkWidget *icon, gboolean suggest_change) 68 | { 69 | GtkWidget *dialog; 70 | GtkWidget *name_field; 71 | char *new_name = NULL; 72 | (void) icon; 73 | 74 | dialog = gtk_dialog_new_with_buttons(title, parent, 75 | GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, 76 | _("_Cancel"), GTK_RESPONSE_CANCEL, 77 | button_label, GTK_RESPONSE_OK, 78 | NULL); 79 | gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); 80 | name_field = gtk_entry_new(); 81 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), 82 | name_field, FALSE, FALSE, 16); 83 | gtk_entry_set_activates_default(GTK_ENTRY(name_field), TRUE); 84 | gtk_widget_show(name_field); 85 | 86 | if (old_name) 87 | { 88 | if (suggest_change) 89 | { 90 | char *suggest = suggest_name(old_name, existing); 91 | 92 | gtk_entry_set_text(GTK_ENTRY(name_field), suggest); 93 | g_free(suggest); 94 | } 95 | else 96 | { 97 | gtk_entry_set_text(GTK_ENTRY(name_field), old_name); 98 | } 99 | } 100 | 101 | while (!new_name) 102 | { 103 | int response; 104 | 105 | gtk_editable_select_region(GTK_EDITABLE(name_field), 0, -1); 106 | response = gtk_dialog_run(GTK_DIALOG(dialog)); 107 | if (response == GTK_RESPONSE_OK) 108 | { 109 | const char *read_name = gtk_entry_get_text(GTK_ENTRY(name_field)); 110 | 111 | if (name_clashes(read_name, existing)) 112 | { 113 | GtkWidget *error_box = gtk_message_dialog_new( 114 | GTK_WINDOW(dialog), 115 | GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, 116 | GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, 117 | _("An item with that name already exists")); 118 | 119 | gtk_dialog_run(GTK_DIALOG(error_box)); 120 | gtk_widget_destroy(error_box); 121 | new_name = NULL; 122 | } 123 | else 124 | { 125 | new_name = g_strdup(read_name); 126 | } 127 | } 128 | else 129 | { 130 | break; 131 | } 132 | } 133 | 134 | gtk_widget_destroy(dialog); 135 | return new_name; 136 | } 137 | 138 | /* vi:set sw=4 ts=4 et cindent cino= */ 139 | -------------------------------------------------------------------------------- /src/getname.h: -------------------------------------------------------------------------------- 1 | #ifndef GETNAME_H 2 | #define GETNAME_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Opens a dialog box to get a new filename for copy or rename */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | /* title is title to give dialog box; icon may be NULL. If old_name is non-NULL 30 | * it's pre-entered and selected, but if suggest_change is TRUE, the name is 31 | * altered by incremental numbering to avoid any existing names */ 32 | char *getname_run_dialog(GtkWindow *parent, const char *old_name, 33 | char const **existing, const char *title, const char *button_label, 34 | GtkWidget *icon, gboolean suggest_change); 35 | 36 | #endif /* GETNAME_H */ 37 | 38 | /* vi:set sw=4 ts=4 et cindent cino= */ 39 | -------------------------------------------------------------------------------- /src/globalopts.h: -------------------------------------------------------------------------------- 1 | #ifndef GLOBALOPTS_H 2 | #define GLOBALOPTS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #include "options.h" 24 | 25 | /* Call before gtk_init parses argv in case there's an execute option which may 26 | * get corrupted by gtk_init; returns FALSE if there's a -e/--execute with no 27 | * subsequent args; use shallow_copy if you want original strings after -e 28 | * to be freed later; argc is reduced to exclude any args after and including 29 | * -e/--execute, but argv isn't actually changed */ 30 | gboolean global_options_preparse_argv_for_execute(int *argc, char **argv, 31 | gboolean shallow_copy); 32 | 33 | /* This will be non-NULL after above call if argv contained -e/--execute */ 34 | extern char **global_options_commandv; 35 | 36 | /* This will be non-NULL after call below if argv contained --appdir */ 37 | extern char *global_options_appdir; 38 | 39 | /* Similar to global_options_appdir but derived from argv[0] */ 40 | extern char *global_options_bindir; 41 | 42 | /* Directory to run terminal in */ 43 | extern char *global_options_directory; 44 | 45 | /* Whether to open next window fullscreen */ 46 | extern gboolean global_options_fullscreen; 47 | 48 | /* Whether to open next window maximised */ 49 | extern gboolean global_options_maximise; 50 | 51 | /* Whether to open next window borderless */ 52 | extern gboolean global_options_borderless; 53 | 54 | /* Whether to try to open new terminal in an existing window */ 55 | extern gboolean global_options_tab; 56 | 57 | /* Fork first instance */ 58 | extern gboolean global_options_fork; 59 | 60 | /* What to do on command exit */ 61 | extern gint global_options_atexit; 62 | 63 | extern char *global_options_user_session_id; 64 | 65 | /* Key for dark theme preference in GSettings */ 66 | extern const char *global_options_color_scheme_key; 67 | 68 | /* Call after argv has been processed by gtk_init; may be called more than once 69 | * but repeat invocations have no effect on appdir/bindir and argv/argc are 70 | * altered. Bear in mind that --help/--usage args will cause exit. 71 | * If report is FALSE, parsing errors are ignored (because it gets called 72 | * twice with same args if doing a dbus launch). 73 | */ 74 | void global_options_init(int *argc, char ***argv, gboolean report); 75 | 76 | /* Only access via following functions */ 77 | extern Options *global_options; 78 | 79 | inline static char *global_options_lookup_string_with_default(const char 80 | *key, const char *default_value) 81 | { 82 | return options_lookup_string_with_default(global_options, key, 83 | default_value); 84 | } 85 | 86 | inline static char *global_options_lookup_string(const char *key) 87 | { 88 | return options_lookup_string_with_default(global_options, key, NULL); 89 | } 90 | 91 | inline static int global_options_lookup_int_with_default(const char *key, int d) 92 | { 93 | return options_lookup_int_with_default(global_options, key, d); 94 | } 95 | 96 | inline static int global_options_lookup_int(const char *key) 97 | { 98 | return options_lookup_int(global_options, key); 99 | } 100 | 101 | inline static double global_options_lookup_double(const char *key) 102 | { 103 | return options_lookup_double(global_options, key); 104 | } 105 | 106 | /* Reset a string option which should only be "one-shot" */ 107 | inline static void global_options_reset_string(const char *key) 108 | { 109 | options_set_string(global_options, key, NULL); 110 | } 111 | 112 | /* Checks CLI args for --appdir and --fork without altering argv */ 113 | void global_options_init_appdir(int argc, char **argv); 114 | 115 | /* Detects bindir from argv[0] */ 116 | void global_options_init_bindir(const char *argv0); 117 | 118 | /* Deep copy a NULL-terminated array of NULL-terminated strings */ 119 | char **global_options_copy_strv(char **ps); 120 | 121 | /* Returns whether GNOME's dark theme preference is available. */ 122 | gboolean global_options_has_gnome_dark_theme_setting(void); 123 | 124 | /* Returns whether GTK supports dark theme. */ 125 | gboolean global_options_has_gtk_dark_theme_setting(); 126 | 127 | /* Gets the prefer-dark setting from GNOME's gsettings or roxterm's legacy 128 | * option. 129 | */ 130 | gboolean global_options_system_theme_is_dark(void); 131 | 132 | /* Applies the dark theme setting now and whenever the Gsetting changes */ 133 | void global_options_apply_dark_theme(void); 134 | 135 | typedef void (*GlobalOptionsDarkThemeChangeHandler)(gboolean prefer_dark, 136 | gpointer handle); 137 | 138 | /* Only works on GSettings, legacy option should be monitored separately. */ 139 | void global_options_register_dark_theme_change_handler( 140 | GlobalOptionsDarkThemeChangeHandler handler, gpointer handle); 141 | 142 | #endif /* GLOBALOPTS_H */ 143 | 144 | /* vi:set sw=4 ts=4 et cindent cino= */ 145 | -------------------------------------------------------------------------------- /src/gresources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/roxterm.svg 5 | roxterm-config.ui 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/icons/roxterm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 23 | 25 | image/svg+xml 26 | 28 | 29 | 30 | 31 | 51 | 53 | 55 | 59 | 60 | 62 | 70 | 74 | 79 | 83 | 88 | 93 | 94 | 95 | 96 | 99 | 104 | 109 | 110 | 117 | 121 | 125 | 126 | 132 | 133 | -------------------------------------------------------------------------------- /src/intptrmap.h: -------------------------------------------------------------------------------- 1 | #ifndef INTPTRMAP_H 2 | #define INTPTRMAP_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2024 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | #include 23 | 24 | /* Wrapper for a GHashTable of pointers keyed by ints, adding a set of bits to 25 | * provide a shortcut for the contains method for keys up to 255. 26 | */ 27 | typedef struct { 28 | GHashTable *hash; 29 | guint64 bits[4]; 30 | } IntPointerMap; 31 | 32 | #define ONE64 ((guint64) 1) 33 | 34 | static inline IntPointerMap *int_pointer_map_init(IntPointerMap *ipm) 35 | { 36 | ipm->bits[0] = 0; 37 | ipm->bits[1] = 0; 38 | ipm->bits[2] = 0; 39 | ipm->bits[3] = 0; 40 | ipm->hash = g_hash_table_new(g_direct_hash, g_direct_equal); 41 | return ipm; 42 | } 43 | 44 | static inline gboolean int_pointer_map_contains(IntPointerMap *ipm, int key) 45 | { 46 | if (key < 64) 47 | return (ipm->bits[0] & (ONE64 << key)) != 0; 48 | if (key < 256) 49 | return (ipm->bits[key / 64] & (ONE64 << (key % 64))) != 0; 50 | return g_hash_table_contains(ipm->hash, GINT_TO_POINTER(key)); 51 | } 52 | 53 | static inline gboolean int_pointer_map_insert(IntPointerMap *ipm, int key, 54 | gpointer value) 55 | { 56 | if (key < 256) 57 | ipm->bits[key / 64] |= (ONE64 << (key % 64)); 58 | return g_hash_table_insert(ipm->hash, GINT_TO_POINTER(key), value); 59 | } 60 | 61 | static inline gpointer int_pointer_map_lookup(IntPointerMap *ipm, int key) 62 | { 63 | return g_hash_table_lookup(ipm->hash, GINT_TO_POINTER(key)); 64 | } 65 | 66 | static inline gboolean int_pointer_map_remove(IntPointerMap *ipm, int key) 67 | { 68 | if (key < 256) 69 | ipm->bits[key / 64] &= ~(ONE64 << (key % 64)); 70 | return g_hash_table_remove(ipm->hash, GINT_TO_POINTER(key)); 71 | } 72 | 73 | #endif /* INTPTRMAP_H */ 74 | 75 | /* vi:set sw=4 ts=4 et cindent cino= */ 76 | -------------------------------------------------------------------------------- /src/multitab-close-button.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #include "multitab-close-button.h" 21 | 22 | G_DEFINE_TYPE (MultitabCloseButton, multitab_close_button, GTK_TYPE_BUTTON); 23 | 24 | static void 25 | multitab_close_button_set_size (MultitabCloseButton *self) 26 | { 27 | int x, y; 28 | GtkWidget *w = GTK_WIDGET (self); 29 | 30 | gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &x, &y); 31 | gtk_widget_set_size_request (w, x + 2, y + 2); 32 | } 33 | 34 | static void 35 | multitab_close_button_style_updated (GtkWidget *self) 36 | { 37 | multitab_close_button_set_size (MULTITAB_CLOSE_BUTTON (self)); 38 | GTK_WIDGET_CLASS (multitab_close_button_parent_class)->style_updated (self); 39 | } 40 | 41 | static void 42 | multitab_close_button_class_init(MultitabCloseButtonClass *klass) 43 | { 44 | GtkWidgetClass *wk = GTK_WIDGET_CLASS (klass); 45 | 46 | wk->style_updated = multitab_close_button_style_updated; 47 | gtk_widget_class_set_css_name (wk, "multitab-close-button"); 48 | } 49 | 50 | static void 51 | multitab_close_button_init(MultitabCloseButton *self) 52 | { 53 | GtkWidget *image = gtk_image_new (); 54 | 55 | self->image = GTK_IMAGE (image); 56 | gtk_widget_show (image); 57 | gtk_container_add (GTK_CONTAINER (self), image); 58 | } 59 | 60 | GtkWidget * 61 | multitab_close_button_new(const char *image_name) 62 | { 63 | MultitabCloseButton *self = (MultitabCloseButton *) 64 | g_object_new (MULTITAB_TYPE_CLOSE_BUTTON, 65 | "relief", GTK_RELIEF_NONE, 66 | "focus-on-click", FALSE, 67 | NULL); 68 | 69 | multitab_close_button_set_image (self, image_name); 70 | return GTK_WIDGET (self); 71 | } 72 | 73 | void 74 | multitab_close_button_set_image(MultitabCloseButton *self, 75 | const char *image_name) 76 | { 77 | gtk_image_set_from_icon_name (self->image, 78 | image_name ? image_name : "window-close-symbolic", 79 | GTK_ICON_SIZE_MENU); 80 | multitab_close_button_set_size (self); 81 | } 82 | -------------------------------------------------------------------------------- /src/multitab-close-button.h: -------------------------------------------------------------------------------- 1 | #ifndef MULTITAB_CLOSE_BUTTON_H 2 | #define MULTITAB_CLOSE_BUTTON_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | #include 28 | 29 | #define MULTITAB_TYPE_CLOSE_BUTTON \ 30 | (multitab_close_button_get_type ()) 31 | #define MULTITAB_CLOSE_BUTTON(obj) \ 32 | (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ 33 | MULTITAB_TYPE_CLOSE_BUTTON, MultitabCloseButton)) 34 | #define MULTITAB_IS_CLOSE_BUTTON(obj) \ 35 | (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MULTITAB_TYPE_CLOSE_BUTTON)) 36 | #define MULTITAB_CLOSE_BUTTON_CLASS(klass) \ 37 | (G_TYPE_CHECK_CLASS_CAST ((klass), \ 38 | MULTITAB_TYPE_CLOSE_BUTTON, MultitabCloseButtonClass)) 39 | #define MULTITAB_IS_CLOSE_BUTTON_CLASS(klass) \ 40 | (G_TYPE_CHECK_CLASS_TYPE ((klass), MULTITAB_TYPE_CLOSE_BUTTON)) 41 | #define MULTITAB_CLOSE_BUTTON_GET_CLASS(obj) \ 42 | (G_TYPE_INSTANCE_GET_CLASS ((obj), \ 43 | MULTITAB_TYPE_CLOSE_BUTTON, MultitabCloseButtonClass)) 44 | 45 | typedef struct _MultitabCloseButton MultitabCloseButton; 46 | typedef struct _MultitabCloseButtonClass MultitabCloseButtonClass; 47 | 48 | struct _MultitabCloseButton 49 | { 50 | GtkButton parent_instance; 51 | GtkImage *image; 52 | }; 53 | 54 | struct _MultitabCloseButtonClass 55 | { 56 | GtkButtonClass parent_class; 57 | }; 58 | 59 | GType multitab_close_button_get_type (void); 60 | 61 | 62 | /* NULL image_name for default GTK_STOCK_CLOSE */ 63 | GtkWidget * 64 | multitab_close_button_new(const char *image_name); 65 | 66 | void 67 | multitab_close_button_set_image(MultitabCloseButton *btn, 68 | const char *image_name); 69 | 70 | 71 | #endif /* MULTITAB_CLOSE_BUTTON_H */ 72 | -------------------------------------------------------------------------------- /src/multitab-label.h: -------------------------------------------------------------------------------- 1 | #ifndef MULTITAB_LABEL_H 2 | #define MULTITAB_LABEL_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | #include 28 | 29 | #define MULTITAB_TYPE_LABEL \ 30 | (multitab_label_get_type ()) 31 | #define MULTITAB_LABEL(obj) \ 32 | (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ 33 | MULTITAB_TYPE_LABEL, MultitabLabel)) 34 | #define MULTITAB_IS_LABEL(obj) \ 35 | (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MULTITAB_TYPE_LABEL)) 36 | #define MULTITAB_LABEL_CLASS(klass) \ 37 | (G_TYPE_CHECK_CLASS_CAST ((klass), \ 38 | MULTITAB_TYPE_LABEL, MultitabLabelClass)) 39 | #define MULTITAB_IS_LABEL_CLASS(klass) \ 40 | (G_TYPE_CHECK_CLASS_TYPE ((klass), MULTITAB_TYPE_LABEL)) 41 | #define MULTITAB_LABEL_GET_CLASS(obj) \ 42 | (G_TYPE_INSTANCE_GET_CLASS ((obj), \ 43 | MULTITAB_TYPE_LABEL, MultitabLabelClass)) 44 | 45 | typedef struct _MultitabLabel MultitabLabel; 46 | typedef struct _MultitabLabelClass MultitabLabelClass; 47 | 48 | struct _MultitabLabel 49 | { 50 | GtkEventBox parent_instance; 51 | GdkRGBA attention_color; 52 | GtkLabel *label; 53 | gboolean attention; 54 | guint timeout_tag; 55 | gboolean single; 56 | gboolean fixed_width; 57 | GtkWidget *parent; 58 | int *best_width; 59 | }; 60 | 61 | struct _MultitabLabelClass 62 | { 63 | GtkEventBoxClass parent_class; 64 | GtkCssProvider *style_provider; 65 | }; 66 | 67 | GType multitab_label_get_type (void); 68 | 69 | 70 | /* best_width may not be used, depending on GTK version etc. 71 | * parent should be the GtkNotebook containing the tab. 72 | */ 73 | GtkWidget * 74 | multitab_label_new (GtkWidget *parent, const char *text, int *best_width); 75 | 76 | void 77 | multitab_label_set_parent (MultitabLabel *label, 78 | GtkWidget *parent, int *best_width); 79 | 80 | void 81 | multitab_label_set_text (MultitabLabel *label, const char *text); 82 | 83 | const char * 84 | multitab_label_get_text (MultitabLabel *label); 85 | 86 | void 87 | multitab_label_draw_attention (MultitabLabel *label); 88 | 89 | void 90 | multitab_label_cancel_attention (MultitabLabel *label); 91 | 92 | void 93 | multitab_label_set_attention_color (MultitabLabel *label, 94 | const GdkRGBA *color); 95 | 96 | const GdkRGBA * 97 | multitab_label_get_attention_color (MultitabLabel *label); 98 | 99 | /* Whether the tab is the only one in the window */ 100 | void 101 | multitab_label_set_single (MultitabLabel *label, gboolean single); 102 | 103 | void 104 | multitab_label_set_current(MultitabLabel *label, gboolean current); 105 | 106 | #endif /* MULTITAB_LABEL_H */ 107 | -------------------------------------------------------------------------------- /src/options.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | #include "defns.h" 22 | 23 | #include 24 | #include 25 | #include 26 | 27 | #include "dlg.h" 28 | #include "options.h" 29 | #include "optsfile.h" 30 | 31 | void options_reload_keyfile(Options *options) 32 | { 33 | if (options->kf) 34 | options_delete_keyfile(options); 35 | options->kf = options_file_open(options->name, options->group_name); 36 | options->kf_dirty = FALSE; 37 | } 38 | 39 | Options *options_open(const char *leafname, const char *group_name) 40 | { 41 | Options *options = g_new0(Options, 1); 42 | 43 | options->group_name = group_name; 44 | options->name = g_strdup(leafname); 45 | options->ref = 1; 46 | options_reload_keyfile(options); 47 | return options; 48 | } 49 | 50 | gboolean options_copy_keyfile(Options *dest, const Options *src) 51 | { 52 | gsize l = 0; 53 | GError *err = NULL; 54 | char *kf_data = g_key_file_to_data(src->kf, &l, &err); 55 | GKeyFile *old_kf = NULL; 56 | gboolean result = TRUE; 57 | 58 | if (dest->kf) 59 | { 60 | old_kf = dest->kf; 61 | dest->kf = NULL; 62 | } 63 | if (err) 64 | goto copy_err; 65 | dest->kf = g_key_file_new(); 66 | if (!l || g_key_file_load_from_data(dest->kf, kf_data, l, 67 | G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &err)) 68 | { 69 | goto copy_done; 70 | } 71 | 72 | copy_err: 73 | result = FALSE; 74 | if (err && err->message) 75 | g_critical(_("Unable to copy options keyfile data: %s"), err->message); 76 | if (dest->kf) 77 | g_key_file_free(dest->kf); 78 | dest->kf = old_kf; 79 | old_kf = NULL; 80 | 81 | copy_done: 82 | if (old_kf) 83 | g_key_file_free(old_kf); 84 | g_free(kf_data); 85 | return result; 86 | } 87 | 88 | Options *options_copy(const Options *old_opts) 89 | { 90 | Options *new_opts = g_new(Options, 1); 91 | 92 | *new_opts = *old_opts; 93 | new_opts->kf = NULL; 94 | new_opts->user_data = NULL; 95 | if (options_copy_keyfile(new_opts, old_opts)) 96 | { 97 | new_opts->name = g_strdup(old_opts->name); 98 | } 99 | else 100 | { 101 | g_free(new_opts); 102 | new_opts = NULL; 103 | } 104 | return new_opts; 105 | } 106 | 107 | void options_delete_keyfile(Options * options) 108 | { 109 | options_file_delete(options->kf); 110 | options->kf = NULL; 111 | } 112 | 113 | void options_delete(Options *options) 114 | { 115 | if (options->kf) 116 | options_delete_keyfile(options); 117 | g_free(options->name); 118 | g_free(options); 119 | } 120 | 121 | /* Deletes options and returns true if ref reaches zero */ 122 | gboolean options_unref(Options * options) 123 | { 124 | if (!--options->ref) 125 | { 126 | options_delete(options); 127 | return TRUE; 128 | } 129 | return FALSE; 130 | } 131 | 132 | char *options_lookup_string_with_default(Options * options, 133 | const char *key, const char *default_value) 134 | { 135 | return options_file_lookup_string_with_default( 136 | options->kf, options->group_name, 137 | key, default_value); 138 | } 139 | 140 | int options_lookup_int_with_default(Options * options, 141 | const char *key, int default_value) 142 | { 143 | return options_file_lookup_int_with_default( 144 | options->kf, options->group_name, 145 | key, default_value); 146 | } 147 | 148 | double options_lookup_double_with_default(Options *options, const char *key, 149 | double d) 150 | { 151 | char *str_val = options_lookup_string(options, key); 152 | double result = d; 153 | 154 | if (str_val) 155 | { 156 | char *endptr; 157 | 158 | errno = 0; 159 | result = strtod(str_val, &endptr); 160 | if (endptr == str_val) 161 | { 162 | dlg_warning(NULL, 163 | _("Unable to convert value '%s' for key '%s' in '%s' to number"), 164 | str_val, key, options->name); 165 | result = d; 166 | } 167 | else if (errno) 168 | { 169 | dlg_warning(NULL, 170 | _("Unable to convert value '%s' for key '%s' in '%s' " 171 | "to number: %s"), 172 | str_val, key, options->name, strerror(errno)); 173 | result = d; 174 | } 175 | } 176 | return result; 177 | } 178 | 179 | 180 | void options_set_string(Options * options, const char *key, const char *value) 181 | { 182 | if (!options->kf) 183 | options->kf = g_key_file_new(); 184 | g_key_file_set_string(options->kf, options->group_name, key, 185 | value ? value : ""); 186 | } 187 | 188 | void options_set_int(Options * options, const char *key, int value) 189 | { 190 | if (!options->kf) 191 | options->kf = g_key_file_new(); 192 | g_key_file_set_integer(options->kf, options->group_name, key, value); 193 | } 194 | 195 | void options_set_double(Options * options, const char *key, double value) 196 | { 197 | char *str_val = g_strdup_printf("%f", value); 198 | 199 | options_set_string(options, key, str_val); 200 | g_free(str_val); 201 | } 202 | 203 | const char *options_get_leafname(Options *options) 204 | { 205 | const char *leafname = strrchr(options->name, G_DIR_SEPARATOR); 206 | 207 | return leafname ? leafname + 1 : options->name; 208 | } 209 | 210 | void options_change_leafname(Options *options, const char *new_leaf) 211 | { 212 | char *old_name = options->name; 213 | char *old_leaf = strrchr(options->name, G_DIR_SEPARATOR); 214 | 215 | if (old_leaf) 216 | { 217 | *old_leaf = 0; 218 | options->name = g_build_filename(old_name, new_leaf, NULL); 219 | } 220 | else 221 | { 222 | options->name = g_strdup(new_leaf); 223 | } 224 | g_free(old_name); 225 | } 226 | 227 | /* vi:set sw=4 ts=4 et cindent cino= */ 228 | -------------------------------------------------------------------------------- /src/options.h: -------------------------------------------------------------------------------- 1 | #ifndef OPTIONS_H 2 | #define OPTIONS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Handles a group of options from one file */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | #include 30 | 31 | #include "optsfile.h" 32 | 33 | typedef struct { 34 | GKeyFile *kf; 35 | int ref; 36 | gpointer user_data; 37 | gboolean kf_dirty; 38 | const char *group_name; /* For GKeyFile */ 39 | char *name; /* leafname for saving; includes "Profiles" 40 | or "Shortcuts" or whatever */ 41 | gboolean deleted; /* Has been deleted by configlet while still 42 | in use */ 43 | } Options; 44 | 45 | 46 | Options *options_open(const char *leafname, const char *group_name); 47 | 48 | gboolean options_copy_keyfile(Options *dest, const Options *src); 49 | 50 | Options *options_copy(const Options *); 51 | 52 | void options_delete_keyfile(Options *options); 53 | 54 | void options_reload_keyfile(Options *options); 55 | 56 | /* Options start off with one reference when opened; this adds a reference */ 57 | inline static void options_ref(Options *options) 58 | { 59 | ++options->ref; 60 | } 61 | 62 | /* Usually use options_unref instead except in special cases */ 63 | void options_delete(Options *options); 64 | 65 | /* Deletes options and returns true if ref reaches zero */ 66 | gboolean options_unref(Options * options); 67 | 68 | char *options_lookup_string_with_default(Options * options, 69 | const char *key, const char *default_value); 70 | 71 | inline static char *options_lookup_string(Options * options, const char *key) 72 | { 73 | return options_lookup_string_with_default(options, key, NULL); 74 | } 75 | 76 | int options_lookup_int_with_default(Options * options, const char *key, int d); 77 | 78 | inline static int options_lookup_int(Options * options, const char *key) 79 | { 80 | return options_lookup_int_with_default(options, key, -1); 81 | } 82 | 83 | double options_lookup_double_with_default(Options * options, const char *key, 84 | double d); 85 | 86 | inline static double options_lookup_double(Options * options, const char *key) 87 | { 88 | return options_lookup_double_with_default(options, key, 0.0); 89 | } 90 | 91 | void options_set_string(Options * options, const char *key, const char *value); 92 | 93 | void options_set_int(Options * options, const char *key, int value); 94 | 95 | void options_set_double(Options * options, const char *key, double value); 96 | 97 | /* Associates some data with a set of options; useful eg for storing a set of 98 | * GdkRGBAs along with palette options */ 99 | inline static void options_associate_data(Options * options, gpointer user_data) 100 | { 101 | options->user_data = user_data; 102 | } 103 | 104 | /* Returns the data associated above */ 105 | inline static gpointer options_get_data(Options * options) 106 | { 107 | return options->user_data; 108 | } 109 | 110 | /* Returns the last path element of the name member */ 111 | const char *options_get_leafname(Options *options); 112 | 113 | void options_change_leafname(Options *options, const char *new_leaf); 114 | 115 | #endif /* OPTIONS_H */ 116 | 117 | /* vi:set sw=4 ts=4 et cindent cino= */ 118 | -------------------------------------------------------------------------------- /src/optsdbus.h: -------------------------------------------------------------------------------- 1 | #ifndef OPTSDBUS_H 2 | #define OPTSDBUS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* ROXTerm's interface to dbus */ 24 | 25 | #include "rtdbus.h" 26 | 27 | /* A ROXTerm D-BUS option consists of: 28 | * Profile name (including "Profiles/", "Colours/" etc) 29 | * Option key 30 | * Option value (string or int) 31 | */ 32 | 33 | /* Possible values for what_happened in optsdbus_send_stuff_changed_signal */ 34 | #define OPTSDBUS_DELETED "OptionsDeleted" 35 | #define OPTSDBUS_ADDED "OptionsAdded" 36 | #define OPTSDBUS_RENAMED "OptionsRenamed" 37 | #define OPTSDBUS_CHANGED "OptionsChanged" 38 | 39 | #ifdef ROXTERM_CAPPLET 40 | 41 | gboolean optsdbus_init(void); 42 | 43 | gboolean optsdbus_send_string_opt_signal(const char *profile_name, 44 | const char *key, const char *value); 45 | 46 | gboolean optsdbus_send_int_opt_signal(const char *profile_name, 47 | const char *key, int value); 48 | 49 | gboolean optsdbus_send_float_opt_signal(const char *profile_name, 50 | const char *key, double value); 51 | 52 | /* new_name may be NULL if not a rename operation */ 53 | gboolean optsdbus_send_stuff_changed_signal(const char *what_happened, 54 | const char *family_name, const char *current_name, 55 | const char *new_name); 56 | 57 | #else /* !ROXTERM_CAPPLET */ 58 | 59 | typedef enum { 60 | OptsDBus_InvalidOpt, 61 | OptsDBus_StringOpt, 62 | OptsDBus_IntOpt, 63 | OptsDBus_FloatOpt 64 | } OptsDBusOptType; 65 | 66 | typedef union { 67 | const char *s; 68 | int i; 69 | double f; 70 | } OptsDBusValue; 71 | 72 | /* profile_name includes "Profiles/", "Colours/" etc. 73 | * Only one of str_val or int_val will be valid at a time. */ 74 | typedef void (*OptsDBusOptionHandler) (const char *profile_name, 75 | const char *key, OptsDBusOptType, OptsDBusValue); 76 | 77 | void optsdbus_listen_for_opt_signals(OptsDBusOptionHandler handler); 78 | 79 | /* new_name is NULL if what_happened isn't rename */ 80 | typedef void (*OptsDBusStuffChangedHandler)(const char *what_happened, 81 | const char *family_name, const char *current_name, 82 | const char *new_name); 83 | 84 | void optsdbus_listen_for_stuff_changed_signals( 85 | OptsDBusStuffChangedHandler handler); 86 | 87 | typedef void (*OptsDBusSetProfileHandler)(void *roxterm_id, 88 | const char *profile_name); 89 | 90 | void optsdbus_listen_for_set_profile_signals(OptsDBusSetProfileHandler); 91 | void optsdbus_listen_for_set_colour_scheme_signals(OptsDBusSetProfileHandler); 92 | void optsdbus_listen_for_set_shortcut_scheme_signals(OptsDBusSetProfileHandler); 93 | 94 | #endif /* !ROXTERM_CAPPLET */ 95 | 96 | /* In capplet this sends a D-BUS message to another instance; in terminal 97 | * it starts a new instance of the capplet which will either forward the 98 | * message to a previous instance or handle it itself. */ 99 | gboolean optsdbus_send_edit_opts_message(const char *method, const char *arg); 100 | 101 | inline static gboolean 102 | optsdbus_send_edit_profile_message(const char *profile_name) 103 | { 104 | return optsdbus_send_edit_opts_message("EditProfile", profile_name); 105 | } 106 | 107 | inline static gboolean 108 | optsdbus_send_edit_colour_scheme_message(const char *profile_name) 109 | { 110 | return optsdbus_send_edit_opts_message("EditColourScheme", profile_name); 111 | } 112 | 113 | #endif /* OPTSDBUS_H */ 114 | 115 | /* vi:set sw=4 ts=4 et cindent cino= */ 116 | -------------------------------------------------------------------------------- /src/optsfile.h: -------------------------------------------------------------------------------- 1 | #ifndef OPTSFILE_H 2 | #define OPTSFILE_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* Keyfile component of options */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | /* Loads options from a named file, searching for it in Choices path; if no 30 | * file found it returns NULL */ 31 | GKeyFile *options_file_open(const char *leafname, const char *group_name); 32 | 33 | void options_file_save(GKeyFile *, const char *leafname); 34 | 35 | inline static void options_file_delete(GKeyFile *kf) 36 | { 37 | g_key_file_free(kf); 38 | } 39 | 40 | /* These 2 functions construct a partial pathname from filename and remaining 41 | * args (NULL-terminated). */ 42 | 43 | /* Finds first existing file with this name in roxterm's config path */ 44 | char *options_file_build_filename(const char *filename, ...); 45 | 46 | /* Finds best full filename to save a file. Creates filename's parent dirs if 47 | * necessary, but not elements of filename */ 48 | char *options_file_filename_for_saving(const char *filename, ...); 49 | 50 | /* Makes directory, recursively making parents if necessary */ 51 | gboolean options_file_mkdir_with_parents(const char *dirname); 52 | 53 | /* Gets all paths where options may be stored, NULL terminated */ 54 | const char * const *options_file_get_pathv(void); 55 | 56 | char *options_file_lookup_string_with_default( 57 | GKeyFile *kf, const char *group_name, 58 | const char *key, const char *default_value); 59 | 60 | int options_file_lookup_int_with_default( 61 | GKeyFile *kf, const char *group_name, 62 | const char *key, int default_value); 63 | 64 | gboolean options_file_copy_to_user_dir(GtkWindow *window, 65 | const char *src_path, const char *family, const char *new_leaf); 66 | 67 | char *options_file_make_editable(GtkWindow *window, 68 | const char *family_name, const char *name); 69 | 70 | #endif /* OPTSFILE_H */ 71 | 72 | /* vi:set sw=4 ts=4 et cindent cino= */ 73 | -------------------------------------------------------------------------------- /src/osc52filter.h: -------------------------------------------------------------------------------- 1 | #ifndef OSC52FILTER_H 2 | #define OSC52FILTER_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2024 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | #include "roxterm.h" 23 | 24 | typedef struct Osc52Filter Osc52Filter; 25 | 26 | Osc52Filter *osc52filter_create(ROXTermData *roxterm, size_t buflen); 27 | 28 | void osc52filter_remove(Osc52Filter *oflt); 29 | 30 | void osc52filter_set_buffer_size(Osc52Filter *oflt, size_t buflen); 31 | 32 | #endif /* OSC52FILTER_H */ 33 | 34 | /* vi:set sw=4 ts=4 et cindent cino= */ 35 | -------------------------------------------------------------------------------- /src/profilegui.h: -------------------------------------------------------------------------------- 1 | #ifndef PROFILEGUI_H 2 | #define PROFILEGUI_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | /* Editing of a Profile with a GUI (using GtkBuilder) */ 28 | 29 | typedef struct _ProfileGUI ProfileGUI; 30 | 31 | /* Loads a Profile and creates a working dialog box for it. 32 | * Creates new profile if it doesn't already exist */ 33 | ProfileGUI *profilegui_open(const char *profile_name); 34 | 35 | void profilegui_delete(ProfileGUI *); 36 | 37 | /* Handlers declared extern for GtkBuilder */ 38 | void on_ssh_entry_activate(GtkEntry * entry, ProfileGUI * pg); 39 | void on_ssh_host_changed(GtkWidget * widget, ProfileGUI *pg); 40 | void on_edit_ssh_clicked(GtkWidget * widget, ProfileGUI *pg); 41 | void on_Profile_Editor_destroy(GtkWidget * widget, ProfileGUI * pg); 42 | void on_Profile_Editor_response(GtkWidget *widget, int response, 43 | ProfileGUI *pg); 44 | void on_Profile_Editor_close(GtkWidget * widget, ProfileGUI * pg); 45 | void on_font_set(GtkFontButton * fontbutton, ProfileGUI * pg); 46 | void on_entry_activate(GtkEntry * entry, ProfileGUI * pg); 47 | void on_profile_notebook_switch_page(GtkNotebook * notebook, GtkWidget *page, 48 | guint page_num, ProfileGUI * pg); 49 | void on_bgtype_toggled(GtkToggleButton *button, ProfileGUI *pg); 50 | void on_command_toggled(GtkToggleButton *button, ProfileGUI *pg); 51 | void on_close_buttons_toggled(GtkToggleButton *button, ProfileGUI *pg); 52 | void on_cursor_blinks_toggled(GtkToggleButton *button, ProfileGUI *pg); 53 | void on_bgimg_chosen(GtkFileChooser *chooser, ProfileGUI *pg); 54 | void on_reset_compat_clicked(GtkButton *button, ProfileGUI *pg); 55 | void on_cell_size_toggled(GtkToggleButton * button, ProfileGUI *pg); 56 | 57 | #endif /* PROFILEGUI_H */ 58 | 59 | /* vi:set sw=4 ts=4 et cindent cino= */ 60 | -------------------------------------------------------------------------------- /src/resources.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | #include "defns.h" 22 | 23 | #include "resources.h" 24 | #include "globalopts.h" 25 | 26 | void resources_access_icon() 27 | { 28 | static gboolean added = FALSE; 29 | if (!added) 30 | { 31 | gtk_icon_theme_add_resource_path(gtk_icon_theme_get_default(), 32 | ROXTERM_RESOURCE_ICONS_PATH); 33 | added = TRUE; 34 | #if 0 35 | GError *error = NULL; 36 | gsize size; 37 | guint32 flags; 38 | if (!g_resources_get_info(ROXTERM_RESOURCE_LOGO, 0, &size, &flags, 39 | &error)) 40 | { 41 | g_critical("%s not found: %s", ROXTERM_RESOURCE_LOGO, 42 | error->message); 43 | g_error_free(error); 44 | } 45 | else 46 | { 47 | g_debug("%s has flags %x and size %ld", ROXTERM_RESOURCE_LOGO, 48 | flags, size); 49 | } 50 | #endif 51 | } 52 | } 53 | 54 | /* vi:set sw=4 ts=4 et cindent cino= */ 55 | -------------------------------------------------------------------------------- /src/resources.h: -------------------------------------------------------------------------------- 1 | #ifndef RESOURCES_H 2 | #define RESOURCES_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | #define ROXTERM_RESOURCE_PATH "/uk/co/realh/roxterm" 28 | #define ROXTERM_RESOURCE_ICONS_PATH ROXTERM_RESOURCE_PATH "/icons" 29 | #define ROXTERM_RESOURCE_LOGO ROXTERM_RESOURCE_ICONS_PATH "/roxterm.svg" 30 | #define ROXTERM_RESOURCE_UI ROXTERM_RESOURCE_PATH "/roxterm-config.ui" 31 | 32 | void resources_access_icon(); 33 | 34 | #endif /* RESOURCES_H */ 35 | 36 | /* vi:set sw=4 ts=4 et cindent cino= */ 37 | -------------------------------------------------------------------------------- /src/roxterm-regex.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2018 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #include "roxterm-regex.h" 21 | 22 | /* Keeping this as a separate file unchanged from gnome-terminal will make it 23 | * easier to keep track of any upstream changes. Only include it here though, 24 | * it contains several macros with generic names. 25 | */ 26 | #include "terminal-regex.h" 27 | 28 | #define REGEX_SSH DEFS "(?i:ssh:)" USERPASS URL_HOST PORT 29 | 30 | ROXTerm_RegexAndType roxterm_regexes[] = { 31 | { REGEX_URL_AS_IS, ROXTerm_Match_FullURI }, 32 | { REGEX_URL_HTTP, ROXTerm_Match_URINoScheme }, 33 | { REGEX_NEWS_MAN, ROXTerm_Match_FullURI }, 34 | { REGEX_SSH, ROXTerm_Match_SSH_Host }, 35 | { REGEX_EMAIL, ROXTerm_Match_SSH_Host }, 36 | { REGEX_URL_VOIP, ROXTerm_Match_VOIP }, 37 | { REGEX_URL_FILE, ROXTerm_Match_File }, 38 | { NULL, ROXTerm_Match_Invalid } 39 | }; 40 | 41 | /* vi:set sw=4 ts=4 et cindent cino= */ 42 | -------------------------------------------------------------------------------- /src/roxterm-regex.h: -------------------------------------------------------------------------------- 1 | #ifndef ROXTERM_REGEX_H 2 | #define ROXTERM_REGEX_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2018 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | typedef enum { 28 | ROXTerm_Match_Invalid, 29 | ROXTerm_Match_FullURI, 30 | ROXTerm_Match_URINoScheme, 31 | ROXTerm_Match_SSH_Host, 32 | ROXTerm_Match_MailTo, 33 | ROXTerm_Match_VOIP, 34 | ROXTerm_Match_File, 35 | } ROXTerm_MatchType; 36 | 37 | typedef struct { 38 | const char *regex; 39 | ROXTerm_MatchType match_type; 40 | } ROXTerm_RegexAndType; 41 | 42 | extern ROXTerm_RegexAndType roxterm_regexes[]; 43 | 44 | #endif /* ROXTERM_REGEX_H */ 45 | 46 | /* vi:set sw=4 ts=4 et cindent cino= */ 47 | -------------------------------------------------------------------------------- /src/roxterm.h: -------------------------------------------------------------------------------- 1 | #ifndef ROXTERM_H 2 | #define ROXTERM_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef DEFNS_H 24 | #include "defns.h" 25 | #endif 26 | 27 | #include 28 | 29 | #include "multitab.h" 30 | 31 | typedef struct ROXTermData ROXTermData; 32 | 33 | /* Make sure global options have been parsed before calling this, but call it 34 | * before anything else like roxterm_launch. Sets up important global 35 | * variables etc. 36 | */ 37 | void roxterm_init(void); 38 | 39 | /* Launch a new terminal in response to a D-BUS message or for first time. 40 | * env is copied without being altered. 41 | */ 42 | void roxterm_launch(char **env); 43 | 44 | /* Ways of spawning a command */ 45 | typedef enum { 46 | ROXTerm_SpawnExternal, /* Run independently of ROXterm, 47 | eg because it has its own window */ 48 | ROXTerm_SpawnNewWindow, /* Run command in a new ROXterm window */ 49 | ROXTerm_SpawnNewTab /* Run command in a new ROXterm tab */ 50 | } ROXTerm_SpawnType; 51 | 52 | /* NB ROXTermData is unused if spawn type is External */ 53 | void roxterm_spawn(ROXTermData *, const char *command, ROXTerm_SpawnType); 54 | 55 | gboolean roxterm_spawn_command_line(const gchar *command_line, 56 | const char *cwd, char **env, GError **error); 57 | 58 | VteTerminal *roxterm_get_vte_terminal(ROXTermData *roxterm); 59 | 60 | const char *roxterm_get_profile_name(ROXTermData *roxterm); 61 | 62 | const char *roxterm_get_colour_scheme_name(ROXTermData *roxterm); 63 | 64 | char *roxterm_get_cwd(ROXTermData *roxterm); 65 | 66 | /* Returns non-full-screen dimensions */ 67 | void roxterm_get_nonfs_dimensions(ROXTermData *roxterm, int *cols, int *rows); 68 | 69 | double roxterm_get_zoom_factor(ROXTermData *roxterm); 70 | 71 | char const * const *roxterm_get_actual_commandv(ROXTermData *roxterm); 72 | 73 | void roxterm_stuff_changed_handler(const char *what_happened, 74 | const char *family_name, const char *current_name, 75 | const char *new_name); 76 | 77 | gboolean roxterm_load_session(const char *xml, gssize len, 78 | const char *client_id); 79 | 80 | MultiWin *roxterm_get_multi_win(ROXTermData *roxterm); 81 | 82 | VteTerminal *roxterm_get_vte(ROXTermData *roxterm); 83 | 84 | typedef enum { 85 | ROXTERM_SEARCH_MATCH_CASE = 1, 86 | ROXTERM_SEARCH_ENTIRE_WORD = 2, 87 | ROXTERM_SEARCH_AS_REGEX = 4, 88 | ROXTERM_SEARCH_BACKWARDS = 8, 89 | ROXTERM_SEARCH_WRAP = 16 90 | } ROXTermSearchFlags; 91 | 92 | /* Returns FALSE and sets error if unable to compile regex */ 93 | gboolean roxterm_set_search(ROXTermData *roxterm, 94 | const char *pattern, guint flags, GError **error); 95 | 96 | const char *roxterm_get_search_pattern(ROXTermData *roxterm); 97 | guint roxterm_get_search_flags(ROXTermData *roxterm); 98 | 99 | /* text points to the start of the block that this function should free. 100 | * The base64 comes at text_offset after this. 101 | */ 102 | void roxterm_osc52_handler(ROXTermData * roxterm, const char *clipboards, 103 | guchar *text, gsize text_offset, 104 | gsize text_len); 105 | 106 | /* Returns FALSE if this roxterm has been destroyed */ 107 | gboolean roxterm_is_valid(ROXTermData *roxterm); 108 | 109 | #endif /* ROXTERM_H */ 110 | 111 | /* vi:set sw=4 ts=4 et cindent cino= */ 112 | -------------------------------------------------------------------------------- /src/rtdbus.h: -------------------------------------------------------------------------------- 1 | #ifndef RTDBUS_H 2 | #define RTDBUS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* D-BUS functions common to all parts of ROXTerm */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | #include 30 | 31 | /* These are just stubs; they should have a specific suffix appended */ 32 | #define RTDBUS_NAME "net.sf.roxterm" 33 | #define RTDBUS_OBJECT_PATH "/net/sf/roxterm" 34 | #define RTDBUS_INTERFACE RTDBUS_NAME 35 | #define RTDBUS_ERROR RTDBUS_NAME 36 | 37 | extern DBusConnection *rtdbus_connection; 38 | extern DBusGConnection *rtdbus_g_connection; 39 | 40 | extern gboolean rtdbus_ok; 41 | 42 | /* Report a D-BUS error in a dialog, prepending message 's', 43 | * then free the error data */ 44 | void rtdbus_whinge(DBusError *pderror, const char *s); 45 | 46 | /* As above but print it on the console with g_warning */ 47 | void rtdbus_warn(DBusError *pderror, const char *s); 48 | 49 | /* Unrefs message after sending */ 50 | gboolean rtdbus_send_message(DBusMessage *message); 51 | 52 | /* As above but waits for a reply and checks it for success */ 53 | gboolean rtdbus_send_message_with_reply(DBusMessage *message); 54 | 55 | /* Returns TRUE if another instance already has the name */ 56 | gboolean rtdbus_start_service(const char *name, const char *object_path, 57 | DBusObjectPathMessageFunction, gboolean replace); 58 | 59 | /* Call before any other D-BUS functions. May be called more than once */ 60 | gboolean rtdbus_init(void); 61 | 62 | /* Adds a match rule and filter */ 63 | gboolean rtdbus_add_rule_and_filter(const char *match_rule, 64 | DBusHandleMessageFunction filter_fn, void *user_data); 65 | 66 | /* Constructs a match rule for the given signal and adds a filter for it */ 67 | gboolean rtdbus_add_signal_rule_and_filter( 68 | const char *path, const char *interface, 69 | DBusHandleMessageFunction); 70 | 71 | /* Creates a signal message with the given arguments passed as pairs of 72 | * DBUS_TYPE_*, &(*) terminated by DBUS_TYPE_INVALID */ 73 | DBusMessage *rtdbus_signal_new(const char *object_path, const char *interface, 74 | const char *signal_name, int first_arg_type, ...); 75 | 76 | /* As above but creates a method call */ 77 | DBusMessage *rtdbus_method_new(const char *bus_name, const char *object_path, 78 | const char *interface, const char *method_name, 79 | int first_arg_type, ...); 80 | 81 | /* Appends args (see above) to message and returns the modified message. On 82 | * failure (unlikely) the message is freed, an error is printed and NULL is 83 | * returned */ 84 | DBusMessage *rtdbus_append_args(DBusMessage *message, 85 | int first_arg_type, ...); 86 | 87 | /* See above */ 88 | DBusMessage *rtdbus_append_args_valist(DBusMessage *message, 89 | int first_arg_type, va_list ap); 90 | 91 | /* Returns NULL-terminated array of strings ("strv") corresponding to a 92 | * message's args. Non-string message args are counted as errors and skipped. 93 | * Result may be freed with g_strfreev if it isn't NULL (no args). 94 | * iter must be initialised before calling. 95 | */ 96 | char **rtdbus_get_message_args_as_strings(DBusMessageIter *iter); 97 | 98 | /* Returns a "strv" from a single message arg, advancing iter */ 99 | char **rtdbus_get_message_arg_string_array(DBusMessageIter *iter); 100 | 101 | #endif /* RTDBUS_H */ 102 | 103 | /* vi:set sw=4 ts=4 et cindent cino= */ 104 | -------------------------------------------------------------------------------- /src/search.h: -------------------------------------------------------------------------------- 1 | #ifndef SEARCH_H 2 | #define SEARCH_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | /* Miscellaneous dialog boxes */ 23 | 24 | #ifndef DEFNS_H 25 | #include "defns.h" 26 | #endif 27 | 28 | #include "roxterm.h" 29 | 30 | void search_open_dialog(ROXTermData *roxterm); 31 | 32 | #endif /* SEARCH_H */ 33 | 34 | /* vi:set sw=4 ts=4 et cindent cino= */ 35 | -------------------------------------------------------------------------------- /src/session-file.h: -------------------------------------------------------------------------------- 1 | #ifndef SESSION_FILE_H 2 | #define SESSION_FILE_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | /* Session file management common to named sessions and SM */ 23 | 24 | #ifndef DEFNS_H 25 | #include "defns.h" 26 | #endif 27 | 28 | char *session_get_filename(const char *leafname, const char *dir, 29 | gboolean create_dir); 30 | 31 | gboolean save_session_to_file(const char *filename, const char *client_id); 32 | 33 | gboolean load_session_from_file(const char *filename, const char *client_id); 34 | 35 | /* 36 | void 37 | roxterm_sm_log(const char *format, ...); 38 | 39 | #define SLOG roxterm_sm_log 40 | */ 41 | 42 | #define SLOG(f, ...) 43 | 44 | #endif /* SESSION_FILE_H */ 45 | 46 | /* vi:set sw=4 ts=4 et cindent cino= */ 47 | -------------------------------------------------------------------------------- /src/shortcuts.h: -------------------------------------------------------------------------------- 1 | #ifndef SHORTCUTS_H 2 | #define SHORTCUTS_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | #include "defns.h" 23 | 24 | #ifndef ROXTERM_CAPPLET 25 | #include "options.h" 26 | 27 | /* Call once to connect signal to save shortcuts when changed by user; or you 28 | * can just leave it because it will be called by shortcuts_open */ 29 | void shortcuts_init(void); 30 | 31 | /* Loads named keyboard shortcuts scheme, adding accelerators to the global 32 | * GtkAccelMap. If file not found or NULL, tries to load Default. If reload 33 | * is TRUE it forces the shortcuts to be reloaded from the file even if a 34 | * scheme of the same name is already loaded. 35 | */ 36 | Options *shortcuts_open(const char *scheme_name, gboolean reload); 37 | 38 | void shortcuts_unref(Options *scheme); 39 | 40 | #if GTK_CHECK_VERSION(3, 10, 0) 41 | inline static void shortcuts_enable_signal_handler(gboolean enable) 42 | { 43 | (void) enable; 44 | } 45 | #else 46 | void shortcuts_enable_signal_handler(gboolean enable); 47 | #endif 48 | 49 | gboolean shortcuts_key_is_shortcut(Options *shortcuts, 50 | guint key, GdkModifierType modifiers); 51 | 52 | const char *shortcuts_get_index_str(Options *shortcuts); 53 | 54 | #endif /* ROXTERM_CAPPLET */ 55 | 56 | /* window = parent window for dialogs in case of error etc */ 57 | void shortcuts_edit(GtkWindow *window, const char *name); 58 | 59 | #endif /* SHORTCUTS_H */ 60 | 61 | /* vi:set sw=4 ts=4 et cindent cino= */ 62 | -------------------------------------------------------------------------------- /src/uri.c: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2015 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | 21 | #include "defns.h" 22 | 23 | #include 24 | #include 25 | 26 | #include "uri.h" 27 | 28 | char *uri_get_ssh_command(const char *uri, const char *ssh) 29 | { 30 | const char *at; 31 | char *result; 32 | char *hostname; 33 | const char *port; 34 | char *user; 35 | 36 | if (!ssh) 37 | ssh = "ssh"; 38 | if (g_str_has_prefix(uri, "ssh://")) 39 | uri += 6; 40 | 41 | at = strchr(uri, '@'); 42 | if (at) 43 | { 44 | char *colon; 45 | 46 | user = g_strdup_printf("%.*s", (int) (at - uri), uri); 47 | colon = strchr(user, ':'); 48 | /* Just strip password, ssh doesn't support it on CLI */ 49 | if (colon) 50 | *colon = 0; 51 | uri = at + 1; 52 | } 53 | else 54 | { 55 | user = NULL; 56 | } 57 | 58 | port = strchr(uri, ':'); 59 | if (port) 60 | { 61 | hostname = g_strdup_printf("%.*s", (int) (port - uri), uri); 62 | ++port; 63 | uri = hostname; 64 | } 65 | else 66 | { 67 | hostname = NULL; 68 | } 69 | 70 | result = g_strdup_printf("%s%s%s%s%s %s", ssh, 71 | user ? " -l " : "", user ? user : "", 72 | port ? " -p " : "", port ? port : "", 73 | uri); 74 | g_free(hostname); 75 | g_free(user); 76 | return result; 77 | } 78 | 79 | /* vi:set sw=4 ts=4 et cindent cino= */ 80 | -------------------------------------------------------------------------------- /src/uri.h: -------------------------------------------------------------------------------- 1 | #ifndef URI_H 2 | #define URI_H 3 | /* 4 | roxterm - VTE/GTK terminal emulator with tabs 5 | Copyright (C) 2004-2015 Tony Houghton 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | /* URI handling */ 24 | 25 | #ifndef DEFNS_H 26 | #include "defns.h" 27 | #endif 28 | 29 | char *uri_get_ssh_command(const char *uri, const char *ssh); 30 | 31 | #endif /* URI_H */ 32 | 33 | /* vi:set sw=4 ts=4 et cindent cino= */ 34 | -------------------------------------------------------------------------------- /src/version.h.in: -------------------------------------------------------------------------------- 1 | /* 2 | roxterm - VTE/GTK terminal emulator with tabs 3 | Copyright (C) 2004-2018 Tony Houghton 4 | 5 | This program is free software; you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation; either version 2 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program; if not, write to the Free Software 17 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #ifndef ROXTERM__VERSION_H 21 | #define ROXTERM__VERSION_H 22 | 23 | #define VERSION "@ROXTERM_VERSION@" 24 | 25 | #endif /* ROXTERM__VERSION_H */ 26 | -------------------------------------------------------------------------------- /update-tags: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | MAIN=master 3 | RELEASE="$1" 4 | if [ -z "$RELEASE" ] ; then 5 | echo "You forgot the version number" >&2 6 | exit 1 7 | fi 8 | if echo "$RELEASE" | grep -q 'beta' ; then 9 | TAG="Beta" 10 | else 11 | TAG="Release" 12 | printf $RELEASE > version 13 | printf $RELEASE > release_version 14 | git commit release_version -m "Version $RELEASE" 15 | fi 16 | git tag -s --force $RELEASE -m "$TAG $RELEASE" $2 17 | if [ $TAG = "Release" ] ; then 18 | git checkout stable 19 | git merge $MAIN 20 | git push origin stable:stable 21 | git checkout $MAIN 22 | fi 23 | -------------------------------------------------------------------------------- /upload: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | f=$1 4 | if [ ! -f $f ] ; then 5 | echo "File not found or given" >&2 6 | exit 1 7 | fi 8 | d=`basename $f | sed 's/roxterm-//;s/.tar.xz//'` 9 | mkdir $d 10 | cp $f $d 11 | f=$f.sign 12 | [ -f $f ] && cp $f $d 13 | 14 | rsync -avP -e ssh $d realh,roxterm@frs.sourceforge.net:/home/frs/project/r/ro/roxterm/roxterm/ 15 | 16 | rm -rf $d 17 | -------------------------------------------------------------------------------- /upload_docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | rsync -rv --rsh="ssh -l realh" Help/ realh,roxterm@web.sourceforge.net:/home/groups/r/ro/roxterm/htdocs 3 | -------------------------------------------------------------------------------- /version.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | cd `dirname "$0"` 3 | if [ -d ".git" ] ; then 4 | v=`git describe` 5 | echo "$v" | grep -qv '^beta-' && v=`git describe --match '[0-9]*'` 6 | [ -z "$v" ] && v=`git describe --match 'beta-[0-9]*'` 7 | v=${v/-/.} 8 | v="${v/-/\~}" 9 | printf $v > version 10 | if echo $v | grep -qv '~' ; then 11 | printf $v > release_version 12 | fi 13 | elif [ -f version ] ; then 14 | v=`cat version` 15 | else 16 | v=`cat release_version` 17 | fi 18 | printf "${v/beta./}" 19 | --------------------------------------------------------------------------------