代码之家  ›  专栏  ›  技术社区  ›  Piotr Zurek

如何强制F#interactive默认为reference Gtk?

  •  5
  • Piotr Zurek  · 技术社区  · 14 年前

    我主要是在Linux上玩F#,希望默认情况下可以引用所有必要的图形用户界面库(Gtk、Gdk、Atk、Glib、Pango、Cairo),这样我就可以简单地使用: open Gtk;; 没有任何额外的打字。 我最好的猜测是修改fsi启动脚本,目前看起来是这样的:

    
        #!/bin/sh  
        exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe $@
    

    更新:斯蒂芬建议的脚本工作版本:

    
        #!/bin/sh
        exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe -r "/usr/lib/cli/atk-sharp-2.0/atk-sharp.dll" -r "/usr/lib/cli/glib-sharp-2.0/glib-sharp.dll" -r "/usr/lib/cli/gdk-sharp-2.0/gdk-sharp.dll" -r "/usr/lib/cli/gtk-sharp-2.0/gtk-sharp.dll" -r "/usr/lib/cli/pango-sharp-2.0/pango-sharp.dll" -r "/usr/lib/mono/2.0/Mono.Cairo.dll" $@
    
    3 回复  |  直到 14 年前
        1
  •  8
  •   Tomas Petricek    14 年前

    我写了一个小脚本,允许您使用来自F#Interactive的Gtk(见下文)。它引用了必要的Gtk程序集(您可能需要修改路径),还配置了F#交互式事件循环,以便您可以创建和显示小部件(例如 Window )互动的。

    如果你想自动获得支持,你需要运行 fsi.exe 使用参数在启动时加载脚本 mono /.../fsi.exe --load:load-gtk.fsx (假设您将脚本保存为 load-gtk.fsx )

    [<AutoOpen>]
    module GtkSharp
    
    // Load some common Gtk# assemblies (from /usr/lib/mono/2.0/../gtk-sharp-2.0)
    #r "../gtk-sharp-2.0/gtk-sharp.dll"
    #r "../gtk-sharp-2.0/gdk-sharp.dll"
    #r "../gtk-sharp-2.0/glib-sharp.dll"
    #r "../gtk-sharp-2.0/atk-sharp.dll"
    
    open Gtk
    
    Application.Init()
    fsi.EventLoop <- 
     { new Microsoft.FSharp.Compiler.Interactive.IEventLoop with
       member x.Run() = Application.Run() |> ignore; false
       member x.Invoke f = 
         let res = ref None
         let evt = new System.Threading.AutoResetEvent(false)
         Application.Invoke(new System.EventHandler(fun _ _ ->
           res := Some(f())
           evt.Set() |> ignore ))
         evt.WaitOne() |> ignore
         res.Value.Value 
       member x.ScheduleRestart() = () }
    
        2
  •  3
  •   Stephen Swensen    14 年前

    在Linux中可能有点不同,但在Windows中,可以通过使用 -r . 例如

    #!/bin/sh
    exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe -r /usr/somedll.dll $@ 
    
        3
  •  2
  •   Brian    14 年前

    我猜加上

    -r:/path/to/gtk
    

    --load:someStartupScript.fs
    

    可能包括一些 #r 或者别的什么。 fsi /? 你会明白的。

    推荐文章