小编jmi*_*ite的帖子

Git:致命:Pathspec在submodule中

根据本指南,我试图让TravisCI自动部署我的Hakyll静态站点.

这是我的回购设置的方式.我有我的源代码分支,其中包含我的hakyll和markdown文件.它将html构建到_site目录中,该目录设置为子模块,链接到我的master分支.

我没有问题地构建网站,然后cd进入_site目录.但是,当我尝试git add ./*新生成的HTML文件时,我收到以下错误:

fatal: Pathspec './about.html' is in submodule '_site'
Run Code Online (Sandbox Code Playgroud)

当我尝试时git add --all,我收到此错误:

git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.

/home/travis/build.sh: line 245: 1566 Aborted git add --all
Run Code Online (Sandbox Code Playgroud)

造成这种情况的原因是什么,我该如何避免这种情况?

您可以在此处查看存储库.

git version-control github git-submodules hakyll

125
推荐指数
5
解决办法
6万
查看次数

在Windows上批量等效的"源":如何从virtualenv运行python脚本

所以,我已经完成了一些bash脚本,但在Windows上只有很少的批处理脚本.我正在尝试激活python virtualenv,运行python脚本,然后在脚本退出时停用virtualenv.

我有一个名为env的文件夹,这是我的virtualenv,还有一个名为work的文件夹,其中包含我的脚本

这是我到目前为止所得到的:

%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,它会激活virtualenv然后停止.它没有到达第二行并运行Python脚本.有没有办法"激活"激活脚本文件夹,以便可以运行其余的批处理脚本,就好像我从命令行调用了activate.bat一样?

python windows scripting batch-file virtualenv

39
推荐指数
2
解决办法
2万
查看次数

Haskell中不含Boilerplate的AST注释?

我一直在使用用Haskell编写的Elm编译器.

我想开始为它实现一些优化,其中一部分涉及遍历AST并向某些节点添加"注释",例如尾调用等.

我知道我可以使用SYB或uniplate进行遍历,但我想知道是否有一种无样板的方法来处理类型.

所以,假设我们的AST有一堆代数类型:

data Expr = PlusExpr Expr Expr ...

data Def = TypeAlias String [String] Type ...
Run Code Online (Sandbox Code Playgroud)

如果我正在编写样板文件,我会创建这样的新类型:

data AnnotatedExpr = PlusExpr Expr Expr [Annotation] ...

data AnnotatedDef = TypeAlias String [String] Type [Annotation] ...
Run Code Online (Sandbox Code Playgroud)

这是很多写的boilderplate,并且似乎是避免这种做法的好习惯.

我可以这样写:

Data AnnotationTree =  Leaf  [Annotation]
     | Internal [AnnotationTree] [Annotation]
Run Code Online (Sandbox Code Playgroud)

然后我就会有一个与AST并行运行的注释树.但是不能保证这些树具有相同的结构,因此我们失去了类型安全性.

所以我想知道,是否有一个优雅/推荐的解决方案,以避免样板,但仍然以类型安全的方式注释树?要用等效的节点替换每个节点,还有稍后将在编译中使用的注释列表?

haskell generic-programming ghc scrap-your-boilerplate template-haskell

27
推荐指数
2
解决办法
1645
查看次数

如何在Haskell中自动生成(并查看代码)Read and Show

所以,在Haskell中,执行此操作非常简单:

data Foo = Bar | Baz
    deriving (Read, Show)
Run Code Online (Sandbox Code Playgroud)

这很棒,但我希望能够将一些数据作为字符串从Haskell传递给Elm语言.语言足够相似,如果我有一个Haskell实现的Read,我可以轻松地将它转换为Elm.

问题是,当我使用派生时,该函数会自动生成,但我实际上无法看到它的作用.

我想知道,有没有办法自动生成解析和显示使用Read和Show的代码,这样我才能真正看到代码本身?

serialization parsing haskell typeclass deriving

21
推荐指数
2
解决办法
861
查看次数

Windows 7:无论其他窗口有焦点,如何将窗口移到前面?

我正在实现一个任务栏替换,类似于Dock的应用程序切换器样式程序.它正在使用OpenGL做一些独特的东西,并使用键盘快捷键,所以它的设置方式,窗口并不总是有焦点.我想实现它,以便我可以将任意窗口带到前台,就像任务栏或ALT-TAB程序一样.

但是,我的代码只会导致应用程序图标在任务栏中闪烁.Windows API文档说这是应该发生的事情,但我正在寻找一种方法来解决这个问题.

我已经从以下示例中调整了我的代码,这些示例表示附加到前台线程应该允许您设置前景窗口.以下是网站:

http://www.voidnish.com/Articles/ShowArticle.aspx?code=dlgboxtricks

http://invers2008.blogspot.com/2008/10/mfc-how-to-steal-focus-on-2kxp.html

我的代码看起来像这样.请注意,它使用win32的win32包装器(self.hwnd是我想要带到前面的窗口的句柄):

fgwin = win32gui.GetForegroundWindow()
fg = win32process.GetWindowThreadProcessId(fgwin)[0]
current = win32api.GetCurrentThreadId()
if current != fg:
    win32process.AttachThreadInput(fg, current, True)
    win32gui.SetForegroundWindow(self.hwnd)
    win32process.AttachThreadInput(fg, win32api.GetCurrentThreadId(), False)
Run Code Online (Sandbox Code Playgroud)

但是,除非我的窗口是前景窗口(通常不是这样),否则这只会导致程序的图标闪烁.

我做错了吗?还有另一种解决方法吗?我认为必须有,因为有很多应用程序切换器似乎能够做到这一点很好.

我在python中写这个,但如果有另一种语言的解决方案,我将使用包装器或做任何必要的事情来启动和运行.

提前致谢!

编辑: 我将开放一种方法,使其仅在我的特定计算机上工作,即在我的机器上启用任何应用程序关注焦点的方法.

已解决:您需要做的是禁用前景锁定.事实证明它就像这样容易:

win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, win32con.SPIF_SENDWININICHANGE | win32con.SPIF_UPDATEINIFILE)
Run Code Online (Sandbox Code Playgroud)

python windows winapi mfc

16
推荐指数
4
解决办法
2万
查看次数

需要改变virtualenv的哪些部分才能重新定位?

所以,我有一个Python程序,有一些荒谬的插件/包.我希望能够在其virtualenv中分发程序,以便捆绑包.但是,该程序适用于Windows,并且在Windows上不支持virtualenvs的"可重定位"功能(以及仍在进行实验).

所以,我正在寻找编写脚本,或者只是编写指令来手动更改绝对路径名以重新定位virtualenv.

我的问题是,如果有人知道我必须在virtualenv中寻找绝对路径名称.我是Python包装的新手.activate.bat脚本包含绝对路径名,但是单个包是否将绝对路径名硬编码到其安装中?

Make Environments Relocatable一节描述了为什么不能简单地移动virtualenv,而是列出包含绝对路径名的地方.

python windows oop distutils virtualenv

14
推荐指数
2
解决办法
7538
查看次数

如何在使用沙箱时让cabal忽略全局包DB

我正在尝试安装两个库,Elmyesod-platform在Ubuntu上使用cabal沙箱.问题是,我正在使用xmonad作为我的窗口管理器.因此,我的包管理器已经安装了一堆Haskell库.在尝试解决依赖关系时,它使用apt安装的库的版本,因此给出了"超出最大跳回"错误.

我如何指示Cabal忽略不在Cabal沙箱中的任何软件包,以便它将在沙箱中安装这些软件包的新鲜versinos并能够解决依赖性?

ubuntu haskell package-managers ghc cabal

11
推荐指数
1
解决办法
900
查看次数

我可以使用OverlappingInstances来获得更好的错误消息吗?

我目前正在处理一些我没写过的Haskell代码,但是我已经对它进行了修改.我的更改后,我运行该程序并收到以下错误消息:

Prelude.!!: index too large
Run Code Online (Sandbox Code Playgroud)

调用!!不在我的代码中,因此重构它比我想要的工作更多,如果我可以避免它.

我想要的是做这样的事情:

class PrintList a where
  (!!) :: [a] -> Int -> a

instance (Show a) => PrintList a where
  l (!!) n = if n < (length l) 
             then (l Prelude.!! n)
             else error ("Index " ++ show n ++ " out of bounds in " ++ show l )

instance PrintList a where
  (!!) = Prelude.!!
Run Code Online (Sandbox Code Playgroud)

即为!!每个可能的列表类型定义函数,但只要为元素类型定义了Show实例,它的行为就不同了.

或者,一种tryShow :: a -> Maybe String方法也可以做到这一点.

有没有办法做到这一点?只有在Show实现不适用时,才能强制OverlappingInstances使用默认实现吗?这是保证的行为吗?

编辑:任何可以获得错误的人也可以打印类似堆栈跟踪的消息!

haskell generic-programming typeclass ghc overlapping-instances

10
推荐指数
1
解决办法
95
查看次数

Coq/Proof General中的Agda编程?

与Agda不同,Coq倾向于将证明与功能分开.Coq提供的策略非常适合编写校样,但我想知道是否有办法复制一些Agda模式功能.

具体来说,我想:

  • 一些相当于Agda ?或Haskell的_,我可以在编写时省略函数的一部分,并且(希望)让Coq告诉我需要放在那里的类型
  • 相当于Agda模式下的Cc Cr(reify),?用一个函数填充一个块,它将?为所需的参数创建新块
  • 当我match在函数中执行时,让Coq自动写入扩展可能的分支(如Agda模式中的Cc Ca)

这是可能的,在CoqIde或Proof General中?

coq agda dependent-type proof-general coqide

10
推荐指数
2
解决办法
969
查看次数

Parsec:获取表达式的开始和结束源位置?

我正在编写一种使用Parsec进行解析的编程语言.为了报告错误消息,我使用Parsec 的Pos模块中的getPosition函数语法树的每个元素标记为其源位置.

但是,它只给出了我解析的每个表达式的开头的位置,我想要开头和结尾,这样我就可以在源代码中突出显示它们的整个位置.

用parsec这样的事情可能吗?是否有一种标准的方法来获取我正在解析的表达式的终点,以便我可以将它包含在我的AST中?

parsing haskell parsec ghc parser-combinators

8
推荐指数
1
解决办法
263
查看次数