Compare commits

..

69 Commits

Author SHA1 Message Date
Clement Lefebvre 8c695048ff 3.0.2 2021-06-25 15:21:37 +01:00
Clement Lefebvre d82f0664da l10n: Update translations 2021-06-25 15:14:08 +01:00
Clement Lefebvre 3adcd8e10b 3.0.1 2021-06-10 11:04:41 +01:00
Clement Lefebvre 960d56b379 l10n: Update translations 2021-06-10 11:04:15 +01:00
Clement Lefebvre 215f6c7791 3.0.0 2021-06-01 12:56:50 +01:00
Clement Lefebvre c8e8994410 l10n: Update POT 2021-06-01 12:56:11 +01:00
Justin Schiff 1cd2ed7b4c Use CLAMP macro instead 2021-05-15 13:52:45 -04:00
Justin Schiff a48dab6ef5 Uses strtol instead of atoi so that we can properly handle errors.
This now handles overflow and underflow correctly, by parsing the string
and then clamping the value between INT_MIN and INT_MAX. `atoi` was
giving us garbage values when the buffer overflowed.

Fixes #408
2021-05-15 13:52:45 -04:00
okaestne 5b769045f0 Fix crashes when no documents (tabs) are open
Two crashes are possible:

1. Fixes #450 (toggle overview map without any open tabs/docs)
2. Pressing ESC (e.g. to close searchbar) without any tabs open
2021-04-30 13:24:57 -04:00
Michael Webster 8ff2d3fd74 i18n: Don't translate gsettings strings.
It's not useful for anything, and only adds more work for
translators.
2021-04-30 12:20:18 -04:00
okaestne 5b7c1d936e Implement #225: Options to render whitespace
Add preferences to enable displaying whitespace (tabs, spaces, nbsp and newlines).
Options allow to choose locations (leading, inside text, trailing) of whitespace to display and to disable rendering of newline chars.
2021-04-30 12:19:18 -04:00
Soapux 423f214a70 Fix permissions 2021-02-22 11:18:08 -05:00
Talkashie c469e1345c Fix various typos in index.docbook 2021-02-19 10:09:33 -05:00
Clement Lefebvre ef0979b2d3 2.8.4 2021-01-02 17:36:34 +00:00
Clement Lefebvre fc80c90843 l10n: Update translations 2021-01-02 17:27:18 +00:00
Eli Schwartz 3940e04530 fixup! cleanup: remove code dropped in commit 67892da099
Also drop function that is now unused once the previous unused code got
removed.
2020-12-14 08:39:04 -05:00
Clement Lefebvre 83597ba864 2.8.3 2020-12-14 08:11:51 +00:00
Clement Lefebvre 7d8538b748 Packaging: Add missing dependency on gir1.2-gtksource-4 2020-12-14 08:11:10 +00:00
Clement Lefebvre 4429a455f4 2.8.2 2020-12-10 12:19:44 +00:00
Clement Lefebvre 2229d826c4 l10n: Update translations 2020-12-10 12:14:08 +00:00
Clement Lefebvre ba9bcf2244 2.8.1 2020-12-08 10:11:29 +00:00
Clement Lefebvre 10e9a275c8 Remove links in plugin about dialogs
They're all maintained as part of the Xed project, which link is already
present in the main help about dialog.
2020-12-02 16:41:09 +00:00
Clement Lefebvre 18d3ebf460 bracketcompletion: Enable plugin by default
That's typically a feature casual users would't want by default but programmers
would.

Since it only affects programming languages (not plain text), enable it by default.
2020-12-02 16:41:09 +00:00
Eli Schwartz 76b2fcba7b remove never-used variable added in commit 9e805380d4 2020-12-01 20:15:26 -05:00
Eli Schwartz d41e63a340 cleanup: remove code dropped in commit 67892da099 2020-12-01 20:15:26 -05:00
Clement Lefebvre c7455d5f23 2.8.0 2020-11-30 11:26:10 +00:00
Clement Lefebvre 6168aee699 l10n: Update POT 2020-11-30 11:25:01 +00:00
Michael Webster f4be97d79d meson.build: bump xapp version. 2020-11-11 23:33:37 -05:00
Michael Webster 9e805380d4 Add XAppFavorites support to the file menu.
This adds a Favorites submenu, and it moves the recent list into
a submenu.

See:
c9c885a841
2020-11-11 23:21:51 -05:00
Hrutvik Suthar 15b607ddc0 auto bracket complete feature
- added bracket-complete dir in plugins
  - gtksourceview min depedency change to 4.0.3
2020-10-05 11:57:39 -04:00
JosephMcc 4dcfaada50 xed-completion-plugin.c: Clean up the code style 2020-09-22 09:45:42 -04:00
JosephMcc 3bf1b62a34 xed-highlight-mode-dialog/selector: Clean up code style
Fix a few indentation errors and convert tabs to spaces.
2020-09-22 09:45:17 -04:00
JosephMcc 33d035aac7 textsize plugin: Zoom text regardless of selection
Currently when zooming text with something selected, only the selected
text is zoomed. There doesn't seem to be any real use for this behavior.
Instead just zoom the full document regardless of selection. This also
simplifies the plugin a good bit.

Closes: https://github.com/linuxmint/xed/issues/327
2020-09-22 09:44:23 -04:00
JosephMcc a71e7eea3a xed-highlight-mode-selector.c: Fix a couple of missing casts 2020-09-07 10:26:08 -04:00
JosephMcc 7e6a888e1d Clean up remaining deprecated preprocessor commands 2020-09-07 10:25:40 -04:00
JosephMcc 36b625be6a plugins: Clean up deprecated preprcessor commands 2020-09-07 10:25:25 -04:00
JosephMcc 5a3fc97c6a Add a new window desktop action
This allows you to open a new window with the GWL "New Window" entry

Fixes: https://github.com/linuxmint/xed/issues/393
2020-09-07 09:04:33 -04:00
JosephMcc 3ca66d6fb6 Port to Gtksourceview4
This allows us access to some newer fixes since the older version is no
longer being worked on.

Fixes: https://github.com/linuxmint/xed/issues/395
2020-08-27 17:59:37 +02:00
Clement Lefebvre 22ddcc04e0 2.6.2 2020-06-24 12:45:16 +01:00
Clement Lefebvre 63f9ac4baf CI: Update targets 2020-06-24 12:44:49 +01:00
Clement Lefebvre 68ef65bedb 2.6.1 2020-06-24 12:06:49 +01:00
Clement Lefebvre f9cd2e8048 l10n: Update translations 2020-06-24 12:06:29 +01:00
Clement Lefebvre 19bb11e8a0 l10n: Update POT 2020-06-21 12:41:10 +01:00
NikoKrause 8f28449081
l10n: add missing strings for new plugin joinlines (#385) 2020-06-21 12:40:38 +01:00
Clement Lefebvre 8bb308de4f 2.6.0 2020-05-11 13:59:29 +01:00
Clement Lefebvre 0cb924853d l10n: Update translations 2020-05-11 13:55:00 +01:00
Clement Lefebvre 14896668d3 l10n: Update POT 2020-05-11 12:54:57 +01:00
JosephMcc 8b0f775e7e taglist: Use a symbolic icon in the notebook sidebar 2020-04-29 12:47:29 -04:00
icarter09 385d32dbfc Added JoinLines plugin. Removed logic to split lines. Moved Join Line shortcut from Layout to Editing section. 2020-04-23 10:37:40 -04:00
Isaac Carter 2bb61b9190 Update README.md 2020-04-20 18:33:30 -04:00
icarter09 c8a0150fd4 Added screen captures to README. Changed README to README.md and added markdown. Updated README with plugins and debian build instructions. 2020-04-20 12:58:35 -04:00
icarter09 6f58fd2f2c Added wait entry to man page. Removed logic that cause wait to open extra tab. 2020-04-10 09:50:19 -04:00
icarter09 b6483090b6 Changed shortcut window to be non-model. 2020-04-06 11:54:19 -04:00
icarter09 5e9e34ed60 Cleaned up broken links. 2020-04-06 11:41:48 -04:00
Isaac Carter 6bbcc343dd
Fixed memory issue found by valgrind (#366) 2020-04-06 07:34:48 -07:00
Clement Lefebvre 1d39305c1c Packaging: Remove python dependency 2020-04-02 18:42:30 +01:00
icarter09 45bcb345e8 Added logic to check if the focus need to be set. Squashed formatting commits. 2020-03-11 12:27:33 -04:00
icarter09 d1833f6591 Added logic to support using replace all across documents. 2020-03-11 11:54:44 -04:00
icarter09 8a98e18511 Created new section for the Word Wrap shortcut. Increased height attribute to fit new section so a new page is not created. 2020-03-11 11:46:50 -04:00
icarter09 c3b8a73695 Removed link that was not working. 2020-03-11 11:04:41 -04:00
icarter09 7302b14f78 Removed override_dh_auto_test so tests are not ran by default when building with dpkg. 2020-02-06 13:28:45 -05:00
icarter09 5a16a65643 Created initial test dir. Created File menu test.
Added test for Help menu.

Created test case for Toolbar.

Updated meson build for test. Removed unnecessary file.
2020-02-06 13:28:45 -05:00
Stephen Collins d5a48be670 Add settings widget to the prefs dialog for the implicit newline setting
The setting was already available in the schema and implemented in xed itself, but wasn't exposed in the preferences dialog.
2020-01-07 23:22:32 -05:00
Clement Lefebvre bfa1fa0e00 l10n: Update translations 2020-01-06 11:40:30 +00:00
Stephen Collins c19752ec31 Add .gitignore file 2019-12-16 11:44:14 -05:00
Michael Webster 4eaddc1cb7 xed-tab-label.c: Apply tab tooltip to the box containing the tab's
label and icon, regression from 808e77b052.
2019-12-16 11:34:39 -05:00
Stephen Collins 808e77b052 xed-tab-label.c: remove unused event box preventing scroll events
It doesn't seem to do anything except intercept scroll events, which are used to switch tabs.
2019-12-16 11:03:04 -05:00
Stephen Collins 5e2c6f0369 Trailsave plugin: remove second trailing line
The intention was that there should be one empty line left at the end of the file, but the GtkSourceBuffer adds it's own empty line if the implicit_trailing_newline property is true (currently the default behavior in xed), which means we usually end up with 2 lines instead of one. This would change the behavior so that we always end up with no more than one line at the end of the file.
2019-12-16 10:51:39 -05:00
Stephen Collins 55e386beef Disable the comments action when not supported to avoid confusion 2019-12-16 10:37:30 -05:00
207 changed files with 48487 additions and 84867 deletions

View File

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

1
.gitignore vendored
View File

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

43
README
View File

@ -1,43 +0,0 @@
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

74
README.md Normal file
View File

@ -0,0 +1,74 @@
# 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/"> <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.x.editor.plugins" path="/org/x/editor/plugins/">
<key name="active-plugins" type="as"> <key name="active-plugins" type="as">
<default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time' ]</default> <default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time', 'bracketcompletion' ]</default>
<summary>Active plugins</summary> <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> <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> </key>

View File

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

View File

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

167
debian/changelog vendored
View File

@ -1,8 +1,169 @@
xed (2.4.3) tricia; urgency=medium xed (3.0.2) uma; urgency=medium
[ okaestne ] [backported by wolfpackmars2] * 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 * Implement #225: Options to render whitespace
* backported from xed-3
[ 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
xed (2.4.2) tricia; urgency=medium xed (2.4.2) tricia; urgency=medium

10
debian/control vendored
View File

@ -10,9 +10,9 @@ Build-Depends: debhelper (>= 9),
libglib2.0-dev, libglib2.0-dev,
libgspell-1-dev, libgspell-1-dev,
libgtk-3-dev, libgtk-3-dev,
libgtksourceview-3.0-dev, libgtksourceview-4-dev,
libpeas-dev, libpeas-dev,
libxapp-dev, libxapp-dev (>= 1.9),
libsm-dev, libsm-dev,
libx11-dev, libx11-dev,
libxml2-dev, libxml2-dev,
@ -32,7 +32,8 @@ Depends: iso-codes,
${shlibs:Depends}, ${shlibs:Depends},
python3, python3,
python3-gi, python3-gi,
xapps-common, gir1.2-gtksource-4,
xapps-common (>= 1.9.0),
zenity zenity
XB-Python-Version: ${python:Versions} XB-Python-Version: ${python:Versions}
Description: Text editor Description: Text editor
@ -53,8 +54,7 @@ Description: Text editor
Package: xed-common Package: xed-common
Architecture: all Architecture: all
Depends: python, Depends: ${misc:Depends},
${misc:Depends},
Description: Text editor (common files) Description: Text editor (common files)
Xed is a text editor which supports most standard editor features, Xed is a text editor which supports most standard editor features,
extending this basic functionality with other features not usually 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/ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: xed (old name: mate-text-editor) Upstream-Name: xed
Upstream-Contact: Stefano Karapetsas <stefano@karapetsas.com> Upstream-Contact: Linux Mint <root@linuxmint.com>
Source: http://git.mate-desktop.org/xed/ Source: http://github.com/linuxmint/xed/
Files: plugins/docinfo/xed-docinfo-plugin.c Files: plugins/docinfo/xed-docinfo-plugin.c
plugins/docinfo/xed-docinfo-plugin.h plugins/docinfo/xed-docinfo-plugin.h

3
debian/rules vendored
View File

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

View File

@ -292,7 +292,7 @@
</listitem> </listitem>
</orderedlist> </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>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 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 not all FTP servers may correctly work with saving remote files.</para>
</sect2> </sect2>
<!-- ============= Working with tabs ======================== --> <!-- ============= Working with tabs ======================== -->
@ -350,7 +350,7 @@
</listitem> </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><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>
<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><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> </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><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> </listitem>
@ -1191,7 +1191,7 @@
</variablelist> </variablelist>
</sect2> </sect2>
<sect2 id="xed-prefs-plugins"> <sect2 id="xed-prefs-plugins" xreflabel="Plugins Preferences">
<title>Plugins Preferences</title> <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> <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,45 +1245,42 @@
<title>Working with Plugins</title> <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>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>
<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>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 <link linkend="xed-prefs-plugins">Plugins Preferences</link>.</para> <para>To enable and disable plugins, or see which plugins are currently enabled, use the <xref linkend="xed-prefs-plugins"/>.</para>
<para>The following plugins come built-in with <application>&app;</application>:</para> <para>The following plugins come built-in with <application>&app;</application>:</para>
<!-- Not yet documented:
File browser
-->
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para><link linkend="xed-change-case-plugin"><application>Change Case</application></link> allows you to change the case of the selected text.</para> <para><xref linkend="xed-change-case-plugin"/> allows you to change the case of the selected text.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><application><link linkend="xed-document-statistics-plugin">Document Statistics</link></application> shows the number of lines, words, and characters in the document. </para> <para><xref linkend="xed-document-statistics-plugin"/> shows the number of lines, words, and characters in the document. </para>
</listitem> </listitem>
<listitem> <listitem>
<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> <para><xref linkend="xed-file-browser-plugin"/> allows you to browse your files and folders in the side pane.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><application><link linkend="xed-indent-lines-plugin">Indent Lines</link></application> adds or removes indentation from the selected lines.</para> <para><xref linkend="xed-indent-lines-plugin"/> adds or removes indentation from the selected lines.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><application><link linkend="xed-insert-date-time-plugin">Insert Date/Time</link></application> adds the current date and time into a document.</para> <para><xref linkend="xed-insert-date-time-plugin"/> adds the current date and time into a document.</para>
</listitem> </listitem>
<listitem> <listitem>
<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> <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>
</listitem> </listitem>
<listitem> <listitem>
<para><application><link linkend="xed-sort-plugin">Sort</link></application> arranges selected lines of text into alphabetical order.</para> <para><xref linkend="xed-sort-plugin"/> arranges selected lines of text into alphabetical order.</para>
</listitem> </listitem>
<listitem> <listitem>
<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> <para><xref linkend="xed-spell-checker-plugin"/> corrects the spelling in the selected text, or marks errors automatically in the document.</para>
</listitem> </listitem>
<listitem> <listitem>
<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> <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>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</sect2> </sect2>
<sect2 id="xed-change-case-plugin"> <sect2 id="xed-change-case-plugin" xreflabel="Change Case">
<title>Change Case Plugin</title> <title>Change Case Plugin</title>
<para>The <application>Change Case</application> plugin changes the case of the selected text.</para> <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> <para>The following items are added to the <guimenu>Edit</guimenu> menu when the <application>Change Case</application> plugin is enabled:</para>
@ -1334,7 +1331,7 @@
</sect2> </sect2>
<sect2 id="xed-document-statistics-plugin"> <sect2 id="xed-document-statistics-plugin" xreflabel="Document Statistics">
<title>Document Statistics Plugin</title> <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> <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> <orderedlist>
@ -1364,7 +1361,7 @@
</orderedlist> </orderedlist>
</sect2> </sect2>
<sect2 id="xed-file-browser-plugin"> <sect2 id="xed-file-browser-plugin" xreflabel="File Browser">
<title>File Browser Plugin</title> <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>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> <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>
@ -1385,7 +1382,7 @@
</sect3> </sect3>
</sect2> </sect2>
<sect2 id="xed-indent-lines-plugin"> <sect2 id="xed-indent-lines-plugin" xreflabel="Indent Lines">
<title>Indent Lines Plugin</title> <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>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> <para>To indent or unindent text, perform the following steps:</para>
@ -1403,11 +1400,11 @@
</itemizedlist> </itemizedlist>
</listitem> </listitem>
</orderedlist> </orderedlist>
<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> <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>
</sect2> </sect2>
<sect2 id="xed-insert-date-time-plugin"> <sect2 id="xed-insert-date-time-plugin" xreflabel="Insert Date/Time">
<title>Insert Date/Time Plugin</title> <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> <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> <orderedlist>
@ -1455,7 +1452,7 @@
</sect3> </sect3>
</sect2> </sect2>
<sect2 id="xed-modelines-plugin"> <sect2 id="xed-modelines-plugin" xreflabel="Modelines">
<title>Modelines Plugin</title> <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>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> <para>Preferences set using modelines take precedence over the ones specified in the preference dialog.</para>
@ -1483,21 +1480,21 @@
<sect3 id="xed-modelines-plugin-emacs"> <sect3 id="xed-modelines-plugin-emacs">
<title>Emacs Modelines</title> <title>Emacs Modelines</title>
<para>The first two lines of a document are scanned for <application>Emacs</application> modelines.</para> <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.delorie.com/gnu/docs/emacs/emacs_486.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.gnu.org/software/emacs/manual/html_node/emacs/index.html">GNU Emacs Manual</ulink>.</para>
</sect3> </sect3>
<sect3 id="xed-modelines-plugin-kate"> <sect3 id="xed-modelines-plugin-kate">
<title>Kate Modelines</title> <title>Kate Modelines</title>
<para>The first and last ten lines a document are scanned for <application>Kate</application> modelines.</para> <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/article/katepart_modelines">Kate website</ulink>.</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>
</sect3> </sect3>
<sect3 id="xed-modelines-plugin-vim"> <sect3 id="xed-modelines-plugin-vim">
<title>Vim Modelines</title> <title>Vim Modelines</title>
<para>The first and last three lines a document are scanned for <application>Vim</application> modelines.</para> <para>The first and last three lines of 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> <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> </sect3>
</sect2> </sect2>
<sect2 id="xed-sort-plugin"> <sect2 id="xed-sort-plugin" xreflabel="Sort">
<title>Sort Plugin</title> <title>Sort Plugin</title>
<para>The <application>Sort</application> plugin arranges selected lines of text into alphabetical order.</para> <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>. <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>.
@ -1534,7 +1531,7 @@
</orderedlist> </orderedlist>
</sect2> </sect2>
<sect2 id="xed-spell-checker-plugin"> <sect2 id="xed-spell-checker-plugin" xreflabel="Spell Checker">
<title>Spell Checker Plugin</title> <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> <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> <orderedlist>
@ -1589,7 +1586,7 @@
</orderedlist> </orderedlist>
</sect2> </sect2>
<sect2 id="xed-tag-list-plugin"> <sect2 id="xed-tag-list-plugin" xreflabel="Tag List">
<title>Tag List Plugin</title> <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>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> <para>To use the Tag List plugin, perform the following steps:</para>

View File

@ -1,4 +1,4 @@
project('xed', 'c', version : '2.4.3') project('xed', 'c', version : '3.0.2')
gnome = import('gnome') gnome = import('gnome')
i18n = import('i18n') i18n = import('i18n')
@ -8,7 +8,8 @@ version = meson.project_version()
xed_conf = configuration_data() xed_conf = configuration_data()
xed_conf.set_quoted('VERSION', version) xed_conf.set_quoted('VERSION', version)
xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed') #xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed')
xed_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
# directories # directories
prefix = get_option('prefix') prefix = get_option('prefix')
@ -28,12 +29,12 @@ glib = dependency('glib-2.0', version: '>= 2.40.0')
gthread = dependency('gthread-2.0', version: '>= 2.13.0') gthread = dependency('gthread-2.0', version: '>= 2.13.0')
gio = dependency('gio-2.0', version: '>= 2.40.0') gio = dependency('gio-2.0', version: '>= 2.40.0')
gtk = dependency('gtk+-3.0', version: '>= 3.19.3') gtk = dependency('gtk+-3.0', version: '>= 3.19.3')
gtksourceview = dependency('gtksourceview-3.0', version: '>= 3.19.0') gtksourceview = dependency('gtksourceview-4', version: '>= 4.0.3')
libpeas = dependency('libpeas-1.0', version: '>= 1.12.0') libpeas = dependency('libpeas-1.0', version: '>= 1.12.0')
libpeas_gtk = dependency('libpeas-gtk-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: '>= 0.6.7', required: false) gir_dep = dependency('gobject-introspection-1.0', version: '>= 1.42.0', required: false)
gmodule = dependency('gmodule-2.0') gmodule = dependency('gmodule-2.0')
xapp = dependency('xapp', version: '>= 1.4.0') xapp = dependency('xapp', version: '>= 1.9.0')
X11 = dependency('x11') X11 = dependency('x11')
pango = dependency('pango') pango = dependency('pango')
@ -94,6 +95,15 @@ if get_option('docs')
subdir('docs/reference') subdir('docs/reference')
endif 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('prefix = @0@'.format(prefix))
message('bindir = @0@'.format(bindir)) message('bindir = @0@'.format(bindir))
message('datadir = @0@'.format(datadir)) message('datadir = @0@'.format(datadir))

View File

@ -0,0 +1,105 @@
[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

@ -0,0 +1,318 @@
# -*- 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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,10 @@
[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

@ -0,0 +1,91 @@
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

@ -0,0 +1,13 @@
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,8 +1,10 @@
pluginsdatadir = join_paths(datadir, 'xed', 'plugins') pluginsdatadir = join_paths(datadir, 'xed', 'plugins')
pluginslibdir = join_paths(libdir, 'xed', 'plugins') pluginslibdir = join_paths(libdir, 'xed', 'plugins')
subdir('bracket-complete')
subdir('docinfo') subdir('docinfo')
subdir('filebrowser') subdir('filebrowser')
subdir('joinlines')
subdir('modelines') subdir('modelines')
subdir('open-uri-context-menu') subdir('open-uri-context-menu')
subdir('sort') subdir('sort')

View File

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

View File

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

View File

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

View File

@ -6,5 +6,4 @@ _Description=Sorts a document or selected text.
Icon=gtk-sort-ascending 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> 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 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 Builtin=true

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,28 +40,15 @@ class DocumentHelper(Signals):
self._default_font = None self._default_font = None
self._last_font = None self._last_font = None
self._font_tags = {}
def stop(self): def stop(self):
if self._default_font: if self._default_font:
self._view.override_font(self._default_font) self._view.override_font(self._default_font)
self.remove_font_tags()
self.disconnect_signals(self._view) self.disconnect_signals(self._view)
self._view.textsize_document_helper = None 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): def update_default_font(self):
context = self._view.get_style_context() context = self._view.get_style_context()
description = context.get_font(context.get_state()).copy() description = context.get_font(context.get_state()).copy()
@ -69,23 +56,6 @@ class DocumentHelper(Signals):
if not self._last_font or description.hash() != self._last_font.hash(): if not self._last_font or description.hash() != self._last_font.hash():
self._default_font = description 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): def set_font_size(self, amount):
self.update_default_font() self.update_default_font()
@ -93,61 +63,17 @@ class DocumentHelper(Signals):
description = context.get_font(context.get_state()).copy() description = context.get_font(context.get_state()).copy()
buf = self._view.get_buffer() buf = self._view.get_buffer()
bounds = buf.get_selection_bounds()
size = description.get_size() / Pango.SCALE size = description.get_size() / Pango.SCALE
if not bounds: if size >= MAX_FONT_SIZE and amount == 1:
if size >= MAX_FONT_SIZE and amount == 1: return;
return; if size <= MIN_FONT_SIZE and amount == -1:
if size <= MIN_FONT_SIZE and amount == -1: return;
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._view.override_font(description)
self._last_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): def larger_text(self):
self.set_font_size(1) self.set_font_size(1)
@ -159,18 +85,9 @@ class DocumentHelper(Signals):
self.update_default_font() self.update_default_font()
buf = self._view.get_buffer() buf = self._view.get_buffer()
bounds = buf.get_selection_bounds()
if not bounds: self._view.override_font(self._default_font)
self.remove_font_tags() self._last_font = self._default_font
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): def on_scroll_event(self, view, event):
state = event.state & Gtk.accelerator_get_default_mod_mask() state = event.state & Gtk.accelerator_get_default_mod_mask()

View File

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

View File

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

View File

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

View File

@ -24,19 +24,8 @@
#include "xed-trail-save-plugin.h" #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); 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 struct _XedTrailSavePluginPrivate
{ {
XedWindow *window; XedWindow *window;
@ -48,6 +37,14 @@ enum
PROP_WINDOW 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 static void
strip_trailing_spaces (GtkTextBuffer *text_buffer) strip_trailing_spaces (GtkTextBuffer *text_buffer)
{ {
@ -126,10 +123,15 @@ strip_trailing_spaces (GtkTextBuffer *text_buffer)
} }
} }
/* Strip trailing lines (except for one) */ /* Strip trailing lines */
if (empty_lines_start != -1 && empty_lines_start != (line_count - 1)) if (empty_lines_start != -1)
{ {
gtk_text_buffer_get_iter_at_line (text_buffer, &strip_start, empty_lines_start); 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_get_end_iter (text_buffer, &strip_end);
gtk_text_buffer_delete (text_buffer, &strip_start, &strip_end); gtk_text_buffer_delete (text_buffer, &strip_start, &strip_end);
} }
@ -230,7 +232,7 @@ xed_trail_save_plugin_init (XedTrailSavePlugin *plugin)
{ {
xed_debug_message (DEBUG_PLUGINS, "XedTrailSavePlugin initializing"); xed_debug_message (DEBUG_PLUGINS, "XedTrailSavePlugin initializing");
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin, XED_TYPE_TRAIL_SAVE_PLUGIN, XedTrailSavePluginPrivate); plugin->priv = xed_trail_save_plugin_get_instance_private (plugin);
} }
static void static void
@ -293,8 +295,6 @@ xed_trail_save_plugin_class_init (XedTrailSavePluginClass *klass)
object_class->get_property = xed_trail_save_plugin_get_property; object_class->get_property = xed_trail_save_plugin_get_property;
g_object_class_override_property (object_class, PROP_WINDOW, "window"); g_object_class_override_property (object_class, PROP_WINDOW, "window");
g_type_class_add_private (object_class, sizeof (XedTrailSavePluginPrivate));
} }
static void static void

View File

@ -29,5 +29,4 @@ Name[zh_CN]=单词补全
Description=Predicts the rest of the word after a few characters have been typed. 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> 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 Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
Website=https://github.com/linuxmint/xed
Version=@VERSION@ Version=@VERSION@

View File

@ -5,5 +5,4 @@ _Name=Word Completion
_Description=Predicts the rest of the word after a few characters have been typed. _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> 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 Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
Website=https://github.com/linuxmint/xed
Version=@VERSION@ Version=@VERSION@

View File

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

View File

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

View File

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

1117
po/ab.po

File diff suppressed because it is too large Load Diff

1461
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

1176
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

2135
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

1984
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

1868
po/he.po

File diff suppressed because it is too large Load Diff

1484
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

1186
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

1446
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