试图让终端在Emacs中工作

时间:2009-11-24 09:57:42

标签: python emacs ssh cygwin

我一直遇到很多关于emacs的问题,并试图让终端使用:

    M-x term

我安装了cygwin并修复了我的.emacs以包含路径:

    (setenv "PATH" (concat "c:/cygwin/bin;" (getenv "PATH")))
    (setq exec-path (cons "c:/cygwin/bin" exec-path))
    (require 'cygwin-mount)
    (cygwin-mount-activate)
    (add-hook 'comint-output-filter-functions
    'shell-strip-ctrl-m nil t)
    (add-hook 'comint-output-filter-functions
    'comint-watch-for-password-prompt nil t)
    (setq explicit-shell-file-name "bash.exe")
    ;; For subprocesses invoked via the shell
    ;; (e.g., "shell -c command")
    (setq shell-file-name explicit-shell-file-name)

然而,现在当我启动终端时,它似乎只给出一个空白屏幕并“挂起”

当我发布时:

    M-x shell

确实启动了bash shell并且在文件目录中飞行是可以的(使用cd,ls,cp,rm等)。但是,当我尝试打开一个Python shell时,它再次动手,我输入...并且shell崩溃了。我正在做什么或者有人可以指导我在线解决方案有什么重大错误吗? (我看得非常广泛。)

SSH也会出错:

“由于stdin不是终端,因此不会分配伪终端。”

2 个答案:

答案 0 :(得分:3)

您使用默认的'Cygwin Bash Shell'吗?这是在Windows cmd shell中启动的,您无法拖动以调整屏幕大小。由于底层的Windows组件,这个shell可怕地被破坏了。尝试使用 rxvt 或其中一个腻子叉。

如果设置完毕,那么问题很可能是一个问题。有些人将他们的Cygwin TERM变量设置为'xterm',因为许多远程计算机没有为rxvt-cygwin-native之类的东西安装termcaps。在本地覆盖它将导致尝试一系列终端操作的程序出现问题。

在〜/ .bash_profile中,您可以将终端设置为以下内容。 export TERM=rxvt-cygwin-native

有关rxvt的更多信息,请参阅我的rxvt install guide and tips

答案 1 :(得分:1)

  

SSH也会出错:

     

“不会分配伪终端,因为stdin不是   终端“。

为了解决NTEmacs中的这个问题(不是cygwin的emacs),我做了以下事情:

  1. 安装cygwin的gcc
  2. 使用它将fakecygpty.c编译为fakecygpty.exe
  3. 在emacs shell中运行fakecygpty ssh my_server而不仅仅是ssh my_server(如果您的路径中有fakecygpty,则最简单)。
  4. 我在*shell*运行cmd,cygwin bash和git bash中对此进行了测试,它们都运行正常。我的理解是,fakecygpty.c将NTEmacs作为一个有效的cygwin tty,以便ssh愿意与它交谈。 More information about fakecygpty and SSH with ntemacs.


    您还可以通过将此文件添加到init.el来使NTEmacs正确编辑文件:

    (eval-after-load "tramp"
      '(progn
         (add-to-list 'tramp-methods
                      (mapcar
                       (lambda (x)
                         (cond
                          ((equal x "sshx") "cygssh")
                          ((eq (car x) 'tramp-login-program) (list 'tramp-login-program "fakecygpty ssh"))
                          (t x)))
                       (assoc "sshx" tramp-methods)))
         (setq tramp-default-method "cygssh")))
    

    我还需要将Tramp更新为2.2.7才能从ntemacs通过ssh编辑文件。

    希望这可以节省一些人的麻烦。 :)