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


32

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

.phpnautilusでダブルクリックするたびに、geditで開くすべてのファイルを割り当てました。今、動作は奇妙です。

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

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

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

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

AまたはBが発生するかどうかは完全にランダムであるようで、無限に継続します。つまり、100個のファイルをダブルクリックすると、60個のgeditが表示される可能性があります。そのうちのいくつかは1つのタブを持ち、いくつかは2つのタブを持ち、いくつかは3つのタブを持ちます...

これは非常に迷惑であり、この修正は非常にありがたいです。この問題を修正しようとした人はいますか?

これはUbuntu 10.04、10.10および11.10で発生しました。これまでにテストしたすべてのUbuntuバージョン。

回答:


39

なぜ...

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

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

  1. 同じ画面番号と表示名で
  2. 同じワークスペース内
  3. ビューポートの端の25%以上

すべてがtrueの場合、geditは同じインスタンスの新しいタブで開きます。それ以外の場合は、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の既存のインスタンスで開きます...

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

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

gedit debian/changelog

ここで+yourname、最上行バージョンに追加してファイルを保存します。すなわち

注-確実に確認するために、以下の変更されたパッケージをインストールした後、以下のリンクされた質問に従ってバージョンをロックします。

ここに画像の説明を入力してください

パッケージをビルドする

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

コーヒーを飲みに行く...

cd ..
sudo dpkg -i gedit*.deb

リンクされた質問:

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

1
これ、私の先生、SICKです!どうもありがとう、...これは仕事を願っています
リチャード・ロドリゲス

...確かにテスト中に行った... NB-geditをドラッグしてエッジを重ねると、新しいインスタンスが開きますが、デスクトップ内にgeditがある場合、新しいインスタンスはタブ。上記のコンパイルでは、「return FALSE」または「return TRUE」でコンパイルされた場合に応じて、常に新しいインスタンスまたはタブで開きます。
fossfreedom

私はこのソリューションが正式に機能していることを確認しています!
リチャードロドリゲス

3
神聖な@fossfreedom、私はあなたにお礼を言います、あなたは今回やりました、この答えの品質と解決策はimbaです。できれば、その投票ボタンを押して終日過ごします!Gj。
ブルーノペレイラ

2
プルリクエストを作成して設定変数を作成し、「$ config-variableの場合はFALSEを返す」という単純な(擬似コード)を実行する方が良いと思われます。提案された方法は、無期限に更新をロックアウトします。
pbhj

13

すべてのファイルを1つのgeditウィンドウだけで開きたいと思いました。私はこの情報を他のどこにも見つけませんでしたが、次の変更により、すべてのテキストファイルを新しいタブとして1つのウィンドウでのみ開くことができました(ランチャー、nautilus、Gnome DO経由)。

  1. ディスプレイ番号を取得しますecho $DISPLAY。コマンドラインに入力します。たとえば:0、ディスプレイ番号として取得します。

  2. /usr/share/applications/gedit.desktopテキストエディタでスーパーユーザーとして開きます。

  3. 次の行を変更します:

    Exec=gedit %U
    

    Exec=gedit --display=:0 %U
    

    :0ディスプレイ番号はどこですか。


2
geditを再コンパイルして奇妙なパッケージハックを行うよりもはるかに優れています。ありがとう!
rcrogers

1
コマンドラインからこのオプションを使用して実行しても、gedit新しいインスタンス(ウィンドウ)を開くことができます。少なくとも現在のバージョン3.18では。
-alfC

バージョン3.28.1では、コマンドラインとGUIの両方から動作します。ただし、再起動が必要です
エフィー

2

これはランダムには発生しません

デフォルトでは、Geditは多くのインスタンスを開くように作られていませんが、各ディスプレイは1つです。まだGeditがGeditでファイルを開いていない場所でディスプレイを開くと、Witchが現在開いているファイルからGitchが表示されます。

したがって、geditの最初のインスタンスをすべてのワークスペースに配置して、アクティブな表示に従うことができます。または、各プロジェクトで各ワークスペースで作業し、それぞれに独自のGeditを開きます。キーボードショートカットでは、すべてのワークスペースでウィンドウビーイングを切り替えるための新しいショートカットを作成できます。

または、[アプリケーションから開く]のショートカットコマンドを使用して、新しいインスタンスで常に開くことができます。 gedit --new-window

だから、リセットで開いたPHPプロパティで試して、Geditだけで新しいオープニングを置くことができます

gedit --help-allullを使用すると、geditで開く他のオプションを参照してください。

また、すべての構成ファイルを使用してgeditを削除し、クリーンインストールすることもできます。 sudo apt-get purge gedit && sudo apt-get clean && sudo apt-get update && sudo apt-get install gedit

更新:私は再現することができました-ウィンドウを画面から少し動かしてから、いくつかのファイルを開くと新しいウィンドウが開きます。それはどういうわけか別のディスプレイにあると考えています。


はい、ランダムに発生します。それがポイントです。実装にはバグがあり、堅牢ではありません。たとえば、私はやったことがありませんが、geditは今日、以前のように正常に動作した後、これを常に新しいウィンドウモードに切り替えることをランダムに決定しました
...-spinkus

1

これは私に起こり始めました。関連するconfファイルが見つからず、purge + cleanを試しました。最後にそれが何であるかを見つけました。Geditウィンドウが開いていたため、最大化されているように見えましたが、最大化されていませんでした。ウィンドウの最大化ボタンを押すと、問題が修正されました!ウィンドウのサイズは変更されず、角のみが丸から四角に変わったことに注意してください。これは上記のアルゴリズム@fossfreedomのバグに違いないようです。

注:ウィンドウを閉じるとき、最大化/最小化状態はどこかのユーザー設定に保存する必要があります。この状態は、purge + cleanの後も存続し、ユーザーごとのGedit confにもありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.