Я нахожусь на Ubuntu 12.04 и использую Терминатора в качестве своего основного терминала. Мне нравится он, потому что это позволяет мне сохранить интерпретатор Python и колотить терминал, открытый одновременно в том же представлении.
То, что является раздражающим, - то, что я заканчиваю тем, что переместился между каталогами A LOT, и затем я должен сделать это дважды. Существует ли способ настроить конфигурацию разделителя, чтобы сделать это? Чтобы иметь разделитель зеркально отражают изменения каталога.
Я предполагаю, что я не единственный, который находит тот срыв!
Хорошо. Если я понимаю правильно, у Вас в основном есть окно Terminator в представлении разделения, где один буфер является оболочкой Bash, и другой интерпретатор Python. Теперь, каждый раз, когда Вы вводите команду как cd Pictures/
в буфере Bash Вы хотите автоматически отправить команду os.chdir("Pictures/")
к буферу Python, так, чтобы это изменило каталоги одновременно с Вашей оболочкой Bash. Отчасти как в этом изображении:
... где os.chdir
команда в буфере Python должна быть введена автоматически когда Вы тип a cd
команда в буфере Bash.Правильно? Если да, вот...
Шаг 1: Присвойте два буфера той же группе
Терминатор поддерживает группы окон. Мы присвоим те два буфера той же группе для позже использования функции Терминатора широковещательной передачи команд к окнам в той же группе. В этом примере я присвою оба буфера группе под названием Tau (подлинное имя не имеет значения, но удостоверяется, что это - то же для обоих буферов).
Шаг 2: Определите сочетания клавиш для включения и выключения широковещательной передачи группы
Терминатором по умолчанию не имеет сочетаний клавиш для них, но нам нужны они теперь, таким образом, мы определим их с помощью Меню свойства Терминатора. Я использовал Ctrl+Insert для включения широковещательной передачи группы и Ctrl+Delete для выключения его. Можно выбрать любые другие сочетания клавиш, которые Вы любите, хотя необходимо будет адаптировать Шаг 3 соответственно.
Теперь, можно нажать Ctrl+Insert, и независимо от того, что Вы вводите в одном буфере, появится в другом буфере. Путем ввода Ctrl+Delete Вы деактивируете то поведение снова.
Если интерпретатор Python понял команду такой как cd Pictures/
, для изменения каталога в обоих буферах все, что необходимо было бы сделать теперь, будет чем-то как Ctrl+Insertcd Pictures/
Ctrl+Delete, для широковещательной передачи команды, как. Но нормальный интерпретатор Python не понимает это cd
команда. Вы могли использовать IPython, который действительно понимает это вместо чистого интерпретатора Python. Однако я предполагаю, что (1) Вы хотите чистый интерпретатор Python и (2) Вы не хотите иметь необходимость не забыть нажимать эти сочетания клавиш прежде и после каждого cd
команда. Так, давайте направляться в Шаг 3.
Шаг 3: Переведите и отправьте cd
управляйте автоматически к буферу Python
Мы повторно исказим встроенный Bash cd
команда, чтобы сделать немного больше прежде на самом деле изменить рабочий каталог в текущей оболочке. А именно, каждый раз, когда пользователь вводит cd somewhere
,
xdotool
моделировать нажатие Ctrl+Insertxdotool
моделировать ввод переведенной командыxdotool
моделировать нажатие Returnxdotool
моделировать нажатие Ctrl+DeleteТаким образом переведенная команда будет отправлена на буфер Python. Если у Вас нет его, установка xdotool
:
sudo apt-get install xdotool
Сценарий, для которого мы хотим как псевдоним cd
будет выглядеть примерно так:
function cd_to_pybuf {
xdotool type "#"
xdotool key Ctrl+Insert
xdotool type "os.chdir(\"$1\")"
xdotool key Return
xdotool key Ctrl+Delete
cd "$1"
}
cd_to_pybuf
Объяснение: Когда мы искажаем cd
к вышеупомянутому сценарию, затем каждый раз, когда мы вводим cd somewhere
, Bash переводит это в OURSCRIPT somewhere
. Так как наш сценарий заканчивается вызовом функции cd_to_pybuf
, это на самом деле вызовет функцию cd_to_pybuf
с somewhere
как аргумент (доступный как $1
в функции; обратите внимание, что расширение удара не работало бы здесь, таким образом, мы не можем использовать что-то как !*
достигать аргументы исходной команды, и $BASH_COMMAND
проблематично также). Эта функция выполняет точно шаги, перечисленные выше. На заметке на полях мы также моделируем ввод #
прежде чем мы моделируем нажатие Ctrl+Insert, потому что независимо от того, что мы вводим после того, как это появится в обоих буферах, и Bash не понимает os.chdir
команда, таким образом, с этим #
знак мы превращаем его в комментарий для Bash. После xdotool
материал, мы также выполняем фактическое cd
команда в буфере Bash.
Таким образом, теперь мы повторно искажаем cd
к тому сценарию и тесту это:
Работает! Это os.chdir("..")
команда в буфере Python была введена автоматически. Я не сделал этого. Все, что я сделал, было ввести cd ..
в буфере Bash. Вы видите что команда #os.chdir("..")
был также автоматически введен в буфер Bash, но так как это - комментарий, это не имело никакого реального эффекта.
Для внесения этого изменения постоянным поместите тот псевдоним в ~/.bashrc
, т.е. в Вашем ~/.bashrc
добавьте строку:
alias cd='function cd_to_pybuf { xdotool type "#"; xdotool key Ctrl+Insert; xdotool type "os.chdir(\"$1\")"; xdotool key Return; xdotool key Ctrl+Delete; cd "$1"; }; cd_to_pybuf'
И voilà!Вот и все.
Премия: псевдоним для pwd
Иногда можно хотеть проверить то, что текущий рабочий каталог находится в обоих буферах сразу. Мы можем использовать ту же самую технику что касается cd
, и перепсевдоним pwd
. Следующая команда добьется цели, и можно также поместить ее в Ваш ~/.bashrc
если Вам нравится:
alias pwd='function pwd_to_pybuf { xdotool type "#"; xdotool key Ctrl+Insert; xdotool type "os.getcwd()"; xdotool key Return; xdotool key Ctrl+Delete; pwd; }; pwd_to_pybuf'
Что необходимо будет помнить
Чтобы это работало в будущем, каждый раз, когда Вы открываете представление разделения с Bash и буфером Python, необходимо будет сделать две вещи:
import os
в Вашем буфере PythonЭто все.
Поиск и устранение неисправностей
Это не прекрасно. Существуют некоторые незначительные проблемы:
Это немного ужасно что это #os.chdir
штука печатается к буферу Bash также. Это является действительно косметическим, но Вы могли бы рассмотреть выполнение чего-то другого, например, после моделирования ввода команды и прежде, чем моделировать нажатие Return деактивируйте широковещательную передачу временно и удалите ту команду (например, моделируйте много клавиш Backspace или последовательность Ctrl+A, Ctrl+K) от буфера Bash или что бы то ни было.
Некоторые специальные аргументы cd
не будет работать. Вещи как cd -
(изменение в $OLDPWD
), cd ~
(изменение в $HOME
), или cd
(без аргументов также изменитесь на $HOME
). Здесь также, сценарий мог быть улучшен для составления таких особых случаев (проверка, если $1
является особенным, и переведите соответственно). Такими вещами должен быть кусок пирога отсюда, все же.
Дополнительные параметры к cd
, такой как, например, cd -P somewhere
, не будет работать, потому что перевод был бы os.chdir("-P")
здесь. Вы могли использовать $@
вместо $1
для рассмотрения всех аргументов, и затем делают соответствующую вещь.
Надежда я мог помочь :) Это была интересная задача!