ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Acme Plumbing

lionicsheriff ST3

使文本可点击(Sublime Text 3)

详细信息

安装次数

  • 总计 5K
  • Win 3K
  • Mac 818
  • Linux 572
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1
Mac 1 1 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1

Readme

源代码
raw.​githubusercontent.​com

AcmePlumbing

使文本可点击

什么是

  • https://www.google.com/search?q=Acme+Editor 上右键单击,并在您的浏览器中打开谷歌搜索。
  • 在 Commands.py@prepare_command 上右键单击,打开 Commands.py 以准备命令的定义。
  • 右键单击 pydoc(re) 来查看 Python 正则表达式的帮助。
  • 右键单击 shutdown,您的计算机将关闭(让您疑惑为什么您设置了最后一个)。

为什么

我尝试了 Acme 编辑器,并发现它将文本视为 UI 的一部分很有趣。然而,我想要在一个我更舒适的(且在 Windows 上运行良好)的环境中玩耍。此外,我真的想能够将文件链接起来作为一个临时的维基。

怎么做

使用鼠标右键选择文本。选定的文本被放入消息中作为数据,然后传递给一组命令(一个规则)。命令从第一个到最后一个进行评估,如果一个失败,则规则停止处理,并尝试下一个规则。

如果您只想选择一个单词,您可以通过在单词中间右键单击来节省精力。这将导致 AcmePlumbing 沿着单词边界扩展选择。

配置

查看 AcmePlumbing (Linux).sublime-settings

每个规则是一组要运行的命令列表。您可以通过将其包裹在列表中向命令传递额外的参数。

[
  "is_file",
  [ "pattern", "\.txt$"],
  "open_in_tab"
]

当消息传递给此规则时,第一条命令检查消息数据是否指向一个文件。如果是文件,则执行下一条命令,否则规则退出。然后第二条命令将消息数据与正则表达式进行比较。此命令将正则表达式作为参数。在这种情况下,它测试文件是否为.txt文件。如果通过,则将消息传递给open_in_tab命令,在新标签页中打开消息数据中引用的文件。

注意:管道中的命令可以自由修改消息(如果规则失败,消息将设置回原始值以便下一个规则使用)

命令

模式

查看Commands.py@模式

将数据与第二个参数中指定的正则表达式进行比较。结果存储在match_data中,允许操作管道使用数据的片段。

is_file

查看Commands.py@is_file

is_file测试消息数据是否引用文件。如果失败,它将尝试使用消息中设置的工作目录作为相对路径再次测试。如果找到文件,则将消息数据设置为完整路径。

is_dir

查看Commands.py@is_dir

is_dir测试消息数据是否引用目录。与is_file类似,如果失败,它将尝试使用消息中设置的工作目录作为相对路径再次测试。如果找到目录,则将消息数据设置为完整路径。

list_dir

查看Commands.py@list_dir

list_dir假设消息数据是目录的路径,并将其列出。目录中的每个项目都展开为其完整路径,并用换行符分隔。消息数据被替换为项目列表。

extract_jump

查看Commands.py@extract_jump

这个测试与其他不同,它总是通过。其目的是从数据中移除跳转位置并存储在单独的位置(match_data),以免干扰后续测试。这非常重要,因为它使is_file不必知道如何跳转到文件中的位置,并且它可以专注于仅测试文件是否存在。

查看Commands.py@jump了解跳转的语法

prepare_command

查看Commands.py@prepare_command

prepare_command基于匹配管道的结果替换数据中的文本。在基本的情况下 $\_ 正被替换为消息数据的内容(您点击的文本)。

模式

模式测试的结果可以用组位置(例如 $1)或组名称(例如 $section)来替换

open_in_tab

查看Commands.py@open_in_tab

open_in_tab在新标签页中打开消息['data']中的任何内容。如果存在具有该路径的文件,它将打开该文件。否则,它假定数据是shell命令。它将运行该命令,如果有输出,它将放置在新标签页中。例如,此规则用于打开man页面。

display_data_in_new_tab

查看Commands.py@display_data_in_new_tab

display_data_in_new_tab创建一个新标签页并将消息数据的内容输出到其中。

jump

查看Commands.py@jump

jump使用extract_jump的结果并移动到新位置。它使用与“转到任何位置”类似的语法。

  • strong @ 选择符号
  • : 选择文本
  • : 选择行

open_in_external_process

查看Commands.py@open_in_external_process

open_in_external_process假定消息数据是命令并运行它。不打开新标签页。这主要用于像URL这样的规则,您希望它们在浏览器中打开,而不是在文本编辑器中打开。

extern

查看Commands.py@extern

extern运行外部模块中定义的命令。第一个参数是模块名,第二个是函数,其余参数是参数。

["extern", "ExternalPlugin.Module", "custom_command", "arg1", "arg2", "arg3"]

print_pipeline

查看Commands.py@print_pipeline

print_pipeline 将在管道的该点将消息和管道数据输出到控制台。这在调试管道时非常有用。

扩展

消息

消息的结构如下

{
  "data": "the selected text",
  "cwd": "the parent directory of the current file",
  "src": "the view id",
  "edit_token": "the edit token used for editing views"
}

创建新命令

您可以在用户目录中的 AcmePlumbingCommands.py 中创建自定义命令。每个动作都是一个具有以下签名的函数

def custom_command(message, arguments, pipeline_data):
  return True

如果命令成功,则命令必须返回一个真值。否则,规则将被视为失败,并且将运行下一个规则。

然后您可以通过在规则集中以函数名称引用它们来使用它们

[ "custom_command" ]

返回值放入 pipeline_data,这是一个包含规则中所有先前命令结果的字典。

从另一个插件调用

您可以使用 SublimeAcmePlumbing.AcmePlumbing.add_rule (AcmePlumbing.py@add_rule) 将规则注入到管道中。这可以与“extern”命令结合使用来调用在另一个模块(例如另一个插件)中定义的命令。规则保存在 用户 设置中,以便用户可以调整它并控制其在管道中的位置。附加规则具有密钥以便在规则已存在时更新规则,因此它们应该是唯一的。

参见 AcmePlumbing.py@add_rule

def add_rule(key, comment, rule)

规则以以下格式保存

// key
// comment
[
    "rule"
],

示例

OtherPlugin.Plumbing.py

import sublime
from AcmePlumbing import AcmePlumbing

def greet(message, args, match_data):
    window = sublime.active_window()
    tab = window.new_file()
    tab.set_scratch(True)
    edit_token = message['edit_token']
    tab.insert(edit_token, 0, "Hello. How's the weather?")
    return tab

def plugin_loaded():
    AcmePlumbing.add_rule("OtherPlugin.greet",
                          "Ask about the weather",
                          ["extern", "OtherPlugin.Plumbing", "greet"])

此插件设置了管道,以便您可以右键单击任何内容以打开一个询问您天气的新标签页

常见问题解答 (FAQ)

我的上下文菜单在哪里?

由于 Acme Plumbing 绑定到右键鼠标,因此您通常无法访问右键菜单。别慌张:它只需按下 shift + 右键即可。

但是,如果您不想在右键鼠标上使用 Acme Plumbing,您可以将它移动到中键鼠标,方法是在 Users 包的目录中的 Default.sublime-mousemap 中放入以下内容。

[
  {
    "button": "button2", "count": 1, "modifiers": [],
    "press_command": "context_menu"
  },
  {
    "button": "button3", "count": 1, "modifiers": [],
    "command": "acme_plumbing_send",
    "press_command": "drag_select"
  },
]

许可证

MIT