zim-wiki team mailing list archive
-
zim-wiki team
-
Mailing list archive
-
Message #02827
Re: Modifying custom tool to handle selected text
Dev post with a lot of code and a patch at the end.
> Bug during "Tools > Custom Tools"
> If the tool entry as no comment, it fails…
I did not debug the issue above.
I joined a patch that make the base works.
Note the change: buffer.insert_at_cursor(''.join(output))
The fact is, that data is not piped to stdin it is… in the argument %t
So the custom tool become:
#!/bin/bash
echo "$1" | tee -a ~/tmp/zim-custom.log | cat -n
Which works.
The bbcode quote custom tool:
#!/bin/bash
echo -n "[quote]$1[/quote]"
An extra newline is inserted:
Some text to quote become:
^^^^
Some [quote]text[/quote]
to quote become:
echo -n doesn't add extra new line.
>>> import subprocess
>>> subprocess.check_output(['zim-stdin', "test it"])
'[quote]test it[/quote]'
It's somewhere else.
I stop here.
Sylvain.
=== modified file 'zim/gui/__init__.py'
--- zim/gui/__init__.py 2014-02-04 19:51:26 +0000
+++ zim/gui/__init__.py 2014-06-18 20:29:36 +0000
@@ -2178,10 +2178,23 @@
manager = CustomToolManager()
tool = manager.get_tool(action.get_name())
logger.info('Execute custom tool %s', tool.name)
+ logger.info('myCT %s', tool['Desktop Entry'].get('X-Zim-ExecTool'))
args = (self.notebook, self.page, self.mainwindow.pageview)
try:
+ logger.info('custom tool %s', tool['Desktop
Entry'].get('X-Zim-ReplaceSelection'))
if tool.isreadonly:
tool.spawn(args)
+ elif tool['Desktop Entry'].get('X-Zim-ReplaceSelection',
False):
+ output = tool.pipe(args)
+ pageview = self.mainwindow.pageview # XXX
+ buffer = pageview.view.get_buffer() # XXX
+ if buffer.get_has_selection():
+ start, end = buffer.get_selection_bounds()
+ with buffer.user_action:
+ buffer.delete(start, end)
+ buffer.insert_at_cursor(''.join(output))
+ else:
+ pass # error here ??
else:
tool.run(args)
self.reload_page()
@@ -2191,6 +2204,7 @@
except Exception, error:
ErrorDialog(self, error).run()
+
def show_help(self, page=None):
'''Menu action to show the user manual. Will start a new zim
instance showing the notebook with the manual.
=== modified file 'zim/gui/applications.py'
--- zim/gui/applications.py 2014-04-08 18:41:06 +0000
+++ zim/gui/applications.py 2014-06-18 20:24:46 +0000
@@ -978,6 +978,7 @@
('X-Zim-ReadOnly', Boolean(True)),
('X-Zim-ShowInToolBar', Boolean(False)),
('X-Zim-ShowInContextMenu', Choice(None, ('Text', 'Page'))),
+ ('X-Zim-ReplaceSelection', Boolean(False)),
)
def isvalid(self):
Follow ups
References