Compare commits
69 Commits
tricia-bac
...
master
Author | SHA1 | Date |
---|---|---|
Clement Lefebvre | 8c695048ff | |
Clement Lefebvre | d82f0664da | |
Clement Lefebvre | 3adcd8e10b | |
Clement Lefebvre | 960d56b379 | |
Clement Lefebvre | 215f6c7791 | |
Clement Lefebvre | c8e8994410 | |
Justin Schiff | 1cd2ed7b4c | |
Justin Schiff | a48dab6ef5 | |
okaestne | 5b769045f0 | |
Michael Webster | 8ff2d3fd74 | |
okaestne | 5b7c1d936e | |
Soapux | 423f214a70 | |
Talkashie | c469e1345c | |
Clement Lefebvre | ef0979b2d3 | |
Clement Lefebvre | fc80c90843 | |
Eli Schwartz | 3940e04530 | |
Clement Lefebvre | 83597ba864 | |
Clement Lefebvre | 7d8538b748 | |
Clement Lefebvre | 4429a455f4 | |
Clement Lefebvre | 2229d826c4 | |
Clement Lefebvre | ba9bcf2244 | |
Clement Lefebvre | 10e9a275c8 | |
Clement Lefebvre | 18d3ebf460 | |
Eli Schwartz | 76b2fcba7b | |
Eli Schwartz | d41e63a340 | |
Clement Lefebvre | c7455d5f23 | |
Clement Lefebvre | 6168aee699 | |
Michael Webster | f4be97d79d | |
Michael Webster | 9e805380d4 | |
Hrutvik Suthar | 15b607ddc0 | |
JosephMcc | 4dcfaada50 | |
JosephMcc | 3bf1b62a34 | |
JosephMcc | 33d035aac7 | |
JosephMcc | a71e7eea3a | |
JosephMcc | 7e6a888e1d | |
JosephMcc | 36b625be6a | |
JosephMcc | 5a3fc97c6a | |
JosephMcc | 3ca66d6fb6 | |
Clement Lefebvre | 22ddcc04e0 | |
Clement Lefebvre | 63f9ac4baf | |
Clement Lefebvre | 68ef65bedb | |
Clement Lefebvre | f9cd2e8048 | |
Clement Lefebvre | 19bb11e8a0 | |
NikoKrause | 8f28449081 | |
Clement Lefebvre | 8bb308de4f | |
Clement Lefebvre | 0cb924853d | |
Clement Lefebvre | 14896668d3 | |
JosephMcc | 8b0f775e7e | |
icarter09 | 385d32dbfc | |
Isaac Carter | 2bb61b9190 | |
icarter09 | c8a0150fd4 | |
icarter09 | 6f58fd2f2c | |
icarter09 | b6483090b6 | |
icarter09 | 5e9e34ed60 | |
Isaac Carter | 6bbcc343dd | |
Clement Lefebvre | 1d39305c1c | |
icarter09 | 45bcb345e8 | |
icarter09 | d1833f6591 | |
icarter09 | 8a98e18511 | |
icarter09 | c3b8a73695 | |
icarter09 | 7302b14f78 | |
icarter09 | 5a16a65643 | |
Stephen Collins | d5a48be670 | |
Clement Lefebvre | bfa1fa0e00 | |
Stephen Collins | c19752ec31 | |
Michael Webster | 4eaddc1cb7 | |
Stephen Collins | 808e77b052 | |
Stephen Collins | 5e2c6f0369 | |
Stephen Collins | 55e386beef |
|
@ -46,19 +46,19 @@ shared: &shared
|
|||
fi
|
||||
|
||||
jobs:
|
||||
"mint19":
|
||||
"mint20":
|
||||
<<: *shared
|
||||
docker:
|
||||
- image: linuxmintd/mint19-amd64
|
||||
- image: linuxmintd/mint20-amd64
|
||||
|
||||
"lmde3":
|
||||
"lmde4":
|
||||
<<: *shared
|
||||
docker:
|
||||
- image: linuxmintd/lmde3-amd64
|
||||
- image: linuxmintd/lmde4-amd64
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
build:
|
||||
jobs:
|
||||
- "mint19"
|
||||
- "lmde3"
|
||||
- "mint20"
|
||||
- "lmde4"
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# Specify filepatterns you want git to ignore.
|
||||
debian/tmp/
|
||||
debian/build/
|
||||
debian/.debhelper/
|
||||
debian/xed/
|
||||
debian/xed-common/
|
||||
debian/xed-dbg/
|
||||
debian/xed-dev/
|
||||
debian/xed-doc/
|
||||
debian/files
|
||||
debian/*.log
|
||||
debian/*.substvars
|
41
README
41
README
|
@ -1,41 +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 . build # run the `configure' script
|
||||
% ninja -v -C build # build xed
|
||||
[ Become root if necessary ]
|
||||
% ninja install -v -C build # install xed
|
|
@ -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.
|
|
@ -167,6 +167,36 @@
|
|||
<description>Whether xed will ensure that documents always end with a trailing newline.</description>
|
||||
</key>
|
||||
|
||||
<key name="draw-whitespace" type="b">
|
||||
<default>false</default>
|
||||
<summary>Draw whitespace</summary>
|
||||
<description>Whether xed should render whitespace</description>
|
||||
</key>
|
||||
|
||||
<key name="draw-whitespace-leading" type="b">
|
||||
<default>false</default>
|
||||
<summary>Draw leading whitespace</summary>
|
||||
<description>Whether xed should render leading whitespace</description>
|
||||
</key>
|
||||
|
||||
<key name="draw-whitespace-inside" type="b">
|
||||
<default>false</default>
|
||||
<summary>Draw whitespace within text</summary>
|
||||
<description>Whether xed should render whitespace between words and characters</description>
|
||||
</key>
|
||||
|
||||
<key name="draw-whitespace-trailing" type="b">
|
||||
<default>false</default>
|
||||
<summary>Draw trailing whitespace</summary>
|
||||
<description>Whether xed should render trailing whitespace</description>
|
||||
</key>
|
||||
|
||||
<key name="draw-whitespace-newline" type="b">
|
||||
<default>false</default>
|
||||
<summary>Draw newline characters</summary>
|
||||
<description>Whether xed should render newline characters</description>
|
||||
</key>
|
||||
|
||||
</schema>
|
||||
|
||||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.x.editor.preferences.ui" path="/org/x/editor/preferences/ui/">
|
||||
|
@ -338,7 +368,7 @@
|
|||
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.x.editor.plugins" path="/org/x/editor/plugins/">
|
||||
|
||||
<key name="active-plugins" type="as">
|
||||
<default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time' ]</default>
|
||||
<default>[ 'docinfo', 'modelines', 'filebrowser', 'spell', 'time', 'bracketcompletion' ]</default>
|
||||
<summary>Active plugins</summary>
|
||||
<description>List of active plugins. It contains the "Location" of the active plugins. See the .xed-plugin file for obtaining the "Location" of a given plugin.</description>
|
||||
</key>
|
||||
|
|
|
@ -42,6 +42,9 @@ Output version information and exit
|
|||
\fB\-?, \-h, \-\-help\fR
|
||||
Print standard command line options.
|
||||
.TP
|
||||
\fB\-w, \-\-wait\fR
|
||||
Open files and block the xed process.
|
||||
.TP
|
||||
\fB\-\-help\-all\fR
|
||||
Print all command line options.
|
||||
.P
|
||||
|
|
|
@ -10,3 +10,8 @@ Icon=accessories-text-editor
|
|||
Categories=GTK;Utility;TextEditor;
|
||||
Keywords=text;editor;tabs;highlighting;code;multiple;files;pluggable;notepad;
|
||||
X-MATE-DocPath=xed/xed.xml
|
||||
Actions=new-window;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=New Window
|
||||
Exec=xed --new-window %U
|
||||
|
|
|
@ -1,3 +1,170 @@
|
|||
xed (3.0.2) uma; urgency=medium
|
||||
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Fri, 25 Jun 2021 15:15:39 +0100
|
||||
|
||||
xed (3.0.1) uma; urgency=medium
|
||||
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Thu, 10 Jun 2021 11:04:22 +0100
|
||||
|
||||
xed (3.0.0) uma; urgency=medium
|
||||
|
||||
[ Talkashie ]
|
||||
* Fix various typos in index.docbook
|
||||
|
||||
[ Soapux ]
|
||||
* Fix permissions
|
||||
|
||||
[ okaestne ]
|
||||
* Implement #225: Options to render whitespace
|
||||
|
||||
[ Michael Webster ]
|
||||
* i18n: Don't translate gsettings strings.
|
||||
|
||||
[ okaestne ]
|
||||
* Fix crashes when no documents (tabs) are open
|
||||
|
||||
[ Justin Schiff ]
|
||||
* Uses strtol instead of atoi so that we can properly handle errors.
|
||||
* Use CLAMP macro instead
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update POT
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Tue, 01 Jun 2021 12:56:22 +0100
|
||||
|
||||
xed (2.8.4) ulyssa; urgency=medium
|
||||
|
||||
[ Eli Schwartz ]
|
||||
* fixup! cleanup: remove code dropped in commit 67892da099357e24b3fd3c31fa758947b1dfc47a
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Sat, 02 Jan 2021 17:33:30 +0000
|
||||
|
||||
xed (2.8.3) ulyssa; urgency=medium
|
||||
|
||||
* Packaging: Add missing dependency on gir1.2-gtksource-4
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Mon, 14 Dec 2020 08:11:29 +0000
|
||||
|
||||
xed (2.8.2) ulyssa; urgency=medium
|
||||
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Thu, 10 Dec 2020 12:14:34 +0000
|
||||
|
||||
xed (2.8.1) ulyssa; urgency=medium
|
||||
|
||||
[ Eli Schwartz ]
|
||||
* cleanup: remove code dropped in commit 67892da099357e24b3fd3c31fa758947b1dfc47a
|
||||
* remove never-used variable added in commit 9e805380d4aa6338ca1b85d06b5dbf60e9fb0cbe
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* bracketcompletion: Enable plugin by default
|
||||
* Remove links in plugin about dialogs
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Tue, 08 Dec 2020 10:11:12 +0000
|
||||
|
||||
xed (2.8.0) ulyssa; urgency=medium
|
||||
|
||||
[ JosephMcc ]
|
||||
* Port to Gtksourceview4
|
||||
* Add a new window desktop action
|
||||
* plugins: Clean up deprecated preprcessor commands
|
||||
* Clean up remaining deprecated preprocessor commands
|
||||
* xed-highlight-mode-selector.c: Fix a couple of missing casts
|
||||
* textsize plugin: Zoom text regardless of selection
|
||||
* xed-highlight-mode-dialog/selector: Clean up code style
|
||||
* xed-completion-plugin.c: Clean up the code style
|
||||
|
||||
[ Hrutvik Suthar ]
|
||||
* auto bracket complete feature - added bracket-complete dir in plugins - gtksourceview min depedency change to 4.0.3
|
||||
|
||||
[ Michael Webster ]
|
||||
* Add XAppFavorites support to the file menu.
|
||||
* meson.build: bump xapp version.
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update POT
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Mon, 30 Nov 2020 11:25:34 +0000
|
||||
|
||||
xed (2.6.2) ulyana; urgency=medium
|
||||
|
||||
* CI: Update targets
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Wed, 24 Jun 2020 12:44:58 +0100
|
||||
|
||||
xed (2.6.1) ulyana; urgency=medium
|
||||
|
||||
[ NikoKrause ]
|
||||
* l10n: add missing strings for new plugin joinlines (#385)
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update POT
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Wed, 24 Jun 2020 12:06:37 +0100
|
||||
|
||||
xed (2.6.0) ulyana; urgency=medium
|
||||
|
||||
[ Stephen Collins ]
|
||||
* Disable the comments action when not supported to avoid confusion
|
||||
* Trailsave plugin: remove second trailing line
|
||||
* xed-tab-label.c: remove unused event box preventing scroll events
|
||||
|
||||
[ Michael Webster ]
|
||||
* xed-tab-label.c: Apply tab tooltip to the box containing the tab's label and icon, regression from 808e77b052322b8f.
|
||||
|
||||
[ Stephen Collins ]
|
||||
* Add .gitignore file
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update translations
|
||||
|
||||
[ Stephen Collins ]
|
||||
* Add settings widget to the prefs dialog for the implicit newline setting
|
||||
|
||||
[ icarter09 ]
|
||||
* Created initial test dir. Created File menu test.
|
||||
* Removed override_dh_auto_test so tests are not ran by default when building with dpkg.
|
||||
* Removed link that was not working.
|
||||
* Created new section for the Word Wrap shortcut. Increased height attribute to fit new section so a new page is not created.
|
||||
* Added logic to support using replace all across documents.
|
||||
* Added logic to check if the focus need to be set. Squashed formatting commits.
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* Packaging: Remove python dependency
|
||||
|
||||
[ Isaac Carter ]
|
||||
* Fixed memory issue found by valgrind (#366)
|
||||
|
||||
[ icarter09 ]
|
||||
* Cleaned up broken links.
|
||||
* Changed shortcut window to be non-model.
|
||||
* Added wait entry to man page. Removed logic that cause wait to open extra tab.
|
||||
* Added screen captures to README. Changed README to README.md and added markdown. Updated README with plugins and debian build instructions.
|
||||
|
||||
[ Isaac Carter ]
|
||||
* Update README.md
|
||||
|
||||
[ icarter09 ]
|
||||
* Added JoinLines plugin. Removed logic to split lines. Moved Join Line shortcut from Layout to Editing section.
|
||||
|
||||
[ JosephMcc ]
|
||||
* taglist: Use a symbolic icon in the notebook sidebar
|
||||
|
||||
[ Clement Lefebvre ]
|
||||
* l10n: Update POT
|
||||
* l10n: Update translations
|
||||
|
||||
-- Clement Lefebvre <root@linuxmint.com> Mon, 11 May 2020 13:58:58 +0100
|
||||
|
||||
xed (2.4.2) tricia; urgency=medium
|
||||
|
||||
* l10n: Update translations
|
||||
|
|
|
@ -10,9 +10,9 @@ Build-Depends: debhelper (>= 9),
|
|||
libglib2.0-dev,
|
||||
libgspell-1-dev,
|
||||
libgtk-3-dev,
|
||||
libgtksourceview-3.0-dev,
|
||||
libgtksourceview-4-dev,
|
||||
libpeas-dev,
|
||||
libxapp-dev,
|
||||
libxapp-dev (>= 1.9),
|
||||
libsm-dev,
|
||||
libx11-dev,
|
||||
libxml2-dev,
|
||||
|
@ -32,7 +32,8 @@ Depends: iso-codes,
|
|||
${shlibs:Depends},
|
||||
python3,
|
||||
python3-gi,
|
||||
xapps-common,
|
||||
gir1.2-gtksource-4,
|
||||
xapps-common (>= 1.9.0),
|
||||
zenity
|
||||
XB-Python-Version: ${python:Versions}
|
||||
Description: Text editor
|
||||
|
@ -53,8 +54,7 @@ Description: Text editor
|
|||
|
||||
Package: xed-common
|
||||
Architecture: all
|
||||
Depends: python,
|
||||
${misc:Depends},
|
||||
Depends: ${misc:Depends},
|
||||
Description: Text editor (common files)
|
||||
Xed is a text editor which supports most standard editor features,
|
||||
extending this basic functionality with other features not usually
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: xed (old name: mate-text-editor)
|
||||
Upstream-Contact: Stefano Karapetsas <stefano@karapetsas.com>
|
||||
Source: http://git.mate-desktop.org/xed/
|
||||
Upstream-Name: xed
|
||||
Upstream-Contact: Linux Mint <root@linuxmint.com>
|
||||
Source: http://github.com/linuxmint/xed/
|
||||
|
||||
Files: plugins/docinfo/xed-docinfo-plugin.c
|
||||
plugins/docinfo/xed-docinfo-plugin.h
|
||||
|
|
|
@ -15,9 +15,6 @@ override_dh_auto_configure:
|
|||
override_dh_installchangelogs:
|
||||
dh_installchangelogs NEWS
|
||||
|
||||
override_dh_auto_test:
|
||||
ninja -C debian/build test
|
||||
|
||||
override_dh_strip:
|
||||
dh_strip --dbg-package=xed-dbg
|
||||
|
||||
|
|
|
@ -292,7 +292,7 @@
|
|||
</listitem>
|
||||
</orderedlist>
|
||||
<para>Valid types of <replaceable>URI</replaceable> include <literal>http:</literal>, <literal>ftp:</literal>, <literal>file:</literal>, and all of the methods supported by <literal>gvfs</literal>.</para>
|
||||
<para>Files from some types of URI are opened as read-only, and any changes you make must be saved to a different location. HTTP only allows files to be read. Files opened from FTP are read-only because 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>
|
||||
|
||||
<!-- ============= Working with tabs ======================== -->
|
||||
|
@ -350,7 +350,7 @@
|
|||
</listitem>
|
||||
<listitem><para>Type the string that you want to find in the <guilabel>Search for</guilabel> field. You can include special characters such as a new line or tab: see <xref linkend="xed-find-escapes"/>.</para>
|
||||
</listitem>
|
||||
<listitem><para>Click <guibutton>Find</guibutton> to search the file for the first occurrence of the string after your current cursor position. If <application>&app;</application> finds the string, the application selects 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><para>To find the next occurrence of the string, click <guibutton>Find</guibutton> or choose <menuchoice> <guimenu>Search</guimenu> <guimenuitem>Find Next</guimenuitem> </menuchoice>. To find the previous occurrence of the text, choose <menuchoice> <guimenu>Search</guimenu> <guimenuitem>Find Previous</guimenuitem> </menuchoice>.</para>
|
||||
</listitem>
|
||||
|
@ -1191,7 +1191,7 @@
|
|||
</variablelist>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-prefs-plugins">
|
||||
<sect2 id="xed-prefs-plugins" xreflabel="Plugins Preferences">
|
||||
<title>Plugins Preferences</title>
|
||||
<para>Plugins add extra features to <application>&app;</application>. For more information on plugins and how to use the built-in plugins, see <xref linkend="xed-plugins-overview"/>.</para>
|
||||
|
||||
|
@ -1245,45 +1245,42 @@
|
|||
<title>Working with Plugins</title>
|
||||
<para>You can add extra features to <application>&app;</application> by enabling <firstterm>plugins</firstterm>. A plugin is a supplementary program that enhances the functionality of an application. Plugins add new items to the <application>&app;</application> menus for the new features they provide.
|
||||
</para>
|
||||
<para>Several plugins come built-in with <application>&app;</application>, and you can install more. The <ulink type="http" url="http://live.gnome.org/Xed/Plugins">xed website</ulink> lists third-party plugins.</para>
|
||||
<para>To enable and disable plugins, or see which plugins are currently enabled, use the <link linkend="xed-prefs-plugins">Plugins Preferences</link>.</para>
|
||||
<para>Several plugins come built-in with <application>&app;</application>, and you can install more.</para>
|
||||
<para>To enable and disable plugins, or see which plugins are currently enabled, use the <xref linkend="xed-prefs-plugins"/>.</para>
|
||||
<para>The following plugins come built-in with <application>&app;</application>:</para>
|
||||
<!-- Not yet documented:
|
||||
File browser
|
||||
-->
|
||||
<itemizedlist>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</itemizedlist>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-change-case-plugin">
|
||||
<sect2 id="xed-change-case-plugin" xreflabel="Change Case">
|
||||
<title>Change Case Plugin</title>
|
||||
<para>The <application>Change Case</application> plugin changes the case of the selected text.</para>
|
||||
<para>The following items are added to the <guimenu>Edit</guimenu> menu when the <application>Change Case</application> plugin is enabled:</para>
|
||||
|
@ -1334,7 +1331,7 @@
|
|||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-document-statistics-plugin">
|
||||
<sect2 id="xed-document-statistics-plugin" xreflabel="Document Statistics">
|
||||
<title>Document Statistics Plugin</title>
|
||||
<para>The <application>Document Statistics</application> plugin counts the number of lines, words, characters with spaces, characters without spaces, and bytes in the current file. The plugin displays the results in a <guilabel>Document Statistics</guilabel> dialog. To use the Document Statistics plugin, perform the following steps:</para>
|
||||
<orderedlist>
|
||||
|
@ -1364,7 +1361,7 @@
|
|||
</orderedlist>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-file-browser-plugin">
|
||||
<sect2 id="xed-file-browser-plugin" xreflabel="File Browser">
|
||||
<title>File Browser Plugin</title>
|
||||
<para>The <application>File Browser</application> Plugin shows your files and folders in the side pane, allowing you to quickly open files.</para>
|
||||
<para>To view the File Browser, choose <menuchoice><guimenu>View</guimenu> <guimenuitem>Side Pane</guimenuitem> </menuchoice> and then click on the tab showing the File Browser icon at the bottom of the side pane.</para>
|
||||
|
@ -1385,7 +1382,7 @@
|
|||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-indent-lines-plugin">
|
||||
<sect2 id="xed-indent-lines-plugin" xreflabel="Indent Lines">
|
||||
<title>Indent Lines Plugin</title>
|
||||
<para>The <application>Indent Lines</application> plugin adds or removes space from the beginning of lines of text.</para>
|
||||
<para>To indent or unindent text, perform the following steps:</para>
|
||||
|
@ -1403,11 +1400,11 @@
|
|||
</itemizedlist>
|
||||
</listitem>
|
||||
</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 id="xed-insert-date-time-plugin">
|
||||
<sect2 id="xed-insert-date-time-plugin" xreflabel="Insert Date/Time">
|
||||
<title>Insert Date/Time Plugin</title>
|
||||
<para>The <application>Insert Date/Time</application> plugin inserts the current date and time into a document. To use the Insert Date/Time plugin, perform the following steps:</para>
|
||||
<orderedlist>
|
||||
|
@ -1455,7 +1452,7 @@
|
|||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-modelines-plugin">
|
||||
<sect2 id="xed-modelines-plugin" xreflabel="Modelines">
|
||||
<title>Modelines Plugin</title>
|
||||
<para>The <application>Modelines</application> plugin allows you to set preferences for individual documents. A <firstterm>modeline</firstterm> is a line of text at the start or end of the document with settings that <application>&app;</application> recognises.</para>
|
||||
<para>Preferences set using modelines take precedence over the ones specified in the preference dialog.</para>
|
||||
|
@ -1483,21 +1480,21 @@
|
|||
<sect3 id="xed-modelines-plugin-emacs">
|
||||
<title>Emacs Modelines</title>
|
||||
<para>The first two lines of a document are scanned for <application>Emacs</application> modelines.</para>
|
||||
<para>The <application>Emacs</application> options for tab-width, indent-offset, indent-tabs-mode and autowrap are supported. For more information, see the <ulink type="http" url="http://www.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 id="xed-modelines-plugin-kate">
|
||||
<title>Kate Modelines</title>
|
||||
<para>The first and last ten lines a document are scanned for <application>Kate</application> modelines.</para>
|
||||
<para>The <application>Kate</application> options for tab-width, indent-width, space-indent, word-wrap and word-wrap-column are supported. For more information, see the <ulink type="http" url="http://www.kate-editor.org/article/katepart_modelines">Kate website</ulink>.</para>
|
||||
<para>The first and last ten lines of a document are scanned for <application>Kate</application> modelines.</para>
|
||||
<para>The <application>Kate</application> options for tab-width, indent-width, space-indent, word-wrap and word-wrap-column are supported. For more information, see the <ulink type="http" url="http://www.kate-editor.org">Kate website</ulink>.</para>
|
||||
</sect3>
|
||||
<sect3 id="xed-modelines-plugin-vim">
|
||||
<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>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-sort-plugin">
|
||||
<sect2 id="xed-sort-plugin" xreflabel="Sort">
|
||||
<title>Sort Plugin</title>
|
||||
<para>The <application>Sort</application> plugin arranges selected lines of text into alphabetical order.</para>
|
||||
<caution><para>You cannot undo the Sort operation, so you should save the file before performing the sort. To revert to the saved version of the file after the sort operation, choose <menuchoice> <guimenu>File</guimenu> <guimenuitem>Revert</guimenuitem> </menuchoice>.
|
||||
|
@ -1534,7 +1531,7 @@
|
|||
</orderedlist>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-spell-checker-plugin">
|
||||
<sect2 id="xed-spell-checker-plugin" xreflabel="Spell Checker">
|
||||
<title>Spell Checker Plugin</title>
|
||||
<para>The <application>Spell Checker</application> plugin checks the spelling in the selected text. You can configure <application>&app;</application> to check the spelling automatically, or you can check the spelling manually, in the specified language. The language setting, and the autocheck spelling properties, apply per document. To use the Spell checker plugin, perform the following steps:</para>
|
||||
<orderedlist>
|
||||
|
@ -1589,7 +1586,7 @@
|
|||
</orderedlist>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="xed-tag-list-plugin">
|
||||
<sect2 id="xed-tag-list-plugin" xreflabel="Tag List">
|
||||
<title>Tag List Plugin</title>
|
||||
<para>The <application>Tag List</application> plugin allows you to insert common tags from a list in the side pane.</para>
|
||||
<para>To use the Tag List plugin, perform the following steps:</para>
|
||||
|
|
20
meson.build
20
meson.build
|
@ -1,4 +1,4 @@
|
|||
project('xed', 'c', version : '2.4.2')
|
||||
project('xed', 'c', version : '3.0.2')
|
||||
|
||||
gnome = import('gnome')
|
||||
i18n = import('i18n')
|
||||
|
@ -8,7 +8,8 @@ version = meson.project_version()
|
|||
|
||||
xed_conf = configuration_data()
|
||||
xed_conf.set_quoted('VERSION', version)
|
||||
xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed')
|
||||
#xed_conf.set_quoted('GETTEXT_PACKAGE', 'xed')
|
||||
xed_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
|
||||
|
||||
# directories
|
||||
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')
|
||||
gio = dependency('gio-2.0', version: '>= 2.40.0')
|
||||
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_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')
|
||||
xapp = dependency('xapp', version: '>= 1.4.0')
|
||||
xapp = dependency('xapp', version: '>= 1.9.0')
|
||||
X11 = dependency('x11')
|
||||
pango = dependency('pango')
|
||||
|
||||
|
@ -94,6 +95,15 @@ if get_option('docs')
|
|||
subdir('docs/reference')
|
||||
endif
|
||||
|
||||
# The tests use an option that doesn't exist in meson before 0.46.
|
||||
# Since they aren't strictly necessary, we'll just skip them for earlier versions
|
||||
# rather than making 0.46 a hard requirement. This condition can be removed once we
|
||||
# no longer need to worry about building on 0.45 or earlier
|
||||
meson_version_parts = meson.version().split('.')
|
||||
if meson_version_parts[0].to_int() > 0 or meson_version_parts[1].to_int() >= 46
|
||||
subdir('test')
|
||||
endif
|
||||
|
||||
message('prefix = @0@'.format(prefix))
|
||||
message('bindir = @0@'.format(bindir))
|
||||
message('datadir = @0@'.format(datadir))
|
||||
|
|
|
@ -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
|
|
@ -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:
|
|
@ -0,0 +1,4 @@
|
|||
install_subdir(
|
||||
'bracket-complete',
|
||||
install_dir: pluginslibdir
|
||||
)
|
|
@ -69,7 +69,8 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedDocInfoPlugin,
|
|||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
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
|
||||
calculate_info (XedDocument *doc,
|
||||
|
@ -385,7 +386,7 @@ static void
|
|||
xed_docinfo_plugin_init (XedDocInfoPlugin *plugin)
|
||||
{
|
||||
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
|
||||
|
@ -531,8 +532,6 @@ xed_docinfo_plugin_class_init (XedDocInfoPluginClass *klass)
|
|||
object_class->get_property = xed_docinfo_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (klass, sizeof (XedDocInfoPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -7,4 +7,3 @@ _Description=Easy file access from the side pane
|
|||
Icon=system-file-manager
|
||||
Authors=Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
Copyright=Copyright © 2006 Jesse van den Kieboom
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -27,10 +27,6 @@
|
|||
#include "xed-file-bookmarks-store.h"
|
||||
#include "xed-file-browser-utils.h"
|
||||
|
||||
#define XED_FILE_BOOKMARKS_STORE_GET_PRIVATE(object)( \
|
||||
G_TYPE_INSTANCE_GET_PRIVATE((object), XED_TYPE_FILE_BOOKMARKS_STORE, \
|
||||
XedFileBookmarksStorePrivate))
|
||||
|
||||
struct _XedFileBookmarksStorePrivate
|
||||
{
|
||||
GVolumeMonitor * volume_monitor;
|
||||
|
@ -55,7 +51,11 @@ static gboolean find_with_flags (GtkTreeModel * model,
|
|||
guint flags,
|
||||
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
|
||||
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->finalize = xed_file_bookmarks_store_finalize;
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedFileBookmarksStorePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -105,7 +103,7 @@ xed_file_bookmarks_store_class_finalize (XedFileBookmarksStoreClass *klass)
|
|||
static void
|
||||
xed_file_bookmarks_store_init (XedFileBookmarksStore * obj)
|
||||
{
|
||||
obj->priv = XED_FILE_BOOKMARKS_STORE_GET_PRIVATE (obj);
|
||||
obj->priv = xed_file_bookmarks_store_get_instance_private (obj);
|
||||
}
|
||||
|
||||
/* Private */
|
||||
|
|
|
@ -42,8 +42,6 @@
|
|||
#define FILE_BROWSER_SCHEMA "org.x.editor.plugins.filebrowser"
|
||||
#define FILE_BROWSER_ONLOAD_SCHEMA "org.x.editor.plugins.filebrowser.on-load"
|
||||
|
||||
#define XED_FILE_BROWSER_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_FILE_BROWSER_PLUGIN, XedFileBrowserPluginPrivate))
|
||||
|
||||
struct _XedFileBrowserPluginPrivate
|
||||
{
|
||||
XedWindow *window;
|
||||
|
@ -106,8 +104,8 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserPlugin,
|
|||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init) \
|
||||
\
|
||||
xed_window_activatable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserPlugin)
|
||||
_xed_file_browser_store_register_type (type_module); \
|
||||
_xed_file_bookmarks_store_register_type (type_module); \
|
||||
_xed_file_browser_view_register_type (type_module); \
|
||||
|
@ -118,7 +116,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserPlugin,
|
|||
static void
|
||||
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
|
||||
|
@ -620,8 +618,6 @@ xed_file_browser_plugin_class_init (XedFileBrowserPluginClass * klass)
|
|||
object_class->get_property = xed_file_browser_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedFileBrowserPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -31,10 +31,6 @@
|
|||
#include "xed-file-browser-error.h"
|
||||
#include "xed-file-browser-utils.h"
|
||||
|
||||
#define XED_FILE_BROWSER_STORE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
|
||||
XED_TYPE_FILE_BROWSER_STORE, \
|
||||
XedFileBrowserStorePrivate))
|
||||
|
||||
#define NODE_IS_DIR(node) (FILE_IS_DIR((node)->flags))
|
||||
#define NODE_IS_HIDDEN(node) (FILE_IS_HIDDEN((node)->flags))
|
||||
#define NODE_IS_TEXT(node) (FILE_IS_TEXT((node)->flags))
|
||||
|
@ -193,14 +189,6 @@ static void next_files_async (GFileEnumerator *enumerator,
|
|||
|
||||
static void delete_files (AsyncData *data);
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserStore, xed_file_browser_store,
|
||||
G_TYPE_OBJECT,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_MODEL,
|
||||
xed_file_browser_store_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_DRAG_SOURCE,
|
||||
xed_file_browser_store_drag_source_init))
|
||||
|
||||
/* Properties */
|
||||
enum {
|
||||
PROP_0,
|
||||
|
@ -224,6 +212,15 @@ enum
|
|||
NUM_SIGNALS
|
||||
};
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedFileBrowserStore, xed_file_browser_store,
|
||||
G_TYPE_OBJECT,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_MODEL,
|
||||
xed_file_browser_store_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (GTK_TYPE_TREE_DRAG_SOURCE,
|
||||
xed_file_browser_store_drag_source_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedFileBrowserStore))
|
||||
|
||||
static guint model_signals[NUM_SIGNALS] = { 0 };
|
||||
|
||||
static void
|
||||
|
@ -418,8 +415,6 @@ xed_file_browser_store_class_init (XedFileBrowserStoreClass * klass)
|
|||
g_cclosure_marshal_VOID__OBJECT,
|
||||
G_TYPE_NONE, 1,
|
||||
G_TYPE_FILE);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedFileBrowserStorePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -457,7 +452,7 @@ xed_file_browser_store_drag_source_init (GtkTreeDragSourceIface * iface)
|
|||
static void
|
||||
xed_file_browser_store_init (XedFileBrowserStore * obj)
|
||||
{
|
||||
obj->priv = XED_FILE_BROWSER_STORE_GET_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_NAME] = G_TYPE_STRING;
|
||||
|
|
|
@ -31,10 +31,6 @@
|
|||
#include "xed-file-browser-marshal.h"
|
||||
#include "xed-file-browser-enum-types.h"
|
||||
|
||||
#define XED_FILE_BROWSER_VIEW_GET_PRIVATE(object)( \
|
||||
G_TYPE_INSTANCE_GET_PRIVATE((object), \
|
||||
XED_TYPE_FILE_BROWSER_VIEW, XedFileBrowserViewPrivate))
|
||||
|
||||
struct _XedFileBrowserViewPrivate
|
||||
{
|
||||
GtkTreeViewColumn *column;
|
||||
|
@ -81,7 +77,11 @@ static const GtkTargetEntry drag_source_targets[] = {
|
|||
{ "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,
|
||||
gchar *path,
|
||||
|
@ -824,8 +824,6 @@ xed_file_browser_view_class_init (XedFileBrowserViewClass *klass)
|
|||
bookmark_activated), NULL, NULL,
|
||||
g_cclosure_marshal_VOID__BOXED,
|
||||
G_TYPE_NONE, 1, GTK_TYPE_TREE_ITER);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedFileBrowserViewPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -864,7 +862,7 @@ cell_data_cb (GtkTreeViewColumn *tree_column,
|
|||
static void
|
||||
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 ();
|
||||
|
||||
|
|
|
@ -38,10 +38,6 @@
|
|||
#include "xed-file-browser-marshal.h"
|
||||
#include "xed-file-browser-enum-types.h"
|
||||
|
||||
#define XED_FILE_BROWSER_WIDGET_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
|
||||
XED_TYPE_FILE_BROWSER_WIDGET, \
|
||||
XedFileBrowserWidgetPrivate))
|
||||
|
||||
#define XML_UI_FILE "xed-file-browser-widget-ui.xml"
|
||||
#define LOCATION_DATA_KEY "xed-file-browser-widget-location"
|
||||
|
||||
|
@ -225,7 +221,11 @@ static void on_action_filter_binary (GtkAction *action,
|
|||
static void on_action_bookmark_open (GtkAction *action,
|
||||
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
|
||||
free_name_icon (gpointer data)
|
||||
|
@ -483,8 +483,6 @@ xed_file_browser_widget_class_init (XedFileBrowserWidgetClass *klass)
|
|||
G_TYPE_BOOLEAN,
|
||||
1,
|
||||
G_TYPE_POINTER);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedFileBrowserWidgetPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1173,7 +1171,7 @@ create_filter (XedFileBrowserWidget *obj)
|
|||
static void
|
||||
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,
|
||||
(GEqualFunc)g_file_equal,
|
||||
|
|
|
@ -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
|
|
@ -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()
|
||||
|
|
@ -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,
|
||||
)
|
|
@ -1,8 +1,10 @@
|
|||
pluginsdatadir = join_paths(datadir, 'xed', 'plugins')
|
||||
pluginslibdir = join_paths(libdir, 'xed', 'plugins')
|
||||
|
||||
subdir('bracket-complete')
|
||||
subdir('docinfo')
|
||||
subdir('filebrowser')
|
||||
subdir('joinlines')
|
||||
subdir('modelines')
|
||||
subdir('open-uri-context-menu')
|
||||
subdir('sort')
|
||||
|
|
|
@ -5,4 +5,3 @@ _Name=Modelines
|
|||
_Description=Emacs, Kate and Vim-style modelines support for xed.
|
||||
Authors=Steve Frécinaux <steve@istique.net>
|
||||
Copyright=Copyright © 2005 Steve Frécinaux
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -50,7 +50,8 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedModelinePlugin,
|
|||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
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
|
||||
xed_modeline_plugin_constructed (GObject *object)
|
||||
|
@ -71,9 +72,7 @@ xed_modeline_plugin_init (XedModelinePlugin *plugin)
|
|||
{
|
||||
xed_debug_message (DEBUG_PLUGINS, "XedModelinePlugin initializing");
|
||||
|
||||
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin,
|
||||
XED_TYPE_MODELINE_PLUGIN,
|
||||
XedModelinePluginPrivate);
|
||||
plugin->priv = xed_modeline_plugin_get_instance_private (plugin);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -193,8 +192,6 @@ xed_modeline_plugin_class_init (XedModelinePluginClass *klass)
|
|||
object_class->get_property = xed_modeline_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_VIEW, "view");
|
||||
|
||||
g_type_class_add_private (klass, sizeof (XedModelinePluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -7,5 +7,4 @@ Description=Adds context menu item to open an URI at the pointer position.
|
|||
Icon=gtk-open
|
||||
Authors=Martin Szulecki <opensuse@sukimashita.com>\nJean-Philippe Fleury <contact@jpfleury.net>
|
||||
Copyright=Copyright © 2007-2008 Martin Szulecki\nCopyright © 2011 Jean-Philippe Fleury
|
||||
Website=https://github.com/jpfleury/open-uri-context-menu
|
||||
Builtin=true
|
||||
|
|
|
@ -6,5 +6,4 @@ _Description=Sorts a document or selected text.
|
|||
Icon=gtk-sort-ascending
|
||||
Authors=Carlo Borreo <borreo@softhome.net>;Lee Mallabone <mate@fonicmonkey.net>;Paolo Maggi <paolo.maggi@polito.it>;Jorge Alberto Torres H. <jorge@deadoak.com>
|
||||
Copyright=Copyright © 2001 Carlo Borreo\nCopyright © 2002-2003 Lee Mallabone, Paolo Maggi\nCopyright © 2004-2005 Paolo Maggi
|
||||
Website=http://www.mate-desktop.org
|
||||
Builtin=true
|
||||
|
|
|
@ -33,19 +33,10 @@
|
|||
|
||||
#include "xed-sort-plugin.h"
|
||||
|
||||
#define XED_SORT_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_SORT_PLUGIN, XedSortPluginPrivate))
|
||||
|
||||
#define MENU_PATH "/MenuBar/EditMenu/EditOps_6"
|
||||
|
||||
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedSortPlugin,
|
||||
xed_sort_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init))
|
||||
|
||||
struct _XedSortPluginPrivate
|
||||
{
|
||||
XedWindow *window;
|
||||
|
@ -62,6 +53,14 @@ enum
|
|||
PROP_WINDOW
|
||||
};
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedSortPlugin,
|
||||
xed_sort_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedSortPlugin))
|
||||
|
||||
static void sort_cb (GtkAction *action,
|
||||
XedSortPlugin *plugin);
|
||||
|
||||
|
@ -310,7 +309,7 @@ xed_sort_plugin_init (XedSortPlugin *plugin)
|
|||
{
|
||||
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
|
||||
|
@ -383,8 +382,6 @@ xed_sort_plugin_class_init (XedSortPluginClass *klass)
|
|||
object_class->get_property = xed_sort_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (klass, sizeof (XedSortPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -6,4 +6,3 @@ _Description=Checks the spelling of the current document.
|
|||
Icon=gtk-spell-check
|
||||
Authors=Paolo Maggi <paolo@gnome.org>
|
||||
Copyright=Copyright © 2002-2005 Paolo Maggi
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -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.
|
||||
Authors=Paolo Maggi <paolo.maggi@polito.it>
|
||||
Copyright=Copyright © 2002-2005 Paolo Maggi
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -39,10 +39,6 @@
|
|||
#include "xed-taglist-plugin-panel.h"
|
||||
#include "xed-taglist-plugin-parser.h"
|
||||
|
||||
#define XED_TAGLIST_PLUGIN_PANEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
|
||||
XED_TYPE_TAGLIST_PLUGIN_PANEL, \
|
||||
XedTaglistPluginPanelPrivate))
|
||||
|
||||
enum
|
||||
{
|
||||
COLUMN_TAG_NAME,
|
||||
|
@ -63,7 +59,11 @@ struct _XedTaglistPluginPanelPrivate
|
|||
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
|
||||
{
|
||||
|
@ -114,8 +114,7 @@ xed_taglist_plugin_panel_get_property (GObject *object,
|
|||
switch (prop_id)
|
||||
{
|
||||
case PROP_WINDOW:
|
||||
g_value_set_object (value,
|
||||
XED_TAGLIST_PLUGIN_PANEL_GET_PRIVATE (panel)->window);
|
||||
g_value_set_object (value, panel->priv->window);
|
||||
break;
|
||||
default:
|
||||
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,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
|
||||
g_type_class_add_private (object_class, sizeof(XedTaglistPluginPanelPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -668,7 +665,7 @@ xed_taglist_plugin_panel_init (XedTaglistPluginPanel *panel)
|
|||
|
||||
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;
|
||||
|
||||
gtk_orientable_set_orientation (GTK_ORIENTABLE (panel),
|
||||
|
|
|
@ -37,8 +37,6 @@
|
|||
#include "xed-taglist-plugin-panel.h"
|
||||
#include "xed-taglist-plugin-parser.h"
|
||||
|
||||
#define XED_TAGLIST_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), XED_TYPE_TAGLIST_PLUGIN, XedTaglistPluginPrivate))
|
||||
|
||||
struct _XedTaglistPluginPrivate
|
||||
{
|
||||
XedWindow *window;
|
||||
|
@ -48,26 +46,25 @@ struct _XedTaglistPluginPrivate
|
|||
|
||||
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTaglistPlugin,
|
||||
xed_taglist_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init) \
|
||||
\
|
||||
_xed_taglist_plugin_panel_register_type (type_module); \
|
||||
)
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_WINDOW
|
||||
};
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTaglistPlugin,
|
||||
xed_taglist_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedTaglistPlugin)
|
||||
_xed_taglist_plugin_panel_register_type (type_module))
|
||||
|
||||
static void
|
||||
xed_taglist_plugin_init (XedTaglistPlugin *plugin)
|
||||
{
|
||||
plugin->priv = XED_TAGLIST_PLUGIN_GET_PRIVATE (plugin);
|
||||
plugin->priv = xed_taglist_plugin_get_instance_private (plugin);
|
||||
|
||||
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);
|
||||
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
|
||||
|
@ -192,8 +189,6 @@ xed_taglist_plugin_class_init (XedTaglistPluginClass *klass)
|
|||
object_class->get_property = xed_taglist_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedTaglistPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -7,5 +7,4 @@ _Description=Allow controlling the zoom levels of the text
|
|||
Icon=gnome-mime-text-x-python
|
||||
Authors=Steve Frécinaux <steve@istique.net>;Linux Mint team
|
||||
Copyright=Copyright © 2017 by the authors
|
||||
Website=https://github.com/linuxmint
|
||||
Builtin=true
|
|
@ -40,28 +40,15 @@ class DocumentHelper(Signals):
|
|||
|
||||
self._default_font = None
|
||||
self._last_font = None
|
||||
self._font_tags = {}
|
||||
|
||||
def stop(self):
|
||||
if self._default_font:
|
||||
self._view.override_font(self._default_font)
|
||||
|
||||
self.remove_font_tags()
|
||||
self.disconnect_signals(self._view)
|
||||
|
||||
self._view.textsize_document_helper = None
|
||||
|
||||
def remove_font_tags(self):
|
||||
buf = self._view.get_buffer()
|
||||
table = buf.get_tag_table()
|
||||
|
||||
# Remove all the font tags
|
||||
for size in self._font_tags:
|
||||
tag = self._font_tags[size]
|
||||
table.remove(tag)
|
||||
|
||||
self._font_tags = {}
|
||||
|
||||
def update_default_font(self):
|
||||
context = self._view.get_style_context()
|
||||
description = context.get_font(context.get_state()).copy()
|
||||
|
@ -69,23 +56,6 @@ class DocumentHelper(Signals):
|
|||
if not self._last_font or description.hash() != self._last_font.hash():
|
||||
self._default_font = description
|
||||
|
||||
def get_font_tags(self, start, end):
|
||||
tags = set()
|
||||
|
||||
# Check all the know font tags
|
||||
for size in self._font_tags:
|
||||
tag = self._font_tags[size]
|
||||
|
||||
if start.has_tag(tag):
|
||||
tags.add(tag)
|
||||
else:
|
||||
cp = start.copy()
|
||||
|
||||
if cp.forward_to_tag_toggle(tag) and cp.compare(end) < 0:
|
||||
tags.add(tag)
|
||||
|
||||
return list(tags)
|
||||
|
||||
def set_font_size(self, amount):
|
||||
self.update_default_font()
|
||||
|
||||
|
@ -93,61 +63,17 @@ class DocumentHelper(Signals):
|
|||
description = context.get_font(context.get_state()).copy()
|
||||
|
||||
buf = self._view.get_buffer()
|
||||
bounds = buf.get_selection_bounds()
|
||||
size = description.get_size() / Pango.SCALE
|
||||
|
||||
if not bounds:
|
||||
if size >= MAX_FONT_SIZE and amount == 1:
|
||||
return;
|
||||
if size <= MIN_FONT_SIZE and amount == -1:
|
||||
return;
|
||||
if size >= MAX_FONT_SIZE and amount == 1:
|
||||
return;
|
||||
if size <= MIN_FONT_SIZE and amount == -1:
|
||||
return;
|
||||
|
||||
description.set_size(max(1, (size + amount)) * Pango.SCALE)
|
||||
description.set_size(max(1, (size + amount)) * Pango.SCALE)
|
||||
|
||||
self._view.override_font(description)
|
||||
self._last_font = description
|
||||
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)
|
||||
self._view.override_font(description)
|
||||
self._last_font = description
|
||||
|
||||
def larger_text(self):
|
||||
self.set_font_size(1)
|
||||
|
@ -159,18 +85,9 @@ class DocumentHelper(Signals):
|
|||
self.update_default_font()
|
||||
|
||||
buf = self._view.get_buffer()
|
||||
bounds = buf.get_selection_bounds()
|
||||
|
||||
if not bounds:
|
||||
self.remove_font_tags()
|
||||
|
||||
self._view.override_font(self._default_font)
|
||||
self._last_font = self._default_font
|
||||
else:
|
||||
tags = self.get_font_tags(bounds[0], bounds[1])
|
||||
|
||||
for tag in tags:
|
||||
buf.remove_tag(tag, bounds[0], bounds[1])
|
||||
self._view.override_font(self._default_font)
|
||||
self._last_font = self._default_font
|
||||
|
||||
def on_scroll_event(self, view, event):
|
||||
state = event.state & Gtk.accelerator_get_default_mod_mask()
|
||||
|
|
|
@ -5,4 +5,3 @@ _Name=Insert Date/Time
|
|||
_Description=Inserts current date and time at the cursor position.
|
||||
Authors=Paolo Maggi <paolo.maggi@polito.it>;Lee Mallabone <mate@fonicmonkey.net>
|
||||
Copyright=Copyright © 2002-2005 Paolo Maggi
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -38,10 +38,6 @@
|
|||
|
||||
#include "xed-time-plugin.h"
|
||||
|
||||
#define XED_TIME_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
|
||||
XED_TYPE_TIME_PLUGIN, \
|
||||
XedTimePluginPrivate))
|
||||
|
||||
#define MENU_PATH "/MenuBar/EditMenu/EditOps_4"
|
||||
|
||||
/* GSettings keys */
|
||||
|
@ -166,7 +162,8 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTimePlugin,
|
|||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
|
||||
peas_gtk_configurable_iface_init))
|
||||
peas_gtk_configurable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedTimePlugin))
|
||||
|
||||
static void time_cb (GtkAction *action,
|
||||
XedTimePlugin *plugin);
|
||||
|
@ -188,7 +185,7 @@ xed_time_plugin_init (XedTimePlugin *plugin)
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
@ -1034,8 +1031,6 @@ xed_time_plugin_class_init (XedTimePluginClass *klass)
|
|||
object_class->get_property = xed_time_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedTimePluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -6,4 +6,3 @@ _Description=Removes trailing spaces from lines before saving.
|
|||
Icon=gtk-cut
|
||||
Authors=Marty Mills <daggerbot@gmail.com>
|
||||
Copyright=Copyright © 2015 Marty Mills
|
||||
Website=http://www.mate-desktop.org
|
||||
|
|
|
@ -24,19 +24,8 @@
|
|||
|
||||
#include "xed-trail-save-plugin.h"
|
||||
|
||||
#define XED_TRAIL_SAVE_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
|
||||
XED_TYPE_TRAIL_SAVE_PLUGIN, \
|
||||
XedTrailSavePluginPrivate))
|
||||
|
||||
static void xed_window_activatable_iface_init (XedWindowActivatableInterface *iface);
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTrailSavePlugin,
|
||||
xed_trail_save_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init))
|
||||
|
||||
struct _XedTrailSavePluginPrivate
|
||||
{
|
||||
XedWindow *window;
|
||||
|
@ -48,6 +37,14 @@ enum
|
|||
PROP_WINDOW
|
||||
};
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedTrailSavePlugin,
|
||||
xed_trail_save_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedTrailSavePlugin))
|
||||
|
||||
static void
|
||||
strip_trailing_spaces (GtkTextBuffer *text_buffer)
|
||||
{
|
||||
|
@ -126,10 +123,15 @@ strip_trailing_spaces (GtkTextBuffer *text_buffer)
|
|||
}
|
||||
}
|
||||
|
||||
/* Strip trailing lines (except for one) */
|
||||
if (empty_lines_start != -1 && empty_lines_start != (line_count - 1))
|
||||
/* Strip trailing lines */
|
||||
if (empty_lines_start != -1)
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_line (text_buffer, &strip_start, empty_lines_start);
|
||||
// if there's an implicit trailing newline, then we'll end up with 2 trailing lines instead of 1, so lets
|
||||
// remove an extra one in that case
|
||||
if (gtk_source_buffer_get_implicit_trailing_newline (GTK_SOURCE_BUFFER (text_buffer))) {
|
||||
gtk_text_iter_backward_char (&strip_start); // move to the end of the previous line
|
||||
}
|
||||
gtk_text_buffer_get_end_iter (text_buffer, &strip_end);
|
||||
gtk_text_buffer_delete (text_buffer, &strip_start, &strip_end);
|
||||
}
|
||||
|
@ -230,7 +232,7 @@ xed_trail_save_plugin_init (XedTrailSavePlugin *plugin)
|
|||
{
|
||||
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
|
||||
|
@ -293,8 +295,6 @@ xed_trail_save_plugin_class_init (XedTrailSavePluginClass *klass)
|
|||
object_class->get_property = xed_trail_save_plugin_get_property;
|
||||
|
||||
g_object_class_override_property (object_class, PROP_WINDOW, "window");
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (XedTrailSavePluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -29,5 +29,4 @@ Name[zh_CN]=单词补全
|
|||
Description=Predicts the rest of the word after a few characters have been typed.
|
||||
Authors=Jesse van den Kieboom <jesse@gnome.org>\nIgnacio Casal Quinteiro <icq@gnome.org>\nMickael Albertus <mickael.albertus@gmail.com>
|
||||
Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
|
||||
Website=https://github.com/linuxmint/xed
|
||||
Version=@VERSION@
|
||||
|
|
|
@ -5,5 +5,4 @@ _Name=Word Completion
|
|||
_Description=Predicts the rest of the word after a few characters have been typed.
|
||||
Authors=Jesse van den Kieboom <jesse@gnome.org>\nIgnacio Casal Quinteiro <icq@gnome.org>\nMickael Albertus <mickael.albertus@gmail.com>
|
||||
Copyright=Copyright © 2017 Mickael Albertus\n2009 Jesse van den Kieboom
|
||||
Website=https://github.com/linuxmint/xed
|
||||
Version=@VERSION@
|
||||
|
|
|
@ -45,23 +45,12 @@ static void xed_window_activatable_iface_init (XedWindowActivatableInterface *if
|
|||
static void xed_view_activatable_iface_init (XedViewActivatableInterface *iface);
|
||||
static void peas_gtk_configurable_iface_init (PeasGtkConfigurableInterface *iface);
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedWordCompletionPlugin,
|
||||
xed_wordcompletion_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_VIEW_ACTIVATABLE,
|
||||
xed_view_activatable_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
|
||||
peas_gtk_configurable_iface_init))
|
||||
|
||||
struct _XedWordCompletionPluginPrivate
|
||||
{
|
||||
GtkWidget *window;
|
||||
XedView *view;
|
||||
GtkSourceCompletionProvider *provider;
|
||||
GSettings *settings;
|
||||
GSettings *settings;
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -83,14 +72,24 @@ struct _WordCompletionConfigureWidget
|
|||
GSettings *settings;
|
||||
};
|
||||
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED (XedWordCompletionPlugin,
|
||||
xed_wordcompletion_plugin,
|
||||
PEAS_TYPE_EXTENSION_BASE,
|
||||
0,
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_WINDOW_ACTIVATABLE,
|
||||
xed_window_activatable_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (XED_TYPE_VIEW_ACTIVATABLE,
|
||||
xed_view_activatable_iface_init)
|
||||
G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_GTK_TYPE_CONFIGURABLE,
|
||||
peas_gtk_configurable_iface_init)
|
||||
G_ADD_PRIVATE_DYNAMIC (XedWordCompletionPlugin))
|
||||
|
||||
static void
|
||||
xed_wordcompletion_plugin_init (XedWordCompletionPlugin *plugin)
|
||||
{
|
||||
xed_debug_message (DEBUG_PLUGINS, "XedWordCompletionPlugin initializing");
|
||||
|
||||
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin,
|
||||
XED_TYPE_WORDCOMPLETION_PLUGIN,
|
||||
XedWordCompletionPluginPrivate);
|
||||
plugin->priv = xed_wordcompletion_plugin_get_instance_private (plugin);
|
||||
|
||||
plugin->priv->settings = g_settings_new (WORDCOMPLETION_SETTINGS_BASE);
|
||||
}
|
||||
|
@ -136,9 +135,9 @@ xed_wordcompletion_plugin_dispose (GObject *object)
|
|||
|
||||
static void
|
||||
xed_wordcompletion_plugin_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
XedWordCompletionPlugin *plugin = XED_WORDCOMPLETION_PLUGIN (object);
|
||||
|
||||
|
@ -217,16 +216,16 @@ create_provider (void)
|
|||
settings = g_settings_new (WORDCOMPLETION_SETTINGS_BASE);
|
||||
|
||||
g_settings_bind (settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
|
||||
provider, "minimum-word-size",
|
||||
G_SETTINGS_BIND_GET);
|
||||
provider, "minimum-word-size",
|
||||
G_SETTINGS_BIND_GET);
|
||||
|
||||
update_activation (provider, settings);
|
||||
|
||||
g_signal_connect_object (settings,
|
||||
"changed::" SETTINGS_KEY_INTERACTIVE_COMPLETION,
|
||||
G_CALLBACK (on_interactive_completion_changed_cb),
|
||||
provider,
|
||||
0);
|
||||
"changed::" SETTINGS_KEY_INTERACTIVE_COMPLETION,
|
||||
G_CALLBACK (on_interactive_completion_changed_cb),
|
||||
provider,
|
||||
0);
|
||||
|
||||
g_object_unref (settings);
|
||||
|
||||
|
@ -294,8 +293,7 @@ xed_wordcompletion_view_activate (XedViewActivatable *activatable)
|
|||
priv->provider = g_object_ref (provider);
|
||||
|
||||
gtk_source_completion_add_provider (completion, provider, NULL);
|
||||
gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider),
|
||||
buf);
|
||||
gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider), buf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -316,14 +314,13 @@ xed_wordcompletion_view_deactivate (XedViewActivatable *activatable)
|
|||
priv->provider,
|
||||
NULL);
|
||||
|
||||
gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS (priv->provider),
|
||||
buf);
|
||||
gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS (priv->provider), buf);
|
||||
}
|
||||
|
||||
static void
|
||||
dialog_response_cb (GtkWidget *widget,
|
||||
gint response,
|
||||
gpointer data)
|
||||
dialog_response_cb (GtkWidget *widget,
|
||||
gint response,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_widget_destroy (widget);
|
||||
}
|
||||
|
@ -359,37 +356,37 @@ get_configure_widget (XedWordCompletionPlugin *plugin)
|
|||
data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (plugin));
|
||||
ui_file = g_build_filename (data_dir, "xed-wordcompletion-configure.ui", NULL);
|
||||
ret = xed_utils_get_ui_objects (ui_file,
|
||||
NULL,
|
||||
&error_widget,
|
||||
"configure_dialog", &widget->dialog,
|
||||
"spin_button_min_word_size", &widget->min_word_size,
|
||||
"check_button_interactive_completion", &widget->interactive_completion,
|
||||
NULL,
|
||||
&error_widget,
|
||||
"configure_dialog", &widget->dialog,
|
||||
"spin_button_min_word_size", &widget->min_word_size,
|
||||
"check_button_interactive_completion", &widget->interactive_completion,
|
||||
NULL);
|
||||
|
||||
g_free (data_dir);
|
||||
g_free (ui_file);
|
||||
|
||||
if (!ret)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gtk_window_set_modal (GTK_WINDOW (widget->dialog), TRUE);
|
||||
gtk_window_set_modal (GTK_WINDOW (widget->dialog), TRUE);
|
||||
|
||||
g_settings_bind (widget->settings, SETTINGS_KEY_INTERACTIVE_COMPLETION,
|
||||
widget->interactive_completion, "active",
|
||||
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
|
||||
widget->interactive_completion, "active",
|
||||
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
|
||||
|
||||
g_settings_bind (widget->settings, SETTINGS_KEY_MINIMUM_WORD_SIZE,
|
||||
widget->min_word_size, "value",
|
||||
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
|
||||
widget->min_word_size, "value",
|
||||
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_GET_NO_CHANGES);
|
||||
|
||||
g_signal_connect (widget->dialog, "destroy",
|
||||
g_signal_connect (widget->dialog, "destroy",
|
||||
G_CALLBACK (configure_widget_destroyed), widget);
|
||||
|
||||
gtk_widget_show (GTK_WIDGET (widget->dialog));
|
||||
g_signal_connect (widget->dialog, "response",
|
||||
G_CALLBACK (dialog_response_cb), widget);
|
||||
G_CALLBACK (dialog_response_cb), widget);
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
@ -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_VIEW, "view");
|
||||
|
||||
g_type_class_add_private (klass, sizeof (XedWordCompletionPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -103,6 +103,7 @@ ur
|
|||
vi
|
||||
wa
|
||||
xh
|
||||
zgh
|
||||
zh_CN
|
||||
zh_HK
|
||||
zh_TW
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# List of source files containing translatable strings.
|
||||
# Please keep this file sorted alphabetically.
|
||||
[encoding: UTF-8]
|
||||
[type: gettext/gsettings]data/org.x.editor.gschema.xml.in
|
||||
data/xed.appdata.xml.in
|
||||
data/xed.desktop.in.in
|
||||
xed/xed-app-activatable.c
|
||||
|
@ -78,6 +77,8 @@ plugins/filebrowser/xed-file-browser-store.c
|
|||
plugins/filebrowser/xed-file-browser-utils.c
|
||||
plugins/filebrowser/xed-file-browser-view.c
|
||||
plugins/filebrowser/xed-file-browser-widget.c
|
||||
plugins/joinlines/joinlines.plugin.desktop.in
|
||||
plugins/joinlines/joinlines/__init__.py
|
||||
plugins/modelines/modeline-parser.c
|
||||
plugins/modelines/modelines.plugin.desktop.in
|
||||
plugins/modelines/xed-modeline-plugin.c
|
||||
|
|
1131
po/be@latin.po
1131
po/be@latin.po
File diff suppressed because it is too large
Load Diff
1130
po/bn_IN.po
1130
po/bn_IN.po
File diff suppressed because it is too large
Load Diff
1166
po/ca@valencia.po
1166
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
1125
po/en@shaw.po
1125
po/en@shaw.po
File diff suppressed because it is too large
Load Diff
1133
po/en_AU.po
1133
po/en_AU.po
File diff suppressed because it is too large
Load Diff
1130
po/en_CA.po
1130
po/en_CA.po
File diff suppressed because it is too large
Load Diff
1179
po/en_GB.po
1179
po/en_GB.po
File diff suppressed because it is too large
Load Diff
1153
po/fr_CA.po
1153
po/fr_CA.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
Loading…
Reference in New Issue