1

我想开发一个将在我的 Ubuntu 12.04 的背景上运行的程序,所以当在任何正在运行的程序的某个文本框中选择一些文本并按下一些组合键(如 ctrl-F12)时,文本将被剪切,反转,并粘贴在同一个地方。

我知道一些在 Windows 上执行此操作的程序。

它在一些不支持从右到左的语言(如阿拉伯语和希伯来语)的程序和网页中很有用——字母是从左到右打印的,因此文本会颠倒。

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

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

谢谢

4

2 回答 2

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)。

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

于 2012-10-13T21:34:40.247 回答
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,但我没有使用它。

于 2012-10-14T09:57:13.887 回答