업데이트된 답변:

업데이트된 답변:

gtk3 앱(예: Firefox)에서 파일을 열거나 저장하려는 경우 문자를 입력한 후 원치 않는 검색 기능이 나타납니다.

오래되고 생산적인 행동: 타이핑을 하면 d로 시작하는 첫 번째 파일이 제공되고 d, 타이핑을 de하면 de.

새롭고 원치 않는 동작: 입력하면 d검색 프로세스가 시작되고 /home/myuser/Downloads/somestuff/DETLEFF시스템 어딘가에 나에게 또는 다른 파일이 제공됩니다.

예: Gtk3FileChooser

어떻게 하면 예전의 생산적인 행동으로 다시 바꿀 수 있나요?

내 시스템: archliux64, Gtk3: 3.18.6, windowmanager: fluxbox

답변1

찾고 있는 기능은 "typeahead"라고 하며 에서는 비활성화되어 있습니다 GtkFileChooserDialog. gtk3-typeaheadAUR에서 이전 동작을 복원합니다.

패키지 작성자자동 완성 기능 비활성화가 하드코딩되어 있다고 합니다.GTK+와버그 보고서"이것은 버그가 아닙니다. 자동 검색 기능을 제거한 것은 매우 의도적인 것입니다."

이제 이름/주소 필드에 쉘의 동작을 모방하는 일부(부분적으로 손상된) 탭 완성이 있습니다.

답변2

업데이트된 답변:

2019년 현재, 나는 그 이후로Arch의 AUR 저장소(하지만아직도 내 데비안 시스템에 있어). 나는 또한 작은(다소 사소한) 패치를 사용하여 FreeBSD에서도 이 작업을 수행했습니다. 이것은 "아치로 전환" 답변이 아닙니다.

처음에는 설정하기가 조금 어려웠지만 그 요점은 실제로 Arch의 makepkg프로그램을 컴파일하고 이를 데비안에서 AUR 저장소를 컴파일하는 데 사용할 수 있다는 것입니다. 나는 이렇게 했습니다(일부 종속성을 잊어버렸을 수도 있음).

내 이전 답변은 하단 근처의 구분 기호 뒤에 여전히 존재합니다.

1) 건물 makepkg:

sudo apt-get install bsdtar # pacman depends on bsdtar (libarchive) these days
git clone git://projects.archlinux.org/pacman.git
cd pacman
./configure --sysconfdir=/etc --localstatedir=/var --prefix=/opt/arch # Put built program outside of the usual '/usr/local' when installed to avoid conflicts
make
sudo make install # Install pacman/makepkg

# Make a directory pacman expects to exist to dodge makepkg errors
sudo mkdir -p /var/cache/pacman/pkg

2) GTK3 소스 컴파일 준비:

이제 빌드하고 설치해보겠습니다 gtk3-typeahead. Arch와 거의 동일한 모든 (debian) 빌드 종속성을 얻으려면 먼저 필요한 패키지를 성공적으로 가져올 수 deb-src있도록 source.list에 한 줄이 있어야 합니다 .apt-get build-dep-dev

내에는 sources.list이를 수행하기 위한 다음 줄이 포함되어 있습니다. 릴리스 및 가장 가까운 서버에 따라 라인을 변경하십시오.

deb-src http://ftp.us.debian.org/debian/ sid main contrib

3) 건물 gtk3-typeahead:

그런 다음 다음을 실행하여 빌드할 수 있습니다 gtk3-typeahead.

sudo apt-get update
sudo apt-get build-dep 'gtk+3.0' # install gtk3 build dependencies

mkdir /path/to/put/arch/git/repo/into
cd /path/to/put/arch/git/repo/into
git clone https://aur.archlinux.org/gtk3-typeahead.git gtk3-typeahead
cd gtk3-typeahead

# Tack onto configure script arguments so that libraries overwrite the official
# Debian ones in /usr/lib/x86_64-linux-gnu, instead of installing to /usr/lib. 
# CHANGE THIS APPROPRIATELY IF RUNNING 32-BIT (or some other architecture like POWER/MIPS)
sed '/\-\-sysconfdir=/a\
        --libdir=/usr/lib/x86_64-linux-gnu \\' PKGBUILD > PKGBUILD2
mv PKGBUILD2 PKGBUILD

# temporarily add archlinux programs to PATH so we can use 'makepkg'
PATH="/opt/arch/bin:""$PATH"

# Don't check pacman dependencies, since our dependency libraries weren't
# installed via pacman like makepkg expects!
makepkg --nodeps

.tar.gz이 작업을 수행하면 바이너리가 git 트리 한 단계 위의 아카이브 에 압축됩니다 . 내 예에서는 이것이 디렉터리입니다 into.

설치하려면:

TARBALLPATH="$(readlink -f gtk3-typeahead-*.tar.gz | sort | tail -n 1)" # get full path to tarball of most recent build, if multiple are available
cd /
bsdtar xf "$TARBALLPATH"

이것은 스크립트 작성 가능성이 매우 높으며 내 소견으로는 이전 스크립트를 다루는 것보다 덜 까다롭습니다. 또한 더 이상 데비안에 의존하지 않습니다.


원래 답변:

1년이 지났지만 GTK3 사람들이 이 동작을 다시 컴파일하지 않고는 되돌릴 수 없는 방법으로 하드코딩하기로 결정했기 때문에 이것이 여전히 나를 짜증나게 합니다.

그러나 Typeahead는 Ubuntu에 배포된 대로 gtk3에 다시 패치되었습니다.

Ubuntu는 또한 파일이 이미 선택된 경우 한 번만 클릭하도록 요구하는 대신 파일 선택기에 두 번 클릭하여 파일을 선택하도록 만들었습니다. gtk3 소스 코드 패치에 문제가 없다면,나는 gtk+ 3.22.7부터 작동하는 패치를 만들었습니다.우분투 패치를 결합하고 최신 버전의 GTK로 업데이트합니다.

추가적으로,나는 대본을 만들었다패키지 관리자에서 최신 버전의 소스를 자동으로 다운로드하고 패치하고 컴파일하는 데비안 시스템의 경우. Debian Sid에서 올바르게 실행되며 다른 Debian 배포판에서도 잘 작동합니다.

답변3

ctrl-lDebian Unstable에서는 창이 열릴 때(l은 미리보기)를 눌러 자동 완성 기능을 얻을 수 있지만 파일 저장 대화 상자가 아닌 파일 열기 대화 상자에만 해당됩니다. 파일 저장 대화 상자의 경우 ctrl-l저장할 파일 이름만 강조 표시됩니다. 보다 지능적인 방법으로 탐색하려면 올바른 조합으로 , 를 ~입력 하여 홈 디렉터리, 현재 디렉터리 또는 루트에서 디렉터리 경로를 가져올 수 있습니다. 또한 뒤로 화살표 키를 누르면 이름 선택이 취소되고 상자에 커서가 유지되므로 현재 이름이 손실되지 않습니다("다른 이름으로 저장" 작업에서 발생하는 것처럼)./.

이전 동작이 훨씬 더 나은 것 같습니다 :)

답변4

데비안의 경우: 다음 짧은 스크립트는 make install보다 선호될 수 있는 (패치된) 일반 debian-package를 생성하고 설치합니다. 패치는 다음에서 가져옵니다.여기문제를 일으키는 것으로 보고된 첫 번째 블록은 제거되었습니다. Debian 10 Buster에서 성공적으로 테스트했습니다.

#!/usr/bin/env bash
set -e

# provide the patch path
path_patch=typeahead.patch

sudo apt-get build-dep libgtk-3-dev
apt-get source libgtk-3-dev
cd $(find gtk* -maxdepth 0 -type d)
patch gtk/gtkfilechooserwidget.c < "$path_patch"
debuild -b  -us -uc  --no-pre-clean
cd ..
sudo dpkg -i libgtk-3-0_*.deb
# do not update (dist-upgrade)
sudo apt-mark hold libgtk-3-0

이것을 typeahead.patch로 저장하십시오:

@@ -1399,12 +1405,6 @@
           return TRUE;
         }
     }
-  else if (gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event))
-    {
-      if (priv->operation_mode != OPERATION_MODE_SEARCH)
-        operation_mode_set (impl, OPERATION_MODE_SEARCH);
-      return TRUE;
-    }

   if (GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->key_press_event (widget, event))
     return TRUE;
@@ -2427,7 +2427,7 @@
 {
   GtkFileChooserWidgetPrivate *priv = impl->priv;

-  gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
+  gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), MODEL_COL_NAME);

   gtk_tree_view_column_set_sort_column_id (priv->list_name_column, MODEL_COL_NAME);
   gtk_tree_view_column_set_sort_column_id (priv->list_time_column, MODEL_COL_TIME);
@@ -4338,6 +4338,7 @@
   gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view),
                            GTK_TREE_MODEL (priv->browse_files_model));
   update_columns (impl, FALSE, _("Modified"));
+  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->browse_files_tree_view), TRUE);
   file_list_set_sort_column_ids (impl);
   set_sort_column (impl);
   profile_msg ("    gtk_tree_view_set_model end", NULL);
@@ -7098,10 +7099,6 @@
 {
   GList *l, *files, *files_with_info, *infos;
   GFile *file;
-  gboolean select = FALSE;
-
-  if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (impl->priv->search_model), NULL) == 0)
-    select = TRUE;

   files = NULL;
   files_with_info = NULL;
@@ -7129,8 +7126,6 @@
   g_list_free_full (infos, g_object_unref);

   gtk_stack_set_visible_child_name (GTK_STACK (impl->priv->browse_files_stack), "list");
-  if (select)
-    gtk_widget_grab_focus (impl->priv->browse_files_tree_view);
 }

 /* Callback used from GtkSearchEngine when the query is done running */
@@ -7427,6 +7422,7 @@
   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->recent_model),
                                         GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
                                         GTK_SORT_DESCENDING);
+  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (priv->browse_files_tree_view), TRUE);
 }

 typedef struct
@@ -7444,7 +7440,7 @@

   gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view),
                            GTK_TREE_MODEL (priv->recent_model));
-  gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
+  gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), MODEL_COL_NAME);

   gtk_tree_view_column_set_sort_column_id (priv->list_name_column, -1);
   gtk_tree_view_column_set_sort_column_id (priv->list_time_column, -1);

관련 정보