Linux程序 - 反向突出显示的文本

时间:2012-10-13 19:19:29

标签: linux flash ubuntu driver prezi

我想开发一个程序,它将在我的Ubuntu 12.04的后台运行,所以当在任何正在运行的程序的某些文本框中选择某些文本并按下某些键组合时(如ctrl-F12),文本将是切割,翻转和粘贴在同一个地方。

我知道有些程序在Windows上执行。

在一些不支持从右到左语言(如阿拉伯语和希伯来语)的程序和网页中非常有用 - 字母从左到右打印,因此文本会反转。

更具体地说,我在Prezi中需要它在嵌入式Flash编辑器中存在这种错误(我考虑过编写一个chrome-plugin,但我不认为这样的插件可以操作flash中的选定文本对象)。

你知道这样的节目是否存在吗?我应该在哪里开始阅读以开发具有这种功能的程序(在其他程序中操作选定的文本)?

由于

2 个答案:

答案 0 :(得分:0)

我的部分解决方案 - 一个反转剪贴板文本的python脚本:

#!/usr/bin/env python
from gi.repository import Gtk, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
# if you want to take the selected text without copying, set primary to:
# Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY)
# (doesn't always work)
primary = clipboard 

def run():
    text = primary.wait_for_text()
    if not isinstance(text, str):
        return
    reversed_text = u''.join(reversed(text.decode('utf-8')))
    clipboard.set_text(reversed_text, -1)
    clipboard.store()

if __name__ == '__main__':
    run()

然后定义一个键盘快捷键来运行脚本(我使用alt-Insert),然后通过将其复制到剪贴板来反向选择,调用脚本并将其粘贴回来(ctrl-Insert,alt-Insert,shift-Insert )。

我仍在寻找更好的解决方案,因此我可以使用单个键盘快捷键而不会覆盖剪贴板。

答案 1 :(得分:0)

下面是Emacs的输入方法,它将反向键入文本:

(defun reverse-input-method (key)
  (if buffer-read-only
      (list key)
    (if (setq new key)
        (list new ?\2) ;; ?\2 == backwards char
      (list key ?\2))))

(defun reverse-input-activate (&optional arg)
  "Activate reverse-im input method.
With arg, activate reverse-im input method if and only if arg is
positive.

While this input method is active, the variable
`input-method-function' is bound to the function
`reverse-input-method'."
  (if (and arg
           (< (prefix-numeric-value arg) 0))
      (unwind-protect
          (progn
            (quail-hide-guidance)
            (quail-delete-overlays)
            (setq describe-current-input-method-function nil))
        (kill-local-variable 'input-method-function))
    (setq inactivate-current-input-method-function 'reverse-input-inactivate)
    (setq describe-current-input-method-function 'reversr-input-help)
    (quail-delete-overlays)
    (if (eq (selected-window) (minibuffer-window))
        (add-hook 'minibuffer-exit-hook 'quail-exit-from-minibuffer))
    (set (make-local-variable 'input-method-function)
         'reverse-input-method)))

(defun reverse-input-inactivate ()
  "Inactivate reverse-im input method."
  (interactive)
  (reverse-input-activate -1))

(defun reverse-input-help ()
  (interactive)
  (with-output-to-temp-buffer "*Help*"
    (princ "Inserts text in reverse order.")))

(provide 'reverse-im)

(register-input-method "reverse-im" "UTF-8" 'reverse-input-activate "<<"
                       "Input method for \"typing characters in reverse\".")

您可以将其保存在例如〜/ .emacs.d / reverse-im / reverse-im.el中,然后将这些行添加到.emacs

(add-to-list 'load-path (expand-file-name "~/.emacs.d/reverse-im/"))
(require 'reverse-im)

然后在需要编辑文本时使用KeySnail Firefox插件调用emacs(您需要在.bashrc中设置文本编辑器或者将用于存储shell变量的任何内容设置为emacsclient并且使用KeySnail的K2Emacs插件,或修改.keysnail.js以在需要时调用Emacs。

Vim的类似插件名为Vimperator,但我没有使用它。