c - 检测 GTK 文本缓冲区中的光标移动

标签 c gtk

我正在使用 C 编写 GTK+ 编辑器。我添加了一个功能,可以在 TextView 中显示光标位置的当前行号和列号。它运作良好。但缺点是当我尝试使用箭头键移动光标时,行号和列号不会更新。下面是我更新行号和列号的代码

    update_statusbar(GtkTextBuffer *buffer,GtkStatusbar  *statusbar)
{
  gchar *msg;
  gint row, col;
  GtkTextIter iter;

  gtk_statusbar_pop(statusbar, 0); 
  g_print("c");
  gtk_text_buffer_get_iter_at_mark(buffer,
      &iter, gtk_text_buffer_get_insert(buffer));

  row = gtk_text_iter_get_line(&iter);
  col = gtk_text_iter_get_line_offset(&iter);

  msg = g_strdup_printf("Col %d Ln %d", col+1, row+1);

  gtk_statusbar_push(statusbar, 0, msg);

  g_free(msg);
}

int main ( int argc, char *argv[])
{
.
.
.
.
.
.
  g_signal_connect(buffer, "changed", G_CALLBACK(update_statusbar), statusbar);
  update_statusbar(buffer, GTK_STATUSBAR (statusbar));

}

我想问题出在“已更改”信号上。由于光标是用箭头键移动的,所以缓冲区不会改变。那么谁能建议我更好的方法来解决这个问题。

提前致谢:)。

最佳答案

TextBuffer "cursor-position" property具有插入标记(又名光标)的缓冲区偏移量。与此属性更改对应的信号名为“notify::cursor-position”,并且是一个通知信号 defined in gobject .

关于c - 检测 GTK 文本缓冲区中的光标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518102/

相关文章:

c - 在 PostgreSQL 源代码中向缓冲区描述添加属性,现在出现自旋锁错误?

c - 为什么程序有时会出现 "skip over"printfs?

c++ - sprintf 和 char [] 与字符串

c++ - 比较 GTK+、Qt 和 MATLAB 为用 C++ 编写的科学程序开发 GUI

c - 设置gtk比例尺的大小

c - 动态库函数转换

c - 简单字符设备驱动程序/模块 - Linux RedHat 8 (2.4.18) 在 ./module_unload 后出现 VM 段错误

c++ - 使用 R 创建图形/绘图/图表并使用 GTK 显示它们并与之交互

linux - webkit-gtk 编译错误

c - gtk+ 3.x 键绑定(bind) - 苦苦挣扎