diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..677477f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig +root = true + +# elementary defaults +[*] +charset = utf-8 +end_of_line = lf +indent_size = tab +indent_style = space +insert_final_newline = true +max_line_length = 80 +tab_width = 4 + +# Markup files +[{*.html,*.xml,*.xml.in,*.yml}] +tab_width = 2 diff --git a/.gitignore b/.gitignore index ca6cfcb..1682ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,3 @@ *.swp *~ - build -.ninja_* -build.ninja -data/writeas diff --git a/data/writeas-gtk.appdata.xml.in b/data/com.github.writeas.writeas-gtk.appdata.xml.in similarity index 96% rename from data/writeas-gtk.appdata.xml.in rename to data/com.github.writeas.writeas-gtk.appdata.xml.in index 7107478..9b87fe5 100644 --- a/data/writeas-gtk.appdata.xml.in +++ b/data/com.github.writeas.writeas-gtk.appdata.xml.in @@ -1,114 +1,114 @@ - @app_id@ + com.github.writeas.writeas-gtk GPL-3.0+ CC0 Write.as Publish a thought in seconds

Write.as is a simple writing tool and publishing platform. There's no sign up — just open the app, write something, and publish.

Published posts get a secret, unique link on Write.as that you can share with anyone, or keep to yourself. In either case, you remain private because we don't collect personal information about you.

  • Simple, distraction-free editor built for your words
  • Instantly launches to a blank page or your last draft
  • Writing automatically saves as you type
  • Work on a single local draft, then publish or save as another file when you're finished
  • Choose from three different fonts: serif, sans-serif, or monospace
  • Dark mode on platforms that support it
  • -
  • Publish to Write.as and share your post (example)
  • +
  • Publish to Write.as and share your post
  • Manage published posts with the built-in command-line interface
Write.as https://write.as/ https://write.as/contact https://github.com/writeas/writeas-gtk/issues hello@write.as - @app_id@ + com.github.writeas.writeas-gtk The Write.as editor. https://write.as/img/screens/gtk/serif.png The Write.as editor in dark mode. https://write.as/img/screens/gtk/serif-dark.png https://write.as/img/screens/gtk/sans.png https://write.as/img/screens/gtk/monospace.png none none none none none none none none none none none none none none none none none none none none none moderate none none none none none

This update fixes a few minor visual issues.

  • Fix black bar that appears in the editor on elementary OS
  • Fix currently-selected font not reflected in menu when app first loads

GTK updates and fixes.

  • Fix fonts, padding, cursor color
  • Increase the default font size

Initial release

  • Auto-saving single draft
  • Dark mode on platforms that support it
  • Choose between three fonts
  • Save draft as another file
  • Publish anonymously to Write.as
25
diff --git a/data/writeas-gtk.desktop.in b/data/com.github.writeas.writeas-gtk.desktop.in similarity index 73% rename from data/writeas-gtk.desktop.in rename to data/com.github.writeas.writeas-gtk.desktop.in index 0ec22b5..1c4f71a 100644 --- a/data/writeas-gtk.desktop.in +++ b/data/com.github.writeas.writeas-gtk.desktop.in @@ -1,12 +1,12 @@ [Desktop Entry] Type=Application Name=Write.as Comment=Publish a thought in seconds. -Exec=@app_id@ -Icon=@app_id@ +Exec=com.github.writeas.writeas-gtk +Icon=com.github.writeas.writeas-gtk Terminal=false MimeType= Categories=GTK;Office;Publishing; Keywords=blog;text;editor;publish; StartupNotify=true diff --git a/data/icons/128/writeas-gtk.png b/data/icons/128/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/128/writeas-gtk.png rename to data/icons/128/com.github.writeas.writeas-gtk.png diff --git a/data/icons/16/writeas-gtk.png b/data/icons/16/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/16/writeas-gtk.png rename to data/icons/16/com.github.writeas.writeas-gtk.png diff --git a/data/icons/24/writeas-gtk.png b/data/icons/24/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/24/writeas-gtk.png rename to data/icons/24/com.github.writeas.writeas-gtk.png diff --git a/data/icons/32/writeas-gtk.png b/data/icons/32/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/32/writeas-gtk.png rename to data/icons/32/com.github.writeas.writeas-gtk.png diff --git a/data/icons/48/writeas-gtk.png b/data/icons/48/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/48/writeas-gtk.png rename to data/icons/48/com.github.writeas.writeas-gtk.png diff --git a/data/icons/64/writeas-gtk.png b/data/icons/64/com.github.writeas.writeas-gtk.png similarity index 100% rename from data/icons/64/writeas-gtk.png rename to data/icons/64/com.github.writeas.writeas-gtk.png diff --git a/data/meson.build b/data/meson.build index 73b7444..59bd02a 100644 --- a/data/meson.build +++ b/data/meson.build @@ -1,24 +1,32 @@ +# Install icons icon_sizes = ['16', '24', '32', '48', '64', '128'] foreach i : icon_sizes - install_data( - join_paths('icons', i, meson.project_name() + '.png'), - install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', i + 'x' + i, 'apps'), - rename: '@0@.png'.format(app_id) + install_data ( + join_paths ('icons', i, meson.project_name () + '.png'), + install_dir: join_paths (get_option ('datadir'), 'icons', 'hicolor', i + 'x' + i, 'apps') + ) + install_data ( + join_paths ('icons', i, meson.project_name () + '.png'), + install_dir: join_paths (get_option ('datadir'), 'icons', 'hicolor', i + 'x' + i + '@2', 'apps') ) endforeach -data_conf = configuration_data() -data_conf.set('app_id', app_id) -configure_file( - input: 'writeas-gtk.desktop.in', - output: '@0@.desktop'.format(app_id), - configuration: data_conf, - install_dir: join_paths(get_option('datadir'), 'applications') +# Translate and install our .desktop file so the Applications Menu will see it +i18n.merge_file ( + input: meson.project_name () + '.desktop.in', + output: meson.project_name () + '.desktop', + po_dir: join_paths (meson.source_root (), 'po', 'extra'), + type: 'desktop', + install: true, + install_dir: join_paths (get_option ('datadir'), 'applications') ) -configure_file( - input: 'writeas-gtk.appdata.xml.in', - output: '@0@.appdata.xml'.format(app_id), - configuration: data_conf, - install_dir: join_paths(get_option('datadir'), 'metainfo') + +# Translate and install our .appdata.xml file so AppCenter will see it +i18n.merge_file ( + input: meson.project_name () + '.appdata.xml.in', + output: meson.project_name () + '.appdata.xml', + po_dir: join_paths (meson.source_root (), 'po', 'extra'), + install: true, + install_dir: join_paths (get_option ('datadir'), 'metainfo') ) diff --git a/screenshot-monospace.png b/data/screenshots/screenshot-monospace.png similarity index 100% rename from screenshot-monospace.png rename to data/screenshots/screenshot-monospace.png diff --git a/screenshot-sans-light.png b/data/screenshots/screenshot-sans-light.png similarity index 100% rename from screenshot-sans-light.png rename to data/screenshots/screenshot-sans-light.png diff --git a/screenshot-serif-dark.png b/data/screenshots/screenshot-serif-dark.png similarity index 100% rename from screenshot-serif-dark.png rename to data/screenshots/screenshot-serif-dark.png diff --git a/screenshot-serif-light.png b/data/screenshots/screenshot-serif-light.png similarity index 100% rename from screenshot-serif-light.png rename to data/screenshots/screenshot-serif-light.png diff --git a/meson.build b/meson.build index 00b1074..56f0f0d 100644 --- a/meson.build +++ b/meson.build @@ -1,29 +1,45 @@ -project('writeas-gtk', ['vala', 'c'], +# Project name, programming language and version +project ( + 'com.github.writeas.writeas-gtk', + 'c', 'vala', version: '1.0.2', - license: 'GPL', - meson_version: '>=0.46.0') +) -i18n = import('i18n') -build_platform = get_option('platform') -if build_platform == 'elementary' - app_id = 'com.github.writeas.writeas-gtk' -else - app_id = 'writeas-gtk' -endif +# GNOME module +gnome = import ('gnome') -conf = configuration_data() -conf.set_quoted('GETTEXT_PACKAGE', app_id) -conf.set_quoted('APP_ID', app_id) -conf.set_quoted('BUILD_PLATFORM', build_platform) -config_h = configure_file(output: 'config.h', configuration: conf) -config_h_dir = include_directories('.') +# Translation module +i18n = import ('i18n') + + +# Project arguments +add_project_arguments ( + '-DGETTEXT_PACKAGE="@0@"'.format (meson.project_name ()), + language: 'c' +) + +# Listing dependencies +dependencies = [ + dependency ('gtk+-3.0'), + dependency ('gtksourceview-3.0') +] run_target('build', command: 'meson/build-cli.sh') -subdir('data') -subdir('src') -subdir('fonts/lora') +subdir ('src') + +# Define executable +executable ( + meson.project_name (), + sources, + dependencies: dependencies, + install: true +) + +subdir ('data') +subdir ('po') -meson.add_install_script('meson/post_install.py') +subdir ('fonts/lora') +meson.add_install_script ('meson/post_install.py') diff --git a/meson/build-cli.sh b/meson/build-cli.sh index 023c655..c42d042 100755 --- a/meson/build-cli.sh +++ b/meson/build-cli.sh @@ -1,7 +1,3 @@ -#!/bin/bash - -exec_name=writeas - -echo "Building $exec_name CLI..." +echo "Building $exec_name CLI…" gb build github.com/writeas/writeas-cli/cmd/writeas && echo "Success." diff --git a/meson/post_install.py b/meson/post_install.py index 7634127..f0e9ea9 100644 --- a/meson/post_install.py +++ b/meson/post_install.py @@ -1,22 +1,15 @@ #!/usr/bin/env python3 -import os +from os import path, environ import subprocess -prefix = os.environ.get('MESON_INSTALL_PREFIX', '/usr/local') -datadir = os.path.join(prefix, 'share') +prefix = environ.get('MESON_INSTALL_PREFIX', '/usr/local') +schemadir = path.join(environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas') +datadir = path.join(prefix, 'share') +desktop_database_dir = path.join(datadir, 'applications') -# Packaging tools define DESTDIR and this isn't needed for them -if 'DESTDIR' not in os.environ: - print('Updating icon cache...') - icon_cache_dir = os.path.join(datadir, 'icons', 'hicolor') - if not os.path.exists(icon_cache_dir): - os.makedirs(icon_cache_dir) - subprocess.call(['gtk-update-icon-cache', '-qtf', icon_cache_dir]) - - print('Updating desktop database...') - desktop_database_dir = os.path.join(datadir, 'applications') - if not os.path.exists(desktop_database_dir): - os.makedirs(desktop_database_dir) +if not environ.get('DESTDIR'): + print('Updating desktop database…') subprocess.call(['update-desktop-database', '-q', desktop_database_dir]) - + print('Updating icon cache…') + subprocess.call(['gtk-update-icon-cache', '-qtf', path.join(datadir, 'icons', 'hicolor')]) \ No newline at end of file diff --git a/meson_options.txt b/meson_options.txt deleted file mode 100644 index 29bd56e..0000000 --- a/meson_options.txt +++ /dev/null @@ -1 +0,0 @@ -option('platform', type: 'combo', choices: ['default', 'elementary'], value: 'default') diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..717280a --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1 @@ +fr \ No newline at end of file diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 0000000..97ad7fb --- /dev/null +++ b/po/POTFILES @@ -0,0 +1,2 @@ +src/Granite/Accels.vala +src/Window.vala diff --git a/po/com.github.writeas.writeas-gtk.pot b/po/com.github.writeas.writeas-gtk.pot new file mode 100644 index 0000000..aba4fef --- /dev/null +++ b/po/com.github.writeas.writeas-gtk.pot @@ -0,0 +1,97 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the com.github.writeas.writeas-gtk package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: com.github.writeas.writeas-gtk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-19 15:58+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: src/Granite/Accels.vala:42 +msgid "Shift" +msgstr "" + +#: src/Granite/Accels.vala:46 +msgid "Ctrl" +msgstr "" + +#: src/Granite/Accels.vala:50 +msgid "Alt" +msgstr "" + +#. TRANSLATORS: This is a non-symbol representation of the "-" key +#: src/Granite/Accels.vala:69 +msgid "Minus" +msgstr "" + +#. TRANSLATORS: This is a non-symbol representation of the "+" key +#: src/Granite/Accels.vala:74 +msgid "Plus" +msgstr "" + +#: src/Granite/Accels.vala:78 +msgid "Enter" +msgstr "" + +#. TRANSLATORS: This is a delimiter that separates two keyboard shortcut labels like "⌘ + →, Control + A" +#: src/Granite/Accels.vala:124 +msgid ", " +msgstr "" + +#: src/Window.vala:56 +#, c-format +msgid "%i word" +msgid_plural "%i words" +msgstr[0] "" +msgstr[1] "" + +#: src/Window.vala:144 +msgid "Publish to Write.as on the web" +msgstr "" + +#: src/Window.vala:154 +msgid "Light theme" +msgstr "" + +#: src/Window.vala:155 +msgid "Dark theme" +msgstr "" + +#: src/Window.vala:158 +msgid "Toggle light/dark theme" +msgstr "" + +#: src/Window.vala:172 +msgid "Change document font" +msgstr "" + +#: src/Window.vala:177 +msgid "Serif" +msgstr "" + +#: src/Window.vala:178 +msgid "Sans-serif" +msgstr "" + +#: src/Window.vala:180 +msgid "Monospace" +msgstr "" + +#: src/Window.vala:374 +msgid "Save as" +msgstr "" + +#: src/Window.vala:387 +msgid "Cancel" +msgstr "" diff --git a/po/extra/LINGUAS b/po/extra/LINGUAS new file mode 100644 index 0000000..717280a --- /dev/null +++ b/po/extra/LINGUAS @@ -0,0 +1 @@ +fr \ No newline at end of file diff --git a/po/extra/POTFILES b/po/extra/POTFILES new file mode 100644 index 0000000..ad9f2ac --- /dev/null +++ b/po/extra/POTFILES @@ -0,0 +1,2 @@ +data/com.github.writeas.writeas-gtk.desktop.in +data/com.github.writeas.writeas-gtk.appdata.xml.in \ No newline at end of file diff --git a/po/extra/extra.pot b/po/extra/extra.pot new file mode 100644 index 0000000..0870b01 --- /dev/null +++ b/po/extra/extra.pot @@ -0,0 +1,140 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the extra package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: extra\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-19 15:58+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/com.github.writeas.writeas-gtk.desktop.in:4 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:6 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:24 +msgid "Write.as" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.desktop.in:5 +msgid "Publish a thought in seconds." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.desktop.in:7 +msgid "com.github.writeas.writeas-gtk" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.desktop.in:11 +msgid "blog;text;editor;publish;" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:7 +msgid "Publish a thought in seconds" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:10 +msgid "" +"Write.as is a simple writing tool and publishing platform. There's no sign " +"up — just open the app, write something, and publish." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:11 +msgid "" +"Published posts get a secret, unique link on Write.as that you can share " +"with anyone, or keep to yourself. In either case, you remain private because " +"we don't collect personal information about you." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:13 +msgid "Simple, distraction-free editor built for your words" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:14 +msgid "Instantly launches to a blank page or your last draft" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:15 +msgid "Writing automatically saves as you type" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:16 +msgid "" +"Work on a single local draft, then publish or save as another file when " +"you're finished" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:17 +msgid "Choose from three different fonts: serif, sans-serif, or monospace" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:18 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:103 +msgid "Dark mode on platforms that support it" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:19 +msgid "Publish to Write.as and share your post" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:20 +msgid "Manage published posts with the built-in command-line interface" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:36 +msgid "The Write.as editor." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:40 +msgid "The Write.as editor in dark mode." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:82 +msgid "This update fixes a few minor visual issues." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:84 +msgid "Fix black bar that appears in the editor on elementary OS" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:85 +msgid "Fix currently-selected font not reflected in menu when app first loads" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:91 +msgid "GTK updates and fixes." +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:93 +msgid "Fix fonts, padding, cursor color" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:94 +msgid "Increase the default font size" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:100 +msgid "Initial release" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:102 +msgid "Auto-saving single draft" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:104 +msgid "Choose between three fonts" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:105 +msgid "Save draft as another file" +msgstr "" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:106 +msgid "Publish anonymously to Write.as" +msgstr "" diff --git a/po/extra/fr.po b/po/extra/fr.po new file mode 100644 index 0000000..c5d2145 --- /dev/null +++ b/po/extra/fr.po @@ -0,0 +1,155 @@ +# French translations for extra package. +# Copyright (C) 2021 THE extra'S COPYRIGHT HOLDER +# This file is distributed under the same license as the extra package. +# Nathan Bonnemains (@NathanBnm), 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: extra\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-19 15:58+0100\n" +"PO-Revision-Date: 2021-11-19 15:53+0100\n" +"Last-Translator: Nathan Bonnemains (@NathanBnm)\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: data/com.github.writeas.writeas-gtk.desktop.in:4 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:6 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:24 +msgid "Write.as" +msgstr "Write.as" + +#: data/com.github.writeas.writeas-gtk.desktop.in:5 +msgid "Publish a thought in seconds." +msgstr "Publiez vos pensées en quelques secondes." + +#: data/com.github.writeas.writeas-gtk.desktop.in:7 +msgid "com.github.writeas.writeas-gtk" +msgstr "com.github.writeas.writeas-gtk" + +#: data/com.github.writeas.writeas-gtk.desktop.in:11 +msgid "blog;text;editor;publish;" +msgstr "blog;texte;éditeur;publier;" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:7 +msgid "Publish a thought in seconds" +msgstr "Publiez vos pensées en quelques secondes" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:10 +msgid "" +"Write.as is a simple writing tool and publishing platform. There's no sign " +"up — just open the app, write something, and publish." +msgstr "" +"Write.as est une simple application d'écriture et de publication. Il n'y a " +"pas d'inscription — ouvrez simplement l'application, écrivez quelque-chose, " +"et publiez-le." + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:11 +msgid "" +"Published posts get a secret, unique link on Write.as that you can share " +"with anyone, or keep to yourself. In either case, you remain private because " +"we don't collect personal information about you." +msgstr "" +"Les publications possèdent un lien unique et secret sur Write.as que vous " +"pouvez partager avec qui vous souhaitez, ou bien le garder pour vous. Dans " +"tous les cas, cela reste privé car nous ne collectons pas d'informations " +"personnelles sur vous." + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:13 +msgid "Simple, distraction-free editor built for your words" +msgstr "Un éditeur simple, sans distraction construit pour vos écritures" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:14 +msgid "Instantly launches to a blank page or your last draft" +msgstr "" +"Lancement instantanné sur une page blanche ou bien votre dernier brouillon" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:15 +msgid "Writing automatically saves as you type" +msgstr "Enregistrement automatique au fur et à mesure que vous tapez" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:16 +msgid "" +"Work on a single local draft, then publish or save as another file when " +"you're finished" +msgstr "" +"Travaillez sur un brouillon local, puis publiez ou enregistrez le en tant " +"que fichier lorsqu'il est terminé" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:17 +msgid "Choose from three different fonts: serif, sans-serif, or monospace" +msgstr "" +"Choisissez parmi trois différentes polices : serif, sans-serif ou monospace" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:18 +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:103 +msgid "Dark mode on platforms that support it" +msgstr "Thème sombre sur les plateformes qui le supportent" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:19 +msgid "Publish to Write.as and share your post" +msgstr "Publiez sur Write.as et partagez votre publication" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:20 +msgid "Manage published posts with the built-in command-line interface" +msgstr "" +"Gérez vos publications publiées avec l'interface en ligne de commande incluse" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:36 +msgid "The Write.as editor." +msgstr "L'éditeur Write.as" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:40 +msgid "The Write.as editor in dark mode." +msgstr "L'éditeur Write.as avec le thème sombre" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:82 +msgid "This update fixes a few minor visual issues." +msgstr "Cette mise à jour corrige quelques problèmes graphiques mineurs." + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:84 +msgid "Fix black bar that appears in the editor on elementary OS" +msgstr "" +"Correction de la barre noire qui apparaît dans l'éditeur sur elementary OS" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:85 +msgid "Fix currently-selected font not reflected in menu when app first loads" +msgstr "" +"Correction de la police sélectionnée qui ne s'appliquait pas dans le menu au " +"premier chargement de l'application" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:91 +msgid "GTK updates and fixes." +msgstr "Mise à jour de GTK et corrections." + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:93 +msgid "Fix fonts, padding, cursor color" +msgstr "Correction des polices, des marges et de la couleur du curseur" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:94 +msgid "Increase the default font size" +msgstr "Augmentation de la taille de la police par défaut" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:100 +msgid "Initial release" +msgstr "Version initiale" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:102 +msgid "Auto-saving single draft" +msgstr "Enregistrement automatique d'un simple brouillon" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:104 +msgid "Choose between three fonts" +msgstr "Choisissez parmi tois polices" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:105 +msgid "Save draft as another file" +msgstr "Enregisrez le brouillon dans un autre fichier" + +#: data/com.github.writeas.writeas-gtk.appdata.xml.in:106 +msgid "Publish anonymously to Write.as" +msgstr "Publiez anonymement sur Write.as" diff --git a/po/extra/meson.build b/po/extra/meson.build new file mode 100644 index 0000000..637dc67 --- /dev/null +++ b/po/extra/meson.build @@ -0,0 +1,8 @@ +# Install metadata translations +i18n.gettext ('extra', + args: [ + '--directory=' + meson.source_root (), + '--from-code=UTF-8' + ], + install: false +) \ No newline at end of file diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..2dbb7ec --- /dev/null +++ b/po/fr.po @@ -0,0 +1,96 @@ +# French translations for com.github.writeas.writeas-gtk package. +# Copyright (C) 2021 THE com.github.writeas.writeas-gtk'S COPYRIGHT HOLDER +# This file is distributed under the same license as the com.github.writeas.writeas-gtk package. +# Nathan Bonnemains (@NathanBnm), 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: com.github.writeas.writeas-gtk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-19 15:58+0100\n" +"PO-Revision-Date: 2021-11-19 15:53+0100\n" +"Last-Translator: Nathan Bonnemains (@NathanBnm)\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/Granite/Accels.vala:42 +msgid "Shift" +msgstr "Maj" + +#: src/Granite/Accels.vala:46 +msgid "Ctrl" +msgstr "Ctrl" + +#: src/Granite/Accels.vala:50 +msgid "Alt" +msgstr "Alt" + +#. TRANSLATORS: This is a non-symbol representation of the "-" key +#: src/Granite/Accels.vala:69 +msgid "Minus" +msgstr "Moins" + +#. TRANSLATORS: This is a non-symbol representation of the "+" key +#: src/Granite/Accels.vala:74 +msgid "Plus" +msgstr "Plus" + +#: src/Granite/Accels.vala:78 +msgid "Enter" +msgstr "Entrée" + +#. TRANSLATORS: This is a delimiter that separates two keyboard shortcut labels like "⌘ + →, Control + A" +#: src/Granite/Accels.vala:124 +msgid ", " +msgstr ", " + +#: src/Window.vala:56 +#, c-format +msgid "%i word" +msgid_plural "%i words" +msgstr[0] "%i mot" +msgstr[1] "%i mots" + +#: src/Window.vala:144 +msgid "Publish to Write.as on the web" +msgstr "Publier vers Write.as sur le Web" + +#: src/Window.vala:154 +msgid "Light theme" +msgstr "Thème clair" + +#: src/Window.vala:155 +msgid "Dark theme" +msgstr "Thème sombre" + +#: src/Window.vala:158 +msgid "Toggle light/dark theme" +msgstr "Basculer entre le thème clair/sombre" + +#: src/Window.vala:172 +msgid "Change document font" +msgstr "Modifier la police du document" + +#: src/Window.vala:177 +msgid "Serif" +msgstr "Serif" + +#: src/Window.vala:178 +msgid "Sans-serif" +msgstr "Sans-serif" + +#: src/Window.vala:180 +msgid "Monospace" +msgstr "Monospace" + +#: src/Window.vala:374 +msgid "Save as" +msgstr "Enregistrer sous" + +#: src/Window.vala:387 +msgid "Cancel" +msgstr "Annuler" diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 0000000..df1245b --- /dev/null +++ b/po/meson.build @@ -0,0 +1,11 @@ +# Install main translations +i18n.gettext (meson.project_name (), + args: [ + '--directory=' + meson.source_root (), + '--from-code=UTF-8', + '-cTRANSLATORS' + ], + preset: 'glib' +) + +subdir ('extra') \ No newline at end of file diff --git a/src/application.vala b/src/Application.vala similarity index 92% rename from src/application.vala rename to src/Application.vala index 848daa9..9936061 100644 --- a/src/application.vala +++ b/src/Application.vala @@ -1,44 +1,41 @@ /* Copyright © 2018 Write.as This file is part of the Write.as GTK desktop app. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -extern const string APP_ID; -extern const string BUILD_PLATFORM; - public class WriteAs.Application : Gtk.Application { construct { this.flags |= ApplicationFlags.HANDLES_OPEN; Intl.setlocale(LocaleCategory.ALL, ""); Intl.textdomain("write.as"); - application_id = APP_ID + ".desktop"; + application_id = "com.github.writeas.writeas-gtk" + ".desktop"; } public override void activate() { if (get_windows().length() == 0) new WriteAs.MainWindow(this).show_all(); } public override void open(File[] files, string hint) { activate(); // ensure we have a window open. } public static int main(string[] args) { return new WriteAs.Application().run(args); } } diff --git a/src/Granite/Accels.vala b/src/Granite/Accels.vala index 33eb62a..dd47222 100644 --- a/src/Granite/Accels.vala +++ b/src/Granite/Accels.vala @@ -1,136 +1,136 @@ // From https://github.com/elementary/granite/blob/621f2669f6c8940fe32ac9817ddca92e97d27ae0/lib/Widgets/Utils.vala#L79-L192 /* * Copyright (C) 2012-2017 Granite Developers * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ namespace Granite { /** * Converts a {@link Gtk.accelerator_parse} style accel string to a human-readable string. * * @param accel an accelerator label like “a” or “Right” * * @return a human-readable string like "Ctrl + A" or "⌘ + →" */ public static string accel_to_string (string accel) { uint accel_key; Gdk.ModifierType accel_mods; Gtk.accelerator_parse (accel, out accel_key, out accel_mods); string[] arr = {}; if (Gdk.ModifierType.SUPER_MASK in accel_mods) { arr += "⌘"; } if (Gdk.ModifierType.SHIFT_MASK in accel_mods) { arr += _("Shift"); } if (Gdk.ModifierType.CONTROL_MASK in accel_mods) { arr += _("Ctrl"); } if (Gdk.ModifierType.MOD1_MASK in accel_mods) { arr += _("Alt"); } switch (accel_key) { case Gdk.Key.Up: arr += "↑"; break; case Gdk.Key.Down: arr += "↓"; break; case Gdk.Key.Left: arr += "←"; break; case Gdk.Key.Right: arr += "→"; break; case Gdk.Key.minus: case Gdk.Key.KP_Subtract: - ///TRANSLATORS: This is a non-symbol representation of the "-" key + // TRANSLATORS: This is a non-symbol representation of the "-" key arr += _("Minus"); break; case Gdk.Key.KP_Add: case Gdk.Key.plus: - ///TRANSLATORS: This is a non-symbol representation of the "+" key + // TRANSLATORS: This is a non-symbol representation of the "+" key arr += _("Plus"); break; case Gdk.Key.KP_Enter: case Gdk.Key.Return: arr += _("Enter"); break; default: arr += Gtk.accelerator_get_label (accel_key, 0); break; } return string.joinv (" + ", arr); } /** * Takes a description and an array of accels and returns {@link Pango} markup for use in a {@link Gtk.Tooltip}. This method uses {@link Granite.accel_to_string}. * * Example: * * Description * Shortcut 1, Shortcut 2 * * @param a string array of accelerator labels like {"a", "Right"} * * @param description a standard tooltip text string * * @return {@link Pango} markup with the description label on one line and a list of human-readable accels on a new line */ public static string markup_accel_tooltip (string[]? accels, string? description = null) { string[] parts = {}; if (description != null && description != "") { parts += description; } if (accels != null && accels.length > 0) { string[] unique_accels = {}; for (int i = 0; i < accels.length; i++) { if (accels[i] == "") { continue; } var accel_string = accel_to_string (accels[i]); if (!(accel_string in unique_accels)) { unique_accels += accel_string; } } if (unique_accels.length > 0) { - ///TRANSLATORS: This is a delimiter that separates two keyboard shortcut labels like "⌘ + →, Control + A" + // TRANSLATORS: This is a delimiter that separates two keyboard shortcut labels like "⌘ + →, Control + A" var accel_label = string.joinv (_(", "), unique_accels); var accel_markup = """%s""".printf (accel_label); parts += accel_markup; } } return string.joinv ("\n", parts); } } diff --git a/src/window.vala b/src/Window.vala similarity index 97% rename from src/window.vala rename to src/Window.vala index fe91c6a..6cb5720 100644 --- a/src/window.vala +++ b/src/Window.vala @@ -1,419 +1,416 @@ /* Copyright © 2018 Write.as This file is part of the Write.as GTK desktop app. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ public class WriteAs.MainWindow : Gtk.ApplicationWindow { private Gtk.TextView canvas; private Gtk.HeaderBar header; private Granite.ModeSwitch darkmode_switch; private Gtk.RadioMenuItem font_serif_option; private Gtk.RadioMenuItem font_sans_option; private Gtk.RadioMenuItem font_wrap_option; private static string data_dir = ".writeas"; private static string version = "1.0.2"; private int font_size = 16; private bool dark_mode = false; private string font = "Lora, 'Palatino Linotype'," + "'Book Antiqua', 'New York', 'DejaVu serif', serif"; private string fontstyle = "serif"; private bool text_changed = false; private bool is_initializing = true; construct { header = new Gtk.HeaderBar(); header.title = "Write.as"; construct_toolbar(); build_keyboard_shortcuts(); var scrolled = new Gtk.ScrolledWindow(null, null); canvas = new Gtk.SourceView(); canvas.wrap_mode = Gtk.WrapMode.WORD_CHAR; scrolled.add(canvas); add(scrolled); size_allocate.connect((_) => {adjust_text_style();}); canvas.event_after.connect((evt) => { - // TODO This word count algorithm may be quite naive - // and could do improvement. + // TODO This word count algorithm may be quite naive and could do improvement. + var word_count = canvas.buffer.text.split(" ").length; header.subtitle = ngettext("%i word","%i words",word_count).printf(word_count); text_changed = true; }); Timeout.add_full(Priority.DEFAULT_IDLE, 100/*ms*/, () => { if (!text_changed) return Source.CONTINUE; var text = canvas.buffer.text; // This happens sometimes for some reason, but it's difficult to debug. if (text == "") return Source.CONTINUE; try { draft_file().replace_contents(text.data, null, false, FileCreateFlags.PRIVATE | FileCreateFlags.REPLACE_DESTINATION, null); text_changed = false; } catch (Error err) {/* We'll try again anyways. */} return Source.CONTINUE; }); adjust_text_style(false); } public MainWindow(Gtk.Application app) { stdout.printf("writeas-gtk v%s\n", version); set_application(app); - icon_name = APP_ID; + icon_name = "com.github.writeas.writeas-gtk"; init_folder(); try { open_file(draft_file()); } catch (Error err) {} restore_styles(); set_default_size(800, 600); is_initializing = false; } private static void init_folder() { var home = File.new_for_path(get_data_dir()); try { home.make_directory(); } catch (Error e) { stderr.printf("Create data dir: %s\n", e.message); } } private static string get_data_dir() { return Environment.get_home_dir() + "/" + data_dir; } private static File draft_file() { var home = File.new_for_path(get_data_dir()); return home.get_child("draft.txt"); } private static bool supports_dark_theme() { var theme = Gtk.Settings.get_default().gtk_theme_name; foreach (var datapath in Environment.get_system_data_dirs()) { var path = File.new_for_path(Path.build_filename(datapath, "themes", theme)); if (path.get_child("gtk-dark.css").query_exists()) return true; try { var enumerator = path.enumerate_children("standard::*", 0); FileInfo info = null; while ((info = enumerator.next_file()) != null) { var fullpath = path.get_child(info.get_name()).get_child("gtk-dark.css"); if (fullpath.query_exists()) return true; } } catch (Error err) {/* Might be missing something, but no biggy. */} } return false; } private void construct_toolbar() { header.show_close_button = true; set_titlebar(header); - var icon_size = Gtk.IconSize.SMALL_TOOLBAR; - if (BUILD_PLATFORM == "elementary") { - icon_size = Gtk.IconSize.LARGE_TOOLBAR; - } + var icon_size = Gtk.IconSize.LARGE_TOOLBAR; var publish_button = new Gtk.Button.from_icon_name("document-send", icon_size); publish_button.tooltip_markup = Granite.markup_accel_tooltip ( {"Return"}, _("Publish to Write.as on the web") ); publish_button.clicked.connect(() => { canvas.buffer.text += "\n\n" + publish(); canvas.grab_focus(); }); header.pack_end(publish_button); darkmode_switch = new Granite.ModeSwitch.from_icon_name ("display-brightness-symbolic", "weather-clear-night-symbolic"); - darkmode_switch.primary_icon_tooltip_text = ("Light theme"); - darkmode_switch.secondary_icon_tooltip_text = ("Dark theme"); + darkmode_switch.primary_icon_tooltip_text = _("Light theme"); + darkmode_switch.secondary_icon_tooltip_text = _("Dark theme"); darkmode_switch.tooltip_markup = Granite.markup_accel_tooltip ( {"T"}, _("Toggle light/dark theme") ); darkmode_switch.valign = Gtk.Align.CENTER; var settings = Gtk.Settings.get_default(); darkmode_switch.notify["active"].connect(() => { settings.gtk_application_prefer_dark_theme = darkmode_switch.active; dark_mode = darkmode_switch.active; if (!is_initializing) theme_save(); canvas.grab_focus(); }); if (supports_dark_theme()) header.pack_end(darkmode_switch); var fonts = new Gtk.MenuButton(); fonts.tooltip_text = _("Change document font"); fonts.image = new Gtk.Image.from_icon_name("font-x-generic", icon_size); fonts.popup = new Gtk.Menu(); header.pack_start(fonts); font_serif_option = build_fontoption(fonts.popup, _("Serif"), "serif", font); font_sans_option = build_fontoption(fonts.popup, _("Sans-serif"), "sans", "'Open Sans', 'Segoe UI', Tahoma, Arial, sans-serif"); font_wrap_option = build_fontoption(fonts.popup, _("Monospace"), "wrap", "Hack, consolas," + "Menlo-Regular, Menlo, Monaco, 'ubuntu mono', monospace"); fonts.popup.show_all(); } private unowned SList? font_options = null; private Gtk.RadioMenuItem build_fontoption(Gtk.Menu menu, string label, string fontstyle, string families) { var option = new Gtk.RadioMenuItem.with_label(font_options, label); font_options = option.get_group(); option.activate.connect(() => { this.font = families; this.fontstyle = fontstyle; adjust_text_style(!is_initializing); canvas.grab_focus(); }); var styles = option.get_style_context(); var provider = new Gtk.CssProvider(); try { provider.load_from_data("* {font-family: %s;}".printf(families)); styles.add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } catch (Error e) { warning(e.message); } menu.add(option); return option; } public override void grab_focus() { canvas.grab_focus(); } private KeyFile theme = new KeyFile(); private void restore_styles() { try { loaded_theme = true; theme.load_from_file(get_data_dir() + "/prefs.ini", KeyFileFlags.NONE); dark_mode = theme.get_boolean("Theme", "darkmode"); darkmode_switch.active = dark_mode; Gtk.Settings.get_default().gtk_application_prefer_dark_theme = dark_mode; font_size = theme.get_integer("Theme", "fontsize"); font = theme.get_string("Post", "font"); fontstyle = theme.get_string("Post", "fontstyle"); // Select the current font in the menu if (fontstyle == "serif") { font_serif_option.set_active(true); } else if (fontstyle == "sans") { font_sans_option.set_active(true); } else if (fontstyle == "wrap") { font_wrap_option.set_active(true); } adjust_text_style(false); } catch (Error err) {/* No biggy... */} } private Gtk.CssProvider cur_styles = null; // So the theme isn't read before it's saved. private bool loaded_theme = false; private void adjust_text_style(bool save_theme = true) { try { if (cur_styles != null) Gtk.StyleContext.remove_provider_for_screen(Gdk.Screen.get_default(), cur_styles); var padding = canvas.get_allocated_width()*0.10; var css = ("textview {font-family: %s; font-size: %dpx; padding: 20px 0;" + " caret-color: #5ac4ee;}").printf(font, font_size); cur_styles = new Gtk.CssProvider(); cur_styles.load_from_data(css); Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), cur_styles, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); canvas.left_margin = canvas.right_margin = (int) padding; if (save_theme) theme_save(); } catch (Error e) { warning(e.message); } } private void theme_save() { if (!loaded_theme) return; theme.set_boolean("Theme", "darkmode", dark_mode); theme.set_integer("Theme", "fontsize", font_size); theme.set_string("Post", "font", font); theme.set_string("Post", "fontstyle", fontstyle); try { theme.save_to_file(get_data_dir() + "/prefs.ini"); } catch (FileError err) {/* Oh well. */} } private string publish() { try { if (text_changed) {; draft_file().replace_contents(canvas.buffer.text.data, null, false, FileCreateFlags.PRIVATE | FileCreateFlags.REPLACE_DESTINATION, null); text_changed = false; } var cmd = "sh -c 'cat ~/" + data_dir + "/draft.txt | writeas --md --font %s --user-agent \"writeas-gtk v" + version + "\"'"; cmd = cmd.printf(fontstyle); string stdout, stderr; int status; Process.spawn_command_line_sync(cmd, out stdout, out stderr, out status); // Open it in the browser if (status == 0) { var browser = AppInfo.get_default_for_uri_scheme("https"); var urls = new List(); urls.append(stdout.strip()); browser.launch_uris(urls, null); } return stderr.strip(); } catch (Error err) { return err.message; } } /* --- */ private void build_keyboard_shortcuts() { /* These operations are not exposed to the UI as buttons, as most people are very familiar with them and they are not the focus of this app. */ var accels = new Gtk.AccelGroup(); // App operations accels.connect(Gdk.Key.W, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => quit()); accels.connect(Gdk.Key.Q, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => quit()); // File operations accels.connect(Gdk.Key.S, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => save_as()); accels.connect(Gdk.Key.S, Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => save_as()); // Adjust text size accels.connect(Gdk.Key.minus, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => { if (font_size < 3) { return false; } if (font_size <= 10) { font_size -= 1; } else { font_size -= 2; } adjust_text_style(true); return true; }); accels.connect(Gdk.Key.equal, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => { if (font_size < 10) { font_size += 1; } else { font_size += 2; } adjust_text_style(true); return true; }); // Toggle theme with Ctrl+T accels.connect(Gdk.Key.T, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => { darkmode_switch.active = !darkmode_switch.active; return true; }); // Publish with Ctrl+Enter accels.connect(Gdk.Key.Return, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE | Gtk.AccelFlags.LOCKED, (g,a,k,m) => { canvas.buffer.text += "\n\n" + publish(); return true; }); add_accel_group(accels); } private bool save_as() { try { var file = prompt_file(Gtk.FileChooserAction.SAVE, _("Save as")); file.replace_contents(canvas.buffer.text.data, null, false, FileCreateFlags.PRIVATE | FileCreateFlags.REPLACE_DESTINATION, null); } catch (Error e) { // It's fine... } return true; } private File prompt_file(Gtk.FileChooserAction mode, string action) throws UserCancellable { var file_chooser = new Gtk.FileChooserDialog(action, this, mode, _("Cancel"), Gtk.ResponseType.CANCEL, action, Gtk.ResponseType.ACCEPT); file_chooser.select_multiple = false; var filter = new Gtk.FileFilter(); filter.add_mime_type("text/plain"); file_chooser.set_filter(filter); var resp = file_chooser.run(); file_chooser.close(); if (resp == Gtk.ResponseType.ACCEPT) { return file_chooser.get_file(); } else { throw new UserCancellable.USER_CANCELLED("FileChooserDialog"); } } public void open_file(File file) throws Error { uint8[] text; file.load_contents(null, out text, null); canvas.buffer.text = (string) text; } private bool quit() { this.close(); return true; } } errordomain WriteAs.UserCancellable {USER_CANCELLED} diff --git a/src/meson.build b/src/meson.build index 75de727..da78ee2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,11 +1,7 @@ -executable(app_id, - 'application.vala', - 'window.vala', +sources = files ( 'Granite/Accels.vala', 'Granite/ModeSwitch.vala', - c_args: ['-include', 'config.h'], - link_args: '-lm', - dependencies: [dependency('gtk+-3.0'), dependency('gtksourceview-3.0')], - install: true + 'Application.vala', + 'Window.vala' )