在终端窗口中向IPython发送多行引用文本

时间:2016-08-03 18:42:00

标签: macos applescript ipython textmate2

我想将一组选定的行发送到我当前的ipython窗口,这是来自texteditor(在这种情况下是It的TextMate,但这很不相关。)该脚本使用bash调用,因此它可以接受变量,然后接受Applescript调用,将代码推送到窗口。

此当前脚本有效,但它一次只能发送一个非嵌套行。有没有办法解决这个问题,所以我可以一次发送多个非嵌套的代码行?

var usingUnion = db.Where(x => x.IsValid)
    .OrderBy(x => x.Count)
    .Union(db.Where(x => x.IsValid == false).OrderBy(x => x.CreateDate))
    .ToList();

1 个答案:

答案 0 :(得分:1)

我自己不使用TM或ipython,因此无法立即回答您的确切问题,但以下是关于从终端调用AppleScript的一般想法:

  1. 永远不要将参数传递给AS:这是一个等待发生的错误引用事故。将您的AS代码包装在on run argv ... end run处理程序中,然后在bash中调用它时将额外的参数附加到osascript命令。然后,osascript将这些参数直接传递给AppleScript,作为分配给argv变量的字符串列表。安全而简单。

  2. 不要将AS代码包装在bash脚本中,只需在AS代码的顶部添加#!/usr/bin/osascript,将其作为纯文本文件保存在适当的位置(例如shell上的某个地方&# 39; s $PATH,例如/usr/local/bin),然后执行chmod +x /path/to/script以使其可执行。这将允许您直接从终端运行它。

  3. 如果要直接在基于AppleScript的shell脚本中访问STDIN或环境变量,请使用AppleScript-ObjC桥分别分别调用NSFileHandle's fileHandleWithStandardInput()'s readDataToEndOfFile()NSProcessInfo's processInfo()'s environment()。要访问ARGV,请使用如上所述的显式run处理程序。

  4. 默认情况下,osascript会自动将run处理程序返回的值写入STDOUT;或者,您可以随时通过NSFileHandler直接写入STDOUT(您可以在return处理程序的末尾放置一个普通的run语句,以确保它不返回任何其他内容。并且osascript自动将log命令的结果写入STDERR,并在脚本抛出未捕获的异常时将返回代码设置为非零(例如,使用error ERROR_STRING number ERROR_NUMBER语句引发异常直接在您的AS代码中。

  5. (顺便说一下,我不久前写了一个文件库,其中包含一堆非常好的处理程序,用于编写基于AS的shell脚本。我不再自己开发或支持它;但是,各种人都有already forked it,因此,如果你做了很多AS + shell工作,你可能会发现它是一个有用的AS代码来源,可以剪切和粘贴甚至按原样使用。)