Режим компиляции Emacs не видит bash псевдоним
Компиляция Emacs M-x не видит никаких псевдонимов, установленных в .bashrc. Если я использую оболочку M-x, то введите псевдоним, это нормально. Я попытался найти .bashrc из /etc/profile, из ~/.profile, ~/bash_env, все, что я могу придумать безрезультатно.
Я на Emacs 23 и Ubuntu 11. Я запускаю emacs, используя /usr/bin/emacs % F, с помощью кнопки рабочего стола.
Любые идеи?
Ответы
Ответ 1
Emacs наследует свою среду от родительского процесса. Как вы вызываете Emacs - из командной строки или каким-либо другим способом?
Что произойдет, если вы:
M-x compile RET C-a C-k bash -i -c your_alias RET
Вызов bash в качестве интерактивной оболочки (-i) должен читать ваши псевдонимы .bashrc.
Изменить: Я думаю, что команда M-x shell-command и M-x скомпилируют команды выполнения в нижней оболочке через call-процесс. Попробуйте следующее в вашем .emacs(или просто оцените):
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
Я заметил, что после оценки выше, псевдонимы .bashrc выбираются для использования как с командой M-x shell-command, так и с M-x компиляцией, i.e
M-x скомпилировать RET your_alias RET
должен работать.
Моя среда: Emacs 24.1 (preest rc1), OSX 10.7.3
Ответ 2
Ответ Keith Flower работает, но может привести к некоторым замедлениям из-за ненужной загрузки .bashrc в других местах (по-видимому, много раз, мой компьютер не совсем под напряжением, но emacs практически не использовался при попытке использовать autocomplete.el).
Альтернативный способ - локально изменить shell-command-switch
только на те функции, где это необходимо. Это можно сделать, используя функцию "рекомендации" emacs, чтобы создать оболочку вокруг этих функций. Вот пример, который изменяет compile
:
;; Define + active modification to compile that locally sets
;; shell-command-switch to "-ic".
(defadvice compile (around use-bashrc activate)
"Load .bashrc in any calls to bash (e.g. so we can use aliases)"
(let ((shell-command-switch "-ic"))
ad-do-it))
Вам нужно написать аналогичный "совет" для каждой функции, которую вы хотите использовать .bashrc(например, мне также необходимо было определить тот же совет для recompile
), просто скопируйте приведенное выше и замените compile
в приведенном выше другое имя функции.
Ответ 3
Я думаю, что команды компиляции не интерпретируются через оболочку: они juste exec'ed от emacs (что означает, что псевдонимы, функции оболочки и другие вещи, относящиеся к оболочке, не учитываются).
Попробуйте включить команду компиляции в оболочку script, которая будет источником правильной среды.
Вы можете сделать это либо с полноценной оболочкой script в форме
#!/bin/bash
source "~/.bashrc"
my_command
или непосредственно в emacs с командой компиляции формы
bash -c "source ~/.bashrc; my_command"
Ответ 4
Вам может понравиться emac bash -completion:
https://github.com/szermatt/emacs-bash-completion/tree/7d6236e6e733ad857ff33af2d9fda38218aec13b
Вы сможете использовать табуляцию ваших псевдонимов в минибуфере компиляции и в режиме оболочки.
Наслаждайтесь!
(они говорят об этом здесь Bash автозаполнение в режиме оболочки Emacs)