GNU/Linux >> Linux の 問題 >  >> Ubuntu

Nautilusからファイルを開くときに、Geditが新しいインスタンスをランダムに開いたままにするのはなぜですか?

ああ、Ubuntuとそのすべての機能が大好きですが、この「バグ」は私を長い間怒らせてきたので、ついにここで助けを求めることにしました。

すべての.phpを割り当てました nautilusでファイルをダブルクリックするたびにgeditで開くファイル。さて、振る舞いはおかしいです。

  1. geditを実行していません
  2. 開くファイルをダブルクリックします
  3. geditウィンドウが開き、ファイルが読み込まれます
  4. 開く別のファイルをダブルクリックします

現在、2つの可能な結果があります:

5A)ファイルが同じgeditウィンドウの新しいタブで開きます

5B)ファイルが新しいgeditウィンドウで開き、2つのgeditが実行されます。

AとBのどちらが発生するかは完全にランダムであるように思われ、無限に進み続けます。つまり、100個のファイルをダブルクリックすると、60個のgeditが作成される可能性があります。そのうちのいくつかには、1つのタブがあり、いくつかには2つのタブがあり、いくつかには3つのタブがあります…

これは非常に煩わしいので、これを修正していただければ幸いです。誰かがこの問題を解決しようとしたことがありますか?

これはUbuntu10.04、10.10、11.10で発生しました。私がこれまでにテストしたすべてのUbuntuバージョン。

ベストアンサー

理由…

gedit 新しいインスタンスを開くか、既存のインスタンスのタブで開くかを判断するための非常に興味深いアルゴリズムがあります。

ソースファイルgedit-app.cにあります 関数static boolean is_in_viewportで 、アルゴリズムは現在のgeditインスタンスが

であるかどうかをテストします
  1. 同じ画面番号と表示名で
  2. 同じワークスペース内
  3. ビューポートのエッジの25%以上

すべてがtrueの場合、geditは同じインスタンスで新しいタブで開きます。それ以外の場合は、新しいウィンドウで開きます。

要約すると、動作を変更する唯一の現実的な方法は、アルゴリズムを変更することです…

方法…

以下は、geditを開く一貫した方法を取得するための簡単な方法です…常に新しいインスタンスを開きます。

基本的な開発ツールをインストールする

sudo apt-get install devscripts build-essential fakeroot 

ソースを入手

cd ~/Downloads
mkdir build
cd build
apt-get source gedit
cd gedit-3.2*

変更を加える

gedit-app.cを開きます

gedit gedit/gedit-app.c

return FALSE;を追加します 示されているように保存します。

これは、「ビューポートで実行されていないため、常に新しいインスタンスを開く」と言ってルーチンを常に終了することです。

return TRUE;を使用する場合 これは、新しいタブのgeditの既存のインスタンスで常に開きます…

関連:UbuntuでUbuntu 13.10(Saucy)にアップグレードした後に機能しないDNS解決を修正するにはどうすればよいですか?

一意のパッケージ名を付けます

OK、リポジトリの更新によって変更されたパッケージが上書きされないように、パッケージに一意の名前を付ける必要があります

gedit debian/changelog

ここで+yournameを追加します トップラインバージョンに移動し、ファイルを保存します。つまり

注–確実に–以下の変更されたパッケージをインストールした後、以下のリンクされた質問に従ってバージョンをロックしてください。

パッケージを作成する

sudo apt-get build-dep gedit
debuild -i -us -uc -b

コーヒーを飲みに行く…

cd ..
sudo dpkg -i gedit*.deb

リンクされた質問:

  1. 特定のパッケージの更新を防ぐ方法は?

Ubuntu
  1. ファイルにリダイレクトするときに stdout を明示的にフラッシュする必要があるのはなぜですか?

  2. rsync がローカル ファイルにデルタ転送を使用しないのはなぜですか?

  3. 「xdg-mime query filetype ...」が新しく追加されたファイルタイプを見つけられないのはなぜですか?

  1. ファイルまたはディレクトリをコピーするときに所有権とファイルのアクセス許可をそのまま維持する方法

  2. Find -mtime +1が2日より古いファイルのみを返すのはなぜですか?

  3. Vlcを使用しているときに、スクリーンセーバーが起動し続けるのはなぜですか?

  1. ストリーミングWebサイトからFlashファイルにアクセスする方法は?

  2. Ls-lがLs-sとは異なるサイズを出力するのはなぜですか?

  3. 自宅からUSBにファイルを転送できませんか?