在Emacs中尝试使用终端
我在使用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这个命令行工具,浏览文件夹也没问题(用cd、ls、cp、rm等命令)。不过,当我尝试打开Python命令行时,它又卡住了,我输入一些东西后,命令行就崩溃了。我这样做是不是有什么大问题,或者有没有人能给我指个方向,告诉我网上有什么解决办法?(我已经查了很多资料。)
另外,使用SSH时也出现了错误:
“伪终端无法分配,因为标准输入不是终端。”
2 个回答
SSH 还会出现这样的错误:
“伪终端不会被分配,因为标准输入不是一个终端。”
为了解决这个问题,在 NTEmacs(不是 Cygwin 的 Emacs)中,我做了以下几步:
- 安装 Cygwin 的 gcc。
- 用它把 fakecygpty.c 编译成 fakecygpty.exe。
- 在 Emacs 的命令行中运行
fakecygpty ssh my_server
,而不是直接运行ssh my_server
(如果 fakecygpty 在你的路径中,这样做最简单)。
我在 *shell*
中测试了这个,使用了 cmd、Cygwin bash 和 git bash,结果都很好。我的理解是,fakecygpty.c 让 NTEmacs 看起来像一个有效的 Cygwin 终端,这样 SSH 就愿意和它通信。关于 fakecygpty 和 NTEmacs 下的 SSH 的更多信息。
你还可以通过在 init.el 中添加以下内容,让 NTEmacs 正常通过 SSH 编辑文件:
(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 编辑文件。
希望这能帮到某些人。 :)
你是不是在用默认的 'Cygwin Bash Shell'?这个是会在Windows的命令提示符里启动的,屏幕大小不能拖动调整。这个壳子非常糟糕,因为它底层是Windows的组件。你可以试试用rxvt,或者一些putty的变种。
如果这些都设置好了,那问题可能是termcap的问题。有些人把他们的Cygwin的TERM变量设置成'xterm',因为很多远程机器上没有安装像rxvt-cygwin-native
这样的termcap。这样在本地覆盖它会导致一些程序在进行各种终端操作时出问题。
在你的~/.bash_profile文件里,你可以把终端设置成这样:export TERM=rxvt-cygwin-native
想了解更多关于rxvt的内容,可以看看我的rxvt安装指南和小贴士。