Compare commits

..

1 Commits

Author SHA1 Message Date
Steve Groesz 0f6148c892 backport whitespace rendering to LM 19.3 Tricia 2021-07-17 03:05:39 -05:00
207 changed files with 84811 additions and 48431 deletions

View File

@ -46,19 +46,19 @@ shared: &shared
fi
jobs:
"mint20":
"mint19":
<<: *shared
docker:
- image: linuxmintd/mint20-amd64
- image: linuxmintd/mint19-amd64
"lmde4":
"lmde3":
<<: *shared
docker:
- image: linuxmintd/lmde4-amd64
- image: linuxmintd/lmde3-amd64
workflows:
version: 2
build:
jobs:
- "mint20"
- "lmde4"
- "mint19"
- "lmde3"

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ debian/xed-doc/
debian/files
debian/*.log
debian/*.substvars
build

43
README Normal file
View File

@ -0,0 +1,43 @@
General Information
===================
xed is a small and lightweight text editor.
xed supports most standard editing features, plus several not found in your
average text editor (plugins being the most notable of these).
Although new features are always under development, currently xed has:
* Complete support for UTF-8 text
* Syntax highlighting
* Support for editing remote files
* Search and Replace
* Printing and Print Previewing Support
* File Revert
* A complete preferences interface
* Configurable Plugin system, with optional python support
Some of the plugins, packaged and installed with xed include, among others:
* Word count
* Spell checker
* Change case of selected text
* File Browser
* Sort
* Insert Date/Time
* Tag list
xed is released under the GNU General Public License (GPL) version 2, see
the file 'COPYING' for more information.
Installation
============
Simple install procedure:
% meson --prefix=/usr/local build # run the `configure' script
% ninja -v -C build # build xed
[ Become root if necessary ]
% sudo ninja install -v -C build # install xed
see linuxmint/xed#265 if you see GLib-GIO-ERROR

View File

@ -1,74 +0,0 @@
# Xed Text Editor
xed is a small and lightweight text editor.
xed supports most standard editing features, plus several not found in your
average text editor (plugins being the most notable of these).
Although new features are always under development, currently xed has:
* Complete support for UTF-8 text
* Syntax highlighting
* Support for editing remote files
* Search and Replace
* Printing and Print Previewing Support
* File Revert
* A complete preferences interface
* Configurable Plugin system, with optional python support
Some of the plugins, packaged and installed with xed include, among others:
* Change Case
* Document Statistics
* File Browser
* Indent Lines
* Insert Date/Time
* Modelines
* Save Without Trailing Spaces
* Sort
* Spell checker
* Tag list
* Word Completion
## Installation
```
1. run the 'configure' script
# meson --prefix=/usr build
2. build xed
# ninja -v -C build
3. install xed
# sudo ninja install -v -C build
** Build Instructions for Debian-based distros **
1. run "dpkg-buildpackage" from the xed base directory
2. cd ..
3. run
# sudo dpkg -i *.deb
4. From then, any new changes can be applied by running
# sudo ninja -C debian/build install
```
### Xed look and feel
##### Classic Mode
![classic-screenshot](/screencaptures/classic_screencapture.png?raw=true)
##### Theme selections
![theme-screenshot](/screencaptures/theme_screencapture.png?raw=true)
##### Search and Replace feature
![search-replace-screenshot](/screencaptures/search_replace_screencapture.png?raw=true)
##### Select from several languages in Highlight syntax mode
![highlightmode-screenshot](/screencaptures/highlightmode_screencapture.png?raw=true)
##### Xed Shortcuts
![shortcuts-1-screenshot](/screencaptures/shortcuts_1_screencapture.png?raw=true)
![shortcuts-2-screenshot](/screencaptures/shortcuts_2_screencapture.png?raw=true)
> xed is released under the GNU General Public License (GPL) version 2, see
> the file 'COPYING' for more information.

View File

@ -368,7 +368,7 @@
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.x.editor.plugins" path="/org/x/editor/plugins/">
<key name="active-plugins" type="as">
<default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time', 'bracketcompletion' ]</default>
<default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time' ]</default>
<summary>Active plugins</summary>
<description>List of active plugins. It contains the "Location" of the active plugins. See the .xed-plugin file for obtaining the "Location" of a given plugin.</description>
</key>

View File

@ -42,9 +42,6 @@ Output version information and exit
\fB\-?, \-h, \-\-help\fR
Print standard command line options.
.TP
\fB\-w, \-\-wait\fR
Open files and block the xed process.
.TP
\fB\-\-help\-all\fR
Print all command line options.
.P

View File

@ -10,8 +10,3 @@ Icon=accessories-text-editor
Categories=GTK;Utility;TextEditor;
Keywords=text;editor;tabs;highlighting;code;multiple;files;pluggable;notepad;
X-MATE-DocPath=xed/xed.xml
Actions=new-window;
[Desktop Action new-window]
Name=New Window
Exec=xed --new-window %U

169
debian/changelog vendored
View File

@ -1,169 +1,8 @@
xed (3.0.2) uma; urgency=medium
xed (2.4.3) tricia; urgency=medium
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Fri, 25 Jun 2021 15:15:39 +0100
xed (3.0.1) uma; urgency=medium
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Thu, 10 Jun 2021 11:04:22 +0100
xed (3.0.0) uma; urgency=medium
[ Talkashie ]
* Fix various typos in index.docbook
[ Soapux ]
* Fix permissions
[ okaestne ]
* Implement #225: Options to render whitespace
[ Michael Webster ]
* i18n: Don't translate gsettings strings.
[ okaestne ]
* Fix crashes when no documents (tabs) are open
[ Justin Schiff ]
* Uses strtol instead of atoi so that we can properly handle errors.
* Use CLAMP macro instead
[ Clement Lefebvre ]
* l10n: Update POT
-- Clement Lefebvre <root@linuxmint.com> Tue, 01 Jun 2021 12:56:22 +0100
xed (2.8.4) ulyssa; urgency=medium
[ Eli Schwartz ]
* fixup! cleanup: remove code dropped in commit 67892da099357e24b3fd3c31fa758947b1dfc47a
[ Clement Lefebvre ]
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Sat, 02 Jan 2021 17:33:30 +0000
xed (2.8.3) ulyssa; urgency=medium
* Packaging: Add missing dependency on gir1.2-gtksource-4
-- Clement Lefebvre <root@linuxmint.com> Mon, 14 Dec 2020 08:11:29 +0000
xed (2.8.2) ulyssa; urgency=medium
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Thu, 10 Dec 2020 12:14:34 +0000
xed (2.8.1) ulyssa; urgency=medium
[ Eli Schwartz ]
* cleanup: remove code dropped in commit 67892da099357e24b3fd3c31fa758947b1dfc47a
* remove never-used variable added in commit 9e805380d4aa6338ca1b85d06b5dbf60e9fb0cbe
[ Clement Lefebvre ]
* bracketcompletion: Enable plugin by default
* Remove links in plugin about dialogs
-- Clement Lefebvre <root@linuxmint.com> Tue, 08 Dec 2020 10:11:12 +0000
xed (2.8.0) ulyssa; urgency=medium
[ JosephMcc ]
* Port to Gtksourceview4
* Add a new window desktop action
* plugins: Clean up deprecated preprcessor commands
* Clean up remaining deprecated preprocessor commands
* xed-highlight-mode-selector.c: Fix a couple of missing casts
* textsize plugin: Zoom text regardless of selection
* xed-highlight-mode-dialog/selector: Clean up code style
* xed-completion-plugin.c: Clean up the code style
[ Hrutvik Suthar ]
* auto bracket complete feature - added bracket-complete dir in plugins - gtksourceview min depedency change to 4.0.3
[ Michael Webster ]
* Add XAppFavorites support to the file menu.
* meson.build: bump xapp version.
[ Clement Lefebvre ]
* l10n: Update POT
-- Clement Lefebvre <root@linuxmint.com> Mon, 30 Nov 2020 11:25:34 +0000
xed (2.6.2) ulyana; urgency=medium
* CI: Update targets
-- Clement Lefebvre <root@linuxmint.com> Wed, 24 Jun 2020 12:44:58 +0100
xed (2.6.1) ulyana; urgency=medium
[ NikoKrause ]
* l10n: add missing strings for new plugin joinlines (#385)
[ Clement Lefebvre ]
* l10n: Update POT
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Wed, 24 Jun 2020 12:06:37 +0100
xed (2.6.0) ulyana; urgency=medium
[ Stephen Collins ]
* Disable the comments action when not supported to avoid confusion
* Trailsave plugin: remove second trailing line
* xed-tab-label.c: remove unused event box preventing scroll events
[ Michael Webster ]
* xed-tab-label.c: Apply tab tooltip to the box containing the tab's label and icon, regression from 808e77b052322b8f.
[ Stephen Collins ]
* Add .gitignore file
[ Clement Lefebvre ]
* l10n: Update translations
[ Stephen Collins ]
* Add settings widget to the prefs dialog for the implicit newline setting
[ icarter09 ]
* Created initial test dir. Created File menu test.
* Removed override_dh_auto_test so tests are not ran by default when building with dpkg.
* Removed link that was not working.
* Created new section for the Word Wrap shortcut. Increased height attribute to fit new section so a new page is not created.
* Added logic to support using replace all across documents.
* Added logic to check if the focus need to be set. Squashed formatting commits.
[ Clement Lefebvre ]
* Packaging: Remove python dependency
[ Isaac Carter ]
* Fixed memory issue found by valgrind (#366)
[ icarter09 ]
* Cleaned up broken links.
* Changed shortcut window to be non-model.
* Added wait entry to man page. Removed logic that cause wait to open extra tab.
* Added screen captures to README. Changed README to README.md and added markdown. Updated README with plugins and debian build instructions.
[ Isaac Carter ]
* Update README.md
[ icarter09 ]
* Added JoinLines plugin. Removed logic to split lines. Moved Join Line shortcut from Layout to Editing section.
[ JosephMcc ]
* taglist: Use a symbolic icon in the notebook sidebar
[ Clement Lefebvre ]
* l10n: Update POT
* l10n: Update translations
-- Clement Lefebvre <root@linuxmint.com> Mon, 11 May 2020 13:58:58 +0100
[ okaestne ] [backported by wolfpackmars2]
* Implement #225: Options to render whitespace
* backported from xed-3
xed (2.4.2) tricia; urgency=medium

10
debian/control vendored
View File

@ -10,9 +10,9 @@ Build-Depends: debhelper (>= 9),
libglib2.0-dev,
libgspell-1-dev,
libgtk-3-dev,
libgtksourceview-4-dev,
libgtksourceview-3.0-dev,
libpeas-dev,
libxapp-dev (>= 1.9),
libxapp-dev,
libsm-dev,
libx11-dev,
libxml2-dev,
@ -32,8 +32,7 @@ Depends: iso-codes,
${shlibs:Depends},
python3,
python3-gi,
gir1.2-gtksource-4,
xapps-common (>= 1.9.0),
xapps-common,
zenity
XB-Python-Version: ${python:Versions}
Description: Text editor
@ -54,7 +53,8 @@ Description: Text editor
Package: xed-common
Architecture: all
Depends: ${misc:Depends},
Depends: python,
${misc:Depends},
Description: Text editor (common files)
Xed is a text editor which supports most standard editor features,
extending this basic functionality with other features not usually

6
debian/copyright vendored
View File

@ -1,7 +1,7 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: xed
Upstream-Contact: Linux Mint <root@linuxmint.com>
Source: http://github.com/linuxmint/xed/
Upstream-Name: xed (old name: mate-text-editor)
Upstream-Contact: Stefano Karapetsas <stefano@karapetsas.com>
Source: http://git.mate-desktop.org/xed/
Files: plugins/docinfo/xed-docinfo-plugin.c
plugins/docinfo/xed-docinfo-plugin.h

3
debian/rules vendored
View File

@ -15,6 +15,9 @@ override_dh_auto_configure:
override_dh_installchangelogs:
dh_installchangelogs NEWS
override_dh_auto_test:
ninja -C debian/build test
override_dh_strip:
dh_strip --dbg-package=xed-dbg

View File

@ -292,7 +292,7 @@
</listitem>
</orderedlist>
<para>Valid types of <replaceable>URI</replaceable> include <literal>http:</literal>, <literal>ftp:</literal>, <literal>file:</literal>, and all of the methods supported by <literal>gvfs</literal>.</para>
<para>Files from some types of URI are opened as read-only, and any changes you make must be saved to a different location. HTTP only allows files to be read. Files opened from FTP are read-only because not all FTP servers may correctly work with saving remote files.</para>
<para>Files from some types of URI are opened as read-only, and any changes you make must be saved to a different location. HTTP only allows files to be read. Files opened from FTP are read-only because because not all FTP servers may correctly work with saving remote files.</para>
</sect2>
<!-- ============= Working with tabs ======================== -->
@ -350,7 +350,7 @@
</listitem>
<listitem><para>Type the string that you want to find in the <guilabel>Search for</guilabel> field. You can include special characters such as a new line or tab: see <xref linkend="xed-find-escapes"/>.</para>
</listitem>
<listitem><para>Click <guibutton>Find</guibutton> to search the file for the first occurrence of the string after your current cursor position. If <application>&app;</application> finds the string, the application selects the first occurrence of the string. Other occurrences of the string are highlighted.</para>
<listitem><para>Click <guibutton>Find</guibutton> to search the file for the first occurrence of the string after your current cursor position. If <application>&app;</application> finds the string, the application selects first occurrence of the string. Other occurrences of the string are highlighted.</para>
</listitem>
<listitem><para>To find the next occurrence of the string, click <guibutton>Find</guibutton> or choose <menuchoice> <guimenu>Search</guimenu> <guimenuitem>Find Next</guimenuitem> </menuchoice>. To find the previous occurrence of the text, choose <menuchoice> <guimenu>Search</guimenu> <guimenuitem>Find Previous</guimenuitem> </menuchoice>.</para>
</listitem>
@ -1191,7 +1191,7 @@
</variablelist>
</sect2>
<sect2 id="xed-prefs-plugins" xreflabel="Plugins Preferences">
<sect2 id="xed-prefs-plugins">
<title>Plugins Preferences</title>
<para>Plugins add extra features to <application>&app;</application>. For more information on plugins and how to use the built-in plugins, see <xref linkend="xed-plugins-overview"/>.</para>
@ -1245,42 +1245,45 @@
<title>Working with Plugins</title>
<para>You can add extra features to <application>&app;</application> by enabling <firstterm>plugins</firstterm>. A plugin is a supplementary program that enhances the functionality of an application. Plugins add new items to the <application>&app;</application> menus for the new features they provide.
</para>
<para>Several plugins come built-in with <application>&app;</application>, and you can install more.</para>
<para>To enable and disable plugins, or see which plugins are currently enabled, use the <xref linkend="xed-prefs-plugins"/>.</para>
<para>Several plugins come built-in with <application>&app;</application>, and you can install more. The <ulink type="http" url="http://live.gnome.org/Xed/Plugins">xed website</ulink> lists third-party plugins.</para>
<para>To enable and disable plugins, or see which plugins are currently enabled, use the <link linkend="xed-prefs-plugins">Plugins Preferences</link>.</para>
<para>The following plugins come built-in with <application>&app;</application>:</para>
<!-- Not yet documented:
File browser
-->
<itemizedlist>
<listitem>
<para><xref linkend="xed-change-case-plugin"/> allows you to change the case of the selected text.</para>
<para><link linkend="xed-change-case-plugin"><application>Change Case</application></link> allows you to change the case of the selected text.</para>
</listitem>
<listitem>
<para><xref linkend="xed-document-statistics-plugin"/> shows the number of lines, words, and characters in the document. </para>
<para><application><link linkend="xed-document-statistics-plugin">Document Statistics</link></application> shows the number of lines, words, and characters in the document. </para>
</listitem>
<listitem>
<para><xref linkend="xed-file-browser-plugin"/> allows you to browse your files and folders in the side pane.</para>
<para><application><!-- <link linkend="xed-file-browser-plugin">File Browser</link>-->File Browser</application> allows you to browse your files and folders in the side pane.</para>
</listitem>
<listitem>
<para><xref linkend="xed-indent-lines-plugin"/> adds or removes indentation from the selected lines.</para>
<para><application><link linkend="xed-indent-lines-plugin">Indent Lines</link></application> adds or removes indentation from the selected lines.</para>
</listitem>
<listitem>
<para><xref linkend="xed-insert-date-time-plugin"/> adds the current date and time into a document.</para>
<para><application><link linkend="xed-insert-date-time-plugin">Insert Date/Time</link></application> adds the current date and time into a document.</para>
</listitem>
<listitem>
<para><xref linkend="xed-modelines-plugin"/> allows you to set editing preferences for individual documents, and supports <application>Emacs</application>, <application>Kate</application> and <application>Vim</application>-style modelines.</para>
<para><application><link linkend="xed-modelines-plugin">Modelines</link></application> allows you to set editing preferences for individual documents, and supports <application>Emacs</application>, <application>Kate</application> and <application>Vim</application>-style modelines.</para>
</listitem>
<listitem>
<para><xref linkend="xed-sort-plugin"/> arranges selected lines of text into alphabetical order.</para>
<para><application><link linkend="xed-sort-plugin">Sort</link></application> arranges selected lines of text into alphabetical order.</para>
</listitem>
<listitem>
<para><xref linkend="xed-spell-checker-plugin"/> corrects the spelling in the selected text, or marks errors automatically in the document.</para>
<para><application><link linkend="xed-spell-checker-plugin">Spell Checker</link></application> corrects the spelling in the selected text, or marks errors automatically in the document.</para>
</listitem>
<listitem>
<para><xref linkend="xed-tag-list-plugin"/> lets you insert commonly-used tags for HTML and other languages from a list in the side pane.</para>
<para><application><link linkend="xed-tag-list-plugin">Tag List</link></application> lets you insert commonly-used tags for HTML and other languages from a list in the side pane.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="xed-change-case-plugin" xreflabel="Change Case">
<sect2 id="xed-change-case-plugin">
<title>Change Case Plugin</title>
<para>The <application>Change Case</application> plugin changes the case of the selected text.</para>
<para>The following items are added to the <guimenu>Edit</guimenu> menu when the <application>Change Case</application> plugin is enabled:</para>
@ -1331,7 +1334,7 @@
</sect2>
<sect2 id="xed-document-statistics-plugin" xreflabel="Document Statistics">
<sect2 id="xed-document-statistics-plugin">
<title>Document Statistics Plugin</title>
<para>The <application>Document Statistics</application> plugin counts the number of lines, words, characters with spaces, characters without spaces, and bytes in the current file. The plugin displays the results in a <guilabel>Document Statistics</guilabel> dialog. To use the Document Statistics plugin, perform the following steps:</para>
<orderedlist>
@ -1361,7 +1364,7 @@
</orderedlist>
</sect2>
<sect2 id="xed-file-browser-plugin" xreflabel="File Browser">
<sect2 id="xed-file-browser-plugin">
<title>File Browser Plugin</title>
<para>The <application>File Browser</application> Plugin shows your files and folders in the side pane, allowing you to quickly open files.</para>
<para>To view the File Browser, choose <menuchoice><guimenu>View</guimenu> <guimenuitem>Side Pane</guimenuitem> </menuchoice> and then click on the tab showing the File Browser icon at the bottom of the side pane.</para>
@ -1382,7 +1385,7 @@
</sect3>
</sect2>
<sect2 id="xed-indent-lines-plugin" xreflabel="Indent Lines">
<sect2 id="xed-indent-lines-plugin">
<title>Indent Lines Plugin</title>
<para>The <application>Indent Lines</application> plugin adds or removes space from the beginning of lines of text.</para>
<para>To indent or unindent text, perform the following steps:</para>
@ -1400,11 +1403,11 @@
</itemizedlist>
</listitem>
</orderedlist>
<para>The amount of space used, and whether tab characters or space characters are used, depends on the <guilabel>Tab Stops</guilabel> settings in the Editor Preferences: see <xref linkend="xed-prefs-editor"/>.</para>
<para>The amount of space used, and whether tab character or space characters are used, depends on the <guilabel>Tab Stops</guilabel> settings in the Editor Preferences: see <xref linkend="xed-prefs-editor"/>.</para>
</sect2>
<sect2 id="xed-insert-date-time-plugin" xreflabel="Insert Date/Time">
<sect2 id="xed-insert-date-time-plugin">
<title>Insert Date/Time Plugin</title>
<para>The <application>Insert Date/Time</application> plugin inserts the current date and time into a document. To use the Insert Date/Time plugin, perform the following steps:</para>
<orderedlist>
@ -1452,7 +1455,7 @@
</sect3>
</sect2>
<sect2 id="xed-modelines-plugin" xreflabel="Modelines">
<sect2 id="xed-modelines-plugin">
<title>Modelines Plugin</title>
<para>The <application>Modelines</application> plugin allows you to set preferences for individual documents. A <firstterm>modeline</firstterm> is a line of text at the start or end of the document with settings that <application>&app;</application> recognises.</para>
<para>Preferences set using modelines take precedence over the ones specified in the preference dialog.</para>
@ -1480,21 +1483,21 @@
<sect3 id="xed-modelines-plugin-emacs">
<title>Emacs Modelines</title>
<para>The first two lines of a document are scanned for <application>Emacs</application> modelines.</para>
<para>The <application>Emacs</application> options for tab-width, indent-offset, indent-tabs-mode and autowrap are supported. For more information, see the <ulink type="http" url="http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html">GNU Emacs Manual</ulink>.</para>
<para>The <application>Emacs</application> options for tab-width, indent-offset, indent-tabs-mode and autowrap are supported. For more information, see the <ulink type="http" url="http://www.delorie.com/gnu/docs/emacs/emacs_486.html">GNU Emacs Manual</ulink>.</para>
</sect3>
<sect3 id="xed-modelines-plugin-kate">
<title>Kate Modelines</title>
<para>The first and last ten lines of a document are scanned for <application>Kate</application> modelines.</para>
<para>The <application>Kate</application> options for tab-width, indent-width, space-indent, word-wrap and word-wrap-column are supported. For more information, see the <ulink type="http" url="http://www.kate-editor.org">Kate website</ulink>.</para>
<para>The first and last ten lines a document are scanned for <application>Kate</application> modelines.</para>
<para>The <application>Kate</application> options for tab-width, indent-width, space-indent, word-wrap and word-wrap-column are supported. For more information, see the <ulink type="http" url="http://www.kate-editor.org/article/katepart_modelines">Kate website</ulink>.</para>
</sect3>
<sect3 id="xed-modelines-plugin-vim">
<title>Vim Modelines</title>
<para>The first and last three lines of a document are scanned for <application>Vim</application> modelines.</para>
<para>The first and last three lines a document are scanned for <application>Vim</application> modelines.</para>
<para>The <application>Vim</application> options for et, expandtab, ts, tabstop, sw, shiftwidth, wrap, and textwidth are supported. For more information, see the <ulink type="http" url="http://vimdoc.sourceforge.net/htmldoc/options.html#modeline">Vim website</ulink>.</para>
</sect3>
</sect2>
<sect2 id="xed-sort-plugin" xreflabel="Sort">
<sect2 id="xed-sort-plugin">
<title>Sort Plugin</title>
<para>The <application>Sort</application> plugin arranges selected lines of text into alphabetical order.</para>
<caution><para>You cannot undo the Sort operation, so you should save the file before performing the sort. To revert to the saved version of the file after the sort operation, choose <menuchoice> <guimenu>File</guimenu> <guimenuitem>Revert</guimenuitem> </menuchoice>.
@ -1531,7 +1534,7 @@
</orderedlist>
</sect2>
<sect2 id="xed-spell-checker-plugin" xreflabel="Spell Checker">
<sect2 id="xed-spell-checker-plugin">
<title>Spell Checker Plugin</title>
<para>The <application>Spell Checker</application> plugin checks the spelling in the selected text. You can configure <application>&app;</application> to check the spelling automatically, or you can check the spelling manually, in the specified language. The language setting, and the autocheck spelling properties, apply per document. To use the Spell checker plugin, perform the following steps:</para>
<orderedlist>
@ -1586,7 +1589,7 @@
</orderedlist>
</sect2>
<sect2 id="xed-tag-list-plugin" xreflabel="Tag List">
<sect2 id="xed-tag-list-plugin">
<title>Tag List Plugin</title>
<para>The <application>Tag List</application> plugin allows you to insert common tags from a list in the side pane.</para>
<para>To use the Tag List plugin, perform the following steps:</para>

View File

@ -1,4 +1,4 @@
project('xed', 'c', version : '3.0.2')
project('xed', 'c', version : '2.4.3')
gnome = import('gnome')
i18n = import('i18n')
@ -8,8 +8,7 @@ version = meson.project_version()
xed_conf = configuration_data()
xed_conf.set_quoted('VERSION', version)
#xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed')
xed_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed')
# directories
prefix = get_option('prefix')
@ -29,12 +28,12 @@ glib = dependency('glib-2.0', version: '>= 2.40.0')
gthread = dependency('gthread-2.0', version: '>= 2.13.0')
gio = dependency('gio-2.0', version: '>= 2.40.0')
gtk = dependency('gtk+-3.0', version: '>= 3.19.3')
gtksourceview = dependency('gtksourceview-4', version: '>= 4.0.3')
gtksourceview = dependency('gtksourceview-3.0', version: '>= 3.19.0')
libpeas = dependency('libpeas-1.0', version: '>= 1.12.0')
libpeas_gtk = dependency('libpeas-gtk-1.0', version: '>= 1.12.0')
gir_dep = dependency('gobject-introspection-1.0', version: '>= 1.42.0', required: false)
gir_dep = dependency('gobject-introspection-1.0', version: '>= 0.6.7', required: false)
gmodule = dependency('gmodule-2.0')
xapp = dependency('xapp', version: '>= 1.9.0')
xapp = dependency('xapp', version: '>= 1.4.0')
X11 = dependency('x11')
pango = dependency('pango')
@ -95,15 +94,6 @@ if get_option('docs')
subdir('docs/reference')
endif
# The tests use an option that doesn't exist in meson before 0.46.
# Since they aren't strictly necessary, we'll just skip them for earlier versions
# rather than making 0.46 a hard requirement. This condition can be removed once we
# no longer need to worry about building on 0.45 or earlier
meson_version_parts = meson.version().split('.')
if meson_version_parts[0].to_int() > 0 or meson_version_parts[1].to_int() >= 46
subdir('test')
endif
message('prefix = @0@'.format(prefix))
message('bindir = @0@'.format(bindir))
message('datadir = @0@'.format(datadir))

View File

@ -1,105 +0,0 @@
[Plugin]
Loader=python3
Module=bracketcompletion
IAge=3
Name[ar]=إكمال الأقواس
Name[be]=Дапаўненне дужак
Name[bs]=Zatvaranje zagrada
Name[ca]=Compleció dels claudàtors
Name[ca@valencia]=Compleció dels claudàtors
Name[cs]=Doplňování závorek
Name[da]=Klammefuldførelse
Name[de]=Klammern schließen
Name[el]=Συμπλήρωση αγκύλων
Name[en_GB]=Bracket Completion
Name[eo]=Krampo-kompletigo
Name[es]=Completar paréntesis
Name[et]=Sulgude lõpetamine
Name[eu]=Parentesien osaketa
Name[fi]=Sulkuparin täsmäys
Name[fr]=Complétion de parenthèses
Name[fur]=Completament parentesis
Name[gl]=Completar parénteses
Name[he]=התאמת סוגריים
Name[hr]=Dovršavanje zagrada
Name[hu]=Zárójel-kiegészítés
Name[id]=Penyelesaian Tanda Kurung
Name[it]=Completamento parentesi
Name[ja]=カッコの補完
Name[kk]=Жақшаларды толықтыру
Name[ko]=각괄호 일치
Name[lt]=Skliaustų užbaigimas
Name[lv]=Iekavu noslēgšana
Name[nl]=Haakjes-voltooiing
Name[oc]=Complecion de parentèsis
Name[pl]=Uzupełnianie nawiasów
Name[pt]=Conclusão de chavetas
Name[pt_BR]=Fechamento de parênteses
Name[ro]=Completare paranteze
Name[ru]=Дополнение скобок
Name[sk]=Dopĺňanie pravých zátvoriek
Name[sl]=Dopolnjevanje oklepajev
Name[sr]=Допуњавање заграда
Name[sr@latin]=Dopunjavanje zagrada
Name[sv]=Parenteskomplettering
Name[te]=బ్రాకెట్ ముగింపు
Name[th]=การเติมเต็มคู่วงเล็บ
Name[tr]=Parantez Tamamlama
Name[zh_CN]=括号补全
Name[zh_TW]=括號補完
Name=Bracket Completion
Description[ar]=يغلق الأقواس آليا.
Description[as]=বন্ধনী নিজেই যোগ কৰে ।
Description[be]=Аўтаматычна дадае канцавыя дужкі.
Description[be@latin]=Aŭtamatyčna dadaje kancavyja dužki.
Description[bs]=Automatski dodaj zatvorene zagrade.
Description[ca]=Afegeix claudàtors de tancada automàticament.
Description[ca@valencia]=Afig claudàtors de tancada automàticament.
Description[cs]=Automaticky přidává zavírací závorky.
Description[da]=Tilføjer automatisk afsluttende klammer.
Description[de]=Fügt automatisch schließende Klammern hinzu.
Description[dz]=ཁ་བསྡམ་གུག་ཤད་ཚུ་ རང་བཞིན་གྱིས་ཁ་སྐོང་རྐྱབ་ཨིན།
Description[el]=Συμπληρώνει αυτόματα τις αγκύλες.
Description[en_CA]=Automatically adds closing brackets.
Description[en_GB]=Automatically adds closing brackets.
Description[eo]=Aŭtomate aldoni fermantajn krampojn.
Description[es]=Añadir automáticamente cierres de paréntesis.
Description[eu]=Automatikoki gehitzen ditu itxierako parentesiak.
Description[fi]=Lisää suluille pääte automaattisesti.
Description[fr]=Ajouter automatiquement les parenthèses fermantes.
Description[fur]=Al zonte in automatic lis parentesis sieradis.
Description[gl]=Engadir automaticamente peches de parénteses.
Description[gu]=બંધ કરતા કૌંસો ઓપોઆપ ઉમેરાય છે.
Description[he]=הוספת סוגר לסגירה.
Description[hr]=Automatski zatvara zagrade.
Description[hu]=Automatikusan hozzáadja a záró zárójeleket.
Description[id]=Otomatis menambah kurung tutup.
Description[it]=Aggiunge automaticamente le parentesi di chiusura
Description[ja]=終わり括弧を自動的に追加します
Description[kk]=Жабатын жақшаны автоматты түрде қосады.
Description[ko]=자동으로 닫는 각괄호를 추가합니다.
Description[lt]=Automatiškai prideda užveriančius skliaustus.
Description[lv]=Automātiski pievieno aizverošās iekavas.
Description[mr]=स्वयं बंद करण्याजोगी ब्रॅकेट समावेष करा.
Description[nl]=Voegt automatisch haakjes sluiten toe.
Description[oc]=Apondre automaticament las parentèsis tampantas.
Description[or]=ବନ୍ଦହୋଇଥିବା ବନ୍ଧନିଗୁଡ଼ିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଯୋଗକରନ୍ତୁ।
Description[pl]=Automatycznie dodaje nawiasy zamykające.
Description[pt]=Adiciona automaticamente fecho de chavetas.
Description[pt_BR]=Fecha parênteses automaticamente.
Description[ro]=Adaugă automat paranteze închise.
Description[ru]=Автоматическое добавление закрывающей скобки.
Description[sk]=Automatické pridávanie pravých zátvoriek.
Description[sl]=Samodejno doda zaklepaje
Description[sr]=Сам додаје затварајуће заграде.
Description[sr@latin]=Sam dodaje zatvarajuće zagrade.
Description[sv]=Lägger automatiskt till avslutande parenteser.
Description[th]=เติมวงเล็บปิดโดยอัตโนมัติ
Description[tr]=Parantez kapanışını kendiliğinden ekler.
Description[vi]=Tự động thêm dấu ngoặc đóng.
Description[zh_CN]=自动添加闭合括号。
Description[zh_TW]=自動加入關閉用括號。
Description=Automatically adds closing brackets.
Authors=Hrutvik Suthar <steve@istique.net>
Copyright=Copyright @ 2020 Hrutvik Suthar
Version=1.0

View File

@ -1,318 +0,0 @@
# -*- coding: utf-8 -*-
#
# bracketcompletion.py - Bracket completion plugin for Xed
#
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
import gi
gi.require_version('Peas', '1.0')
#gi.require_version('Xed', '3.0')
from gi.repository import GObject, Gdk, Xed
common_brackets = {
'(' : ')',
'[' : ']',
'{' : '}',
'"' : '"',
"'" : "'",
}
close_brackets = {
')' : '(',
']' : '[',
'}' : '{',
}
language_brackets = {
'changelog': { '<' : '>' },
'html': { '<' : '>' },
'ruby': { '|' : '|' },
'sh': { '`' : '`' },
'xml': { '<' : '>' },
'php': { '<' : '>' },
}
class BracketCompletionPlugin(GObject.Object, Xed.ViewActivatable):
__gtype_name__ = "BracketCompletion"
view = GObject.Property(type=Xed.View)
def __init__(self):
GObject.Object.__init__(self)
def do_activate(self):
self._doc = self.view.get_buffer()
self._last_iter = None
self._stack = []
self._relocate_marks = True
self.update_language()
# Add the markers to the buffer
insert = self._doc.get_iter_at_mark(self._doc.get_insert())
self._mark_begin = self._doc.create_mark(None, insert, True)
self._mark_end = self._doc.create_mark(None, insert, False)
self._handlers = [
None,
None,
self.view.connect('notify::editable', self.on_notify_editable),
self._doc.connect('notify::language', self.on_notify_language),
None,
]
self.update_active()
def do_deactivate(self):
if self._handlers[0]:
self.view.disconnect(self._handlers[0])
self.view.disconnect(self._handlers[1])
self._doc.disconnect(self._handlers[4])
self.view.disconnect(self._handlers[2])
self._doc.disconnect(self._handlers[3])
self._doc.delete_mark(self._mark_begin)
self._doc.delete_mark(self._mark_end)
def update_active(self):
# Don't activate the feature if the buffer isn't editable or if
# there are no brackets for the language
active = self.view.get_editable() and \
self._brackets is not None
if active and self._handlers[0] is None:
self._handlers[0] = self.view.connect('event-after',
self.on_event_after)
self._handlers[1] = self.view.connect('key-press-event',
self.on_key_press_event)
self._handlers[4] = self._doc.connect('delete-range',
self.on_delete_range)
elif not active and self._handlers[0] is not None:
self.view.disconnect(self._handlers[0])
self._handlers[0] = None
self.view.disconnect(self._handlers[1])
self._handlers[1] = None
self._doc.disconnect(self._handlers[4])
self._handlers[4] = None
def update_language(self):
lang = self._doc.get_language()
if lang is None:
self._brackets = None
return
lang_id = lang.get_id()
if lang_id in language_brackets:
self._brackets = language_brackets[lang_id]
# we populate the language-specific brackets with common ones lazily
self._brackets.update(common_brackets)
else:
self._brackets = common_brackets
# get the corresponding keyvals
self._bracket_keyvals = set()
for b in self._brackets:
kv = Gdk.unicode_to_keyval(ord(b[-1]))
if (kv):
self._bracket_keyvals.add(kv)
for b in close_brackets:
kv = Gdk.unicode_to_keyval(ord(b[-1]))
if (kv):
self._bracket_keyvals.add(kv)
def get_current_token(self):
end = self._doc.get_iter_at_mark(self._doc.get_insert())
start = end.copy()
word = None
if end.ends_word() or (end.inside_word() and not end.starts_word()):
start.backward_word_start()
word = self._doc.get_text(start, end)
if not word and start.backward_char():
word = start.get_char()
if word.isspace():
word = None
if word:
return word, start, end
else:
return None, None, None
def get_next_token(self):
start = self._doc.get_iter_at_mark(self._doc.get_insert())
end = start.copy()
word = None
if start.ends_word() or (start.inside_word() and not start.starts_word()):
end.forward_word_end()
word = self._doc.get_text(start, end)
if not word:
word = start.get_char()
if word.isspace():
word = None
if word:
return word, start, end
else:
return None, None, None
def compute_indentation(self, cur):
"""
Compute indentation at the given iterator line
view : gtk.TextView
cur : gtk.TextIter
"""
start = self._doc.get_iter_at_line(cur.get_line())
end = start.copy()
c = end.get_char()
while c.isspace() and c not in ('\n', '\r') and end.compare(cur) < 0:
if not end.forward_char():
break
c = end.get_char()
if start.equal(end):
return ''
return start.get_slice(end)
def on_notify_language(self, view, pspec):
self.update_language()
self.update_active()
def on_notify_editable(self, view, pspec):
self.update_active()
def on_key_press_event(self, view, event):
if event.state & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK):
return False
if event.keyval in (Gdk.KEY_Left, Gdk.KEY_Right):
self._stack = []
if event.keyval == Gdk.KEY_BackSpace:
self._stack = []
if self._last_iter == None:
return False
iter1 = self._doc.get_iter_at_mark(self._doc.get_insert())
iter1.backward_char()
self._doc.begin_user_action()
self._doc.delete(iter1, self._last_iter)
self._doc.end_user_action()
self._last_iter = None
return True
if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter) and \
view.get_auto_indent() and self._last_iter != None:
# This code has barely been adapted from gtksourceview.c
# Note: it might break IM!
mark = self._doc.get_insert()
iter1 = self._doc.get_iter_at_mark(mark)
indent = self.compute_indentation(iter1)
indent = "\n" + indent
# Insert new line and auto-indent.
self._doc.begin_user_action()
self._doc.insert(iter1, indent)
self._doc.insert(iter1, indent)
self._doc.end_user_action()
# Leave the cursor where we want it to be
iter1.backward_chars(len(indent))
self._doc.place_cursor(iter1)
self.view.scroll_mark_onscreen(mark)
self._last_iter = None
return True
self._last_iter = None
return False
def on_event_after(self, view, event):
if event.type != Gdk.EventType.KEY_PRESS or \
event.state & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK) or \
event.keyval not in self._bracket_keyvals:
return
# Check if the insert mark is in the range of mark_begin to mark_end
# if not we free the stack
insert = self._doc.get_insert()
iter_begin = self._doc.get_iter_at_mark(self._mark_begin)
iter_end = self._doc.get_iter_at_mark(self._mark_end)
insert_iter = self._doc.get_iter_at_mark(insert)
if not iter_begin.equal(iter_end):
if not insert_iter.in_range(iter_begin, iter_end):
self._stack = []
self._relocate_marks = True
# Check if the word is not in our brackets
word, start, end = self.get_current_token()
if word not in self._brackets and word not in close_brackets:
return
# If we didn't insert brackets yet we insert them in the insert mark iter
if self._relocate_marks == True:
insert_iter = self._doc.get_iter_at_mark(insert)
self._doc.move_mark(self._mark_begin, insert_iter)
self._doc.move_mark(self._mark_end, insert_iter)
self._relocate_marks = False
# Depending on having close bracket or a open bracket we get the opposed
# bracket
bracket = None
bracket2 = None
if word not in close_brackets:
self._stack.append(word)
bracket = self._brackets[word]
else:
bracket2 = close_brackets[word]
word2, _, _ = self.get_next_token()
# Check to skip the closing bracket
# Example: word = ) and word2 = )
if word == word2:
if bracket2 != None and self._stack != [] and \
self._stack[len(self._stack) - 1] == bracket2:
self._stack.pop()
self._doc.handler_block(self._handlers[4])
self._doc.delete(start, end)
self._doc.handler_unblock(self._handlers[4])
end.forward_char()
self._doc.place_cursor(end)
return
# Insert the closing bracket
if bracket != None:
self._doc.begin_user_action()
self._doc.insert(end, bracket)
self._doc.end_user_action()
# Leave the cursor when we want it to be
self._last_iter = end.copy()
end.backward_chars(len(bracket))
self._doc.place_cursor(end)
def on_delete_range(self, doc, start, end):
self._stack = []
# ex:ts=4:et:

View File

@ -1,4 +0,0 @@
install_subdir(
'bracket-complete',
install_dir: pluginslibdir
)

View File

@ -69,8 +69,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedDocInfoPlugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedDocInfoPlugin))
xed_window_activatable_iface_init))
static void
calculate_info (XedDocument *doc,
@ -386,7 +385,7 @@ static void
xed_docinfo_plugin_init (XedDocInfoPlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedDocInfoPlugin initializing");
plugin->priv = xed_docinfo_plugin_get_instance_private (plugin);
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin, XED_TYPE_DOCINFO_PLUGIN, XedDocInfoPluginPrivate);
}
static void
@ -532,6 +531,8 @@ xed_docinfo_plugin_class_init (XedDocInfoPluginClass *klass)
object_class->get_property = xed_docinfo_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (klass, sizeof (XedDocInfoPluginPrivate));
}
static void

View File

@ -7,3 +7,4 @@ _Description=Easy file access from the side pane
Icon=system-file-manager
Authors=Jesse van den Kieboom <jesse@icecrew.nl>
Copyright=Copyright © 2006 Jesse van den Kieboom
Website=http://www.mate-desktop.org

View File

@ -27,6 +27,10 @@
#include "xed-file-bookmarks-store.h"
#include "xed-file-browser-utils.h"
#define XED_FILE_BOOKMARKS_STORE_GET_PRIVATE(object)( \
G_TYPE_INSTANCE_GET_PRIVATE((object), XED_TYPE_FILE_BOOKMARKS_STORE, \
XedFileBookmarksStorePrivate))
struct _XedFileBookmarksStorePrivate
{
GVolumeMonitor * volume_monitor;
@ -51,11 +55,7 @@ static gboolean find_with_flags (GtkTreeModel * model,
guint flags,
guint notflags);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBookmarksStore,
xed_file_bookmarks_store,
GTK_TYPE_TREE_STORE,
0,
G_ADD_PRIVATE_DYNAMIC (XedFileBookmarksStore))
G_DEFINE_DYNAMIC_TYPE (XedFileBookmarksStore, xed_file_bookmarks_store, GTK_TYPE_TREE_STORE)
static void
xed_file_bookmarks_store_dispose (GObject * object)
@ -92,6 +92,8 @@ xed_file_bookmarks_store_class_init (XedFileBookmarksStoreClass *klass)
object_class->dispose = xed_file_bookmarks_store_dispose;
object_class->finalize = xed_file_bookmarks_store_finalize;
g_type_class_add_private (object_class, sizeof (XedFileBookmarksStorePrivate));
}
static void
@ -103,7 +105,7 @@ xed_file_bookmarks_store_class_finalize (XedFileBookmarksStoreClass *klass)
static void
xed_file_bookmarks_store_init (XedFileBookmarksStore * obj)
{
obj->priv = xed_file_bookmarks_store_get_instance_private (obj);
obj->priv = XED_FILE_BOOKMARKS_STORE_GET_PRIVATE (obj);
}
/* Private */

View File

@ -42,6 +42,8 @@
#define FILE_BROWSER_SCHEMA "org.x.editor.plugins.filebrowser"
#define FILE_BROWSER_ONLOAD_SCHEMA "org.x.editor.plugins.filebrowser.on-load"
#define XED_FILE_BROWSER_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_FILE_BROWSER_PLUGIN, XedFileBrowserPluginPrivate))
struct _XedFileBrowserPluginPrivate
{
XedWindow *window;
@ -104,8 +106,8 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserPlugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserPlugin)
xed_window_activatable_iface_init) \
\
_xed_file_browser_store_register_type (type_module); \
_xed_file_bookmarks_store_register_type (type_module); \
_xed_file_browser_view_register_type (type_module); \
@ -116,7 +118,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserPlugin,
static void
xed_file_browser_plugin_init (XedFileBrowserPlugin *plugin)
{
plugin->priv = xed_file_browser_plugin_get_instance_private (plugin);
plugin->priv = XED_FILE_BROWSER_PLUGIN_GET_PRIVATE (plugin);
}
static void
@ -618,6 +620,8 @@ xed_file_browser_plugin_class_init (XedFileBrowserPluginClass * klass)
object_class->get_property = xed_file_browser_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (object_class, sizeof (XedFileBrowserPluginPrivate));
}
static void

View File

@ -31,6 +31,10 @@
#include "xed-file-browser-error.h"
#include "xed-file-browser-utils.h"
#define XED_FILE_BROWSER_STORE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
XED_TYPE_FILE_BROWSER_STORE, \
XedFileBrowserStorePrivate))
#define NODE_IS_DIR(node) (FILE_IS_DIR((node)->flags))
#define NODE_IS_HIDDEN(node) (FILE_IS_HIDDEN((node)->flags))
#define NODE_IS_TEXT(node) (FILE_IS_TEXT((node)->flags))
@ -189,6 +193,14 @@ static void next_files_async (GFileEnumerator *enumerator,
static void delete_files (AsyncData *data);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserStore, xed_file_browser_store,
G_TYPE_OBJECT,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_MODEL,
xed_file_browser_store_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_DRAG_SOURCE,
xed_file_browser_store_drag_source_init))
/* Properties */
enum {
PROP_0,
@ -212,15 +224,6 @@ enum
NUM_SIGNALS
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserStore, xed_file_browser_store,
G_TYPE_OBJECT,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_MODEL,
xed_file_browser_store_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_DRAG_SOURCE,
xed_file_browser_store_drag_source_init)
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserStore))
static guint model_signals[NUM_SIGNALS] = { 0 };
static void
@ -415,6 +418,8 @@ xed_file_browser_store_class_init (XedFileBrowserStoreClass * klass)
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
G_TYPE_FILE);
g_type_class_add_private (object_class, sizeof (XedFileBrowserStorePrivate));
}
static void
@ -452,7 +457,7 @@ xed_file_browser_store_drag_source_init (GtkTreeDragSourceIface * iface)
static void
xed_file_browser_store_init (XedFileBrowserStore * obj)
{
obj->priv = xed_file_browser_store_get_instance_private (obj);
obj->priv = XED_FILE_BROWSER_STORE_GET_PRIVATE (obj);
obj->priv->column_types[XED_FILE_BROWSER_STORE_COLUMN_LOCATION] = G_TYPE_FILE;
obj->priv->column_types[XED_FILE_BROWSER_STORE_COLUMN_NAME] = G_TYPE_STRING;

View File

@ -31,6 +31,10 @@
#include "xed-file-browser-marshal.h"
#include "xed-file-browser-enum-types.h"
#define XED_FILE_BROWSER_VIEW_GET_PRIVATE(object)( \
G_TYPE_INSTANCE_GET_PRIVATE((object), \
XED_TYPE_FILE_BROWSER_VIEW, XedFileBrowserViewPrivate))
struct _XedFileBrowserViewPrivate
{
GtkTreeViewColumn *column;
@ -77,11 +81,7 @@ static const GtkTargetEntry drag_source_targets[] = {
{ "text/uri-list", 0, 0 }
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserView,
xed_file_browser_view,
GTK_TYPE_TREE_VIEW,
0,
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserView))
G_DEFINE_DYNAMIC_TYPE (XedFileBrowserView, xed_file_browser_view, GTK_TYPE_TREE_VIEW)
static void on_cell_edited (GtkCellRendererText *cell,
gchar *path,
@ -824,6 +824,8 @@ xed_file_browser_view_class_init (XedFileBrowserViewClass *klass)
bookmark_activated), NULL, NULL,
g_cclosure_marshal_VOID__BOXED,
G_TYPE_NONE, 1, GTK_TYPE_TREE_ITER);
g_type_class_add_private (object_class, sizeof (XedFileBrowserViewPrivate));
}
static void
@ -862,7 +864,7 @@ cell_data_cb (GtkTreeViewColumn *tree_column,
static void
xed_file_browser_view_init (XedFileBrowserView *obj)
{
obj->priv = xed_file_browser_view_get_instance_private (obj);
obj->priv = XED_FILE_BROWSER_VIEW_GET_PRIVATE (obj);
obj->priv->column = gtk_tree_view_column_new ();

View File

@ -38,6 +38,10 @@
#include "xed-file-browser-marshal.h"
#include "xed-file-browser-enum-types.h"
#define XED_FILE_BROWSER_WIDGET_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
XED_TYPE_FILE_BROWSER_WIDGET, \
XedFileBrowserWidgetPrivate))
#define XML_UI_FILE "xed-file-browser-widget-ui.xml"
#define LOCATION_DATA_KEY "xed-file-browser-widget-location"
@ -221,11 +225,7 @@ static void on_action_filter_binary (GtkAction *action,
static void on_action_bookmark_open (GtkAction *action,
XedFileBrowserWidget *obj);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserWidget,
xed_file_browser_widget,
GTK_TYPE_BOX,
0,
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserWidget))
G_DEFINE_DYNAMIC_TYPE (XedFileBrowserWidget, xed_file_browser_widget, GTK_TYPE_BOX)
static void
free_name_icon (gpointer data)
@ -483,6 +483,8 @@ xed_file_browser_widget_class_init (XedFileBrowserWidgetClass *klass)
G_TYPE_BOOLEAN,
1,
G_TYPE_POINTER);
g_type_class_add_private (object_class, sizeof (XedFileBrowserWidgetPrivate));
}
static void
@ -1171,7 +1173,7 @@ create_filter (XedFileBrowserWidget *obj)
static void
xed_file_browser_widget_init (XedFileBrowserWidget *obj)
{
obj->priv = xed_file_browser_widget_get_instance_private (obj);
obj->priv = XED_FILE_BROWSER_WIDGET_GET_PRIVATE (obj);
obj->priv->bookmarks_hash = g_hash_table_new_full (g_file_hash,
(GEqualFunc)g_file_equal,

View File

@ -1,10 +0,0 @@
[Plugin]
Loader=python3
Module=joinlines
IAge=3
_Name=Join Lines
_Description=Join several lines
Icon=gnome-mime-text-x-python
Authors=Steve Frécinaux <steve@istique.net>;André Homeyer;Linux Mint team
Copyright=Copyright @ 2006-2007 Steve Frécinaux, André Homeyer
Builtin=true

View File

@ -1,91 +0,0 @@
from gi.repository import GObject, Gtk, Xed
import gettext
gettext.install("xed")
MENU_PATH = "/MenuBar/ViewMenu/ViewOps_1"
class JoinLinesPlugin(GObject.Object, Xed.WindowActivatable):
__gtype_name__ = "JoinLinesPlugin"
window = GObject.property(type=Xed.Window)
def __init__(self):
GObject.Object.__init__(self)
def do_activate(self):
self._views = {}
self._insert_menu()
def _insert_menu(self):
manager = self.window.get_ui_manager()
self._action_group = Gtk.ActionGroup(name="XedJoinLinesPluginActions")
self._action_group.add_actions(
[("JoinLinesAction", None, _("_Join Lines"), "<Ctrl>J",
_("Join the selected lines"),
lambda w: self.join_lines(w))])
manager.insert_action_group(self._action_group)
self._ui_id = manager.new_merge_id()
manager.add_ui(self._ui_id,
MENU_PATH,
"JoinLinesAction",
"JoinLinesAction",
Gtk.UIManagerItemType.MENUITEM,
False)
def do_update_state(self):
self._action_group.set_sensitive(self.window.get_active_document() != None)
def do_deactivate(self):
self._remove_menu()
def _remove_menu(self):
manager = self.window.get_ui_manager()
manager.remove_ui(self._ui_id)
manager.remove_action_group(self._action_group)
manager.ensure_update()
def join_lines(self, w):
doc = self.window.get_active_document()
if doc is None:
return
doc.begin_user_action()
# If there is a selection use it, otherwise join the
# next line
try:
start, end = doc.get_selection_bounds()
except ValueError:
start = doc.get_iter_at_mark(doc.get_insert())
end = start.copy()
end.forward_line()
end_mark = doc.create_mark(None, end)
if not start.ends_line():
start.forward_to_line_end()
# Include trailing spaces in the chunk to be removed
while start.backward_char() and start.get_char() in ('\t', ' '):
pass
start.forward_char()
while doc.get_iter_at_mark(end_mark).compare(start) == 1:
end = start.copy()
while end.get_char() in ('\r', '\n', ' ', '\t'):
end.forward_char()
doc.delete(start, end)
doc.insert(start, ' ')
start.forward_to_line_end()
doc.delete_mark(end_mark)
doc.end_user_action()

View File

@ -1,13 +0,0 @@
install_subdir(
'joinlines',
install_dir: pluginslibdir
)
textsize_desktop = custom_target(
'joinlines_desktop',
input: 'joinlines.plugin.desktop.in',
output: 'joinlines.plugin',
command: [intltool_merge, '-d', '-u', po_dir, '@INPUT@', '@OUTPUT@'],
install: true,
install_dir: pluginslibdir,
)

View File

@ -1,10 +1,8 @@
pluginsdatadir = join_paths(datadir, 'xed', 'plugins')
pluginslibdir = join_paths(libdir, 'xed', 'plugins')
subdir('bracket-complete')
subdir('docinfo')
subdir('filebrowser')
subdir('joinlines')
subdir('modelines')
subdir('open-uri-context-menu')
subdir('sort')

View File

@ -5,3 +5,4 @@ _Name=Modelines
_Description=Emacs, Kate and Vim-style modelines support for xed.
Authors=Steve Frécinaux <steve@istique.net>
Copyright=Copyright © 2005 Steve Frécinaux
Website=http://www.mate-desktop.org

View File

@ -50,8 +50,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedModelinePlugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_VIEW_ACTIVATABLE,
xed_view_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedModelinePlugin))
xed_view_activatable_iface_init))
static void
xed_modeline_plugin_constructed (GObject *object)
@ -72,7 +71,9 @@ xed_modeline_plugin_init (XedModelinePlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedModelinePlugin initializing");
plugin->priv = xed_modeline_plugin_get_instance_private (plugin);
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin,
XED_TYPE_MODELINE_PLUGIN,
XedModelinePluginPrivate);
}
static void
@ -192,6 +193,8 @@ xed_modeline_plugin_class_init (XedModelinePluginClass *klass)
object_class->get_property = xed_modeline_plugin_get_property;
g_object_class_override_property (object_class, PROP_VIEW, "view");
g_type_class_add_private (klass, sizeof (XedModelinePluginPrivate));
}
static void

View File

@ -7,4 +7,5 @@ Description=Adds context menu item to open an URI at the pointer position.
Icon=gtk-open
Authors=Martin Szulecki <opensuse@sukimashita.com>\nJean-Philippe Fleury <contact@jpfleury.net>
Copyright=Copyright © 2007-2008 Martin Szulecki\nCopyright © 2011 Jean-Philippe Fleury
Website=https://github.com/jpfleury/open-uri-context-menu
Builtin=true

View File

@ -6,4 +6,5 @@ _Description=Sorts a document or selected text.
Icon=gtk-sort-ascending
Authors=Carlo Borreo <borreo@softhome.net>;Lee Mallabone <mate@fonicmonkey.net>;Paolo Maggi <paolo.maggi@polito.it>;Jorge Alberto Torres H. <jorge@deadoak.com>
Copyright=Copyright © 2001 Carlo Borreo\nCopyright © 2002-2003 Lee Mallabone, Paolo Maggi\nCopyright © 2004-2005 Paolo Maggi
Website=http://www.mate-desktop.org
Builtin=true

View File

@ -33,10 +33,19 @@
#include "xed-sort-plugin.h"
#define XED_SORT_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_SORT_PLUGIN, XedSortPluginPrivate))
#define MENU_PATH "/MenuBar/EditMenu/EditOps_6"
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedSortPlugin,
xed_sort_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init))
struct _XedSortPluginPrivate
{
XedWindow *window;
@ -53,14 +62,6 @@ enum
PROP_WINDOW
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedSortPlugin,
xed_sort_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedSortPlugin))
static void sort_cb (GtkAction *action,
XedSortPlugin *plugin);
@ -309,7 +310,7 @@ xed_sort_plugin_init (XedSortPlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedSortPlugin initializing");
plugin->priv = xed_sort_plugin_get_instance_private (plugin);
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin, XED_TYPE_SORT_PLUGIN, XedSortPluginPrivate);
}
static void
@ -382,6 +383,8 @@ xed_sort_plugin_class_init (XedSortPluginClass *klass)
object_class->get_property = xed_sort_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (klass, sizeof (XedSortPluginPrivate));
}
static void

View File

@ -6,3 +6,4 @@ _Description=Checks the spelling of the current document.
Icon=gtk-spell-check
Authors=Paolo Maggi <paolo@gnome.org>
Copyright=Copyright © 2002-2005 Paolo Maggi
Website=http://www.mate-desktop.org

View File

@ -5,3 +5,4 @@ _Name=Tag list
_Description=Provides a method to easily insert commonly used tags/strings into a document without having to type them.
Authors=Paolo Maggi <paolo.maggi@polito.it>
Copyright=Copyright © 2002-2005 Paolo Maggi
Website=http://www.mate-desktop.org

View File

@ -39,6 +39,10 @@
#include "xed-taglist-plugin-panel.h"
#include "xed-taglist-plugin-parser.h"
#define XED_TAGLIST_PLUGIN_PANEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
XED_TYPE_TAGLIST_PLUGIN_PANEL, \
XedTaglistPluginPanelPrivate))
enum
{
COLUMN_TAG_NAME,
@ -59,11 +63,7 @@ struct _XedTaglistPluginPanelPrivate
gchar *data_dir;
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTaglistPluginPanel,
xed_taglist_plugin_panel,
GTK_TYPE_BOX,
0,
G_ADD_PRIVATE_DYNAMIC (XedTaglistPluginPanel))
G_DEFINE_DYNAMIC_TYPE (XedTaglistPluginPanel, xed_taglist_plugin_panel, GTK_TYPE_BOX)
enum
{
@ -114,7 +114,8 @@ xed_taglist_plugin_panel_get_property (GObject *object,
switch (prop_id)
{
case PROP_WINDOW:
g_value_set_object (value, panel->priv->window);
g_value_set_object (value,
XED_TAGLIST_PLUGIN_PANEL_GET_PRIVATE (panel)->window);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -149,6 +150,8 @@ xed_taglist_plugin_panel_class_init (XedTaglistPluginPanelClass *klass)
XED_TYPE_WINDOW,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_type_class_add_private (object_class, sizeof(XedTaglistPluginPanelPrivate));
}
static void
@ -665,7 +668,7 @@ xed_taglist_plugin_panel_init (XedTaglistPluginPanel *panel)
xed_debug (DEBUG_PLUGINS);
panel->priv = xed_taglist_plugin_panel_get_instance_private (panel);
panel->priv = XED_TAGLIST_PLUGIN_PANEL_GET_PRIVATE (panel);
panel->priv->data_dir = NULL;
gtk_orientable_set_orientation (GTK_ORIENTABLE (panel),

View File

@ -37,6 +37,8 @@
#include "xed-taglist-plugin-panel.h"
#include "xed-taglist-plugin-parser.h"
#define XED_TAGLIST_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_TAGLIST_PLUGIN, XedTaglistPluginPrivate))
struct _XedTaglistPluginPrivate
{
XedWindow *window;
@ -46,25 +48,26 @@ struct _XedTaglistPluginPrivate
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTaglistPlugin,
xed_taglist_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init) \
\
_xed_taglist_plugin_panel_register_type (type_module); \
)
enum
{
PROP_0,
PROP_WINDOW
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTaglistPlugin,
xed_taglist_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedTaglistPlugin)
_xed_taglist_plugin_panel_register_type (type_module))
static void
xed_taglist_plugin_init (XedTaglistPlugin *plugin)
{
plugin->priv = xed_taglist_plugin_get_instance_private (plugin);
plugin->priv = XED_TAGLIST_PLUGIN_GET_PRIVATE (plugin);
xed_debug_message (DEBUG_PLUGINS, "XedTaglistPlugin initializing");
}
@ -107,7 +110,7 @@ xed_taglist_plugin_activate (XedWindowActivatable *activatable)
priv->taglist_panel = xed_taglist_plugin_panel_new (priv->window, data_dir);
g_free (data_dir);
xed_panel_add_item (side_panel, priv->taglist_panel, _("Tags"), "list-add-symbolic");
xed_panel_add_item (side_panel, priv->taglist_panel, _("Tags"), "list-add");
}
static void
@ -189,6 +192,8 @@ xed_taglist_plugin_class_init (XedTaglistPluginClass *klass)
object_class->get_property = xed_taglist_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (object_class, sizeof (XedTaglistPluginPrivate));
}
static void

View File

@ -7,4 +7,5 @@ _Description=Allow controlling the zoom levels of the text
Icon=gnome-mime-text-x-python
Authors=Steve Frécinaux <steve@istique.net>;Linux Mint team
Copyright=Copyright © 2017 by the authors
Website=https://github.com/linuxmint
Builtin=true

View File

@ -40,15 +40,28 @@ class DocumentHelper(Signals):
self._default_font = None
self._last_font = None
self._font_tags = {}
def stop(self):
if self._default_font:
self._view.override_font(self._default_font)
self.remove_font_tags()
self.disconnect_signals(self._view)
self._view.textsize_document_helper = None
def remove_font_tags(self):
buf = self._view.get_buffer()
table = buf.get_tag_table()
# Remove all the font tags
for size in self._font_tags:
tag = self._font_tags[size]
table.remove(tag)
self._font_tags = {}
def update_default_font(self):
context = self._view.get_style_context()
description = context.get_font(context.get_state()).copy()
@ -56,6 +69,23 @@ class DocumentHelper(Signals):
if not self._last_font or description.hash() != self._last_font.hash():
self._default_font = description
def get_font_tags(self, start, end):
tags = set()
# Check all the know font tags
for size in self._font_tags:
tag = self._font_tags[size]
if start.has_tag(tag):
tags.add(tag)
else:
cp = start.copy()
if cp.forward_to_tag_toggle(tag) and cp.compare(end) < 0:
tags.add(tag)
return list(tags)
def set_font_size(self, amount):
self.update_default_font()
@ -63,17 +93,61 @@ class DocumentHelper(Signals):
description = context.get_font(context.get_state()).copy()
buf = self._view.get_buffer()
bounds = buf.get_selection_bounds()
size = description.get_size() / Pango.SCALE
if size >= MAX_FONT_SIZE and amount == 1:
return;
if size <= MIN_FONT_SIZE and amount == -1:
return;
if not bounds:
if size >= MAX_FONT_SIZE and amount == 1:
return;
if size <= MIN_FONT_SIZE and amount == -1:
return;
description.set_size(max(1, (size + amount)) * Pango.SCALE)
description.set_size(max(1, (size + amount)) * Pango.SCALE)
self._view.override_font(description)
self._last_font = description
self._view.override_font(description)
self._last_font = description
else:
start = bounds[0]
end = bounds[1]
tags = self.get_font_tags(start, end)
if not tags:
# Simply use the overall font size as the base
newsize = size + amount
elif len(tags) == 1:
newsize = tags[0].props.font_desc.get_size() / Pango.SCALE + amount
else:
newsize = 0
for tag in tags:
newsize += tag.props.font_desc.get_size() / Pango.SCALE
newsize = round(newsize / len(tags))
if newsize >= MAX_FONT_SIZE and amount == 1:
return;
if newsize <= MIN_FONT_SIZE and amount == -1:
return;
newsize = int(max(1, newsize))
if not newsize in self._font_tags:
newtag = buf.create_tag(None)
desc = description
desc.set_size(newsize * Pango.SCALE)
newtag.props.font_desc = desc
self._font_tags[newsize] = newtag
else:
newtag = self._font_tags[newsize]
# Remove all the previous mix of tags
for tag in tags:
buf.remove_tag(tag, start, end)
buf.apply_tag(newtag, start, end)
def larger_text(self):
self.set_font_size(1)
@ -85,9 +159,18 @@ class DocumentHelper(Signals):
self.update_default_font()
buf = self._view.get_buffer()
bounds = buf.get_selection_bounds()
self._view.override_font(self._default_font)
self._last_font = self._default_font
if not bounds:
self.remove_font_tags()
self._view.override_font(self._default_font)
self._last_font = self._default_font
else:
tags = self.get_font_tags(bounds[0], bounds[1])
for tag in tags:
buf.remove_tag(tag, bounds[0], bounds[1])
def on_scroll_event(self, view, event):
state = event.state & Gtk.accelerator_get_default_mod_mask()

View File

@ -5,3 +5,4 @@ _Name=Insert Date/Time
_Description=Inserts current date and time at the cursor position.
Authors=Paolo Maggi <paolo.maggi@polito.it>;Lee Mallabone <mate@fonicmonkey.net>
Copyright=Copyright © 2002-2005 Paolo Maggi
Website=http://www.mate-desktop.org

View File

@ -38,6 +38,10 @@
#include "xed-time-plugin.h"
#define XED_TIME_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
XED_TYPE_TIME_PLUGIN, \
XedTimePluginPrivate))
#define MENU_PATH "/MenuBar/EditMenu/EditOps_4"
/* GSettings keys */
@ -162,8 +166,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTimePlugin,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
peas_gtk_configurable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedTimePlugin))
peas_gtk_configurable_iface_init))
static void time_cb (GtkAction *action,
XedTimePlugin *plugin);
@ -185,7 +188,7 @@ xed_time_plugin_init (XedTimePlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedTimePlugin initializing");
plugin->priv = xed_time_plugin_get_instance_private (plugin);
plugin->priv = XED_TIME_PLUGIN_GET_PRIVATE (plugin);
plugin->priv->settings = g_settings_new (TIME_SCHEMA);
}
@ -1031,6 +1034,8 @@ xed_time_plugin_class_init (XedTimePluginClass *klass)
object_class->get_property = xed_time_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (object_class, sizeof (XedTimePluginPrivate));
}
static void

View File

@ -6,3 +6,4 @@ _Description=Removes trailing spaces from lines before saving.
Icon=gtk-cut
Authors=Marty Mills <daggerbot@gmail.com>
Copyright=Copyright © 2015 Marty Mills
Website=http://www.mate-desktop.org

View File

@ -24,8 +24,19 @@
#include "xed-trail-save-plugin.h"
#define XED_TRAIL_SAVE_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
XED_TYPE_TRAIL_SAVE_PLUGIN, \
XedTrailSavePluginPrivate))
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTrailSavePlugin,
xed_trail_save_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init))
struct _XedTrailSavePluginPrivate
{
XedWindow *window;
@ -37,14 +48,6 @@ enum
PROP_WINDOW
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTrailSavePlugin,
xed_trail_save_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedTrailSavePlugin))
static void
strip_trailing_spaces (GtkTextBuffer *text_buffer)
{
@ -123,15 +126,10 @@ strip_trailing_spaces (GtkTextBuffer *text_buffer)
}
}
/* Strip trailing lines */
if (empty_lines_start != -1)
/* Strip trailing lines (except for one) */
if (empty_lines_start != -1 && empty_lines_start != (line_count - 1))
{
gtk_text_buffer_get_iter_at_line (text_buffer, &strip_start, empty_lines_start);
// if there's an implicit trailing newline, then we'll end up with 2 trailing lines instead of 1, so lets
// remove an extra one in that case
if (gtk_source_buffer_get_implicit_trailing_newline (GTK_SOURCE_BUFFER (text_buffer))) {
gtk_text_iter_backward_char (&strip_start); // move to the end of the previous line
}
gtk_text_buffer_get_end_iter (text_buffer, &strip_end);
gtk_text_buffer_delete (text_buffer, &strip_start, &strip_end);
}
@ -232,7 +230,7 @@ xed_trail_save_plugin_init (XedTrailSavePlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedTrailSavePlugin initializing");
plugin->priv = xed_trail_save_plugin_get_instance_private (plugin);
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin, XED_TYPE_TRAIL_SAVE_PLUGIN, XedTrailSavePluginPrivate);
}
static void
@ -295,6 +293,8 @@ xed_trail_save_plugin_class_init (XedTrailSavePluginClass *klass)
object_class->get_property = xed_trail_save_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (object_class, sizeof (XedTrailSavePluginPrivate));
}
static void

View File

@ -29,4 +29,5 @@ Name[zh_CN]=单词补全
Description=Predicts the rest of the word after a few characters have been typed.
Authors=Jesse van den Kieboom <jesse@gnome.org>\nIgnacio Casal Quinteiro <icq@gnome.org>\nMickael Albertus <mickael.albertus@gmail.com>
Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
Website=https://github.com/linuxmint/xed
Version=@VERSION@

View File

@ -5,4 +5,5 @@ _Name=Word Completion
_Description=Predicts the rest of the word after a few characters have been typed.
Authors=Jesse van den Kieboom <jesse@gnome.org>\nIgnacio Casal Quinteiro <icq@gnome.org>\nMickael Albertus <mickael.albertus@gmail.com>
Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
Website=https://github.com/linuxmint/xed
Version=@VERSION@

View File

@ -45,12 +45,23 @@ static void xed_window_activatable_iface_init (XedWindowActivatableInterface *if
static void xed_view_activatable_iface_init (XedViewActivatableInterface *iface);
static void peas_gtk_configurable_iface_init (PeasGtkConfigurableInterface *iface);
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedWordCompletionPlugin,
xed_wordcompletion_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_VIEW_ACTIVATABLE,
xed_view_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
peas_gtk_configurable_iface_init))
struct _XedWordCompletionPluginPrivate
{
GtkWidget *window;
XedView *view;
GtkSourceCompletionProvider *provider;
GSettings *settings;
GSettings *settings;
};
enum
@ -72,24 +83,14 @@ struct _WordCompletionConfigureWidget
GSettings *settings;
};
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedWordCompletionPlugin,
xed_wordcompletion_plugin,
PEAS_TYPE_EXTENSION_BASE,
0,
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
xed_window_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_VIEW_ACTIVATABLE,
xed_view_activatable_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
peas_gtk_configurable_iface_init)
G_ADD_PRIVATE_DYNAMIC (XedWordCompletionPlugin))
static void
xed_wordcompletion_plugin_init (XedWordCompletionPlugin *plugin)
{
xed_debug_message (DEBUG_PLUGINS, "XedWordCompletionPlugin initializing");
plugin->priv = xed_wordcompletion_plugin_get_instance_private (plugin);
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin,
XED_TYPE_WORDCOMPLETION_PLUGIN,
XedWordCompletionPluginPrivate);
plugin->priv->settings = g_settings_new (WORDCOMPLETION_SETTINGS_BASE);
}
@ -135,9 +136,9 @@ xed_wordcompletion_plugin_dispose (GObject *object)
static void
xed_wordcompletion_plugin_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
XedWordCompletionPlugin *plugin = XED_WORDCOMPLETION_PLUGIN (object);
@ -216,16 +217,16 @@ create_provider (void)
settings = g_settings_new (WORDCOMPLETION_SETTINGS_BASE);
g_settings_bind (settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
provider, "minimum-word-size",
G_SETTINGS_BIND_GET);
provider, "minimum-word-size",
G_SETTINGS_BIND_GET);
update_activation (provider, settings);
g_signal_connect_object (settings,
"changed::" SETTINGS_KEY_INTERACTIVE_COMPLETION,
G_CALLBACK (on_interactive_completion_changed_cb),
provider,
0);
"changed::" SETTINGS_KEY_INTERACTIVE_COMPLETION,
G_CALLBACK (on_interactive_completion_changed_cb),
provider,
0);
g_object_unref (settings);
@ -293,7 +294,8 @@ xed_wordcompletion_view_activate (XedViewActivatable *activatable)
priv->provider = g_object_ref (provider);
gtk_source_completion_add_provider (completion, provider, NULL);
gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider), buf);
gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider),
buf);
}
static void
@ -314,13 +316,14 @@ xed_wordcompletion_view_deactivate (XedViewActivatable *activatable)
priv->provider,
NULL);
gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS (priv->provider), buf);
gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS (priv->provider),
buf);
}
static void
dialog_response_cb (GtkWidget *widget,
gint response,
gpointer data)
dialog_response_cb (GtkWidget *widget,
gint response,
gpointer data)
{
gtk_widget_destroy (widget);
}
@ -356,37 +359,37 @@ get_configure_widget (XedWordCompletionPlugin *plugin)
data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (plugin));
ui_file = g_build_filename (data_dir, "xed-wordcompletion-configure.ui", NULL);
ret = xed_utils_get_ui_objects (ui_file,
NULL,
&error_widget,
"configure_dialog", &widget->dialog,
"spin_button_min_word_size", &widget->min_word_size,
"check_button_interactive_completion", &widget->interactive_completion,
NULL,
&error_widget,
"configure_dialog", &widget->dialog,
"spin_button_min_word_size", &widget->min_word_size,
"check_button_interactive_completion", &widget->interactive_completion,
NULL);
g_free (data_dir);
g_free (ui_file);
if (!ret)
{
return NULL;
}
{
return NULL;
}
gtk_window_set_modal (GTK_WINDOW (widget->dialog), TRUE);
gtk_window_set_modal (GTK_WINDOW (widget->dialog), TRUE);
g_settings_bind (widget->settings, SETTINGS_KEY_INTERACTIVE_COMPLETION,
widget->interactive_completion, "active",
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
widget->interactive_completion, "active",
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
g_settings_bind (widget->settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
widget->min_word_size, "value",
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
widget->min_word_size, "value",
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
g_signal_connect (widget->dialog, "destroy",
g_signal_connect (widget->dialog, "destroy",
G_CALLBACK (configure_widget_destroyed), widget);
gtk_widget_show (GTK_WIDGET (widget->dialog));
g_signal_connect (widget->dialog, "response",
G_CALLBACK (dialog_response_cb), widget);
G_CALLBACK (dialog_response_cb), widget);
return widget;
}
@ -414,6 +417,8 @@ xed_wordcompletion_plugin_class_init (XedWordCompletionPluginClass *klass)
g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_object_class_override_property (object_class, PROP_VIEW, "view");
g_type_class_add_private (klass, sizeof (XedWordCompletionPluginPrivate));
}
static void

View File

@ -103,7 +103,6 @@ ur
vi
wa
xh
zgh
zh_CN
zh_HK
zh_TW

View File

@ -1,6 +1,7 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
[encoding: UTF-8]
[type: gettext/gsettings]data/org.x.editor.gschema.xml.in
data/xed.appdata.xml.in
data/xed.desktop.in.in
xed/xed-app-activatable.c
@ -77,8 +78,6 @@ plugins/filebrowser/xed-file-browser-store.c
plugins/filebrowser/xed-file-browser-utils.c
plugins/filebrowser/xed-file-browser-view.c
plugins/filebrowser/xed-file-browser-widget.c
plugins/joinlines/joinlines.plugin.desktop.in
plugins/joinlines/joinlines/__init__.py
plugins/modelines/modeline-parser.c
plugins/modelines/modelines.plugin.desktop.in
plugins/modelines/xed-modeline-plugin.c

1117
po/ab.po

File diff suppressed because it is too large Load Diff

1463
po/af.po

File diff suppressed because it is too large Load Diff

1154
po/am.po

File diff suppressed because it is too large Load Diff

1170
po/ar.po

File diff suppressed because it is too large Load Diff

1129
po/as.po

File diff suppressed because it is too large Load Diff

1143
po/ast.po

File diff suppressed because it is too large Load Diff

1125
po/az.po

File diff suppressed because it is too large Load Diff

2127
po/be.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1174
po/bg.po

File diff suppressed because it is too large Load Diff

1131
po/bn.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1119
po/br.po

File diff suppressed because it is too large Load Diff

1129
po/bs.po

File diff suppressed because it is too large Load Diff

1194
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1133
po/crh.po

File diff suppressed because it is too large Load Diff

1174
po/cs.po

File diff suppressed because it is too large Load Diff

1183
po/cy.po

File diff suppressed because it is too large Load Diff

1176
po/da.po

File diff suppressed because it is too large Load Diff

1201
po/de.po

File diff suppressed because it is too large Load Diff

1136
po/dz.po

File diff suppressed because it is too large Load Diff

1207
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1175
po/eo.po

File diff suppressed because it is too large Load Diff

1970
po/es.po

File diff suppressed because it is too large Load Diff

1168
po/et.po

File diff suppressed because it is too large Load Diff

1195
po/eu.po

File diff suppressed because it is too large Load Diff

1127
po/fa.po

File diff suppressed because it is too large Load Diff

1178
po/fi.po

File diff suppressed because it is too large Load Diff

1206
po/fr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1117
po/ga.po

File diff suppressed because it is too large Load Diff

1139
po/gl.po

File diff suppressed because it is too large Load Diff

1127
po/gu.po

File diff suppressed because it is too large Load Diff

1838
po/he.po

File diff suppressed because it is too large Load Diff

1478
po/hi.po

File diff suppressed because it is too large Load Diff

1182
po/hr.po

File diff suppressed because it is too large Load Diff

1184
po/hu.po

File diff suppressed because it is too large Load Diff

1117
po/hy.po

File diff suppressed because it is too large Load Diff

1207
po/ia.po

File diff suppressed because it is too large Load Diff

1438
po/id.po

File diff suppressed because it is too large Load Diff

1117
po/ie.po

File diff suppressed because it is too large Load Diff

1168
po/is.po

File diff suppressed because it is too large Load Diff

1202
po/it.po

File diff suppressed because it is too large Load Diff

1158
po/ja.po

File diff suppressed because it is too large Load Diff

1117
po/ka.po

File diff suppressed because it is too large Load Diff

1203
po/kab.po

File diff suppressed because it is too large Load Diff

1119
po/kk.po

File diff suppressed because it is too large Load Diff

1132
po/kn.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More