小编kdb*_*kdb的帖子

即使它很小或没有输出,Git diff总是会输出更少

当我使用Git Bash(Git For Windows)时,如果一个命令(比如git diff)有一个短输出(我猜测小于终端的高度)它只会打印为输出,现在在Babun(Cygwin)每个Git命令似乎即使它是一条线或完全空的,也要少看."每一个"都可能过于大胆,git status不是.看起来其中一个中有一些预捆绑设置,另一个没有,我不知道它是什么.

我怎样才能使Git表现得如此,当输出短时它不会少用,而只是输出它.

编辑:在git bash中我的git寻呼机是' less -x4'(4个宽度标签),没有-F.此外,环境变量LESS,PAGER以及GIT_PAGER是空的.所以我不知道为什么git bash表现得像这样,但幸运的是我已经得到了一些关于如何让Babun(Cygwin)开始的帮助.

事后更新:(这可能是错误的,请参阅2017-01-12注释.)我认为Git For Windows和/或默认终端在关闭时不会擦除屏幕 - 我在其他地方看到这种行为无关(关闭较少,屏幕没有被擦除)所以我认为这是正在发生的事情.为什么Cygwin和mintty终端在Windows终端上擦除和MINGW(或者Msys2?Whatever For Windows使用)并不是我的知识领域.

后见之明更新帖子谷歌搜索:结果显示上述启示足以让谷歌获得解决方案!我现在就发布.

2017-01-12:看起来并没有正确地擦拭它,因为 LESS没有设置.根据man git config......

core.pager
    [...]

    When the LESS environment variable is unset, Git sets it to FRX
    (if LESS environment variable is set, Git does not change it at
    all). If you want to selectively override …
Run Code Online (Sandbox Code Playgroud)

git

18
推荐指数
2
解决办法
2386
查看次数

Emacs lisp:`directory-files`

该函数还directory-files返回...条目.虽然在某种意义上确实如此,只有这种方式函数返回所有现有条目,我还没有看到包含这些条目的用途.另一方面,每次使用directory-files我也会写一些类似的东西

(unless (string-match-p "^\\.\\.?$" ... 
Run Code Online (Sandbox Code Playgroud)

或者为了提高效率

(unless (or (string= "." entry)
            (string= ".." entry))
   ..)
Run Code Online (Sandbox Code Playgroud)

特别是在交互式使用(M-:)中,额外的代码是不希望的.

是否有一些预定义的函数只能有效地返回目录的实际子条目?

directory emacs elisp interactive file

13
推荐指数
2
解决办法
4031
查看次数

如何不忘记在Javascript中使用等待?

试图编写一个小的chrome扩展,它依赖于接口的回调密集查询功能chrome.*,我很快就登陆了promises和async/await,因为我需要保证某些操作的顺序,同时试图避免回调地狱.

但是,一旦我将async/await引入某些函数,使用它们的每个函数也必须转换为一个async function以便能够await返回值.最终甚至一些全局常量成为了承诺,例如

const DEBUG = new Promise(function(resolve){
    chrome.management.getSelf(resolve);
}).then(function(self){
    return self.installType == 'development';
});
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要在await任何地方写,并且引入奇怪的错误就像if(DEBUG){...}总是被执行变得太容易了.

虽然似乎可以使用ESLINT识别错误,但await在任何地方写入看起来都是不必要的麻烦,因此我想知道Javascript是否有一些我错过的更好的构造?

(主观上我当前使用的await/async似乎是向后的;除非明确等待,否则Promise保持原样,但我似乎更希望在异步函数中默认等待承诺,并且仅在明确请求时保持为裸承诺.)

javascript asynchronous async-await

12
推荐指数
1
解决办法
766
查看次数

在emacs lisp中访问大多数positive-fixnum之外的字节

TL; DR:32位emacs-lisp字节范围可以超出文件的前512 MB吗?

我喜欢使用emacs-lisp进行各种数据处理任务,因为它(显然)与编辑器的高度集成.

当这样编写自定义函数时,我有时会遇到强加的限制most-positive-fixnum.虽然我可以忍受并理解无法将整个1GB文件加载到缓冲区的原因,但该insert-file-contents[-literally]接口也不允许访问超出文件的前512 MB的数据块,因为它需要作为参数的整数字节范围.

有没有办法绕过这个限制?据我所知,目前insert-file-contents是emacs-lisp可用的最低级文件读取功能,insert-file-contents-literally只是通过设置几个变量配置的第一个变体,即emacs-lisp似乎没有提供任何低级别fopen类型文件界面.

奇怪的是在某些时候(可能使用自编译二进制)调用insert-file-contents-literally浮点参数对我有用,允许访问高字节范围,代价是舍入错误的风险.使用ftp.gnu.org中最新的预编译emacs版本(编写时为24.3),这样做会产生(wrong-type-argument file-offset NUMBER)错误.

file-io elisp filesize emacs24

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

Emacs-lisp挂钩用于检测活动缓冲区的变化?

我试图在活动缓冲区改变时执行

  1. 更改当前窗口中的缓冲区(例如C-x <left>).
  2. 切换到另一个窗口(C-x o).
  3. 切换到另一个帧.

他们的钩子适合检测吗?

到目前为止我想到了什么

通过标准挂钩我找到了以下选项,其中没有一个完全符合我的要求:

  • buffer-list-update-hook被称为(1)和(2).但它不合适,因为它在缓冲区更改之前运行,而我想知道更改current-buffer 的内容.

  • window-configuration-change-hook可用于检测当前窗口中显示的缓冲区的更改,并根据需要在更改运行.然而,它不适合M-x other-window.

  • mouse-leave-buffer-hook 对于检测基于鼠标的窗口切换似乎是可行的,但是它经常被调用(对于我用鼠标切换窗口四次,切换前三次和切换一次),这需要额外的逻辑来防止多次执行.

  • post-command-hook 虽然可行,但有点沉重,即使是小错误,也有可能导致编辑器显着减速.

  • 由于我的操作需要使用with-selected-window,触发这些钩子,因此必须注意避免钩子触发自身的无限循环.

emacs hook

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

Fortran 2003/2008:优雅的默认参数?

在fortran中,我们可以定义默认参数.但是,如果不存在可选参数,则也不能设置它.当使用参数作为具有默认值的关键字参数时,这会导致类似的笨拙结构

PROGRAM PDEFAULT 

  CALL SUB
  CALL SUB(3)

CONTAINS 
  SUBROUTINE SUB(VAL)
    INTEGER, OPTIONAL :: VAL
    INTEGER :: AVAL ! short for "actual val"

    IF(PRESENT(VAL)) THEN
       AVAL = VAL
    ELSE 
       AVAL = -1   ! default value 
    END IF

    WRITE(*,'("AVAL is ", I0)') AVAL
  END SUBROUTINE SUB

END PROGRAM PDEFAULT
Run Code Online (Sandbox Code Playgroud)

就个人而言,我经常遇到意外打字的问题VAL而不是AVAL,即接口中的变量名之间的断开,以及代码中使用的初始化值可能引入运行时错误 - 更不用说这种初始化方式相当冗长.

是否有一些更优雅的方式使用具有默认值的可选参数?

示例写一些类似的东西会更自然

IF(NOT(PRESENT(VAL))) VAL = -1 
Run Code Online (Sandbox Code Playgroud)

因为它避免了VALvs AVAL混乱.但它无效,大概是因为Fortran通过引用传递参数,因此如果语句中VAL不存在,则CALL不会与内存关联VALVAL = -1导致段错误.

fortran optional-parameters optional-arguments default-parameters default-arguments

9
推荐指数
2
解决办法
2702
查看次数

“单个文件”git 存储库格式?

概括

git 本身是否支持存储在单个文件中的本地存储库?


动机

我有很多用例,我主要使用 git 来跟踪本地文件的更改,这些文件通过 Dropbox/Spideroak 进行同步,在某些情况下在多台计算机之间进行 rsync。其中许多目录都很小(1 到 10 个文件),而这些.git目录在垃圾回收后包含大约 40 个文件。

这会导致主要文件混乱,因为在许多情况下,目录中的文件数量是.git版本化文件的十倍,从而减慢了备份速度。对于 Dropbox/SpiderOak,它引入了在仅同步部分存储库文件时意外关闭客户端计算机的风险,从而在其他计算机上放置不一致的存储库,这比意外使用过时版本的存储库更难解决。完整的存储库。

如果可以将本地 git 存储库存储在单个文件而不是大型目录树中,那么这些问题就可以避免。我自己可能可以轻松解决这个问题(在命令周围使用zip/包装器),但我想知道是否有更方便/官方支持的选项(例如本地存储库的备用文件格式)。unzipgit

git

9
推荐指数
1
解决办法
1700
查看次数

Fortran 2008:如何返回函数返回值?

在现代Fortran中是否有可能从一个函数返回一个数组,其性能等同于一个子例程填充一个作为参数传递的数组?

考虑例如作为简单的例子

PROGRAM PRETURN 

  INTEGER :: C(5)
  C = FUNC()
  WRITE(*,*) C
  CALL SUB(C)
  WRITE(*,*) C

CONTAINS 

  FUNCTION FUNC() RESULT(X)
    INTEGER :: X(5)
    X = [1,2,3,4,5]
  END FUNCTION FUNC

  SUBROUTINE SUB(X)
    INTEGER :: X(5)
    X = [1,2,3,4,5]
  END SUBROUTINE SUB

END PROGRAM PRETURN
Run Code Online (Sandbox Code Playgroud)

这里的行C = FUNC()将从函数返回值中复制值,然后从堆栈中丢弃返回的数组.子程序版本CALL SUB(C)C直接填充,避免额外的应对步骤和与临时阵列相关的内存使用 - 但在表达中使用是SUM(FUNC())不可能的.

但是,如果编译器实现选择在堆上分配所有数组,则只需更改底层指针即可分配返回值C,从而在两个版本之间产生相同的性能.*

这些优化是由通用编译器完成的,还是有其他方法来获得函数语义而没有性能开销?


*使用可分配数组会更加明显,但这会遇到编译器支持问题.默认情况下,英特尔fortran在分配不同大小的数组时不会(重新)分配数组,但通过使用ALLOCATE(C, SOURCE=FUNC())语句可以产生相同的效果.Gfortran同时在赋值时执行自动分配,但是有一个错误可以防止ALLOCATE语句从SOURCE参数派生出来,而修复程序尚未包含在二进制版本中.

arrays fortran return-value return-by-reference return-by-value

7
推荐指数
1
解决办法
1016
查看次数

Fortran 的“最终”子程序在实际使用中是否足够可靠?

现代 Fortran 包含各种面向对象的思想,包括通过FINAL关键字“析构函数”的概念。

MODULE mobject
  TYPE :: tobject
    ! Data declarations
  CONTAINS
    FINAL :: finalize
  END TYPE
CONTAINS
  SUBROUTINE finalize(object)
    TYPE(tobject) object
    ...
  END SUBROUTINE
END MODULE
Run Code Online (Sandbox Code Playgroud)

然而,这个功能可靠吗?值得注意的是,我注意到有关何时以及是否会调用它的不一致,英特尔 Fortran 19 和 GFortan 7、8 之间存在主要差异:

  • GFortran 无法销毁存储在数组中的对象。
  • 英特尔 Fortran:
    • 在分配时执行虚假和潜在的多余破坏,甚至可能在包含垃圾数据的内存上,以及
    • 从函数返回时执行对析构函数的虚假调用。

我注意到 gfortran-7.4.0 和 gfortran-8.2.1.2 之间没有区别。

这些不一致给我带来了一些关于析构函数的实际可用性的问题。是否有任何一种行为完全符合标准?这个标准不清楚吗?标准是否可能包含导致不直观行为的条款?

详细分析(代码见下)

  • 程序块。Gfortran 不会为在 PROGRAM 块中声明的实例调用析构函数,而 Ifort 会(参见run1示例)。

  • 标量对象。对于声明为标量的实例,如果变量已经看到任何形式的初始化,Gfortran 和 IFort 都会调用析构函数。然而,英特尔 Fortran 在分配函数返回值时,也会调用它

    • 在用函数中的数据覆盖之前在堆栈上的未初始化对象上,以及
    • 似乎在newObject函数的末尾。

    然而,这可以通过在执行任何清理之前显式检查对象是否已初始化来防止。

这意味着,程序员必须明确检查实例是否已初始化。

  • 数组中的对象。如果对象包含在数组中,并且数组超出范围,

    • Gfortran 不会调用析构函数。
    • 英特尔 Fortran 可能会调用析构函数,具体取决于给定数组成员的初始化方式。
    • 数组是否声明没有区别allocatable …

fortran gfortran fortran2003 intel-fortran

7
推荐指数
1
解决办法
338
查看次数

python3中的低级内省?

是否有一些内省方法允许可靠地获取对象实例的底层数据结构,不受任何自定义的影响?

在 Python 3 中,对象的低级实现可以被深深地掩盖:属性查找可以自定义,甚至__dict____slots__属性也可能无法提供完整的图片,因为它们是可写的。dir()明确表示要显示“有趣”的属性而不是实际属性,甚至该inspect模块似乎也不提供此类功能。

不是重复的。此问题已标记为重复是否有内置函数可以打印对象的所有当前属性和值?. 然而,另一个问题只讨论了自省类的标准方法,这里明确列出了在较低级别上不可靠的方法。

作为示例,请考虑以下带有故意模糊类的脚本。

import inspect

actual_members = None  # <- For showing the actual contents later.

class ObscuredClass:
    def __init__(self):
        global actual_members
        actual_members = dict()
        self.__dict__ = actual_members
        self.actual_field = "actual_value"
    def __getattribute__(self, name):
        if name == "__dict__":
            return { "fake_field": "fake value - shown in __dict__" }
        else:
            return "fake_value - shown in inspect.getmembers()"

obj = ObscuredClass()
print(f"{actual_members          = }")
print(f"{dir(obj)                = …
Run Code Online (Sandbox Code Playgroud)

python introspection python-3.x

6
推荐指数
1
解决办法
129
查看次数