emacs 的 TAB 如何绑定多个功能?

当在开头没输入任何字符时, 我希望 TAB 是 tab-to-tab-stop, 当输入了一些字符, 我希望首先检查有没有 yasnippet, 如果没有, 再看补全. 当在 org mode 的标题列表中时, 我希望它是 org-cycle. 当在 CDLatex 时, 我希望它是展开 CDLatex 的片段. 一个 tab 有这么多事, 这咋做得到呢?

现成的包有 smart-tab。可以参考改一下。

当输入了一些字符, 我希望首先检查有没有 yasnippet, 如果没有, 再看补全.

这一点可以参考天书佬的配置:

可以参考这个帖子

不过 Tab 在有些情况我感觉是无解。比如 haskell-mode 的缩进用 Tab 的话,没有一个固定的结果。

直接打开 (yas-global-mode) 就会在tab后检查snippet. 其他的功能可以通过在每个major mode的key-map绑定不同的命令来实现。