簡體   English   中英

info命令和手冊頁

[英]info command and man pages

Fedora 19 {雖然我懷疑這是相關的]

如果我為一個實際上沒有info節點的主題調用info命令,但確實有一個手冊頁,那么info顯然會在手冊頁中創建一個名為(*manpages*)<topic>的節點。

我既不能在任何地方找到這個特征,也不能(顯然)描述它是如何完成的。

有人能指點我這方面的一些文件嗎?

我查看了GNU獨立信息手冊GNU Info手冊 ,發現只有一個小符號表示此功能存在。 選項描述中 -我們可以讀到這個:

--all -a

 Find all files matching the given menu-item (a file or node name). Three usage patterns are supported, as follows. First, if --all is used together with --where, info prints the names of all matching files found on standard output (including *manpages* if relevant) and exits. 

所以我擔心唯一的文檔是源代碼。 info.c中,您可以找到以下功能。 尋找“回歸加載手冊頁”。 評論。

/* Get the initial Info file, either by following menus from "(dir)Top",
   or what the user specifed with values in filename. */
static char *
get_initial_file (char *filename, int *argc, char ***argv, char **error)
{
  char *initial_file = 0;           /* First file loaded by Info. */
  REFERENCE *entry;

  /* If there are any more arguments, the initial file is the
     dir entry given by the first one. */
  if (!filename && (*argv)[0])
    {
      /* If they say info -O info, we want to show them the invocation node
         for standalone info; there's nothing useful in info.texi.  */
      if (goto_invocation_p && (*argv)[0]
          && mbscasecmp ((*argv)[0], "info") == 0)
        (*argv)[0] = "info-stnd";

      entry = lookup_dir_entry ((*argv)[0], 0);
      if (entry)
        {
          initial_file = info_find_fullpath (entry->filename, 0);
          if (initial_file)
            {
              (*argv)++; /* Advance past first remaining argument. */
              (*argc)--;

              /* Store full path, so that we find the already loaded file in
                 info_find_file, and show the full path if --where is used. */
              entry->filename = initial_file;
              add_pointer_to_array (info_copy_reference (entry),
                  ref_index, ref_list, ref_slots, 2);
              return initial_file;
            }
        }
    }

  /* User used "--file". */
  if (filename)
    {
      initial_file = info_find_fullpath (filename, 0);

      if (!initial_file)
        {
          if (filesys_error_number)
            *error = filesys_error_string (filename, filesys_error_number);
        }
      else
        return initial_file;
    }

  /* File name lookup. */
  if (!filename && (*argv)[0])
    {
      /* Try finding a file with this name, in case
         it exists, but wasn't listed in dir. */
      initial_file = info_find_fullpath ((*argv)[0], 0);
      if (initial_file)
        {
          (*argv)++; /* Advance past first remaining argument. */
          (*argc)--;
          return initial_file;
        }
      else
        asprintf (error, _("No menu item `%s' in node `%s'."),
            (*argv)[0], "(dir)Top");
    }

  /* Fall back to loading man page. */
  if (filename || (*argv)[0])
    {
      NODE *man_node;

      debug (3, ("falling back to manpage node"));

      man_node = get_manpage_node (filename ? filename : (*argv)[0]);
      if (man_node)
        {
          add_pointer_to_array
            (info_new_reference (MANPAGE_FILE_BUFFER_NAME,
               filename ? filename : (*argv)[0]),
             ref_index, ref_list, ref_slots, 2);

          initial_file = MANPAGE_FILE_BUFFER_NAME;
          return initial_file;
        }
    }

  /* Inexact dir lookup. */
  if (!filename && (*argv)[0])
    {
      entry = lookup_dir_entry ((*argv)[0], 1);
      if (entry)
        {
          (*argv)++; /* Advance past first remaining argument. */
          (*argc)--;
          /* Clear error message. */
          free (*error);
          *error = 0;

          initial_file = info_find_fullpath (entry->filename, 0);
          /* Store full path, so that we find the already loaded file in
             info_find_file, and show the full path if --where is used. */
          entry->filename = initial_file;
          add_pointer_to_array (info_copy_reference (entry),
              ref_index, ref_list, ref_slots, 2);
          return initial_file;
        }
    }

  /* Otherwise, we want the dir node.  The only node to be displayed
     or output will be "Top". */
  return 0;
}

man.h包含MANPAGE_FILE_BUFFER_NAME的定義:

#define MANPAGE_FILE_BUFFER_NAME "*manpages*"

info是一個像man這樣的命令,你可以測試命令: info make but info以Info格式閱讀文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM