3

Находясь в каталоге, я иногда хочу, чтобы другой терминал был открыт в том же каталоге.

Например, я нахожусь в ~/code/someproject/src/ , и я открываю новый терминал, по умолчанию он открывается в ~ , как мне запустить новый терминал в текущем каталоге?

Я использую Arch Linux с urxvt в качестве моего терминала и i3 в качестве моего оконного менеджера.

4 ответа4

3

На форуме i3-faq есть очень информативная ветка с различными скриптами / программами, которые решают эту проблему.

https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/

Я пошел на программу c xcwd, которая действительно делает большую работу. Это также работает в программах GUI.

1

когда вы запускаете терминал из существующего терминала, среда исходного терминала будет сохранена, включая текущий рабочий каталог и любые другие переменные среды, которые вы установили. Вот почему urxvt & работает

0

У меня есть очень, очень, очень уродливый хак, который я написал, чтобы сделать это.

https://github.com/alfonzo1955/bin/blob/master/curdirterm

Мое имя хоста - bulletMaster, а мой домашний каталог - /root /

0

Ни один из ответов, которые я видел, не работал при использовании urxvtd , и в этом случае все окна терминала связаны с одним и тем же процессом демона urxvtd , и, похоже, нет простого способа определить правильный экземпляр оболочки для получения PWD.

Для решения этой проблемы я использовал некрасивый хак. Я использую zsh с трюком preexec для отображения в заголовке окна текущего каталога (вместе с текущей и последней командой, временем и т.д.), Что, на мой взгляд, полезно в любом случае. Я делаю это с чем - то в следующей форме в моей zshrc (вам нужно будет адаптировать его, увидеть эту команду , см здесь для полной последней версии):

preexec () {
  local WD="$(pwd | sed "s/^\/home\/$USER/~/")"
  export LASTDATE="`date +%T`"
  if [[ "$TERM" == "rxvt-unicode" || "$TERM" == "rxvt-unicode-256color" ]]; then
    export COMMAND="$(echo $1 | tr -d '\n')"
    echo -ne "\e]0;$LOCALNAME $HOST:$WD$ $COMMAND ($LASTDATE)\a"
  fi
}

Тогда я только что сделал скрипт для запуска нового urxvt в том же каталоге, например сфокусированного urxvt, просто путем выделения заголовка в текущем сфокусированного окне (см здесь для последней версии):

#!/bin/bash

# run ARGV, with -cd FOLDER if FOLDER can be extracted from title of current
# window (see zsh config for how the title gets put in the window)

# http://superuser.com/a/403369/77814
quoted_args="$(printf " %q" "$@")"

# inspired by
# https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/%3C/p%3E.html
ID=$(xdpyinfo | grep focus | cut -d ',' -f1 | rev | cut -d ' ' -f1 | rev)
CLASS=$(xprop -id "$ID" | grep -m1 WM_CLASS | cut -d'"' -f2)

# https://stackoverflow.com/a/19411918
if [ "${CLASS^^}" != "URXVT" ]
then
  # no urxvt focused -- just do the default
  # optionally we could try to extract the pwd with
  # https://github.com/schischi-a/xcwd or something
  exec $quoted_args
fi

TITLE=$(xprop -id "$ID" | grep -m1 WM_NAME)
MYPWD=$(echo "$TITLE" | cut -d'$' -f1 | cut -d'"' -f2- | cut -d':' -f2-)
MYPWD2="${MYPWD/#\~/$HOME}"

if [ ! -z "$MYPWD2" -a -d "$MYPWD2" -a -r "$MYPWD2" -a -x "$MYPWD2" ]
then 
  exec $quoted_args -cd "$MYPWD2"
else
  exec $quoted_args
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .