summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikael Blomstrand2018-04-04 13:41:29 +0200
committerMikael Blomstrand2018-04-04 13:44:45 +0200
commite01c3eead6c1cb57483ab36c5e5da19666d22f29 (patch)
tree1b91ca28a09d8e0e0b8d9b7b8ffbdc3b7453cd5b
parent39507babea1b7ba561e153df0454bbe8a987f7b3 (diff)
downloadaur-e01c3eead6c1cb57483ab36c5e5da19666d22f29.tar.gz
Fetch patch from github.
Also changed error message for spellcheck.
-rw-r--r--.SRCINFO12
-rw-r--r--0003-fixes-184-port-to-WebKit2Gtk.patch133
-rw-r--r--0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch98
-rw-r--r--LICENSE21
-rw-r--r--PKGBUILD19
-rw-r--r--remarkable.patch263
6 files changed, 271 insertions, 275 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 5ad9f5e263bd..2d6fa6686769 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = remarkable
pkgdesc = A free fully featured markdown editor for Linux.
pkgver = 1.87
- pkgrel = 3
+ pkgrel = 4
url = http://remarkableapp.github.io
install = remarkable.install
arch = any
@@ -20,17 +20,11 @@ pkgbase = remarkable
optdepends = python-gtkspellcheck: Spellcheck (might cause problems)
replaces = remarkable-webkit2gtk
source = https://github.com/jamiemcg/Remarkable/archive/v1.87.tar.gz
- source = 0003-fixes-184-port-to-WebKit2Gtk.patch
- source = 0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch
- source = remarkable.patch
+ source = stable.patch::https://github.com/jamiemcg/Remarkable/compare/v1.87...mbloms:stable.patch
source = remarkable.install
- source = LICENSE
sha1sums = a492dc5d0a276f36846a99287ae93c02e22a5cd8
- sha1sums = 097f12a6f499bd39b99c32301a9027a9457eaeac
- sha1sums = d90a26e2830f0306a07b76dc69aa211840f0223e
- sha1sums = d9fc74c5a0136649f670a345e16c1c88d21a97d2
+ sha1sums = c91182e1521927e02328eb407a4e4f1ad910d16d
sha1sums = bdbfb750df9e5fb3022f47a46a80555259628cd1
- sha1sums = 6e5ea06076c85fdd25b79bfc41588f7f7ee9ba29
pkgname = remarkable
diff --git a/0003-fixes-184-port-to-WebKit2Gtk.patch b/0003-fixes-184-port-to-WebKit2Gtk.patch
deleted file mode 100644
index 55b4a3c08b54..000000000000
--- a/0003-fixes-184-port-to-WebKit2Gtk.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From fafd97f41b5fdc68357f54a6e0a2557a7809c36a Mon Sep 17 00:00:00 2001
-From: Harald Weiner <timeraider@gmx.at>
-Date: Sun, 23 Jul 2017 02:14:23 +0200
-Subject: [PATCH 3/4] fixes #184 (port to WebKit2Gtk)
-
----
- remarkable/RemarkableWindow.py | 63 +++++++++++++++++++++++++++++++-----------
- 1 file changed, 47 insertions(+), 16 deletions(-)
-
-diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
-index 12802f3..ea00be9 100644
---- a/remarkable/RemarkableWindow.py
-+++ b/remarkable/RemarkableWindow.py
-@@ -24,10 +24,10 @@
- import gi
- gi.require_version('Gtk', '3.0')
- gi.require_version('GtkSource', '3.0')
--gi.require_version('WebKit', '3.0')
-+gi.require_version('WebKit2', '4.0')
-
- from bs4 import BeautifulSoup
--from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit
-+from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit2
- from locale import gettext as _
- from urllib.request import urlopen
- import markdown
-@@ -113,10 +113,10 @@ class RemarkableWindow(Window):
- self.text_buffer.connect("changed", self.on_text_view_changed)
- self.text_view.set_buffer(self.text_buffer)
- self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
--
-- self.live_preview = WebKit.WebView()
-- self.live_preview.connect("console-message", self._javascript_console_message) # Suppress .js output
-- self.live_preview.zoom_out()
-+
-+ my_settings = self.create_webkit_settings()
-+ self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
-+ self.zoom_out(self.live_preview)
-
- self.scrolledwindow_text_view = Gtk.ScrolledWindow()
- self.scrolledwindow_text_view.add(self.text_view)
-@@ -626,11 +626,11 @@ class RemarkableWindow(Window):
- self.redo(self)
-
- def on_toolbutton_zoom_in_clicked(self, widget):
-- self.live_preview.zoom_in()
-+ self.zoom_in(self.live_preview)
- self.scrollPreviewToFix(self)
-
- def on_toolbutton_zoom_out_clicked(self, widget):
-- self.live_preview.zoom_out()
-+ self.zoom_out(self.live_preview)
- self.scrollPreviewToFix(self)
-
- def redo(self, widget):
-@@ -1253,7 +1253,7 @@ class RemarkableWindow(Window):
- styles.css = styles.handwriting_css
- self.update_style(self)
- self.update_live_preview(self)
-- self.live_preview.zoom_in()
-+ self.zoom_in(self.live_preview)
- self.remarkable_settings['style'] = "handwriting_css"
- self.write_settings()
-
-@@ -1351,12 +1351,12 @@ class RemarkableWindow(Window):
- window_feedback.set_title("Feedback Form")
- window_feedback.set_default_size(640, 640)
- window_feedback.set_position(Gtk.WindowPosition.CENTER)
-- feedback_browser = WebKit.WebView()
-- feedback_browser.connect("console-message", self._javascript_console_message) # Suppress .js output
-+ my_settings = self.create_webkit_settings()
-+ feedback_browser = WebKit2.WebView.new_with_settings(my_settings)
- feedback_scroller = Gtk.ScrolledWindow()
- feedback_scroller.add(feedback_browser)
- window_feedback.add(feedback_scroller)
-- feedback_browser.open("https://jamiemcgowan.typeform.com/to/ng5Lhc")
-+ feedback_browser.load_uri("https://jamiemcgowan.typeform.com/to/ng5Lhc")
- window_feedback.show_all()
-
- def on_menuitem_about_activate(self, widget):
-@@ -1447,14 +1447,45 @@ class RemarkableWindow(Window):
- html = self.default_html_start + html_middle + self.default_html_end
-
- # Update the display, supporting relative paths to local images
-- self.live_preview.load_string(html, "text/html", "utf-8", "file://{}".format(os.path.abspath(self.name)))
-+ self.live_preview.load_html(html, "file://{}".format(os.path.abspath(self.name)))
-
- """
-- This function suppresses the messages from the WebKit (live preview) console
-+ This function returns WebKit settings instance to suppress
-+ the messages from the WebKit (live preview) console
- """
-- def _javascript_console_message(self, view, message, line, sourceid):
-- return True
-+ def create_webkit_settings(self):
-+ result = WebKit2.Settings()
-+ result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
-+ return result
-
-+ """
-+ This function implements zoom_in for WebKit2.WebView
-+ """
-+ def zoom_in(self, webView):
-+ zoom_level = webView.get_zoom_level()
-+ zoom_level = zoom_level + self.get_zoom_step()
-+ webView.set_zoom_level(zoom_level)
-+
-+ """
-+ This function implements zoom_out for WebKit2.WebView
-+ """
-+ def zoom_out(self, webView):
-+ zoom_level = webView.get_zoom_level()
-+ zoom_level = zoom_level - self.get_zoom_step()
-+ webView.set_zoom_level(zoom_level)
-+
-+ """
-+ This function returns the same magic number as in previous WebKit API:
-+ https://lazka.github.io/pgi-docs/WebKit-3.0/classes/WebSettings.html#WebKit.WebSettings.props.zoom_step
-+ """
-+ def get_zoom_step(self):
-+ return 0.10000000149011612
-+
-+ """
-+ This function resets the zoom_level to the default value
-+ """
-+ def reset_zoom_level(self, webView):
-+ webView.set_zoom_level(1.0)
-
- """
- This function deletes any temporary files that were created during execution
---
-2.16.2
-
diff --git a/0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch b/0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch
deleted file mode 100644
index 6b0524dc247c..000000000000
--- a/0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 2cce6ea49696927300d324637255d3c2cd377e8b Mon Sep 17 00:00:00 2001
-From: Harald Weiner <timeraider@gmx.at>
-Date: Fri, 28 Jul 2017 07:07:57 +0200
-Subject: [PATCH 4/4] fixes #175 (Live Preview Mode Executes JavaScript)
-
----
- data/ui/RemarkableWindow.ui | 9 +++++++++
- remarkable/RemarkableWindow.py | 26 ++++++++++++++++++++++----
- 2 files changed, 31 insertions(+), 4 deletions(-)
-
-diff --git a/data/ui/RemarkableWindow.ui b/data/ui/RemarkableWindow.ui
-index ab0007c..ca2396e 100644
---- a/data/ui/RemarkableWindow.ui
-+++ b/data/ui/RemarkableWindow.ui
-@@ -405,6 +405,15 @@
- <property name="active">True</property>
- </object>
- </child>
-+ <child>
-+ <object class="GtkCheckMenuItem" id="menuitem_js">
-+ <property name="visible">True</property>
-+ <property name="can_focus">False</property>
-+ <property name="label" translatable="yes">Enable Java-Script</property>
-+ <property name="use_underline">True</property>
-+ <property name="active">True</property>
-+ </object>
-+ </child>
- <child>
- <object class="GtkCheckMenuItem" id="menuitem_vertical_layout">
- <property name="visible">True</property>
-diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
-index ea00be9..c15886a 100644
---- a/remarkable/RemarkableWindow.py
-+++ b/remarkable/RemarkableWindow.py
-@@ -114,8 +114,8 @@ class RemarkableWindow(Window):
- self.text_view.set_buffer(self.text_buffer)
- self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
-
-- my_settings = self.create_webkit_settings()
-- self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
-+ self.webkit_settings = self.create_webkit_settings()
-+ self.live_preview = WebKit2.WebView.new_with_settings(self.webkit_settings)
- self.zoom_out(self.live_preview)
-
- self.scrolledwindow_text_view = Gtk.ScrolledWindow()
-@@ -199,7 +199,8 @@ class RemarkableWindow(Window):
- if not os.path.isfile(self.settings_path):
- self.remarkable_settings = {}
- self.remarkable_settings['css'] = ''
-- self.remarkable_settings['font'] = "Sans 10"
-+ self.remarkable_settings['font'] = "Sans 10"
-+ self.remarkable_settings['js'] = True
- self.remarkable_settings['line-numbers'] = True
- self.remarkable_settings['live-preview'] = True
- self.remarkable_settings['nightmode'] = False
-@@ -234,6 +235,12 @@ class RemarkableWindow(Window):
- # Disable word wrap on startup
- self.builder.get_object("menuitem_word_wrap").set_active(False)
- self.on_menuitem_word_wrap_activate(self)
-+
-+ if not 'js' in self.remarkable_settings:
-+ self.remarkable_settings['js'] = True
-+ if self.remarkable_settings['js'] == False:
-+ # Disable Live Preview on startup
-+ self.builder.get_object("menuitem_js").set_active(False)
-
- if self.remarkable_settings['live-preview'] == False:
- # Disable Live Preview on startup
-@@ -812,7 +819,16 @@ class RemarkableWindow(Window):
- self.builder.get_object("toolbar1").set_visible(True)
- self.update_live_preview(self)
- self.write_settings()
--
-+
-+ def on_menuitem_js_activate(self, widget):
-+ self.toggle_js(self)
-+
-+ def toggle_js(self, widget):
-+ state = self.webkit_settings.get_enable_javascript()
-+ state = not state
-+ self.remarkable_settings['js'] = state
-+ self.webkit_settings.set_enable_javascript(state)
-+ self.write_settings()
-
- def on_menuitem_swap_activate(self, widget):
- if self.live_preview.get_visible():
-@@ -1456,6 +1472,8 @@ class RemarkableWindow(Window):
- def create_webkit_settings(self):
- result = WebKit2.Settings()
- result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
-+ #js = self.remarkable_settings['js']
-+ result.set_enable_javascript(True) # JS-Kill-Switch for issue #175
- return result
-
- """
---
-2.16.2
-
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index e7323e7a22e1..000000000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2017 Jamie McGowan
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/PKGBUILD b/PKGBUILD
index d91581942ae2..ef5bb26a3fe2 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
pkgname=remarkable
replaces=('remarkable-webkit2gtk')
pkgver=1.87
-pkgrel=3
+pkgrel=4
pkgdesc="A free fully featured markdown editor for Linux."
arch=('any')
url="http://remarkableapp.github.io"
@@ -26,18 +26,12 @@ optdepends=('python-lxml: export to HTML format support'
install="remarkable.install"
source=("https://github.com/jamiemcg/Remarkable/archive/v${pkgver}.tar.gz"
- "0003-fixes-184-port-to-WebKit2Gtk.patch"
- "0004-fixes-175-Live-Preview-Mode-Executes-JavaScript.patch"
- "remarkable.patch"
- "remarkable.install"
- "LICENSE")
+ "stable.patch::https://github.com/jamiemcg/Remarkable/compare/v1.87...mbloms:stable.patch"
+ "remarkable.install")
sha1sums=('a492dc5d0a276f36846a99287ae93c02e22a5cd8'
- '097f12a6f499bd39b99c32301a9027a9457eaeac'
- 'd90a26e2830f0306a07b76dc69aa211840f0223e'
- 'd9fc74c5a0136649f670a345e16c1c88d21a97d2'
- 'bdbfb750df9e5fb3022f47a46a80555259628cd1'
- '6e5ea06076c85fdd25b79bfc41588f7f7ee9ba29')
+ 'c91182e1521927e02328eb407a4e4f1ad910d16d'
+ 'bdbfb750df9e5fb3022f47a46a80555259628cd1')
prepare() {
msg2 "Applying patches for webkit2gtk..."
@@ -48,10 +42,11 @@ package() {
_python_site=$(python -c 'import site; print(site.getsitepackages()[0]);')
[ -z ${_python_site} ] && echo "error: could not identify python site_packages directory" && return 1
- install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
cd "Remarkable-${pkgver}"
+ install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
+
install -Dm 755 "bin/remarkable" "${pkgdir}/usr/bin/remarkable"
install -D "debian/remarkable.mime" "${pkgdir}/usr/lib/mime/packages/remarkable"
install -D "data/media/remarkable.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/remarkable.svg"
diff --git a/remarkable.patch b/remarkable.patch
index 24fe8b3e2a62..2a04d4a9d87a 100644
--- a/remarkable.patch
+++ b/remarkable.patch
@@ -1,8 +1,267 @@
+From 926171f6343b6420b532140dd2f4dc2e43fd9d2c Mon Sep 17 00:00:00 2001
+From: Harald Weiner <timeraider@gmx.at>
+Date: Sun, 23 Jul 2017 02:14:23 +0200
+Subject: [PATCH 1/4] fixes #184 (port to WebKit2Gtk)
+
+---
+ remarkable/RemarkableWindow.py | 63 +++++++++++++++++++++++++++++++-----------
+ 1 file changed, 47 insertions(+), 16 deletions(-)
+
diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
-index 50fc3c8..ee110aa 100644
+index ffbc70b..893dc27 100644
--- a/remarkable/RemarkableWindow.py
+++ b/remarkable/RemarkableWindow.py
-@@ -37,7 +37,7 @@ import pdfkit
+@@ -24,10 +24,10 @@
+ import gi
+ gi.require_version('Gtk', '3.0')
+ gi.require_version('GtkSource', '3.0')
+-gi.require_version('WebKit', '3.0')
++gi.require_version('WebKit2', '4.0')
+
+ from bs4 import BeautifulSoup
+-from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit
++from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit2
+ from locale import gettext as _
+ from urllib.request import urlopen
+ import markdown
+@@ -113,10 +113,10 @@ def finish_initializing(self, builder): # pylint: disable=E1002
+ self.text_buffer.connect("changed", self.on_text_view_changed)
+ self.text_view.set_buffer(self.text_buffer)
+ self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
+-
+- self.live_preview = WebKit.WebView()
+- self.live_preview.connect("console-message", self._javascript_console_message) # Suppress .js output
+- self.live_preview.zoom_out()
++
++ my_settings = self.create_webkit_settings()
++ self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
++ self.zoom_out(self.live_preview)
+
+ self.scrolledwindow_text_view = Gtk.ScrolledWindow()
+ self.scrolledwindow_text_view.add(self.text_view)
+@@ -624,11 +624,11 @@ def on_toolbutton_redo_clicked(self, widget):
+ self.redo(self)
+
+ def on_toolbutton_zoom_in_clicked(self, widget):
+- self.live_preview.zoom_in()
++ self.zoom_in(self.live_preview)
+ self.scrollPreviewToFix(self)
+
+ def on_toolbutton_zoom_out_clicked(self, widget):
+- self.live_preview.zoom_out()
++ self.zoom_out(self.live_preview)
+ self.scrollPreviewToFix(self)
+
+ def redo(self, widget):
+@@ -1249,7 +1249,7 @@ def on_menuitem_handwritten_activate(self, widget):
+ styles.css = styles.handwriting_css
+ self.update_style(self)
+ self.update_live_preview(self)
+- self.live_preview.zoom_in()
++ self.zoom_in(self.live_preview)
+ self.remarkable_settings['style'] = "handwriting_css"
+ self.write_settings()
+
+@@ -1347,12 +1347,12 @@ def on_menuitem_feedback_activate(self, widget):
+ window_feedback.set_title("Feedback Form")
+ window_feedback.set_default_size(640, 640)
+ window_feedback.set_position(Gtk.WindowPosition.CENTER)
+- feedback_browser = WebKit.WebView()
+- feedback_browser.connect("console-message", self._javascript_console_message) # Suppress .js output
++ my_settings = self.create_webkit_settings()
++ feedback_browser = WebKit2.WebView.new_with_settings(my_settings)
+ feedback_scroller = Gtk.ScrolledWindow()
+ feedback_scroller.add(feedback_browser)
+ window_feedback.add(feedback_scroller)
+- feedback_browser.open("https://jamiemcgowan.typeform.com/to/ng5Lhc")
++ feedback_browser.load_uri("https://jamiemcgowan.typeform.com/to/ng5Lhc")
+ window_feedback.show_all()
+
+ def on_menuitem_about_activate(self, widget):
+@@ -1443,14 +1443,45 @@ def update_live_preview(self, widet):
+ html = self.default_html_start + html_middle + self.default_html_end
+
+ # Update the display, supporting relative paths to local images
+- self.live_preview.load_string(html, "text/html", "utf-8", "file://{}".format(os.path.abspath(self.name)))
++ self.live_preview.load_html(html, "file://{}".format(os.path.abspath(self.name)))
+
+ """
+- This function suppresses the messages from the WebKit (live preview) console
++ This function returns WebKit settings instance to suppress
++ the messages from the WebKit (live preview) console
+ """
+- def _javascript_console_message(self, view, message, line, sourceid):
+- return True
++ def create_webkit_settings(self):
++ result = WebKit2.Settings()
++ result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
++ return result
+
++ """
++ This function implements zoom_in for WebKit2.WebView
++ """
++ def zoom_in(self, webView):
++ zoom_level = webView.get_zoom_level()
++ zoom_level = zoom_level + self.get_zoom_step()
++ webView.set_zoom_level(zoom_level)
++
++ """
++ This function implements zoom_out for WebKit2.WebView
++ """
++ def zoom_out(self, webView):
++ zoom_level = webView.get_zoom_level()
++ zoom_level = zoom_level - self.get_zoom_step()
++ webView.set_zoom_level(zoom_level)
++
++ """
++ This function returns the same magic number as in previous WebKit API:
++ https://lazka.github.io/pgi-docs/WebKit-3.0/classes/WebSettings.html#WebKit.WebSettings.props.zoom_step
++ """
++ def get_zoom_step(self):
++ return 0.10000000149011612
++
++ """
++ This function resets the zoom_level to the default value
++ """
++ def reset_zoom_level(self, webView):
++ webView.set_zoom_level(1.0)
+
+ """
+ This function deletes any temporary files that were created during execution
+
+From 63dc24917dfd36d7c4a7265dc3a0020deb75593c Mon Sep 17 00:00:00 2001
+From: Harald Weiner <timeraider@gmx.at>
+Date: Fri, 28 Jul 2017 07:07:57 +0200
+Subject: [PATCH 2/4] fixes #175 (Live Preview Mode Executes JavaScript)
+
+---
+ data/ui/RemarkableWindow.ui | 9 +++++++++
+ remarkable/RemarkableWindow.py | 26 ++++++++++++++++++++++----
+ 2 files changed, 31 insertions(+), 4 deletions(-)
+
+diff --git a/data/ui/RemarkableWindow.ui b/data/ui/RemarkableWindow.ui
+index ab0007c..ca2396e 100644
+--- a/data/ui/RemarkableWindow.ui
++++ b/data/ui/RemarkableWindow.ui
+@@ -405,6 +405,15 @@
+ <property name="active">True</property>
+ </object>
+ </child>
++ <child>
++ <object class="GtkCheckMenuItem" id="menuitem_js">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="label" translatable="yes">Enable Java-Script</property>
++ <property name="use_underline">True</property>
++ <property name="active">True</property>
++ </object>
++ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="menuitem_vertical_layout">
+ <property name="visible">True</property>
+diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
+index 893dc27..6856042 100644
+--- a/remarkable/RemarkableWindow.py
++++ b/remarkable/RemarkableWindow.py
+@@ -114,8 +114,8 @@ def finish_initializing(self, builder): # pylint: disable=E1002
+ self.text_view.set_buffer(self.text_buffer)
+ self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
+
+- my_settings = self.create_webkit_settings()
+- self.live_preview = WebKit2.WebView.new_with_settings(my_settings)
++ self.webkit_settings = self.create_webkit_settings()
++ self.live_preview = WebKit2.WebView.new_with_settings(self.webkit_settings)
+ self.zoom_out(self.live_preview)
+
+ self.scrolledwindow_text_view = Gtk.ScrolledWindow()
+@@ -199,7 +199,8 @@ def check_settings(self):
+ if not os.path.isfile(self.settings_path):
+ self.remarkable_settings = {}
+ self.remarkable_settings['css'] = ''
+- self.remarkable_settings['font'] = "Sans 10"
++ self.remarkable_settings['font'] = "Sans 10"
++ self.remarkable_settings['js'] = True
+ self.remarkable_settings['line-numbers'] = True
+ self.remarkable_settings['live-preview'] = True
+ self.remarkable_settings['nightmode'] = False
+@@ -234,6 +235,12 @@ def load_settings(self):
+ # Disable word wrap on startup
+ self.builder.get_object("menuitem_word_wrap").set_active(False)
+ self.on_menuitem_word_wrap_activate(self)
++
++ if not 'js' in self.remarkable_settings:
++ self.remarkable_settings['js'] = True
++ if self.remarkable_settings['js'] == False:
++ # Disable Live Preview on startup
++ self.builder.get_object("menuitem_js").set_active(False)
+
+ if self.remarkable_settings['live-preview'] == False:
+ # Disable Live Preview on startup
+@@ -810,7 +817,16 @@ def toggle_live_preview(self, widget):
+ self.builder.get_object("toolbar1").set_visible(True)
+ self.update_live_preview(self)
+ self.write_settings()
+-
++
++ def on_menuitem_js_activate(self, widget):
++ self.toggle_js(self)
++
++ def toggle_js(self, widget):
++ state = self.webkit_settings.get_enable_javascript()
++ state = not state
++ self.remarkable_settings['js'] = state
++ self.webkit_settings.set_enable_javascript(state)
++ self.write_settings()
+
+ def on_menuitem_swap_activate(self, widget):
+ if self.live_preview.get_visible():
+@@ -1452,6 +1468,8 @@ def update_live_preview(self, widet):
+ def create_webkit_settings(self):
+ result = WebKit2.Settings()
+ result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output
++ #js = self.remarkable_settings['js']
++ result.set_enable_javascript(True) # JS-Kill-Switch for issue #175
+ return result
+
+ """
+
+From 1b05770885a1bbfc8b21fdb877267b4bf9fb5e88 Mon Sep 17 00:00:00 2001
+From: Mikael Blomstrand <mbloms@kth.se>
+Date: Wed, 4 Apr 2018 13:07:30 +0200
+Subject: [PATCH 3/4] Spellcheck error message adapted to arch.
+
+---
+ remarkable/RemarkableWindow.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
+index 6856042..a77f74c 100644
+--- a/remarkable/RemarkableWindow.py
++++ b/remarkable/RemarkableWindow.py
+@@ -47,7 +47,7 @@
+ from gtkspellcheck import SpellChecker
+ spellcheck_enabled = True
+ except:
+- print("*Spellchecking not enabled.\n*To enable spellchecking install pygtkspellcheck\n*https://pypi.python.org/pypi/pygtkspellcheck/")
++ print("*Spellchecking not enabled.\n*To enable spellchecking install python-gtkspellcheck.\npacman -S --asdeps python-gtkspellcheck")
+ spellcheck_enabled = False
+
+ import logging
+
+From eb33c22a6bf4100443b75e33e9897a85ad09d014 Mon Sep 17 00:00:00 2001
+From: Mikael Blomstrand <mbloms@kth.se>
+Date: Wed, 4 Apr 2018 13:12:26 +0200
+Subject: [PATCH 4/4] `import styles` correctly
+
+---
+ remarkable/RemarkableWindow.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py
+index a77f74c..e838330 100644
+--- a/remarkable/RemarkableWindow.py
++++ b/remarkable/RemarkableWindow.py
+@@ -36,7 +36,7 @@
import re, subprocess, datetime, os, webbrowser, _thread, sys, locale
import tempfile
import traceback